// 界说了文献名为T

发布日期:2024-06-21 17:11    点击次数:152

// 界说了文献名为T

夹克

OpenFOAM中预编译了无数适用于各式应用场景的求解器,但无意可能但愿向现存求解器中添加一些现实,或者基于新的扣问成立新的求解器。本案例将演示如何将温度的标量输运方程添加到icoFoam求解器。

通过应用OpenFOAM的现存功能偏激独有的体绑缚构,收场此求解器只需要对现存代码进行少许的修改即可。

本案例中,温度被模拟为一个守恒的被迫标量,也即是说其不会影响流体的压力或速率,这种情况仅适用于温度变化相对较小的问题中。从速率场到温度的单向耦合通过温度方程中的对流项来斟酌:

1 门径结构

求解器icoThermalFoam从icoFoam改编而来,因此先从solver目次中将icoFoam的源代码拷贝到责任目次。

应用底下的号令完成文献准备责任。

cd $FOAM_RUNmkdir Demo && cd Democp -r $FOAM_SOLVERS/incompressible/icoFoam icoThermalFoamcd icoThermalFoam

文献结构如下图所示。

图片

修改icoFoam.C的文献名为icoThermalFoam.C修改files文献的现实
icoThermalFoam.CEXE = $(FOAM_APPBIN)/icoThermalFoam

这里的$FOAM_APPBIN为环境变量,求解器编译到此位置后在全局均可径直调用。

2 修改头文献

求解器包含了一个createFields.H的头文献,该文献从OpenFOAM案例中读取各式字典文献来取得求解数据。本案例中需要从字典文献中取得参数DT以及T,其中DT为物性参数,T为场变量。

修改createFields.H头文献,在其中添加底下的代码:

// 从字典文献中读取DT,这里读的是物性参数,从transportProperties字典文献中读取dimensionedScalar DT(    "DT",  // 字典文献核心纽字的称呼,后头在案例字典中指定的枢纽字必须与一致    dimViscosity,   // 指定量纲,这里应用预置的量纲dimViscosity,也不错使用dimensionSet我方界说量纲    transportProperties   // 前范围说的transportProperties字典); // 读取各范围的温度数据,参照p文献Info << "Reading field T\n" << endl;// 界说标量场TvolScalarField T  (    // 创建IOobject对象看成标量场的参数,
哈密市星列食用油有限公司IOobject对象指定了标量的参数    IOobject    (        "T",首页-科微资物业有限公司      // 界说了文献名为T,
泰豪科技股份有限公司后头准备案例文献时在0文献夹中需要有相应的T文献        runTime.timeName(),  // 文献位置        mesh,				// 注册对象        IOobject::MUST_READ,  // 指定数据必须读取,若0文献夹中莫得T文献,则报错        IOobject::AUTO_WRITE  // 指定数据自动写入,在源文献中的write()函数会将计较成果数据写入T文献中    ),    mesh);

这里是老例的文献读取,前边照旧讲过,就不细述了。

3 修改源文献

需要在源文献icoThermalFoam.C中写入为止方程。

由于温度T的输运方程与压力和速率是解耦的,因此不错将温度求自若在压力速率修正之后。

修改后的源文献为(文献前半部分莫得列出):

夹克 0.55) 0px 2px 10px;">            #include "continuityErrs.H"            U = HbyA - rAU*fvc::grad(p);            U.correctBoundaryConditions();        }        //将温度为止方程加到这里        // --------------求解温度为止方程-------------------        solve        (            fvm::ddt(T) + fvm::div(phi,T) == fvm::laplacian(DT,T)        );        //------------------------------------------------        runTime.write();  // 将通盘指定为写入的物理场数据写入到文献中         runTime.printExecutionTime(Info);    }    Info<< "End\n" << endl;    return 0;}

修改收场后不错通过wmake编译门径。

编译收场后不错输入icoThermalFoam -help测试是否求解器是否概况调用。如下图所示。

图片

4 准备测试文献

