HS-1550: HyperMeshAbaqusを使用した形状最適化スタディ

HyperMeshHyperStudyを使った形状最適化を実行する方法について学習します。有限要素ソルバーとしてAbaqusを、また形状のパラメータ化を行うためにHyperMorphを使用します。また本チュートリアルでは、HyperMeshHyperStudyがWindows、ソルバーがUNIXプラットフォーム上にある場合に問題の解を得る方法についても説明します。

開始に先がけ、本チュートリアルで使用されるモデルファイルを<hst.zip>/HS-1550/から自身の作業ディレクトリにコピーします。
本チュートリアルでは、以下の項目について学習します:
  • HyperMorphを使用した形状変数の作成
  • HyperMesh内からのスタディの実行
  • HyperStudyを使用した形状パラメータ化の実行
  • スタディのセットアップ
  • UNIX上でAbaqusを実行するためのスクリプトの作成と、プリファレンスファイル内でのスクリプトの登録
  • 最適化スタディの実行
最適化の目的は、応力の制約条件200MPaのもとで、シャフトに連結されたリンクの質量を最小化することです。入力変数は、形状基底ベクトルにより定義されます。
1.


HyperMeshでモデルを読み込みます。

  1. Launcherを起動します。
  2. スタートアップダイアログで、HyperMeshが選択されていることを確認します。
  3. プロファイルにはAbaqusを選択します。
  4. Create Sessionをクリックします。
  5. メニューバーからFile(ファイル) > Open(開く) > HyperMeshModelをクリックします。
  6. Open Modelダイアログで、link.hmファイルを開きます。
    有限要素モデルがグラフィックス領域内に現れます。
    2.


HyperMorphによる形状のパラメータ化

  1. 必要に応じて、HyperMorphパネルを有効にします。
    1. メニューバーより View(表示) > Panels(パネル)が有効になっていることを確認してください。
    2. パネル領域で、Toolサブパネルを選択し、HyperMorphをクリックします。
      3.


  2. ドメインを作成します。
    1. domainsをクリックします。
      Domainsサブパネルが開きます。ここで、形状のパラメータ化用のドメインを生成することができます。
    2. 1つ目の矢印をクリックし、2D domainsを選択します。
    3. トグルをクリックし、all elementsを選択します。
    4. createをクリックします。
    4.


    ドメインとハンドルが生成され、メッシュの形状を操作したり形状最適化に必要な形状基底ベクトルを生成したりするために使用されます。
    5.


  3. returnをクリックします。
  4. リンクの外側エッジについて入力変数を作成します。
    1. HyperMorphパネルからmorphをクリックします。
      Morphサブパネルが開きます。ここでは、メッシュの形状をモーフィングすることができます。
    2. 2番目の矢印をクリックし、translateを選択します。
    3. y val=欄をクリックし、-5.0と入力します。
    4. モデリングウィンドウで、リンクの上部右側角にある黄色のハンドルをクリックします。
      6.


    5. morphをクリックします。
    1つ目の形状が生成されます。
    7.


  5. 形状を保存します。
    1. Morph(モーフィング)リボンのSave(保存)グループから、Shapes(形状)ツールをクリックします。
      Edit Shapesダイアログが開きます。
    2. Edit Shapesダイアログでをクリックします。
      シェイプが保存されます。
    3. 保存されたシェイプを右クリックし、コンテキストメニューからRenameを選択し、新しい名前に sh1と入力します。
    4. Closeをクリックします。
  6. メニューバーからFile(ファイル) Save(保存)をクリックし、モデルを保存します。
  7. ソフトウェアを終了します。

