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
[整数]
PAR配列のエントリの数。
DFLAG
[論理]
差分フラグ。
IFLAG
[論理]
初期化フラグ。
MODLOADS
[倍精度]
モード荷重を含む配列。
NMODES
[整数]
弾性体のモードの数を指定する整数値。これは、LOADVEC出力のサイズと弾性体のモードの数が一致することを保証するために使用できます。
NCASES
[整数]
荷重ケースの総数を指定する整数値。NCASES = 0の場合、この弾性体に指定されるモード荷重はありません。

出力

SCALE
[倍精度]
この弾性体のモード力を算出するためにモード荷重に乗算される、計算済みのスケールファクター。
この出力は、対応するForce_FlexModalステートメントでforce_subTRUEに設定されている場合は使用されません。
ICASE
[整数]
スケールファクターが適用される荷重ケースのID。
これは、スケールファクターを計算する荷重ケースのIDに設定します。ICASEを0に設定すると、MotionSolveLOADVEC出力からモード荷重を取得します。詳細については、コメントをご参照ください。
LOADVEC
[倍精度]
計算されたモード荷重を含む倍精度ベクトル配列。

下の例は、ケースIDのスケール式を定義するために使用可能なPythonコードのサンプルを示しています。この例では、ケースID 1のスケールが 1 + 0.2 sin ( 2 π t ) + 0.1 sin ( 6 π t ) として定義されます。対応する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];
    }
}

コメント

  1. MFOSUBは、システム状態と時間に依存する弾性体上のモード力を定義するために使用できます。モード力は次のように表されます: (1)
    F m = i = 1 i = n c a s e s s c a l e i ( q , t ) × m o d l o a d s i

    ここで、

    F m はモード力です。

    s c a l e i ( q , t ) はケースiに対応するモード荷重のスケールファクターです。このスケールファクターは、モデル状態(q)と時間(t)の関数にすることができます。

    m o d l o a d s i はケースiに対応するモード荷重です。

    これは、以下の複数の方法で定義できます:

    モード荷重ケースのスケールファクターを定義
    • この方法は、単純なMotionSolve式で定義できない場合やシステム状態を使用してスケールファクターを定義する必要がある場合に、スケールファクターを定義するために使用します。SYSFNCまたはSYSARYを使用して、シミュレーション中の瞬間的な状態にアクセスし、スケールファクターを計算することもできます。この場合、MotionSolveMFOSUBからの次の2つの戻り値を期待します:
      1. 荷重ケースID ICASE
      2. スケールファクター SCALE
    この方法では、1つの荷重ケースIDまたはインデックスのみのスケールファクターを定義できます。この方法を使用するには、対応するForce_FlexModalモデルステートメントでforce_subFALSEに設定します。MotionSolveは、スケールファクターを指定されたケースIDのモード荷重に掛けて、モード力を取得します。(2)
    F m , i = s c a l e ( q , t ) × m o d l o a d s i

    複数のモード荷重のスケールファクターを定義

    この方法は、使用可能なすべてのモード荷重ケースに共通のスケールファクターを定義するために使用します。前回と同様に、SYSFNCまたはSYSARYを使用して、スケールファクターの定義のためだけに瞬間的なモデルの状態にアクセスすることもできます。この場合、MotionSolveMFOSUBからの次の3つの戻り値を期待します:
    • 荷重ケースID ICASE
    • スケールファクター SCALE
    • LOADVECで渡される混合モード荷重ケース。
      この方法を使用するには、対応するForce_FlexModalモデルステートメントでforce_subFALSEに設定し、MFOSUBICASE0に設定します。ICASE0に設定すると、MotionSolveは、スケールファクターを混合モード荷重ベクトルに掛けてモード力を取得します。(3)
      F m = s c a l e ( q , t ) i f i ( t ) × m o d l o a d s i

      ここで、 f ( t ) は時間のみの関数です。

      モード力を定義

      MFOSUBを直接使用したモード力の定義は、現在のバージョンのMotionSolveではサポートされていません。