こんにちは(@t_kun_kamakiri)(‘◇’)ゞ
この記事では、Salomeというオープンソースを使ってバックステップ流れのモデル作成をしていきたいと思います。
本日、作成するモデルはこちらです。
Salomeの9.3.0から追加されたShaperを使ってモデルの作成方法を紹介します。
動画も用意しましたのでご確認ください。
salomeのshaper使ってみた系( ^ω^)・・・ pic.twitter.com/0derLZ4Ln4
— カマキリ🐲@物理ブログ書いている (@t_kun_kamakiri) 2020年3月22日
こちらの動画を参考に作成しました。
【使用環境】
- Windows10
- Salome9.3.0
2020年3月現在のSalomeの最新バージョンは9.4.0(バグが若干修正)なので最新版をお使いください。
今回作成するモデル
今後、OpenFOAMを使って流体解析もしたいので「バックステップ流れ」のモデルを作成します。
後ほど、「メッシュ作成(Salome)」→「流体解析(OpenFOAM)」→「結果処理(Paraview)」の記事を作成したいと思いますのでお待ちくださいm(__)m
作成するモデルの寸法は下記の通りです。
※後々、流体解析をする際に寸法の単位が重要になるのですが流体解析は基本SI単位系です。
なので、今の寸法の単位は「m」です。
流体解析をする際にやっぱり「mm」で解析したいという場合に、OpenFOAMのユーティリティでスケール変換できるのでご安心ください。
Salomeを起動→「Shaper」を選択
では、さっそくモデルを作成していきます。
Salomeを起動して「Spaper」に切り替えます。
「Part」→「New part」として、新しいパートツリーを作ります。
スケッチ面に線を描く
次に先ほど作成したパートツリーでスケッチでお絵描きをします。
まずは、スケッチ面を「x-y平面」に用意します。
「Line」を選択してx-y平面上で適当にお絵描きをします。
描くのはバックステップ流れでのxy断面の絵です。
後ほど、寸法拘束を入れるので今は適当にそれっぽい絵を描くだけでよいです。
寸法拘束を入れる
適当にお絵描きした線に寸法拘束を入れていきます。
少々わかりずらいので操作方法は動画を参考にしてください。
今回使うのは以下の4つです。
寸法は以下のようにして、拘束していきます。
寸法の指定には変数(例えばa=2)としておくと良いです。(後々、スクリプトファイルにしたときにわかりやすくなります)
完全に拘束することができたら色が変わります。
緑色になっていない場合は、まだ完全に拘束できていないのでどこが拘束されていないか確認しましょう。
スケッチをz方向に押し出す
次に先ほどx-y平面でスケッチしたものをz方向に押し出します。
先ほど作成したスケッチは、左のツリーの「Sketch_1」です。
「Sketch_1」を選択してz方向に「3(単位は書いていないですが3m)」押し出しましょう。
これでモデルが完成しました(^^)/
操作動画はこちら
やっぱり動画での説明の方がわかりやすいかもしれないと思って動画も作成しました。
操作動画
ファイル保存
せっかく作成したファイルは消えてしまわないように保存しておきましょう。
「.hdf」という拡張子で保存されます。
次回はSalomeでメッシュ作成をしてみよう
次回は、Salomeでメッシュ作成をしていきたいと思います。
おまけ:Salomeの操作をPythonスクリプトで保存しておくと便利
Salomeは動作をスクリプトとして保存することができます。
言語はPythonです。
「ファイル」→「スクリプトを保存」を選択して、適当な名前でPythonスクリプトを保存しておきましょう。
「test.py」の中身はこんな感じ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | #!/usr/bin/env python ### ### This file is generated automatically by SALOME v9.3.0 with dump python functionality ### import sys import salome salome.salome_init() import salome_notebook notebook = salome_notebook.NoteBook() sys.path.insert(0, r'C:/Users/Owner/Desktop') ### ### SHAPER component ### from SketchAPI import * from salome.shaper import model model.begin() partSet = model.moduleDocument() Part_1 = model.addPart(partSet) Part_1_doc = Part_1.document() model.addParameter(Part_1_doc, "d", "20") model.addParameter(Part_1_doc, "c", "2") model.addParameter(Part_1_doc, "b", "2") model.addParameter(Part_1_doc, "a", "2") Sketch_1 = model.addSketch(Part_1_doc, model.defaultPlane("XOY")) SketchLine_1 = Sketch_1.addLine(0, 0, 0, 2) SketchLine_2 = Sketch_1.addLine(0, 2, 22, 2) SketchConstraintCoincidence_1 = Sketch_1.setCoincident(SketchLine_1.endPoint(), SketchLine_2.startPoint()) SketchLine_3 = Sketch_1.addLine(22, 2, 22, -2) SketchConstraintCoincidence_2 = Sketch_1.setCoincident(SketchLine_2.endPoint(), SketchLine_3.startPoint()) SketchLine_4 = Sketch_1.addLine(22, -2, 2, -2) SketchConstraintCoincidence_3 = Sketch_1.setCoincident(SketchLine_3.endPoint(), SketchLine_4.startPoint()) SketchLine_5 = Sketch_1.addLine(2, -2, 2, 0) SketchConstraintCoincidence_4 = Sketch_1.setCoincident(SketchLine_4.endPoint(), SketchLine_5.startPoint()) SketchLine_6 = Sketch_1.addLine(2, 0, 0, 0) SketchConstraintCoincidence_5 = Sketch_1.setCoincident(SketchLine_5.endPoint(), SketchLine_6.startPoint()) SketchConstraintCoincidence_6 = Sketch_1.setCoincident(SketchLine_1.startPoint(), SketchLine_6.endPoint()) SketchProjection_1 = Sketch_1.addProjection(model.selection("VERTEX", "PartSet/Origin"), False) SketchPoint_1 = SketchProjection_1.createdFeature() SketchConstraintCoincidence_7 = Sketch_1.setCoincident(SketchAPI_Point(SketchPoint_1).coordinates(), SketchLine_1.startPoint()) SketchConstraintVertical_1 = Sketch_1.setVertical(SketchLine_1.result()) SketchConstraintVertical_2 = Sketch_1.setVertical(SketchLine_5.result()) SketchConstraintVertical_3 = Sketch_1.setVertical(SketchLine_3.result()) SketchConstraintHorizontal_1 = Sketch_1.setHorizontal(SketchLine_2.result()) SketchConstraintHorizontal_2 = Sketch_1.setHorizontal(SketchLine_6.result()) SketchConstraintHorizontal_3 = Sketch_1.setHorizontal(SketchLine_4.result()) SketchConstraintLength_1 = Sketch_1.setLength(SketchLine_1.result(), "a") SketchConstraintLength_2 = Sketch_1.setLength(SketchLine_6.result(), "b") SketchConstraintLength_3 = Sketch_1.setLength(SketchLine_5.result(), "c") SketchConstraintLength_4 = Sketch_1.setLength(SketchLine_4.result(), "d") model.do() Extrusion_1 = model.addExtrusion(Part_1_doc, [model.selection("COMPOUND", "all-in-Sketch_1")], model.selection(), 3, 0) model.do() model.end() if salome.sg.hasDesktop(): salome.sg.updateObjBrowser() |
寸法を変更したいときにもう一度はじめからモデルを作成するのは面倒ですよね。
そんな面倒なことをしなくてもPythonスクリプトを利用して変えたい寸法だけを変更してPythonを実行すれば簡単にモデル作成ができます。
そちらも追々紹介したいと思います(^^)/