大学などでは PTC Creo の学生バージョンや、アメリカのFusion 360 も普及しているようです。とはいえ、プランBは軽そうなフリーソフト。そんなソフトの操作も覚えておくことは有用です。ちなみに、FreeCAD の GUI 技術は、Salome MECHA にも採用されています。
目的としては、OpenFOAM のプリソフトです。
でも、Salome MECHA をもうそのまま使ってもいいんじゃない、とも思います。
とはいえ、授業では教えてくれなかったであろう、CAE 機能もこの FreeCAD には搭載されています。そういう意味では、非常に強力なソフトです。安価で個人的に入手可能になった 3D プリンターでの製作でも、非常に役立ちます。社会人になった後の趣味の幅を広げるという意味でも、大変有用なソフトウェアだと思います。ま、機械に関心があれば、のお話ですが。
なお、アセンブリなどもアドオン追加で用可能になります。
a
最初はメニューやアイコン表示が少ないようだが、機能を使用していくにつれて表示が増えていくようです。それでも最初は、「表示」→「ツール」で表示される項目すべてにチェックを入れておくとよいかもしれません。
いったん使用するとど増えたり適宜入れかわるようなので、再使用の際は、以下の手順ではないところにより便利なメニューやアイコンが表示されている可能性がります。表示されている場合は、適宜、それらを使用して作業スピードアップを図ってください。
立ち上げる [FreeCAD ダウンロード]
ファイルメニュー 新規 (アイコン)
表示→ワークベンチ→スケッチャー(アイコン)
新規スケッチを作成
サブウインドウで座標系の使用スケッチ面を選択(オフセットも設定可)
メッシュと座標軸が表示される
以降、モデル断面をスケッチする
freeCAD
拘束
スケッチで、PTC Creo のような自動拘束は行われないようなので、基準軸を意識してモデル作成するなら、常に拘束を手動でおこなう。
基本は軸拘束と思う。南京錠アイコンを使用。Ctrl キー押下しながらマウスで軸と点を選択して、南京錠アイコンをクリックする。
あるいは、原点に点拘束を行う。座標軸と原点にくる点を選択して、点拘束アイコンをクリックする
拘束解除は、拘束点にある拘束マークをクリックして、Deleteキーを押下する。
マウスによるオブジェクト選択
アイコン選択は左クリックでするが、この解除は右クリック。これでアイコンが矢印アイコンに変わる。Esc キーでも可。
メッシュ表示
メッシュはデフォウルトで1mm?メッシュで部品によっては細かい。編集→設定→スケッチャーで、メッシュの数値を変更
反映はただちには行われないよう。いったんスケッチを終了して、再編集する。
スケッチ中には、左サイドメニューの edit control 内で変更が可能。これはすぐに反映される。
再編集は、コンポビュー、モデルツリーで、対象スケッチ上で右クリックしサブメニュー内から「スケッチを編集」を選択する。
その他拘束など
寸法は、基本的にはオブジェクトにしか定義できないよう。線と線の間隔の定義はできないよう。2点間か1直線。
押出では、外形を基準に埋められた形状を押し出すよう。複数の閉曲線で、他の内部にある閉曲線は無視されるか、stlなどへのエキスポート時に異常を来すようです。
左サイドウインドウの上のフレーム内で、完全な拘束、と表示されたらスケッチは終了可能。Close ボタンを押し、スケッチモードを終了する。
左サイドメニュー、コンポビューで作成したスケッチを選択する。
表示→ワークベンチ→part(アイコン)
押し出しアイコンを選択する。(アイコン)
サイドフレームの中で押し出し方向(法線)、正負の押出量、等を設定して、適用ボタンを左クリックする。
適用結果が良好であれば、OKボタンを左クリック。
さらにオブジェクトを改造するには。
オブジェクトのカット(除去)は、立体要素を作成した後に、二つのオブジェクトを加減する。ワークベンチ パーツ を利用。カットの場合は、マウス選択順に、「元の物体」、「除去するボリューム」です。サイドウインドウにも選択設定が表示されるので参照方。
ボルト穴のようにくりぬくには、オブジェクトの面を選択してから、スケッチを起動させる。図形作成後、part Desighn ワークベンチを起動して、くりぬき(枡形アイコン)で設定フレームで貫通などを指定する。
これで基本操作は完了です。本学の使用CADである PTC Creo に比べると、自動機能が少なく、逐次意識的に操作する必要があります。「ワークベンチ」が作業の分類のようなので、これらが自動的に切り替わらないところは慣れが必要そうです。ワークベンチの切り替えが必要なようです。
できあがったオブジェクトをくるくる回して回転させたいところですよね、これも実行に先立って、ワークベンチの切り替えが必要なようです。「shift」+右ボタン、あるいはマウスセンターボタン+右ボタン、で自在に動きます。右ボタンは遅れて押してください。
表示→ワークベンチ→Draft(アイコン)を選択表示した後に、アイコンを選択して、設定ウインドウに従って動かすか、マウス操作で、回転中心、回転開始操作でドラッグして回しますが、自在には回転しないようです。
できあがったオブジェクトをstlなどにエクスポートする場合、図形表示画面で対象物体をクリック選択してから、「ファイル」→「エクスポート」からファイル形式を選択すれば、それでOKです。
ごくごく簡単に FreeCAD の超基本操作を記述してみました。
大学の授業を表っ面で勉強する前に、こういうソフトで何がわからないのかを実践しておけば、教育効果は2オーダーくらい上昇しそうです。でも、結局は興味のある人に有効なだけで、端から関わらない人には無効です。
ほんとうに「興味ある」人は簡単に入り込めるでしょうから、挑戦してみてください。
FreeCAD を操作して、ごく簡単な形状はなんとなく作れるようになりました。
研究室で流体の計算をするのに、それほど複雑な形状もいらないので、なんとか用は足せそうです。
今回は、ネットでみつけたサイト、Xsim というWEBベースのプリプロセッシングのアプリケーションが何なのか、試してみるために計算モデルを作ってみました。まだ、Xsim の使い方もわからずに始めてますので、完結するかどうかは未知です。
このアプリは、FreeCAD をはじめとする外部アプリで作成したstlファイルを読み込んで、計算条件を指定することで、OpenFOAM の初期データーを作成する支援ツールのようです。
使ってみてわかったこと。
境界条件等を指定する面については、別個の STL ファイルにしておかないと区別できない。
読み込めるファイルは、5MBのよう。
、これはなかなか厳しい。
予想では、形状を読み込んだ後、形状の各面をちょうど3次元モデリングCADの表面を選択するように、画面上で選択し、それらに個別に条件を定義できるのかと思ってました。
というわけで、計算領域をまずはいかに5つの部分に分割できるかどうかにかかってきます。
流体の流れを規定するので、流体の流入口と出口がいります。子れをっひと津にまとめて指定できるのかがわからないので、入り口と出口に分ければ、それで2ファイル。
二次元流れを計算するので、サイドウォールは滑り条件で2枚。これをセットにして1ファイル。流量規定にするために、流れが計算領域に循環するように裏領域を構成するために、滑り条件で1ファイル。
計算領域の壁面は製糸壁として1ファイル。
以上 5 ファイルに分割しないといけないようです。
ホント?
この作業を FreeCAD 上で行います。
ワークベンチ、ドラフトを選択する。
ソリッドのオブジェクトから、複数の面を、「ctrl」+左クリックで選択し、ドラフトのアイコンで黄色いコの字のようなアイコンをクリックすれば、選択した面が独立したグループになって、モデルツリーに追加されます。
ワークベンチ、ドラフトを選択すると、モデルツリーで右クリック捨て現れるサブメニューに、「表示の切り替え」が現れます。これを切り替えるたびに、そのオブジェクトを消去、表示が切り替わります。モデルツリーがグレーになって状態が表示されます。
見やすいように表示したり消去したりしながら、必要な面をグループ化していきます。
準備ができたら、独立した STL ファイルにしたいモデルを、クリックして選択(グレー背景)にして、「ファイル」メニューからエクスポートすれば、個別の STL ファイルに保存できます。
きょうはここまで。
前回作成した、分割 STL をつかって、とにかく一度 Xsim に読み込ませて先に進んでみます。
Xsim を開始するのは、まず、プロジェクト名を入れて始めます。
この手順は説明ページにあります。
このウインドウに、ドラッグするなり、ファイルダイアログ開くなり、トータル5MB以内ならアップロードできるそうです。ということは、小さめにモデルを作っておく方がいいってことなのかも。どうせメッシュはこのアプリで切るんだから?
さて、ここで少し問題があります。このソフトの設計者はきっと純プログラマ、ISOの一般工学の信者です。え、それが何が悪いんですか?機械系の人間の行動パターンは、形状作成は普通、CADを使用します。ではその単位は?ISO準拠でメートル単位。違います。機械系は計算はmksですが、図面は mm です。そこで、アップロードしたファイルについて「大きさの修正」が必須です。ちょっと面倒です。機械設計的にいけば、重心中心のデフォウルトも面倒です。「原点中心」に変更、「0.001 : mm → m」でとにか変換する必要があります。
その後は、自動設定されるところはもうそのまま信じて先に進みます。
流体密度の設定はわかります。
境界条件などは、設定すると、青い四角い箱になってどんどん増えていきます。それらがうまくいってると、右に、矢印などで流れの条件が表示されます。同じ面グループを二重指定できないので、修正するときは、青い四角を一旦削除して、設定し直します。
何もしなければ全部スリップ壁になるらしいので、未設定でエラーになる確率は低くくなるように考えられているようです。欲しい計算ではないかもしれませんが。
裏返せば、流れの設定はしっかりしなければなりません。面(のstl)を選択すれば、速度が設定できますが、グラフィカルな表示から一変、ペクトルの数字設定です。まだ速度はよいですが、領域の座標設定は、このツール内では数値の目安もないので性格に設定するのは難しそうです。座右に手書きのマップが必要そうです。詳細にはどうすればよいは今はよくわかりません。やらなくてもなんとかなりそうです。
境界条件や流入、流出条件を設定し終わると、なんとなく入力状況が表示されます。
ところが、特に気になるのは、流入流出条件ですが、表示スケールの関係で、流速が小さい場合は、モデルの単位との兼ね合いで矢印が小さいようです。ただし、「自然流入出」や「静圧指定」などで設定すると、しっかり矢印が表示されるようなので、流速指定で流入出を指定したとき、矢印が小さいようです。当初、設定ができていないと思いましたが、「自然流入出」に変更すると両矢印が表示されました。そこで、流速設定した面をよく拡大してみると、中心に白い点(黒丸内)が確認できました。
そこで流速値を2オーダーくらい大きく表示すると、ようやく矢印が表示されました。
設定にエラー表示がなく矢印が確認できない場合には、仮に値を大きくして、矢印が表示されるか確認するとよいかもしれません。矢印表示の大きさを模型スケールも考慮して、流速値で対数的に決定してくれるとこんなことも減るのでしょう。
最後はエクスポートすると、OpenFOAM 用のファイルセットが出力されます。
なお、このWEB base ツールは、OpenFOAM上流のメッシュを切るための設定ファイルを生成することが目的なので、このソフトでメッシュが生成される訳ではありません。だから当然ながらこのツール上ではメッシュの確認はできません。
したがって、吐き出されるBATの実行でそれらの作業が行われるので、最終的には PARAview などのアプリを使ってメッシュを可視化する必要があります。
OpenFOAM の DICT ファイルの基本的な形式は、わかっていても、計算モデルの形状に手動で合わせられるのは、せいぜいチュートリアルの cavity くらいまで、というのが気持ちです。その点、とりあえずモデルを作って stl に分割してアプロードすれば、それらの dict ファイル群を作ってくれる XSim は初心者にとっては大変ありがたいツールです。
ただし、設定項目はおそらく必要最小限にして、ツールの中で宇かく処理されているのではないかと思います。 それでも、非ニュートン流体や、回転物体、非定常流れなど、多少複雑なものにも簡単に対応してくれているようです。
まだまだ使い勝手がわかりませんが、使用してみて遭遇したトラブルを羅列しておきます。
ファイルアップロード
ファイルアップロードは一方通行のようです。一旦アップロードしたファイルを削除することができないようです。したがって、間違った形状をアップロードしてしまうと、境界条件がややこしくなります。諦めてプロジェクトを作り直し、しかないかもしれません。
ファイルアップロードは戦略的に
FreeCAD で stlファイル群ができてしまうと、私なんかは喜び勇んでまとめてアップロードしてしまいます。しかし、XSim は一応、形状確認ができます。だから、stlファイルは、一つずつアップロードして、サーフェイスが抜けていないか見やすい順を考えて、確認するのが良さそうです。アップロード時点で、初歩的なサーフェイス抜けを見つけられれば時間短縮できます。
形状から流体が漏れる
なぜかわかりませんが、完璧に作ったつもりのモデルから、流体が漏れて、内部流れのつもりが内外流れ(領域を自動で直方体に囲まれた中荷モデルがある流れ)になってしまいました。流線等を見ても、サーフェイス抜けがあるわけではありませんでした。まさしく、サーフェイスの継ぎ目からにじみ出ていました。なので、メッシュの、荒さ、パネル数を調整してみたら、解決しました。
FreeCADで、フェイスバインダーでサーフェイス選択がうまくいかない
二次元流れモデルの時、厚みを極限まで薄くすると、それらのパネルを選択するのが面倒な状況になります。パネルなのか、エッジなのか、拡大縮小を繰り返して。そういう場合は、とりあえず選択しやすい面で一旦、フェイスバインドして終了し。そのフェイスバインド要素をダブルクリックして、さらに要素の追加削除をする方がミスが減ります。
メッシュ:体積メッシュ設定
目標 8000/ レイヤーメッシュ 厚み比 0.3 総数 3
基本設定
非定常/ 300秒 / 時間ステップ くー乱数による自動設定解除で時間感覚1秒
物性:空気
初期条件:速度 0.03 m/s at x
計算設定
標準数値スキーム / 安定性重視 / 緩和係数 速度 0.5 , 圧力 0.2, 乱流エネルギー 0.2, 乱流散逸率 0.2
さて、いよいよ最終段階。思い通りの結果が得られるかどうかお楽しみ。
今回は、openFOAM に引き渡す形状やコントロール情報のファイル群について、FreeCAD を用いて形状を作成、さらにFreeCADを用いて境界条件の異なる境界を分割、ファイルに保存しました。これはその下流の Xsim を利用するための準備です。Xsim では、形状d-ターニ含まれる面の複数の集合について、それぞれのメッシュ生成に必要な情報や、計算用の境界条件の情報を、ここの面事に生成し、その結果を zip ファイルにしてダウンロードできました。
現時点で、ちょっと面倒な、control.dec や 時間 0 フォルダー、メッシュ作成のための meshblock.dic も生成してくれています。
control.dic
FoamFile
{
version 2.0;
format ascii;
class dictionary;
location “system”;
object controlDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
application icoFoam;
tartFrom startTime;
startTime 0;
stopAt endTime;
endTime 0.5;
deltaT 0.005;
writeControl timeStep;
writeInterval 20;
purgeWrite 0;
writeFormat ascii;
writePrecision 6;
writeCompression off;
timeFormat general;
timePrecision 6;
runTimeModifiable true;
// ************************************** //
メッシュ情報は。つぎの通り。
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object blockMeshDict;
}
vertices
(
(-11200.0 -1100.0 -2775.0)
(12200.0 -1100.0 -2775.0)
(12200.0 100.00000000000074 -2775.0)
(-11200.0 100.00000000000074 -2775.0)
(-11200.0 -1100.0 3525.0)
(12200.0 -1100.0 3525.0)
(12200.0 100.00000000000074 3525.0)
(-11200.0 100.00000000000074 3525.0)
);
blocks
(
hex (0 1 2 3 4 5 6 7) (90 5 25) simpleGrading (1 1 1)
);
edges ();
patches ();
mergePatchPairs ();
うーん。もううまくいってるのかどうかはわかりません。
吐き出されたシェルプログラムは以下の通り。思い通りに操作するには、この記述の解明から始めればよいでしょう。
#!/bin/sh
cd ${0%/*} || exit 1
. $WM_PROJECT_DIR/bin/tools/RunFunctions
show_help() {
echo “Usage: Allrun [OPTIONS]”
echo “options:”
echo ” -m, –onlyMesh make only meshes”
echo ” -h, –help print the usage”
echo “”
exit 1
}
get_num_labels() ( set -f; set — $1; echo $# )
monitor() {
local solverPID=$1
local logFile=$2
while [ ! -f $logFile ]; do
sleep 1
done
sleep 3
# Note that the numLabels includes “#”
local labels
labels=$(grep -E ‘^#’ $logFile | tail -1)
if [ “x$labels” = “x” ]; then
labels=”# Step”
fi
local numLabels=$(get_num_labels “$labels”)
local numColumn=$(tail -1 $logFile | awk ‘{ print NF}’)
local i=0
while [ “$numLabels” -le “$numColumn” ]; do
i=$(expr $i + 1)
labels=”$labels data$i”
numLabels=$(get_num_labels “$labels”)
done
local xAxisLabel=$(echo $labels | cut -d ” ” -f2)
labels=$(echo $labels | cut -d ” ” -f3-)
local gnuplotFile=$(mktemp)
echo “set term x11 1 font \”helvetica,17\” linewidth 1.5 persist noraise” > $gnuplotFile
echo “set logscale y” >> $gnuplotFile
echo “set title \”Residuals\”” >> $gnuplotFile
echo “set xlabel \”$xAxisLabel\”” >> $gnuplotFile
echo “plot \\” >> $gnuplotFile
local field
local line
i=1
for field in $labels; do
i=$(expr $i + 1)
line=”\”$logFile\” using 1:${i} with lines title \”$field\””
if [ $i -lt $numColumn ]; then
line=”$line, \\”
fi
echo $line >> $gnuplotFile
done
echo “pause 1” >> $gnuplotFile
echo “reread” >> $gnuplotFile
touch $logFile
gnuplot $gnuplotFile &
local gnuplotPID=$!
while ps -p $solverPID > /dev/null; do
sleep 1
done
sleep 5
kill -9 $gnuplotPID
rm $gnuplotFile
}
optionOld=$OPTIND
OPTIND=1
onlyMesh=0
while getopts “hm-:” opt; do
case “$opt” in
-)
case “${OPTARG}” in
help) show_help;;
onlyMesh) onlyMesh=true;;
esac ;;
m) onlyMesh=true;;
h) show_help;;
esac
done
shift $((OPTIND-1))
OPTIND=$optionOld
runApplication blockMesh
runApplication surfaceFeatureExtract
runApplication snappyHexMesh -overwrite
if [ “$onlyMesh” = true ] ; then
exit 0
fi
residualsFile=”postProcessing/residuals(U,p,k,epsilon)/0/residuals.dat”
if [ -f $residualsFile ] ; then
rm -f $residualsFile
fi
if [ -n “$DISPLAY” ] && [ -x “$(command -v gnuplot)” ]; then
runApplication $(getApplication) &
monitor $! $residualsFile
else
runApplication $(getApplication)
fi
さて、とりあえず実行してみましょう。
老人には、過去にちょっと昔に調べて実行したくらいでは、プロ氏ジャーが忘却の彼方です。至るところにメモをはっつけておかないといけないので不便ですよね。
OpenFOAM 環境内(Linux)で作業するために、linuxコンソールを開く。
ワークディレクトリィにコツコツと移動する。(cd , ped, ls -al, などを活用)
ワークディレクトリィ内の Allrun スクリプトを実行する。
同ディレクトリィ内に空の paraview 用のファイル x.foem ファイルを作成しておく。
x.form を開く動作で paraView を起動させるか、paraView を起動した後、x.form を読み込み apply ボタンを押せばよい。
ParaView から x.form を読み込むときは、「file」「open」でファイルタイプをすべてにして、x.form で表示して選択。その後のウインドウで、OpenFOAM 形式を選択すればよい。
ParaView でモデルが表示されれば、Xsim のモデリングがうまくいってたかどうかが確認できます。ちなみにパネル抜けなどがあった場合は、流体が漏れてるということで、たぶん、Xsim で設定された長方形領域全体で計算されてしまうようです。邪推ですが、閉じた境界条件で内部流れかどうかを判断してるあたりが、Xsim は絶妙です。
パネルに不備(パネル抜けで領域が閉じてない)があった場合。
ここでは詳細図は示しませんが、上図からうかがえるように境界壁面あたりが指定通り細かく分割されたメッシュになっています。
計算条件の善し悪しなどはありますが、最後まで計算が行われていれば、正しいかどうかは別としてそれなりの何かが得られています。これは素晴らしいことです。モデリングの不備で時間をとられるよりも、計算条件で悩む方が有意義ですから。
paraVIEW で、「Surface with Edge」を選んでやれば、パネルの様子が確認できます。
物理量(P, U, K, epsiron,…)を切り替えてやれば、それぞれの値がコンターで示されます。
圧力分布を見れば速度場はだいたい予想できますが、速度ベクトルがほしい場合は、地球儀みたいなアイコン、流線がほしい場合は、円柱周りの流れっぽいアイコン、を選択してください。ちなみに、流線の表記は、解像度(resolution)の数値を30~100位の荒いものにしておく方が、描画速度もですが、見やすさがほどよいと思います。apply のボタンが有効になってたら、クリックして反映させてください。
まぁ詳細は、ParaVIEW のほうで表示方法を説明追記しておきますが、流速をコンターで表して、それに流線(流速トレース)した図を重ねた結果が以下の通り。長方形空間に、左上の排気口から吸引したとき、その直ぐしたの開放口と、反対側の開放口とのどちらから流入して室内の流れがどうなるか、を計算した結果です。
計算方法、スキームの中の設定、いろいろ細かな問題点はあるかもしれませんが、FreeCAD から、 Xsim をつかって入力ファイルを作って、OpenFOAM で計算して、その結果を ParaVIEW で表示させるところまでは、それほど難しくない、というお話でした。
付録
FreeCAD で複雑な形状モデルを作成するとき
通常のCAD でも、一気に複雑なスケッチから臼だしをすることはあまりよくないようです。それは、第一に、スケッチの信頼性による修正許容度が低下するためと思います。
3D CAD の使い方については、授業の際にでも担当の教員に教えてもらってください。
FreeCAD もまた、複数のオブジェクトに分けてモデリングをしていくことになります。本学の授業で使用している CAD (PTC Creo Direct)では、オブジェクト(フィーチャー)は、接触した時点でマージされていきます。個別のオブジェクトは、パーツとしてまとめられて、複数のパーツでアセンブルによって機械を構成していくイメージです。
しかし、FreeCAD では、どうも生成したオブジェクトは、意図的に結合する必要があるようです。この結合(あるいは一体化)を行わないと、形状を stl にエキスポートしたときに、オブジェクトの形状の境目部分にも表面が残ってしまうようです。少なくとも、接した状態で作成すると、面が残ります。従って、ワークベンチ part の ブーリアン演算 で和集合にしておかないといけないようです。
あと、元のモデルを変更しても、サーフェイスを切り抜いた後流作業には反映されないよう?もう一度、同じ作業をしないといけないように思います。そうであれば、ちょっとモデル変更、ってなると、XSim への引き渡しは結構面倒です。CAD としてそんなはずがないように思うので、ワンタッチで反映させるボタンあるいは設定があるかもしれません。
OpenCAD で、二次元流れを計算しようとすると、それなりの大きさの領域に、極薄のモデルを作成したくなります。メッシュ分割の事情か、ザクッと何も考えなければ、薄い側壁サーフェイスがうまくメッシュ分割できないのか、blockmesh 等分割後は、pataVIEW で確認すると立方体が出てきます。しかもメッシュが切れていないようでした。
それで厚みをつけると、きちんと平板状のメッシュが切れたモデルが作成されたようで、厚さ方向には 5メッシュくらいで表示されます。しかし、円柱がありません。計算も始まりません。