Force: FlexModal

Model ElementForce_FlexModalは、弾性体上の分布力を定義します。

説明

分布荷重には次の2つの成分があります:
  • 剛体成分。これが作用する弾性体を加速させる傾向があります。
  • モード成分。これが作用する弾性体を変形させる傾向があります。

フォーマット

<Force_FlexModal
       Id                                   = "integer"
       flex_body_id                         = "integer"
       {
               case_idx | case_id           = "integer"
               scale_expr                   = "string"
               [
                       usrsub_dll_name      = "string"
                       usrsub_fnc_name      = "string”
                       usrsub_param_string  = "User(par_1, ... par_N)"
                       |
                       Interpreter          = { "PYTHON" | "MATLAB" }
                       script_name          = "string"
                       usrsub_fnc_name      = "string"
                       usrsub_param_string  = "User(par_1, ... par_N)"
               ]
               [
                       force_sub            = "TRUE" | "FALSE"
               ]
       }
/>

属性

id
Force_FlexModal要素の要素識別番号を指定します。この番号は、すべてのForce_FlexModal要素の中で一意である必要があります。このパラメータは必須です。
範囲: 整数 > 0
flex_body_id
この力が作用する弾性体のIDを指定します。このパラメータは必須です。
範囲: 整数 > 0
case_idx
分布荷重の形状を定義するために使用されるモード荷重ケース番号を指定します。荷重ケースは、Reference_FlexDataモデリング要素内のXML入力デックに格納されます。Reference_FlexData内の別個のModeLoadブロックに、すべての荷重ケースが含まれています。
範囲: 整数 >= 0
case_id
分布荷重の形状を定義するために使用されるモード荷重ケースIDを指定します。荷重ケースは、Reference_FlexDataモデリング要素内のXML入力デックに格納されます。Reference_FlexData内の別個のModeLoadブロックに、すべての荷重ケースが含まれています。IDとインデックスの違いは、インデックスは連続している必要がありますが、IDはその必要がないことです。
範囲: 整数 > 0
scale_expr
スカラー量に評価される式を指定します。荷重ケースがこの式の実行時の値で乗算されることで、弾性体に作用する分布荷重が生成されます。scale_exprには、定数、時間の関数、または状態の関数を指定できます。これは連続している必要があります。
usrsub_param_string
このキーワードは、データファイルからユーザー作成サブルーチンに渡されるパラメータのリストを定義します。このキーワードは、ユーザー作成サブルーチンを定義する場合にのみ使用します。
usrsub_fnc_name
このキーワードは、分布力の定義を含む関数の名前を指定します。この関数は、Fortran、C、C++、またはPythonで記述できます。
usrsub_dll_name
ユーザーサブルーチンを含むDLLまたは共有ライブラリのパスと名前を指定します。MotionSolveはこの情報を使用して、実行時にDLL内のユーザーサブルーチンを読み込みます。
force_sub
ユーザーサブルーチンが、実際の力を返すべきか(TRUE)、それともスケーリングされる形状を返すべきか(FALSE)を指定するブール値です。
範囲:"TRUE"または"FALSE"
interpreter
ユーザースクリプトが記述されたインタープリタ型言語を指定します。
範囲:"Matlab"または"Python"
script_name
usrsub_fnc_nameで指定されたルーチンを含むユーザー作成スクリプトのパスと名前を指定します。

ここでは、長方形プレートに作用する分布荷重を例として使用し、図 5で示しているプロセスの実装方法を説明します。 図 1 は、解析対象システムの概略図です。



図 1. プレートモデル

このプレートと分布荷重に対応するFE入力ファイルを図 2に示します。

  • 5つの取り付け節点、4つのコーナー節点(1、11、111、121)、および1つの中心節点(61)が定義されています。
    ASET1     123        111     121       1      11
    ASET1     123456      61
  • 次のようにポイント荷重がすべての節点に適用されます。
    • コーナー節点上の負のZ軸に沿って、253.36Nの力が適用されます。
    • プレートのエッジ上の節点に沿った負のZ軸に沿って、506.72Nの力が適用されます。
    • すべての内部節点に対して、1013.4Nの力が適用されます。
      FORCE          7      56       01.0     0.0     0.0     -506.72 
      FORCE          7      67       01.0     0.0     0.0     -506.72 
      FORCE          7      78       01.0     0.0     0.0     -506.72 
      FORCE          7      89       01.0     0.0     0.0     -506.72 
      FORCE          7     100       01.0     0.0     0.0     -506.72 
      FORCE          7      11       01.0     0.0     0.0     -253.36 
      FORCE          7       1       01.0     0.0     0.0     -253.36 
      FORCE          7     121       01.0     0.0     0.0     -253.36 
      FORCE          7     111       01.0     0.0     0.0     -253.36 
  • CMSMETHカードでCraig-BamptonのCMSオプションが選択され、力がLOADSETとして適用されます。
    CMSMETH 8       CB              29           
    LOADSET BOTH    7   

    このケースで計算されるモードの総数は48になります。定義された2セットのASET1カードに対応する4*3 + 1*6個の静的モードが存在します。LOADSETに対応する1つの追加の静的モードと、CMSMETHカード内で要求された29個の動的モードがあります。

    モード数= 4*3 + 1*6 + 1 + 29 = 48

  • CMSMETHカードのLOADSET部分で定義された荷重がモード空間に投影され、MBDソルバーで使用されるFlex H3Dファイルにモード荷重情報が書き込まれます。

