大家好!这是我在CFD中文网的第一篇帖子,希望能得到大家的帮助。
在OpenFOAM里,对于不可压流动,相分数Alpha的类型为geometricOneField。而对于可压缩流动alpha则为volScalarField.但是很奇怪的是,interFoam求解器使用了GeometricOneField这个类型来表示alpha。不难理解,interFOAM是一个采用VOF方法追踪液面的mixture模型,其alpha值在界面处肯定会取到0-1之间的值。这就带来了我的第一个问题:
(1)interFoam为什么选择geometricOneField为alpha的数据类型?
其次,我想对kEpsilon湍流模型进行些修改,然后在尝试进行一些基于alpha的加减乘除运算时,编译器就会报错。因为alpha的类型GeometricOneField类的定义里,似乎只定义了geometricOneField和自身的乘除法运算符,而没有它和常数scalar或者volScalarField类型数据的计算方法。所以根本无法通过编译。但是在构建epsilon和k方程的时候。又可以见到如下代码
   // Local references
    const alphaField& alpha = this->alpha_;
    const rhoField& rho = this->rho_;
    const surfaceScalarField& alphaRhoPhi = this->alphaRhoPhi_;
    const volVectorField& U = this->U_;
    volScalarField& nut = this->nut_;
    fv::options& fvOptions(fv::options::New(this->mesh_));
    eddyViscosity<RASModel<BasicTurbulenceModel>>::correct();
    volScalarField::Internal divU
    (
        fvc::div(fvc::absolute(this->phi(), U))().v()
    );
    tmp<volTensorField> tgradU = fvc::grad(U);
    volScalarField::Internal G
    (
        this->GName(),
        nut.v()*(dev(twoSymm(tgradU().v())) && tgradU().v())
    );
    tgradU.clear();
    // Update epsilon and G at the wall
    epsilon_.boundaryFieldRef().updateCoeffs();
    // Dissipation equation
    tmp<fvScalarMatrix> epsEqn
    (
        fvm::ddt(alpha, rho, epsilon_)
      + fvm::div(alphaRhoPhi, epsilon_)
      - fvm::laplacian(alpha*rho*DepsilonEff(), epsilon_)
     ==
        ***C1_*alpha()*rho()*G*epsilon_()/k_()***
      - fvm::SuSp(((2.0/3.0)*C1_ - C3_)*alpha()*rho()*divU, epsilon_)
      - fvm::Sp(C2_*alpha()*rho()*epsilon_()/k_(), epsilon_)
      + epsilonSource()
      + fvOptions(alpha, rho, epsilon_)
    );
    epsEqn.ref().relax();
    fvOptions.constrain(epsEqn.ref());
    epsEqn.ref().boundaryManipulate(epsilon_.boundaryFieldRef());
    solve(epsEqn);
    fvOptions.correct(epsilon_);
    bound(epsilon_, this->epsilonMin_);
但是我自己写的alpha()*scalar(0.5)就无法通过编译。
这就是我的第二个问题:
(2) 如何对geometricOneField类型的变量进行和常数及volScalarField进行计算?
以上两个问题,希望大神进行下解答!