我觉得出问题可能有以下两个方面 (如果你有具体的问题可以具体分析,这里只是一个笼统的分析,不一定完全解决你的问题):
- 涉及到 Run-Time Selection 相关的宏。
- Make 文件夹里的 files 和 options 两个文件。
Run-Time Selection 相关的宏
这个涉及到的问题是:
对于相关湍流模型,是由定义在 src/TurbulenceModels/incompressible/turbulentTransportModels/turbulentTransportModels.C
文件里面的宏确定的,比如:
#include "Stokes.H"
makeLaminarModel(Stokes); // 这个宏函数对模板类进行实例化,调用
// addToRunTimeSelectionTable 函数,将实例模型加到 hashTable
...
#include "RNGkEpsilon.H"
makeRASModel(RNGkEpsilon);
每个新的湍流模型,都需要相应的两行类似的语句,因此没有单独的 Make 文件夹。你也在其他的 Make/files
文件里找不到相应的如 RNGkEpsilon.C 的行。
你会注意到 src/TurbulenceModels/incompressible/Make/files
有
incompressibleTurbulenceModel.C
turbulentTransportModels/turbulentTransportModels.C
这个文件的第三行就包括上一个宏的列表,因此,在这里进行编译就包含了 incompressible 的所有湍流模型,而不必另外单独对每个模型进行编译了。
旧的版本还没有采用 RTS 的时候,进行的是硬编程,相应的
src/turbulenceModels/incompressible/RAS/Make/files
(foam-extend-3.1) 里的情况是
/* RAS turbulence models */
RASModel/RASModel.C
laminar/laminar.C
kEpsilon/kEpsilon.C
...
Make/files and Make/options
Make/options
文件包含了所需头文件的目录,其语法是
EXE_INC = \\
-I<directoryPath1> \\
-I<directoryPath2> \\
… \\
-I<directoryPathN>
编译器链接到库文件所在的文件夹,使用 wmake 时,在 Make/options
文件中以 -L
来表示,
$FOAM_LIBBIN
;
- 跟平台相关的路径在
$WM_DIR/rules/$WM_ARCH/
文件夹, 例如 /usr/X11/lib
和 $(MPICH_ARCH_PATH)/lib
;
- 其他文件夹需要在
Make/options
指定.
实际链接所需的库文件以 -l
开头,并以库文件名去掉前缀 lib
和 .so
扩展名,如 libnew.so
以 -lnew
的形式包含进来。缺省情况下,wmake
会包含以下库:
- 来自
$FOAM_LIBBIN
的 libOpenFOAM.so
;
- 在
$WM_DIR/rules/$WM_ARCH/
文件夹里文件指定的系统相关的库,如在 /usr/X11/lib
中的 libm.so
和 $(LAM_ARCH_PATH)/lib
中的 liblam.so
;
- 在
Make/options
中指定的其他库。
Make/options
文件包含了库的路径和名字,如果是执行文件,其编写规则是:
EXE_LIBS = \\
-L<libraryPath> \\
-l<library1> \\
-l<library2> \\
… \\
-l<libraryN>
即库的路径是以 -L
开头的,库的名称是以 -l
开头的。
如果编译的是库文件 (.so
结尾),则为
LIB_LIBS = \\
-L<libraryPath> \\
-l<library1> \\
编译器需要提供 .C
源文件列表。列表必须包括主 .C
文件,还有其他并未包括在类库的源文件。例如,用户创建的新类或现有类的一些新的功能。.C
文件必须全部包括在 Make/files
文件中。大多数情况下列表仅须列出 .C
文件的文件名。
Make/files
文件也包括编译的可执行文件的名称和路径,由 EXE = syntax
指定。标准求解器一般存于 $FOAM_APPBIN
,用户自行创建的一般存于 $FOAM_USER_APPBIN
推荐用户在 $WM_PROJECT_USER_DIR
创建个人的求解器。标准做法是每一个求解器一个文件夹。 如果用户自创求解器,推荐其在 Make/files
中指定的可执行文件路径为 $FOAM_USER_APPBIN
。Make/files
文件示例如下:
newApp.C
EXE = $FOAM_USER_APPBIN/newApp
如果是编译的是库,一般格式为
newLib.C
LIB = $FOAM_USER_APPBIN/libnewLib
编译的时候,如果是编译库的话,在库源文件夹下运行
wmake libso
如果是编译求解器的话,在求解器源文件夹下运行
wmake