OptiStructは解析を実行して、モード弾性体を定義するFlex H3Dファイルを生成します。Flex H3Dファイルには、標準のCMSデータに加えて、現在モード領域内で定義されている分布荷重も含まれています。MotionSolveはFlex H3Dファイルを読み取り、Reference_FlexDataブロックのModeLoadセクションにモード荷重定義を配置します。これを図 2に示します。

図 2. XML入力ファイル内のReference_FlexDataブロックのModeLoadセクション

MotionSolve XML入力ファイルのReference_FlexDataブロック内のModeLoadセクションでは、使用できるさまざまな荷重ケースが指定されています。プレートモデルには3つの荷重ケースがあります。各荷重ケースには、IDまたはインデックスが割り当てられています。

  • ModeLoadデータがAdams MNFから取得された場合は、荷重ケースのインデックスを使用できます。
  • このデータがFlex H3Dファイルから取得された場合は、荷重ケースのIDを使用できます。この例では、荷重ケースはOptiStructから取得されたため、荷重ケースのIDを使用できます。

荷重ケースは荷重形状を表します。プレートにかかる実際の荷重を取得するには、これをスケールファクターによってスケーリングする必要があります。各荷重ケースは6+N個の数字からなります。

  • 先頭の6個の数字(黄赤色でハイライト表示)は剛体の荷重です。プレートモデルでは、FZ、TX、TYはゼロでない値です。
  • 続くN個の数字は、各モードの運動方程式に対する寄与度です。プレートは42個のモードによって表されていたため、この例ではN=42です。

図 3 は、プレートの中心に配置されている節点61のz方向の変位を示しています。一定の荷重がプレートに作用しており、減衰が含まれているため、どの節点の振動も最終的には消失することが予想されます。これは表示されているとおりです。



図 3. 基準結果と比較した節点61のZ方向の変位と速度

図 4 は、T=0.45sにおけるプレートの変形コンターを示しています。



図 4. プレートのZ方向の変形コンター

