在求解器中使用湍流模型

1.在求解器中添加頭文件。

#include "turbulenceModel.H"
//通過 turbulence->correct();求解湍流模型中的方程

2.在求解器的createField.H中實例化BasicCompressibleTurbulenceModel。

在turbulenceModel.H中有如下的selectors:

namespace Foam
{
namespace incompressible
{
typedef IncompressibleTurbulenceModel<transportModel> turbulenceModel;

typedef laminarModel<turbulenceModel> laminarModel;
typedef RASModel<turbulenceModel> RASModel;
typedef LESModel<turbulenceModel> LESModel;

template<class BasicCompressibleTurbulenceModel>
autoPtr<BasicCompressibleTurbulenceModel> New
(
const volVectorField& U,
const surfaceScalarField& phi,
const typename BasicCompressibleTurbulenceModel::transportModel&
transport,
const word& propertiesName = turbulenceModel::propertiesName
);
}
}

需要傳入4個參數,其中U在runTime.timeName()中讀取。

volVectorField U
(
IOobject
(
"U",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);

phi通過 #include "createPhi.H"創建。

第三個參數transport-model需要自己設定。這裡的Transport_Model應該是為有效粘度的計算做準備,例如在 k-epsilon 模型中有:

//- Return the effective viscosity
virtual tmp<volScalarField> nuEff() const
{
return tmp<volScalarField>
(
new volScalarField
(
IOobject::groupName("nuEff", this->U_.group()),
this->nut() + this->nu()
)
);
}

在createField.H中實例化:

autoPtr<incompressible::turbulenceModel> turbulence
(
incompressible::turbulenceModel::New(U, phi, twoPhaseProperties)
);

在[1]中有關於New的詳細分析,簡單地講此代碼會讀取turbulenceProperties這個字典,確定使用的湍流模型(PS:好複雜,我也沒有仔細看-*-)。

3.在求解器的Make/options中添加相應的需要包含的文件。

使用的頭文件在編譯時會到 EXE_INC(execute-include)中去尋找,這裡需要把路徑定義好。

EXE_INC =
-I$(LIB_SRC)/turbulenceModels/incompressible/turbulenceModel
//turbulenceModel.H 就在該目錄下

添加需要鏈接的庫。

庫文件是一種已經編譯過了,需要使用是直接鏈接即可。修改後的湍流模型被編譯為了庫,將支持的湍流模型庫鏈接到Solvers的Make/options中,然後確保constant下設置的湍流模型可以被識別。

EXE_LIBS =
-lincompressibleTransportModels
-lincompressibleTurbulenceModel
-lincompressibleRASModels
-lincompressibleLESModels

參考資料:

[1]pingpong.chalmers.se/pu

[2]OpenFOAM guide/runTimeSelection mechanismOpen

推薦閱讀:

相關文章