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. FLuent与OpenFOAM中关于压力限制的区别

FLuent与OpenFOAM中关于压力限制的区别

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

    使用compressibleInterFoam计算气泡动力学问题的时候经常会出现液体内的绝对负压,pMin的作用如:https://www.cfd-online.com/Forums/openfoam-solving/218998-influence-pmin-compressibleinterfoam-oscillatory-pressure-boundary.html
    所说,
    是防止出现基于气体状态方程计算密度时不能出现绝对负压导致的负密度,但是在液体中一定的绝对负压是被允许的。
    fluent中在solution limit有关于pressure-limit的设置,但是根据:https://innovationspace.ansys.com/knowledge/forums/topic/how-does-ansys-fluent-handle-negative-absolute-pressure-for-compressible-multiphase-cases/
    中描述的,限制压力只作用于计算材料属性时将其限制为pMin,而正常流场中绝对负压并不作约束。在OpenFOAM中,像是为了限制pMin而将整个流场的压力值全部截断到pMin。

    现在我想通过把涉及到pMin的文件中相关语句注释掉,来消除pMin的影响。在OpenFOAM-9文件夹中使用grep -r pMin得到如下文件

    src/twoPhaseModels/twoPhaseMixture/MPLIC/MPLICcell.C:    const scalar pMin = cmptMin(pCubicAlphas_);
    src/twoPhaseModels/twoPhaseMixture/MPLIC/MPLICcell.C:        if (root < pMax && root > pMin && rootOld != root)
    src/sampling/meshToMesh/calcMethod/meshToMeshMethod/meshToMeshMethod.C:    return overlapEngine.cellCellOverlapMinDecomp
    src/finiteVolume/cfdTools/general/pressureReference/pressureReference.C:        dict.found("pMin")
    src/finiteVolume/cfdTools/general/pressureReference/pressureReference.C:     || dict.found("pMinFactor")
    src/finiteVolume/cfdTools/general/pressureReference/pressureReference.C:        if (dict.found("pMin"))
    src/finiteVolume/cfdTools/general/pressureReference/pressureReference.C:                << "    min        " << dict.lookup<scalar>("pMin")
    src/finiteVolume/cfdTools/general/pressureReference/pressureReference.C:        if (dict.found("pMinFactor"))
    src/finiteVolume/cfdTools/general/pressureReference/pressureReference.C:                << "    minFactor  " << dict.lookup<scalar>("pMinFactor")
    src/meshTools/tetOverlapVolume/tetOverlapVolume.C:bool Foam::tetOverlapVolume::cellCellOverlapMinDecomp
    src/meshTools/tetOverlapVolume/tetOverlapVolume.H:        bool cellCellOverlapMinDecomp
    src/meshTools/edgeFaceCirculator/edgeFaceCirculatorI.H:        label fpMin1 = f.rcIndex(fp);
    src/meshTools/edgeFaceCirculator/edgeFaceCirculatorI.H:        if (f[fpMin1] == v1)
    src/meshTools/edgeFaceCirculator/edgeFaceCirculatorI.H:            fp = fpMin1;
    src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8/hexRef8.C:                label fpMin1 = f.rcIndex(fp0);
    src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8/hexRef8.C:                if (pointLevel_[f[fpMin1]] <= cLevel)
    src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8/hexRef8.C:                    label edgeI = fEdges[fpMin1];
    src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8/hexRef8.C:                        fpMin1,
    src/dynamicMesh/polyTopoChange/polyTopoChange/faceCollapser.C:        label fpMin1 = fpA;
    src/dynamicMesh/polyTopoChange/polyTopoChange/faceCollapser.C:        label fp = f.fcIndex(fpMin1);
    src/dynamicMesh/polyTopoChange/polyTopoChange/faceCollapser.C:            // See where fp sorts. Make sure it is above fpMin1!
    src/dynamicMesh/polyTopoChange/polyTopoChange/faceCollapser.C:            if (w <= dist[fpMin1])
    src/dynamicMesh/polyTopoChange/polyTopoChange/faceCollapser.C:                w = dist[fpMin1] + 1e-6*(dist[fpB] - dist[fpA]);
    src/dynamicMesh/polyTopoChange/polyTopoChange/faceCollapser.C:            fpMin1 = fp;
    src/dynamicMesh/polyTopoChange/polyTopoChange/faceCollapser.C:            fp = f.fcIndex(fpMin1);
    src/dynamicMesh/polyTopoChange/polyTopoChange/faceCollapser.C:        fpMin1 = fpA;
    src/dynamicMesh/polyTopoChange/polyTopoChange/faceCollapser.C:        fp = f.rcIndex(fpMin1);
    src/dynamicMesh/polyTopoChange/polyTopoChange/faceCollapser.C:            // See where fp sorts. Make sure it is below fpMin1!
    src/dynamicMesh/polyTopoChange/polyTopoChange/faceCollapser.C:            if (w <= dist[fpMin1])
    src/dynamicMesh/polyTopoChange/polyTopoChange/faceCollapser.C:                w = dist[fpMin1] + 1e-6*(dist[fpB] - dist[fpA]);
    src/dynamicMesh/polyTopoChange/polyTopoChange/faceCollapser.C:            fpMin1 = fp;
    src/dynamicMesh/polyTopoChange/polyTopoChange/faceCollapser.C:            fp = f.rcIndex(fpMin1);
    src/lagrangian/molecularDynamics/potential/tetherPotential/derived/pitchForkRing/pitchForkRing.C:    scalar pMinusRSqr = sqr(p - rOrbit_);
    src/lagrangian/molecularDynamics/potential/tetherPotential/derived/pitchForkRing/pitchForkRing.C:       -0.5 * mu_ * pMinusRSqr
    src/lagrangian/molecularDynamics/potential/tetherPotential/derived/pitchForkRing/pitchForkRing.C:      + 0.25 * pMinusRSqr * pMinusRSqr
    src/lagrangian/molecularDynamics/potential/tetherPotential/derived/pitchForkRing/pitchForkRing.C:    scalar pMinusR = (p - rOrbit_);
    src/lagrangian/molecularDynamics/potential/tetherPotential/derived/pitchForkRing/pitchForkRing.C:        (mu_ - sqr(pMinusR)) * pMinusR * r.x()/(p + vSmall),
    src/lagrangian/molecularDynamics/potential/tetherPotential/derived/pitchForkRing/pitchForkRing.C:        (mu_ - sqr(pMinusR)) * pMinusR * r.y()/(p + vSmall),
    src/lagrangian/parcel/parcels/Templates/ReactingParcel/ReactingParcel.H:            demandDrivenEntry<scalar> pMin_;
    src/lagrangian/parcel/parcels/Templates/ReactingParcel/ReactingParcel.H:            inline scalar pMin() const;
    src/lagrangian/parcel/parcels/Templates/ReactingParcel/ReactingParcel.C:    if (td.pc() < cloud.constProps().pMin())
    src/lagrangian/parcel/parcels/Templates/ReactingParcel/ReactingParcel.C:                << " to " << cloud.constProps().pMin() <<  nl << endl;
    src/lagrangian/parcel/parcels/Templates/ReactingParcel/ReactingParcel.C:        td.pc() = cloud.constProps().pMin();
    src/lagrangian/parcel/parcels/Templates/ReactingParcel/ReactingParcelI.H:    pMin_(this->dict_, 0.0),
    src/lagrangian/parcel/parcels/Templates/ReactingParcel/ReactingParcelI.H:    pMin_(cp.pMin_),
    src/lagrangian/parcel/parcels/Templates/ReactingParcel/ReactingParcelI.H:    pMin_(this->dict_, "pMin", 1000.0),
    src/lagrangian/parcel/parcels/Templates/ReactingParcel/ReactingParcelI.H:Foam::ReactingParcel<ParcelType>::constantProperties::pMin() const
    src/lagrangian/parcel/parcels/Templates/ReactingParcel/ReactingParcelI.H:    return pMin_.value();
    src/lagrangian/parcel/parcels/Templates/SprayParcel/SprayParcel.H:                const scalar pMin,
    src/lagrangian/parcel/parcels/Templates/SprayParcel/SprayParcelI.H:    const scalar pMin,
    src/lagrangian/parcel/parcels/Templates/SprayParcel/SprayParcelI.H:        pMin,
    src/OpenFOAM/meshes/primitiveMesh/primitiveMeshCheck/primitiveMeshCheck.C:                    label fpMin1  = curFace.rcIndex(fp);
    src/OpenFOAM/meshes/primitiveMesh/primitiveMeshCheck/primitiveMeshCheck.C:                    else if (nbFace[nbPlus1] == curFace[fpMin1])
    src/OpenFOAM/meshes/primitiveMesh/primitiveMeshCheck/primitiveMeshCheck.C:                    else if (nbFace[nbMin1] == curFace[fpMin1])
    src/fvConstraints/limitPressure/limitPressure.H:        dimensionedScalar pMin_;
    src/fvConstraints/limitPressure/limitPressure.C:        pMin_.value() = dict.lookup<scalar>("min");
    src/fvConstraints/limitPressure/limitPressure.C:        scalar pMin = vGreat;
    src/fvConstraints/limitPressure/limitPressure.C:                pMin = min(pMin, min(pbf[patchi]));
    src/fvConstraints/limitPressure/limitPressure.C:            reduce(pMin, minOp<scalar>());
    src/fvConstraints/limitPressure/limitPressure.C:            pMin_.value() = dict.lookup<scalar>("min");
    src/fvConstraints/limitPressure/limitPressure.C:            const scalar pMinFactor(dict.lookup<scalar>("minFactor"));
    src/fvConstraints/limitPressure/limitPressure.C:            pMin_.value() = pMinFactor*pMin;
    src/fvConstraints/limitPressure/limitPressure.C:            Info<< "    min " << pMin_.value() << nl;
    src/fvConstraints/limitPressure/limitPressure.C:    pMin_("pMin", dimPressure, 0),
    src/fvConstraints/limitPressure/limitPressure.C:            const scalar pMin = min(p).value();
    src/fvConstraints/limitPressure/limitPressure.C:            if (pMin < pMin_.value())
    src/fvConstraints/limitPressure/limitPressure.C:                Info<< "limitPressure: p min " << pMin << endl;
    src/fvConstraints/limitPressure/limitPressure.C:                p = min(p, pMin_);
    applications/solvers/multiphase/compressibleInterFoam/pEqn.H:            p = min(p_rgh + (alpha1*rho1 + alpha2*rho2)*gh, pMin);
    applications/solvers/multiphase/compressibleInterFoam/createFields.H:dimensionedScalar pMin
    applications/solvers/multiphase/compressibleInterFoam/createFields.H:    "pMin",
    applications/solvers/multiphase/compressibleMultiphaseInterFoam/pEqn.H:            p = max(p_rgh + mixture.rho()*gh, pMin);
    applications/solvers/multiphase/compressibleMultiphaseInterFoam/createFields.H:dimensionedScalar pMin("pMin", dimPressure, mixture);
    applications/solvers/multiphase/multiphaseEulerFoam/multiphaseEulerFoam/createFields.H:if (fluid.found("pMin"))
    applications/solvers/multiphase/multiphaseEulerFoam/multiphaseEulerFoam/createFields.H:        << "Pressure limits, pMin and pMax, are now read from "
    applications/solvers/multiphase/multiphaseEulerFoam/phaseSystems/diameterModels/velocityGroup/sizeGroup/shapeModels/fractal/sinteringModels/KochFriedlander/KochFriedlander.C:    dpMin_(dict_.lookupOrDefault<scalar>("dpMin", 0))
    applications/solvers/multiphase/multiphaseEulerFoam/phaseSystems/diameterModels/velocityGroup/sizeGroup/shapeModels/fractal/sinteringModels/KochFriedlander/KochFriedlander.C:            Cs_*pow(dp, n_)*pow(T[celli], m_)*exp(Ta_/T[celli]*(1 - dpMin_/dp));
    applications/solvers/multiphase/multiphaseEulerFoam/phaseSystems/diameterModels/velocityGroup/sizeGroup/shapeModels/fractal/sinteringModels/KochFriedlander/KochFriedlander.H:        dpMin    | Minimum primary particle diameter | no   | 0
    applications/solvers/multiphase/multiphaseEulerFoam/phaseSystems/diameterModels/velocityGroup/sizeGroup/shapeModels/fractal/sinteringModels/KochFriedlander/KochFriedlander.H:        scalar dpMin_;
    tutorials/multiphase/compressibleInterFoam/laminar/plateFilm/constant/thermophysicalProperties:pMin        10000;
    tutorials/multiphase/compressibleInterFoam/laminar/cylinder/constant/thermophysicalProperties:pMin        10000;
    tutorials/multiphase/compressibleInterFoam/laminar/sloshingTank2D/constant/thermophysicalProperties:pMin            1000;
    tutorials/multiphase/compressibleInterFoam/laminar/depthCharge2D/constant/thermophysicalProperties:pMin        10000;
    tutorials/multiphase/compressibleInterFoam/laminar/climbingRod/constant/thermophysicalProperties:pMin        10000;
    tutorials/multiphase/compressibleInterFoam/laminar/depthCharge3D/constant/thermophysicalProperties:pMin        10000;
    tutorials/multiphase/compressibleMultiphaseInterFoam/laminar/damBreak4phase/constant/thermophysicalProperties:pMin            10000;
    tutorials/multiphase/multiphaseEulerFoam/laminar/mixerVesselAMI2D/constant/phasePropertiesAll:pMin            10000;
    grep: platforms/linux64GccDPInt32Opt/bin/compressibleInterFoam: 匹配到二进制文件
    grep: platforms/linux64GccDPInt32Opt/bin/compressibleMultiphaseInterFoam: 匹配到二进制文件
    grep: platforms/linux64GccDPInt32Opt/bin/multiphaseEulerFoam: 匹配到二进制文件
    grep: platforms/linux64GccDPInt32Opt/src/sampling/meshToMesh/calcMethod/meshToMeshMethod/meshToMeshMethod.o: 匹配到二进制文件
    grep: platforms/linux64GccDPInt32Opt/src/finiteVolume/cfdTools/general/pressureReference/pressureReference.o: 匹配到二进制文件
    grep: platforms/linux64GccDPInt32Opt/src/meshTools/tetOverlapVolume/tetOverlapVolume.o: 匹配到二进制文件
    grep: platforms/linux64GccDPInt32Opt/src/lagrangian/parcel/clouds/derived/sprayCloud/sprayCloud.o: 匹配到二进制文件
    grep: platforms/linux64GccDPInt32Opt/src/lagrangian/parcel/clouds/derived/reactingMultiphaseCloud/reactingMultiphaseCloud.o: 匹配到二进制文件
    grep: platforms/linux64GccDPInt32Opt/src/lagrangian/parcel/clouds/derived/reactingCloud/reactingCloud.o: 匹配到二进制文件
    grep: platforms/linux64GccDPInt32Opt/src/fvConstraints/limitPressure/limitPressure.o: 匹配到二进制文件
    grep: platforms/linux64GccDPInt32Opt/applications/solvers/multiphase/compressibleInterFoam/compressibleInterFoam.o: 匹配到二进制文件
    grep: platforms/linux64GccDPInt32Opt/applications/solvers/multiphase/compressibleMultiphaseInterFoam/compressibleMultiphaseInterFoam.o: 匹配到二进制文件
    grep: platforms/linux64GccDPInt32Opt/applications/solvers/multiphase/multiphaseEulerFoam/multiphaseEulerFoam/multiphaseEulerFoam.o: 匹配到二进制文件
    grep: platforms/linux64GccDPInt32Opt/applications/solvers/multiphase/multiphaseEulerFoam/phaseSystems/diameterModels/velocityGroup/sizeGroup/shapeModels/fractal/sinteringModels/KochFriedlander/KochFriedlander.o: 匹配到二进制文件
    grep: platforms/linux64GccDPInt32Opt/lib/libphaseSystem.so: 匹配到二进制文件
    grep: platforms/linux64GccDPInt32Opt/lib/libsampling.so: 匹配到二进制文件
    grep: platforms/linux64GccDPInt32Opt/lib/libfvConstraints.so: 匹配到二进制文件
    grep: platforms/linux64GccDPInt32Opt/lib/libfiniteVolume.so: 匹配到二进制文件
    grep: platforms/linux64GccDPInt32Opt/lib/liblagrangianParcel.so: 匹配到二进制文件
    grep: platforms/linux64GccDPInt32Opt/lib/libmeshTools.so: 匹配到二进制文件
    etc/templates/compressibleInflowOutflow/system/fvSolution:    pMinFactor      0.1;
    etc/templates/singleFluidCHT/templates/system/fluid/fvSolution://    pMinFactor      0.1;
    
    

    其中相关的文件应该只有
    applications/solvers/multiphase/compressibleInterFoam/pEqn.H
    src/finiteVolume/cfdTools/general/pressureReference/pressureReference.C
    src/fvConstraints/limitPressure/limitPressure.C
    而pressureReference这一文件的作用应该是识别pMin并将其指向fvConstraints的,我只更改了pEqn和limitPressure这两个文件,将其中pMin的语句注释掉。

    但是同样的算例文件,更改前能够计算,更改后迭代几个计算步后就会报负温度停止计算。

    求助,第一次尝试更改求解器,担心是不是有其他相关的文件没有更改?我这个思路有没有问题?如果我想消除pMin的限制,应该怎么做,我希望的是能够在OpenFOAM实现与fluent相同的处理方式,而不是直接将最终结果也直接截断。

    1 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    写于 最后由 编辑
    #2

    在液体中一定的绝对负压是被允许的

    这个怎么理解

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

    打 1 条回复 最后回复
  • 打 在线
    打 在线
    打倒小怪兽
    在 中回复了 李东岳 最后由 编辑
    #3

    @李东岳 李老师感谢您的及时回复
    在OpenFOAM中液体属性的adiabaticPerfectFluid模型,使用的是Tait状态方程这个模型
    bdfe6710-0a9a-4fa8-a960-c1d2b345e7e1-image.png
    其中B的值通过实验测得为3e8,在这种情况下如果绝对负压不超过B的值,就不会出现负密度,这样应该也不会影响到计算吧?我不知道这样理解对不对

    也有相关领域的液相绝对负压的文献:CAUPIN, F. & HERBERT, E. 2006 Cavitation in water: a review. C. R. Phys. 7 (9–10), 1000–1017.

    1 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    写于 最后由 编辑
    #4

    openfoam的adiabaticPerfectFluid模型,是更新密度的,跟你写的不一样。你确认一下,openfoam中的adiabaticPerfectFluid模型在压力为负的时候,密度可以是正的么

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

    打 1 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    写于 最后由 编辑
    #5

    也有相关领域的液相绝对负压的文献:CAUPIN, F. & HERBERT, E. 2006 Cavitation in water: a review. C. R. Phys. 7 (9–10), 1000–1017.

    我第一次看到负压的讨论,值得深入研究一下

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

    1 条回复 最后回复
  • 打 在线
    打 在线
    打倒小怪兽
    在 中回复了 李东岳 最后由 编辑
    #6

    @李东岳 老师,这是of2312版本中的adiabaticPerfectFluid公式
    1f7370d8-d5b6-4a03-9dfa-a88d5a1b0077-image.png
    我上面给出的公式里面,V表示的是1/ρ,这两个公式应该是一样的。

    1 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    写于 最后由 李东岳 编辑
    #7

    那个密度公式,不会出现负的密度。
    不过p倒是允许出现一定的负值,看起来没做限制,但要保证密度不是负值。

    你得问题是什么?OpenFOAM里面的pMin的作用么?

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

    打 1 条回复 最后回复
  • 打 在线
    打 在线
    打倒小怪兽
    在 中回复了 李东岳 最后由 编辑
    #8

    @李东岳 老师,我现在在尝试取消pMin对流场压力的限制,来达到允许流场出现绝对负压的计算结果。
    想请教一下老师您,如果我想消除pMin的限制,下面两个方法是否可行?如果思路没问题的话,您觉得有没有可能是存在其他关联文件没有修改的缘故导致的报错?或者,您能花时间指点一下,如何修改求解器来取消pMin限制?

    目前我尝试了两种方法:

    • 直接将compressibleInterFoam求解器文件夹中的压力文件中,将关于pMin的语句直接注释掉的方法(同时在createField中取消pMin的声明),但是重新编译后的求解器运行修改前能正常计算的算例会很快报错(大概三四个时间步)——这个方法不知道该如何再继续推进下去了

    • OpenFOAM-11中是通过fvConstrains-limitPressure来限制压力的,我对这个文件对压力的语句也进行了修改——将max(p,pMin),改为min(p,pMin),然后提供一个巨大的pMin值(1e12)。这样应该也能消除压力下限的限制,但算例的结果也会发现压力和温度计算有问题。

    1 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    写于 最后由 编辑
    #9

    那个文章里面说确实可以存在负压。但是不表明OpenFOAM允许负压的存在。你把pMin取消掉,存在很大的风险。

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

    打 1 条回复 最后回复
  • 打 在线
    打 在线
    打倒小怪兽
    在 中回复了 李东岳 最后由 编辑
    #10

    @李东岳 老师,我还有一个疑问,pMin的值可以设置为负值吗?会有文件对pMin的值必须为非负值的限制吗?
    这样是否可以避免直接取消pMin带来的风险?

    1 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    写于 最后由 编辑
    #11

    在你提到那个绝对负压之前,我从来没见过设置为负值的压力。从状态方程来看,基于可压缩性的算法psiThermo,p是负值是完全不可能的。rhoThermo中p和rho的关系可能更复杂,比如绝热理想液体,可能一个负的压力可以预测一个正的速度。但是听起来基本挑战之前的CFD数值常识。

    你要想尝试绝热理想液体能否允许负压的存在,你需要做个算例做个测试。比如rhoPimpleFoam算一个特别简单的算例。

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

    打 1 条回复 最后回复
  • 打 在线
    打 在线
    打倒小怪兽
    在 中回复了 李东岳 最后由 编辑
    #12

    @李东岳 好的,谢谢老师指点迷津,我再自己研究一下。
    刚刚尝试了一下,相同的算例使用compressibleInterFoam求解器计算,将pMin值设置为负值后很快就会报错负温度。看来不能简单的直接设置为负

    1 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    写于 最后由 编辑
    #13

    是。对于理想气体,负的温度、压力、密度都不合理。不过你那个绝热理想液体,在p为负的时候,密度确实为正。在结合那个review说的绝对负压的存在,应该需要详细研究下。

    不过如果没看到那个review,过去10多年我一直以为绝对压力一直为正。需要好好看看这个。

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

    1 条回复 最后回复

  • 登录

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