Post: Output Request
Model ElementPOST_REQUESTは、MotionSolveで出力要求エンティティを定義します。POST_REQUESTはMotionSolve出力ファイルに書き込まれ、HyperGraphおよびHyperGraph 3Dでのプロットや信号処理に使用できます。
フォーマット
- 組み込みのマーカーベースの関数として。
- 組み込みの要素力ベースの関数として。
- MotionSolve実行時の式言語に基づく式のセットとして。
- コンパイルされた言語(Fortran、C、またはC++)で記述されたユーザーサブルーチンとして。
- PythonまたはMATLABスクリプトとして。
わかりやすいように、これら5つのバリエーションのフォーマットを以下に別々に示します。
組み込みのマーカーベースの関数
<Post_Request
id = "integer"
type = "MARKER_DISPLACEMENT" | "MARKER_VELOCITY" | "MARKER_ACCELERATION" | "MARKER_FORCE"
i_marker_id = "integer"
[[
j_marker_id = "integer"
ref_marker_id = "integer"
label = "string"
comment = "string"
]]
/>
組み込みの要素力ベースの関数
<Post_Request
id = "integer"
type = "ELEMENTAL_FORCE"
elem_type = "string"
jflag = "integer"
[[ ref_marker_id = "integer"
label = "string"
comment = "string"
]]
/>
MotionSolve実行時の式言語に基づく式のセットとして
<Post_Request
id = "integer"
type = "EXPRESSION"
[[
expr1 = "motionsolve_expression"
expr2 = "motionsolve_expression"
expr3 = "motionsolve_expression"
expr4 = "motionsolve_expression"
expr5 = "motionsolve_expression"
expr6 = "motionsolve_expression"
expr7 = "motionsolve_expression"
expr8 = "motionsolve_expression"
label = "string"
comment = "string"
]]
/>
コンパイルされた言語(Fortran、C、またはC++)で記述されたユーザーサブルーチンとして
<Post_Request
id = "integer"
[[
label = "string"
comment = "string"
]]
type = "USERSUB"
usrsub_dll_name = "valid_path_name"
usrsub_param_string = "USER(par_1, ..., par_n)"
usrsub_fnc_name = "custom_fnc_name"
/>
PythonまたはMATLABスクリプトとして
<Post_Request
id = "integer"
[[
label = "string"
comment = "string"
]]
type = "USERSUB"
script_name = "valid_path_name"
interpreter = "PYTHON" | "MATLAB"
usrsub_param_string = "USER(par_1, ..., par_n)"
usrsub_fnc_name = "custom_fnc_name"
/>
属性
- id
- 要素識別番号(整数 > 0)。この番号は、すべてのPost_Request要素の中で一意です。
- label
- Post_Request要素の名前。
- comments
- 測定される信号を説明する文字列。任意の長さにすることができます。
- type
- Post_Request要素のタイプを指定します。MARKER_DISPLACEMENT、MARKER_VELOCITY、MARKER_ACCELERATION、MARKER_FORCE, EXPRESSION、ELEMENTAL_FORCE、およびUSERSUBから選択します。
- i_marker_id
- 情報が計算されるReference_Marker IDを指定します。タイプがMARKER_DISPLACEMENT、MARKER_VELOCITY、MARKER_ACCELERATIONまたはMARKER_FORCEの場合にのみ使用します。
- j_marker_id
- 計算される情報の取得元Reference_Marker IDを指定します。この情報は、一般に、変位、速度、加速度、力など、IM_IDやJM_IDに関連する何らかのベクトルです。タイプがMARKER_DISPLACEMENT、MARKER_VELOCITY、MARKER_ACCELERATIONまたはMARKER_FORCEの場合にのみ使用します。
- ref_marker_id
- IM_IDとJM_ID間のベクトルの成分が表される座標系を指定します。タイプがMARKER_DISPLACEMENT、MARKER_VELOCITY、MARKER_ACCELERATIONまたはMARKER_FORCEの場合にのみ使用します。
- expr1、expr2、…、expr8
- 関数式で計算される8つの信号を指定します。typeがEXPRESSIONである場合にのみ使用します。
- elem_type
- 力を要求する要素のタイプを指定します。BEAM、BUSH、CONTACT、COUPLER、FIELD、FORCE、GFORCE、JOINT、JPRIM、MATE、MOTION、SFORCE、SPDP、VFORCE、VTORQUE、およびYFORCEから選択します。
- elem_id
- 力を要求する要素のID。
- jflag
- IとJのどちらのマーカーに作用する力を要求するのかを指定する整数。jflag = 0はIマーカーに作用する力を、jflag = 1はJマーカーに作用する力を返します。
- usrsub_param_string
- データファイルからユーザー定義のREQSUBに渡されるパラメータのリスト。このキーワードは、type = USERSUBが選択されている場合にのみ使用します。
- usrsub_dll_name
- ユーザーサブルーチンを含むDLLまたは共有ライブラリのパスと名前を指定します。MotionSolveはこの情報を使用して、実行時にDLL内のユーザーサブルーチンREQSUBを読み込みます。
- usrsub_fnc_name
- ユーザーサブルーチンREQSUBの代替名を指定します。
- script_name
- usrsub_fnc_nameで指定されたルーチンを含むユーザー作成スクリプトのパスと名前を指定します。
- interpreter
- ユーザースクリプトが記述されたインタープリタ型言語を指定します。有効な選択肢は、MATLABまたはPYTHONです。
例
1996年、テザー衛星STS-75がスペースシャトルコロンビアから発射されました。この衛星は、ブーム近くでテザーが壊れた際に、シャトルから19.7kmの距離にまで伸展していました。この衛星とテザーは、軌道衛星から離れて漂い、行方不明になりました。
この失敗の原因を把握するため、MotionSolveシミュレーションを行います。シミュレーションの一貫として、衛星の軌道、角運動量、およびテザー力の時刻歴が計算されます。
- 質量 = 300Kg、慣性 = 20Kgm2、22Kgm2、25Kgm2
衛星の質量中心は、Reference_Marker 1101として特定されます。Reference_Marker 1102は、衛星上のテザー結合ポイントを示します。宇宙船上のテザー結合ポイントは、Reference_Marker 1972で示されます。下の図は、展開されているシステムを示しています。
図 1. 展開されているテザー衛星STS-75
最初の例は、衛星の軌道の時刻歴の計算方法を示しています。IDゼロを使用することで、JM_IDおよびRM_IDに全体座標系が使用されることを示しています。
<Post_Request
id = "1"
comment = "Satellite trajectory time history"
type = "MARKER_DISPLACEMENT"
i_marker_id = "1101"
j_marker_id = "0"
ref_marker_id = "0"
/>
2番目の例は、衛星の角運動量の時刻歴の計算方法を示しています。角運動量は、衛星の座標系で衛星の質量中心について計算されます。20、22、25は衛星の慣性モーメントです。
<Post_Request
id = "2"
comment = "Satellite trajectory angular momentum"
type = "EXPRESSION"
expr1 = "0"
expr2 = "20*WX(1101,0,1101)"
expr3 = "22*WY(1101,0,1101)"
expr4 = "25*WZ(1101,0,1101)"
expr5 = "0"
expr6 = "0"
expr7 = "0"
expr8 = "0"
/>
最後の例は、テザー力の時刻歴の計算方法を示しています。テザー力の成分は、Reference_Marker 1972の座標系で計算されます。
<Post_Request
id = "1"
comment = "Tether force time history"
type = "MARKER_FORCE"
i_marker_id = "1102"
j_marker_id = "1972"
ref_marker_id = "1972"
/>
コメント
- POST_REQUESTは次のいずれかのタイプです:
- タイプ
- 説明
- Marker Displacement
- 一連の変位を出力します。
- Marker Velocity
- 一連の速度を出力します。
- Marker Acceleration
- 一連の加速度を出力します。
- Marker Force
- 一連の力を出力します。
- Elemental Force
- 指定した要素に固有の一連の力を出力します。
- Expression
- XML入力ファイル内でユーザー式として定義された一連の値を出力します。
- User Subroutine
- ユーザー作成のサブルーチンで計算された一連の値を出力します。
このように一般化することで、注目するほとんどすべての情報をシミュレーションで計算し、その後のレビューのために出力ファイルに書き込むことができます。
- TYPE = MARKER_DISPLACEMENT.この要求では、2番目のReference_Marker (JM)に対する1番目のReference_Marker (IM)の並進および回転変位を計算します。結果は、3番目のReference_Marker (RM)の座標系で計算されます。次の8つの成分が返されます:
- DM(IM,JM)、DX(IM,JM,RM)、DY(IM,JM,RM)、およびDZ(IM,JM,RM)(並進)。
- PSI(IM,JM)、THETA(IM,JM)、PHI(IM,JM)、またはYAW(IM,JM)、PITCH(IM,JM)、ROLL(IM,JM)(回転)。RESOUTPUTコマンドで、出力する角度タイプを選択できます。指定しない場合、オイラー角、Psi、Theta、およびPhiが出力されます。
- TYPE = MARKER_VELOCITY. この要求では、2番目のReference_Marker (JM)に対する1番目のReference_Marker(IM)の速度を計算します。結果は、3番目のReference_Marker (RM)の座標系で計算されます。地上参照フレームでは常に時間微分が取られます。これは、次の8つの関数式を指定する簡単な方法です:
- VM(I,JM,0)、VX(IM,JM,RM,0)、VY(IM,JM,RM,0)、VZ(IM,JM,RM,0)、WM(IM,JM)、WX(IM,JM,RM)、WY(IM,JM,RM)、およびWZ(IM,JM,RM)。
- TYPE = MARKER_ACCELERATION. この要求では、2番目の Reference_Marker (JM)に対する1番目のReference_Marker (IM)の加速度を計算します。結果は、3番目のReference_Marker (RM)の座標系で計算されます。地上参照フレームではすべての時間微分が取られます。これは、次の8つの関数式を指定する簡単な方法です:
- ACCM(IM,JM,0)、ACCX(IM,JM,RM,0)、ACCY(IM,JM,RM,0)、ACCZ(IM,JM,RM,0)、WDTM(IM,JM,0)、WDTX (IM,JM,RM,0)、WDTY(IM,JM,RM,0)、およびWDTZ(IM,JM,RM,0)。
- TYPE = MARKER_FORCEこの要求では、Reference_Marker (IM)において、IMと2番目のReference_Marker (JM)との間に加えられるすべての反力と反トルクにより作用する力の合計を計算します。結果は、3番目のReference_Marker (RM)の座標系で計算されます。これは、次の8つの関数式を指定する簡単な方法です:
- FM(IM,JM)、FX(IM,JM,RM)、FY(IM,JM,RM)、FZ(IM,JM,RM)、TM(IM,JM)、TY(IM,JM,RM)、およびTZ(IM,JM,RM)。
- TYPE = ELEMENTAL_FORCEこの要求では、指定した要素IDのチャネルごとに、力の大きさ、X、Y、Zの力、トルクの大きさ、X、Y、Zのトルクの各値を含む、8つのチャネルの情報を生成します。結果は、指定した参照マーカー(RM)の座標系で計算されます。力は、jフラグ(JFLAG)での指定内容に応じてIまたはJボディについて報告されます。これは、次の8つの関数式を指定する簡単な方法です(例としてスプリングの場合):
- SPDP(ID,jflag,1,RM)、SPDP(ID,jflag,2,RM)、SPDP(ID,jflag,3,RM)、SPDP(ID,jflag,4,RM)、SPDP(ID,jflag,5,RM)、SPDP(ID,jflag,6,RM)、SPDP(ID,jflag,7,RM)、 SPDP(ID,jflag,8,RM)
- TYPE = EXPRESSION
このタイプの要求では、8チャネルの情報を計算できます。計算される量は、実行時に評価されるMotionSolve式として定義されます。関数式とその使用方法の詳細については、関数のトピックをご参照ください。
- TYPE = USER SUBROUTINE
このタイプの要求では、ユーザー定義のサブルーチンREQSUBを使用して、8チャネルの情報を計算できます。REQSUBはC/C++/FORTRANで記述でき、これからDLLを作成できます。代わりに、スクリプトを使用してPythonで同じことを行うこともできます。MotionSolveは自動的にDLL/ スクリプトを読み込み、必要に応じてREQSUBを呼び出して必要な情報を取得します。
- タイプ“MARKER_DISPLACEMENT”のPOST_REQUESTの場合、角変位の単位は度です。その他すべての回転についての出力では、回転の単位はラジアンです。
- TYPE = MARKER_FORCEオプションには、指定したマーカーペア間に加えられる力およびトルクと、反力および反トルクが含まれます。
- 地上参照フレーム以外の参照フレームで、信号の時間微分を計算する場合は、type = expressionを使用します。これは必要な作業が少し多くなりますが、はるかに一般的です。
- 出力信号の計算に大量のロジックが含まれている場合は、REQSUBを使用します。REQSUBは、C/C++/FortranまたはPythonでプログラムできます。コードはコンパイルされてリンクされるか、バイトコンパイルされるため、REQSUBによる計算は、EXPRESSIONによる計算より高速です。
- POST_REQUESTは出力専用です。REQSUBで計算された信号を、GFOSUBなど、別のユーザーサブルーチンを介してモデルに戻すことはできません。