gmsh中physics group的源代码
时间: 2023-10-24 07:13:54 浏览: 138
复合 材料 的 GMSH 代码_GLSL_代码_下载
以下是Gmsh中关于物理组(physics group)的源代码:
在Gmsh源代码中,物理组的定义位于GModel.hxx和GModel.cc文件中。以下是GModel.hxx文件中相关部分的代码:
```
class GModel {
public:
...
// Physical groups
int addPhysicalGroup(int dim, std::vector<size_t> tags, std::string name);
int addPhysicalGroup(int dim, size_t tag, std::string name);
void removePhysicalGroup(int dim, size_t tag);
void removePhysicalGroup(int dim, std::string name);
std::string getPhysicalGroupName(int dim, size_t tag) const;
int getPhysicalGroupTag(int dim, std::string name) const;
std::vector<size_t> getPhysicalGroup(int dim, std::string name) const;
std::vector<std::string> getPhysicalGroupNames(int dim) const;
std::vector<size_t> getPhysicalGroups(int dim) const;
void clearPhysicalGroups();
...
};
```
上述代码中,addPhysicalGroup()函数用于创建一个新的物理组,removePhysicalGroup()函数用于删除一个物理组,getPhysicalGroupName()函数用于获取指定物理组的名称,getPhysicalGroupTag()函数用于获取指定物理组的标签,getPhysicalGroup()函数用于获取指定维度和名称的物理组,getPhysicalGroupNames()函数用于获取指定维度下所有物理组的名称,getPhysicalGroups()函数用于获取指定维度下所有物理组的标签,clearPhysicalGroups()函数用于清空所有物理组。
在GModel.cc文件中,物理组的实现位于GModel::addPhysicalGroup()、GModel::removePhysicalGroup()、GModel::getPhysicalGroupName()、GModel::getPhysicalGroupTag()、GModel::getPhysicalGroup()、GModel::getPhysicalGroupNames()和GModel::getPhysicalGroups()等函数中。
例如,以下是GModel::addPhysicalGroup()函数的实现:
```
int GModel::addPhysicalGroup(int dim, std::vector<size_t> tags, std::string name)
{
if(tags.empty()) return -1;
std::set<size_t> stags(tags.begin(), tags.end());
if(stags.size() != tags.size()) {
Msg::Warning("Duplicate tags in physical group");
return -1;
}
if(name.empty()) {
Msg::Warning("Empty name for physical group");
return -1;
}
for(size_t i = 0; i < tags.size(); i++) {
if(!isEntity(dim, tags[i])) {
Msg::Warning("Invalid tag in physical group");
return -1;
}
}
int tag = getNextTag(1);
GPhysicalGroup *p = new GPhysicalGroup(this, name, dim, tag);
p->setTags(tags);
m_physicalGroups[std::make_pair(dim,tag)] = p;
return tag;
}
```
上述代码中,首先判断所传入的实体标签是否为空,如果为空则返回-1。然后将标签存入set容器中,判断set的大小是否等于原始标签的大小,如果不等则表示有重复标签,返回-1。接着判断传入的名称是否为空,如果为空则返回-1。然后遍历标签,判断是否为指定维度的实体,如果不是则返回-1。最后生成新的物理组对象并将其存入物理组map中,返回物理组的标签。
阅读全文