数值风云

OpenFoam开发教程系列:第0讲

OFtutorial0_hello word

注:

本文是对Github上openfoam开发教程的中文解析。

代码:

#include "setRootCase.H"

作用:

  1. 检查基本的文件夹结构,确定有control dict等文件存在
  2. 处理parsing command line arguments and options
  3. 通过外部程序运行,位于$FOAM_SRC/OpenFOAM/include
  4. 被包含的文件通常是
/*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

包含文件:

编译器按照以下顺序查找被包含的文件:

  1. $WM_PEOJECT_DIR/src/OpenFOAM/lnInclude
  2. 当地的lnInclude文件夹,比如:newApp/lnInclude
  3. 当地文件夹,比如:newApp
  4. 系统依赖的路径
  5. 其余的文件夹必须要在Make/options文件中通过-I指定

注:

最后一个不用加 \

链接至库:

编译器会链接至以下路径的共享目标库文件:

  1. $FOAM_LIBBIN文件夹
  2. 系统依赖文件夹
  3. 其他文件夹必须要在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;
}


// ************************************************************************* //



7 个赞

支持!追更追更!

支持,追更追更!

建议加入 [上一讲] [下一讲] [总目录]链接,总目录指向另开新帖作为索引。 :wink:

1 个赞