ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

OpenFOAM 可压缩湍流库深度解析

2019-09-27 14:04:05  阅读:576  来源: 互联网

标签:surfaceScalarField phi const propertiesName OpenFOAM alphaRhoPhi rho 可压缩 湍流


分析可压缩湍流部分的继承关系

继承关系:

solver 中:

Info << "Creating turbulence model.n" << nl;
autoPtr<compressible::turbulenceModel> turbulence
(
compressible::turbulenceModel::New
(
rho,
U,
phi,
thermo
)
);

其中 Foam::compressible::turbulenceModelFoam::compressible::ThermalDiffusivity<CompressibleTurbulenceModel<fluidThermo>>typedef

所以这里首先调用的是 ThermalDiffusivity 中的 New

template<class BasicTurbulenceModel>
Foam::autoPtr<Foam::ThermalDiffusivity<BasicTurbulenceModel>>
Foam::ThermalDiffusivity<BasicTurbulenceModel>::New
(
const volScalarField& rho,
const volVectorField& U,
const surfaceScalarField& phi,
const transportModel& transport,
const word& propertiesName
)
{
return autoPtr<ThermalDiffusivity>
(
static_cast<ThermalDiffusivity*>(
BasicTurbulenceModel::New
(
rho,
U,
phi,
transport,
propertiesName
).ptr())
);
}

CompressibleTurbulenceModel<class TransportModel>BasicTurbulenceModel 的实例化,
因此接下来来到了 CompressibleTurbulenceModel
声明:

template<class TransportModel>
class CompressibleTurbulenceModel
:
public TurbulenceModel
<
geometricOneField,
volScalarField,
compressibleTurbulenceModel,
TransportModel
>

New 函数:

template<class TransportModel>
Foam::autoPtr<Foam::CompressibleTurbulenceModel<TransportModel>>
Foam::CompressibleTurbulenceModel<TransportModel>::New
(
const volScalarField& rho,
const volVectorField& U,
const surfaceScalarField& phi,
const transportModel& transport,
const word& propertiesName
)
{
return autoPtr<CompressibleTurbulenceModel>
(
static_cast<CompressibleTurbulenceModel*>(
TurbulenceModel
<
geometricOneField,
volScalarField,
compressibleTurbulenceModel,
transportModel
>::New
(
geometricOneField(),
rho,
U,
phi,
phi,
transport,
propertiesName
).ptr())
);
}

接着来到 TurbulenceModel 这里用到了 RTS
New 函数:

static autoPtr<TurbulenceModel> New
(
const alphaField& alpha,
const rhoField& rho,
const volVectorField& U,
const surfaceScalarField& alphaRhoPhi,
const surfaceScalarField& phi,
const transportModel& transport,
const word& propertiesName = turbulenceModel::propertiesName
);

构造函数:

Foam::TurbulenceModel<Alpha, Rho, BasicTurbulenceModel, TransportModel>::
TurbulenceModel
(
const alphaField& alpha,
const rhoField& rho,
const volVectorField& U,
const surfaceScalarField& alphaRhoPhi,
const surfaceScalarField& phi,
const transportModel& transport,
const word& propertiesName
)
:
BasicTurbulenceModel
(
rho,
U,
alphaRhoPhi,
phi,
propertiesName
),
alpha_(alpha),
transport_(transport)
{}

它的模板基类 BasicTurbulenceModel 的实例化是 compressibleTurbulenceModel

Foam::compressibleTurbulenceModel::compressibleTurbulenceModel
(
const volScalarField& rho,
const volVectorField& U,
const surfaceScalarField& alphaRhoPhi,
const surfaceScalarField& phi,
const word& propertiesName
)
:
turbulenceModel
(
U,
alphaRhoPhi,
phi,
propertiesName
),
rho_(rho)
{}

最后终于来到了幕后大 Boss:turbulenceModel 面前:

Foam::turbulenceModel::turbulenceModel
(
const volVectorField& U,
const surfaceScalarField& alphaRhoPhi,
const surfaceScalarField& phi,
const word& propertiesName
)

初始化列表中:alphaRhoPhi_(alphaRhoPhi)
另有函数:

inline const surfaceScalarField& alphaRhoPhi() const
{
return alphaRhoPhi_;
}

combustionModel.H 中:

inline Foam::tmp<Foam::surfaceScalarField> Foam::combustionModel::phi() const
{
return turbulence().alphaRhoPhi();
}

就是说,solver#include "compressibleCreatePhi.H" 创建的 phi 逐级传到了湍流模型中,我可以使用 Foam::combustionModel::phi() 来调用它!!!这是合理的!!!

原文:大专栏  OpenFOAM 可压缩湍流库深度解析


标签:surfaceScalarField,phi,const,propertiesName,OpenFOAM,alphaRhoPhi,rho,可压缩,湍流
来源: https://www.cnblogs.com/petewell/p/11597572.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有