基礎にもどって、dynamicMeshの調査。
OF4.xでのdynamicメッシュは大きく分けると、
- dynamicFvMesh ・・・Automatic mesh motion
- topoChangerFvMesh・・・Topological mesh changes
- 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
- 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
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.CdirectDrivenMotionFunctions/directDrivenMotionFunction/directDrivenMotionFunction.C
directDrivenMotionFunctions/directDrivenMotionFunction/directDrivenMotionFunctionNew.C
directDrivenMotionFunctions/rotatingMotion/rotatingMotion.CdirectDrivenMotionFunctions/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は多重定義となっているので、実行時にエラーになるので、こちらも名前を変える必要あり。