|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
应openfoamlb的要求,本文简单的介绍一下transportModel和viscosityModels. transportModel是个父类,他本身无法构造函数,因为里面有3个重要的纯虚函数
virtual tmp<volScalarField> nu() const=0; //返回层流粘性
virtual void correct()=0; //根据不同的粘性模型对层流粘性进行更新
virual bool read()=0; //读如transportation属性
该类本身可以说是粘性模型选择器。此类有两个子类singlePhaseTransportModel和twoPhaseMixture分别用于单相流动粘性和两相混合流动粘性的选择器。其实很简单,单相传输里面有个粘性模型指针(私有变量),该指针会根据你选择的粘性模型对粘性进行更新。更新过程在correct里面,可以通过nu()返回你更新后的粘性。在湍流模型中,不管是RAS还是LES模型都需要根据transportModel的correct进行层流粘性的更新。其基本调用过程为
turbulentModel.correct()-->singlePhaseTransportModel.correct()-->viscosityModels.correct().
turbulenceModel.nu()-->singlePhaseTransportmodel.nu()-->viscosityModels.nu()
viscosityModels是所有的粘性模型父类,该父类和transportModel模型一样,有三个纯虚函数,该纯虚函数和transportModel中的纯虚函数完全相同
virtual tmp<volScalarField> nu() const=0; //返回层流粘性
virtual void correct()=0; //不同的粘性模型需要重载该函数,该函数就是根据当前的流动情形重新计算粘性的。
virual bool read()=0; //读如transportation属性
应当注意上述所有的粘性模型通常是一个场,而非一个变量。对于牛顿流体粘性模型全场恒定,他是根据你在transportPropertiesDict里面的那个nu对粘性场进行构建的。也就是对牛顿流体全场流体粘性所有值都相同。
通常,大家关心的并不是如何定义一个transportModel,而是如何定义一个粘性模型viscosityModels。很简单,子类化viscosityModels,并重载nu(), correct(), read()三个纯虚函数即可。 这样你的粘性模型就可以被transportModels 所调用。 为什么? 接口相同啰!!
转自OpenFOAM研究:http://blog.sina.com.cn/openfoamresearch |
|