Navigation

    CFD中文网

    CFD中文网

    • Login
    • Search
    • 最新

    源项类中的addSup函数是如何被调用的?

    OpenFOAM
    3
    4
    731
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • C
      chaoscfd last edited by

      在各种源项类的声明和实现中经常能看到addSup函数,功能为将源项加入到控制方程中,如在actuationDiskSource.H中:

       //- Source term to momentum equation
      virtual void addSup
       (
               fvMatrix<vector>& eqn,
               const label fieldi
       );
      

      那么请问这个addSup函数是在什么时候被调用的?找了很久没有找到。在网上查了一些资料,基本可以确定这个函数是在求解器形成U方程的时候被调用了,如在simpleFoam的UEqn.H中:

           tmp<fvVectorMatrix> tUEqn
           (
               fvm::div(phi, U)
             + MRF.DDt(U)
             + turbulence->divDevSigma(U)
            ==
               fvOptions(U)
           );
      

      大家都说fvOptions(U)就用到了addSup函数,可是这里addSup函数是如何被调用的?希望有大神能帮忙解答!

      1 Reply Last reply Reply Quote
      • bestucan
        bestucan 版主 副教授 last edited by

        这是在application里抓的,在src里抓能抓到更多,但是多是定义而不是使用。

        ./solvers/multiphase/compressibleInterFoam/compressibleInterFilmFoam/VoFSolidificationMeltingSource/VoFSolidificationMeltingSource.C:void Foam::fv::VoFSolidificationMeltingSource::addSup
        ./solvers/multiphase/compressibleInterFoam/compressibleInterFilmFoam/VoFSolidificationMeltingSource/VoFSolidificationMeltingSource.C:void Foam::fv::VoFSolidificationMeltingSource::addSup
        ./solvers/multiphase/compressibleInterFoam/compressibleInterFilmFoam/VoFSolidificationMeltingSource/VoFSolidificationMeltingSource.C:void Foam::fv::VoFSolidificationMeltingSource::addSup
        ./solvers/multiphase/compressibleInterFoam/compressibleInterFilmFoam/VoFSolidificationMeltingSource/VoFSolidificationMeltingSource.C:void Foam::fv::VoFSolidificationMeltingSource::addSup
        ./solvers/multiphase/compressibleInterFoam/compressibleInterFilmFoam/VoFSolidificationMeltingSource/VoFSolidificationMeltingSource.C:    addSup(eqn, fieldi);
        ./solvers/multiphase/compressibleInterFoam/compressibleInterFilmFoam/VoFSolidificationMeltingSource/VoFSolidificationMeltingSource.H:            virtual void addSup(fvMatrix<scalar>& eqn, const label fieldi);
        ./solvers/multiphase/compressibleInterFoam/compressibleInterFilmFoam/VoFSolidificationMeltingSource/VoFSolidificationMeltingSource.H:            virtual void addSup(fvMatrix<vector>& eqn, const label fieldi);
        ./solvers/multiphase/compressibleInterFoam/compressibleInterFilmFoam/VoFSolidificationMeltingSource/VoFSolidificationMeltingSource.H:            virtual void addSup
        ./solvers/multiphase/compressibleInterFoam/compressibleInterFilmFoam/VoFSolidificationMeltingSource/VoFSolidificationMeltingSource.H:            virtual void addSup
        
        

        滚来滚去……~(~o ̄▽ ̄)~o 滚来滚去都不能让大家看出来我不是老师么 O_o

        异步沟通方式(《posting style》from wiki)(下载后打开):
        https://www.jianguoyun.com/p/Dc52X2sQsLv2BRiqnKYD
        提问的智慧(github在gitee的镜像):
        https://gitee.com/bestucan/How-To-Ask-Questions-The-Smart-Way/blob/master/README-zh_CN.md

        1 Reply Last reply Reply Quote
        • C
          Cr last edited by

          fvOptions是一个fv::options类型的一个对象,fv::options类继承自optionList类。
          optionList类中含有一个包含所有源项的指针列表PtrList<option> 。optionList类中对operator()进行了运算符重载,函数体中遍历调用PtrList<option>中的每一个addSup函数。
          相关函数体的定义在fvOptionListTemplates.C中。

           template<class Type>
           Foam::tmp<Foam::fvMatrix<Type>> Foam::fv::optionList::operator()
           (
               GeometricField<Type, fvPatchField, volMesh>& field,
               const word& fieldName
           )
           {
               return source(field, fieldName, field.dimensions()/dimTime*dimVolume);
           }
           
          
           template<class Type>
           Foam::tmp<Foam::fvMatrix<Type>> Foam::fv::optionList::source
           (
               GeometricField<Type, fvPatchField, volMesh>& field,
               const word& fieldName,
               const dimensionSet& ds
           )
           {
               checkApplied();
           
               tmp<fvMatrix<Type>> tmtx(new fvMatrix<Type>(field, ds));
               fvMatrix<Type>& mtx = tmtx.ref();
           
               forAll(*this, i)
               {
                   option& source = this->operator[](i);
           
                   label fieldi = source.applyToField(fieldName);
           
                   if (fieldi != -1)
                   {
                       source.setApplied(fieldi);
           
                       if (source.isActive())
                       {
                           if (debug)
                           {
                               Info<< "Applying source " << source.name() << " to field "
                                   << fieldName << endl;
                           }
           
                           source.addSup(mtx, fieldi);
                       }
                   }
               }
           
               return tmtx;
           }
           
          
          C 1 Reply Last reply Reply Quote
          • C
            chaoscfd @Cr last edited by

            @Cr 原来是在这里啊,感谢感谢!

            1 Reply Last reply Reply Quote
            • First post
              Last post

            CFD中文网 | 东岳流体 | 京ICP备15017992号-2