CFD中文网

    CFD中文网

    • 登录
    • 搜索
    • 最新

    twoPhaseEulerFoam中的ITAE模型

    OpenFOAM
    2
    13
    2121
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • U
      upc_ngh 最后由 编辑

      各位前辈,想要在twoPhaseEulerFoam中的ITAE模型中,添加一个温度传输方程,准备求解液固流沉积后的管内温度场,在ITAE.C中添加完成T的求解方程后,出现了两个问题:
      (1)这里的phase_.phi()只是单纯的离散相的通量,而这个求解温度场需要的是离散相和连续相的通量和即fluid.phi(),这个fluid.phi()应该怎么去表示?
      (2)当植入求解方程T后,报错如下,希望各位老师指点一下,不胜感激

      diameterModels/IATE/IATE.C: In member function ‘virtual void Foam::diameterModels::IATE::correct()’:
      diameterModels/IATE/IATE.C:220:19: error: ‘laplacian’ is not a member of ‘Foam::fvm’
                        -fvm::laplacian(niandu,Tcell_)
                         ^
      /opt/openfoam4/wmake/rules/General/transform:8: recipe for target '/opt/openfoam4/platforms/linux64GccDPInt32Opt/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseSystem/diameterModels/IATE/IATE.o' failed
      

      更改后的ITAE.C代码如下

      Foam::diameterModels::IATE::IATE
      (
          const dictionary& diameterProperties,
          const phaseModel& phase
      )
      :
          diameterModel(diameterProperties, phase),
          kappai_
          (
              IOobject
              (
                  IOobject::groupName("kappai", phase.name()),
                  phase_.U().time().timeName(),
                  phase_.U().mesh(),
                  IOobject::MUST_READ,
                  IOobject::AUTO_WRITE
              ),
              phase_.U().mesh()
          ),
          
          Tcell_
          (
          IOobject
          (
            //  "Tcell",
              IOobject::groupName("Tcell", phase.name()),
                phase_.U().time().timeName(),
                  phase_.U().mesh(),
                  IOobject::MUST_READ,
                  IOobject::AUTO_WRITE
          ),
         phase_.U().mesh()//T
          ),
          
          rho1_("rho1", dimensionSet(1,0,-3,0,0), diameterProperties_),//properties
          rho2_("rho2", dimensionSet(1,0,-3,0,0), diameterProperties_),
          Khydrate_("Khydrate", dimensionSet(1,1,-3,1,0), diameterProperties_),
          Kwater_("Kwater", dimensionSet(1,1,-3,1,0), diameterProperties_),
          Cpwater_("Cpwater", dimensionSet(0,2,-2,1,0), diameterProperties_),
          Cphydrate_("Cphydrate", dimensionSet(0,2,-2,1,0), diameterProperties_),
          dMax_("dMax", dimLength, diameterProperties_),
          dMin_("dMin", dimLength, diameterProperties_),
          
          residualAlpha_
          (
              "residualAlpha",
              dimless,
              diameterProperties_
          ),
          d_
          (
              IOobject
              (
                  IOobject::groupName("d", phase.name()),
                  phase_.U().time().timeName(),
                  phase_.U().mesh(),
                  IOobject::NO_READ,
                  IOobject::AUTO_WRITE
              ),
              dsm()
          ),
          sources_
          (
              diameterProperties_.lookup("sources"),
              IATEsource::iNew(*this)
          )
      //Tcellnow(phase.TTT)
         
      {}
      
      
      // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
      
      Foam::diameterModels::IATE::~IATE()
      {}
      
      
      // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
        /* const volScalarField& Tcelliate() const
              {
                  return phase.fluid().Tcell();
              }
      */
      
      Foam::tmp<Foam::volScalarField> Foam::diameterModels::IATE::dsm() const
      {
          return max(6/max(kappai_, 6/dMax_), dMin_);
      }
      
      // Placeholder for the nucleation/condensation model
      // Foam::tmp<Foam::volScalarField> Foam::diameterModels::IATE::Rph() const
      // {
      //     const volScalarField& T = phase_.thermo().T();
      //     const volScalarField& p = phase_.thermo().p();
      //
      //     scalar A, B, C, sigma, vm, Rph;
      //
      //     volScalarField ps(1e5*pow(10, A - B/(T + C)));
      //     volScalarField Dbc
      //     (
      //         4*sigma*vm/(constant::physicoChemical::k*T*log(p/ps))
      //     );
      //
      //     return constant::mathematical::pi*sqr(Dbc)*Rph;
      // }
      
      void Foam::diameterModels::IATE::correct()
      {
          // Initialise the accumulated source term to the dilatation effect
          volScalarField R
          (
              (
                  (1.0/3.0)
                 /max
                  (
                      fvc::average(phase_ + phase_.oldTime()),
                      residualAlpha_
                  )
              )
             *(fvc::ddt(phase_) + fvc::div(phase_.alphaPhi()))
          );
      
      
          volScalarField niandu
          (
             Khydrate_*phase_/Cphydrate_/rho1_+Kwater_*(1-phase_)/Cpwater_/rho2_
          );//niandu
      
      
      
          // Accumulate the run-time selectable sources
          forAll(sources_, j)
          {
              R -= sources_[j].R();
          }
      
          fv::options& fvOptions(fv::options::New(phase_.mesh()));
      
          // Construct the interfacial curvature equation
          fvScalarMatrix kappaiEqn
          (
              fvm::ddt(kappai_) + fvm::div(phase_.phi(), kappai_)
            - fvm::Sp(fvc::div(phase_.phi()), kappai_)
           ==
            - fvm::SuSp(R, kappai_)
        //  - Rph() // Omit the nucleation/condensation term
            + fvOptions(kappai_)
          );
      
          kappaiEqn.relax();
      
          fvOptions.constrain(kappaiEqn);
      
          kappaiEqn.solve();
      
          // surfaceScalarField& phiphi = phase_.phi();
           fvScalarMatrix TEqn//qiu jie T
                    (
                        fvm::ddt(Tcell_)
                       +fvm::div(phase_.phi(),Tcell_)
                       -fvm::laplacian(niandu,Tcell_)
                    );
                   TEqn.solve(); 
          // Update the Sauter-mean diameter
          d_ = dsm();
      }
      
      1 条回复 最后回复 回复 引用
      • 李东岳
        李东岳 管理员 最后由 编辑

        添加T方程为什么要去ITAE库中去做?

        另外,你用reactingTwoPhaseEulerFoam里面就有T了

        线上CFD课程开始报名:http://www.dyfluid.com/class.html

        CFD高性能服务器 http://dyfluid.com/servers.html

        U 1 条回复 最后回复 回复 引用
        • U
          upc_ngh @李东岳 最后由 编辑

          @东岳 我这里求解的是壁面冷却,内部是流体的管内温度分布,不涉及两种流体之间的温度场求解;使用ITAE是因为要把求解出来的温度场传递到ITAE中的Rph中,作为流体相变的驱动力。之前把温度方程直接放到twoPhaseEulerFoam.C中,可以顺利的求解,现在卡了好久也不知道怎么把求解出的温度场再传回ITAE中去,希望东岳老师和各位前辈多指点一下

          U 1 条回复 最后回复 回复 引用
          • U
            upc_ngh @upc_ngh 最后由 编辑

            各位老师,经过测试发现问题好像是fvm::laplacian(A,B)中的AB两个的数据类型不正确,对于第一个mesh注册的Tcell是没有问题的,对于第二个注册在phase_.U().mesh()内的Tcell就不可以进行计算。现在主要问题是怎么在ITAE.C中将T注册到mesh中,或者有什么办法能够在ITAE库中进行fvm::laplacian(A,B),标量传输方程正常计算,希望各位老师点拨一下,添加一个标量传输方程咋这么难,哎:135:

            volScalarField Tcell
            (
                IOobject
                (
                    "Tcell",
                    runTime.timeName(),
                    mesh,
                    IOobject::MUST_READ,
                    IOobject::AUTO_WRITE
                ),
                mesh
            );
            
            volScalarField Tcell
                (
                IOobject
                (
                    "Tcell",
                   // IOobject::groupName("Tcell", phase.name()),
                      phase_.U().time().timeName(),
                        phase_.U().mesh(),
                        IOobject::MUST_READ,
                        IOobject::AUTO_WRITE
                ),
               phase_.U().mesh()//T
                );
            
            1 条回复 最后回复 回复 引用
            • 李东岳
              李东岳 管理员 最后由 编辑

              使用ITAE是因为要把求解出来的温度场传递到ITAE中的Rph中

              你在求解器.C层面,将T植入,这个你会的吧。

              然后在ITAE中,通过

              const volScalarField& T = mesh.lookupObject<volScalarField>("T"):
              

              传入,这样不可以么

              线上CFD课程开始报名:http://www.dyfluid.com/class.html

              CFD高性能服务器 http://dyfluid.com/servers.html

              U 2 条回复 最后回复 回复 引用
              • U
                upc_ngh @李东岳 最后由 编辑

                @东岳 谢谢东岳老师,好的我按照这个思路试一下:ok2:

                1 条回复 最后回复 回复 引用
                • U
                  upc_ngh @李东岳 最后由 编辑

                  @东岳 东岳老师现在出现这个问题,麻烦老师有时间再给看看,谢谢谢谢:xinxin:

                  diameterModels/IATE/IATEsources/randomCoalescence/randomCoalescence.C: In member function ‘virtual Foam::tmp<Foam::GeometricField<double, Foam::fvPatchField, Foam::volMesh> > Foam::diameterModels::IATEsources::randomCoalescence::R() const’:
                  diameterModels/IATE/IATEsources/randomCoalescence/randomCoalescence.C:94:40: error: ‘mesh’ was not declared in this scope
                       const volScalarField& TcellnowLX = mesh.lookupObject<volScalarField>("Tcell");
                                                          ^
                  diameterModels/IATE/IATEsources/randomCoalescence/randomCoalescence.C:94:72: error: expected primary-expression before ‘>’ token
                       const volScalarField& TcellnowLX = mesh.lookupObject<volScalarField>("Tcell");
                  
                  
                  1 条回复 最后回复 回复 引用
                  • 李东岳
                    李东岳 管理员 最后由 编辑

                    const volScalarField& T = phase_.U().mesh().lookupObject<volScalarField>("T"):
                    

                    线上CFD课程开始报名:http://www.dyfluid.com/class.html

                    CFD高性能服务器 http://dyfluid.com/servers.html

                    U 1 条回复 最后回复 回复 引用
                    • U
                      upc_ngh @李东岳 最后由 编辑

                      @东岳 东岳老师,现在植入进去也能编译成功了,但是开始计算就发散,错误代码如下,看了论坛上和网上的也没找到啥相关的资料,希望东岳老师再给点指导,谢谢:xiexie:

                      Starting jisuan kappai
                      
                      smoothSolver:  Solving for kappai.air, Initial residual = 0.164043, Final residual = 3.33679e-07, No Iterations 2
                      Constructing momentum equations
                      GAMG:  Solving for p_rgh, Initial residual = 0.0861362, Final residual = 8.71808e-09, No Iterations 55
                      GAMG:  Solving for p_rgh, Initial residual = 0.00100705, Final residual = 9.19158e-09, No Iterations 42
                      GAMG:  Solving for p_rgh, Initial residual = 9.49796e-06, Final residual = 9.7128e-09, No Iterations 18
                      new cannot satisfy memory request.
                      This does not necessarily mean you have run out of virtual memory.
                      It could be due to a stack violation caused by e.g. bad use of pointers or an out of date shared library
                      已放弃 (核心已转储)
                      

                      植入代码如下:
                      ITAE.C中

                      Foam::tmp<Foam::volScalarField> Foam::diameterModels::IATE::Rph() const
                       {
                           //const volScalarField& T = phase_.thermo().T();
                           //const volScalarField& p = phase_.thermo().p();
                      const volScalarField& Tcellnow = phase_.U().mesh().lookupObject<volScalarField>("Tcell");
                         // scalar Teq = 275;
                          //scalar rhohydrate = 850;
                         // scalar phaseh = 50;
                          //scalar qianre = 43500;
                      dimensionedScalar Teq("Teq", dimensionSet(0,0,0,1,0), 275);
                      dimensionedScalar rhohydrate("rhohydrate", dimensionSet(1,-3,0,0,0), 850);
                      dimensionedScalar phaseh("phaseh", dimensionSet(1,1,-3,-1,0), 50);
                      dimensionedScalar qianre("qianre", dimensionSet(0,2,-2,0,0), 43500);
                      
                          volScalarField delt(Tcellnow - Teq);
                          volScalarField Rph(0.0085*phaseh*delt*phase_*pow(kappai_,5)/rhohydrate/qianre);
                          volScalarField Dsm(max(6/max(kappai_, 6/dMax_), dMin_));
                      
                         // volScalarField Dbc
                       //  (
                              // 4*sigma*vm/(constant::physicoChemical::k*T*log(p/ps))
                         //);
                      
                           return constant::mathematical::pi*sqr(Dsm)*Rph;
                       }
                      
                      
                      1 条回复 最后回复 回复 引用
                      • 李东岳
                        李东岳 管理员 最后由 编辑

                        编译完库之后,重新编译一下求解器,然后再计算

                        线上CFD课程开始报名:http://www.dyfluid.com/class.html

                        CFD高性能服务器 http://dyfluid.com/servers.html

                        1 条回复 最后回复 回复 引用
                        • 李东岳
                          李东岳 管理员 最后由 编辑

                          Um...这个应该是IATE,不是ITAE:threaten:

                          线上CFD课程开始报名:http://www.dyfluid.com/class.html

                          CFD高性能服务器 http://dyfluid.com/servers.html

                          U 1 条回复 最后回复 回复 引用
                          • U
                            upc_ngh @李东岳 最后由 编辑

                            @东岳 哈哈谢谢东岳老师,一直打错了:136: 。。。
                            重新编译库还是不行,将

                            const volScalarField& Tcellnow = phase_.U().mesh().lookupObject<volScalarField>("Tcell");
                            

                            更改为

                            volScalarField Tcellnow = phase_.U().mesh().lookupObject<volScalarField>("Tcell");
                            

                            还是不行,增加虚拟机内存还是不行,但是把湍流改成层流就能顺利计算了,这是怎么回事???

                            1 条回复 最后回复 回复 引用
                            • U
                              upc_ngh 最后由 编辑

                              晚上又测试了一下,在linux系统下是可以顺利的进行计算,谢谢东岳老师的帮助:xinxin:

                              1 条回复 最后回复 回复 引用
                              • First post
                                Last post