编程小白求问:kEpsilon模型中 k_() 的定义在哪?
-
在求解器(例如
pisoFoam.C
)中添加代码turbulence->k()
可以得到湍动能的量。这是因为在kEpsilon.H
中,对k()
有如下定义//- Return the turbulence kinetic energy virtual tmp<volScalarField> k() const { return k_; }
所以我明白
k_
和k()
代表什么。
但是,在kEpsilon.C
中,对湍动能的求解方程如下tmp<fvScalarMatrix> kEqn ( fvm::ddt(alpha, rho, k_) + fvm::div(alphaRhoPhi, k_) - fvm::laplacian(alpha*rho*DkEff(), k_) == alpha()*rho()*G - fvm::SuSp((2.0/3.0)*alpha()*rho()*divU, k_) - fvm::Sp(alpha()*rho()*epsilon_()/k_(), k_) + kSource() + fvOptions(alpha, rho, k_) ); kEqn.ref().relax(); fvOptions.constrain(kEqn.ref()); solve(kEqn); fvOptions.correct(k_); bound(k_, this->kMin_);
不论是显式离散还是隐式离散,源项括号左边中的湍动能都是用
k_()
表示的。那么k_()
是在哪定义的?代表什么含义? -
k_是class kEpsilon的protected 变量,k()是class kEpsilon的member function,这些都是很基础的C++类的知识,如果你时间充足可以阅读C++ prime(plus),如果时间不是很充足,推荐阅读Guide to Scientific Computing in Cpp。另外在http://www.tfd.chalmers.se/~hani/kurser/OS_CFD/和知乎上你也能搜索到一些修改湍流模型的资料。
-
@yfclark 在 编程小白求问:kEpsilon模型中 k_() 的定义在哪? 中说:
我知道k_和k()分别为protected变量和member function,但是这里出现了k_(),那么k_()是protected function吗?
-
可能没把问题描述清楚。我问的是k_(),不是k_或者k()啊
-
不好意思,我常看的是2.3和2.4的单相流的代码,里面用的都是k_。比如openfoam2.4
tmp<fvScalarMatrix> kEqn ( fvm::ddt(rho_, k_) + fvm::div(phi_, k_) - fvm::laplacian(DkEff(), k_) == G - fvm::SuSp((2.0/3.0)*rho_*divU, k_) - fvm::Sp(rho_*epsilon_/k_, k_) );
不知道你看的是那个版本,看样子还是多相流的
-
5.0版本的。刚才受到你的启发,去知乎上搜了一下,用的是k_,看来k_和k_()没区别吧,好吧。谢谢了
-
k_()
调用的是GeometricField
的operator()
,定义如下:src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricField.H
//- Return a const-reference to the dimensioned internal field // Useful in the formulation of source-terms for FV equations inline const Internal& operator()() const;
-
@wwzhao
谢谢
虽然没看懂,不过知道了这个在源项处理上非常有用 -
@MecYHL 简而言之就是返回一个不带边界的内场。
-
感谢大家分享!
论坛急需散金币机制。暂且欠每人1000金币!:w: