VS-CodeでOpenRadiossの解析ファイルを作る(DYNA形式)

オープンCAE Advent Calendar 2024、参加記事です。
CAE初心者勢なのでお手柔らかにお願いします。

今回、使用したのはOpenRadiossです。
OpenRadiossは陽解法動解析向けのソルバーで、
この種のソルバーで最も有名なLS-DYNA形式のインプットファイルを（一部）サポートしています。
OpenRadiossの使い方は、去年までのオープンCAE Advent Calendarの他の人の記事を探せば出てくると思います。

LS-DYNA形式のインプットインプットファイルをつくるには、色々な方法がありますが、テキストエディタを使えば作ることが出来ます。LS-DYNAのインプットファイルに関する資料も開発元から沢山公開されています。メモ帳で作るのはハードルが非常に高いですが、よく使用されるテキストエディタであるVS-CodeではVS Code LS-DYNA extensionがありますので、これを使うと比較的簡単にインプットインプットファイルを作れます。

使用したversionはLS-DYNA v1.2.1 Ryan O'Sullivan, Syntax Highlighting and Snippets for LS-Dyna Deck Creation and Editing

こんな感じで色分けしてくれる。
![スクリーンショット 2024-12-14 173512.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141993/5a0f66d2-84be-8e1e-1c9a-9f256ad4f419.png)


キーワードを途中まで入力すると候補も出してくれる。

![スクリーンショット 2024-12-14 174108.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141993/5c5b7f57-3650-a763-b211-7ee80d1086cf.png)

コメント欄には、キーワードに必要な情報を追加してくれます。
![スクリーンショット 2024-12-14 174219.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141993/79b05d93-036b-c274-91db-188dfd0ba9bf.png)

そしてこのコメント($が付与された行)、これが非常に重要になります。
LS-DYNAは基本的に1行80列で構成されるのですが、このコメントを見れば、キーワードの境界が分かります。下の画像の赤い点線の部分がキーワードの境界です。

![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141993/11d25b2a-c5ed-9c30-650a-d650d2f26520.png)

開発元の資料とOpenRadiossのLS-DYNAとの対照表を参照しながら今回つくったのが以下。
シェルの片一方を固定して、もう片一方に力を加えています。


```
*KEYWORD
*TITLE
$#title
LS-DYNA keyword deck
$
*CONTROL_TERMINATION
$#  endtim    endcyc     dtmin    endeng    endmas     nosol
      0.01         0   
$
*CONTROL_UNITS
$#  length      time      mass
         m         s  mtrc_ton
$    
*DATABASE_BINARY_D3PLOT
$#      dt      lcdt      beam     npltc    psetid
     0.001         0         0         0         0
$
*NODE
$#   nid               x               y               z      tc      rc
       1             0.0             0.0             0.0       0       0
       2             0.0             1.0             0.0       0       0
       3             1.0             0.0             0.0       0       0
       4             1.0             1.0             0.0       0       0
       5             2.0             0.0             0.0       0       0
       6             2.0             1.0             0.0       0       0
       7             3.0             0.0             0.0       0       0
       8             3.0             1.0             0.0       0       0
       9             4.0             0.0             0.0       0       0
      10             4.0             1.0             0.0       0       0
      11             5.0             0.0             0.0       0       0
      12             5.0             1.0             0.0       0       0
$
*MAT_ELASTIC
$#     mid        ro         e        pr
        1     2700.0    70.0E9       0.3
$  
*ELEMENT_SHELL
$#   eid     pid      n1      n2      n3      n4      n5      n6      n7      n8
       1       1       3       4       2       1       0       0       0       0
       2       1       5       6       4       3       0       0       0       0
       3       1       7       8       6       5       0       0       0       0
       4       1       9      10       8       7       0       0       0       0
       5       1      11      12      10       9       0       0       0       0
*SECTION_SHELL
$#   secid    elform      shrf       nip     propt   qr/irid     icomp     setyp
         1         2     0.833         2       1.0         0         1         1
$#      t1        t2        t3        t4      nloc     marea      idof    edgset
       0.5       0.5       0.5       0.5       0.0       0.0       0.0         0
$#      bi        bi        bi        bi        bi        bi        bi        bi
       0.0       0.0       0.0       0.0       0.0       0.0       0.0       0.0
$
*PART
$# title
part1
$#     pid     secid       mid     eosid      hgid      grav    adpopt      tmid
         1         1         1         0         0        0          0         0
$
*SET_NODE_LIST_TITLE
$# title
fix
$#     sid       da1       da2       da3       da4    solver
         1
$#    nid1      nid2      nid3      nid4      nid5      nid6      nid7      nid8
         1         2
$
*SET_NODE_LIST_TITLE
$# title
LOAD
$#     sid       da1       da2       da3       da4    solver
         2
$#    nid1      nid2      nid3      nid4      nid5      nid6      nid7      nid8
        11        12
$
*BOUNDARY_SPC_SET
$#    nsid       cid      dofx      dofy      dofz     dofrx     dofry     dofrz
         1         0         1         1         1         1         1         1
$
*DEFINE_CURVE_TITLE
$# title
LOAD
$#    lcid      sidr       sfa       sfo      offa      offo    dattyp
         1         0       1.0       1.0       0.0       0.0
$#                a1                  o1
                 0.0                1000 
                 1.0                1000
$
*LOAD_NODE_SET
$#    nsid       dof      lcid        sf       cid        m1        m2        m3
         2         1         1       1.0
$
*END
```

OpenRadiossで読み込んで解析下後、paraviewで可視化出来ます。

初期状態
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141993/e246150d-bf65-8480-6bf3-5144dd47d2fb.png)


シェル要素が伸びた状態(コンター図は変位)
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141993/35040330-6954-1df5-f9d3-7ddfd8b87cac.png)

ショボい...
来年度もオープンCAE Advent Calendarがあるなら、もうちょっと良いネタを書きます。