ACU-T:7000 AcuSolveによるパラメトリック最適化

このチュートリアルでは、AcuSolveでのパラメトリック最適化問題の設定、解析、および結果表示を行うための手順を説明します。パラメトリックスタディでは、一定範囲の入口質量流量境界条件のスイープなど、変化する可能性のある1つまたは複数の条件を指定できます。質量流量を制御するパラメータの範囲および周波数は、ただ目的の値を指定するか、プログラムに適した値を自動計算させることによって選択されます。パラメトリックスタディでは、いくつかのパラメータを使用して、たとえばファン問題の入口質量流量、羽根車の回転速度、羽根角などを制御できます。このチュートリアルで使用されるモデルは、流体の流れにさらされる1つの球で構成されます。この球のサーフェスは、内部熱源によって高温に保たれています。流体の流れによって球のサーフェスから熱が奪われ、その結果、流体の温度が上昇します。流体の入口にさまざまな温度値を設定してシミュレーションを実行することで、出口温度が目標値に最も近くなる条件を特定します。

CFDシミュレーションの基本手順は、以前のチュートリアルで説明しました。このチュートリアルでは、AcuSolveの以下の追加機能を紹介します。
  • AcuSolveでのパラメトリック最適化問題の設定
  • パラメトリック最適化問題のポスト処理

このチュートリアルでは、以下を実行します。

  • 問題の解析
  • HyperMeshモデルデータベースのインポート
  • 一般的なシミュレーションパラメータの設定とソルバー設定
  • 材料モデルパラメータと節点初期状態の設定
  • 最適化スタディパラメータの設定
  • サーフェス境界条件と材料特性の割り当て
  • AcuSolveの実行
  • AcuProbeによる解析のモニター

前提条件

このチュートリアルを実行する前に、HyperWorksの入門チュートリアルであるACU-T:1000 HyperWorksユーザーインターフェースをすでに完了しHyperMeshAcuSolveの基本を理解しているものとします。この解析を実行するには、ライセンス供与済みバージョンのHyperMeshAcuSolveにアクセスできる必要があります。

このチュートリアルを実行する前に、HyperMesh_tutorial_inputs.zip<Altair_installation_directory>\hwcfdsolvers\acusolve\win64\model_files\tutorials\AcuSolveから作業ディレクトリにコピーします。 ACU-T7000_ParametricOptimization.hm HyperMesh_tutorial_inputs.zipから取り出します。

HyperMeshデータベース(.hm ファイル)には、メッシュとジオメトリが含まれています。このチュートリアルには、ジオメトリのインポートおよびメッシュ生成に関する手順は含まれていません。

問題の解析

図1は、このチュートリアルで解析する問題の概略図を示しています。流体は左側から流路に入り、流路にさらされる球の周りを流れます。球のサーフェスは500Kという一定温度に保たれています。流体の流速は一定になるように設定されています。流体の入口温度は、ユーザーによって指定された値と一連のパラメータに基づいてプログラムで選択された値を組み合わせた値の範囲で変化します。この問題で使用される流体モデルは、仮想の流体材料です。


図 1.

ここで入口温度は、この問題の“設計変数”と呼ばれるものです。出口温度の目標値が指定されており、望ましい入口温度は、出口温度がこの目標出口温度に最も近くなる値となります。目標の出口温度と実際の出口温度の差は、この問題の“応答変数”と呼ばれるものです。この問題の目的は、実際の出口温度と目標の出口温度の差を最小化することであるため、この問題は“最小化”問題です。

最適化

最適化とは、簡単に言うと、一連の選択肢の中から最適な入力を選択するプロセスです。今日のほとんどすべての工学的問題は、何かを最適化することを目的としています。航空機の翼の設計者は常に、揚力に優れ、抗力の低い新しい翼を設計しようと努めています。熱交換器部品の設計者は、表面熱流束を最大化する一方で、交換器を通じた圧力低下を最小限に抑えることを目指しています。

