分析可压缩湍流部分的继承关系
继承关系:
![OpenFOAM 可压缩湍流库深度解析 OpenFOAM 可压缩湍流库深度解析](/default/index/img?u=aHR0cDovL3d3dy5wbGFudHVtbC5jb20vcGxhbnR1bWwvc3ZnL3JIYlBSemlzLTVzX1dhMDBlcnRZVENUUmVXTmVTVzAzYlpROGxVeEhPMkpROVlvOTBhYXZDekJ5enRxSVRMNElBU2JBanBLRklTcGx1N1NWekUtVlZVZjlvWUJDM3laekVsVlBTcEg3Q2s1RklLMFlaem1wZG1IRXV0RTV3QjRtdmFHOC1YSUdQT0Y4MngwR0pMT2wzZUFWckdlelMyUTk5dWNGVjJtbmQ2STA0dXo1R2c4YjNTYUN5SUhBX3o0V3dfcXo0VGlQMms2dDFqWXB1MGxtT19vRWFpMlZlSnlyZzRadTZkamF1VTQwNW5XdVlCVnVTU2lVamhHTkRtT1NYMUhNSDMzXzJtVjEzR05hR3Q0Q0Fqc0p5OGJtVDlUNGNLTDVlVEpmZGRBUHUwMHpDSE9XSmgzX3hadHc1VnNlVzdNRDlWbTZjM2hBNlAtczVRekdURnhnaTdCZTM0eDhVZHEzMW9MOVVJLUQwWGVIUEIxVVdULTFzc0RCZFI4R0pPUW5zb1F5SVdzaDR3V3h3WlFVZU9FUDltWWt5T2tJamdRUTMwcmFYSGhXOXVaZzY0amxJd3RheFVsYWt2NDRqLWxyRTk4bTZPaWxubkFDYmNhdDNmdDRXV09pd1lTd1hFNklIODhMWDh6Y2Fac1pGamhaVzRCeldBSmYwN2dDU3ZBNVZhaHl3YllBTExOSDZlMEJ6MWlNckVra1JIUTZtLWdTUllVZVU1a3Nra21qOXFSUVlRZE52bW9WeDI3NTdxYlZpQXB0Z2ZSU095ZGZ0cTE3enBTTFFRbEtzM3NTRV80czhkbnBNNzhTWVBYbnkyZHVTcURPSUUwQXh0RDRDY1I4RlVUcWl2TmRSSXotSjBrS2V6bENXV3gyRWtpV2VWdm9JdFo4MDNDV3dveDRLWThMNXV1bmhndWpkVjl3SzYyY2FjMmVZRWpyOGtZVW9lQ3JEWGtkUmNRMGlySW5pcXdvaXVPZ0x5Q1lFMmx5eklRR25zeUViWGhGTVZNdjJsRjd2UUFDeDRfYVVNM3FqLXhqd1lCNnN1X2c5by1MeUVWZnlVazR4ZjlNZXluRDVqVXg5ZVVDalRZbXZsQjIyU25nNFA5UkFrUE5ETHQzMFJnNkRicjc2RGFnbjBUcmNYUjlJUk9WcXE1cldUQWhWcjNfUGZzX3Rvbm9jWG9ybmJuOGVlR3hIU0ZTYVpBbUg2NHdQRVJyZWJMVXRBdW9PT18yb1U2dW10NkNndW1wSEtFRXJnVS1HZmxXMEFzbzZBTjlpVmdhS01YSmZSN0tCajYxRkU2d3A3ZVQwSlo2LUZSbTZ3UG5YbVhaQkR3VjBQMDMzbDd6bW5TZ0YyT1d5Z2tja3hqTGFza1U5Q0w3em5SR1F3YW9qd1VBZU9Gd2lFcjUwZEEzLTRmaFQxcWNQalhGUGozRlBqMGxIZjJXY24zbHg2M0dUdk1sbE90UFFSVDJuT1JRMUVOSl9XZkxndDViMExEUEVFY1EtWnZialF3eUhmaW5yT3Q1WkJiUmk4SHhmQjRQTXFib0NOTjJPdFB2MVVZQXR2alRWUkZJMm1XcWFETTd0MFRHcGVsM0NnZXgtVUtvMy02UWtRdzN4dzJyUmxIQVBya184Q2FTdnVfUkhKZEdwYjd3ZDgxdmJkMjlNQ1hxMFo5Q2l1eVZad0RKMlFrYmpOaktiWlEyRXBObWNxSHJpVXVTX04wcXk1c1lUckFRcllHY3hGR0p6dGJMa0ppWWVZaFZjbGxoZU5ILWhpQ0NHTEdCc2U0S0FrbXdYRWU5bGtEMk9GWWNOazdSal9EZzduekFlUm9WbEotU0RRY2p4aWpqTE5aNUZSQTdiZ19ObTJYendTbTFZc1NBV0xueFZqUkZPcXVaVVBzLVplZXNmX0JMckRXU1RfU3FDV0JwcWNYM09JN1B1MUJYWTU5SWFwX3RtM0ZaaTBsQkdxcFVKcnFLUXg1c01ULWRNdGhDQ2FGZUNNUDR3azVLTVFzTk5uc3JYc2pYdzV3VTVVQmVEX01uaHh3alpmdGpTelA2QlRoU3AyX05SVnU1bDdQQlZsSlFxeFlCQjZxQ2xFdVIzUm1GTjdRdE1STS1sNGNkRk53YS1td01pVXhMRTRLaTFGbkY1WkxhTnZQN29UVV9uSTdkck1hNGcxZU5ZenZZUURSakRtejVyazFiZUV3d0tlcVRuVFhXZEg0QWZDYnozblh6ZnR0bDEyVUlGS1prdFo0U05ibzA4ZzJ3bkVkeTBkXy1keHJuUzN6dWt2UlBfQVBNLXplZEN6TUhkTVhRZC1kaDc0WGpWUXNOYkpiUVg3WjNtNGJZVHlZSmVOUm9wVHZNVGNDMmdkbE5vUnpNS0Izd24zcjM2dXZ6UlZYeld1UnFod3hlY1JfUXhzM2Z6cnZQSFREdGdSQTZ3SGxzal84VE1LcW9NaUNJYncza0ZtMDA=)
solver 中:
Info << "Creating turbulence model.n" << nl; autoPtr<compressible::turbulenceModel> turbulence ( compressible::turbulenceModel::New ( rho, U, phi, thermo ) );
|
其中 Foam::compressible::turbulenceModel
是 Foam::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 可压缩湍流库深度解析