MFOSUB
Modelingモード力エンティティのスケールファクターを計算するために使用します。また、MFOSUBを使用して、弾性体上の分布荷重形状を計算して返すこともできます。
使用
MFOSUBで計算されるユーザー定義のスケールまたは荷重形状:
<Force_FlexModal
id = "1"
label = "MFORCE_1"
case_id = "1"
flex_body_id = "30102"
usrsub_param_string = "USER(1)"
usrsub_dll_name = "mfosub_test"
usrsub_fnc_name = "MFOSUB"
force_sub = "false"
/>
フォーマット
- Fortranの呼出し構文
-
SUBROUTINE MFOSUB (ID, TIME, PAR, NPAR, DFLAG, IFLAG, RESULTS, MODLOADS, NMODES, NCASES, SCALE, ICASE, LOADVEC)
- C/C++の呼出し構文
-
void STDCALL MFOSUB (int *id, double *time, double *par, int *npar, int *dflag, int *iflag, double *modloads, int *nmodes, int *ncases, double *scale, int *icase, double *loadvec)
属性
- ID
- [整数]
- TIME
- [倍精度]
- PAR
- [倍精度]
- NPAR
- [整数]
- DFLAG
- [論理]
- IFLAG
- [論理]
- MODLOADS
- [倍精度]
- NMODES
- [整数]
- NCASES
- [整数]
出力
- SCALE
- [倍精度]
- ICASE
- [整数]
- LOADVEC
- [倍精度]
例
下の例は、ケースIDのスケール式を定義するために使用可能なPythonコードのサンプルを示しています。この例では、ケースID 1のスケールが として定義されます。対応するForce_FlexModalステートメントは次のようになります:
<Force_FlexModal
id = "1"
label = "MFORCE_1"
flex_body_id = "30102"
usrsub_param_string = "USER(1)"
usrsub_dll_name = "mfosub_test"
usrsub_fnc_name = "MFOSUB"
force_sub = "false"
/>
mfosub_testライブラリ内のMFOSUBコードを以下に示します:
DLLFUNC void STDCALL MFOSUB (int *id, double *time, double *par, int *npar, int *dflag, int *iflag, double *modloads, int
*nmodes, int *ncases, double *scale, int *icase, double *loadvec)
{
{
*scale = 1.0+0.2*sin(double(2*PI*(*time)))+0.1*sin(double(2*PI*(*time)*3));
*icase = (int)par[0];
}
}
コメント
- MFOSUBは、システム状態と時間に依存する弾性体上のモード力を定義するために使用できます。モード力は次のように表されます:
(1) ここで、
はモード力です。
はケースiに対応するモード荷重のスケールファクターです。このスケールファクターは、モデル状態(q)と時間(t)の関数にすることができます。
はケースiに対応するモード荷重です。
これは、以下の複数の方法で定義できます:
モード荷重ケースのスケールファクターを定義- この方法は、単純なMotionSolve式で定義できない場合やシステム状態を使用してスケールファクターを定義する必要がある場合に、スケールファクターを定義するために使用します。SYSFNCまたはSYSARYを使用して、シミュレーション中の瞬間的な状態にアクセスし、スケールファクターを計算することもできます。この場合、MotionSolveはMFOSUBからの次の2つの戻り値を期待します:
- 荷重ケースID ICASE
- スケールファクター SCALE
この方法では、1つの荷重ケースIDまたはインデックスのみのスケールファクターを定義できます。この方法を使用するには、対応するForce_FlexModalモデルステートメントでforce_subをFALSEに設定します。MotionSolveは、スケールファクターを指定されたケースIDのモード荷重に掛けて、モード力を取得します。(2) 複数のモード荷重のスケールファクターを定義
この方法は、使用可能なすべてのモード荷重ケースに共通のスケールファクターを定義するために使用します。前回と同様に、SYSFNCまたはSYSARYを使用して、スケールファクターの定義のためだけに瞬間的なモデルの状態にアクセスすることもできます。この場合、MotionSolveはMFOSUBからの次の3つの戻り値を期待します:- 荷重ケースID ICASE
- スケールファクター SCALE
- LOADVECで渡される混合モード荷重ケース。この方法を使用するには、対応するForce_FlexModalモデルステートメントでforce_subをFALSEに設定し、MFOSUBでICASEを0に設定します。ICASEを0に設定すると、MotionSolveは、スケールファクターを混合モード荷重ベクトルに掛けてモード力を取得します。
(3) ここで、 は時間のみの関数です。
モード力を定義
MFOSUBを直接使用したモード力の定義は、現在のバージョンのMotionSolveではサポートされていません。
- この方法は、単純なMotionSolve式で定義できない場合やシステム状態を使用してスケールファクターを定義する必要がある場合に、スケールファクターを定義するために使用します。SYSFNCまたはSYSARYを使用して、シミュレーション中の瞬間的な状態にアクセスし、スケールファクターを計算することもできます。この場合、MotionSolveはMFOSUBからの次の2つの戻り値を期待します: