#author("2020-01-19T16:50:59+09:00","default:kouzouken","kouzouken") CAELinuxのツールでFEMの例題を解くいくつかの標準的(でないかもしれないけど)、 手っ取り早く(CalculiXを使ってきた我々にとって)簡単な手順をわかりやすくメモ。 *c3D10でのエラー [#qc5efe45] **エラー内容 [#ga97a203] -saleme→Gmesh→pythonとinpファイルを作っていきc3D10のプログラムに入れて節点番号と要素番号を振り分けるところまではうまくいくが、cgxで開くと図が欠けている部分や変形している部分ができ、おかしくなっている。 *SalomeからCalculiXのinpファイルを生成 [#t7cad6d3] **諸注意 [#x87c8458] -Salomeのデフォールト状態で長さ「1」と入力した数値は、Gmshにインポートしてinp形式にエクスポートすると、1kmになる。 -安直には、Salome上で1mの長さを入れたい場合は0.001とか、km単位で入れてしまう。そうするとすごく小さく表示されるのでマウスのスクロールで拡大して作業する。これをGmsh経由でinpに出力すると確かに1mになっている。 -File→Properties→Length Unitで「m」を選択:これは自分用メモで関係ない -Salomeのスケールを変えるには、Operations→Transformation→Scale Transfomで、Scale Factor を0.001にすれば、Salome上で長さ1のものが、Gmsh経由のinpファイルで1mになるかな? →変わってないっぽい。(この方法は要調査)解決できた人はここに補足してください。 **Salomeでメッシュを切ったunvファイルからCalculiXのinpに変換 [#b9b8d0da] -まず、Salomeでメッシュ生成(四面体)まで行ったら、(要素のグループ分けをするんだったらsalomeでしておく)unvファイルにエクスポート、salome1.unvとかにして -四面体要素C3D4、 &link(ccxc3d4unv.f90,http://www.str.ce.akita-u.ac.jp/~gotouhan/takita/moderu/ccxc3d4unv.f90)を使う。材料が一つの時は&link(c3d4unv.f90,http://www.str.ce.akita-u.ac.jp/~gotouhan/takita/salome/c3d4unv.f90)を使う -シェル要素s3をs6に変換 &link(s3-s6unv.f90,http://www.str.ce.akita-u.ac.jp/~gotouhan/takita/salome/s3-s6unv.f90)を使う。 **Salomeでメッシュを切ったunvファイルをGmshを使ってCalculiXのinpに変換 [#ubfda7bd] -今のところ直方体要素の人はこちらを推奨 -S6シェル要素でもできそう Gmshのinp出力はそのままでは使えないので、プログラムを作って微修正する必要がある。 今のところ、直方体要素C3D8用とシェル要素S6用に対応。 -まず、Salomeでメッシュ生成まで行ったら、unvファイルにエクスポート -それをGmshでマージ -Gmshで、Abaqus inp形式で、例えばsalome.inpと名前をつけて保存。 -直方体要素C3D8の場合は、&link(ここ,http://www.str.ce.akita-u.ac.jp/~gotou/programoj/#salome)の &link(ccxc3d8.f90,http://www.str.ce.akita-u.ac.jp/~gotou/programoj/ccx/ccxc3d8.f90)を シェル要素の場合は、&link(ここ,http://www.str.ce.akita-u.ac.jp/~gotou/programoj/#salome)の &link(ccxs6.f90,http://www.str.ce.akita-u.ac.jp/~gotou/programoj/ccx/ccxs6.f90)を 使って、inpファイルを以下のように修正する。 (シェル要素S6の場合は、以下のccxc3d8をccxs6に読み替える) -四面体要素C3D4の場合は、 &link(ccxc3d4.f90,http://www.str.ce.akita-u.ac.jp/~gotouhan/takita/moderu/ccxc3d4.f90)とか&link(c3d4.f90,http://www.str.ce.akita-u.ac.jp/~gotouhan/takita/salome/c3d4.f90)を使う --Salomeで生成したメッシュデータをGmshでinpに変換して --CalculiX用のinpファイルを作るためのプログラム(C3D8直方体要素用) --まず、Salomeで適当に直方体要素のメッシュを切る --それをUNV形式でsalome.unvに保存。 --次にGmshのFileのMergeでsalome.unvを読み込んで、 --Abaqus inp形式でsalome.inpに保存。 --salome.inpの冒頭にある節点番号と座標が並んでいる部分を --setten.inpにコピーし、冒頭に節点数を記入。 --salome.inpの末尾にある要素番号と要素を囲む節点番号が並んでいる部分を --youso.inpにコピーし、冒頭に要素数を記入。 --直方体要素の場合:C3D8ccxc3d8を実行すると、ccxc3d8.inpが生成されているので、 --cgx -c ccxc3d8.inp で読み込んで拘束節点と載荷節点を設定(上に書いてある方法)し、それらを出力。 --出力した拘束節点と載荷節点をccxc3d8.inpに読み込んで --&link(この辺を参考に,http://www.str.ce.akita-u.ac.jp/cgi-bin/gwiki/wiki.cgi?CalculiX%a5%e1%a5%e2#i8)拘束条件と載荷条件を適切に設定。 **Salomeで2種類以上の材料を使う場合 [#ra298888] -Geometry→New→New Entity→Primitives等で材料ごとにモデルを作る。 -New Entity→create groupで境界面のグループを作る kyoukaimenが出来る -二つのモデルをfuse fuseが出来る -Operations→partition objects : fuse tool objects : kyoukaimen を入力 partition1が出来る -partition1を適当にメッシュを切る(たぶん四面体じゃないと切れない) -あとはunv形式でexportしてG-mshでinp形式にする -&link(ccxc3d4p.f90,http://www.str.ce.akita-u.ac.jp/~gotouhan/takita/moderu/ccxc3d4p.f90)とかを使ってinpファイルを作る -cgxで材料をごとに要素をグループ分けする(cgxメモなどを参考)、ついでに節点のグループ分けもする。 -ccxc3d4p.inpのいらないところを消してccxで計算する **Salomeではメッシュを切らずにGmshで切ったメッシュをgi2ci.pyで修正する方法 [#z6b24ed9] 今のところ、シェル要素の人はこちら。 -http://dip28p.web.fc2.com/calculix/gmshinpconvert/index.html GmshでAbaqus INP形式にエクスポートした場合は、立体要素の場合はC3D4, 平面要素の場合はC2D3になるので、中間節点のあるC3D10やS6要素を使う場合は、ci2gi.pyでinpファイルを変換する必要がある。 もちろん、&link(ble6ccxf.f,http://www.str.ce.akita-u.ac.jp/~gotou/programoj/blender/ble6ccxf.f)のやり方で自分で変換プログラムを組んでも良い。 以下の要素に対応 -C3D10(10節点四面体要素) -C3D4(4節点四面体要素) -S6(6節点シェル要素) ***salome [#i3643e1c] -Geometry→New→New Entity→Primitives辺りで円筒とかを適当に設定 -Object Browserで対象構造物(円筒)を選択状態(白くなる)にして、 -File→Export→File of typeをSTEP Filesにして保存 ***Gmsh [#q55f8454] -File→Openで、上でエクスポートしたstepファイルを読み込む -プルダウンメニューをGeometryからMeshにする -Define→Element size at pointsで画面にSelect pointsと表示されたら、周辺を細かくしたい節点を選択。複数選択したい場合はCntlを押しながら領域選択 --選択されると赤くなる --Element size at pointsの数字は小さくするほど細かくなる -画面モードでeを押すと「A scripting command is going to be....」と出たら、Proceed as isをクリック -Element size at pointsウィンドウを消して、画面上でqを押して、プルダウンメニューの左矢印を押して、対象構造が3次元だったら3Dをクリック -set orderで2をクリック -File→Save asでFormatをAbaqus INPにして名前をつけて保存 C3D4であれば、このinpファイルを微修正して利用すればよいが、 C3D10やS6など中間節点が必要な場合は、以下のPythonスクリプトを用いてinpファイルを修正する。 ***gi2ci.py [#a87d7a7e] C3D10やS6など中間節点が必要な場合は、 -http://dip28p.web.fc2.com/calculix/gmshinpconvert/index.html ここのgi2ci.zipをダウンロードして展開し、 上記のページの使用例を参考にしながら、 --( C3D4要素をC3D10D要素に変換したい場合: python gi2ci2.py gmsh.inp calc.inp 3 C3 C2D3要素をS6要素に変換したい場合: python gi2ci2.py gmsh.inp calc.inp 2 S --) みたいにして実行する。 *cgxを使ってinpファイルの拘束節点番号、載荷節点番号を出力する方法 [#ydc8cf72] ただし、面載荷用の.dloファイルの節点番号は点載荷用には使えないので、 拘束面の名前を変えて載荷面用の載荷節点を出せばよい。 ***cgx [#x1be57b5] --( $cgx -c hoge.inp --) を実行でさっきつくったhoge.inpを開く 以下のcgxコマンドは全部「CalculiX Graphix」ウィンドウ(以下cgxウィンドウ)が手前にある状態で入力 --( plot n all --) で全節点を表示 --cgxウィンドウのオブジェクトが映っている枠の外で左クリック押しっぱなし→Orientation→適当な面で左クリック離す --hageという名前で拘束する節点を決定していく --( qadd hage --) を実行 --cgxウィンドウ内でaキーを打つ→ --( mode:a --) と表示される --cgxウィンドウ内でrキー入力→ポインタを動かしてr入力→節点を選択するための矩形が表示される http://www.str.ce.akita-u.ac.jp/~gotouhan/emura/cgx.png --例えばいわゆる片持ち梁にするときは図のようにして拘束したい節点を矩形の中に入れてnキーを入力(奥行き方向の節点が全部選択される) --qキーで選択終了→ --( plot n hage --) で確認 --次にhigeという名前で載荷面を決定していく 拘束点と同じように --( plot f all --) で全面を表示後、同じくqadd→mode:a→r,r→fキーで面を選択(ピンク色に変わる) --たぶん選択面が厚くなるので --( plot f hige qrem hige --) を実行後、r,r→削りたい領域を矩形の中に入れる→fキー→qキー→ --( plot e all plus n hage plus f hige --) で最終確認後、 --( send hage abq nam --) で拘束点をhage.namというabaqus形式で出力、次に --( send hige abq pres 10000 --) で載荷面をhige.dlo(面載荷の場合は拡張子が.dloみたい)というabaqus形式で出力(presは面載荷、数字は荷重) --エディタでhoge.inpをひらく --( *Node [#z423403d] --) という行に --( *Node, NSET=Nall [#g82a7266] --) と追加して --( *Element, type=C3D4, ELSET=PART1 [#x5e958f2] --) という行の「PART1」を「Eall」に変更する --ファイルの最終行からCalculiXの計算に必要な箇所を挿入する。 (上記の方法で進めてきたら&link(これ,http://www.str.ce.akita-u.ac.jp/~gotouhan/emura/salome/inp.inp)をコピペでok --( $ccx_2.3 hoge $cgx -v hoge.frd --) で確認、.datファイルも作られている --参考 http://www.youtube.com/watch?v=l7rEK3JuA0s&list=FLP_VhQB7_mdzDeVCwhp3RKg&index=3&feature=plpp_video ***荷重のかけ方 [#v1da5550] --( send hige abq force 1. 2. 3. --) --節点ごとに荷重を加える場合はforceにする --最後の値はそれぞれx,y,z方向の荷重を表している --点荷重の場合はCLOADにする