hello world (OpenFOAM)

现在使用OpenFOAM的类型来改写myFirstFoam.C输出hello world了。在上一节,编译环境的设置已经完毕。在这里用户只需要改写主程序(.C文件)即可。打开myFirstFoam.C文件,输入:

#include "fvCFD.H"

int main()
{
    Info<< "hello world" << nl;
    return 0;
}

上面即通过OpenFOAM编写的输出hello world的程序。下面来分析一下具体的语句,第一行#include "fvCFD.H"表示对fvCFD.H文件进行包含。OpenFOAM中fvCFD.H文件是一个非常大的框架,它把OpenFOAM中大部分的基本的类型都包含了,在初学不知道应该调用OpenFOAM具体的什么类型的时候,建议直接把fvCFD.H文件进行包含省去寻找具体头文件的过程。

好奇的用户可能会想打开fvCFD.H文件来看看里面是什么。在这里不建议初学者刨根问底。不信的话用户可以试试搜索fvCFD.H并打开,看看里面是什么。绝对看不懂并且更加迷惑。

输出语句中的coutInfo替代,Info是OpenFOAM中用来输出的语句。不仅仅可以输出字符串,也可以输出其他各种的场(比如体向量场等)。后面的nl在OpenFOAM中用来表示换行,等同于C++中的endl

那现在,myFirstFoam.C就已经编写好了。用户需要对他进行编译。在对他编译之前,用户可以尝试直接运行:

$ wmake

在这里程序会报错:

dyfluid@dyfluid:~/Solvers_DYFLUID/OpenFOAM_tut/helloWorldOpenFOAM$ wmake
Making dependency list for source file myFirstFoam.C
could not open file fvCFD.H for source file myFirstFoam.C due to No such file or directory
g++ -std=c++11 -m64 -Dlinux64 -DWM_ARCH_OPTION=64 -DWM_DP -DWM_LABEL_SIZE=32 -Wall -Wextra -Wold-style-cast -Wnon-virtual-dtor -Wno-unused-parameter -Wno-invalid-offsetof -O3  -DNoRepository -ftemplate-depth-100  -IlnInclude -I. -I/home/dyfluid/OpenFOAM/OpenFOAM-5.x/src/OpenFOAM/lnInclude -I/home/dyfluid/OpenFOAM/OpenFOAM-5.x/src/OSspecific/POSIX/lnInclude   -fPIC -c myFirstFoam.C -o Make/linux64GccDPInt32Opt/myFirstFoam.o
myFirstFoam.C:1:19: fatal error: fvCFD.H: 没有那个文件或目录
compilation terminated.
/home/dyfluid/OpenFOAM/OpenFOAM-5.x/wmake/rules/General/transform:25: recipe for target 'Make/linux64GccDPInt32Opt/myFirstFoam.o' failed
make: *** [Make/linux64GccDPInt32Opt/myFirstFoam.o] Error 1
dyfluid@dyfluid:~/Solvers_DYFLUID/OpenFOAM_tut/helloWorldOpenFOAM$

用户需要注意这个错误!以后你们会经常遇到这个错误。注意,错误提示(重要的代码写三遍!)

myFirstFoam.C:1:19: fatal error: fvCFD.H: 没有那个文件或目录
myFirstFoam.C:1:19: fatal error: fvCFD.H: 没有那个文件或目录
myFirstFoam.C:1:19: fatal error: fvCFD.H: 没有那个文件或目录

这个意思是说编译器找不到fvCFD.H这个文件。原因在于我们在myFirstFoam.C中,对fvCFD.H进行了包含,但没有指定编译器去哪找fvCFD.H这个文件。因此提示没有那个文件或目录

Make/options文件内容指定

在这里,用户需要回想一下,在上一些,已经提起

  • options用来指定OpenFOAM需要调用的外挂库的路径以及名称

那么在这里,用户应该改写options文件,将下面的内容添加进去:

EXE_INC = \
    -I$(LIB_SRC)/finiteVolume/lnInclude \
    -I$(LIB_SRC)/meshTools/lnInclude
  • 其中的EXE_INC下面的这几行表示程序中头文件(本例中fvCFD.H)的路径。

  • -I$(LIB_SRC)/finiteVolume/lnInclude表示fvCFD.H文件存在于$(LIB_SRC)/finiteVolume/lnInclude下。$(LIB_SRC)是一个环境变量,在OpenFOAM中等同于$(FOAM_SRC),其真实的位置可以通过键入echo $FOAM_SRC来查看,其会输出:

    dyfluid@dyfluid:~/Solvers_DYFLUID/OpenFOAM_tut/helloWorldOpenFOAM$ /home/dyfluid/OpenFOAM/OpenFOAM-5.x/src
    

    即$(LIB_SRC)文件夹等同于/home/dyfluid/OpenFOAM/OpenFOAM-5.x/src文件夹。因此用户这样写也是可以的:

    EXE_INC = \
      -I/home/dyfluid/OpenFOAM/OpenFOAM-5.x/src/finiteVolume/lnInclude \
      -I$(LIB_SRC)/meshTools/lnInclude
    
  • 前面的-I没有解释,OpenFOAM必须要这样写。

  • 后面的\,如果有换行的话,OpenFOAM必须要添加。如果没有换行,可以不添加,比如这样写都是可以的:

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

    如果丢失\会报错:

    Make/linux64GccDPInt32Opt/options:54: *** missing separator。 停止
    

    同时注意,在提示missing separator错误之后,即使添加好\也依然会报错。这时候需要用wclean命令清空一下,再运行wmake

在进行设置之后,用户可以运行wmake来对其进行编译随后用myFirstFoam尝试运行。

results matching ""

    No results matching ""