AcuSolveは、最適化の調査を設定するための2つの手法として、設計最適化とパラメトリックスタディを提供します。設計最適化によって、特定の制約を受け、流動方程式を満たすことを条件とする目的関数を最適化できます。

パラメトリックスタディでは、一定範囲の入口質量流量境界条件のスイープなど、変化する可能性のある1つまたは複数の条件を指定できます。パラメトリックスタディにおいて、これらの制御パラメータは指定されたパターンに従って変化します。たとえば、質量流量を制御するパラメータの範囲および周波数は、ただ目的の値を指定するか、プログラムに適した値を自動計算させることによって選択されます。パラメトリックスタディでは、いくつかのパラメータを使用して、たとえばファン問題の入口質量流量、羽根車の回転速度、羽根角などを制御できます。おそらく、希望される評価対象はファンのトルクと圧力上昇でしょう。これらの出力は“応答変数”と呼ばれます。実行条件を制御するパラメータは、“変数”または“設計変数”と呼ばれます。この呼称は、最適化問題の場合と同様です。

設計最適化とパラメトリックスタディはどちらも、次のいずれか一方または両方を満たす解析を管理します。
  1. 形状は変化することが許容される(形状設計および形状最適化)
  2. 入口の流速や粘度などの内部パラメータは変化することが許容される(実験計画法および定量化された最適化)

局所最小値を求める最小化問題は、次のように表現できます。

                最小化,        目的(U,Y)
                        条件            制約(U,Y)

ここで、Uは流れ解析変数、Yは設計変数(DV)と呼ばれる、オブジェクトの形状または流れパラメータを決定する制御パラメータのベクトルです。目的と制約は、ユーザーによって指定されます。最大化問題も上記と同様で、最小化が最大化に置き換えられるだけです。

最適化解析の流れ

設計最適化は、連続したケースとみなすことができます。その各ケースでは、まず最適化機能が実行され、設計変数が更新されてから、収束にいたるまでいくつかの時間ステップにわたって流動方程式が解かれます。各時間ステップの終了時にサンプルデータが収集されます。

最適化機能による解析は、以下の処理からなります。
  1. サンプルのセットから応答サーフェスを構築します。
  2. 応答サーフェスに対して最適化機能を実行します。
  3. 設計変数を更新します。


図 2.

HyperMeshモデルデータベースを開く

  1. HyperMeshを起動し、AcuSolveのユーザープロファイルを読み込みます。
    User ProfilesからAcuSolveを選択する方法については、HyperMeshの入門チュートリアルACU-T:1000 HyperWorksユーザーインターフェースをご参照ください。
  2. 標準ツールバーのOpen Modelアイコン をクリックします。
    Open Modelダイアログが開きます。
  3. モデルファイルの保存先ディレクトリを参照します。HyperMeshファイルのACU-T7000_ParametricOptimization.hmを選択してOpenをクリックします。
  4. File > Save Asをクリックします。
    Save Model Asダイアログが開きます。
  5. 名前をParametricOptimizationとして新しいディレクトリを作成し、このディレクトリへ移動します。
    このディレクトリが作業ディレクトリになり、シミュレーションに関連するすべてのファイルがこの場所に保存されます。
  6. データベースのファイル名としてParametricOptimizationと入力するか、別の名前を入力します。
  7. 保存をクリックしてデータベースを作成します。

グローバル解析パラメータの設定

解析パラメータの設定

次の手順では、シミュレーション全体に適用されるパラメータを設定します。

  1. Solverブラウザに移動して01.Globalを拡張表示し、PROBLEM_DESCRIPTIONをクリックします。
  2. Entity Editorで、Temperature equationをAdvective Diffusiveに設定します。
  3. OptimizationをOnに設定します。


    図 3.

