OptiStructAcuSolveとの通信

OptiStructAcuSolveは、同じネットワークドメインにある、異種プラットフォームやリモートプラットフォーム上で実行できます。OptiStructAcuSolveとの通信は、ソケットを介して行われます。

OptiStructAcuSolveとの間の連成シミュレーションを開始するには、まず一方を実行して通信プロセスを開始する必要があり、それに続いてもう一方が、その開始された通信プロセスに接続します。

通信の開始

OptiStructでは、ソケットポート番号は、FSIバルクデータエントリのPORTフィールドによって指定されます。デフォルトのポート番号は、10000です。これと同じポート番号を、AcuSolve入力ファイル(filename.inp)のEXTERNAL_CODEブロックのsocket_portエントリで指定する必要があります。OptiStructが実行されているマシンがmachine1という名前の場合、EXTERNAL_CODEは次のようになります:
EXTERNAL_CODE {
communication= socket
socket_initiate= no
socket_host= "machine1"
socket_port= 10000
}

OptiStructAcuSolve は、個別に起動する必要があります。OptiStructは、AcuSolveがソケット接続を開始するのを待機します(逆の場合も同様です)。OptiStructが待機する時間(秒単位、プリプロセッシング完了後)は、FSIバルクデータエントリのWAITTIMEフィールドによって決定されます(デフォルト値は3600秒)。同様に、OptiStructがソケットで通信を開始するまでAcuSolveが待機する時間(秒単位、プリプロセッシング完了後)は、Acusim.cnfファイル内のexternal_code_wait_timeフィールド(または–ecwait実行オプション)によって決定されます。

待機時間のカウントは、OptiStructAcuSolveのどちらでも、入力ファイルのプリプロセッシング後に開始されます。次の例の図は、OptiStructが最初に開始されAcuSolveを待機するというシナリオを示しています。


図 1. OptiStructが最初に開始された場合のFSI開始
ユーザーによる待機時間入力で、ソルバーが最初のハンドシェイクまで待機する時間が決定されます。この最初のハンドシェイクの後は、待機時間は適用されなくなります。指定した待機時間が経過したが、2つ目のソルバーがまだ1つ目と通信を開始していない場合、最初に開始されたソルバーはエラー(図 2)になります。


図 2. 最初のハンドシェイクなし
注: AcuSolveは開始されません。そのため、OptiStructは、待機時間経過後に解析を終了します。

タイムステップのループの開始前に、2つのソフトウェアの間でインターフェースに関する基本情報が交換される必要があります。最初に、インターフェース戦略を制御するいくつかのパラメータを両方に対して設定する必要があります。次に、インターフェースの物理パラメータを定義する必要があります。

タイムステップとデータ交換

AcuSolveの場合、問題内の解析フィールドの存在を指定するEQUATIONコマンドと併せて、TIME_SEQUENCEおよびSTAGGERコマンドを使用してタイムステップおよび調整戦略を定義する必要があります。望ましい方法は、AUTO_SOLUTION_STRATEGYコマンドを使用してAcuSolveで解析戦略コマンドが生成されるようにすることです。OptiStructの場合は、データ交換パラメータをFSIバルクデータエントリで使用でき、タイムステップデータをNLPARMTSTEP、またはTSTEPNLエントリ(解析またはデータのタイプによって異なります)で指定します。詳細については、対応するSFSIまたはTFSIのユーザーズガイドのページをご参照ください。

OptiStructAcuSolveはどちらも同じタイムステップサイズを使用する必要があり、タイムステップの合計数が同じである必要があります。また、タイムステップのサイズは、OptiStructAcuSolveの両方で一定のままである必要があります。たとえば、100個のタイムステップがあり、それぞれが0.001秒の場合、OptiStructおよびAcuSolveのデータは次のようになります:
AUTO_SOLUTION_STRATEGY {
initial_time_increment = 0.001
max_time_steps = 101
min_stagger_iterations= 1
max_stagger_iterations= 20
}

および

(1) (2) (3) (4) (5) (6) (7) (8) (9) (10)
NLPARM 5 40 1.0e-3     80 UP    
  1.0e-2 1.0e-5              
    1.0e-1              
注: AcuSolveでは、設定されているタイムステップの最大数は、対応するOptiStructモデルに設定されているタイムステップの最大数より大きい必要があります。

各タイムステップで、特定のトレランスに収束するまで、OptiStructAcuSolveとの間で解析変数( SFSIの場合は変位 / 圧力、TFSIの場合は温度 / 流束)が交換されます。収束に至ると、解析は次のタイムステップで続行されます。これらの交換は、AcuSolveでは“調整”と呼ばれます。調整(OptiStructでは交換と呼ばれます)の最小回数は、AcuSolveAUTO_SOLUTION_STRATEGYブロック内min_stagger_iterationsパラメータによって指定できます。これは、他のAcuSolve実行パラメータにも影響されます。OptiStructでの交換の最小回数は、OptiStructFSIバルクデータエントリ内のMINEXフィールドによって指定できます。

調整の最大回数は、AcuSolveAUTO_SOLUTION_STRATEGYブロック内のmax_stagger_iterationsパラメータによって設定されます。これは、他のAcuSolve実行パラメータにも影響されます。OptiStructでの交換の最大回数は、FSIバルクデータエントリ内のMAXEXフィールドによって指定できます。

交換の最大回数または最小回数(MAXEX/MINEX)は、OptiStructモデルにおいて設定されます。AcuSolveAcuSolveモデル内の複数の場所で、調整の最大 / 最小回数が定義されている場合があります。FSI実行では、そのような指定されたすべての使用可能データの中から、最も小さい最大交換 / 調整回数、および最も大きい最小交換 / 調整回数が使用されます。そのため、AcuSolveによっては、各時間増分が、[MINEX,MAXEX]以下のサブセット領域内で終了する場合があります。

解析変数の収束トレランスは、安定した正確な結果を受け取るために必要な、交換 / 調整の回数を減少させるために使用されます。これにより、結果生成の際の実行時間が大幅に短縮される可能性があります。解析変数のトレランスは、FSIバルクデータエントリのFCNVTOLDCNVTOLTCNVTOLおよびFXCNVTOLフィールドで指定されます。これらのトレランスが高く設定されている場合は、解析時間が短縮されますが、解析精度にも影響がある可能性があります。convergence_toleranceパラメータを使用してAcuSolve入力データ内で収束トレランスを定義することもできます。