いわて駐在研究日誌

OpenCAE、電子工作、R/C等、徒然なるままに

動的なsolidBodyMotionFvMeshのライブラリ作成(その2)

基礎にもどって、dynamicMeshの調査。

 

OF4.xでのdynamicメッシュは大きく分けると、

  • dynamicFvMesh ・・・Automatic mesh motion
  • topoChangerFvMesh・・・Topological mesh changes
に大別される(Ref.: A.O.Gonzalez,Mesh motion alternatives in OpenFOAM,2009)。
参考文献はちょっと古いが、現状の4.xでも、以下の通り。
< dynamicFvMesh >
  • dynamicInkJetFvMesh   relatively small mesh motion like ink-jet pumping
  • dynamicMotionSolverFvMesh  relatively small mesh motion
  • dynamicRefineFvMesh    refinement and corcening mesh
  • solidBodyMotionFvMesh    solid body motion
  • staticFvMesh    no motion (static)
  • (dynamicFvMesh)  just Abstract base class
< topoChangerFvMesh >
  • linearValveFvMesh  sliding meshes of rlative linear motions
  • linearValveLayersFvMesh   linearValveFvMesh+layer addtion/removal functions
  • mixerFvMesh   rotating slider mesh
  • movingConeTopoFvMesh  layer addtion/removal depending on cell layer thickness
  • rawTopoChangerFvMesh topoChangerFvMesh without any added functionality
  • (topoChangerFvMesh)  just Abstract base class
 
今回の自分の用途には、やはりsolidBodyMotionFvMesh が一番近い機能を持ってそうなので(topological change機能は不要)、これをベースに開発してみよう。

directDrivenMotionFvMeshの作成(OF 4.x)

参考とするsolidBodyMotionFvMeshは、dynamicFvMeshに継承されているので、solidBodyMotionFvMesht同じレベルでdirectDrivenMotionFvMeshというライブラリを作成してみる(Chen et al.と同じ名前だとまずいかなということで)。Motionを具体的に記述するmotionFunctionも作成してみよう。

 

(1)まずは、solidBodyMotionFvMeshをcopyしてフォルダ名やファイル名をrename

$ cp -r $FOAM_SRC/dynamicFvMesh/solidBodyMotionFvMesh/ .

$ mv solidBodyMotionFvMesh directDrivenMotionFvMesh

 

$ cd  directDrivenMotionFvMesh/

$ mv solidBodyMotionFvMesh.C directDrivenMotionFvMesh.C

$ mv solidBodyMotionFvMesh.H directDrivenMotionFvMesh.H

$ mv multiSolidBodyMotionFvMesh.C multiDirectDrivenMotionFvMesh.C

$ mv multiSolidBodyMotionFvMesh.H multiDirectDrivenMotionFvMesh.H

 

$ mv  solidBodyMotionFunctions directDrivenMotionFunctions

(2)sedコマンド(-iオプション)を利用したファイル中のclass名などのrename

$ sed -i s/solidBodyMotionFvMesh/directDrivenMotionFvMesh/g directDrivenMotionFvMesh.C

$ sed -i s/solidBodyMotionFvMesh/directDrivenMotionFvMesh/g directDrivenMotionFvMesh.H

 

$ sed -i s/multiSolidBodyMotionFvMesh/multiDirectDrivenMotionFvMesh/g multiDirectDrivenMotionFvMesh.C

$ sed -i s/multiSolidBodyMotionFvMesh/multiDirectDrivenMotionFvMesh/g multiDirectDrivenMotionFvMesh.H

$ sed -i s/solidBodyMotionFvMesh/directDrivenMotionFvMesh/g multiDirectDrivenMotionFvMesh.C

$ sed -i s/solidBodyMotionFvMesh/directDrivenMotionFvMesh/g multiDirectDrivenMotionFvMesh.H

 

(solidBodyMotionFunction関連)

$ sed -i s/SBMF/DDMF/g directDrivenMotionFvMesh.C

$ sed -i s/SBMF/DDMF/g directDrivenMotionFvMesh.H

$ sed -i s/SBMF/DDMF/g multiDirectDrivenMotionFvMesh.C

$ sed -i s/SBMF/DDMF/g multiDirectDrivenMotionFvMesh.H

 

$ sed -i s/solidBodyMotionFunction/directDrivenMotionFunction/g directDrivenMotionFvMesh.C

$ sed -i s/solidBodyMotionFunction/directDrivenMotionFunction/g directDrivenMotionFvMesh.H

$ sed -i s/solidBodyMotionFunction/directDrivenMotionFunction/g multiDirectDrivenMotionFvMesh.C

$ sed -i s/solidBodyMotionFunction/directDrivenMotionFunction/g multiDirectDrivenMotionFvMesh.H

※ これ以降、multiDirectDorivenMotion.C/Hについては詳述しません。後日、追記予定。