ソルバー設定

  1. Solverブラウザで、02.SOLVER_SETTINGSグループを拡張表示し、Entity EditorSOLVER_SETTINGSをクリックして開きます。
  2. Min optimization casesを10に設定します。
  3. Max optimization casesを50に設定します。
  4. Optimization convergence toleranceを1e-05に設定します。
    上記3つのパラメータはAcuSolveでの最適化設定に固有の新しいパラメータです。Minimum optimization casesおよびMaximum optimization casesは解析される固有の入力ケースの最小数と最大数です。Optimization convergence toleranceはケースごとに結果の変化を確認します。Optimization convergence toleranceの値に達するか、指定したMaximum optimization casesの数に達すると、最適化は停止します。
  5. Max time stepsを10に設定します。
  6. Convergence toleranceを0.0001に設定します。
    Min time stepsおよびMax time stepsは各ケースで解析される時間ステップの最小数と最大数です。Convergence toleranceの値に達したか、指定したMax time stepsの数に達すると、ソルバーは次のケースに移ります。
  7. Relaxation factorを0.0に設定します。
  8. Flow、Temperature、およびDesign OptimizationフラグがOnに、Temperature flowフラグがOffに設定されていることを確認します。


    図 4.

材料モデルパラメータの設定

次の手順では、新しいカスタム材料を作成し、関連する材料特性を割り当てます。

  1. Solverブラウザ02.Materialsを拡張表示し、FLUIDを右クリックしてCreateを選択します。
  2. Entity Editorで、変数の名前をsimple_fluidに変更します。
  3. Densityの値を1.0kg/m3に設定します。
  4. Viscosityの値を0.1kg/m-secに設定します。
  5. Conductivityの値を1.0W/m-kに設定します。


    図 5.
  6. モデルを保存します。

最適化パラメータの設定

設計変数の定義

  1. Solverブラウザ10.Optimizationを右クリックし、表示されたコンテキストメニューからOptimization > DESIGN_VARIABLESの順に選択します。
  2. Entity Editorで、変数の名前をtemperature_controlに変更します。
  3. Initial Valueを1.0に設定します。
  4. Lower Boundを0.5に設定します。
  5. Upper Boundを1.5に設定します。
  6. Max Update Factorを0.05に設定します。
    Lower BoundおよびUpper Boundの値は、設計変数を設定できる値の範囲を定義します。Initial Valueは、最初のケースで使用される設計変数の値、または初期条件です。Max Update Factorは、あるケースから次のケースでの設計変数の変化の最大許容値を制御します。
  7. Number of supervised training pointsを3に設定します。
  8. 新たに作成されたData: Supervised Training行のため、value field内部をクリックします。
    Number of supervised training pointsダイアログが開きます。利用可能な行の数は、前の手順で指定した点の数と等しくなります。
  9. 1行目に1.0、2行目に0.9、3行目に0.8を入力して、Closeをクリックします。
    Supervised Trainingパラメータを使用することで、AcuSolveは、リストされている設計変数値をそれらの値の数と同数のケースで使用するようになります。リストされている値がすべて使用されたら、最適化コントロールが引き継ぎます。Supervised Trainingには少なくとも3つの値を指定することをお勧めします。そうすることで、ソルバーはパターンを形成しやすくなり、後続の実行用の設計変数の値を選択するプロセスが合理化されます。


    図 6.

設計変数のMultiplier Functionの作成

AcuSolveでは、実行時にMultiplier Functionを使用して特定のパラメータの値をスケーリングします。たとえば、流体の粘度は温度に応じて変化することがあります。また、流入速度や流入温度は時間とともに変化することがあります。

