OpenFOAM学习 —— interFoam求解器中植入温度方程

本文跟着文献学习OpenFOAM,菜鸟根据文献做了一遍,总结记录一下。

输运方程

OpenFOAM中的interFoam 求解器是基于VOF模型,用于求解两相不可压缩流体,具体可以参考东岳流体

interFooam求解器中添加温度输运方程:
∂ ρ T ∂ t + ∇ ⋅ ( ρ U T ) − ∇ ⋅ ( D e f f ∇ T ) = 0 \frac{\partial \rho T}{\partial t}+\nabla\cdot ( \rho \mathbf{U} T )-\nabla\cdot ( D_{eff} \nabla T )=0 tρT+(ρUT)(DeffT)=0
D e f f D_{eff} Deff是混合相的导热系数:
D e f f = α k 1 C v 1 + ( 1 − α ) k 2 C v 2 D_{eff}=\frac{\alpha k_1}{C_{v1}}+\frac{(1-\alpha) k_2}{C_{v2}} Deff=Cv1αk1+Cv2(1α)k2
其中 k 1 ,   k 2 ,   C v 1 ,   C v 2 k_1, \ k_2, \ C_{v1}, \ C_{v2} k1, k2, Cv1, Cv2表示各相的导热系数和热容。

具体步骤

interFoam求解器拷贝到用户工作目录下并重命名为heatTransferTwoPhaseSolver

cp -r $FOAM_SOLVERS/multiphase/interFoam/ \ $FOAM_RUN/../applications/
cd $FOAM_RUN/../applications/ 
mv interFoam heatTransferTwoPhaseSolver
cd heatTransferTwoPhaseSolver
mv interFoam.C heatTransferTwoPhaseSolver.C

相应的Make目录中files文件中的内容也需要修改:

sed -i s/"interFoam"/"heatTransferTwoPhaseSolver"/g heatTransferTwoPhaseSolver.C
sed -i s/"interFoam"/"heatTransferTwoPhaseSolver"/g Make/files
sed -i s/"FOAM_APPBIN"/"FOAM_USER_APPBIN"/g Make/files

删除其中不需要修改的文件:

rm -rf interMixingFoam/overInterDyMFoam/ 
rm alphaSuSp.H createFields.H correctPhi.H initCorrectPhi.H rhofs.H pEqn.H UEqn.H

修改Make目录中options文件中的内容,使求解器使用interFoam中的文件以及VoF中的文件:

INC=\ 
-I$(FOAM_SOLVERS)/multiphase/interFoam \ 
-I$(FOAM_SOLVERS)/multiphase/VoF \ 
...

然后使用wmake可以编译新的求解器heatTransferTwoPhaseSolver,此时这个新求解器和interFoam是完全一样的。

接下来需要创建两个新文件:createHeatTransferFields.HTEqn.H

createHeatTransferFields.H,用于添加温度场和热传导系数:

// 从twoPhaseProperties中读取各相导热系数等

const dictionary& phase1dict = mixture.subDict ("phase1");
const dictionary& phase2dict = mixture.subDict ("phase2");

auto k1 (phase1dict.get<dimensionedScalar>("k"));
auto Cv1(phase1dict.get <dimensionedScalar>("Cv"));
auto k2(phase2dict.get <dimensionedScalar>("k"));
auto Cv2(phase2dict.get <dimensionedScalar>("Cv"));

volScalarField T
(
	IOobject
	(
		"T",					// 文件名
		runTime.timeName(),		// 文件位置
		mesh,					// Object registry 
		IOobject::MUST_READ,	// 必须读取
		IOobject::AUTO_WRITE	// 自动保存
	),
	mesh
);

volScalarField Deff
(
	"Deff",
	(alpha1*k1/Cv1 + (1.0 - alpha1)*k2/Cv2)
);

TEqn.H

Deff == alpha1*k1/Cv1 + (1.0 - alpha1)*k2/Cv2;
solve
(
	 fvm::ddt(rho, T)
	+ fvm::div(rhoPhi, T)
	- fvm::laplacian(Deff, T)
);

heatTransferTwoPhaseSolver.C中,需要包含上面两个新创建的文件:

