20200209

Calculix 10本ノック: 4本目:cgxで四則演算、while

Calculixとは

フリーの解析ソフト。

  • ccx ソルバー
  • cgx プリポスト

環境

  • WSL

  • Xming

  • Calculix 2.11

ノック4本目:cgxで四則演算、while

cgxのを使って、たし算ひき算わり算かけ算をやる。

cgxのコマンド実行には、

  • fbdファイルに下記を書き込んで実行
  • cgxのウィンドウをアクティブにして、マウスカーソルをウィンドウ内に入れてからコマンド入力

の二つの方法がある。

Calculixのcgx内で四則演算するには、valuを使って変数に入れてから、再びvaluを使って計算する。

valuを使った計算は、値をいったん変数に入っていなければ受け付けられなかった。
値をそのまま入力できなかった。
例えば、5 + 10 = 15は、

valu v1 5
valu v2 10

prnt v

valu v3 + v1 v2

prnt v v3

同様にして、

5-10=

valu v4 - v1 v2
valu v5 * v1 v2
valu v6 / v1 v2

While構文

valu a1 0
valu a2 10
valu stop 50

while a1 < stop
valu a1 + a1 a2
prnt v a1
endwhile

.fbdファイルに保存して、実行する場合の注意点
endwhileはテキストファイルの最終行になってはいけない。さもなければ、
key:ENDWHILE from string endwhile not known
と表示されて、whileされない。

prnt v

とすると、変数名すべてを表示する。

prnt v v1のやり方だと、正しく表示してくれないような…気のせいか?

でも、これで簡単な制御ができますね。

posted by yuchan at 07:00 | Comment(0) | Calculix

20200207

Calculix 10本ノック: 3本目: exampleの実行 CAD OnshapeTutorial

Calculixとは

フリーの解析ソフト。Abaqusと書式が似ているらしい。

  • ccx ソルバー
  • cgx プリポスト

環境

  • WSL

  • Xming

  • Calculix 2.11

  • gmsh

    gmshの機能を使ってメッシングすることがある。

  • imagimagick

    hcpyで画像作成するとき、convertするので使う。

    sudo apt install imagemagick
  • pip2

  • matplotlib

ノック3本目: exampleの実行 CAD OnshapeTutorial

データの入手

公式サイトからのリンクで行けるGithubのexample

下記サイトのリンクから、自分のCalculixのバージョンにあったファイルを探す。

https://github.com/mkraska/CalculiX-Examples/releases

WSLでLinuxのフォルダを使うというのに、windowsのデスクトップに解凍してしまった。

cd "/mnt/c/Users/yusuke/Desktop/CalculiX-Examples-2.11"

でyusukeの部分を各ユーザーで移動されたし。

デスクトップにcalculixサンプルのフォルダを置く.png

pythonのバージョンは2.7

pythonで実行させる場合もある。その際は、pythonのバージョンに気を付けられたし。

WSLならpython2もpython3も入ってる。
pythonもしくはpython2と打てば、python2が起動したし、
python3と打てば、python3が起動した。

.pyファイルのprintが

print ~

とスペース区切りで書いてあったら、python2。

CAD

OnshapeTutorial

ごく小さい段差がジオメトリ上にあって、オートメッシュで切ると細かいメッシュがたくさんできる。だけど、そんな所細かく切っても意味ない。そういう形状を、calculixのジオメトリ編集機能を使ってキレイに切りなおす。(自分でやったわけではない)

拘束は、足元の変位を拘束(1,2,3)。荷重は頭っぽい位置に面荷重。

hcpy_4.png

hcpy_5.png

gmshと連携して、STEPファイル→inpファイルにできる(inpファイルはcgxが読める)。みたいな理解。

cd ./CalculiX-Examples-2.11/CAD/OnshapeTutorial
cgx -b run.fbd

run.fbdの実行→gmshの終了ですべて終わる。run.fbdの内容は、

  • gmshでノード、エレメント、荷重位置、拘束位置を出力(解析に関する命令は入っていない。)
  • 出力した.inpを読んで、loadには、圧力1を設定して出力、supportと指定したところには何も指定しないでノード番号を出力
  • あらかじめ用意されていた.inpに、上記ファイルが読み込まれる設定になっており、この.inpが実行される。
  • 結果を読み込んで画像を保存して終わり。(要imagimagick)

