找回密码
 注册
查看: 2918|回复: 0

[转载]solver>>basic>>laplacianFoam的说明

[复制链接]
发表于 2009-5-1 20:15:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
//createFields.H

//-屏幕提示。Info 等价于 C++中std::cout,Info间接调用cout
    Info<< "Reading field T\n" << endl;  

//-声明一个标量场,网格中心存储变量。该场是通过读入文件(IOobject and MUST_READ)进行设置,并根据controlDict中的设置进行自动write,由write.H中的runTime.write()来执行write();。

    volScalarField T
    (
        IOobject
        (
            "T",
            runTime.timeName(),
            mesh,
            IOobject::MUST_READ,
            IOobject::AUTO_WRITE
        ),
        mesh
    );

     //- 提示读入参数控制文件
    Info<< "Reading transportProperties\n" << endl;
    //- 参数控制文件声明过文件形式读入
    IOdictionary transportProperties
    (
        IOobject
        (
            "transportProperties", //文件名字
            runTime.constant(), //文件位置,case文件夹中constant子文件夹
            mesh,              
            IOobject::MUST_READ,//通过read一个文件,初始化
            IOobject::NO_WRITE  //并不根据时间对文件进行写
        )
    );

    //-提出读入扩散律
    Info<< "Reading diffusivity DT\n" << endl;

    //-通过查询参数控制文件,初始化带有单位的标量,lookup中的“DT”为关键字
    dimensionedScalar DT
    (
        transportProperties.lookup("DT")
    );


//laplacianFoam.C


#include "fvCFD.H"  //-cfd头文件,包括大多数cfd计算需要的头文件,在
src &#187; finiteVolume &#187; cfdTools &#187; general &#187; include


// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
//主程序入口
int main(int argc, char *argv[])
{
//设置rootcase,根据输入参数argc 和 argv对
#   include "setRootCase.H"

//-创建时间,下面的runTime控制
#   include "createTime.H"

//创建网格,根据constant文件中polyMesh文件夹中的网格数据,创建网格对象mesh,位于
src &#187; OpenFOAM &#187; include
#   include "createMesh.H"

//创建场对象,在前面已经说明
#   include "createFields.H"

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
//提示计算温度分布
    Info<< "\nCalculating temperature distribution\n" << endl;
//计算主控制流程
    for (runTime++; !runTime.end(); runTime++)
    {
//提示当前计算时间
        Info<< "Time = " << runTime.timeName() << nl << endl;
//读入simple算法参数,位于
src &#187; finiteVolume &#187; cfdTools &#187; general &#187; include

#       include "readSIMPLEControls.H"
//对于网格非正交循环修正。
        for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++)
        {
//求解拉普拉斯方程,这里的solve是Foam空间的全局函数,内参数为fvMatrix,fvm表示隐式离散,返回有限容积稀疏矩阵类fvMatrix对象,具体对象中内容,以后说明
            solve
            (
                fvm::ddt(T) - fvm::laplacian(DT, T)
            );
        }
//对求解变量进行写
#       include "write.H"
//提示执行时间及CPU耗时
        Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s"
            << "  ClockTime = " << runTime.elapsedClockTime() << " s"
            << nl << endl;
    }
//提示程序结束
    Info<< "End\n" << endl;

    return(0);
}



//write.H
    if (runTime.outputTime())
    {
        volVectorField gradT = fvc::grad(T);  //计算温度梯度,向量场
   
       //声明3个变量,分别以gradT的三个方向的分量进行初始化。

        volScalarField gradTx
        (
            IOobject
            (
                "gradTx", //变量名字
                runTime.timeName(), //位置
                mesh,               //mesh,主要用于对象注册,根据runTime进行写
                IOobject::NO_READ,  //
                IOobject::AUTO_WRITE //自动写
            ),
            gradT.component(vector::X)  //用场初始话,vector::X 枚举变量,可直接写0 //gradT.component(0)
        );

        volScalarField gradTy
        (
            IOobject
            (
                "gradTy",
                runTime.timeName(),
                mesh,
                IOobject::NO_READ,
                IOobject::AUTO_WRITE
            ),
            gradT.component(vector::Y)
        );

        volScalarField gradTz
        (
            IOobject
            (
                "gradTz",
                runTime.timeName(),
                mesh,
                IOobject::NO_READ,
                IOobject::AUTO_WRITE
            ),
            gradT.component(vector::Z)
        );

//对场进行写
        runTime.write();
    }
转自OpenFOAM研究:http://blog.sina.com.cn/openfoamresearch

[ 本帖最后由 su_junwei 于 2009-5-2 18:29 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表