Multiplier Functionを使用して、ケースごとに設計変数の値をスケーリングすることもできます。数量最適化では、設計変数は、Multiplier FunctionによりAcuSolve内で希望の数量とリンクされます。

  1. Solverブラウザで、05.Multiplier_Function を右クリックし、コンテキストメニューからCreate を選択します。
  2. Entity Editorで、関数の名前をinflow_temperature_controlに変更します。
  3. Multiplier Function TypeをDesign Variableに変更します。
  4. Design Variableの横の値欄内をクリックし、Designvarコレクターをクリックして表示されるダイアログからtemperature_controlを選択し、OKをクリックします。


    図 7.

応答変数の定義

応答変数は、目的関数と制約を導出するためのビルディングブロックです。たとえば、抗力、揚力、任意の方向の力、総体積、圧力低下、総圧力、温度の均一性指数、最大速度などが含まれます。つまり、応答変数は、(出力メカニズムを介した)流れ解析の関数、設計変数などとなります。

ほとんどの基本応答変数は、SURFACE_OUTPUTおよびELEMENT_OUTPUTから抽出された流れ解析の関数です。さらに複雑な応答変数は、式を使用してこれらの基本応答変数から導出できます。この例を以下の手順で示します。

  1. Solverブラウザ10.Optimizationを右クリックし、表示されたコンテキストメニューからOptimization > RESPONSE_VARIABLESの順に選択します。
  2. Entity Editorで、変数の名前をtemperatureに変更します。
  3. 上記の手順を繰り返し、3つの新しい応答変数エントリを作成して、それらを次の名前に変更します。
    1. target_temperature
    2. temperature-target_temperature
    3. (temperature-target_temperature)^2
  4. temperatureをクリックします。Entity Editorで
    1. Response typeをSurface Outputに変更します。
    2. Surface Elementsの横の値欄内をクリックし、Componentコレクターをクリックして表示されるダイアログからOutflowを選択し、OKをクリックします。
    3. Output variableをTemperatureに設定します。
    この応答変数は、流出サーフェスから温度変数のサーフェス積分値を抽出します。


    図 8.
  5. target_temperatureをクリックします。Entity Editorで、
    1. Response typeをConstantに変更します。
    2. Valueを325.0に設定します。
    この応答変数は325Kという定数に設定されます。
  6. termperature-target_temperatureをクリックします。Entity Editorで、
    1. Response typeをSubtractionに変更します。
    2. Data: Response variables行の値欄内をクリックします。
    3. 表示されるダイアログで、1行目をクリックしてから、Optiresponseコレクターをクリックします。
    4. Select Optiresponseダイアログで、リストからtemperatureを選択し、OKをクリックします。
    5. 同様に、2行目についてtarget_temperatureを選択します。
    6. Closeをクリックして、ダイアログを閉じます。
    この応答変数は、2つの応答変数temperatureとtarget_temperatureの間の差を抽出します。
  7. (termperature-target_temperature)^2をクリックします。Entity Editorで、
    1. Response typeをMultiplicationに変更します。
    2. Data: Response variables行の値欄内をクリックします。
    3. 表示されるダイアログで、1行目をクリックしてから、Optiresponseをクリックします。
    4. Select Optiresponseダイアログで、リストからtemperature-target_temperatureを選択し、OKをクリックします。
    5. 同様に、2行目についてtemperature-target_temperatureを選択します。
    6. Closeをクリックして、ダイアログを閉じます。

    この応答変数は、応答変数temperature-target_temperatureを二乗した値を返します。

目的関数の定義

以前、応答変数は、目的関数と制約を導出するためのビルディングブロックであると説明しました。ここでは、新しい目的を定義し、既存の応答変数をその目的エンティティにリンクさせます。

最適化問題の目的は、通常応答変数の最小化または最大化となります。この問題では、目的は、実際の出口温度と目標の出口温度の差を最小化することです。次の手順では、適宜目的を作成および定義します。

  1. Solverブラウザで、Optimization > OBJECTIVESの順に拡張表示してobjective1をクリックします。
  2. Entity Editorで、目的の名前をfind_inflow_temperatureに変更します。
  3. Objective TypeがMinimizeに設定されていることを確認します。
  4. Response variableの横の値欄をクリックし、Select Optiresponseダイアログから適切な応答変数を選択することにより、Response variableを(temperature-target_temperature)^2に設定します。
    注: 問題に制約がある場合は、同様にしてそれらをConstraintsグループの下に定義できます。

