Triangulations 意为域的子域
等同于mesh,储存了cell
Triangulation类是cell的集合,cell即FEM中的element
大体是先定义triangulation,再使用GridGenerator::hyper_cube生成,其中refine_global这里是设置为4,意思是把每个方框都四分一下。即2D下一个方形分为4个方形,3D下一个立方对应的是分成8个小立方。后续可以通过grid out输出。
hypershell是定义两个圆形之间的区域
如果需要循环Triangulation里面的cell,则需要以下语句
Triangulation<2>::active_cell_iterator //你可以当作用指针指向cell,active意思是遍历那些active的cell,如果没有active就是遍历所有的
cell=triangulation.begin_active, //第一个cell
endc=triangulation.end() //最后一个cell
for (;cell!endc; ++cell)
for (unsigned int v=0;
v < GeometryInfo<2>::vertices_per_cell; //GeometryInfo<2>::vertices_per_cell储存了每个cell的vertices数量,此处值为0到4,GeometryInfo<3>的值便是8,这里用于遍历该cell的所有vertices
++v)
{
....
}
cell->vertex(v)得到该vertex的坐标。
默认下,deal.ii所有边界的indicator都是0
HyperShellBoundary定义了hypershell的边界,这样在refine的时候,这个例子下的dealii变知道了这是在圆上refine,而不是在这个方形边的线段中间取vertice
set_Boundary 后的第一个变量0即是定义indicator
for (auto cell: triangulation.active_cell_iterators())
if (cell->center()[1] > 0)
cell->set_refine_flag ();
这种语句可以只针对y坐标大于0的cell进行refine,如果[0]则表示x坐标
在Triangulation的最后,需要triangulation.reset_manifold(0);,用来清除定义Triangulation时定义的它。