从前边的源代码不错看出,求解器icoThermalFoam需要读入物性参数DT及场变量T。这里经受修改OpenFOAM自带案例cavityClipped来进行测试。

应用底下的号令准备文献:

cp -r $FOAM_TUTORIALS/incompressible/icoFoam/cavity/cavity .cd cavitycd 0 && cp p T && cd ..blockMesh

案例文献结构如下图所示。

图片

修改constant/transportProperties文献
FoamFile{    version     2.0;    format      ascii;    class       dictionary;    object      transportProperties;}// * * * * * * * * * * * * * //nu              0.01;DT              0.001;  // 枢纽字DT与前侧门径中的称呼保捏一致,这里不需要指定量纲(V9版块可能不同)

由于在createFileds.H头文献中读取DT时指定了量纲为dimViscosity,因此在字典文献中不再需要指定量纲。

修改0/T文献夹,指定温度范围值与驱动值
FoamFile{        version         2.0;        format          ascii;        class           volScalarField;        location        "0";        object          T;}// 指定量纲与驱动值dimensions              [0 0 0 1 0 0 0];internalField           uniform 300;// 指定范围条目boundaryField{        lid        {                type    fixedValue;                value   uniform 400;        }         fixedWalls        {                type    fixedValue;                value   uniform 300;        }         frontAndBack        {                type    empty;        }} 
修改system/fvSchemes指定龙套时局
FoamFile{    version     2.0;    format      ascii;    class       dictionary;    object      fvSchemes;}// * * * * * * * * * * * * * * * // ddtSchemes{    default         Euler;} gradSchemes{    default         Gauss linear;} divSchemes{    default         none;    div(phi,U)      Gauss linear;    // ---添加温度方程龙套时局---    div(phi,T)      Gauss linear;} laplacianSchemes{    default         Gauss linear orthogonal;} interpolationSchemes{    default         linear;} snGradSchemes{    default         orthogonal;}
修改system/fvSolution指定T方程的求解边幅
FoamFile{    version     2.0;    format      ascii;    class       dictionary;    object      fvSolution;}// * * * * * * * * * * * * * * * * * // solvers{    p    {        solver          PCG;        preconditioner  DIC;        tolerance       1e-06;        relTol          0.05;    }     pFinal    {        $p;        relTol          0;    }     U    {        solver          smoothSolver;        smoother        symGaussSeidel;        tolerance       1e-05;        relTol          0;    }    // ---添加T方程求解边幅-----    T    {        solver          smoothSolver;        smoother        symGaussSeidel;        tolerance       1e-05;        relTol          0;    }    //---------------------------} PISO{    nCorrectors     2;    nNonOrthogonalCorrectors 0;    pRefCell        0;    pRefValue       0;}
5 测试求解

测试文献准备收场后,不错在案例根目次下运行号令进行求解计较:

icoThermalFoam

计较收场后检察成果,如下图所示。

图片

6 小结

转头一下,应用OpenFOAM成立一个新的求解器的基本要领包括:

从预置求解器中找一个最接近的求解器添加物性参数读写及物理场变量读写的代码添加为止方程

使用的工夫主要审视:

物性参数指定范围条目指定添加的物理场的龙套算法指定方程组求解边幅指定

其他的就没什么了。本案例极为浅易,仅为演示辛苦,不外复杂的求解器,其实套路也皆是不异的。

OpenFOAM高层编程其实如故比拟浅易的,主淌若纯熟各式模板类的调用,搞明晰数据结构以及数据之间的调用联系基本上就能上手了。高层编程其实如故属于应用规模,谈不上成立,这部单干作并不难,真确难的是成立底层算法而不是编写门径,OpenFOAM的架构打算特地漂亮,将各式算法滚动为代码其实皆是膂力活儿辛苦。然而算法的推导就比拟难了,不外万幸的是有那帮子搞纯表面的东谈主在为这事儿掉头发。

(完)

本站仅提供存储劳动,通盘现实均由用户发布,如发现存害或侵权现实,请点击举报。