美文网首页
OpenFOAM程序开发入门(1)

OpenFOAM程序开发入门(1)

作者: jing131313 | 来源:发表于2018-11-29 20:34 被阅读0次

    一、OpenFOAM应用类型:

    1、直接利用OpenFOAM的标准的求解器进行模拟,把OpenFOAM替代商业软件来使用,OpenFOAM已基本具有这样的功能和人气,与Fuent,Star-CD等相比较,OpenFOAM显然具有更高的求解效率和灵活性。

    2、用户自定义求解器,即利用OpenFOAM的基本类库,如finiteVolume,OpenFOAM库来按照自己的求解流程来编写针对某类应用的求解器。用户需要开发的求解器就是类似于在OpenFOAM的applications中所看到的标准求解器icoFOAM,simpleFOAM等。显然这一需求是非常大的,从OpenFOAM问世以来,已有很多用户定义了自己的求解器。这类需求的特点是,并不需要特别关心离散和求解的最底层的知识,如时间项离散,空间项离散等,关注的重点是求解的步骤或者流程。在编程中,通常是顶层的求解流程的开发,在多数情况下可以不编译OpenFOAM的finiteVolume和OpenFOAM库。这种顶层的求解器的开发,是我们以前常常忽略的,或者是以前没有能力做到的。需要指出的是,商业软件中的所谓udf,user subroutine和这是不可相比的。

    3、用户自己定义离散方法等。对于研究离散格式、代数求解器等人来说,更关注时间项ddt,扩散项Laplacian,对流项div是如何离散的,能否有更高效更高精度的离散方法,这需要修改finiteVolume库和OpenFOAM库中对应的代码。尤其是对流项,尽管OpenFOAM已经提供了基于NVD和TVD的模板和40多种有名的高阶高精度格式,但可以预见,这仍然是不够的,毕竟对流项的离散仍然是目前CFD的重点研究方向。

    二、OpenFOAM程序开发的基本知识

    1、重要的环境变量:

    $WM_PROJECT_USER_DIR ―― OpenFOAM的用户目录
    $FOAM_TUTORIALS ------OpenFOAM的算例目录
    $ FOAM _SRC ------OpenFOAM库的源程序目录
    $ FOAM_APP ------ OpenFOAM的求解器目录
    $ FOAM_APPBIN ------- OpenFOAM的求解器执行文件目录
    $ FOAM_RUN ------用户的算例目录

    2、重要的shell:

    run = cd to $FOAM_RUN
    src = cd to $FOAM_SRC
    app = cd to $FOAM_APP
    util = cd to $FOAM_APP/utilities
    sol = cd to $FOAM_APP/solvers
    tut = cd to $FOAM_TUTORIALS

    3、求解器的基本文件结构

    appName 包含求解器源代码的目录

    • appName.C 求解器主程序
    • CreateFields.H 场变量的声明和初始化
    • Make/ 编译指令
      • files 编译需要的源程序文件和生成的目标文件
      • options 编译选项,如链接库等

    appName/appName.C是求解器的主程序
    appName/createFields.H声明变量,并从文件中读入初值,如p,物质属性。
    appName/Make/files 所有源程序的名称,一个文件一行,最后一行是目标代码的名称和存放位置,EXE=$(FOAM_USER_APPBIN)/appName
    appName/Make/options设定查找头文件和库的路径,EXE_INCS,和需要链接的库EXE_LIBS

    4、算例的基本文件结构

    case/ 算例目录

    • 0/ 包含初始和边界条件
    • constant/ 包含初次读入后,不随时间变化的数据
      • polyMesh/ 包含多面体网格数据
      • transportProperties/ 包含物性数据
    • system/ 包含计算控制和离散格式设定
      • controlDict 包含计算控制,如时间步长等
      • fvSchemes 包含离散格式设定
      • fvSolutions 包含代数求解器或SIMPLE,PISO算法设定

    具体而言
    case/0 每个需求解的变量需要一个文件设定其初始边界条件
    case/constant/polyMesh 网格数据,如owner neighbour points faces boundary
    case/system/transportProperties 物性数据
    case/system/controlDict 设定起始终止时间,时间步长,输出控制
    case/system/fvSchemes 设定程序用到的每个微分算子的离散格式
    case/system/fvSolution 为每个变量选择代数方程求解器/收敛精度及PISO等算法设定

    三、OpenFOAM程序开发的理论知识

    作求解开发,必须能写出需要求解的控制方程及其定解条件,并且对于如何求解方程或方程组的步骤已经明确。
    这些流体力学、传热学以及相关的理论是必需的,所谓连续介质力学中的数学模型,控制方程和定解条件就是表示它的语言。

    四、OpenFOAM程序开发的最简单的例子

    下面采用OpenFOAM来开发一个用户自己的求解器。主要是利用OpenFOAM的标准求解器icoFoam,用户不需要写任何代码,只为为了熟悉OpenFOAM程序开发的环境和步骤。
    步骤:

    1、将icoFoam目录拷贝到新的目录

    可采用下面的Linux的命令实现:
    到OpenFOAM的incompressible目录

    cd applications/incompressible
    cp –r icoFoam myicoFoam
    

    以上只是复制目录icoFoam到新的位置,并且新目录名为myicoFoam

    cd myicoFoam
    

    进入新的目录,查看一下,可以看到里面的文件和icoFoam中是否一样

    2、原文件改名,并且删除依赖文件

    将icoFoam.C改名myicoFoam.C

    mv icoFoam.C myicoFoam.C
    

    删除依赖文件

    rm icoFoam.dep
    
    3、修改编译文件files和options

    进入Make目录,打开files文件

    icoFoam.C      源程序文件名
    EXE = \$(FOAM_APPBIN)/icoFoam  可执行文件名
    

    修改为

    myicoFoam.C      源程序文件名
    EXE = \$(FOAM_APPBIN)/myicoFoam  可执行文件名
    

    此例中options不需修改,可以打开看看

    EXE_INC = \    头文件包含
        -I$(LIB_SRC)/finiteVolume/lnInclude
    EXE_LIBS = \  链接库
    -lfiniteVolume
    
    4、删除原来的obj文件
    rm –rf linuxGccDPOpt
    cd ..
    
    5、编译
    wmake
    
    6、检验一下

    到tutorial目录,检验一下

    myicoFoam . cavity
    

    参考资料:
    [1] http://www.cfluid.com/thread-71981-1-1.html

    相关文章

      网友评论

          本文标题:OpenFOAM程序开发入门(1)

          本文链接:https://www.haomeiwen.com/subject/urhqcqtx.html