最適化コントロールの設定

最適化コマンドで、定義した目的と制約をすべてリンクし、最適化問題を定義します。この問題では定義されている制約はありませんが、存在する場合は、Data TreeのConstraintsエントリの下で最初に定義する必要があります。

  1. Solverブラウザ01.Globalを拡張表示し、06.OPTIMIZATIONをクリックします。
  2. Entity Editorで、Objectiveがfind_inflow_temperatureに設定されていることを確認します。
  3. 問題に制約がある場合は、適宜Number of Constraints欄に値を設定し、その制約を定義できます。
  4. Optimizer convergence toleranceが1e-4に設定されていることを確認します。

境界条件と材料特性の割り当て

デフォルトでは、すべてのコンポーネントは、壁境界条件に含まれます。この手順では、それらを適切な境界条件に変更し、流体ボリュームに材料特性を割り当てます。
  1. Solverブラウザ12.Surfaces > WALLの順に拡張表示します。
  2. Fluidをクリックします。Entity Editorで、
    1. TypeをFLUIDに変更します。
    2. Materialとしてsimple_fluidを選択します。


    図 9.
  3. Inflowをクリックします。Entity Editorで、
    1. TypeをINFLOWに変更します。
    2. Show advanced features欄をオンにします。
    3. Normal velocityを0.1m/secに設定します。
    4. Temperatureを300Kに設定します。
    5. Temperature multiplier functionをinflow_temperature_controlに設定します。


    図 10.
  4. Outflowをクリックします。Entity Editorで、TypeをOUTFLOWに変更します。


    図 11.
  5. Outer_Wallsをクリックします。Entity Editorで、TypeをSLIPに変更します。


    図 12.
  6. Sphere_Wallをクリックします。Entity Editorで、
    1. TypeをWALLに変更します。
    2. Temperature BC typeをValueに設定します。
    3. Temperatureを500Kに設定します。


    図 13.
  7. モデルを保存します。

解の計算と結果の確認

AcuSolveの実行

この手順では、HyperMeshからAcuSolveを直接起動して解析を完了します。

  1. Modelブラウザで、AcuSolveに対してエクスポートするすべてのコレクターのメッシュの表示がアクティブになっていることを確認します。このケースでは、コレクター、流体、壁、流入、流出、Sphere_Wall、およびOuter_Wallsのすべての表示がアクティブになっている必要があります。


    図 14.
  2. ACUツールバーの をクリックします。
    Solver job Launcherダイアログが開きます。


    図 15.

    このケースでは、デフォルトの設定を使用します。より多くのプロセッサを使用してAcuSolveを実行できるように、使用可能なプロセッサの数に応じて、プロセッサの数を変更(4または8)できます。HyperMeshは、必要なソルバー入力ファイルを生成して、AcuSolveを起動します。AcuSolve は、この問題の定常状態解を計算します。

  3. Auto run AcuProbeOnになっていることを確認します。
    これは、解析の進捗をモニターするためのAcuProbeダイアログを開くための設定です。
  4. Launchをクリックして解析プロセスを開始します。
    解析が進行すると、AcuTailとAcuProbeダイアログが開きます。解析の進行状況がAcuTailダイアログで報告されます。解析プロセスを制御可能なAcuSolveControlダイアログも開きます。このダイアログには、解析を停止したり、現在の時間ステップの終了時に出力ファイルを生成するためのオプションがあります。
    ケースの解析を開始する前にAcuSolveはケース番号を印刷します。時間ステップを連続的に処理している際にAcuSolveが新規ケースに移動したとき、ケース番号は1にリセットされます。


    図 16.

    AcuTailダイアログに出力される実行のサマリーには、AcuSolveが解析の実行を完了したことが示されます。

    図 17.
  5. AcuTailウィンドウを閉じ、データベースを保存して設定のバックアップを作成します。

