Input Mesh Format for SFC
Steps to create an input shell mesh to be used in the SFC code:
(1) Use any mesher (such as gmsh) to create a triangulation of the domain of interest.
(2) Convert the triangulation into the following smf -- simple mesh format:
number of nodes number of elements
coordinates x y z
.
.
.
connectivity i j k
.
.
.
It is important that the node numbering starts with 0 and not 1.
There is already a conversion code from gmsh to smf format in sfc/shells/filters/gmsh2smf.cc available.
Example of an smf file that contains 2 triangles sharing an edge (sharing 2 nodes):
4 2
0.0 0.0 0.0
0.0 1.0 0.0
1.0 0.0 0.0
1.0 1.0 0.0
3 0 2
0 1 2
The first line has the number of nodes followed by the number of elements
The second line is the coordinates for node number 0
...
The fifth line is the coordinates for node number 3
The sixth line is the connectivity of the first element
The seventh line is the connectivity of the second element
(3) A proper input mesh for SFC needs to be (at least) once subdivided by quadrisection. There is a stand-alone subdivision code available in the sfc/shells/subdiv/ directory. This code can be easily adjusted to allow different levels and types of subdivision by modifying
SampleMain?.cc driver. The
AveragingLoop?<> functor implements the classical Loop subdivision scheme and the
AveragingBasic?<> functor implements basic linear averaging. In practical terms modifying
SampleMain?.cc involves only commenting or uncommenting the proper lines.
(4) After compiling the stand-alone subdivision code, run the executable using your mesh created in step 2 as input. For example, if the executable is called subdiv then run as follows:
subdiv < input.smf > outputSubdivided.smf
(5) Now you are ready to use outputSubdivided.smf as an input for the sfc code!
--
TamerElsayed