OpenFOAM 中边界条件的设定【转载】

转载自:http://blog.sina.com.cn/s/blog_a0b4201d0102v7jt.html

用习惯了FLUENT的操作界面,再使用OpenFOAM就会觉得非常繁琐。遇到的第一个问题就是边界条件的设定。在FLUENT中,例如给定了一个进口边界(质量或者压力或者速度)和一个出口边界(一般是压力),并在进口处设定湍流强度就可以了,不必关心这三个量在求解的各个方程中的分配。而在OpenFOAM中,这个问题就要显得复杂的多,以k-epsl模型求解可压缩流为例为例,要求解质量守恒方程,动量守恒方程和能量守恒方程,湍动能方程以及耗散率方程,分别对应P方程,U方程,T方程,k方程和epsl方程,其中U方程是矢量方程,包含三个标量方程。在求解之前要为每个方程指定边界条件。现在的问题就是:只知道压力进口条件和压力出口回流条件,以及进出口都是室温条件,也就是说只能显式的给定P方程的进口条件和出口回流条件,T方程的进口和出口条件,而U方程的边界条件需要由已知的P方程和T方程的边界条件间接的得到。对于这个问题,OpenFOAM提供了各种各样的边界条件给定方式,多的足够让你眼花缭乱,所以非常有必要深入的扒一扒。先从OpenFOAMtutorial中给出的例子入手。

 

rhoSimplecFoam中的squareBend为例,给出了alphat,epsilon, k, mut, p, T, U 7个量的初始条件,当然也包括了边界条件。其中alphat指的是turbulence thermal

diffusivity 例子中给定的壁面边界是

compressible::alphatWallFunction; 进口边界是calculated, value uniform 0;

出口边界是 calculated, value uniform 0 epsilon指的是turbulence

kinetic energy dissipation

rate k指的是turbulence

kinetic energymut指的是turbulence

viscosity,同时alphat, epsilon, k, mut

这个几个参数都是要给定壁面条件模型的。像其他的tutorial例子中给出的也都是速度进口边界条件,跟我的算例所需要的压力进口边界条件不太吻合。

 

 

 

好在OpenFoam给出了各种不同类型的边界条件类型供大家挑选使用,(当然是在不行就只能自己写了,这才是OF最强大的的地方嘛)。具体的不同内容可以查询页面: http://openfoam.org/docs/cpp/

 

最终我选择的边界条件是:

  • 5
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenFOAM 是一个开源的计算流体力学(CFD)软件包,它提供了广泛的功能和工具来模拟流体流动和传热问题。在 OpenFOAM ,二次边界条件是指在边界上定义的非线性边界条件。 要定义一个二次边界条件,你需要在边界条件文件指定一个函数,该函数描述了该边界上的非线性关系。下面是一个示例,展示了如何在 OpenFOAM 定义一个二次边界条件: ```cpp // 在边界条件文件定义二次边界条件 #include "fvCFD.H" // 定义边界条件 void fixedValueParabolicVelocityFvPatchVectorField::updateCoeffs() { const volScalarField& alpha = mesh().alphaEff(); const surfaceScalarField& phi = boundaryField()[patchI()].phi(); const scalarField& U = this->patchInternalField(); const vectorField& gradU = fvc::grad(U); const scalarField A = 1.0 - alpha; const vectorField gradA = fvc::grad(A); const scalarField C = A*phi - 0.5*alpha*magSqr(gradU) - dot(gradA, gradU); const vectorField D = U - dot(U, gradA)*gradA; const surfaceScalarField& alphaSf = alpha.boundaryField()[patchI()]; forAll(faceFlux_, faceI) { faceFlux_[faceI] = alphaSf[faceI]*C[faceI] + dot(D[faceI], Sf()[faceI]); } } ``` 上述示例的函数 `fixedValueParabolicVelocityFvPatchVectorField::updateCoeffs()` 定义了一个二次边界条件,其 `alpha` 是边界上的非线性系数,`phi` 是边界上的标量场,`U` 是速度场。这个函数根据定义的关系计算边界上的二次边界条件。 需要注意的是,定义二次边界条件需要对 OpenFOAM 的源代码进行修改,并重新编译。因此,在使用二次边界条件之前,请确保你已经熟悉了 OpenFOAM 的基本操作和编译流程。 希望这个回答能帮到你!如有任何问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值