|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
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 » 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 编辑 ] |
|