在约束器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继承无法看得出来,因为该类没有父类。为因此想请教一下大家这个方法的定义及其由来,以及其是如何在代码里实现的。