CFD中文网

    CFD中文网

    • 登录
    • 搜索
    • 最新
    1. 主页
    2. Samuel-Tu
    S
    • 资料
    • 关注 1
    • 粉丝 8
    • 主题 104
    • 帖子 438
    • 群组 0

    Samuel-Tu

    @Samuel-Tu

    270
    资料浏览
    438
    帖子
    8
    粉丝
    1
    关注
    注册时间 最后登录

    Samuel-Tu 取消关注 关注

    Samuel-Tu 发布的最佳帖子

    • 层流RTS调用机制简析(以simpleFoam为例)

      注意到simpleFoam源码的createField.H中含有一行代码:

      singlePhaseTransportModel laminarTransport(U, phi);
      

      将类singlePhaseTransportModel实例化为laminarTransport,并且传给构造函数两个参数U和phi。
      在simpleFoam.C中找到了#include "singlePhaseTransportModel.H"。类singlePhaseTransportModel很有可能在里面定义,因此进入singlePhaseTransportModel.H。
      其路径为$FOAM_SRC/transportModels/incompressible/singlePhaseTransportModel/singlePhaseTransportModel.H,发现类singlePhaseTransportModel,及其构造函数的声明。因此进入singlePhaseTransportModel.C中查看其定义。

      Foam::singlePhaseTransportModel::singlePhaseTransportModel
      (
          const volVectorField& U,
          const surfaceScalarField& phi
      )
      :
          IOdictionary
          (
              IOobject
              (
                  "transportProperties",
                  U.time().constant(),
                  U.db(),
                  IOobject::MUST_READ_IF_MODIFIED,
                  IOobject::NO_WRITE
              )
          ),
          viscosityModelPtr_(viscosityModel::New("nu", *this, U, phi))
      {}
      

      在类singlePhaseTransportModel构造前,先建立了读取constant/transportProperties的字典,并用
      viscosityModel::New返回了一个叫viscosityModelPtr_的指针。
      因此需要查看viscosityModel::New的定义。路径为$FOAM_SRC/transportModels/incompressible/viscosityModels/viscosityModel/viscosityModelNew.C。相关代码如下:

      Foam::autoPtr<Foam::viscosityModel> Foam::viscosityModel::New
      (
          const word& name,
          const dictionary& viscosityProperties,
          const volVectorField& U,
          const surfaceScalarField& phi
      )
      {
          const word modelType(viscosityProperties.lookup("transportModel"));
      
          Info<< "Selecting incompressible transport model " << modelType << endl;
      
          auto cstrIter = dictionaryConstructorTablePtr_->cfind(modelType);
      
          if (!cstrIter.found())
          {
              FatalErrorInFunction
                  << "Unknown viscosityModel type "
                  << modelType << nl << nl
                  << "Valid viscosityModels :" << endl
                  << dictionaryConstructorTablePtr_->sortedToc()
                  << exit(FatalError);
          }
      
          return autoPtr<viscosityModel>
              (cstrIter()(name, viscosityProperties, U, phi));
      }
      

      此函数本质是在contant/transportProperties文件中查询关键字transportModel对应的值(以Newtonian为例),并在哈希表中查看是否存在这个Newtonian。返回Newtonian在哈希表中对应的值。以我目前的学习经验来看,这个对应值应该是类Newtonian的一个临时对象,并用cstrIter()(name, viscosityProperties, U, phi)括号里的参数进行了初始化。因此需要找到类Newtonian的构造函数。路径为:$FOAM_SRC/transportModels/incompressible/viscosityModels/Newtonian/Newtonian.C

      Foam::viscosityModels::Newtonian::Newtonian
      (
          const word& name,
          const dictionary& viscosityProperties,
          const volVectorField& U,
          const surfaceScalarField& phi
      )
      :
          viscosityModel(name, viscosityProperties, U, phi),
          nu0_("nu", dimViscosity, viscosityProperties_),
          nu_
          (
              IOobject
              (
                  name,
                  U_.time().timeName(),
                  U_.db(),
                  IOobject::NO_READ,
                  IOobject::NO_WRITE
              ),
              U_.mesh(),
              nu0_
          )
      {}
      

      在构造类Newtonian时先构造了类viscosityModel。注意到类viscosityModel是类Newtonian的一个父类。因此需要找到类viscosityModel的构造函数。路径为:$FOAM_SRC/transportModels/incompressible/viscosityModels/viscosityModel/viscosityModel.C

      Foam::viscosityModel::viscosityModel
      (
          const word& name,
          const dictionary& viscosityProperties,
          const volVectorField& U,
          const surfaceScalarField& phi
      )
      :
          name_(name),
          viscosityProperties_(viscosityProperties),
          U_(U),
          phi_(phi)
      {}
      

      类viscosityModel的构造函数实际是将形参用于name_,viscosityProperties_,U_和phi_初始化了。这里的viscosityProperties_由于被类Newtonian继承,在类Newtonian的构造函数中可以看见nu0_使用了viscosityProperties_进行初始化。而viscosityProperties_的本质实际就是

       IOdictionary
          (
              IOobject
              (
                  "transportProperties",
                  U.time().constant(),
                  U.db(),
                  IOobject::MUST_READ_IF_MODIFIED,
                  IOobject::NO_WRITE
              )
          ),
      

      返回看nu0_的初始化:

      nu0_("nu", dimViscosity, viscosityProperties_)
      

      实际是读取constant/transportProperties文件里的nu关键字对应的dimensionedScalar。
      而nu_

          nu_
          (
              IOobject
              (
                  name,
                  U_.time().timeName(),
                  U_.db(),
                  IOobject::NO_READ,
                  IOobject::NO_WRITE
              ),
              U_.mesh(),
              nu0_
          )
      

      nu_则是以nu0_这个dimensionedScalar构建了一个volScalarField。

      发布在 OpenFOAM
      S
      Samuel-Tu
    • RE: nearestPoint的问题

      此贴基本完结,按着源代码琢磨了一下午,基本弄清楚了是如何计算的。nearestPoint()主要使用了实时碰撞检测算法,可以计算出网格中心点到一个面的最短距离。这个最短距离是通过寻找面上离网格中心点的最近点来计算的。等我过段时间总结好了,到时候再补充到这个贴子下面。

      发布在 OpenFOAM
      S
      Samuel-Tu
    • RE: of1806中的epsilonWallFunction是否合并了LowRe的模型?

      在头文件找到了描述:The low-Re correction is activated by setting the entry lowReCorrection to 'on'; in this mode the model switches between laminar and turbulent functions based on the laminar-to-turbulent y+ value derived from kappa and E. When the lowReCorrection is inactive, the wall function operates in high-Re mode.可能是在constant文件里使用这epsilonWallFunction的时候能够选择打不打开LowRe

      发布在 OpenFOAM
      S
      Samuel-Tu

    Samuel-Tu 发布的最新帖子

    • RE: 初始速度场给定

      用codeStream

      发布在 OpenFOAM
      S
      Samuel-Tu
    • bluecfd编译巨慢

      自从bluecfd更新后,现在很喜欢用bluecfd,原因在于可以在windows上面使用。没办法windows系统上word,ppt需要用的太多了,用同一个系统比较方便。。就是发现Bluecfd编译太慢了,如果我用codedFixedValue这样的边界条件,bluecfd就得编译个一分钟才开始算。而在ubuntu上面,也就十秒多。。哎,这一点还挺让人不爽的。。

      发布在 OpenFOAM
      S
      Samuel-Tu
    • RE: 阿里云ECS初体验

      @cccrrryyy 现在没用ECS了。。回课题组有电脑咯。。。感觉还是得找天河这类专业的超算来算东西。。

      发布在 OpenFOAM
      S
      Samuel-Tu
    • OpenFOAM的2D网格能够转成fluent2D网格吗

      由于OpenFOAM 2D网格实际是伪三维网格,有empty边界。而fluent网格就是真的2D网格。。。能不能把OF的伪三维网格,直接转换成fluent能够识别的2D网格呢?

      发布在 OpenFOAM
      S
      Samuel-Tu
    • RE: 请教关于浸入边界法的问题,IBM方法的问题

      @oitocfd :143:

      发布在 OpenFOAM
      S
      Samuel-Tu
    • RE: 请教关于浸入边界法的问题,IBM方法的问题

      @oitocfd 最近有参加第一届涡激振动前沿国际学术研讨会吗

      发布在 OpenFOAM
      S
      Samuel-Tu
    • RE: 请教关于浸入边界法的问题,IBM方法的问题

      @五好青年 我参考的文献:Ji C, Munjiza A, Williams J J R. A novel iterative direct-forcing immersed boundary method and its finite volume applications[J]. Journal of Computational Physics, 2012, 231(4): 1797-1821.
      代码暂不开源。。
      QQ就不用加了。。现在不做这块了。。

      发布在 OpenFOAM
      S
      Samuel-Tu
    • RE: blueCFD并行计算

      @samuel-tu 用Ubuntu系统,四个物理核心,8个超线程。开四核并行计算的时候,cpu利用率是50%,开8核并行的时候,CPU利用率是96%。但是八核比四核还慢了一点点。。。搞不懂了。。

      发布在 OpenFOAM
      S
      Samuel-Tu
    • RE: blueCFD并行计算

      @李东岳 我在双系统Ubuntu上面试了一下,那台电脑物理核心是4核,算上超线程是8核,还真能用8核并行。。。看来是我记错了。。

      发布在 OpenFOAM
      S
      Samuel-Tu
    • RE: blueCFD并行计算

      @oitocfd 哎,看起来bluecfd还挺好用的,可惜的是我的习惯是com版本的。bluecfd是根据org版本开发的。。有时候命令不一样,用起来挺难受的

      发布在 OpenFOAM
      S
      Samuel-Tu