约束器constrain的实现
-
在约束器Foam::fvConstraints::constrain的定义中有:
(这里以输入为eqn的定义为例)
template<class Type> bool Foam::fvConstraints::constrain(fvMatrix<Type>& eqn) const { checkApplied(); const PtrListDictionary<fvConstraint>& constraintList(*this); bool constrained = false; forAll(constraintList, i) { const fvConstraint& constraint = constraintList[i];//对象constraint源于类fvConstraint if (constraint.constrainsField(eqn.psi().name())) { constrainedFields_[i].insert(eqn.psi().name()); if (debug) { Info<< "Applying constraint " << constraint.name() << " to field " << eqn.psi().name() << endl; } constrained =//这里调用了对象constraint的constrain方法 constraint.constrain(eqn, eqn.psi().name()) || constrained; } } return constrained; }
注意到,其中constrain方法所引用的是对象constraint,而对象constraint源于类fvConstraint。但是,我目前在类fvConstraint没有找到关于constrain方法的定义,
实际上,我对整个代码进行了搜索遍历,寻找包含两个输入对象的constrain方法,与类fvConstraint有关的,仅有fvConstraint头文件中定义的fvConstraintM.H。
但是其如何被类fvConstraint继承无法看得出来,因为该类没有父类。为因此想请教一下大家这个方法的定义及其由来,以及其是如何在代码里实现的。