.inpを作りこむことが勉強になる気がするんですけど、.inpはあらかじめ作ってある。
それどころか、run.fbdを実行すれば、何を書いてあるんだか分からなくても、絵が出てきてしまうという。

cgxでの荷重、拘束の表示の仕方

cgxでは、plot機能を使えば、fbdでLOADなどに指定したsetをplotする事で表示できる。
毎回plotしてたら、前回plotした情報が消えてしまうので、plotの次は、plusを使う。

FEMAPの様な、グラフィカルな表示は期待できない。
そもそも、荷重や拘束の設定は、.inp(もしくは.dlo)で行っているから、cgxの段階では、エクスポート前のsetに過ぎない。
このsetを表示する事で、荷重、拘束の表示とか言う事はできる。

オートメッシュにあまり興味がそそられないので、適当に飛ばす。
「後で必要になったら、.fbdを参考にすればいいや」としか思えない。

animationの機能に頼らずに、結果を動画にしてみた。うつらうつらしてるみたいになってしまったのは、基本ベクトルの何倍の係数をかけるかという設定のせいだと思う。

新規.gif



WSL上だと、datasetを選択すると

freeglut (cgx): Menu manipulation not allowed while menus in use.

とか表示されてウィンドウが消えてしまう。
解決方法は、freeglutのバージョンを下げればいいらしいけど、なんか知らんが下げられなかった。

おとなしくコマンドから、

ds 2 e 7

(データセット 2 のエンティティ7を表示)とかして頑張って目的のデータを探した。

posted by yuchan at 00:00 | Comment(0) | Calculix

20200205

Calculix 10本ノック: 2本目

Calculixとは

フリーの解析ソフト。Abaqusと書式が似ているらしい。

  • ccx ソルバー
  • cgx プリポスト

ノック2本目: 解析の実行

データの入手

下記サイトのリンクから、beam.inpを取得する。

https://www.xsim.info/articles/CalculiX/Ex-Cantilever-Beam.html


WSLに入る

ubuntuを起動するために、windowsのcmdで

ubuntu

と入力。


解析の実行

当然windowsのフォルダに置いただろうから、デスクトップに置いたら

ccx -i "/mnt/c/Users/yusuke/Desktop/beam"

アドレスは”C:\Users\yusuke\Desktop\beam.inp”となる(yusukeの部分は人によって違う。私のPCの名前はyusukeなのでyusuke。)が、実行時は下記のように書き直す。

  1. c:¥ を /mnt/c/ に直す。
  2. 拡張子.inpを削る。

解析中

CalculiX Version 2.11, Copyright(C) 1998-2015 Guido Dhondt
CalculiX comes with ABSOLUTELY NO WARRANTY. This is free
software, and you are welcome to redistribute it under
certain conditions, see gpl.htm


You are using an executable made on So 31. Jul 13:26:31 CEST 2016

The numbers below are estimated upper bounds

number of:

nodes: 261

#

省略

#

Job finished

 
Linuxのフォルダの場所

https://qiita.com/kalafinalice/items/70a76d35398ab11af778

ccx -i "/mnt/c/Users/yusuke/Desktop/beam"

cgx -gx -read “/mnt/c/Users/yusuke/Desktop/beam.frd”

cd /mnt/c/Users/yusuke/Desktop

cgx -b “/mnt/c/Users/yusuke/Desktop/beam.frd”


解析結果を見る2つのスタイル

cgxで解析結果を見るために、二つのスタイルがある。

  1. 解析結果の.frdファイルをそのまま読む

    cgx -b "/mnt/c/Users/yusuke/Desktop/beam.frd"

    ccxで出力された解析結果ファイルをそのまま読む方法。

  1. 解析操作のスクリプト.fbdファイルから.frdファイルを読む。

    cgx -b "/mnt/c/Users/yusuke/Desktop/kaiseki2.fbd"

    cgxでどんな描画をするかをスクリプトを書いて指定する方法。

    スクリプト内で、1のfrdファイルを読み込んでいるので、どっちにしろ.frdファイルは必要になる。

    デスクトップに置いた、ミーゼスを見るためのfbdの例。

    read /mnt/c/Users/yusuke/Desktop/beam.frd new
    ds 2 e 7
    seta base f all
    view elem
    plot f all n
    plus fv base

    一行目にあるように、ファイルのアドレスは大事。

    ファイル名しか書かないと、カレントディレクトリしか探さない。

    まだそれほど手の込んだことを考えていないので、ミーゼスを表示できれば良しとする。

