Skip to content
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠
CFD中文网

CFD中文网

  1. CFD中文网
  2. OpenFOAM
  3. 在不同的block中设置不同的物性参数

在不同的block中设置不同的物性参数

已定时 已固定 已锁定 已移动 OpenFOAM
2 帖子 1 发布者 2.2k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • K 离线
    K 离线
    kdfluxit
    写于 最后由 编辑
    #1

    我最终的目的是希望在不同的区域设置不同的扩散系数. 为了实现这个, 我觉得首先要识别区域, 因此想要参考已有的求解器中如何识别区域的. 在porousSimpleFoam的算例中有几个angledDuct的例子, 这几个例子里面在blockMeshDict 里面设置了三个区域: 分别命名为“inlet”, “porosity”, “outlet”. 我猜测porousSimpleFoam是通过名称来识别区域, 并确定是否添加多孔介质源项的. 因此, 我又查看了porousSimpleFoam求解器源代码里面: createPorousZones.H, 这里面有一句

    IOporosityModelList pZones(mesh);
    

    我又查看了IOporosityModelList的构造函数

    Foam::porosityModelList::porosityModelList
     (
         const fvMesh& mesh,
         const dictionary& dict
     )
     :
         PtrList<porosityModel>(),
         mesh_(mesh)
     {
         reset(dict);
         active(true);
     }
    

    里面用到了 reset()和active()两个函数来构造
    这两个函数的代码如下

     bool Foam::porosityModelList::active(const bool warn) const
     {
         bool anyOk = false;
         forAll(*this, i)
         {
             anyOk = anyOk || this->operator[](i).active();
         }
      
         if (warn && this->size() && !anyOk)
         {
             Info<< "No porosity models active" << endl;
         }
      
         return anyOk;
     }
      
      
     void Foam::porosityModelList::reset(const dictionary& dict)
     {
         label count = 0;
         for (const entry& dEntry : dict)
         {
             if (dEntry.isDict())
             {
                 ++count;
             }
         }
      
         this->resize(count);
      
         count = 0;
         for (const entry& dEntry : dict)
         {
             if (dEntry.isDict())
             {
                 const word& name = dEntry.keyword();
                 const dictionary& modelDict = dEntry.dict();
      
                 this->set
                 (
                     count++,
                     porosityModel::New(name, mesh_, modelDict)
                 );
             }
         }
     }
    

    但是我还是没有看出来是如何识别多孔区域的. 求大神给解释一下

    1 条回复 最后回复
  • K 离线
    K 离线
    kdfluxit
    写于 最后由 编辑
    #2

    自问自答一波:
    我现在感觉好像是检查constant/porosityProperties 文件里面的字典. 只要里面存在字典 cellZone(键) 对应的 name_(值)的block就被当作是多孔介质, 然后通过

    cellZoneID = mesh.cellZone().indices(name_)
    

    这个函数来确认该区域的ID
    上述内容是在
    porosityModel.H porosityModel.C中感觉到的.但是没有找到实质的证据.

    1 条回复 最后回复

  • 登录

  • 登录或注册以进行搜索。
  • 第一个帖子
    最后一个帖子
0
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]