OFtutorial0_hello word
注:
本文是对Github上openfoam开发教程的中文解析。
代码:
#include "setRootCase.H"
作用:
- 检查基本的文件夹结构,确定有control dict等文件存在
- 处理parsing command line arguments and options
- 通过外部程序运行,位于$FOAM_SRC/OpenFOAM/include
- 被包含的文件通常是
/*Foam::argList args(argc, argv); - deciphers the arguments passed to the program
if (!args.checkRootCase()) - verifies the folder structure
{
Foam::FatalError.exit();
}*/
代码:
Info << "Hello there, I'm an OpenFOAM program!" << nl
<< "You don't need a mesh or anything to run it, just a bare OpenFOAM case will do." << nl
<< tab << "This is me again, just creating a tabulated new line, move along." << nl << endl;
Info<< "End\n" << endl;
作用:
OpenFOAM中的输出与C++的std::cout
, std::nl
, std::endl
很相似似,只需要用Foam::Info
, Foam::nl
, Foam::endl
代替
Make文件夹
files文件:
OFtutorial0.C
EXE = $(FOAM_USER_APPBIN)/ofTutorial0
作用:
line1: 源文件
line3: 生成的可执行文件存放的位置
options文件:
EXE_INC = \
-I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude
EXE_LIBS = \
-lfiniteVolume \
-lmeshTools
包含文件:
编译器按照以下顺序查找被包含的文件:
- $WM_PEOJECT_DIR/src/OpenFOAM/lnInclude
- 当地的lnInclude文件夹,比如:newApp/lnInclude
- 当地文件夹,比如:newApp
- 系统依赖的路径
- 其余的文件夹必须要在Make/options文件中通过-I指定
注:
最后一个不用加 \
链接至库:
编译器会链接至以下路径的共享目标库文件:
- $FOAM_LIBBIN文件夹
- 系统依赖文件夹
- 其他文件夹必须要在options文件中显示地指出
文件必须通过 -l 选项,去除开头的lib和结尾的.so, 比如:libnew.so通过-lnew包含。
文件夹通过-L指定
总体代码:
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
\*---------------------------------------------------------------------------*/
#include "fvCFD.H"
int main(int argc, char *argv[])
{
// Checks the basic folder structure, verifies there is a control dict present, etc.;
// also deals with parsing command line arguments and options.
// It works by taking an external piece of code, written in $FOAM_SRC/OpenFOAM/include.
// The contents of the include file actually look like this:
/*Foam::argList args(argc, argv); - deciphers the arguments passed to the program
if (!args.checkRootCase()) - verifies the folder structure
{
Foam::FatalError.exit();
}*/
#include "setRootCase.H"
// OpenFOAM screen output is very similar to rudimentary C++ with its std::cout, std::nl and std::endl
// being replaced with Foam::Info, Foam::nl, and Foam::endl.
Info << "Hello there, I'm an OpenFOAM program!" << nl
<< "You don't need a mesh or anything to run it, just a bare OpenFOAM case will do." << nl
<< tab << "This is me again, just creating a tabulated new line, move along." << nl << endl;
Info<< "End\n" << endl;
return 0;
}
// ************************************************************************* //