iT邦幫忙

2022 iThome 鐵人賽

DAY 29
0

OpenRadioss對於CAE從業人員,真的是一個滿震撼的消息,所以我們在最後幾天決定臨時抽換想講的內容,請大家諒解(註1)。

我理解大家對Altair此舉褒貶不一,都在猜測下一步棋。或許讓我們撇開各種揣測,靜心來看看這件事。

在做任何評判之前,我建議大家可以花點時間看看他們的公開信

從我自己的角度來看,能夠有一個開源的顯式求解器可以使用,不是相當振奮人心嗎?

安裝

安裝的方法(註2),我們採取下面作法:

  • 於官方的下載連結內找到OpenRadioss_linux64.zip下載後並解壓縮,並將OpenRadioss資料夾移至/home/user/下。
  • 修改~/.bashrc檔案。
export OPENRADIOSS_PATH='/home/user/OpenRadioss'
export RAD_CFG_PATH=$OPENRADIOSS_PATH/hm_cfg_files
export OMP_STACKSIZE=400m
export LD_LIBRARY_PATH=$OPENRADIOSS_PATH/extlib/hm_reader/linux64/:$OPENRADIOSS_PATH/extlib/h3d/lib/linux64/:$LD_LIBRARY_PATH

測試求解*.rad檔

  • 下載測試範例檔後並解壓縮。
  • 建立一個run.sh檔,並給予可執行的權限chmod +x run.sh
#!/usr/bin/bash
#run.sh
~/OpenRadioss/exec/starter_linux64_gf -i BIRD_WINDSHIELD_v1_0000.rad
~/OpenRadioss/exec/engine_linux64_gf -i BIRD_WINDSHIELD_v1_0001.rad -nt 12
  • 執行sh run.sh

以META開啟動畫:

birdstrike

測試求解*.k檔

根據官方宣稱,OpenRadioss的一大特色,就是能夠直接求解*k檔

哇勒,聽起來也太不可思議了吧,讓我們親手來驗證看看!

我們使用先前box-drop project所產生的k檔來進行測試。

  • 根據我們參考Camry碰撞檔案,如果要在OpenRadioss內使用我們熟悉的ton/mm/sec的話,需要於*k檔中加上*CONTROL_UNITS。所以我們將box_drop.k改命名為main.k,建立一個box_drop_openrs.k來加上*CONTROL_UNITSinclude main.k
  • 建立一個run.sh檔,並給予可執行的權限chmod +x run.sh
#!/usr/bin/bash
~/OpenRadioss/exec/starter_linux64_gf -i box_drop_openrs.k
~/OpenRadioss/exec/engine_linux64_gf -i box_drop_openrs_0001.rad -nt 12
  • 執行sh run.sh

這邊要留意,.k檔需要由starter來吃,而OpenRadioss會自動幫我們產生engine所需要的box_drop_openrs_0001.rad

以META開啟動畫:
box-drop

詳細的數值就不研究了,不過看起來好像有模有樣呀!

CI/CD

既然OpenRadioss可以求解*.K檔,那麼我們有一個大膽的想法,將OpenRadios作為LS-DYNA檔案的checker

這樣一來,在將job送進大型cluster前,我們可以藉由OpenRadios幫忙找出格式或低級的錯誤。

我們透過GitHub Actions來幫助我們完成CI/CD(註3)。

  • 於repo中建立.github/workflows/github-actions.yaml
  • 設定此yaml內的行為,將於push時執行。
  • 選擇ubuntu-latestos
  • 設定五個環境變數。
  • checkout下載repo。
  • download OpenRadioss下載OpenRadioss_linux64.zip
  • unzip OpenRadioss解壓縮OpenRadioss_linux64.zip
  • mv OpenRadiossOpenRadioss資料夾移至/tmp
  • starter執行OpenRadiossstartrt
  • engine執行OpenRadiossengine
  • zip將相關結果檔壓縮為box_drop.zip
  • linode object storageInteract with object storage,透過Linode討論區前人寫好的s3 wrapper,將box_drop.zip上傳至Linode object storage。
#github-actions.yaml
name: OpenRadioss
on: [push]
jobs: 
  exec_OpenRadioss:
    runs-on: ubuntu-latest
    env: 
      OPENRADIOSS_PATH: /tmp/OpenRadioss
      RAD_CFG_PATH: /tmp/OpenRadioss/hm_cfg_files
      OMP_STACKSIZE: 400m
      LD_LIBRARY_PATH: /tmp/OpenRadioss/extlib/hm_reader/linux64/:/tmp/OpenRadioss/extlib/h3d/lib/linux64/:$LD_LIBRARY_PATH
      UNZIP_LOG: OpenRadioss_linux64_unzip.log
    steps:
      - name: checkout
        uses: actions/checkout@v3
      - name: download OpenRadioss
        run: wget https://github.com/OpenRadioss/OpenRadioss/releases/download/latest-20220924/OpenRadioss_linux64.zip 
      - name: unzip OpenRadioss
        run: unzip OpenRadioss_linux64.zip > $UNZIP_LOG
      - name: mv OpenRadioss
        run: mv OpenRadioss /tmp
      - name: starter
        run: $OPENRADIOSS_PATH/exec/starter_linux64_gf -i $GITHUB_WORKSPACE/box_drop_openrs.k
      - name: engine
        run: $OPENRADIOSS_PATH/exec/engine_linux64_gf -i $GITHUB_WORKSPACE/box_drop_openrs_0001.rad -nt 2
      - name: zip
        run: zip -j box_drop.zip $GITHUB_WORKSPACE/box_drop* $UNZIP_LOG
      - name: linode object storage
        uses: s3-actions/s3cmd@v1.2.0
        with:
          provider: linode 
          region: 'ap-south-1'
          access_key: ${{ secrets.S3_ACCESS_KEY }}
          secret_key: ${{ secrets.S3_SECRET_KEY }}
      - name: Interact with object storage
        run: |
          s3cmd sync box_drop.zip s3://open-radioss-demo/box_drop.zip

註解

註1:本來想好好聊聊lasso-python這些年帶給我們的啟發啊!
註2:
參考資料為:

註3:這邊展示的是checker+求解的完整範例。

Code

本日程式碼傳送門(CI/CD)


上一篇
[Day28] - ANSA API + FastAPI
下一篇
[Day30] - 飛龍在天,利見大人。
系列文
或躍在淵的CAE: 讓咱們用Python會一會ANSA + LS-DYNA30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言