基本的なソルバースクリプトのセットアップ

  1. テキストエディタで、HS-1550_solverScript.pyを開きます。
    HS-1550_solverScript.pyファイルは、ローカルマシン上でのソルバーの実行を可能にします。このscriptスクリプトは、ユーザーが指定した引数を用いてAbaqusソルバーをコールします。
  2. ファイル内のパスを、ユーザーのマシン上のAbaqus実行ファイルに変更します。
  3. メモリ要求など、追加の引数を変更します。
    # import statements
    import os
    import platform
    import subprocess
    import sys
    
    # user edits-------------------------------------------------------------------
    
    # set executable path use forward slashes (/)
    exe_path = '/my/path/to/executable/abaqus.exe'
    
    # set abaqus arguments
    command_arguments_list = ['job=' + sys.argv[1], 'memory=200Mb' , 'interactive']
    
    # set log file name
    logFile = 'logFile.txt'
    
    # -----------------------------------------------------------------------------
    
    # open log file
    f = open('logFile.txt', 'w')
    
    # get environment information
    plat = platform.system()
    hst_altair_home = ''
    strEnvVal = os.getenv('HST_ALTAIR_HOME')
    if strEnvVal:
        hst_altair_home = strEnvVal
    else:
        f.write('%EXA_xx-e-env, Environment variable not defined ( HST_ALTAIR_HOME )')
    
    exe_path = os.path.normpath(exe_path)
    lstCommands = [exe_path] + command_arguments_list
    
    
    # echo log information
    f.write('platform: ' + plat + '\n')
    f.write('hst_altair_home: ' + hst_altair_home + '\n')
    f.write('command: ' + exe_path + '\n')
    
    
    #Write the command in log file
    f.write('Running the command:\n' + exe_path + ' ' + ' '.join(command_arguments_list) + '\n')
    
    #Run the command
    p1 = subprocess.Popen(lstCommands, stdout=subprocess.PIPE , stderr=subprocess.PIPE)
    
    # log the standard out and error
    f.write('\nStandard out' + '\n' + p1.communicate()[0] + '\n')
    f.write('\nStandard error' + '\n' + p1.communicate()[1] + '\n')
    
    # close log file
    f.close()
  4. オプション: スタディディレクトリがUnix上にあり、ソルバーがUnix上で実行する場合のWindowsでのHyperStudyの実行
    制約事項: リモートマシンのみ
    リモートのUnixマシン上でコマンドを実行するには、コマンドをリモートでコミュニケートするためにローカルプログラムがインストールされている必要があります。この例では、プログラムsshが使用されますが、それ以外の同様な、もしくはより良いプログラムも存在します。ほとんどの場合、プログラムのプロトコールは、パスワードからの認証を要します。このセットアップが上手く機能するには、アクティブなパスワードのエントリなしに機能するよう環境設定しなければなりません。このセットアップは、ユーザーのネットワーク管理者のアシストを要する場合があります。
    ssh_remote.batファイルは、Windows上で実行しているHyperStudyセッションからUnix上のスクリプト(run_abaqus.sh)を実行するためにのサンプル(Windows)バッチファイルです。
    ssh user_name@unix_machine  "./run_abaqus.sh %1 %HST_APPROACH_VARNAM % %HST_STEP_INDEX% %HST_APPROACH_MODELS%"

    このバッチファイルは、sshコマンドを用いてUnixマシンにログインし、HyperStudyにより生成されたファイルについてソルバーを実行します。 このスクリプトは、ソルバースクリプトとしてHyperStudyで登録されます。

    1. ssh_remote.batファイルを開きます。
    2. パラメータ“unix_machine”を、ユーザーのネットワーク上のリモートUnixマシンの名称と合致するよう変更
    3. パラメータ“user_name”を、リモートマシン上のログインと合致するよう変更
      注: このログインは、これら2つのマシン間のパスワードなしで機能するよう設定されていなければなりません。
    4. run_abaqus.shファイルを開きます。
      ファイルrun_abaqus.shは、AbaqusソルバーがUNIXマシン上で実行するよう設計されたシェルスクリプトです。このファイルは、Unixマシン上のホームディレクトリに置かれている必要があります。
      #!/bin/sh
      
      #constuct the model directory
      approachName=$1
      runNum=`printf %05i $2`
      modelString=$3
      array=(${modelString//:/ })
      modelName=${array[0]}
      myDir=~/${approachName}/run__${runNum}/${modelName}
      
      #change the directory to model directory
      cd $myDir
      
      #change the format from windows to unix
      dos2unix $1 $1
      
      #edit this line to match your solver path and the appropriate arguments
      /my/path/to/solver/example/abaq631 job=$1 memory=200Mb interactive
    5. dos2unixを使って、テキストrun_abaqus.batの書式をUnix互換となるよう変更します。
    6. ファイルが実行権限を持つことを確認し、chmod 755 run_abaqus.shと入力します。
    7. run_abaqus.shファイルを編集し、必要に応じて、パスを実行ファイルおよびこのコマンドへのその他のオプションを修正します。

ソルバーとしてAbaqusを登録

  1. HyperStudyを開始します。
  2. メニューバーからEdit(編集) > Solver Script(ソルバースクリプト)をクリックします。
    Register Solver Script(ソルバースクリプトの登録)ダイアログが現れます。
  3. ソルバースクリプトを追加します。
    1. Add Solver Script(ソルバースクリプトの追加)をクリックします。
      Add(追加)ダイアログが開きます。
    2. Label(ラベル)とVarname(識別子)欄にAbaqusと入力します。
    3. ソルバースクリプトタイプのリストから、Genericを選択します。
    4. OK(適用).をクリックします。
    8.


  4. スクリプトAbaqusのパス列で、をクリックします。
  5. Openダイアログで、python.exeファイルを開きます。
    ヒント: 同じパスおよびファイルをPythonのパス欄からコピーペーストすることも可能です。
  6. AbaqusスクリプトのUser Arguments(ユーザー引数)列で、をクリックします。
  7. Openダイアログで作業ディレクトリをナビゲートし、HS-1550_solverScript.pyファイルを開きます。
  8. オプション: REMOTEマシンのみ: ソルバーとしてAbaqusを登録。
    9.


  9. OKをクリックします。

スタディのセットアップの実行

  1. 以下の方法で新規スタディを開始します:
    • メニューバーから、File(ファイル) > New(新規)をクリックします。
    • リボン上でをクリックします。
  2. Add Study(スタディの追加)ダイアログでスタディの名前を入力し、スタディの場所を選んでOKをクリックします。
    重要: スタディディレクトリは、マッピングされたUNIXマシンのホームディレクトリでなければなりません。
  3. Define Models(モデルの定義)ステップに進みます。
  4. HyperMeshモデルを追加します。
    1. Directory(ディレクトリ)から、HyperMesh.hm)ファイルlink.hmワークエリアにドラッグ&ドロップします。
      10.


    2. Solver input file(ソルバー入力ファイル)列にlink.inpと入力します。
      これが、評価中にHyperStudyが書き出すソルバー入力ファイルの名称となります。
    3. Solver execution script(ソルバー実行スクリプト)列に、Abaqusを選択します。
    4. Solver Input Arguments(ソルバー引数)列に$filebasenameと入力します。
    5. オプション: さらに、Abaqus環境ファイルを編集する必要があるかもしれません。
      例: ask_delete=OFFまたは、ask delete=on という行があればコメントしてください。

      これは、解析の再実行時に古いファイルを上書きしたい場合、Abaqusがユーザーにプロンプトを出すために必要とされます。ユーザー介在の必要性を回避するには、この質問をせずに上書きするようAbaqusにコマンドを出さなくてはなりません。

    11.


  5. 変数をインポートします。
    1. Import Variables(変数のインポート)をクリックします。
      Model Parameters(モデルパラメータ)ダイアログが開きます。
    2. Shapeを展開し、sh1.Sをクリックします。
    3. Lower boundを0.0に、Upper boundを1.0に変更します。
    4. Addをクリックします。
    5. OK(適用).をクリックします。
    12.


  6. Define Input Variables(入力変数の定義)ステップに進みます。
  7. 入力変数の下限値、初期値、上限値を確認します。
    13.


ベースランの実行

  1. Test Models(モデルをテスト)ステップに進みます。
  2. Run Definition(計算実行)をクリックします。
    スタディのDirectory(ディレクトリ)内に、approaches/setup_1-def/ディレクトリが作成されます。approaches/setup_1-def/run__00001/m_1には、ベースランの結果である入力ファイルが含まれます。

出力応答の作成と評価

ここでは2つの出力応答:MassとMax_Stressを作成します。

  1. Define Output Responses(出力応答の定義)パネルに進みます。
  2. Mass出力応答を作成します。
    1. Directory(ディレクトリ)から、approaches/setup_1-def/run__00001/m_1にあるlink.datファイルをワークエリアにドラッグ&ドロップします。
    2. File Assistant(ファイルアシスタント)ダイアログで、Reading technology(読み取り技術)をAltair® HyperWorks®にセットし、Next(次)をクリックします。
    3. Single Item in a Time Series(タイムシリーズの単一アイテム)を選択し、Next(次)をクリックします。
    4. 以下のオプションを定義し、Next(次)をクリックします。
      • TYPEにABAQUS.datをセットします。
      • RequestをTOTAL MASSにセットします。
      • ComponentをMASSにセットします。
    5. 出力応答のラベルをMassとします。
    6. Expression(式)をFirst Element(最初の要素)にセットします。
    7. Finish(終了)をクリックします。
      Mass出力応答が、ワークエリア内に追加されます。
  3. Max_Stress出力応答を作成します。
    1. ディレクトリから、approaches/setup_1-def/run__00001/m_1にあるlink.obdファイルをワークエリアにドラッグ&ドロップします。
    2. File Assistant(ファイルアシスタント)ダイアログで、Reading technology(読み取り技術)をAltair® HyperWorks®にセットし、Next(次)をクリックします。
    3. Multiple Items at Multiple Time Steps(複数タイムステップで複数のアイテム)(readsim)を選択し、Next(次)をクリックします。
    4. 以下のオプションを定義し、Next(次)をクリックします。
      • SubcaseをStep -2にセットします。
      • TypeをS-Global-Stress components (PART-1-1)にセットします。
      • RequestをE1 - E378にセットします。
      • ComponentをvonMisesにセットします。
    5. 出力応答のラベルをMax_Stressとします。
    6. Expression(式)をMaximum(最大)にセットします。
    7. Finish(終了)をクリックします。
      Max_Stress出力応答が、ワークエリア内に追加されます。
  4. Evaluate(評価)をクリックして出力応答値を抽出します。

最適化の実行

  1. Optimization(最適化)を追加します。
    1. Explorer(エクスプローラ)内で右クリックし、コンテキストメニューからAdd(追加)を選択します。
    2. Add(追加)ダイアログでOptimization(最適化)を選択します。
    3. Definition from(定義元)に、Setup(セットアップ)を選択しOKをクリックします。
  2. Optimization(最適化) > Definition(定義) > Define Output Responses(出力応答の定義)ステップに進みます。
  3. Objectives/Constraints - Goals(目的 / 制約条件 - 目標)タブをクリックします。
  4. 目的関数を追加します。
    1. Add Goal(目標を追加)をクリックします。
    2. Apply On(応答)列に、Mass (r_1)を選択します。
    3. Type (タイプ)列に、Minimizeを選択します。