beam.gif
posted by yuchan at 07:00 | Comment(0) | Calculix

20200202

Calculix 10本ノック: 1本目

タグ:Windows WSL

Windows上で動かすLinux(WSL)で、Calculixを使えるようにした。
WSLでは基本GUIがないから、ひと手間必要だった。

Calculixとは

フリーの解析ソフト。
OSは基本的にLinux(Windows版もあるが、なぜかcgxの起動が遅い(僕だけ?))。
Abaqusと書式が似ているらしい。

  • ccx ソルバー
  • cgx プリポスト(プリとしてあまり使われない。プリにはgmeshかFreeCADがスタンダード?)

〇本ノックとは

例題を繰り返すやつ。Qiitaとかでよく見る。


ノック1本目: ccx, cgxのインストール

windows上でLinuxが動く状態にする

windows上でUbuntu(Linuxの有名ディストリビューション)が動く(いわゆる Windows Subsystem for Linux)状態にする。

ubuntu

とすると、

yusuke@yusuke-PC-2:~$

と表示されて、ubuntuが起動した状態になればOK。


ccx、cgxをインストールする

この動画を参考にインストールできる。要するに、

sudo apt-get install calculix-ccx
sudo apt-get install calculix-cgx

をする。

インストールが終わったら、

cgx -b a.fbd

上記コマンドで実行できると思いきや、

yusuke@yusuke-PC-2:~$ cgx -b aaa
on a Linux machine, nodename yusuke-PC-2, release 4.4.0-18362-Microsoft, version #476-Microsoft Fri Nov 01 16:53:00 PST 2019, machine x86_64
parameters:3 arguments:2
freeglut (cgx): failed to open display ‘’

エラーで何も動かない。

エラーの解決策

このエラーの解決策は、このサイトのウィンドウが出ないの箇所 )に載っていて、

  • Xming-6-9-0-31-setup.exe
  • Xming-fonts-x-x-x-x-setup.exe(x-x-x-xはバージョン)

をダウンロードしてインストール 後に、下記のコマンドで環境変数の設定して、

export DISPLAY=localhost:0.0

再度cgx

cgx -b aaa.fbd

