# FEMur API Reference (full) FEMur is a 3D beam, truss and shell linear static and eigenvalue analysis library for Grasshopper (Rhino). This file describes the public .NET API of FEMur.dll, which you can call from a Grasshopper C# script component or from any .NET application. Every public type and member is listed below with its exact C# signature. If a member is not listed here, it does not exist in the public API. ## FEMur.Common.Units ### FEMur.Common.Units.ForceUnit public enum ForceUnit 力の単位 Fields: N = 0 ニュートン kN = 1 キロニュートン kgf = 2 キログラム重 tonf = 3 トン重 lbf = 4 ポンド重 kips = 5 キップ (1000 lbf) ### FEMur.Common.Units.LengthUnit public enum LengthUnit 長さの単位 Fields: mm = 0 ミリメートル cm = 1 センチメートル m = 2 メートル inch = 3 インチ ft = 4 フィート ### FEMur.Common.Units.UnitConverter public static class UnitConverter 単位変換と表示用のユーティリティクラス Methods: public static double GetForceConversionFactor(ForceUnit unit) 力の単位変換係数を取得(基準単位: N) public static double ConvertForce(double valueInN, ForceUnit targetUnit) 力の値を指定された単位に変換 public static double GetLengthConversionFactor(LengthUnit unit) 長さの単位変換係数を取得(基準単位: mm) public static double ConvertLength(double valueInMm, LengthUnit targetUnit) 長さの値を指定された単位に変換 public static double GetMomentConversionFactor(ForceUnit forceUnit, LengthUnit lengthUnit) モーメントの単位変換係数を取得(基準単位: N·mm) public static double ConvertMoment(double valueInNMm, ForceUnit forceUnit, LengthUnit lengthUnit) モーメントの値を指定された単位に変換 public static double GetDistributedLoadConversionFactor(ForceUnit forceUnit, LengthUnit lengthUnit) 分布荷重の単位変換係数を取得(基準単位: N/mm) public static double ConvertDistributedLoad(double valueInNPerMm, ForceUnit forceUnit, LengthUnit lengthUnit) 分布荷重の値を指定された単位に変換 public static double GetPressureConversionFactor(ForceUnit forceUnit, LengthUnit lengthUnit) 面圧(応力)の単位変換係数を取得(基準単位: N/mm²) public static double ConvertPressure(double valueInNPerMm2, ForceUnit forceUnit, LengthUnit lengthUnit) 面圧(応力)の値を指定された単位に変換 public static string GetForceUnitSymbol(ForceUnit unit) 力の単位記号を取得 public static string GetLengthUnitSymbol(LengthUnit unit) 長さの単位記号を取得 public static string GetMomentUnitSymbol(ForceUnit forceUnit, LengthUnit lengthUnit) モーメントの単位記号を取得 public static string GetDistributedLoadUnitSymbol(ForceUnit forceUnit, LengthUnit lengthUnit) 分布荷重の単位記号を取得 public static string GetPressureUnitSymbol(ForceUnit forceUnit, LengthUnit lengthUnit) 面圧(応力)の単位記号を取得 public static string FormatForce(double valueInN, ForceUnit targetUnit, string format = "F2", bool includeUnit = true) 力の値をフォーマットして文字列に変換 public static string FormatLength(double valueInMm, LengthUnit targetUnit, string format = "F2", bool includeUnit = true) 長さの値をフォーマットして文字列に変換 public static string FormatMoment(double valueInNMm, ForceUnit forceUnit, LengthUnit lengthUnit, string format = "F2", bool includeUnit = true) モーメントの値をフォーマットして文字列に変換 public static string FormatDistributedLoad(double valueInNPerMm, ForceUnit forceUnit, LengthUnit lengthUnit, string format = "F2", bool includeUnit = true) 分布荷重の値をフォーマットして文字列に変換 ## FEMur.Constraints ### FEMur.Constraints.DofCoupling public sealed class DofCoupling : SupportBase 従属自由度の設定。Targets の節点の指定した自由度を、リモート点の同じ自由度と同値にする。 レバーアームを持たない単純な等値で、リモート点が離れていても腕の長さは効かない。 Grasshopper の Supports 端子で運ぶため SupportBase を継承する。 コアの Model は DofCouplings リストで保持する。 Properties: public int? RemoteNodeId { get; } リモート点の節点ID。座標で指定した場合は Model の構築時に解決される public Point3? RemotePosition { get; } リモート点の座標(節点IDで指定した場合は null) public IReadOnlyList Targets { get; } 従属節点 public IReadOnlyList Dofs { get; } 同値にする自由度 [UX, UY, UZ, RX, RY, RZ]。要素数は常に 6 Methods: public static DofCoupling AtNode(int remoteNodeId, IEnumerable targets, IEnumerable dofs) 既存節点をリモート点にする public static DofCoupling AtPoint(Point3 remotePosition, IEnumerable targets, IEnumerable dofs) 座標をリモート点にする。一致する節点がなければ Model の構築時に 要素につながらない節点を生成する。 public DofCoupling DeepCopy() この設定の複製を返す public override string ToString() Returns a string that represents the current object. ### FEMur.Constraints.DofCouplingTarget public sealed class DofCouplingTarget DofCoupling の従属節点 Properties: public int? NodeId { get; } 節点ID。座標で指定した場合は Model の構築時に解決される public Point3? Position { get; } 節点の座標(節点IDで指定した場合は null) public LocalFrame? Frame { get; } 従属する自由度を測る局所座標系。null は全体座標 Methods: public static DofCouplingTarget AtNode(int nodeId, LocalFrame? frame = null) 節点IDで指定する public static DofCouplingTarget AtPoint(Point3 position, LocalFrame? frame = null) 座標で指定する。座標に一致する節点が無ければモデル構築時にエラーになる public DofCouplingTarget DeepCopy() この従属節点の複製を返す ### FEMur.Constraints.RigidDiaphragm public sealed class RigidDiaphragm : IEquatable 剛床仮定(rigid diaphragm)の制約データ。指定した水平面上の節点群の面内自由度 (UX・UY・RZ)を MPC 主従変換で剛体的に連成させる。ソルバーが変換行列 T を構築する際に参照する。 Rhino 非依存で、対象節点の ID リストのみを保持する(Surface などのジオメトリは GH 層まで)。 Constructors: public RigidDiaphragm() public RigidDiaphragm(int id, IEnumerable nodeIds) public RigidDiaphragm(RigidDiaphragm other) コピーコンストラクタ(NodeIds は独立したリストとして複製) Properties: public int Id { get; set; } 剛床の一意識別子 public List NodeIds { get; set; } 剛床に属する節点の ID リスト(Node.Id、リストインデックスではない) Methods: public RigidDiaphragm DeepCopy() public bool Equals(RigidDiaphragm? other) Indicates whether the current object is equal to another object of the same type. public override bool Equals(object? obj) Determines whether the specified object is equal to the current object. public override int GetHashCode() Serves as the default hash function. public override string ToString() Returns a string that represents the current object. ## FEMur.CrossSections ### FEMur.CrossSections.CrossSection public abstract class CrossSection Properties: public string Name { get; set; } Methods: public CrossSection DeepCopy() この断面の複製を返す。 public override string ToString() Returns a string that represents the current object. ### FEMur.CrossSections.CrossSection_Beam public abstract class CrossSection_Beam : CrossSection Properties: public double A { get; set; } public double Asy { get; set; } public double Asz { get; set; } public double J { get; set; } public double Iyy { get; set; } public double Izz { get; set; } public double Iy { get; set; } public double Iz { get; set; } public double Zy { get; set; } public double Zz { get; set; } public double Cy { get; set; } 断面重心の Y 方向(高さ方向)オフセット [mm]。 幾何基準(外形の参照点)から重心までの距離。2軸対称断面では 0。 非対称断面(T形など)が設定する。 public double Cz { get; set; } 断面重心の Z 方向(幅方向)オフセット [mm]。 幾何基準(外形の参照点)から重心までの距離。2軸対称断面では 0。 非対称断面(溝形・L形など)が設定する。 Methods: public void Calculate_iy_iz() ### FEMur.CrossSections.CrossSection_Box public sealed class CrossSection_Box : CrossSection_Beam 角形鋼管(Box)の断面クラス t=0の場合は中実矩形断面として扱う Constructors: public CrossSection_Box() デフォルトコンストラクタ public CrossSection_Box(double b, double h, double t = 0, double r = 0) public CrossSection_Box(string name, double b, double h, double t = 0, double r = 0) パラメータ指定コンストラクタ Properties: public double B { get; set; } public double H { get; set; } public double t { get; set; } public double r { get; set; } Methods: public override string ToString() 文字列表現 ### FEMur.CrossSections.CrossSection_C public sealed class CrossSection_C : CrossSection_Beam 溝形断面(熱間圧延チャンネル "[" 形)。 左に鉛直ウェブ、上下に水平フランジを持つ開断面。 強軸(高さ方向)まわりに1軸対称のため重心 Y オフセットは 0。 重心は幅方向(Z)にウェブ側へずれる。隅肉(フィレット)は考慮せず、 ウェブと上下フランジをシャープ角の矩形で合成する。 注: JIS 熱間溝形鋼はフランジに内テーパを持つが、本クラスは 平行フランジで近似する(溶接組立チャンネル/PFC には厳密、 テーパ付き JIS 材では弱軸 Iy・重心位置が十数%程度ずれうる)。 軸の規約: Iyy=強軸(c_y→Zy)、Izz=弱軸(c_z→Zz)。 Constructors: public CrossSection_C() public CrossSection_C(string name, double h, double b, double t_w, double t_f) Properties: public double H { get; set; } public double B { get; set; } public double t_w { get; set; } public double t_f { get; set; } Methods: public override string ToString() Returns a string that represents the current object. ### FEMur.CrossSections.CrossSection_Circle public sealed class CrossSection_Circle : CrossSection_Beam 円形断面(中空)クラス - パイプ断面 Constructors: public CrossSection_Circle() デフォルトコンストラクタ public CrossSection_Circle(string name, double d, double t = 0) パラメータ指定コンストラクタ Properties: public double D { get; set; } public double t { get; set; } Methods: public override string ToString() 文字列表現 ### FEMur.CrossSections.CrossSection_CLipped public sealed class CrossSection_CLipped : CrossSection_Beam Cチャンネル断面(リップ溝形鋼 / 軽量C形鋼・冷間成形)。 ウェブ・上下フランジ・内向きリップを板厚 t 一定の帯材から曲げ成形した開断面。 強軸(高さ方向)まわりに1軸対称のため重心 Y オフセットは 0。 重心は幅方向(Z)にウェブ側へずれる。曲げ部はシャープ角(曲げ半径は考慮しない) とし、中心線法(midline 法)でモデル化する。各直線部は厚みを持つ矩形として 自身の断面二次モーメントも算入し、隣接板の中心線は角点で交わる。 軸の規約: Iyy=強軸(c_y→Zy)、Izz=弱軸(c_z→Zz)。 Constructors: public CrossSection_CLipped() public CrossSection_CLipped(string name, double h, double a, double b, double t) Properties: public double H { get; set; } public double A_flange { get; set; } public double B_lip { get; set; } public double t { get; set; } Methods: public override string ToString() Returns a string that represents the current object. ### FEMur.CrossSections.CrossSection_Custom public sealed class CrossSection_Custom : CrossSection_Beam ユーザーが断面性能を直接入力して定義する任意断面クラス。 形状寸法を持たず、A / Iyy / Izz / J / Asy / Asz を直接保持する。 Asy / Asz が 0 のときソルバーはせん断変形を無視(Euler-Bernoulli 梁)として扱う。 Constructors: public CrossSection_Custom() デフォルトコンストラクタ public CrossSection_Custom(string name, double a, double iyy, double izz, double j, double asy = 0, double asz = 0) 断面性能を直接指定するコンストラクタ Methods: public override string ToString() 文字列表現 ### FEMur.CrossSections.CrossSection_H public sealed class CrossSection_H : CrossSection_Beam Constructors: public CrossSection_H() public CrossSection_H(string name, double b, double h, double t_f, double t_w, double r) Properties: public double B { get; set; } public double H { get; set; } public double t_f { get; set; } public double t_w { get; set; } public double r { get; set; } Methods: public override string ToString() Returns a string that represents the current object. ### FEMur.CrossSections.CrossSection_L public sealed class CrossSection_L : CrossSection_Beam L形断面(山形鋼 / アングル)。鉛直脚(長さ A)と水平脚(長さ B)を持つ。 等辺は A=B の特例。対称軸を持たない非対称断面で、重心は Y・Z 両方にずれ、 断面主軸が幾何軸から回転する。 形状モデル: 2つの矩形(鉛直 A×t・水平 B×t)から重なり t×t を引いた シャープ角の合成断面(隅肉は考慮しない)。 基底の Iyy/Izz には幾何軸(脚に平行な重心軸)まわりの値(JIS表の Ix/Iy 相当)を格納し、 断面相乗モーメント Iyz・主断面二次モーメント Iu/Iv・ 主軸角 PrincipalAngleDeg を参考値として保持する (現フレームワークのソルバーは Iyy/Izz の2値のみ使用し、主軸結合は未対応)。 Constructors: public CrossSection_L() public CrossSection_L(string name, double a, double b, double t) Properties: public double A_leg { get; set; } public double B_leg { get; set; } public double t { get; set; } public double Iyz { get; set; } 断面相乗モーメント Iyz [mm⁴](重心・幾何軸まわり) public double Iu { get; set; } 強主断面二次モーメント Iu [mm⁴] public double Iv { get; set; } 弱主断面二次モーメント Iv [mm⁴] public double iu { get; set; } 強主軸まわりの断面二次半径 iu [mm] public double iv { get; set; } 弱主軸まわりの断面二次半径 iv [mm] public double PrincipalAngleDeg { get; set; } 主軸角 [deg](幾何 Y 軸から強主軸 u までの回転角) Methods: public override string ToString() Returns a string that represents the current object. ### FEMur.CrossSections.CrossSection_Shell public sealed class CrossSection_Shell : CrossSection Constructors: public CrossSection_Shell() public CrossSection_Shell(double thickness) Properties: public double Thickness { get; } ### FEMur.CrossSections.CrossSection_T public sealed class CrossSection_T : CrossSection_Beam T形断面(CT形鋼相当)。上にフランジ、下にウェブを持つ。 ウェブ中心の鉛直軸(Z=0)に1軸対称のため重心 Z オフセットは 0。 重心は高さ方向(Y)にずれる。隅肉(フィレット)はウェブとフランジ下面の 結合部の左右2箇所を Fillet で考慮する。 軸の規約は既存断面に準拠: Iyy=強軸(高さ方向に関する曲げ, c_y→Zy)、 Izz=弱軸(幅方向, c_z→Zz)。 Constructors: public CrossSection_T() public CrossSection_T(string name, double h, double b, double t_w, double t_f, double r) Properties: public double H { get; set; } public double B { get; set; } public double t_w { get; set; } public double t_f { get; set; } public double r { get; set; } Methods: public override string ToString() Returns a string that represents the current object. ## FEMur.Elements ### FEMur.Elements.AxisymmetricElement public sealed class AxisymmetricElement : ElementBase 3節点または4節点の軸対称要素。1要素 = XY 平面上の断面メッシュ1面。 断面を回転軸まわりに1周させたリングを表し、節点の値(荷重・ばね定数・反力・質量)は全周の合計とする。 四角形は Q4 に Wilson の非適合モード4個を加えて静的縮約し(体積平均補正でパッチテストを満たす)、 三角形は線形三角形とする。有効自由度は全体の UX・UY のみで、要素ローカルの DOF 順は [ur, uz] × 節点数(ur: 半径方向、uz: 軸方向)。断面(CrossSection)は持たない。 同じモデルには軸対称要素だけを置ける。全要素の軸が一致すること、全節点が XY 平面上かつ軸の片側に あることは Model 構築時に検証する。 Constructors: public AxisymmetricElement() public AxisymmetricElement(AxisymmetricElement other) Properties: public Point3 AxisOrigin { get; set; } 回転軸上の1点 [mm]。既定は原点 public Vector3 AxisDirection { get; set; } 回転軸の向き。長さは問わない(使うときに単位化する)。既定は全体 Y 軸 (0, 1, 0)。 ゼロベクトルや XY 平面から外れた向きは Model 構築時にエラーになる。 Methods: public static AxisymmetricElement FromPoints(IReadOnlyList? corners, Material material, Point3? axisOrigin = null, Vector3? axisDirection = null, int id = -1) 座標から軸対称要素を作成する(節点は Model 構築時に自動生成・共有される) public static AxisymmetricElement FromNodeIds(IReadOnlyList? nodeIds, Material material, Point3? axisOrigin = null, Vector3? axisDirection = null, int id = -1) 節点IDから軸対称要素を作成する public override string ToString() Returns a string that represents the current object. ### FEMur.Elements.BeamElement public sealed class BeamElement : LineElement Constructors: public BeamElement() public BeamElement(int id, int node1Id, int node2Id, Material material, CrossSection_Beam crossSection, double betaAngle = 0) public BeamElement(int id, Node node1, Node node2, Material material, CrossSection_Beam crossSection, double betaAngle = 0) public BeamElement(int id, Point3 point1, Point3 point2, Material material, CrossSection_Beam crossSection, double betaAngle = 0) public BeamElement(BeamElement other) Methods: public static BeamElement FromNodeIds(int node1Id, int node2Id, Material material, CrossSection_Beam crossSection, double betaAngle = 0, int id = -1) 節点ID 2点から作成(id 省略時は未割当=-1) public static BeamElement FromNodes(Node node1, Node node2, Material material, CrossSection_Beam crossSection, double betaAngle = 0, int id = -1) 節点 2点から作成(id 省略時は未割当=-1) public static BeamElement FromPoints(Point3 point1, Point3 point2, Material material, CrossSection_Beam crossSection, double betaAngle = 0, int id = -1) 座標 2点から作成(id 省略時は未割当=-1。Model 構築時にノード自動生成) public static void CalcShearPhi(Material material, CrossSection_Beam cs, double L, out double phiY, out double phiZ) Timoshenko せん断パラメータ φ を計算する共有ヘルパー(#121)。 剛性行列(CalcLocalStiffness)と等価節点荷重(EquivalentNodalForceCalculator)の 両方がこの実装を使うことで、剛性と荷重の定式化が乖離しないようにする。 Asy/Asz <= 0 または G <= 0 はせん断変形を無視(Euler-Bernoulli梁, φ=0)。 せん断面積は「たわみ方向」で選ぶ: Y軸まわり曲げ(Iyy・dz-ryブロック)は局所Zたわみ → Asz、 Z軸まわり曲げ(Izz・dy-rzブロック)は局所Yたわみ → Asy(#76) public override string ToString() Returns a string that represents the current object. ### FEMur.Elements.CompressionOnlyTrussElement public sealed class CompressionOnlyTrussElement : StatusTrussElementBase 圧縮専用トラス要素。δ < 0(短縮 = 圧縮)のときのみ剛性を発現する。 引張状態では剛性がゼロとなり、力を伝達しない。 Constructors: public CompressionOnlyTrussElement() public CompressionOnlyTrussElement(int id, int node1Id, int node2Id, Material material, CrossSection_Beam crossSection, double betaAngle = 0) public CompressionOnlyTrussElement(int id, Node node1, Node node2, Material material, CrossSection_Beam crossSection, double betaAngle = 0) public CompressionOnlyTrussElement(int id, Point3 point1, Point3 point2, Material material, CrossSection_Beam crossSection, double betaAngle = 0) public CompressionOnlyTrussElement(CompressionOnlyTrussElement other) Methods: public static CompressionOnlyTrussElement FromNodeIds(int node1Id, int node2Id, Material material, CrossSection_Beam crossSection, double betaAngle = 0, int id = -1) 節点ID 2点から作成(id 省略時は未割当=-1) public static CompressionOnlyTrussElement FromNodes(Node node1, Node node2, Material material, CrossSection_Beam crossSection, double betaAngle = 0, int id = -1) 節点 2点から作成(id 省略時は未割当=-1) public static CompressionOnlyTrussElement FromPoints(Point3 point1, Point3 point2, Material material, CrossSection_Beam crossSection, double betaAngle = 0, int id = -1) 座標 2点から作成(id 省略時は未割当=-1。Model 構築時にノード自動生成) public override string ToString() Returns a string that represents the current object. ### FEMur.Elements.ElementBase public abstract class ElementBase Constructors: protected ElementBase() protected ElementBase(int id, List nodeIds, Material material, CrossSection crossSection) protected ElementBase(int id, List points, Material material, CrossSection crossSection) public ElementBase(ElementBase other) コピーコンストラクタ(シャローコピー) DeepCopyが必要な場合は派生クラスでDeepCopy()メソッドを使用すること Properties: public int Id { get; set; } public List? NodeIds { get; set; } public List? Points { get; set; } public Material? Material { get; set; } public CrossSection? CrossSection { get; set; } public IReadOnlyList? LocalAxisX { get; } 局所X軸(部材軸方向)の単位ベクトル。座標系が未計算のときは null。 public IReadOnlyList? LocalAxisY { get; } 局所Y軸の単位ベクトル。座標系が未計算のときは null。 public IReadOnlyList? LocalAxisZ { get; } 局所Z軸の単位ベクトル。座標系が未計算のときは null。 protected string IdLabel { get; } 表示用の ID ラベル。未割当(Id < 0)のときは "---" を返す。 採番は組立(Model 構築)時に行われるため、生(未組立)の要素は未割当のまま表示される(#68)。 Methods: public ElementBase DeepCopy() この要素の複製を返す。 public override abstract string ToString() Returns a string that represents the current object. ### FEMur.Elements.LineElement public abstract class LineElement : ElementBase Constructors: public LineElement() protected LineElement(int id, Point3 point1, Point3 point2, Material material, CrossSection_Beam crossSection, double betaAngle = 0) public LineElement(int id, int node1Id, int node2Id, Material material, CrossSection_Beam crossSection, double betaAngle = 0) public LineElement(LineElement other) Properties: public double BetaAngle { get; set; } public int Start { get; } 始端ノードのID(NodeIds[0]のエイリアス) public int End { get; } 終端ノードのID(NodeIds[1]のエイリアス) Methods: public void CalcLocalAxis(IReadOnlyDictionary nodesById) 節点IDをキーとした辞書から局所座標系を計算する(O(1) のノード参照)。 Model 構築時の要素座標系設定(ElementCoordinateSystemHelper)から呼ばれ、 要素ごとの線形探索による O(要素数 × 節点数) を回避するためのオーバーロード。 ### FEMur.Elements.PlaneCondition public enum PlaneCondition 平面要素(PlaneElement)の面外方向の仮定 Fields: Stress = 0 平面応力(σz = 0)。薄い板の面内問題 Strain = 1 平面ひずみ(εz = 0)。奥行き方向に一様な長い物体の断面 ### FEMur.Elements.PlaneElement public sealed class PlaneElement : ElementBase 3節点または4節点の平面応力・平面ひずみ要素。1要素 = XY 平面上のメッシュ1面。 節点の値(荷重・ばね定数・反力・質量)は厚さ Thickness 分の値とする。 四角形は Q4 に Wilson の非適合モードを加えて静的縮約し(QM6 補正でパッチテストを満たす)、 三角形は定ひずみ三角形とする。有効自由度は全体の UX・UY のみで、要素ローカル軸は全体軸と同じ。 節点の並びは時計回り・反時計回りのどちらでもよい。断面(CrossSection)は持たない。 同じモデルには平面要素だけを置ける。全節点が XY 平面上にあること、厚さが正であることは Model 構築時に検証する。 Constructors: public PlaneElement() public PlaneElement(PlaneElement other) Properties: public double Thickness { get; set; } 厚さ [mm](平面ひずみでは奥行き)。正の有限値であることは Model 構築時に検証する public PlaneCondition Condition { get; set; } 平面応力か平面ひずみか。既定は平面応力 Methods: public static PlaneElement FromPoints(IReadOnlyList? corners, Material material, double thickness, PlaneCondition condition, int id = -1) 座標から平面要素を作成する(節点は Model 構築時に自動生成・共有される) public static PlaneElement FromNodeIds(IReadOnlyList? nodeIds, Material material, double thickness, PlaneCondition condition, int id = -1) 節点IDから平面要素を作成する public override string ToString() Returns a string that represents the current object. ### FEMur.Elements.ShellElement public sealed class ShellElement : ElementBase 3節点または4節点のシェル要素。1要素 = メッシュ1面。 要素ローカル平面上で「面内(Q4+非適合モード / Allman)」「板曲げ+面外せん断(MITC4 / MITC3)」 「drilling ペナルティ」を重ね合わせる平板重ね合わせ型。面外せん断変形を考慮しつつ、 MITC のタイイング補間によりせん断ロッキングを回避する。 局所剛性の DOF 順は [ux, uy, uz, rx, ry, rz] × 節点数(四角形 24、三角形 18)。 Constructors: public ShellElement() public ShellElement(ShellElement other) Properties: public Vector3? LocalAxisReference { get; set; } ローカルx軸の基準ベクトル。null ならグローバルX軸を面内投影して使う public double Angle { get; set; } 面法線まわりのローカル軸の追加回転角 [°] public double DrillingStiffnessFactor { get; set; } drilling ペナルティ係数 α(本来の回転剛性に対する比)。 0 以下または非有限値を設定すると ShellDrilling が rz DOF に一切剛性を付けなくなり、 局所剛性のゼロ固有値が本来の6個(剛体運動)から10個に増えて要素が特異になる。 全体モデルが rz を別途拘束していない限り解析が特異行列で失敗するため、 CalcPartialStiffness(CalcLocalStiffness から必ず呼ばれる)で非正・非有限値を 検出した時点で例外を投げる。 public bool UseResidualBendingFlexibility { get; set; } 面外せん断に残留曲げ柔性(MacNeal の residual bending flexibility)を織り込むか。既定は true。 1次要素は回転場が線形なのでたわみを2次までしか表現できず、実際の3次たわみに対して 曲げ分が 3/4 しか出ない。この補正はその不足をせん断柔性へ振り替えるもので、 スパン方向の要素数が少ないモデルほど効く(1要素の片持ちで先端たわみ −25% → −2%)。 詳細は ShearWithResidualBending。 既定を true にしているのは、補正なしの要素が常に硬い側(たわみを過小評価する側)へ 外れるためで、docs/PublicApiGuidelines.md の「既定値は安全側に倒す」に従う。 false にすると補正なしの素の Mindlin せん断剛性に戻る。板が曲げ支配で、かつ Kirchhoff 解との一致を粗いメッシュで詰めたい場合には false の方が近くなることがある (補正ありは常に柔らかい側から、なしは常に硬い側から収束する)。 public double Area { get; } 要素の実面積 [mm²](三角形分割の和。質量計算で使う) public double ProjectedArea { get; } 平均平面へ投影した面積 [mm²](剛性計算で使う) public double WarpRatio { get; } 反り率 = max|面外距離| / √投影面積。三角形は常に 0 Methods: public static ShellElement FromPoints(IReadOnlyList? corners, Material material, CrossSection_Shell crossSection, Vector3? reference = null, double angle = 0, int id = -1) 座標からシェル要素を作成する(節点は Model 構築時に自動生成・共有される) public static ShellElement FromNodeIds(IReadOnlyList? nodeIds, Material material, CrossSection_Shell crossSection, Vector3? reference = null, double angle = 0, int id = -1) 節点IDからシェル要素を作成する public void CalcLocalAxis(IReadOnlyDictionary nodesById) 節点IDをキーとした辞書から局所座標系を計算する(O(1) のノード参照)。 LineElement.CalcLocalAxis(IReadOnlyDictionary) と同じ理由で用意する オーバーロード。ElementCoordinateSystemHelper が Model 全節点から1回だけ構築した辞書を 渡すことで、要素ごとに辞書を作り直す O(要素数 × 節点数) を避けられる。 List 版(ElementBase の抽象メンバー。ソルバーが呼ぶ)は本オーバーロードへ委譲する。 public bool TryGetGeometryWarning(out string? message) 幾何に起因する注意事項(反りが大きい)があれば英語の警告文を返す。 Model 構築時に ValidationWarnings へ集約される。 public override string ToString() Returns a string that represents the current object. ### FEMur.Elements.StatusTrussElementBase public abstract class StatusTrussElementBase : TrussElement 引張専用・圧縮専用トラス要素の共通基底クラス。 IsActive=false のとき CalcLocalStiffness がゼロ行列を返す。 ソルバーがイテレーションごとに UpdateStatus を呼び出して状態を更新する。 Constructors: protected StatusTrussElementBase() protected StatusTrussElementBase(int id, int node1Id, int node2Id, Material material, CrossSection_Beam crossSection, double betaAngle = 0) protected StatusTrussElementBase(int id, Node node1, Node node2, Material material, CrossSection_Beam crossSection, double betaAngle = 0) protected StatusTrussElementBase(int id, Point3 point1, Point3 point2, Material material, CrossSection_Beam crossSection, double betaAngle = 0) protected StatusTrussElementBase(StatusTrussElementBase other) Properties: public bool IsActive { get; protected set; } Methods: public void ResetStatus() 状態をリセットして Active に戻す(各荷重ケースのイテレーション開始時に呼ぶ)。 ### FEMur.Elements.TensionOnlyTrussElement public sealed class TensionOnlyTrussElement : StatusTrussElementBase 引張専用トラス要素。δ > 0(伸長 = 引張)のときのみ剛性を発現する。 圧縮状態では剛性がゼロとなり、力を伝達しない。 Constructors: public TensionOnlyTrussElement() public TensionOnlyTrussElement(int id, int node1Id, int node2Id, Material material, CrossSection_Beam crossSection, double betaAngle = 0) public TensionOnlyTrussElement(int id, Node node1, Node node2, Material material, CrossSection_Beam crossSection, double betaAngle = 0) public TensionOnlyTrussElement(int id, Point3 point1, Point3 point2, Material material, CrossSection_Beam crossSection, double betaAngle = 0) public TensionOnlyTrussElement(TensionOnlyTrussElement other) Methods: public static TensionOnlyTrussElement FromNodeIds(int node1Id, int node2Id, Material material, CrossSection_Beam crossSection, double betaAngle = 0, int id = -1) 節点ID 2点から作成(id 省略時は未割当=-1) public static TensionOnlyTrussElement FromNodes(Node node1, Node node2, Material material, CrossSection_Beam crossSection, double betaAngle = 0, int id = -1) 節点 2点から作成(id 省略時は未割当=-1) public static TensionOnlyTrussElement FromPoints(Point3 point1, Point3 point2, Material material, CrossSection_Beam crossSection, double betaAngle = 0, int id = -1) 座標 2点から作成(id 省略時は未割当=-1。Model 構築時にノード自動生成) public override string ToString() Returns a string that represents the current object. ### FEMur.Elements.TrussElement public class TrussElement : LineElement Constructors: public TrussElement() public TrussElement(int id, int node1Id, int node2Id, Material material, CrossSection_Beam crossSection, double betaAngle = 0) public TrussElement(int id, Node node1, Node node2, Material material, CrossSection_Beam crossSection, double betaAngle = 0) public TrussElement(int id, Point3 point1, Point3 point2, Material material, CrossSection_Beam crossSection, double betaAngle = 0) public TrussElement(TrussElement other) Methods: public static TrussElement FromNodeIds(int node1Id, int node2Id, Material material, CrossSection_Beam crossSection, double betaAngle = 0, int id = -1) 節点ID 2点から作成(id 省略時は未割当=-1) public static TrussElement FromNodes(Node node1, Node node2, Material material, CrossSection_Beam crossSection, double betaAngle = 0, int id = -1) 節点 2点から作成(id 省略時は未割当=-1) public static TrussElement FromPoints(Point3 point1, Point3 point2, Material material, CrossSection_Beam crossSection, double betaAngle = 0, int id = -1) 座標 2点から作成(id 省略時は未割当=-1。Model 構築時にノード自動生成) public override string ToString() Returns a string that represents the current object. ## FEMur.Export ### FEMur.Export.MgtExporter public sealed class MgtExporter FEMurモデルをMidas iGen MGTファイル形式でエクスポートするクラス Properties: public string Version { get; set; } MGTファイルのバージョン public string ForceUnit { get; set; } 力の単位(MGTヘッダ用) public string LengthUnit { get; set; } 長さの単位(MGTヘッダ用) public List Warnings { get; } エクスポート時の警告メッセージ Methods: public string Export(Model model) モデルをMGTテキストとしてエクスポート public string ExportToFile(Model model, string filePath, bool overwrite = true) モデルをMGTファイルに書き出す ### FEMur.Export.MgtImporter public sealed class MgtImporter Midas iGen MGTファイルをパースしてFEMurのModelに変換するクラス Properties: public List Warnings { get; } インポート時の警告メッセージ Methods: public Model Import(string mgtText) MGT文字列をパースしてModelを生成 public Model ImportFromFile(string filePath) MGTファイルを読み込んでModelを生成 ## FEMur.Geometry ### FEMur.Geometry.LocalFrame public readonly struct LocalFrame : IEquatable 節点の局所座標系。Ex・Ey・Ez は正規直交の右手系で、コンストラクタが保証する。 既定値 default(LocalFrame) は無効なので、「全体座標」は LocalFrame? の null で表す。 Constructors: public LocalFrame(Vector3 xAxis, Vector3 xyVector) xAxis を Ex とし、xyVector を Ex に直交化して Ey とする。 Ez = Ex × Ey。 Properties: public Vector3 XAxis { get; } 局所 X 軸(全体座標の単位ベクトル) public Vector3 YAxis { get; } 局所 Y 軸(全体座標の単位ベクトル) public Vector3 ZAxis { get; } 局所 Z 軸(全体座標の単位ベクトル) Methods: public bool Equals(LocalFrame other) Indicates whether the current object is equal to another object of the same type. public override bool Equals(object? obj) Indicates whether this instance and a specified object are equal. public override int GetHashCode() Returns the hash code for this instance. public override string ToString() Returns the fully qualified type name of this instance. ### FEMur.Geometry.Point3 public struct Point3 : IEquatable, IComparable Constructors: public Point3(double x, double y, double z) public Point3(Point3 other) public Point3(Vector3 vector) Properties: public double X { readonly get; set; } public double Y { readonly get; set; } public double Z { readonly get; set; } public double Length { get; } public Vector3 Vector3 { get; } public double this[int index] { get; set; } Methods: public bool Equals(Point3 other) Indicates whether the current object is equal to another object of the same type. public bool EqualsWithTolerance(Point3 other, double tolerance) 許容誤差を考慮して2つのPoint3が等しいかを判定 public double DistanceTo(Point3 other) 2点間の距離を計算 public override bool Equals(object? other) Indicates whether this instance and a specified object are equal. public override int GetHashCode() Returns the hash code for this instance. public int CompareTo(Point3 other) Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. public void Add(Vector3 vec) public override string ToString() Returns the fully qualified type name of this instance. Operators: public static Point3 operator +(Point3 a, Point3 b) public static Point3 operator -(Point3 a, Point3 b) public static Point3 operator *(Point3 a, double scalar) public static Point3 operator *(double scalar, Point3 a) public static Point3 operator /(Point3 a, double scalar) public static Point3 operator /(double scalar, Point3 a) public static bool operator ==(Point3 a, Point3 b) public static bool operator !=(Point3 a, Point3 b) ### FEMur.Geometry.Vector3 public struct Vector3 : IEquatable, IComparable Constructors: public Vector3(double x, double y, double z) public Vector3(Vector3 other) Properties: public double X { readonly get; set; } public double Y { readonly get; set; } public double Z { readonly get; set; } public double this[int index] { get; set; } Methods: public bool Equals(Vector3 other) Indicates whether the current object is equal to another object of the same type. public bool EqualsWithTolerance(Vector3 other, double tolerance) 許容誤差を考慮して2つのVector3が等しいかを判定する。 Equals は GetHashCode との規約を満たすため厳密比較であり、 許容誤差での比較が必要な場合はこちらを使う。 public int CompareTo(Vector3 other) Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. public override bool Equals(object? obj) Indicates whether this instance and a specified object are equal. public override int GetHashCode() Returns the hash code for this instance. public override string ToString() Returns the fully qualified type name of this instance. public double Length() public static Vector3 Normalize(Vector3 vector) public static Vector3 Cross(Vector3 a, Vector3 b) public static void Cross(Vector3 a, Vector3 b, out Vector3 result) public void Add(Vector3 other) public void Subtract(Vector3 other) public void Multiply(double scalar) public void Divide(double scalar) public static double Dot(Vector3 a, Vector3 b) public void Reverse() public Vector3 Copy() Operators: public static Vector3 operator +(Vector3 a, Vector3 b) public static Vector3 operator -(Vector3 a, Vector3 b) public static Vector3 operator *(Vector3 a, double scalar) public static Vector3 operator /(Vector3 a, double scalar) public static bool operator ==(Vector3 a, Vector3 b) public static bool operator !=(Vector3 a, Vector3 b) ## FEMur.Joints ### FEMur.Joints.Joint public sealed class Joint : IEquatable 要素の両端部の接合条件を定義するクラス 特定の要素(ElementId)に対して、Start端(i端)とEnd端(j端)それぞれの回転ばね、並進ばねの剛性を設定可能 Constructors: public Joint() デフォルトコンストラクタ(両端とも剛結) public Joint(LineElement element, string name = "Rigid-Rigid") 要素オブジェクトを指定したコンストラクタ(Grasshopper用) ElementIdは要素から自動取得される public Joint(int elementId, string name = "Rigid-Rigid") 要素IDと名前を指定したコンストラクタ public Joint(string name) 名前を指定したコンストラクタ(ElementIdは未設定) 名前だけだと両端とも剛結接合になる public Joint(Joint other) コピーコンストラクタ public Joint(LineElement element, bool[] isFixed, double[] startTranslationalStiffness, double[] startRotationalStiffness, double[] endTranslationalStiffness, double[] endRotationalStiffness) ばね剛性と拘束フラグを詳細に指定するコンストラクタ(要素オブジェクト指定) public Joint(int elementId, bool[] isFixed, double[] startTranslationalStiffness, double[] startRotationalStiffness, double[] endTranslationalStiffness, double[] endRotationalStiffness) ばね剛性と拘束フラグを詳細に指定するコンストラクタ(要素ID指定) Properties: public int ElementId { get; set; } 接合条件を適用する要素のID ElementオブジェクトからElementIdが自動設定される場合もある public Point3? StartPoint { get; set; } public Point3? EndPoint { get; set; } public LineElement? Element { get; set; } 参照する要素オブジェクト 設定時にElementIdも自動更新される public string Name { get; set; } 接合部の名前 public IReadOnlyList StartTranslationalStiffness { get; } public IReadOnlyList StartRotationalStiffness { get; } public IReadOnlyList EndTranslationalStiffness { get; } public IReadOnlyList EndRotationalStiffness { get; } public IReadOnlyList IsFixed { get; } Methods: public static Joint CreateRigid(LineElement element) 両端とも剛結接合を作成(要素オブジェクト指定) public static Joint CreateRigid(int elementId) 両端とも剛結接合を作成(要素ID指定) public static Joint CreatePin(LineElement element) 両端ともピン接合を作成(要素オブジェクト指定) public static Joint CreatePin(int elementId) 両端ともピン接合を作成(要素ID指定) public static Joint CreatePinRigid(LineElement element) Start端をピン、End端を剛結とする接合を作成(要素オブジェクト指定) public static Joint CreatePinRigid(int elementId) Start端をピン、End端を剛結とする接合を作成(要素ID指定) public static Joint CreateRigidPin(LineElement element) Start端を剛結、End端をピンとする接合を作成(要素オブジェクト指定) public static Joint CreateRigidPin(int elementId) Start端を剛結、End端をピンとする接合を作成(要素ID指定) public static Joint CreateSemiRigid(LineElement element, double startRx, double startRy, double startRz, double endRx, double endRy, double endRz) 半剛接合を作成(要素オブジェクト指定) public static Joint CreateSemiRigid(int elementId, double startRx, double startRy, double startRz, double endRx, double endRy, double endRz) 半剛接合を作成(要素ID指定) public void SetStartTranslationalStiffness(double dx, double dy, double dz) Start端の並進ばね剛性を設定 public void SetStartRotationalStiffness(double rx, double ry, double rz) Start端の回転ばね剛性を設定 public void FixStartDOF(int localDofIndex) Start端の指定された自由度を固定 public void ReleaseStartDOF(int localDofIndex) Start端の指定された自由度を解放 public void SetEndTranslationalStiffness(double dx, double dy, double dz) End端の並進ばね剛性を設定 public void SetEndRotationalStiffness(double rx, double ry, double rz) End端の回転ばね剛性を設定 public void FixEndDOF(int localDofIndex) End端の指定された自由度を固定 public void ReleaseEndDOF(int localDofIndex) End端の指定された自由度を解放 public double GetRotationalStiffness(bool isStartEnd, int rotationIndex) 指定された端部の回転ばね剛性を取得 public double GetSpringStiffness(int dofIndex) 指定された自由度のばね剛性を取得(IsFixed は考慮しない生の設定値) public bool IsStartRigid() Start端が剛結かどうかを判定 public bool IsEndRigid() End端が剛結かどうかを判定 public bool IsStartPin() Start端がピンかどうかを判定 public bool IsEndPin() End端がピンかどうかを判定 public Joint DeepCopy() public override string ToString() Returns a string that represents the current object. public bool Equals(Joint? other) Indicates whether the current object is equal to another object of the same type. public override bool Equals(object? obj) Determines whether the specified object is equal to the current object. public override int GetHashCode() Serves as the default hash function. Fields: public const int DOFS_PER_END = 6 public const int TOTAL_DOFS = 12 ## FEMur.Loads ### FEMur.Loads.BodyForce public sealed class BodyForce : Load 体積力(BodyForce)を表すクラス。MGT *NBODYFORCE に対応。 各成分は方向係数(X/Y/Z)で、対象ノードへの質量置換えを行う。 Constructors: public BodyForce() public BodyForce(Vector3 factor) public BodyForce(double fx, double fy, double fz) public BodyForce(BodyForce other) Properties: public Vector3 Factor { get; set; } 重力係数ベクトル(無次元): X, Y, Z 方向の質量増減係数 public List NodeList { get; set; } 体積力を作用させる対象節点の Id リスト。空の場合は全節点を対象とする。 MGT の *NBODYFORCE では NODE_LIST と相互変換する(MgtExporter が +1、MgtImporter が -1) public bool UseNMass { get; set; } 節点質量(NodalMass)を質量源に含めるか (bNMASS)。 true のとき、節点質量 × 重力加速度の並進力が体積力へ加算される (回転慣性は一様な並進加速度から正味のモーメントを生まないため載荷しない) public bool UseLMass { get; set; } LoadToMass による付加質量を質量源に含めるか (bLMASS) public bool UseSMass { get; set; } 構造物質量(部材自重)を質量源に含めるか (bSMASS) public bool UseGMass { get; set; } グループ質量を質量源に含めるか (bGMASS)。 FEMur にはグループ質量の入力がないため非対応で、true の場合は解析時に警告する Methods: public Vector3 GetGravityAcceleration() 重力加速度ベクトルを取得 [mm/s²] public override string ToString() Returns a string that represents the current object. Fields: public const double GRAVITY_ACCELERATION = 9810 重力加速度の定数 [mm/s²] ### FEMur.Loads.Damping public sealed class Damping : Load 時刻歴応答解析の減衰。荷重ケースに属さない解析設定で、モデル全体に1つだけ指定する。 インスタンスはファクトリメソッドで作る。 Properties: public override bool IsAnalysisSetting { get; } 荷重ケースに属さない「解析設定」かどうか(LoadToMass / LoadCombination など)。 true のオブジェクトはソルバーの荷重ケースグループ化や MGT の荷重ケース収集から 除外される(#79, #80) public DampingType Type { get; } 減衰の種類。 public double Alpha { get; } 質量比例係数 α [1/s](Modal では 0)。 public double Beta { get; } 剛性比例係数 β [s](Modal では 0)。 public double Frequency1 { get; } 剛性比例減衰の基準振動数 f1 [Hz](StiffnessProportional 以外では 0)。 public double Ratio1 { get; } 剛性比例減衰の基準減衰定数 h1(StiffnessProportional 以外では 0)。 public IReadOnlyList ModalDampingRatios { get; } モード減衰比(Modal のみ。1個なら全モード共通、それ以外はモード番号順)。 Methods: public static Damping Rayleigh(double alpha, double beta) 係数を直接指定するレイリー減衰。 public static Damping RayleighFromFrequencies(double f1, double h1, double f2, double h2) 2つの振動数 f1, f2 [Hz] で減衰定数 h1, h2 となるレイリー減衰。 public static Damping StiffnessProportional(double f1, double h1) 振動数 f1 [Hz] で減衰定数 h1 となる剛性比例減衰(β = h1 / (π·f1))。 public static Damping Modal(IEnumerable ratios) モード減衰比(モード重ね合わせ法専用)。 public override string ToString() Returns a string that represents the current object. Fields: public const string AnalysisSettingLoadCase = "_DAMPING" 解析設定であることを示す荷重ケース名。 ### FEMur.Loads.DampingType public enum DampingType 減衰の種類。 Fields: Rayleigh = 0 レイリー減衰 C = αM + βK。 StiffnessProportional = 1 剛性比例減衰(α = 0 のレイリー減衰)。 Modal = 2 モード減衰比。モード重ね合わせ法でのみ使える。 ### FEMur.Loads.EdgePressure public sealed class EdgePressure : Load 軸対称要素・平面要素の境界辺に載る面圧 [N/mm²]。軸対称要素では断面を回転させた曲面に、平面要素では厚さ方向に一様に作用する。 向きは辺の面内法線方向で、正の値は要素の内側へ押す向き(例: 容器の内面に掛かる内圧は、 内面の辺に正の値で与えると容器を外へ押す)。 LineLoad と同じく擬似荷重で、Model 構築時に EdgePressureDistributor が境界辺の節点へ、 全周の合計(平面要素は厚さ分)の PointLoad として展開する。載荷位置の指定は2通りある。 線分(Path が null): 線分と重なる境界辺に載せる。辺の一部だけ重なる場合は重なる区間だけ載せる。 線分の全長が境界辺で覆われない場合や、2要素が共有する内部の辺に重なる場合は展開時に例外を投げる。曲線(Path に折れ線で近似した点列): 両端の節点がともに曲線から CurveTolerance 以内にある境界辺に、辺全体で載せる。曲線の全長が境界辺で覆われない場合は 展開時に例外を投げる。円弧などの曲面ではメッシュの辺は曲線の弦になり、曲線とは重ならないため、 節点が曲線上にあるかで判定する。 Constructors: public EdgePressure() public EdgePressure(Point3 start, Point3 end, double pressure, string loadCase = "DL") 線分 start–end に一様な面圧を作成する public EdgePressure(IEnumerable path, double pressure, string loadCase = "DL") 折れ線で近似した曲線 path(2点以上)に沿う境界辺に一様な面圧を作成する public EdgePressure(EdgePressure other) Properties: public Point3 Start { get; set; } 線分の始点 [mm]。曲線で指定した場合は曲線の始点 public Point3 End { get; set; } 線分の終点 [mm]。曲線で指定した場合は曲線の終点 public List? Path { get; set; } 曲線を折れ線で近似した点列 [mm](2点以上)。null なら Start–End の線分で指定する。 始点と終点が一致する場合は閉じた曲線として扱う。 public double CurveTolerance { get; set; } 曲線で指定したとき、節点を曲線上とみなす距離の許容差 [mm]。Model の NodeTolerance より小さい場合は NodeTolerance を使う。線分で指定した場合は使わない public double Pressure { get; set; } 面圧 [N/mm²]。正の値は要素の内側へ押す public bool IsExpanded { get; set; } Model 構築時の展開済みフラグ。GH からの再構築経路での二重展開を防ぐ Methods: public override string ToString() Returns a string that represents the current object. Fields: public const double DefaultCurveTolerance = 0.01 曲線で指定したときの CurveTolerance の既定値 [mm] ### FEMur.Loads.ElementLoad public sealed class ElementLoad : Load Constructors: public ElementLoad() public ElementLoad(int elementId, Vector3 qLocal) public ElementLoad(int elementId, Vector3 q, Vector3 m, bool local = true) public ElementLoad(ElementBase element, Vector3 qLocal) public ElementLoad(ElementBase element, Vector3 q, Vector3 m, bool local = true) public ElementLoad(int elementId, Vector3 qStart, Vector3 qEnd, Vector3 mStart, Vector3 mEnd, bool local = true) public ElementLoad(int elementId, Vector3 qStart, Vector3 qEnd, Vector3 mStart, Vector3 mEnd, double offsetStart, double offsetEnd, bool local = true) public ElementLoad(ElementBase element, Vector3 qStart, Vector3 qEnd, Vector3 mStart, Vector3 mEnd, bool local = true) public ElementLoad(ElementBase element, Vector3 qStart, Vector3 qEnd, Vector3 mStart, Vector3 mEnd, double offsetStart, double offsetEnd, bool local = true) public ElementLoad(ElementLoad other) Properties: public int ElementId { get; set; } public Point3? StartPoint { get; set; } public Point3? EndPoint { get; set; } public Vector3 QLocalStart { get; set; } public Vector3 QLocalEnd { get; set; } public Vector3 MLocalStart { get; set; } public Vector3 MLocalEnd { get; set; } public Vector3 QGlobalStart { get; set; } public Vector3 QGlobalEnd { get; set; } public Vector3 MGlobalStart { get; set; } public Vector3 MGlobalEnd { get; set; } public bool Local { get; set; } public double OffsetStart { get; set; } public double OffsetEnd { get; set; } Methods: public override string ToString() Returns a string that represents the current object. ### FEMur.Loads.FloorLoad public sealed class FloorLoad : Load Constructors: public FloorLoad() public FloorLoad(List corners, double pressure, FloorLoadMode mode, Vector3 direction, bool isLocal, string loadCase = "DL") public FloorLoad(FloorLoad other) Properties: public List Corners { get; set; } public double Pressure { get; set; } public FloorLoadMode Mode { get; set; } public Vector3 Direction { get; set; } public bool IsLocal { get; set; } public bool IsExpanded { get; set; } Methods: public override string ToString() Returns a string that represents the current object. ### FEMur.Loads.FloorLoadMode public enum FloorLoadMode Fields: TwoWay = 0 OneWayX = 1 OneWayY = 2 ### FEMur.Loads.GravityLoad public sealed class GravityLoad : Load 重力荷重を表すクラス モデル内の全要素に対して自重を考慮した等分布荷重を適用 Constructors: public GravityLoad() デフォルトコンストラクタ Z方向下向き、1.0G public GravityLoad(Vector3 factor) 重力係数ベクトルを指定するコンストラクタ public GravityLoad(double fx, double fy, double fz) 各軸の重力係数を個別に指定するコンストラクタ public GravityLoad(GravityLoad other) コピーコンストラクタ Properties: public Vector3 Factor { get; set; } 重力係数ベクトル(無次元) 各成分は重力加速度の倍率を表す 例: (0, 0, -1.0) = Z方向下向き、1.0G(9.81 m/s² = 9810 mm/s²) 実際の加速度 = Factor * 9810 [mm/s²] Methods: public Vector3 GetGravityAcceleration() 実際の重力加速度ベクトルを取得 [mm/s²] public double GetGravityMagnitude() 重力加速度の大きさを取得 [mm/s²] public ElementLoad? ToEquivalentElementLoad(ElementBase element, List nodes) 重力荷重を、指定要素の自重に相当する等価な等分布荷重(ElementLoad)に変換する。 この変換は「材料密度 × 断面積」による要素の自重のみを対象とする。 解析・断面力図・CM0Q補正のすべてがこの単一メソッドを使用すること(重複ロジック禁止: Issue #30)。 仕様: - 対象は梁要素(BeamElement)かつ密度・断面積が正の要素のみ。それ以外は null を返す。 - 単位長さあたり質量 massPerLength = density[kg/mm³] × A[mm²] = [kg/mm] - 等分布荷重 qGlobal[N/mm] = massPerLength × 重力加速度[mm/s²] × (1/1000) (1N = 1kg·m/s² = 1kg·1000mm/s² より [kg·mm/s²] = [N]/1000) - qGlobal を要素ローカル座標系に変換し、ローカル等分布荷重として ElementLoad を返す。 LoadToMass(荷重→質量変換による追加質量)はこの変換に含めない。 LoadToMass は節点集中力として作用するため等価要素分布荷重では表現できず、 解析の荷重組立時に別途節点へ加算される。したがって断面力図・CM0Q補正には反映されない。 シェル要素はこの等価分布荷重の経路を使わない。総質量(密度×板厚×実面積)を 形状関数の重みで節点へ直接配分する LinearStaticSolver.ApplyShellSelfWeight(private)で 処理されるため、本メソッドは対象外のまま null を返す。 public override string ToString() 文字列表現 Fields: public const double GRAVITY_ACCELERATION = 9810 重力加速度の定数 [mm/s²] 9.81 m/s² = 9810 mm/s² ### FEMur.Loads.GroundMotion public sealed class GroundMotion : Load 一様な地動加速度(全支点が同じ動きをする)。時刻歴応答解析専用。 加速度は Function の値 [mm/s²] × Scale。 地動を含むケースは地盤に対する相対座標で解く。 Constructors: public GroundMotion(GroundMotionDirection direction, TimeFunction function, double scale = 1) Properties: public GroundMotionDirection Direction { get; } 加振方向。 public TimeFunction Function { get; } 加速度波形 [mm/s²]。 public double Scale { get; } 波形に掛ける倍率。 Methods: public override string ToString() Returns a string that represents the current object. ### FEMur.Loads.GroundMotionDirection public enum GroundMotionDirection 地動加速度の方向(全体座標系)。 Fields: X = 0 全体 X 方向。 Y = 1 全体 Y 方向。 Z = 2 全体 Z 方向。 ### FEMur.Loads.LineLoad public sealed class LineLoad : Load 線分に沿った線分布荷重 [N/mm](全体座標系)。 FloorLoad と同じく擬似荷重で、Model 構築時に LineLoadDistributor が 線分と重なる要素へ展開する。梁(BeamElement)と重なる区間は ElementLoad に、 残りの区間(シェルのエッジ・トラス要素)は等価節点荷重の PointLoad になる。 梁とシェルが共有するエッジや、隣接シェルが共有するエッジに二重に載荷しないよう、 区間単位で重複を除いて配る。 荷重強度は始点 LoadStart から終点 LoadEnd へ線形に変化する(台形分布)。 線分の全長が要素で覆われない場合は展開時に例外を投げる。 Constructors: public LineLoad() public LineLoad(Point3 start, Point3 end, Vector3 loadStart, Vector3 loadEnd, string loadCase = "DL") 始点から終点へ線形に変化する線荷重を作成する。等分布なら loadStart と loadEnd に同じ値を渡す。 public LineLoad(LineLoad other) Properties: public Point3 Start { get; set; } 線分の始点 [mm] public Point3 End { get; set; } 線分の終点 [mm] public Vector3 LoadStart { get; set; } 始点での分布荷重ベクトル [N/mm](全体座標系) public Vector3 LoadEnd { get; set; } 終点での分布荷重ベクトル [N/mm](全体座標系) public bool IsExpanded { get; set; } Model 構築時の展開済みフラグ。GH からの再構築経路での二重展開を防ぐ Methods: public override string ToString() Returns a string that represents the current object. ### FEMur.Loads.Load public abstract class Load Properties: public string LoadCase { get; set; } public virtual bool IsAnalysisSetting { get; } 荷重ケースに属さない「解析設定」かどうか(LoadToMass / LoadCombination など)。 true のオブジェクトはソルバーの荷重ケースグループ化や MGT の荷重ケース収集から 除外される(#79, #80) Methods: public Load DeepCopy() この荷重の複製を返す。 public override string ToString() Returns a string that represents the current object. ### FEMur.Loads.LoadCombination public sealed class LoadCombination : Load 荷重組合せ(解析設定)。指定した複数の荷重ケースの荷重を合算した 「結合ケース」を新たな1ケースとして追加し、ソルバーはそれを独立に求解する (例: DL と EX を指定すると "DL+EX" ケースが生成され、DL・EX・DL+EX の3ケースが実行される)。 結合ケースは線形重ね合わせではなく「同時載荷の再求解」であるため、 引張/圧縮専用要素(状態要素)を含む非線形モデルでも力学的に正しい結果になる(#80)。 Load を継承しているため、AssembleModel の Loads 入力にそのまま接続可能。 Constructors: public LoadCombination() public LoadCombination(IEnumerable caseNames) 結合対象の荷重ケース名を指定して作成 public LoadCombination(LoadCombination other) コピーコンストラクタ Properties: public List CaseNames { get; set; } 結合対象の荷重ケース名(2つ以上) public override bool IsAnalysisSetting { get; } 荷重ケースに属さない解析設定(ソルバー・MGT の荷重ケース収集から除外される) public string CombinedCaseName { get; } 生成される結合ケース名(正規化したケース名を "+" で連結。例: "DL+EX") Methods: public List GetNormalizedCaseNames() 空白除去・空要素除外・重複除去したケース名リストを返す(入力順を保持) public override string ToString() Returns a string that represents the current object. ### FEMur.Loads.LoadToMass public sealed class LoadToMass : Load 荷重を質量に変換する設定(MGT の *LOADTOMASS として入出力される) Load を継承しているため、AssembleModel の Loads 入力にそのまま接続可能 GravityLoad と組み合わせて使用: GravityLoad が自重を計算する際に、LoadToMass で指定された荷重ケースの荷重を 追加質量として考慮する Constructors: public LoadToMass() public LoadToMass(List entries, bool applyX = true, bool applyY = true, bool applyZ = true, bool bNodal = true, bool bBeam = true, bool bFloor = true, bool bPres = true, double gravity = 9.806) public LoadToMass(LoadToMass other) Properties: public List Entries { get; set; } 変換対象の荷重ケース名と倍率のリスト 例: { ("DL", 1.0), ("LL", 0.5) } public override bool IsAnalysisSetting { get; } 荷重ケースに属さない解析設定(ソルバー・MGT の荷重ケース収集から除外される) public bool ApplyX { get; set; } X方向に質量荷重を作用させるか public bool ApplyY { get; set; } Y方向に質量荷重を作用させるか public bool ApplyZ { get; set; } Z方向に質量荷重を作用させるか public bool bNodal { get; set; } 節点荷重を質量に含めるか (bNODAL) public bool bBeam { get; set; } 梁荷重を質量に含めるか (bBEAM) public bool bFloor { get; set; } 床荷重を質量に含めるか (bFLOOR) public bool bPres { get; set; } 圧力荷重を質量に含めるか (bPRES) public double Gravity { get; set; } 重力加速度 (m/s²)。デフォルト 9.806。 MGT (*LOADTOMASS) 入出力のメタデータであり、解析では使用しない。 解析側は荷重→質量→荷重の往復を同一の重力加速度 (GRAVITY_ACCELERATION)で行うため g は相殺され、 この値が結果に影響することはない(#79) Methods: public string GetDirectionLabel() 方向ラベル文字列を取得(例: "XYZ", "XZ", "Z") public override string ToString() Returns a string that represents the current object. public static bool TryBuildEntries(IList? loadCaseNames, IList? factors, out List entries, out string? error, out List warnings) 荷重ケース名と倍率のリストからエントリを構築する (#157)。 倍率の照合規則: factors が 0 件(null 含む) → 全ケースに 1.0 factors が 1 件 → その値を全ケースへ適用 factors が loadCaseNames と同数 → 元のリストでの位置で対応付ける それ以外 → false を返す Grasshopper の LoadToMass コンポーネントから呼ばれる。FEMurTests は FEMur.GH を 参照していないため、単体テストできるようこの規則をコア側に置いている。 error / warnings は Grasshopper に表示されるため英語で組み立てる。 public static List FindDuplicateLoadCaseNames(IEnumerable loadToMassList) 複数の LoadToMass(および1つの中)で重複している荷重ケース名を返す (#157)。 静解析と固有値解析の双方から呼ばれるため、警告文の組み立ては呼び出し側に任せる。 ### FEMur.Loads.LoadToMassEntry public sealed class LoadToMassEntry 荷重→質量変換の1エントリ Constructors: public LoadToMassEntry() public LoadToMassEntry(string? loadCaseName, double factor) Properties: public string? LoadCaseName { get; set; } 変換対象の荷重ケース名 public double Factor { get; set; } 変換倍率(1.0 = 100%) Methods: public override string ToString() Returns a string that represents the current object. ### FEMur.Loads.NodalMass public sealed class NodalMass : PointAction 節点へ直接与える集中質量(MGT 出力では *NODALMASS として書き出される)。 PointAction を継承しているため座標指定と節点ID指定の双方に対応し、 座標指定は Model.ValidateAndRepairModel() が既存節点の NodeId へ解決する。 Load を継承しているため AssembleModel の Loads 入力へそのまま接続できる。 荷重ケースに属さない解析設定(IsAnalysisSetting = true)であり、 それ自体は静解析の荷重にならない。効くのは次の2経路のみ: - EigenSolver.BuildLumpedMassVector の集中質量(固有値解析の質量) - BodyForce の UseNMass = true のとき、 体積力の質量源として節点力に寄与する 部材自重(GravityLoad / *SELFWEIGHT)は部材質量のみを対象とするため、 節点質量から鉛直荷重は発生しない。 Constructors: public NodalMass() public NodalMass(Point3 position, Vector3 mass) public NodalMass(Point3 position, Vector3 mass, Vector3 inertia) public NodalMass(int nodeId, Vector3 mass) public NodalMass(int nodeId, Vector3 mass, Vector3 inertia) public NodalMass(Node node, Vector3 mass) public NodalMass(Node node, Vector3 mass, Vector3 inertia) public NodalMass(NodalMass other) Properties: public Vector3 Mass { get; set; } 並進集中質量 [kg]。全体座標系の X/Y/Z 各方向へ独立に与える public Vector3 Inertia { get; set; } 回転慣性質量 [kg·mm²]。全体座標系の X/Y/Z 各軸まわりへ独立に与える public override bool IsAnalysisSetting { get; } 荷重ケースに属さない解析設定(ソルバー・MGT の荷重ケース収集から除外される) Methods: public double GetMassForDof(int localDof) 指定された全体自由度(0:UX, 1:UY, 2:UZ, 3:RX, 4:RY, 5:RZ)に対応する質量を返す。 並進は [kg]、回転は [kg·mm²]。範囲外の自由度は 0 を返す。 ソルバー側で 6 成分を同じループで扱えるようにするためのアクセサ public bool HasAnyMass() 質量成分が1つでも非ゼロかどうか public bool HasNegativeComponent() 負の質量成分を1つでも含むかどうか(入力ミスの検出用) public override string ToString() Returns a string that represents the current object. Fields: public const string AnalysisSettingLoadCase = "_NODALMASS" 「どの荷重ケースにも属さない」ことを示す目印の荷重ケース名。 除外判定は LoadToMass と同様に、この文字列ではなく IsAnalysisSetting と型で行う ### FEMur.Loads.PointAction public abstract class PointAction : Load Properties: public int NodeId { get; set; } public Point3? Position { get; protected set; } ### FEMur.Loads.PointDisplacement public sealed class PointDisplacement : PointAction Constructors: public PointDisplacement() public PointDisplacement(Point3 position, Vector3 displacement) public PointDisplacement(Point3 position, Vector3 displacement, Vector3 rotation) public PointDisplacement(int nodeId, Vector3 displacement) public PointDisplacement(int nodeId, Vector3 displacement, Vector3 rotation) public PointDisplacement(Node node, Vector3 displacement) public PointDisplacement(Node node, Vector3 displacement, Vector3 rotation) public PointDisplacement(PointDisplacement other) Properties: public Vector3 Displacement { get; set; } public Vector3 Rotation { get; set; } Methods: public override string ToString() Returns a string that represents the current object. ### FEMur.Loads.PointLoad public sealed class PointLoad : PointAction Constructors: public PointLoad() public PointLoad(Point3 position, Vector3 force) public PointLoad(Point3 position, Vector3 force, Vector3 moment) public PointLoad(int nodeId, Vector3 force) public PointLoad(int nodeId, Vector3 force, Vector3 moment) public PointLoad(Node node, Vector3 force) public PointLoad(Node node, Vector3 force, Vector3 moment) public PointLoad(PointLoad other) Properties: public Vector3 Force { get; set; } public Vector3 Moment { get; set; } Methods: public override string ToString() Returns a string that represents the current object. ### FEMur.Loads.SurfaceLoad public sealed class SurfaceLoad : Load シェル要素へ直接載荷する等分布面荷重 [N/mm²]。 FloorLoad とは別機能。FloorLoad は床領域の面圧を境界梁の線分布荷重へ 「分配」する擬似荷重で、面要素を必要としない(#118)。こちらは面要素そのものに載る。 両者は共存する。 対象要素は面の重心座標(Centroid)で解決するため、GH では ShellElement に渡したものと同じ Mesh を渡す必要がある。 Constructors: public SurfaceLoad() public SurfaceLoad(int elementId, Vector3 pressure, bool local = false, string loadCase = "DL") public SurfaceLoad(Point3 centroid, Vector3 pressure, bool local = false, string loadCase = "DL") public SurfaceLoad(SurfaceLoad other) Properties: public int ElementId { get; set; } 対象要素のID。未解決は −1(Model 構築時に Centroid から解決される) public Point3? Centroid { get; set; } 対象面の重心座標。要素ID解決に使う public Vector3 Pressure { get; set; } 面圧ベクトル [N/mm²]。Local=false なら全体座標系、true なら要素ローカル系 public bool Local { get; set; } true のとき Pressure を要素ローカル軸 [ex, ey, ez] で解釈する Methods: public Vector3 ResolveGlobalPressure(double[] ex, double[] ey, double[] ez) 面圧を全体座標系のベクトルとして解決する。Local が true の場合、 引数の要素ローカル軸 [ex, ey, ez](各軸は全体座標系での成分、長さ3)で Pressure を解釈し、全体座標系へ変換して返す。 Local が false の場合は軸を使わず Pressure をそのまま返す。 TryGetLocalCoordinateSystem の出力形式(double[3])を そのまま受け取れるようにしている。FEMur.GH のプレビュー描画など、internal な SurfaceLoadCalculator / ShellLocalFrame を経由できない呼び出し元向けの公開窓口であり、 SurfaceLoadCalculator.ResolveGlobalPressure は本メソッドへ委譲することで変換ロジックを ここへ一本化している(同じ物理計算を複数箇所に実装しない)。 軸が null または要素数が3でない場合は変換できない。呼び出し元が GH の描画パスであり、 例外でプレビュー全体を止めるべきではないため、例外は投げずに Pressure を そのまま返す(「変換できない=無変換」という安全側の既定動作)。 public override string ToString() Returns a string that represents the current object. ### FEMur.Loads.TimeFunction public sealed class TimeFunction 時刻歴応答解析の入力波形(時間関数)。値は単位換算・倍率・基準化を適用した後のもので、 加速度波形なら mm/s²、荷重波形なら無次元の係数である。インスタンスは不変。 Properties: public IReadOnlyList Times { get; } サンプル時刻 [s](狭義単調増加)。 public IReadOnlyList Values { get; } サンプル値(換算・倍率・基準化の適用後)。 public double Duration { get; } 最後のサンプル時刻 [s]。 public double MinInterval { get; } サンプル間隔の最小値 [s]。サンプルが1点だけなら正の無限大。 public double PeakAbsValue { get; } 値の絶対値の最大。 Methods: public double ValueAt(double time) 時刻 time [s] の値を線形補間で返す。範囲外は 0。 public static TimeFunction FromInterval(double dt, IEnumerable values, TimeFunctionUnit unit = TimeFunctionUnit.None, double scale = 1, TimeFunctionNormalization normalization = TimeFunctionNormalization.None, double target = 0) 等間隔 dt [s] のサンプル列から波形を作る。先頭時刻は 0。 public static TimeFunction FromTimes(IEnumerable times, IEnumerable values, TimeFunctionUnit unit = TimeFunctionUnit.None, double scale = 1, TimeFunctionNormalization normalization = TimeFunctionNormalization.None, double target = 0) 時刻と値の組から波形を作る。時刻は 0 以上の狭義単調増加であること。 public static double GetUnitFactor(TimeFunctionUnit unit) unit から mm/s² への換算係数(None は 1)。 ### FEMur.Loads.TimeFunctionNormalization public enum TimeFunctionNormalization 時刻歴波形の基準化の方法。 Fields: None = 0 基準化しない。 PeakAcceleration = 1 最大加速度 max|a| を Target [mm/s²] に合わせる。 PeakVelocity = 2 台形積分で求めた最大速度 max|v| を Target [mm/s] に合わせる。 ### FEMur.Loads.TimeFunctionUnit public enum TimeFunctionUnit 時刻歴波形の値の単位。生成時に mm/s²(無次元はそのまま)へ換算する。 Fields: None = 0 無次元(荷重波形の係数など)。換算しない。 MillimeterPerSecondSquared = 1 mm/s²(FEMur の内部単位)。 Gal = 2 gal = cm/s²(×10)。 MeterPerSecondSquared = 3 m/s²(×1000)。 StandardGravity = 4 標準重力加速度 g(×9806.65)。 ### FEMur.Loads.TimeHistoryLoad public sealed class TimeHistoryLoad : Load 静的荷重ケース × 時間関数。時刻 t の外力は、参照ケース SourceCase の荷重を 静解析と同じ経路で組み立てたベクトル × Scale × f(t)。分布荷重・床荷重・面荷重もそのまま使える。 参照ケースの強制変位は荷重ベクトルに乗らないため無視される。参照ケース自体は静解析でも通常どおり解かれる。 Constructors: public TimeHistoryLoad(string sourceCase, TimeFunction function, double scale = 1) Properties: public string SourceCase { get; } 空間分布として参照する静的荷重ケース名。 public TimeFunction Function { get; } 無次元の時間関数。 public double Scale { get; } 倍率。 Methods: public override string ToString() Returns a string that represents the current object. ### FEMur.Loads.TimeHistoryPointLoad public sealed class TimeHistoryPointLoad : PointAction 節点荷重 × 時間関数。時刻 t の荷重は Force·f(t)、Moment·f(t)(全体座標系、N・N·mm)。 時刻歴応答解析専用で、静解析では無視される。 Constructors: public TimeHistoryPointLoad(Point3 position, Vector3 force, Vector3 moment, TimeFunction function) public TimeHistoryPointLoad(int nodeId, Vector3 force, Vector3 moment, TimeFunction function) Properties: public Vector3 Force { get; } 荷重の振幅 [N](全体座標系)。 public Vector3 Moment { get; } モーメントの振幅 [N·mm](全体座標系)。 public TimeFunction Function { get; } 無次元の時間関数。 Methods: public override string ToString() Returns a string that represents the current object. ## FEMur.Materials ### FEMur.Materials.Material public abstract class Material Properties: public string Family { get; protected set; } public string Name { get; protected set; } public double E { get; protected set; } public double Nu { get; protected set; } public double G { get; protected set; } public double Density { get; protected set; } 密度 [kg/mm³] 例: 鋼材 = 7.85e-6 kg/mm³ public double? F { get; } 鋼材の基準強度 F [N/mm²]。断面算定(許容応力度)で使用する。 未指定は null。null の材料を使う部材は断面算定でエラーになる(235 などを仮定しない)。 板厚による低減は行わないため、板厚40mm超の鋼材は低減後の値を与えること。 Methods: public override string ToString() Returns a string that represents the current object. ### FEMur.Materials.Material_Isotropic public sealed class Material_Isotropic : Material Constructors: public Material_Isotropic() public Material_Isotropic(string family, string name, double E, double nu, double density) public Material_Isotropic(string family, string name, double E, double nu, double density, double g) せん断弾性係数Gを明示的に指定するコンストラクタ public Material_Isotropic(string family, string name, double E, double nu, double density, double? g, double? f) せん断弾性係数 G と基準強度 F を指定するコンストラクタ Methods: public static Material_Isotropic Steel() public static Material_Isotropic Aluminum() public static Material_Isotropic Concrete() 普通コンクリート Fc24 の材料を返す。 public override string ToString() Returns a string that represents the current object. ### FEMur.Materials.Material_Orthotropic public sealed class Material_Orthotropic : Material Constructors: public Material_Orthotropic() public Material_Orthotropic(string family, string name, double density, double ex, double ey, double ez, double gxy, double gyz, double gzx, double nuxy, double nuyz, double nuzx) Properties: public double Ex { get; } public double Ey { get; } public double Ez { get; } public double Gxy { get; } public double Gyz { get; } public double Gzx { get; } public double Nuxy { get; } public double Nuyz { get; } public double Nuzx { get; } Methods: public override string ToString() Returns a string that represents the current object. ## FEMur.Models ### FEMur.Models.Model public sealed class Model : IEquatable 解析モデル。節点・要素・支持条件・荷重と、解析結果を保持する。 Constructors: public Model() public Model(List nodes, List elements, List supports, List loads, List? joints = null, double nodeTolerance = 0.001) public Model(List nodes, List elements, List supports, List loads, List? joints, ModelAssemblyOptions options) モデリング設定を指定してモデルを構築する(#146 Phase 3)。 options の交差計算トグルはいずれも既定 false なので、 何も設定しなければ許容差だけを渡す既存コンストラクタと同じモデルが構築される。 public Model(List nodes, List elements, List supports, List? surfaceSprings, List loads, List? joints, ModelAssemblyOptions options) 面ばね(SurfaceSpring)を含めてモデルを構築する。 既存コンストラクタのバイナリ互換を保つため、省略可能引数の追加ではなく オーバーロードとして用意している。 public Model(List nodes, List elements, List supports, List? surfaceSprings, List? dofCouplings, List loads, List? joints, ModelAssemblyOptions options) 従属自由度(DofCoupling)を含めてモデルを構築する。 リモート点の節点生成が検証の中で必要なため、構築後に追加できない。 public Model(List nodes, List elements, List supports, List? surfaceSprings, List loads, List? joints = null, double nodeTolerance = 0.001) 面ばねを含めてモデルを構築する(許容差のみを指定する簡易版)。 public Model(Model other) Properties: public List Nodes { get; set; } public List Elements { get; set; } public List Supports { get; set; } public List SurfaceSprings { get; set; } 面ばね(Winkler 弾性床)のリスト。節点支持(Supports)とは 対象も単位も違うため別のリストで持つ。Grasshopper では同じ Supports 端子から入り、 AssembleModel が型で振り分ける。 public List Loads { get; set; } public List Joints { get; set; } public List RigidDiaphragms { get; set; } public IReadOnlyList DofCouplings { get; } 従属自由度の設定。Grasshopper では Supports 端子から入り、AssembleModel が型で振り分ける。 リモート点の節点は ValidateAndRepairModel が解決するので、コンストラクタで渡す。 public Dictionary Results { get; } public EigenResult? EigenResult { get; } public IReadOnlyDictionary TimeHistoryResults { get; } public Result? Result { get; } public bool IsSolved { get; } public bool IsValidated { get; } public List ValidationInfos { get; } public List ValidationWarnings { get; } public double NodeTolerance { get; set; } Methods: public Model DeepCopy() public override string ToString() Returns a string that represents the current object. public bool Equals(Model? other) Indicates whether the current object is equal to another object of the same type. Fields: public const double DefaultNodeTolerance = 0.001 ### FEMur.Models.ModelAssemblyOptions public sealed class ModelAssemblyOptions Model 構築時のモデリング設定。交差計算はいずれも既定 false で、 有効にしない限り従来と同じモデルが構築される。 Constructors: public ModelAssemblyOptions() public ModelAssemblyOptions(double nodeTolerance) Properties: public double NodeTolerance { get; set; } 節点の重複マージ・交差判定に使う距離許容差 [mm] public bool SplitElementsAtNodes { get; set; } 交差計算-節点。線要素の内部に他の節点が乗っている場合、その位置で線要素を分割する。 シェル要素は分割せず、節点を提供する側に徹する。 端点から最小セグメント長(NodeTolerance の 50 倍と 1 mm の大きいほう) 未満の位置にある節点では分割せず、警告する(極端に短い要素を作らないため)。 public bool SplitElementsAtIntersections { get; set; } 交差計算-要素。線要素どうしが内部で交差する場合、交点に節点を生成して両方を分割する。 交点が一方の端点から最小セグメント長未満に落ちる場合(端部が相手の内部にちょうど 乗っている T 字接合を含む)は、新しい節点を作らずにその端点の既存節点へスナップし、 相手要素だけをその節点で分割する。両方が端点近傍で、かつ別々の節点のままであれば 何も接合できないので警告する。 トラス要素と引張/圧縮限定要素は交点分割の対象外。並進3自由度しか持たないため、 交点に生成した節点の面外並進が無拘束になり、分割前は解けていたモデルが機構化する。 交差計算-節点のほうは、ユーザーが意図的に置いた既存節点を使うのでトラスも分割する。 ## FEMur.Nodes ### FEMur.Nodes.Node public sealed class Node Constructors: public Node(Point3 position) public Node(double x, double y, double z) public Node(int id, Point3 position) public Node(int id, double x, double y, double z) public Node(Node other) Properties: public int Id { get; set; } public Point3 Position { get; } Methods: public Node DeepCopy() public override string ToString() Returns a string that represents the current object. ### FEMur.Nodes.Node.DOF public enum Node.DOF Fields: DX = 0 DY = 1 DZ = 2 RX = 3 RY = 4 RZ = 5 N_DOF = 6 ## FEMur.Results ### FEMur.Results.AxisymmetricStress public sealed class AxisymmetricStress 軸対称要素1つ分の応力結果。要素中心と各節点(要素の節点の並び順)の値を持つ。 節点値は要素内での外挿値で、隣接要素とは一般に一致しない(平均はしない)。 Properties: public int ElementId { get; } 要素ID public AxisymmetricStressSample Center { get; } 要素中心(四角形は ξ = η = 0、三角形は重心)の値 public IReadOnlyList Nodes { get; } 各節点の値(要素の節点の並び順) Methods: public override string ToString() Returns a string that represents the current object. ### FEMur.Results.AxisymmetricStressSample public sealed class AxisymmetricStressSample 軸対称要素の1評価点の応力 [N/mm²] と変位 [mm]。成分は要素の (r, z, θ) 方向 (r: 軸から外向き、z: 軸方向、θ: 周方向)。 Properties: public double SigmaR { get; } 半径方向応力 σr [N/mm²] public double SigmaZ { get; } 軸方向応力 σz [N/mm²] public double SigmaTheta { get; } 周方向応力 σθ [N/mm²](それ自体が主応力の1つ) public double TauRZ { get; } r-z 面内のせん断応力 τrz [N/mm²] public double Ur { get; } 半径方向変位 ur [mm] public double Uz { get; } 軸方向変位 uz [mm] public double Sigma1 { get; } r-z 面内の第1主応力 [N/mm²] public double Sigma2 { get; } r-z 面内の第2主応力 [N/mm²] public double SigmaAngle { get; } σ1 の主軸角 [°](r 軸から z 軸へ向かう向きを正) public double VonMises { get; } von Mises 応力 [N/mm²](σr, σz, σθ, τrz から計算) Methods: public override string ToString() Returns a string that represents the current object. ### FEMur.Results.BeamForcePosition public enum BeamForcePosition 梁の断面力の評価位置。 Fields: I = 0 i 端。 Mid = 1 中央。 J = 2 j 端。 ### FEMur.Results.ComponentEnvelope public sealed class ComponentEnvelope 6成分の包絡。節点は Ux..Rz、反力と断面力は Fx, Fy, Fz, Mx, My, Mz の順。 Properties: public int Id { get; } 節点 Id または要素 Id。 Methods: public EnvelopeValue Get(int component) 成分 component(0..5)の包絡。 ### FEMur.Results.EigenResult public sealed class EigenResult 固有値解析(EigenSolver)の結果。 モードは固有値 λ = ω² の昇順(低次から)に格納される。 Constructors: public EigenResult() Creates an empty result. Eigen results are produced by EigenSolver. Properties: public int NumModes { get; set; } 収束して抽出されたモード数 public List Eigenvalues { get; } 固有値 λ = ω² [rad²/s²] public List AngularFrequencies { get; } 固有角振動数 ω [rad/s] public List Frequencies { get; } 固有振動数 f [Hz] public List Periods { get; } 固有周期 T [s] public IReadOnlyList> ModeShapes { get; } Mode shapes for display, one list per mode in the order of Periods. Each inner list holds every node in the order of Model.Nodes. public IReadOnlyList> MassNormalizedModeShapes { get; } Mass-normalized mode shapes (φᵀMφ = 1 with mass in kg), in the same layout as ModeShapes. public IReadOnlyList ParticipationFactors { get; } 刺激係数 β(モードごとに X/Y/Z)[√kg]。 MassNormalizedModeShapes を基準に β = φ̂ᵀ M r_d で求めている。 public IReadOnlyList EffectiveMasses { get; } 有効質量(モードごとに X/Y/Z)[kg]。β² に等しい public IReadOnlyList EffectiveMassRatios { get; } 有効質量比(モードごとに X/Y/Z)。分母は UnrestrainedTotalMass。 全モードを抽出したとき総和は 1.0 へ収束する。 public Vector3 UnrestrainedTotalMass { get; } 有効質量比の分母に用いた、拘束されていない全質量 X/Y/Z [kg]。 Fixed 支持で拘束された自由度の質量は含まない(ばね支持は含む)。 Methods: public NodalDisplacement GetModeShape(int modeIndex, int nodeId) Returns the display mode shape of one node. public NodalDisplacement GetMassNormalizedModeShape(int modeIndex, int nodeId) Returns the mass-normalized mode shape of one node. public override string ToString() Returns a string that represents the current object. ### FEMur.Results.ElementStress public sealed class ElementStress 梁要素の断面力を格納するクラス。 格納値(_i/_mid/_j)は SFD(せん断力図)規約のサンプル値であり、 CalcSectionForceAt(ξ)(ξ=0/0.5/1)と厳密に一致する(#120 で単一経路化)。 例: 単純支持+下向き等分布で Fy_i=+qL/2・Fy_j=−qL/2。 Constructors: public ElementStress() public ElementStress(int elementId) Properties: public int ElementId { get; set; } 要素ID public double Fx_i { get; set; } i端 軸力 [N] public double Fy_i { get; set; } i端 せん断力Y [N] public double Fz_i { get; set; } i端 せん断力Z [N] public double Mx_i { get; set; } i端 ねじりモーメント [N·mm] public double My_i { get; set; } i端 曲げモーメントY [N·mm] public double Mz_i { get; set; } i端 曲げモーメントZ [N·mm] public double Fx_j { get; set; } j端 軸力 [N] public double Fy_j { get; set; } j端 せん断力Y [N] public double Fz_j { get; set; } j端 せん断力Z [N] public double Mx_j { get; set; } j端 ねじりモーメント [N·mm] public double My_j { get; set; } j端 曲げモーメントY [N·mm] public double Mz_j { get; set; } j端 曲げモーメントZ [N·mm] public double Fx_mid { get; set; } 中点 軸力 [N] public double Fy_mid { get; set; } 中点 せん断力Y [N] public double Fz_mid { get; set; } 中点 せん断力Z [N] public double Mx_mid { get; set; } 中点 ねじりモーメント [N·mm] public double My_mid { get; set; } 中点 曲げモーメントY [N·mm] public double Mz_mid { get; set; } 中点 曲げモーメントZ [N·mm] Methods: public void CalcMidSectionForce(ElementBase element, List loads, List nodes) 中点の断面力を計算して設定(分布荷重を考慮した厳密計算) public SectionForceAtPoint CalcSectionForceAt(ElementBase element, List loads, List nodes, double xi) 任意の正規化座標位置での断面力を計算 public List CalcSectionForces(ElementBase element, List loads, List nodes, int divisions = 10) 要素を指定分割数で分割した各位置での断面力を計算 public double GetMaxAbsAxialForce() 最大軸力の絶対値を取得 public double GetMaxAbsShearForceY() 最大せん断力Y の絶対値を取得 public double GetMaxAbsShearForceZ() 最大せん断力Z の絶対値を取得 public double GetMaxAbsBendingMomentY() 最大曲げモーメントY の絶対値を取得 public double GetMaxAbsBendingMomentZ() 最大曲げモーメントZ の絶対値を取得 public double GetMaxAbsTorsion() 最大ねじりモーメントの絶対値を取得 public override string ToString() Returns a string that represents the current object. ### FEMur.Results.ElementStressCalculator public static class ElementStressCalculator 要素内部の任意位置での断面力を計算するヘルパークラス Methods: public static SectionForceAtPoint CalcSectionForce(ElementStress stress, ElementBase element, List loads, List nodes, double xi) 要素内の相対位置における断面力を計算 public static List CalcSectionForces(ElementStress stress, ElementBase element, List loads, List nodes, int divisions = 10) 要素を等分割した位置での断面力を計算。 要素長と荷重展開は分割点間で不変のため要素単位で1回だけ計算する。 ### FEMur.Results.EnvelopeQuantity public enum EnvelopeQuantity 節点の包絡の物理量。 Fields: Displacement = 0 変位(相対)[mm, rad]。 Velocity = 1 速度(相対)[mm/s, rad/s]。 AbsoluteAcceleration = 2 絶対加速度 [mm/s², rad/s²]。 ### FEMur.Results.EnvelopeValue public readonly struct EnvelopeValue 1成分の最大値・最小値と発生時刻。 Properties: public double Max { get; } 最大値。 public double TimeAtMax { get; } 最大値の発生時刻 [s]。 public double Min { get; } 最小値。 public double TimeAtMin { get; } 最小値の発生時刻 [s]。 public double MaxAbs { get; } 絶対値の最大 max(|Max|, |Min|)。 public double TimeAtMaxAbs { get; } 絶対値の最大の発生時刻 [s]。 ### FEMur.Results.NodalDisplacement public readonly struct NodalDisplacement Displacement of a single node: three translations and three rotations in the global coordinate system. Properties: public int NodeId { get; } The Node.Id of the node. This is an Id, not a position in Model.Nodes. public double Ux { get; } Translation along the global X axis. public double Uy { get; } Translation along the global Y axis. public double Uz { get; } Translation along the global Z axis. public double Rx { get; } Rotation about the global X axis. public double Ry { get; } Rotation about the global Y axis. public double Rz { get; } Rotation about the global Z axis. public Vector3 Translation { get; } Translation vector (Ux, Uy, Uz). public Vector3 Rotation { get; } Rotation vector (Rx, Ry, Rz). Methods: public override string ToString() Returns a readable summary such as Node 1: U=(0, 0, -0.7435), R=(0, 0.0005, 0). Units are not included because the same type also holds normalized mode shapes; see the remarks of this type. ### FEMur.Results.PlaneElementStress public sealed class PlaneElementStress 平面要素1つ分の応力結果。要素中心と各節点(要素の節点の並び順)の値を持つ。 節点値は要素内での外挿値で、隣接要素とは一般に一致しない(平均はしない)。 Properties: public int ElementId { get; } 要素ID public PlaneElementStressSample Center { get; } 要素中心(四角形は ξ = η = 0、三角形は重心)の値 public IReadOnlyList Nodes { get; } 各節点の値(要素の節点の並び順) Methods: public override string ToString() Returns a string that represents the current object. ### FEMur.Results.PlaneElementStressSample public sealed class PlaneElementStressSample 平面要素の1評価点の応力 [N/mm²] と変位 [mm]。成分は全体座標の (x, y) 方向。 σz は面外の応力で、平面ひずみでは ν(σx+σy)、平面応力では 0。 Properties: public double SigmaX { get; } x 方向の垂直応力 σx [N/mm²] public double SigmaY { get; } y 方向の垂直応力 σy [N/mm²] public double TauXY { get; } x-y 面内のせん断応力 τxy [N/mm²] public double SigmaZ { get; } 面外の垂直応力 σz [N/mm²](平面ひずみでは ν(σx+σy)、平面応力では 0) public double Ux { get; } x 方向変位 [mm] public double Uy { get; } y 方向変位 [mm] public double Sigma1 { get; } x-y 面内の第1主応力 [N/mm²] public double Sigma2 { get; } x-y 面内の第2主応力 [N/mm²] public double SigmaAngle { get; } σ1 の主軸角 [°](x 軸から y 軸へ向かう向きを正) public double VonMises { get; } von Mises 応力 [N/mm²](σx, σy, σz, τxy から計算) Methods: public override string ToString() Returns a string that represents the current object. ### FEMur.Results.ReactionForce public sealed class ReactionForce 節点反力クラス 拘束された節点で発生する反力とモーメントを格納 Constructors: public ReactionForce() コンストラクタ public ReactionForce(int nodeId, double fx, double fy, double fz, double mx, double my, double mz) コンストラクタ(全パラメータ指定) Properties: public int NodeId { get; set; } 節点ID public double Fx { get; set; } X方向反力 [N] public double Fy { get; set; } Y方向反力 [N] public double Fz { get; set; } Z方向反力 [N] public double Mx { get; set; } X軸周りの反力モーメント [N・mm] public double My { get; set; } Y軸周りの反力モーメント [N・mm] public double Mz { get; set; } Z軸周りの反力モーメント [N・mm] Methods: public override string ToString() 文字列表現 public bool HasReactionAt(int dof, double tolerance = 1E-10) 指定された自由度に反力があるかどうかを判定 public double GetReactionAt(int dof) 指定された自由度の反力値を取得 ### FEMur.Results.ResponseEnvelope public sealed class ResponseEnvelope 時刻歴応答解析の最大応答(包絡)。出力の間引きによらず全ステップで求めた値。 変位・速度は地盤に対する相対値、加速度は絶対加速度。反力は動的反力。 梁の断面力は i 端・中央・j 端の要素ローカル座標の値。 Properties: public IReadOnlyList NodeIds { get; } 包絡を持つ節点の Id。 public IReadOnlyList SupportNodeIds { get; } 反力の包絡を持つ支点の節点 Id(重複なし。同じ節点の複数の支点の反力は合算して包絡を取る)。 public IReadOnlyList ElementIds { get; } 断面力の包絡を持つ要素(梁・トラス)の Id。 Methods: public ComponentEnvelope GetNode(int nodeId, EnvelopeQuantity quantity) 節点 nodeId の物理量 quantity の包絡(成分は Ux..Rz)。 public ComponentEnvelope GetReaction(int nodeId) 支点 nodeId の動的反力の包絡(成分は Fx..Mz、全体座標系)。 public ComponentEnvelope GetBeamForce(int elementId, BeamForcePosition position) 要素 elementId の位置 position の断面力の包絡(成分は Fx..Mz、要素ローカル座標系)。 ### FEMur.Results.Result public sealed class Result Constructors: public Result() Properties: public string LoadCaseName { get; set; } 荷重ケース名 public List Loads { get; set; } この結果に対応する荷重リスト public IReadOnlyList NodalDisplacements { get; } Displacement of every node, in the same order as Model.Nodes. Empty until the model has been solved; never null. public List ElementStresses { get; set; } 要素ごとの断面力(応力) public List ShellStresses { get; set; } シェル要素の合応力。梁の断面力(ElementStresses)とはスキーマが異なるため別リストで持つ。 public IReadOnlyList AxisymmetricStresses { get; } 軸対称要素の応力。梁の断面力・シェルの合応力とはスキーマが異なるため別リストで持つ。 public IReadOnlyList PlaneElementStresses { get; } 平面要素の応力。梁の断面力・シェルの合応力・軸対称要素の応力とはスキーマが異なるため別リストで持つ。 public List ReactionForces { get; set; } 節点反力(拘束点での反力とモーメント) public List SurfaceSpringReactions { get; set; } 面ばねの節点反力と接地圧。節点反力は ReactionForces にも合流しているが、 接地圧と負担面積はこちらにしかない。 public bool IsCombinationCase { get; set; } LoadCombination 由来の結合ケース(複数ケースの荷重を同時載荷して独立に求解した結果)か。 true の場合、基本ケースと荷重が重複するため「全ケース重ね合わせ」からは除外される(#80) Methods: public NodalDisplacement GetDisplacement(int nodeId) Returns the displacement of the node with the given Node.Id. public bool TryGetDisplacement(int nodeId, out NodalDisplacement displacement) Looks up the displacement of the node with the given Node.Id. public ReactionForce GetReaction(int nodeId) Returns the reaction at the supported node with the given Node.Id. public bool TryGetReaction(int nodeId, out ReactionForce? reaction) Looks up the reaction at the supported node with the given Node.Id. public ElementStress GetElementStress(int elementId) Returns the section forces of the beam or truss element with the given ElementId. public bool TryGetElementStress(int elementId, out ElementStress? stress) Looks up the section forces of the beam or truss element with the given Id. public ShellStress GetShellStress(int elementId) Returns the stress resultants of the shell element with the given Id. public bool TryGetShellStress(int elementId, out ShellStress? stress) Looks up the stress resultants of the shell element with the given Id. public AxisymmetricStress GetAxisymmetricStress(int elementId) Returns the stresses of the axisymmetric element with the given Id. public bool TryGetAxisymmetricStress(int elementId, out AxisymmetricStress? stress) Looks up the stresses of the axisymmetric element with the given Id. public PlaneElementStress GetPlaneElementStress(int elementId) Returns the stresses of the plane element with the given Id. public bool TryGetPlaneElementStress(int elementId, out PlaneElementStress? stress) Looks up the stresses of the plane element with the given Id. public static Result Combine(IList results) 複数の荷重ケース結果を重ね合わせる(線形静的解析の重ね合わせの原理) ### FEMur.Results.SectionForceAtPoint public sealed class SectionForceAtPoint 要素内の特定位置での断面力 Properties: public double Position { get; set; } 要素内の相対位置 (0.0 = i端, 1.0 = j端) public double Fx { get; set; } public double Fy { get; set; } public double Fz { get; set; } public double Mx { get; set; } public double My { get; set; } public double Mz { get; set; } ### FEMur.Results.ShellStress public sealed class ShellStress シェル要素1つ分の応力結果。合応力は要素ローカル座標系の値なので、 解釈・描画のためにローカル軸も一緒に保持する。 節点値は要素内での外挿値であり、隣接要素とは一般に一致しない。 節点平均(スムージング)はここでは行わず、描画側のトグルで行う。 Constructors: public ShellStress() public ShellStress(int elementId) Properties: public int ElementId { get; set; } 要素ID public IReadOnlyList? LocalAxisX { get; } 要素ローカル x 軸(全体座標系での成分)。 コンストラクタでは未設定(null)で、ShellStressRecovery.Compute や Result の重ね合わせ処理が確定後に設定する public IReadOnlyList? LocalAxisY { get; } 要素ローカル y 軸。未設定の可能性は LocalAxisX と同じ public IReadOnlyList? LocalAxisZ { get; } 要素ローカル z 軸(面法線)。未設定の可能性は LocalAxisX と同じ public ShellStressSample Center { get; set; } 要素中心での合応力 public IReadOnlyList Nodes { get; } 各節点での合応力。要素の節点並び順。 Methods: public override string ToString() Returns a string that represents the current object. ### FEMur.Results.ShellStressSample public sealed class ShellStressSample シェル要素の1サンプル点における合応力。すべて要素ローカル座標系で、単位系は N–mm。 面内力 Nx/Ny/Nxy [N/mm]、曲げモーメント Mx/My/Mxy [N·mm/mm]、面外せん断 Qx/Qy [N/mm]。 Mx の単位 N·mm/mm は N と等価だが、意味を誤読させないため表示では N·mm/mm と明記すること。 Properties: public double Nx { get; set; } 面内力 x 方向 [N/mm] public double Ny { get; set; } 面内力 y 方向 [N/mm] public double Nxy { get; set; } 面内せん断力 [N/mm] public double Mx { get; set; } 曲げモーメント x 方向 [N·mm/mm] public double My { get; set; } 曲げモーメント y 方向 [N·mm/mm] public double Mxy { get; set; } ねじりモーメント [N·mm/mm] public double Qx { get; set; } 面外せん断力 x 方向 [N/mm] public double Qy { get; set; } 面外せん断力 y 方向 [N/mm] public double N1 { get; } 第1主面内力 [N/mm] public double N2 { get; } 第2主面内力 [N/mm] public double NAngle { get; } 主面内力の主軸角 [°](ローカルx軸から反時計回り) public double M1 { get; } 第1主モーメント [N·mm/mm] public double M2 { get; } 第2主モーメント [N·mm/mm] public double MAngle { get; } 主モーメントの主軸角 [°] Methods: public double VonMisesTop(double thickness) 板厚上面(ローカル +z 側)の von Mises 応力 [N/mm²]。 面内応力 σ = N/t + 6M/t² から算出する。面外せん断応力 τxz/τyz は上下面でゼロになる (TauXZ 参照)ので、Qx/Qy はこの値に影響しない。 public double VonMisesBottom(double thickness) 板厚下面(ローカル −z 側)の von Mises 応力 [N/mm²]。σ = N/t − 6M/t²。 public double SigmaX(double thickness, double z) 板厚方向の高さ z における面内応力 σx [N/mm²]。σx(z) = Nx/t + 12·Mx·z/t³。 z は中立面(板厚中央)を原点とする要素ローカル z 座標で、板内は -t/2 ≤ z ≤ +t/2。 z = ±t/2 を入れると Nx/t ± 6·Mx/t² となり、VonMisesTop / VonMisesBottom が使う上下面の式と一致する。 z は1次で効くので、上下面の値の線形補間が板内の分布と厳密に一致する。 public double SigmaY(double thickness, double z) 板厚方向の高さ z における面内応力 σy [N/mm²]。σy(z) = Ny/t + 12·My·z/t³。 引数と外挿の扱いは SigmaX と同じ。 public double TauXY(double thickness, double z) 板厚方向の高さ z における面内せん断応力 τxy [N/mm²]。τxy(z) = Nxy/t + 12·Mxy·z/t³。 引数と外挿の扱いは SigmaX と同じ。 public double TauXZ(double thickness, double z) 板厚方向の高さ z における面外せん断応力 τxz [N/mm²]。τxz(z) = 1.5·Qx/t·(1 − 4z²/t²)。 Mindlin 板の定式化では面外せん断ひずみを板厚方向に一定と仮定するが、応力は上下面の自由表面条件 (τ = 0)と平衡を満たす放物線分布で復元する。中立面 z = 0 で最大値 1.5·Qx/t、上下面 z = ±t/2 で ちょうど 0 になり、板厚方向に積分すると Qx に戻る。せん断補正係数 k = 5/6 はこの分布から導かれる値で、 剛性側と整合している。 z = ±t/2 では ζ = 2z/t が浮動小数点でもちょうど ±1.0 になる(BendingFactor 参照)ため、 戻り値は厳密に 0 になる。|z| > t/2(板外)でも例外にせず放物線のまま外挿するが、板外の値に 物理的な意味はない(範囲の判断は呼び出し側の責任とする)。 public double TauYZ(double thickness, double z) 板厚方向の高さ z における面外せん断応力 τyz [N/mm²]。τyz(z) = 1.5·Qy/t·(1 − 4z²/t²)。 分布と引数の扱いは TauXZ と同じ。 public double TauZ(double thickness, double z) 板厚方向の高さ z における面外せん断応力の合成値 τz = √(τxz² + τyz²) [N/mm²]。 面内回転に対する不変量なので、要素ローカル軸の取り方に依存しない。定義上つねに 0 以上。 分布と引数の扱いは TauXZ と同じ(中立面で最大、上下面で 0)。 public double Sigma1(double thickness, double z) 板厚方向の高さ z における最大主応力 σ1 [N/mm²](面内2主応力のうち代数的に大きいほう)。 σ1(z) = (σx+σy)/2 + √(((σx−σy)/2)² + τxy²) で、N1 と同じモール円の式を 合応力ではなく応力に対して使う。面内応力の主値なので、面外せん断 τxz/τyz は含めない。 「代数的に大きいほう」なので、両主応力が圧縮の場合は σ1 も負になる(絶対値が大きいほう、 ではない)。N1 は板厚全体の積分値である面内力の主値なので、曲げがある板では σ1 ≠ N1/t になる。 z 方向の分布について: (σx−σy)/2 と τxy はどちらも z の1次式なので √ の中身はその2乗和、 すなわち根号部分は z のアフィン写像のユークリッドノルムであり凸関数になる。 (σx+σy)/2 は z の1次式なので、σ1 = 1次式 + 凸関数 は z について凸。 したがって板内 −t/2 ≤ z ≤ +t/2 での σ1 の最大値は必ず上面か下面のどちらかで起き、 内部に最大値が隠れることはない。 引数と外挿の扱いは SigmaX と同じ。 public double Sigma2(double thickness, double z) 板厚方向の高さ z における最小主応力 σ2 [N/mm²](面内2主応力のうち代数的に小さいほう)。 σ2(z) = (σx+σy)/2 − √(((σx−σy)/2)² + τxy²)。常に σ2 ≤ σ1 で、 σ1 + σ2 = σx + σy(1次不変量)が成り立つ。 Sigma1 と逆に、σ2 は 1次式 − 凸関数 なので z について凹関数になる。 したがって板内での σ2 の最小値も必ず上面か下面のどちらかで起きる。 引数と外挿の扱いは SigmaX と同じ。 public double SigmaAngle(double thickness, double z) 板厚方向の高さ z における主応力の主軸角 [°](ローカルx軸から反時計回り、σ1 の方向)。 NAngle / MAngle の応力版。 public double SigmaMean(double thickness, double z) 板厚方向の高さ z における平均主応力 [N/mm²]。 σmean(z) = (σ1 + σ2)/2 = (σx + σy)/2 で、モール円の中心に等しい。 面内回転に対する不変量(1次不変量の 1/2)なので、要素ローカル軸の取り方に依存しない。 面内応力のモール円から定義するので、面外せん断 τxz/τyz は含めない。 σx/σy が z の1次式なので σmean も z の1次式であり、上下面の値の線形補間が板内の分布と厳密に一致する。 引数と外挿の扱いは SigmaX と同じ。 public double TauMax(double thickness, double z) 板厚方向の高さ z における面内最大せん断応力 [N/mm²]。 τmax(z) = √(((σx − σy)/2)² + τxy²) = (σ1 − σ2)/2 で、モール円の半径に等しい。 面内回転に対する不変量なので、要素ローカル軸の取り方に依存しない。 定義上つねに 0 以上になる。 あくまで面内応力 σx/σy/τxy から決まる「面内の」最大せん断応力であり、 面外せん断 τxz/τyz は含めない。 Sigma1 が z について凸、Sigma2 が凹なので τmax = (σ1 − σ2)/2 も z について凸になり、板内の最大値は必ず上面か下面のどちらかで起きる。 引数と外挿の扱いは SigmaX と同じ。 public double VonMises(double thickness, double z) 板厚方向の高さ z における von Mises 応力 [N/mm²]。 σvM(z) = √(σx² − σx·σy + σy² + 3·(τxy² + τxz² + τyz²))。 VonMisesTop / VonMisesBottom は本メソッドに z = ±t/2 を渡す 委譲であり、上下面の式はここ1箇所にしか存在しない。 面外せん断応力 τxz/τyz(TauXZ)は上下面で厳密に 0 なので、上下面の値は面外せん断を 含めなかった以前の実装とビット単位で一致する。板厚の内部では面外せん断が効き、中立面では 膜応力と面外せん断の最大値が組み合わさる。 z の1次式ではない(面内成分は2次式、面外せん断は4次式の平方根)ため、上下面の値の線形補間は近似になる。 面外せん断があると板厚方向の最大値が板の内部に出ることがあるので、最大値は MaxVonMises で求める。引数と外挿の扱いは SigmaX と同じ。 ### FEMur.Results.SurfaceSpringReaction public sealed class SurfaceSpringReaction 面ばね(Winkler 弾性床)の節点反力と接地圧。 節点が複数の面ばねに属する場合は要素ごとに別エントリになる。 法線の向きが要素ごとに違えば接地圧も変わるため、1 本にまとめると情報が失われる。 接地・離間にかかわらず、面ばねを持つ全節点がエントリとして出力される。 絞り込みは表示側の責務とする(ReactionForce と同じ方針)。 Constructors: public SurfaceSpringReaction() Properties: public int ElementId { get; set; } 面ばねが載っているシェル要素のID public int NodeId { get; set; } 節点ID public double TributaryArea { get; set; } この節点の負担面積 [mm²]。離間していても形状から決まる値が入る public double Fx { get; set; } X方向反力 [N](地盤から構造物への力) public double Fy { get; set; } Y方向反力 [N] public double Fz { get; set; } Z方向反力 [N] public double NormalPressure { get; set; } 接地圧 [N/mm²]。圧縮が正。反力の面法線成分を負担面積で割った値なので、 メッシュ分割に依存せず地盤の許容応力度と直接比較できる。 public bool IsInContact { get; set; } 接地しているか。CompressionOnly が true のばねで離間した節点は false になり、反力と接地圧は 0 になる。 Methods: public override string ToString() Returns a string that represents the current object. ### FEMur.Results.TimeHistoryResult public sealed class TimeHistoryResult 1つの荷重ケースの時刻歴応答解析の結果。出力時刻(OutputInterval ごとに間引いた時刻)の 節点の変位・速度・加速度と支点反力を持つ。 Properties: public string LoadCaseName { get; } 荷重ケース名。 public double TimeStep { get; } 積分の時間刻み [s]。 public int OutputInterval { get; } 結果を保存したステップの間隔。 public bool IsRelativeToGround { get; } 地動を含むケースなら true(変位・速度・加速度は地盤に対する相対値)。 public IReadOnlyList Times { get; } 出力時刻 [s]。この添字が各メソッドの step になる。 public IReadOnlyList NodeIds { get; } 結果を持つ節点の Id。 public ResponseEnvelope Envelope { get; } 最大応答(包絡)。出力の間引きによらず全ステップで求めた値。 Methods: public NodalDisplacement GetDisplacement(int step, int nodeId) 出力ステップ step の変位(mm、rad)。 public NodalDisplacement GetVelocity(int step, int nodeId) 出力ステップ step の速度(mm/s、rad/s)。 public NodalDisplacement GetAcceleration(int step, int nodeId) 出力ステップ step の加速度(mm/s²、rad/s²)。地動を含むケースでは相対加速度。 public NodalDisplacement GetAbsoluteAcceleration(int step, int nodeId) 絶対加速度 = 相対加速度 + 地動加速度(並進成分のみ加える)。地動のないケースでは加速度と同じ。 public Vector3 GetGroundAcceleration(int step) 出力ステップ step の地動加速度 [mm/s²](全体座標系。地動がなければ 0)。 public IReadOnlyList GetReactions(int step) 出力ステップ step の支点反力(慣性力・減衰力を含む動的反力。面ばねは含まない)。 ## FEMur.Solver ### FEMur.Solver.DeformationEnergyCalculator public sealed class DeformationEnergyCalculator ひずみエネルギー(変形エネルギー)を計算するクラス Methods: public DeformationEnergyCalculator.DeformationEnergyResult Calculate(Model model) モデル全体のひずみエネルギーを計算 U = 0.5 * u^T * K * u public DeformationEnergyCalculator.DeformationEnergyResult Calculate(Model model, Result result) 指定した結果を使用してモデル全体のひずみエネルギーを計算 public double CalculateTotal(Model model) モデル全体のひずみエネルギーを計算(簡易版:合計値のみ) public DeformationEnergyCalculator.ElementDeformationEnergy CalculateElementEnergy(Model model, int elementId) 指定した要素のひずみエネルギーを計算 public DeformationEnergyCalculator.ElementDeformationEnergy CalculateElementEnergy(Model model, int elementId, Result result) 指定した結果を使用して要素のひずみエネルギーを計算 ### FEMur.Solver.DeformationEnergyCalculator.DeformationEnergyResult public sealed class DeformationEnergyCalculator.DeformationEnergyResult モデル全体のひずみエネルギー結果 Properties: public double TotalEnergy { get; set; } モデル全体のひずみエネルギー [N・mm] public List ElementEnergies { get; set; } 要素ごとのひずみエネルギー public double TotalAxialEnergy { get; set; } 軸力によるひずみエネルギーの合計 [N・mm] public double TotalBendingEnergy { get; set; } 曲げモーメントによるひずみエネルギーの合計 [N・mm] public double TotalTorsionEnergy { get; set; } ねじりモーメントによるひずみエネルギーの合計 [N・mm] ### FEMur.Solver.DeformationEnergyCalculator.ElementDeformationEnergy public sealed class DeformationEnergyCalculator.ElementDeformationEnergy 要素ごとのひずみエネルギー Properties: public int ElementId { get; set; } 要素ID public double TotalEnergy { get; set; } 要素全体のひずみエネルギー [N・mm] public double AxialEnergy { get; set; } 軸力によるひずみエネルギー [N・mm] public double BendingYEnergy { get; set; } Y軸周り曲げモーメントによるひずみエネルギー [N・mm] public double BendingZEnergy { get; set; } Z軸周り曲げモーメントによるひずみエネルギー [N・mm] public double TorsionEnergy { get; set; } ねじりモーメントによるひずみエネルギー [N・mm] public double BendingEnergy { get; } 曲げエネルギーの合計 ### FEMur.Solver.EigenSolver public sealed class EigenSolver 固有値解析ソルバー(#108)。 一般化固有値問題 K φ = λ M φ を、K_ff の疎 Cholesky 分解を用いた シフト付き(σ=0)ランチョス法(M-内積・完全再直交化・デフレーション付き再スタート)で解き、 指定次数までの低次固有モード・固有周期を抽出する。 - 剛性 K は LinearStaticSolver と同一の組立(Fixed=自由度消去、Spring=対角加算) - 質量 M は集中質量の対角行列(部材自重 + LoadToMass、並進 DOF のみ) - 単位: 質量は内部でトン(1 N = 1 t·mm/s²)→ λ = ω² [rad²/s²] がそのまま成立 Properties: public int NumModes { get; set; } 抽出する固有モード数(低次から) public double Tolerance { get; set; } 収束判定の相対残差許容値 public int MaxIterations { get; set; } ランチョス反復の総数上限。0 なら max(3×NumModes+20, 100) を自動採用 public bool EnableAutoRegularization { get; set; } K が正定値でない場合に自動正則化を試みる(LinearStaticSolver と同じ代表剛性×係数) public IProgress? Progress { get; set; } 進捗通知先(null で通知なし)。0.0–1.0 を通知する public CancellationToken CancellationToken { get; set; } キャンセルトークン。進捗通知地点で中断を検査する Methods: public EigenResult Solve(Model model) ### FEMur.Solver.LinearStaticSolver public sealed class LinearStaticSolver 線形静解析ソルバー。 Properties: public bool EnableRegularization { get; set; } public double RotationalRegularizationFactor { get; set; } public bool EnableTranslationalRegularization { get; set; } public double TranslationalRegularizationFactor { get; set; } public bool EnableAutoRegularization { get; set; } public int MaxStatusIterations { get; set; } public IProgress? Progress { get; set; } 進捗通知先(null で通知なし)。0.0–1.0 を通知する public CancellationToken CancellationToken { get; set; } キャンセルトークン。進捗通知地点で中断を検査する Methods: public SolveOutcome Solve(Model model) 全荷重を一括で載荷して求解する。入力の model は変更しない。 public SolveOutcome SolveAllCases(Model model) 荷重ケースごとに解析を実行 剛性マトリクスは1回だけ組み立て、荷重ベクトルのみケースごとに組み立てる public static double GetSpringStiffness(Joint joint, int dofIndex) Jointから指定された自由度のばね剛性を取得 ### FEMur.Solver.NewmarkScheme public enum NewmarkScheme Newmark-β 法のパラメータの組。 Fields: AverageAcceleration = 0 平均加速度法(β = 1/4, γ = 1/2)。無条件安定。 LinearAcceleration = 1 線形加速度法(β = 1/6, γ = 1/2)。条件付き安定。 ### FEMur.Solver.ShellDeformationEnergyCalculator public sealed class ShellDeformationEnergyCalculator シェル要素のひずみエネルギーを膜・板曲げに分解して計算するクラス。 DeformationEnergyCalculator は BeamElement / TrussElement しか扱わず シェル要素を読み飛ばすため、シェル専用の計算経路として分離した。 算出手順は要素ごとに次のとおり。T は局所→全体の直交変換行列なので、 その転置が逆変換になる(DeformationEnergyCalculator の梁・トラスと同じ作法)。 uₗ = Tᵀ · u_g E_total = ½ uₗ · (K · uₗ) // drilling を含む要素剛性全体 E_membrane = ½ uₘ · (K_membrane · uₘ) // uₘ = uₗ の各節点 DOF 0,1,5(3n) E_bending = ½ u_b · (K_bending · u_b) // u_b = uₗ の各節点 DOF 2,3,4(3n) E_total − E_membrane − E_bending が drilling ペナルティの寄与になる。 drilling は物理量ではなく数値安定化の項なので、内訳としては出さず合計にのみ含める。 drilling ペナルティは面内変位(DOF 0,1)と面内回転(DOF 5)の差を罰する Hughes–Brezzi 型で 3 つの DOF にまたがるため、局所剛性を DOF で切り出して膜・曲げに分ける方法は使えない。 そのため部分剛性は ShellElement.CalcPartialStiffness から取得する。 Methods: public List Calculate(Model model, Result result) 指定した結果を使ってモデル内の全シェル要素のひずみエネルギーを計算する。 シェル要素以外(梁・トラスなど)は対象外として読み飛ばす。 ### FEMur.Solver.ShellElementEnergy public sealed class ShellElementEnergy シェル要素1つ分のひずみエネルギー [N·mm]。 Properties: public int ElementId { get; set; } 要素ID public double TotalEnergy { get; set; } 全ひずみエネルギー(drilling ペナルティを含む) public double MembraneEnergy { get; set; } 膜(面内)のひずみエネルギー public double BendingEnergy { get; set; } 板曲げのひずみエネルギー。MITC の定式化どおり面外せん断を含む (せん断を tying 補間で曲げと一体に扱うため分離できない)。 public double DrillingEnergy { get; } drilling ペナルティの寄与 [N·mm]。物理的なひずみエネルギーではなく、 面内回転(rz)に剛性を与えて要素が特異になるのを防ぐための数値安定化項。 剛性行列が半正定値なので理論上つねに非負で、全体に対して大きい場合は drilling 係数かメッシュ品質を疑う手がかりになる。物理量ではないため GH の出力には内訳として出さず、全ひずみエネルギーにのみ含める。 public double? Volume { get; set; } 要素の体積 [mm³](面積 × 板厚)。面積は Area(実面積)を使う。 板厚が取れない(断面が CrossSection_Shell でない、または板厚が 0 以下)場合は null。 public double? EnergyDensity { get; } ひずみエネルギー密度 [N·mm/mm³](= N/mm²)。TotalEnergy を Volume で割った 要素内の平均値で、drilling ペナルティの寄与を含む。体積が求まらない場合は null。 要素の大きさに依存しないので、メッシュ寸法が不揃いなモデルでもエネルギーの集中箇所を比較できる (TotalEnergy は要素が大きいほど大きくなる)。 ### FEMur.Solver.SolveOutcome public sealed class SolveOutcome 線形静解析の結果一式。 Properties: public IReadOnlyDictionary Results { get; } 荷重ケース名から結果を引く。求解したケースが必ず1件以上入る。 public IReadOnlyList Warnings { get; } この求解で発生した警告。警告がなければ空。 public Result Combined { get; } 基本ケース(IsCombinationCase が false のもの)を重ね合わせた結果。 ケースが1つならその結果そのもの。 ### FEMur.Solver.TimeHistoryMethod public enum TimeHistoryMethod 時刻歴応答解析の解法。 Fields: Direct = 0 直接積分(Newmark-β 法)。近似がない。 Modal = 1 モード重ね合わせ法。低次モードへ射影して解く。静的補正は行わない。 ### FEMur.Solver.TimeHistoryOutcome public sealed class TimeHistoryOutcome 時刻歴応答解析の結果一式。 Properties: public IReadOnlyDictionary Results { get; } 荷重ケース名から結果を引く。求解したケースが必ず1件以上入る。 public IReadOnlyList Warnings { get; } この求解で発生した警告。警告がなければ空。 ### FEMur.Solver.TimeHistorySolver public sealed class TimeHistorySolver 線形の時刻歴応答解析ソルバー(直接積分またはモード重ね合わせ法、Newmark-β 法)。 時刻歴用の加振(GroundMotion / TimeHistoryPointLoad / TimeHistoryLoad)を LoadCase ごとにまとめ、ケースごとに独立して解く。減衰は Damping のレイリー型 (Rayleigh / StiffnessProportional)。剛性・集中質量・剛床・境界条件は固有値解析と同じ組立を使う。 Properties: public double? TimeStep { get; set; } 積分の時間刻み [s]。null ならケース内の波形の最小サンプル間隔。 public double? Duration { get; set; } 解析時間 [s]。null ならケース内の最長の波形長。波形の終了後は自由振動になる。 public NewmarkScheme Scheme { get; set; } Newmark-β 法のパラメータ。既定は平均加速度法。 public TimeHistoryMethod Method { get; set; } 解法。既定は直接積分。 public int NumModes { get; set; } モード重ね合わせ法で使うモード数(低次から)。Method = Modal のときだけ使う。 public int OutputInterval { get; set; } 結果を保存するステップの間隔(1 なら全ステップ)。初期状態(step 0)は常に保存する。 最終ステップは interval の倍数のときだけ保存される(端数分は保存されない)。 public IProgress? Progress { get; set; } 進捗通知先(null で通知なし)。0.0–1.0 を通知する。 public CancellationToken CancellationToken { get; set; } キャンセルトークン。 Methods: public TimeHistoryOutcome Solve(Model model) 時刻歴用の加振を含む全ケースを解き、結果と警告を TimeHistoryOutcome に載せて返す。 ## FEMur.Supports ### FEMur.Supports.Support public sealed class Support : SupportBase Constructors: public Support() 既定コンストラクタ(全自由度 Free) public Support(Support other) コピーコンストラクタ Properties: public int NodeId { get; set; } public Point3? Position { get; } public IReadOnlyList Types { get; } 各自由度の支持タイプ(Free / Fixed / Spring)。要素数は常に 6。 public IReadOnlyList SpringStiffness { get; } ばね支点の剛性値(SupportCondition.Spring の場合に使用)。要素数は常に 6。 public LocalFrame? Frame { get; } 支持条件を測る局所座標系。null は全体座標。 値があるとき Types と SpringStiffness は局所軸の値を表す (UX=XAxis、UY=YAxis、UZ=ZAxis、RX〜RZ は各軸まわりの回転)。 public IReadOnlyList Conditions { get; } 後方互換用の計算プロパティ: Types[i] == Fixed → true public IReadOnlyList Stiffness { get; } 後方互換用の計算プロパティ: Fixed → FixedStiffness, Spring → SpringStiffness[i], Free → 0 Methods: public static Support AtNode(int nodeId, bool fixDX, bool fixDY, bool fixDZ, bool fixRX, bool fixRY, bool fixRZ) 各自由度の固定/自由を指定してノードID上に支点を作成 public static Support AtNode(int nodeId, bool[] conditions) bool配列(true→Fixed)でノードID上に支点を作成 public static Support AtNode(int nodeId, SupportCondition[] types, double[] springStiffness) 支持タイプとばね剛性を指定してノードID上に支点を作成 public static Support AtPoint(Point3 position, bool fixDX, bool fixDY, bool fixDZ, bool fixRX, bool fixRY, bool fixRZ) 各自由度の固定/自由を指定して座標上に支点を作成 public static Support AtPoint(Point3 position, bool[] conditions) bool配列(true→Fixed)で座標上に支点を作成 public static Support AtPoint(Point3 position, SupportCondition[] types, double[] springStiffness) 支持タイプとばね剛性を指定して座標上に支点を作成 public static Support Fixed(int nodeId) 全6自由度を固定した支点(完全固定)をノードID上に作成 public static Support Fixed(Point3 position) 全6自由度を固定した支点(完全固定)を座標上に作成 public static Support Pinned(int nodeId) 並進3自由度を固定・回転3自由度を解放した支点(ピン)をノードID上に作成 public static Support Pinned(Point3 position) 並進3自由度を固定・回転3自由度を解放した支点(ピン)を座標上に作成 public Support WithFrame(LocalFrame frame) この支持条件の複製に frame を設定して返す。 public Support DeepCopy() この支持条件の複製を返す。 public override string ToString() Returns a string that represents the current object. Fields: public const double FixedStiffness = 1000000000000000 固定支持に使用するペナルティ剛性値 [N/mm or N·mm/rad]。 ソルバーは固定支持を自由度消去で扱うためこの値を使わない。 Stiffness の表示値と MGT 出力でのみ使用する。 ### FEMur.Supports.SupportBase public abstract class SupportBase 支持条件の抽象基底。節点支持(Support)、面ばね(SurfaceSpring)、 従属自由度(DofCoupling)の共通の親。 この基底は Grasshopper の Supports 端子ひとつで3種類を運ぶために存在する。 コアの Model は型付きのリスト (Supports / SurfaceSprings / DofCouplings)を保つため、ソルバー側でこの型を使うことはない。 コンストラクタを private protected にして、外部アセンブリからの継承を塞ぐ。 派生を増やすときは Model のリストと AssembleModel の振り分け、シリアライズを揃える必要があるため。 ### FEMur.Supports.SupportCondition public enum SupportCondition 各自由度の支持条件を表す列挙型 Fields: Free = 0 自由(拘束なし) Fixed = 1 固定(ペナルティ法で極大ばね剛性を適用) Spring = 2 ばね支点(ユーザー指定の剛性値を適用) ### FEMur.Supports.SurfaceSpring public sealed class SurfaceSpring : SupportBase シェル要素に与える面ばね(Winkler 弾性床)[N/mm³]。 節点ばね(Support の Spring)が 節点ごとの剛性 [N/mm] を直接受け取るのに対し、こちらは単位面積あたりの値を受け取り、 節点への配分(負担面積の積分)を FEMur 側で行う。値がメッシュ分割に依存しないため、 ベタ基礎やスラブオングレードの地盤反力係数をそのまま入力できる。 対象要素は面の重心座標(Centroid)で解決するため、GH では ShellElement に渡したものと同じ Mesh から作られた要素を渡す必要がある。 SurfaceLoad と同じ解決経路を使う。 Constructors: public SurfaceSpring() public SurfaceSpring(int elementId, Vector3 stiffness, bool local = true, bool compressionOnly = false) 要素IDを指定して面ばねを作成する public SurfaceSpring(Point3 centroid, Vector3 stiffness, bool local = true, bool compressionOnly = false) 面の重心座標を指定して面ばねを作成する(要素IDは Model 構築時に解決される) public SurfaceSpring(SurfaceSpring other) コピーコンストラクタ Properties: public int ElementId { get; set; } 対象シェル要素のID。未解決は −1(Model 構築時に Centroid から解決される) public Point3? Centroid { get; set; } 対象面の重心座標。要素ID解決に使う public Vector3 Stiffness { get; set; } 面ばね定数 [N/mm³]。Local が false なら全体座標系、true なら要素ローカル系。 成分は 0 以上でなければならない(0 は「その方向は支持しない」の意味)。 public bool Local { get; set; } true のとき Stiffness を要素ローカル軸 [ex, ey, ez] で解釈する。 既定が true なのは、面ばねの主用途が法線方向の地盤反力であり、 傾斜スラブや地下壁でもローカル指定なら入力が変わらないため。 (Local の既定が false なのは、 面荷重の主用途が鉛直荷重=全体座標だからで、用途の違いに対応している) public bool CompressionOnly { get; set; } true のとき、面法線方向に離間した節点のばねを切る(地盤は引張を伝えない)。 離間した節点は 3 成分すべてを切る。地盤が離れれば面内摩擦も失われるため。 Methods: public SurfaceSpring DeepCopy() この面ばねの複製を返す。 public override string ToString() Returns a string that represents the current object.