CFD中文网

    CFD中文网

    • 登录
    • 搜索
    • 最新

    约束器constrain的实现

    OpenFOAM
    1
    1
    229
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 王
      王金成 最后由 编辑

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

      1 条回复 最后回复 回复 引用
      • First post
        Last post