idaholab / moose

Multiphysics Object Oriented Simulation Environment
https://www.mooseframework.org
GNU Lesser General Public License v2.1
1.77k stars 1.05k forks source link

Add ability to output detailed information about a MeshGenerator #16783

Closed loganharbour closed 3 years ago

loganharbour commented 3 years ago

Reason

It would be useful to know detailed information about meshes that are generated by a MeshGenerator. Information like the bounding box, sidesets, nodesets, subdomains, etc.

Design

Add a show_info parameter (name tbd) to MeshGenerator that prints this information.

Impact

Will help with debugging mesh generation using MeshGenerators.

WilkAndy commented 3 years ago

I like this idea. Off the top of my head, it might be nice to have a hierarchy of info, eg, for the overall mesh, what are number of eles and nodes, but also, for each subdomain, what are its number of eles and nodes. OK, that was poor grammar, but i hope you understand!

loganharbour commented 3 years ago

Absolutely! This is the kind of information I've got so far (formatting/titles/etc still a WIP):

Detailed information for the mesh generated by ParsedGenerateSideset "interior":

 Mesh Information:
  elem_dimensions()={2}
  spatial_dimension()=2
  n_nodes()=117
    n_local_nodes()=117
  n_elem()=144
    n_local_elem()=144
    n_active_elem()=144
  n_subdomains()=4
  n_partitions()=1
  n_processors()=1
  n_threads()=1
  processor_id()=0

 Mesh Global Bounding Box:
  Minimum: (x,y,z)=(       0,       -1,        0)
  Maximum: (x,y,z)=(       3,        1,        0)

 Mesh Element Type(s):
  TRI3, QUAD4

 Mesh Sidesets:
  0 (bottom), 12 sides (EDGE2), 12 elems (TRI3, QUAD4), 13 nodes, side volume = 3
   Bounding box minimum: (x,y,z)=(       0,       -1,        0)
   Bounding box maximum: (x,y,z)=(       3,       -1,        0)
  1 (right), 8 sides (EDGE2), 8 elems (QUAD4), 9 nodes, side volume = 2
   Bounding box minimum: (x,y,z)=(       3,       -1,        0)
   Bounding box maximum: (x,y,z)=(       3,        1,        0)
  2 (top), 12 sides (EDGE2), 12 elems (TRI3, QUAD4), 13 nodes, side volume = 3
   Bounding box minimum: (x,y,z)=(       0,        1,        0)
   Bounding box maximum: (x,y,z)=(       3,        1,        0)
  3 (left), 8 sides (EDGE2), 8 elems (TRI3, QUAD4), 9 nodes, side volume = 2
   Bounding box minimum: (x,y,z)=(       0,       -1,        0)
   Bounding box maximum: (x,y,z)=(       0,        1,        0)
  4 (interior), 8 sides (EDGE2), 8 elems (TRI3, QUAD4), 9 nodes, side volume = 2
   Bounding box minimum: (x,y,z)=(       1,       -1,        0)
   Bounding box maximum: (x,y,z)=(       1,        1,        0)

 Mesh Subdomains:
  Subdomain 0 (bottom): 24 elems (QUAD4), 42 nodes, volume = 1.5
   Bounding box minimum: (x,y,z)=(       0,       -1,        0)
   Bounding box maximum: (x,y,z)=(     2.5,        1,        0)
  Subdomain 1 (right): 24 elems (QUAD4), 42 nodes, volume = 1.5
   Bounding box minimum: (x,y,z)=(     0.5,       -1,        0)
   Bounding box maximum: (x,y,z)=(       3,        1,        0)
  Subdomain 2 (top): 48 elems (TRI3), 42 nodes, volume = 1.5
   Bounding box minimum: (x,y,z)=(       0,     -0.5,        0)
   Bounding box maximum: (x,y,z)=(       2,        1,        0)
  Subdomain 3 (left): 48 elems (TRI3), 42 nodes, volume = 1.5
   Bounding box minimum: (x,y,z)=(       0,       -1,        0)
   Bounding box maximum: (x,y,z)=(       2,      0.5,        0)

If anything else comes to mind that's not included above - let me know.