とすると無事に、cgxが立ち上がる。(ちなみに、Windowsを起動するたびに、Xmingを立ち上げる必要がある。Xmingなしだとやはり同じエラー。後述のbash.bashrcへの記入(Linuxのviとかで)も必要。

1.png

yusuke@yusuke-PC-2:~$ cgx -b aaa.fbd
on a Linux machine, nodename yusuke-PC-2, release 4.4.0-18362-Microsoft, version #476-Microsoft Fri Nov 01 16:53:00 PST 2019, machine x86_64
parameters:3 arguments:2
GL_MAX_EVAL_ORDER:30
ERROR: The input file “aaa.fbd” could not be opened.

↑こんな表示が出る


(重要)exportは、永続性がない。

先ほどexportコマンドで、環境変数を設定した。
しかし、このままではexportは毎回入力しなければならない。
それを回避したいなら、

/etc/bash.bashrc

に、export文を追記する。 /etc/bash.bashrc は、毎回読み込まれるらしい。


サクラエディタで /etc/bash.bashrcを触ってはいけない

/etc/bash.bashrcの編集は、必ずLinuxのコマンドラインからviなどを使って行う。

上記フォルダを、windowsGUIからサクラエディタを使って編集してはいけない。

Windows上での場所が分かったからって、このLinuxファイルをWindowsのツールでいじってはいけない。

サクラエディタとかwindowsから編集すると、ubuntu起動時に、

-bash: /etc/bash.bashrc: Permission denied

と表示されて、bashが読み込まれなくなる。

ユーザー名の色も消える。

解決策は、

> ubuntu$ chmod 644 /etc/bash.bashrc

ここに載ってた。 https://tutorialmore.com/questions-114467.htm

 
Linuxのフォルダの場所

https://qiita.com/kalafinalice/items/70a76d35398ab11af778 にあったのだが、

/etc/bash.bashrcは、Windows上では

“C:\Users\yusuke\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\etc\bash.bashrc”

にあった。yusukeの部分は各ユーザー名により違う。

 
ccx

ccxはGUI無いから、余計な事しないでも立ち上がる。

Windows上のファイルにアクセスするためには

例えばデスクトップにファイルを置いて

ccx -i "/mnt/c/Users/yusuke/Desktop/eyebar"

c:¥にアクセスするために、

/mnt/c

と書き換えなくてはならないのが結構面倒くさい。

解析実行に関しての詳細は、ノック2本目で書く。

タグ:Windows WSL
posted by yuchan at 19:00 | Comment(0) | Calculix

20200201

DualSPHysicsとBlenderで動画を作った

DesignSPHysics(FreeCADのアドオンで、中にDualSPHysicsが入っている)とBlender(+VisualSPHysics)を使って動画を作成した。

試した

粒子で豆腐っぽい形の液体を作って、それを下に落とす。boundaryは描いてない。妥当な結果か分からない。


以下、やり方等のメモ。

FreeCAD+DesignSPHysicsを使ってSPH計算

インストール

  1. FreeCADをインストールする。

  2. DesignSPHysicsをInstallation instructionを参考にインストールする。

    a. GitHubからダウンロードする。

    b. フォルダの名前をDesignSPHysics に変更して、 Windowsなら、%appdata%/FreeCAD/Mod Linux なら ~/.FreeCAD/Mod に入れる。

    c. 同フォルダ内のDesignSPHysics.FCMacro を、macroフォルダに入れる (Windowsなら%appdata%/FreeCAD/Macro Linuxなら; ~/.FreeCAD/Macro 。)

    d. FreeCADを立ち上げて、マクロ(M)>マクロ…で、DesignSPHysics.FCMacroと表示されていれば正しくインストールされている。

09.png

DesignSPHysics.FCMacroの使用方法

公式の動画がYouTubeに上がっていた。

始める前に見たほうがいいかもしれない。

バグ?FreeCAD0.18、DesignSPHysics v0.6.0.1912-12-3

円柱をx500mm,y500mmに置いて、Run GenCaseした形状をParaViewで確認したところ、おかしな形状になった。
xmlを見ると、下のポイントのx,y座標が、(500,500)ではなく(0,0)のままだった。
xmlを手動で修正して、手動でGenCaseする必要がある。この場合、FreeCAD上のRun GenCaseではだめ。
cmdで手動で”~~\DualSPHysics_v4.4\bin\windows\GenCase4_win64.exe”を実行。
やり方は、RUN_DIRECTORYフォルダにあるexampleの.batファイルを参考に、自分でcmdで操作。
出力ファイルを作ったら、FreeCADのRUNでも解析できる。
(FreeCADに頼らない解析実行の勉強にはなる。)

より難解な形状を作ったり解析したりするには、DesignSPHysics使うしかない?バグあったけど、XMLの手入力はさすがに厳しい。形状が複雑になるにつれ、手作業でxmlを書くのは難しくなる。

ParaViewで解析結果の確認

上の動画はBlenderで作ったけど、結果の確認は基本ParaViewで行う。
ParaViewにvtkをロードして結果が確認できる。

10.png

vtkの準備

まずはvtkファイルの準備。これがないと結果が見れない。

  • 粒子で出力したいなら

    • PartVTKOut4でvtkを出力→点群が出てくる。
      • 連番のvtkが出てくる。
  • 液体っぽい表現で出力したいなら

    • IsoSurface4でvtkを出力→流体の表面を模したメッシュが出てくる。
      • Blenderのpythonスクリプトでmarching cube(後述)する必要はない。

ParaView

  1. ParaViewを起動

  2. VTKをすべて選択して、ParaViewにドラッグドロップする。

  3. 左側のメニューの目のマークを押して表示。
  4. 緑色の三角ボタン(Play)を押すとアニメーションされる。

paraviewは、 科学技術可視化 のためのソフトなので、レンダリングは充実していない。

paraview作ってるロスアラモス国立研究所って、アメリカのニューメキシコ州にあるマンハッタン計画で有名な研究所らしい。知らんかった。

FreeCADを使わずに計算を実行する例

DesignSPHysicsのフォルダ内に、examplesが入っている。←FreeCADを使わずに計算を実行している。

DualSPHysicsは、コマンドラインから実行するソフト。
examplesでは、コマンドライン作業をバッチファイルを使って実行させている。

examplesのフォルダに入っている.batファイルがバッチファイル。バッチファイルは、cmdの操作を記述できる。

バッチファイルで作業を簡略化

バッチファイルはダブルクリックして使う。テキストエディタで編集して、処理の順序を変えたりもできる。面倒なコマンドプロンプトの作業もダブルクリックだけで終わる。バッチファイルとは。 )

