Skip to content
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠
CFD中文网

CFD中文网

  1. CFD中文网
  2. OpenFOAM
  3. 从0开始计算没问题,停掉再续算过几步就出错

从0开始计算没问题,停掉再续算过几步就出错

已定时 已固定 已锁定 已移动 OpenFOAM
9 帖子 4 发布者 6.5k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • T 在线
    T 在线
    Tens 神
    写于 最后由 编辑
    #1

    在compressibleInterFoam中添加组分方程,组分方程如下:

    tmp<fv::convectionScheme<scalar>> mvConvection
    (
        fv::convectionScheme<scalar>::New
        (
            mesh,
            fields,
            alpharho2Phi,
            mesh.divScheme("div(phi,Yi)")
        )
    );
    
    {
        combustion->correct();
        volScalarField Yt(0.0*Y[0]);
    
        alpharho2 = alpha2*rho2;
        alpharho2Phi = fvc::interpolate(alpharho2)*phi;
        volScalarField alphamuEff("alphamuEff",alpha2*turbulence.muEff());
    
        forAll(Y, i)
        {
            if (i != inertIndex && composition.active(i))
            {
                volScalarField& Yi = Y[i];
    
                fvScalarMatrix YEqn
                (
                    fvm::ddt(alpharho2, Yi)
                  + mvConvection->fvmDiv(alpharho2Phi, Yi)
                  - fvm::laplacian(alphamuEff, Yi)
                 ==
                    parcels.SYi(i, Yi)
                  + combustion->R(Yi)
                  + fvOptions(alpharho2, Yi)
                );
    
                YEqn.relax();
    
                fvOptions.constrain(YEqn);
    
                YEqn.solve("Yi");
    
                fvOptions.correct(Yi);
    
                Yi.max(0.0);
                Yt += Yi;
            }
    
        }
    
        Y[inertIndex] = scalar(1) - Yt;
        Y[inertIndex].max(0.0);
    
    }
    

    从0时刻开始计算没有问题,在某一时刻停掉计算后续算,没过几步就会报错,报错如下,请问各位有什么建议。
    c0a5616d-30cf-41a2-94dc-ee6f72f73a4e-image.png

    T R 2 条回复 最后回复
  • T 在线
    T 在线
    Tens 神
    在 中回复了 Tens 最后由 编辑
    #2

    顶:ok3:

    李东岳李 1 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    在 中回复了 Tens 最后由 编辑
    #3

    @tens y方程是跟原本求解器偶合在一起的么?

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    T 1 条回复 最后回复
  • T 在线
    T 在线
    Tens 神
    在 中回复了 李东岳 最后由 编辑
    #4

    @李东岳 老师说的耦合具体是指什么呢

    李东岳李 1 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    在 中回复了 Tens 最后由 编辑
    #5

    @tens 除了添加y方程之外,还做了什么其他的改动么。

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    T 1 条回复 最后回复
  • T 在线
    T 在线
    Tens 神
    在 中回复了 李东岳 最后由 Tens 编辑
    #6

    @李东岳 就算仿照sprayfoam进行添加的,createFields.H里还添加了下面部分,twoPhaseMixtureThermo里将RhoThermo改为了rhoReactionThermo,应该就这些。

    rhoReactionThermo& thermo2 = mixture.thermo2();
    
    basicSpecieMixture& composition = thermo2.composition();
    PtrList<volScalarField>& Y = composition.Y();
    
    const word inertSpecie(thermo2.lookup("inertSpecie"));
    if (!composition.species().found(inertSpecie))
    {
       FatalIOErrorIn(args.executable().c_str(), thermo2)
           << "Inert specie " << inertSpecie << " not found in available species "
           << composition.species()
           << exit(FatalIOError);
    }
    
    const label inertIndex(composition.species()[inertSpecie]);
    
    multivariateSurfaceInterpolationScheme<scalar>::fieldTable fields;
    
    forAll(Y, i)
    {
       fields.add(Y[i]);
    }
    
    surfaceScalarField alpharho2
    (
       IOobject
       (
           "alphaRho2Phi",
           runTime.timeName(),
           mesh,
           IOobject::READ_IF_PRESENT,
           IOobject::AUTO_WRITE
       ),
       alpha2*rho2
    );
    
    surfaceScalarField alphaRho2Phi
    (
       IOobject
       (
           "alphaRho2Phi",
           runTime.timeName(),
           mesh,
           IOobject::READ_IF_PRESENT,
           IOobject::AUTO_WRITE
       ),
       fvc::interpolate(alpha2*rho2)*phi
    );
    
    F 1 条回复 最后回复
  • F 离线
    F 离线
    Fkingdom
    在 中回复了 Tens 最后由 编辑
    #7

    @tens 您好,我也遇到了相似的情况,请问最后解决了吗?

    T 1 条回复 最后回复
  • T 在线
    T 在线
    Tens 神
    在 中回复了 Fkingdom 最后由 编辑
    #8

    @fkingdom 现在没有这个问题了,不过现在的方程以及求解器改动很多,我也不知道是什么导致的这个问题

    1 条回复 最后回复
  • R 离线
    R 离线
    Rachel0096
    在 中回复了 Tens 最后由 编辑
    #9

    @Tens
    您好,我参考您的代码也在compressibleInterFoam中添加了组分方程,目前出现了某种组分的质量分数超过1的情况,这个问题困扰我很久了,可以麻烦您帮我看一下代码有什么问题吗?万分感谢!

    tmp<fv::convectionScheme<scalar>> mvConvection
    (
        fv::convectionScheme<scalar>::New//convectionScheme:Abstract base class for convection schemes.
        (
            mesh,
            fields,
            alpha2rho2phi,
            mesh.divScheme("div(alpha2rho2phi,Yi)")
        )
    );
    
    {
        forAll(Y, i)
        {
            if (i != inertIndex && composition.active(i))
            {
                volScalarField& Yi = Y[i];
    
                fvScalarMatrix YEqn
                (
                    fvm::ddt(alpha2rho2, Yi)
                  + mvConvection->fvmDiv(alpha2rho2phi, Yi)
                  - fvm::laplacian(turbulence.muEff()*alpha2, Yi)
                 ==
                    alpha2*parcels.SYi(i, Yi) 
                  + fvOptions(rho2, Yi)
                );
    
                YEqn.relax();
    
                fvOptions.constrain(YEqn);
    
                YEqn.solve(mesh.solver("Yi"));
    
                fvOptions.correct(Yi);
    
                Yi.max(0.0);
                Yt += Yi;
            }
    
        Y[inertIndex] = scalar(1) - Yt;
        Info<<"info::inertIndex.................="<< inertIndex <<endl;
        Info<<"info::Y[inertIndex].................="<< max(Y[inertIndex]) <<endl;
        Y[inertIndex].max(0.0);
    

    我在createField.H中声明了下列变量:

    volScalarField alpha2rho2
    (
       IOobject
       (
           "alpha2rho2",
           runTime.timeName(),
           mesh,
           IOobject::READ_IF_PRESENT,
           IOobject::AUTO_WRITE
       ),
       alpha2*rho2
    );
    
     surfaceScalarField alpha2rho2phi
     (
         IOobject
         (
             "alpha2rho2phi",
             runTime.timeName(),
             mesh,
             IOobject::READ_IF_PRESENT,
             IOobject::AUTO_WRITE
         ),
         linearInterpolate(alpha2*rho2*U) & mesh.Sf()
     );
    
    
    1 条回复 最后回复

  • 登录

  • 登录或注册以进行搜索。
  • 第一个帖子
    最后一个帖子
0
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]