在不同的block中设置不同的物性参数
-
我最终的目的是希望在不同的区域设置不同的扩散系数. 为了实现这个, 我觉得首先要识别区域, 因此想要参考已有的求解器中如何识别区域的. 在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) ); } } }
但是我还是没有看出来是如何识别多孔区域的. 求大神给解释一下