examplesの.batファイルは、プログラムファイルの場所が正しく書かれていないため、自分で書き直す必要がある。

.batファイルで、isosurfaceを作るには

例えば、isosurfaceの作成を、.batファイルで書くと

@echo off

rem "name" and "dirout" are named according to the testcase

set name=1
set dirout=%name%_out

set isosurface="X:\app\SPH\DualSPHysics_v4.4\bin\windows\IsoSurface4_win64.exe"

%isosurface% -dirin %dirout% -saveiso %dirout%/Surface

5行目のnameの部分は、解析ファイルごとに書き換えないといけない。

Blender+VisualSPHysicsを使った流体のレンダリング

VisualSPHysicsを使うと、連番vtkファイルを、アニメーションのシーケンスにしてくれる。

isosurfaceなら、そのままアニメーションレンダリングが可能。

点群のままならば、レンダリングされないので注意。


11.png12.gif

必要なもの

情報は随時更新されるはずなので、最新のものに従っていただくとして、このサイトを参考に必要なものをインストールする。

  • Blender(2.8以上 2.7なら導入に相当苦労する)
  • Python3.?(cmdでpythonと打った時に2.7が出る状態だと、導入できなかった。Blenderの中のPythonにPATHを通したらできた。)
  • Visual Studio 2015 redistributable package

  • visualSPHysics (エラーが起きて導入難しい時は、Forkされた古いほうを使う。)

    • Blenderが2.7 なら、最新版は無理。(Pythonが2.7でも無理かも?)
    • OpenGLのバージョン問題でBlender2.8が導入できなかった。

visualSPHysicsの使い方

Blenderのアドオンを無事導入できたら、

3D Viewの中にマウスカーソルを入れて、Shift+A>Mesh>DualSPHysics objectを押すとファイルダイアログが出現。

  • 左下に、操作できるGUIある。
  • 連番ファイルは、どれか一つを選ぶだけで全部選択してくれる。

アプライすると、アニメーションのシーケンスが下に出ているかと思います。

繰り返すけど、inportされたのが点群データだった場合、Blenderでレンダリングされない。(isosurfaceを出力しよう!)

Blenderのvertexとして結果をinportし、marching cubeでメッシュしてレンダリング

!苦行!なんでそんな事やるの!?isosurface4でmarching cube法で処理された結果出力できますけど?(マニュアル(DualSPHysics_v4.0_GUIDE.pdf)の11.6 Surface representationに書いてありました。)

それでもやりたい人向けに、書き残しておく。

marching cube法を試すには

マーチングキューブ法は、YouTubeの解説が充実している。

githubからmarching cubeのコードをダウンロードして使う。使い方ものってた。
しかし、これはmain関数を書き直す必要があった。理由は、点群データをメッシュする用途で書かれていなかったから。

書き直した部分だけ抜粋。

import mathutils
def main(a):
print("start calculation of isosurface")
bpy.context.scene.objects.active = bpy.data.objects[a]
obj = context.object
mesh = obj.data
size = len(mesh.vertices)
kd = mathutils.kdtree.KDTree(size)
for i, v in enumerate(mesh.vertices):
kd.insert(v.co, i)
kd.balance()
def scalarfield(pos):
co_find = (pos[0],pos[1],pos[2])
co, index, dist = kd.find(co_find)
return dist

p0=-0.1,-0.1,-0.1
p1=1.1,1.1,1
res=77#200
resolution=(res,res,res)
isolevel=0.02
start = time.time()
isosurface(p0,p1,resolution,isolevel,scalarfield)
elapsed = time.time()-start
print("end test %r"%elapsed)
del obj, kd


###########間は省略###############


if
__name__=="__main__":
# __
# ||
# ||
#_||_
#\ /
# \/ENTER OBJECT NAME.
a="ENTER_OBJECT_NAME"
bpy.ops.object.select_all(action='DESELECT')
bpy.data.objects[a].select = True
main(a)

かなり遅い。

結論

Blenderで液体っぽく表現したいなら、IsoSurface4を使いましょう。そうすれば、isosurfaceのvtkを出力してくれます。BlenderのPythonでやる必要はありません。これに気付かず、正月休みを無駄にしました。

(正月に記す。出すのは2月だが。)

posted by yuchan at 07:00 | Comment(0) | SPH