コメント

  1. Force_FlexModalを使用すると、弾性体に分布荷重を適用できます。この分布荷重となり得るのは、空力荷重、液体圧、熱荷重、電磁力、または弾性体全体に広がる任意の力生成メカニズムです(不均一な減衰や粘弾性など)。この要素を使用して、2つのボディ間の接触力をモデル化することもできます。最後のシナリオでは、Force_FlexModalは、接触に関わっている弾性体の1つに作用している分布力を表します。
  2. 力はモード領域内で定義されます。力を定義し、その影響を計算するには、この方法が効率的です。ただしこの場合は、有限要素パッケージ内で、分布荷重が物理領域(力が初期定義された場所)から実行されるモード領域に変換される必要があります。

    弾性体の作成を担う有限要素パッケージは、区分モード合成として知られるプロセスを通じてモード形状を生成します。このパッケージは弾性体のモードについてわかっているため、NODAL荷重記述をMODAL荷重記述に変換できます。

    HyperWorksで分布力を作成するプロセスを図 5に示します。



    図 5. HyperWorksで分布荷重を作成し、解析するプロセス
  3. 弾性体のモード形状としてを定義し、弾性体に作用する節点荷重としてを定義した場合、弾性体上の等価モード荷重は次のように定義されます:

  4. には、弾性体を記述するモード一式の一部しか含まれていないため、で表される量は、節点からモードへの変換時に失われます。CMS手法が正しく使用された場合、残差は少量です。
  5. 節点からモードベースへの変換を行っても、弾性体に作用する合成力は失われません。この合成力は、通常剛体のモーションを弾性体に与えます。
  6. ユーザーサブルーチンによって返される荷重ケースまたは荷重ベクトルの最初の6つの成分には、この剛性力が含まれています。これらは次のように定義されます:
    • 1 = 弾性体のLPRFマーカーのX軸に沿って作用する力
    • 2 = 弾性体のLPRFマーカーのY軸に沿って作用する力
    • 3 = 弾性体のLPRFマーカーのZ軸に沿って作用する力
    • 4 = 弾性体のLPRFマーカーのX軸周りに作用するトルク
    • 5 = 弾性体のLPRFマーカーのY軸周りに作用するトルク
    • 6 = 弾性体のLPRFマーカーのZ軸周りに作用するトルク
  7. 分布力が熱荷重やモード減衰力などの内部荷重を表している場合、荷重ケースの最初の6つの成分(剛体成分)はゼロです。
  8. Force_FlexModalは非常に多くの用途に適用できます。これは、分布荷重を定義するための多くのオプションを提供します。これらについて以下に説明します。
    • オプション1:時間または状態に依存する式で定義されたスケールファクター

      この方法は、モード荷重形状がマルチボディモデルで使用できる値としてパラメータ化されている場合に使用できます。このシナリオでは、指定する必要があるのは、モード力が作用する弾性体、使用する荷重ケース、およびスケールファクターを定義する式だけです。次の例は、このオプションを示しています。

      <Force_FlexModal
           id           = "101" 
           flex_body_id = "34" 
           case_idx     = "4"
           scale_expr   = "Pi*Pitch(1015)*Vx(1015)*Vx(1015)"
      /> 
    • オプション2:ユーザーサブルーチンで定義されたスケールファクター

      この方法は、スケールファクターがオプション1のようにシンプルな式ではない場合に使用されます。このケースでは、スケールファクターを決定するための複雑な計算を、PythonスクリプトやコンパイルされたFortran/C関数に埋め込むことができます。次の例は、PythonスクリプトでForce_FlexModalを指定する方法を示しています。

      <Force_FlexModal
           id                    = "101"
           flex_body_id          = "34"
           usrsub_param_string   = "User(1015)"
           interpreter           = "Python"
           usrsub_fnc_name       = "Lift_and_Drag"
           script_name           = "/Users/MotionSolve/Example/lift.py"     
           force_sub             = "FALSE"
      /> 
      ユーザーサブルーチンは次の2つの値を返します:
      • 荷重ケースのインデックス
      • スケールファクター

        MotionSolveは上記の情報を使用して、分布荷重を弾性体に適用します。SYSFNCSYSARYを使用して、システムの瞬間的な状態にアクセスし、これを使用してスケールファクターを定義できます。

    • オプション3:ユーザーサブルーチンでの分布荷重の形状とスケールの定義
      この方法は、荷重形状がFlex H3Dファイルに含まれていない場合に使用されます。これにはさまざまな理由が考えられますが、理由の1つとしては、お使いの有限要素ソルバーがFlex H3Dファイルの生成方法を知らないことが挙げられます。分布荷重は次の式によって計算されます:
      • 。ここで、qはシステム状態、xは分布荷重が作用する空間領域、tは独立変数である時間です。

        ユーザーサブルーチンは次の2つの値を返します:

      • スケールファクター、Scale(q,t)SYSFNCSYSARYを使用して、システムの瞬間的な状態にアクセスし、これを使用してスケールファクターを定義できます。
      • 荷重形状、Shape(x,t)。これは、システム状態の関数にはできません。これは、空間領域と時間のみの関数である必要があります。

        MotionSolveは上記の情報を使用して、分布荷重を弾性体に適用します。次の例は、ユーザーサブルーチンがFortran、C、C++のようなコンパイルされた言語で記述されている場合に、Force_FlexModalを指定する方法を示しています。

        <Force_FlexModal
             id                    = "101"
             flex_body_id          = "34"
             usrsub_param_string   = "User(1015)"
             usrsub_fnc_name       = "Lift_and_Drag"
             usrsub_dll_name       = "/Users/MotionSolve/Example/lift.so"     
             force_sub             = "FALSE"
        />

        MotionSolveは上記の情報を使用して、分布荷重を弾性体に適用します。次の例は、ユーザーサブルーチンがPythonで記述されている場合に、Force_FlexModalを指定する方法を示しています。

        <Force_FlexModal
             id                    = "101"
             flex_body_id          = "34"
             usrsub_param_string   = "User(1015)"
             interpreter           = "Python"
             usrsub_fnc_name       = "Lift_and_Drag"
             script_name           = "/Users/MotionSolve/Example/lift.py"     
             force_sub             = "FALSE"
        />
    • 結果はH3Dファイルに書き込まれ、HyperViewで可視化できます。