流体部分用的是两相流么?自己写了 interFlow 部分吗?
你好,是两相流,我是初学者按别人的论文上改了interflow.C 和.H
意思是 transportModel 这一行没有在 transportProperties 文件里面,可能用到了单相流里面的传输模型。
需要新定义 twoPhaseMixture 对象,不要用 singlePhaseTransportModel 。
重新定义 twoPhaseMixture 对象具体是怎么操作?改哪个文件?我刚入门不是很懂,希望能说具体点,真的麻烦你了,先谢谢你
不在 foam-extend-3.1 的 src 里面修改。需要在 fluidStructureInteraction/src/fluidStructureInteraction/flowModels/ 里面新建一个求解器,你看到了吗?这里有 consistentFLow, pisoFlow 之类的。需要把你的求解器加入到这里。求解器的结构要和其他求解器类似。
然后在上一级的 Make/files 添加 inteFlow.C,就像这个文件的前面几行类似。
然后在 src/fluidStructureIntreaction/ 目录下进行编译:
[user@localhost fluidStructureInteraction]$ make libso
如果没有错误的话,就可以进行试算了。试算的时候,还需要修改 case/fluid/constant/flowProperties 里面的 flowModel 参数。
如果你的 interFlow 里面正确定义了 twoPhaseMixture 应该没有大的问题。
博主你好,我按着你的说法编译了库,把incompressibleTwoPhaseMixture包括进去了,然后构造了interflow.C和.H 依旧没法识别
EXE_INC = \
-I./numerics/fvMeshSubset \
-I./stressModels/componentReference \
-I./numerics/findRefCell \
-I./stressModels/constitutiveModel/plasticityStressReturnMethods/plasticityStressReturn \
-I./stressModels/constitutiveModel \
-I./stressModels/stressModel/fvMeshSubset \
-I./numerics/ggi/ExtendedGGIInterpolation \
-I./fluidStructureInterface \
-I./numerics/leastSquaresVolPointInterpolation \
-I./numerics/skewCorrectedSnGrad \
-I./numerics/skewCorrectedVectorSnGrad \
-I./numerics/fvc \
-I./stressModels/fvPatchFields/tractionDisplacement \
-I./stressModels/fvPatchFields/tractionDisplacementIncrement \
-I./stressModels/fvPatchFields/fixedDisplacement \
-I./stressModels/fvPatchFields/symmetryDisplacement \
-I./stressModels/stressModel \
-I./numerics/ddtSchemes \
-I./flowModels/flowModel \
-I./interFoam \
-I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(LIB_SRC)/turbulenceModels/incompressible/turbulenceModel \
-I$(LIB_SRC)/transportModels \
-I$(LIB_SRC)/transportModels/incompressible/lnInclude \
-I$(LIB_SRC)/transportModels/interfaceProperties/lnInclude \
-I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \
-I$(LIB_SRC)/transportModels/incompressible/incompressibleTwoPhaseMixture \
-I$(LIB_SRC)/dynamicMesh/dynamicFvMesh/lnInclude \
-I$(LIB_SRC)/dynamicMesh/dynamicMesh/lnInclude \
-I$(LIB_SRC)/dynamicMesh/meshMotion/RBFMotionSolver/lnInclude \
-I$(LIB_SRC)/dynamicMesh/meshMotion/fvMotionSolver/lnInclude \
-I$(LIB_SRC)/finiteArea/lnInclude \
-I$(LIB_SRC)/lagrangian/basic/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude \
-I$(LIB_SRC)/tetFiniteElement/lnInclude \
-I$(LIB_SRC)/solidModels/lnInclude
EXE_LIBS = \
-linterfaceProperties \
-lincompressibleTurbulenceModel \
-lincompressibleRASModels \
-lincompressibleLESModels \
-lincompressibleTransportModels \
-lfiniteVolume \
-ldynamicFvMesh \
-ldynamicMesh \
-lmeshTools \
-ltopoChangerFvMesh \
-llduSolvers \
-L$(MESQUITE_LIB_DIR) -lmesquite
-lsolidModels
- 在 Make/files 里面加 interFlow.C 了吗?
- 看你的 interFlow.H 里,还是 singlePhaseTransportModel 呢?这个需要换成 twoPhaseMixture 的。
- 这个模型最好放在 flowModels 里面
笔者你好,我已经在make|file加入了interflow。通过wmake libso > make.log 2>&1没有报错
然后我听从你的建议把interflow.H的include改成 twoPhaseMixture ,在下面的改成 //- Transport modeltwoPhaseMixture laminarTransport_;
他就出现了 请问这又是怎么回事。真的万分感谢,为我做了那么多解答
感觉识别了transportmodel 可是里面的rho又识别不了
识别 rho 的方法需要跟利用 twoPhaseMixture 配合才行。
需要新建 rho 场。以下为示例,可以根据你的情况更改
dimensionedScalar rho10
(
transportProperties.subDict("phase1").lookup("rho0")
);
dimensionedScalar rho20
(
transportProperties.subDict("phase2").lookup("rho0")
);
volScalarField rho
(
IOobject
(
"rho",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
alpha1*rho10 + (1.0-alpha1)*rho20, // 这里是初始值
alpha1.boundaryField().types() // 边界类型
);
每次算完 alpha 后,需要更新 rho 场。
这个是要改interflow.c吗 初学者看不懂
这个的确需要改一点代码。其实也不算难,你也已经在改了。在你的 interFlow.H 里面要有定义,替换原来的 dimensionedScalar rho_;
:
dimensionedScalar rho10_;
dimensionedScalar rho20_;
volScalarField rho_;
在 interFlow.C 里面的构造函数初始化时,把这几个替换掉原来的 rho_(...)
。
rho10_(transportProperties.subDict("phase1").lookup("rho0")),
rho20_(transportProperties.subDict("phase2").lookup("rho0")),
rho_
(
IOobject
(
"rho",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
alpha1_*rho10_ + (1.0-alpha1_)*rho20_, // 这里是初始值
alpha1_.boundaryField().types() // 边界类型
)
编译通过后,在你的每一相属性里面,要有 rho0 的值。
1.没有有效安装种类dimensionedScalar&
2.在interflow.H识别不了rho10_(transportProperties.subDict(“phase1”).lookup(“rho0”)),
3.这句话好像也有问题alpha1_.boundaryField().types()
rho_.value() 就不能用了,直接用 rho()
函数 rho() 的类型应使用 volScalarField& ,在 .C 和 .H 里面都要修改
transportProperties.subDict(“phase1”).lookup(“rho0”) 换成 twoPhaseProperties.rho1(), twoPHaseProperties 就是你定义的两相流的属性 laminarTransport_ 。
相应地 rho2_ 就换成 twoPhaseProperties.rho1()
rho10_(laminarTransport_.rho1()),
rho20_(laminarTransport_.rho2()),
rho_
(
IOobject
(
"rho",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
alpha1_*rho10_ + (1.0-alpha1_)*rho20_, // 这里是初始值
alpha1_.boundaryField().types() // 边界类型
)
这样,你把 .C 和 .H 贴上来,我帮你修一下。