su_junwei 发表于 2009-5-1 20:15:20

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

//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 » finiteVolume » cfdTools » general » include


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

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

//创建网格,根据constant文件中polyMesh文件夹中的网格数据,创建网格对象mesh,位于
src » OpenFOAM » 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 » finiteVolume » cfdTools » general » 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 编辑 ]
页: [1]
查看完整版本: [转载]solver>>basic>>laplacianFoam的说明