(3)pointPatchFields/derived/solidBodyMotionDisplacement関連のrname

$ pointPatchFields/derived

$ mv solidBodyMotionDisplacement/ directDrivenMotionDisplacement/

$ cd directDrivenMotionDisplacement/

$ mv solidBodyMotionDisplacementPointPatchVectorField.C directDrivenMotionDisplacementPointPatchVectorField.C

$ mv solidBodyMotionDisplacementPointPatchVectorField.H directDrivenMotionDisplacementPointPatchVectorField.H

 

$ sed -i s/solidBodyMotion/directDrivenMotion/g directDrivenMotionDisplacementPointPatchVectorField.C

$ sed -i s/solidBodyMotion/directDorivenMotion/g directDrivenMotionDisplacementPointPatchVectorField.H

$ sed -i s/SBMF/DDMF/g directDrivenMotionDisplacementPointPatchVectorField.C

$ sed -i s/SBMF/DDMF/g directDrivenMotionDisplacementPointPatchVectorField.H

(4)Makeフォルダの作成および修正

$ cp -r  $FOAM_SRC/dynamicFvMesh/Make .

Edit Make/files as:

directDrivenMotionFvMesh.C
multiDirectDrivenMotionFvMesh.C

directDrivenMotionFunctions/solidBodyMotionFunction/solidBodyMotionFunction.C
directDrivenMotionFunctions/solidBodyMotionFunction/solidBodyMotionFunctionNew.C

directDrivenMotionFunctions/directDrivenMotionFunction/directDrivenMotionFunction.C
directDrivenMotionFunctions/directDrivenMotionFunction/directDrivenMotionFunctionNew.C
directDrivenMotionFunctions/rotatingMotion/rotatingMotion.C

directDrivenMotionFunctions/axisRotationMotion/axisRotationMotion.C
directDrivenMotionFunctions/oscillatingRotatingMotion/oscillatingRotatingMotion.C

pointPatchFields/derived/directDrivenMotionDisplacement/directDrivenMotionDisplacementPointPatchVectorField.C

LIB = $(FOAM_USER_LIBBIN)/libdirectDrivenMotionFvMesh

(※ motionFunction関係は現時点で手つかずです。)

Edit Make/option as:

 EXE_INC = \
    -I$(LIB_SRC)/triSurface/lnInclude \
    -I$(LIB_SRC)/meshTools/lnInclude \
    -I$(LIB_SRC)/dynamicMesh/lnInclude \
    -I$(LIB_SRC)/dynamicFvMesh/lnInclude \
    -I$(LIB_SRC)/finiteVolume/lnInclude

LIB_LIBS = \
    -ltriSurface \
    -lmeshTools \
    -ldynamicMesh \
    -ldynamicFvMesh \
    -lfiniteVolume

 (5)directDrivenMotionFunctionの作成および修正

$ cd directDrivenMotionFunctions

(使わなそうなmotionFunctionをいくつか削除)

$ rm -rf SDA  linearMotion  multiMotion  oscillatingLinearMotion tabulated6DoFMotion

$ ls
axisRotationMotion  oscillatingRotatingMotion  rotatingMotion  solidBodyMotionFunction(solidBodyMotionFunctionをコピー&リネーム)

$ cp -r solidBodyMotionFunction directDrivenMotionFunction

$ cd directDrivenMotionFunction

$ mv solidBodyMotionFunction.C directDrivenMotionFunction.C

$ mv solidBodyMotionFunction.H directDrivenMotionFunction.H

$ mv solidBodyMotionFunctionNew.C directDrivenMotionFunctionNew.C

(directDrivenMotionFunction.Cなどの修正)

$ sed -i s/solidBodyMotion/directDrivenMotion/g directDrivenMotionFunction.C

$ sed -i s/solidBodyMotion/directDrivenMotion/g directDrivenMotionFunction.H

$ sed -i s/solidBodyMotion/directDrivenMotion/g directDrivenMotionFunctionNew.C

$ sed -i s/SBMF/DDMF/g directDrivenMotionFunction.C

$ sed -i s/SBMF/DDMF/g directDrivenMotionFunction.H

$ sed -i s/SBMF/DDMF/g directDrivenMotionFunctionNew.C

 (6)wmake libso

とりあえず、ここまでの変更を反映してライブラリが作れるかwmake libsoしてみる。

$ cd ../../   (ライブラリフォルダのトップに戻って)

$ wclean

$ wmake libso

[snip]

'/home/waku/OpenFOAM/waku-4.x/platforms/linux64GccDPInt32Opt/lib/libdirectDrivenMotionFvMesh.so' is up to date.

 以上の変更は、ライブラリやクラス名称を変更しただけなので、中身はオリジナルのもののまま。これをいろいろ変更していく。ちなみにライブラリのビルドは通るが、motionFunctionは多重定義となっているので、実行時にエラーになるので、こちらも名前を変える必要あり。