AcuProbeによる解析のモニター

AcuProbeを使用して、解析時間におけるさまざまな変数をモニターできます。Auto run AcuProbeフラグがOnに設定されている場合、Solver Job LauncherによってAcuProbeウィンドウが開かれます。

  1. 左側のData Treeで、Surface Output > Inflow > Temperatureの順に拡張表示します。
  2. temperatureを右クリックし、Plotを選択します。
    注: プロットを正しく表示するために、ツールバーで をクリックする必要がある場合があります。


    図 18.

    このプロットは、解析の進行に伴う流入サーフェスの表面温度を示します。

    設定では、流入温度は設計変数です。流入サーフェスでは、最適化プログラムによってソルバーに提供される値に従って、温度がケースごとに変化します。流入温度の最初の3つの値は、supervised learningパラメータで指定された値に対応しています。その後の値は最適化機能によって提供されます。流入温度の収束値は約264.15 Kです。これは、流出温度がその目標値に最も近くなる値です。

  3. temperatureを右クリックし、Don’t Plotを選択してプロットの表示をオフにします。
  4. Surface Output > Outflow > Temperatureの順に拡張表示します。
  5. temperatureを右クリックし、Plotを選択します。


    図 19.

    このプロットは、解析の進行に伴う流出サーフェスの表面温度を示します。

    流出サーフェスでは、シミュレーションの開始時には温度が変化し、最終的には目標温度値である325Kに近い値に収束します。

  6. プロットを画像として保存することもできます。
    1. AcuProbeダイアログで、File > Saveをクリックします。
    2. 画像の名前を入力して、Saveをクリックします。
  7. 変数の時系列データをテキストファイルとしてエクスポートして、さらにポスト処理することもできます。
    1. エクスポートする変数を右クリックして、Exportをクリックします。
    2. File nameを入力して、Save as typeに.txtを選択します。
    3. Saveをクリックします。

AcuGetDvとAcuGetRsp

AcuSolveでは、最適化問題に固有の2つのポスト処理ユーティリティ、AcuGetDvおよびAcuGetRspを用意しています。AcuGetDvは、解析に含まれるすべてのケースの設計変数の値を提供します。AcuGetRspは、解析に含まれるすべてのケースの応答変数の値を提供します。

  1. Windowsのスタートメニューからコマンドプロンプトを起動するため、スタート > Altair <バージョン> > AcuSolve Cmd Promptをクリックします。
  2. cdコマンドを使用して、ディレクトリを現在の作業ディレクトリに変更します。
  3. プロンプトに以下のコマンドを入力します:

    acuGetDv

    AcuSolveは、各ケースの設計変数の値を出力します。


    図 20.
  4. 応答変数の値を出力するには、以下のコマンドを入力します:

    acuGetRsp

    注: 設計変数および応答変数がこれらのコマンドにより出力される列の順序は、これらがINPファイルで出現する順序となります。


    図 21.

要約

このAcuSolveチュートリアルでは、AcuSolveを使用して、パラメトリック最適化問題を正しく設定し、解析しました。チュートリアルは、HyperMeshでデータベースを作成し、形状をインポートしてメッシュ処理し、シミュレーションパラメータを設定することから始めました。設計変数および応答変数を定義し、その応答変数を使用して問題の目的を設定しました。ケースが設定されると、AcuSolveを使用して解が生成されました。最適化プログラムによってAcuSolveに提供されたさまざまなケースで解析が進行する際に、AcuProbeを使用して、設計変数と応答変数が変化する様子を可視化しました。すべてのケースで設計変数および応答変数の情報を取得するため、AcuSolveで提供されているユーティリティも使用しました。