int main(int argc, char *argv[])
{
    #include "postProcess.H"

    #include "addCheckCaseOptions.H"
    #include "setRootCaseLists.H"
    #include "createTime.H"
    #include "createDynamicFvMesh.H"
    #include "initContinuityErrs.H"
    #include "createDyMControls.H"
    #include "createFields.H"
    #include "createAlphaFluxes.H"
    #include "initCorrectPhi.H"
    #include "createUfIfPresent.H"

    #include "createHeatTransferFields.H"  
...
while (pimple.loop()) 
{ 
	... 
	mixture.correct(); 

	if (pimple.frozenFlow()) 
	{ 
		continue; 
	} 
	
	#include "TEqn.H" 
	#include "UEqn.H" 
	... 
}

最后,编译新的求解器:

wclean
wmake

设置算例

算例模拟一个2D上升的气泡。
0文件夹中温度场T

/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  v2012                                 |
|   \\  /    A nd           | Website:  www.openfoam.com                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       volScalarField;
    location    "0";
    object      T;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

dimensions      [0 0 0 1 0 0 0];

internalField   uniform 300;

boundaryField
{
    bottom
    {
        type            zeroGradient;
    }
    top
    {
        type            zeroGradient;
    }
    left
    {
        type            zeroGradient;
    }
    right
    {
        type            zeroGradient;
    }
    frontAndBack
    {
        type            empty;
    }
}


// ************************************************************************* //

system文件夹中setFieldsDict文件用于初始化温度场:

/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  v2012                                 |
|   \\  /    A nd           | Website:  www.OpenFOAM.com                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       dictionary;
    object      setFieldsDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

defaultFieldValues
(
    volScalarFieldValue alpha.phase1 0
    volVectorFieldValue U (0 0 0)
    volScalarFieldValue T 300 
);

regions
(
    sphereToCell
    {
        centre (1 1 0);
        radius 0.2;
        fieldValues
        (
            volScalarFieldValue alpha.phase1 1
            volScalarFieldValue T 500
        );
    }
);

// ************************************************************************* //

constant目录下,transportProperties文件包含了两相性质:

/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM Extend Project: Open Source CFD        |
|  \\    /   O peration     | Version:  v2012                                 |
|   \\  /    A nd           | Website:  www.OpenFOAM.com                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version     2.2;
    format      ascii;
    class       dictionary;
    location    "constant";
    object      transportProperties;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

phases (phase1 phase2);

phase1
{
    transportModel  Newtonian;

    nu              nu  [ 0 2 -1 0 0 0 0 ] 1e-02;
    rho             rho [ 1 -3 0 0 0 0 0 ] 100;
    k               k   [ 1 1 -3 -1 0 0 0] 100;
    Cv              Cv  [ 0 2 -2 -1 0 0 0] 100; 

    ...
}

phase2
{
    transportModel  Newtonian;

    nu              nu  [ 0 2 -1 0 0 0 0 ] 1e-02;
    rho             rho [ 1 -3 0 0 0 0 0 ] 1000;
    k               k   [ 1 1 -3 -1 0 0 0] 1000;
    Cv              Cv  [ 0 2 -2 -1 0 0 0] 1000;

	...
}

sigma           sigma [ 1 0 -2 0 0 0 0 ] 24.5;

// ************************************************************************* //

添加AllcleanAllrun脚本,运行算例。
气泡温度场模拟结果如图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

[1]: MARIĆ T, HÖPKEN J, MOONEY K G. The OpenFOAM® Technology Primer[J]. 424.

  • 9
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
OpenFOAM是一个开源的计算流体力学软件,提供了多种湍流求解器和相应的案例。下面为你简要介绍一些常用的湍流求解器和相应的案例。 1. k-epsilon模型:k-epsilon模型是一种经典的湍流模型,适用于各种流动情况。其求解器在OpenFOAM中被命名为"turbulent"。案例包括湍流管流、湍流圆柱绕流等。 2. k-omega SST模型:k-omega SST模型是一种较新的湍流模型,结合了k-epsilon模型和k-omega模型的优点,适用于各种流动情况,特别是适用于近壁流动。其求解器在OpenFOAM中被命名为"RAS"。案例包括湍流平板边界层、湍流马赫数的圆锥绕流等。 3. Spalart-Allmaras模型:Spalart-Allmaras模型是一种基于单方程的湍流模型,相比于k-epsilon模型和k-omega模型更简单,计算速度更快。其求解器在OpenFOAM中被命名为"SpalartAllmaras"。案例包括二维及三维的湍流流动、风力机叶片湍流模拟等。 4. Large Eddy Simulation (LES):LES是一种直接模拟湍流的方法,不依赖于湍流模型,适用于高雷诺数情况。其求解器在OpenFOAM中被命名为"LES"。案例包括湍流合流、湍流绕流等。 这些求解器和案例只是OpenFOAM中湍流求解的一部分,通过OpenFOAM的灵活性和可扩展性,用户能够根据具体问题的需求选择相应的湍流模型和求解器,进行湍流模拟和分析。同时,用户也可以根据需要开发自己的湍流模型和求解器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值