//若phi文件存在

时间:2024-06-25 10:24


//若phi文件存在

厦门艾迪斯达进出口有限公司

本案例演示利用OpenFOAM创建一个标量输运方程求解器。

本案例要求解的方程为:

没有瞬态项和源项。

1 文件框架

利用foamNewApp快速创建文件框架。

runfoamNewApp demo10 && cd demo10

执行完毕后的文件框架如下图所示。

图片

本案例比较简单,只需要一个源文件demo10.C即可。

2 源代码

源文件demo10.C的内容如下。

#include "fvCFD.H" int main(int argc, char *argv[]){#include "setRootCase.H"#include "createTime.H"#include "createMesh.H"     Info << "读取物理场beta" << endl;    volScalarField beta    (        IOobject        (            "beta",            runTime.timeName(),            mesh,            IOobject::MUST_READ,            IOobject::AUTO_WRITE        ),        mesh    );     Info << "读取物理场U" << endl;    volVectorField U    (        IOobject        (            "U",            runTime.timeName(),            mesh,            IOobject::MUST_READ,            IOobject::AUTO_WRITE        ),        mesh    );     // 读取字典文件    Info << "读取字典文件transportProperties" << endl;     IOdictionary transportProperties    (        IOobject        (            "transportProperties",            runTime.constant(), //- 此文件在constant文件夹下面            mesh,            IOobject::MUST_READ_IF_MODIFIED,            IOobject::NO_WRITE        )    );     Info << "从字典文件中读取扩散系数gamma" << endl;    dimensionedScalar gamma("gamma",
青铜峡市肯同锁具有限公司 dimViscosity,
企业-能润贝豆类有限公司 transportProperties);     Info << "读取/计算面通量场phi" << endl;    surfaceScalarField phi    (        IOobject        (            "phi",青铜峡市泉辛石膏有限公司            runTime.timeName(),            mesh,            IOobject::READ_IF_PRESENT, //若phi文件存在,则读取,否则采用速度与面积相乘计算得到            IOobject::AUTO_WRITE       // 保存该变量        ),        fvc::interpolate(U) & mesh.Sf() //速度向量与面积向量点积    );     //求解控制方程    solve(fvm::div(phi, beta) - fvm::laplacian(gamma, beta));     // 创建一个标量场用于存储结果,也可以直接用beta    volScalarField result    (        IOobject        (            "result",厦门艾迪斯达进出口有限公司            runTime.timeName(),            mesh,            IOobject::NO_READ,            IOobject::AUTO_WRITE        ),        beta     //将beta的值拷贝给result    );     result.write();     Info << nl << "计算完毕" << endl;    runTime.printExecutionTime(Info);    return 0;}

编译并测试运行,如下图所示。

图片

3 测试计算

案例文件需要根据求解器的需求来准备。上面准备的求解器中需要求解物理量beta。

constant/transportProperties文件中需要指定扩散系数gamma
FoamFile{    version     2.0;    format      ascii;    class       dictionary;    location    "constant";    object      transportProperties;}// * * * * * * * * * * * * * * * * * //gamma            0.01;

由于在读取字典文件时指定了量纲,因此在字典文件中无需重复指定量纲。

system/fvSolution文件中需要指定beta的求解方法
FoamFile{    version     2.0;    format      ascii;    class       dictionary;    location    "system";    object      fvSolution;}// * * * * * * * * * * * * * * * * * //solvers{    beta    {        solver        GAMG;        smoother    DILUGaussSeidel;        tolerance    1e-6;        relTol        0;    }}
system/fvSchemes文件需要指定控制方程中对流项、梯度项以及laplacian项的离散格式
FoamFile{    version     2.0;    format      ascii;    class       dictionary;    location    "system";    object      fvSchemes;}// * * * * * * * * * * * * * * // ddtSchemes{    default none;}// 梯度项gradSchemes{    default none;    grad(beta) Gauss linear;}//散度项divSchemes{    default none;    div(phi,beta) bounded Gauss upwind;}// laplacian项laplacianSchemes{    default none;    laplacian(gamma,beta) Gauss linear corrected;}// 通量插值interpolationSchemes{    default none;    interpolate(U) linear;} snGradSchemes{    default none;} 
system/controlDict按常规设置
FoamFile{    version     2.0;    format      ascii;    class       dictionary;    location    "system";    object      controlDict;}// * * * * * * * * * * * * * * * * //startFrom       startTime;startTime       0;stopAt          endTime;endTime         1;deltaT          1;writeControl    timeStep;writeInterval   1;purgeWrite      0;writeFormat     ascii;writePrecision  6;writeCompression off;timeFormat      general;timePrecision   6;runTimeModifiable true;
0/beta文件指定物理场beta的边界条件与初始条件
FoamFile{    version     2.0;    format      ascii;    class       volScalarField;    object      beta;}// 注意beta是标量dimensions      [0 0 0 0 0 0 0];internalField   uniform 0;boundaryField{    left    {        type            fixedValue;        value           uniform 1;    }     lower    {        type            fixedValue;        value           uniform 0;    }     "(upper|right)"    {        type zeroGradient;    }     frontAndBack    {        type            empty;    }}
0/U文件
FoamFile{    version     2.0;    format      ascii;    class       volVectorField;    object      U;}// * * * * * * * * * * * * * // dimensions      [0 1 -1 0 0 0 0]; internalField   uniform (1 1 0); boundaryField{    "(lower|upper|left|right)"    {        type            fixedValue;        value           $internalField;    }     frontAndBack    {        type            empty;    }}

在案例根路径下执行下面的命令进行计算。

blockMeshdemo10

很快就计算完了。

图片

计算结果如下图所示。

图片

(完毕)

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报。

发表评论 (158人查看0条评论)
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
昵称: 内容: 验证码:
点击我更换图片
最新评论
回到顶部

Powered by 厦门艾迪斯达进出口有限公司 RSS地图 HTML地图

Copyright 站群 © 2013-2024 SSWL 版权所有
厦门艾迪斯达进出口有限公司-//若phi文件存在