RinglebMesh

Overview

This mesh can be applied to a Ringleb problem. This problem tests the spatial accuracy of high-order methods. The flow is transonic and smooth. The geometry is also smooth, and high-order curved boundary representation appears to be critical.

Governing Equations

The governing equations are the 2D Euler equations with .

Geometry

Let be a streamline parameter, i.e., on each streamline. The two stream lines for the two wall boundaries are for the inner wall, and for the outer wall. Let be the velocity magnitude. For each fixed , , the variable varies between and . For each , define the speed of sound , density , pressure , and a quantity denoted by by:

For each pair , set:

Mesh Overlook

For example, let's consider the following input file:


[Mesh]
  type = RinglebMesh
  kmin = 0.7
  num_k_pts = 9
  num_q_pts = 20
  kmax = 1.2
  n_extra_q_pts = 2
  gamma = 1.4
  triangles = true
[]

The corresponding mesh looks like this:

Further RinglebMesh Documentation

Input Parameters

  • gammaGamma parameter

    C++ Type:double

    Controllable:No

    Description:Gamma parameter

  • kmaxValue of k on the inner wall.

    C++ Type:double

    Controllable:No

    Description:Value of k on the inner wall.

  • kminValue of k on the outer wall.

    C++ Type:double

    Controllable:No

    Description:Value of k on the outer wall.

  • n_extra_q_ptsHow many 'extra' points should be inserted in the final element *in addition to* the equispaced q points.

    C++ Type:int

    Controllable:No

    Description:How many 'extra' points should be inserted in the final element *in addition to* the equispaced q points.

  • num_k_ptsHow many points in the range k=(kmin, kmax).

    C++ Type:int

    Controllable:No

    Description:How many points in the range k=(kmin, kmax).

  • num_q_ptsHow many points to discretize the range q = (0.5, k) into.

    C++ Type:int

    Controllable:No

    Description:How many points to discretize the range q = (0.5, k) into.

Required Parameters

  • add_subdomain_idsThe listed subdomains will be assumed valid for the mesh. This permits setting up subdomain restrictions for subdomains initially containing no elements, which can occur, for example, in additive manufacturing simulations which dynamically add and remove elements.

    C++ Type:std::vector<unsigned short>

    Controllable:No

    Description:The listed subdomains will be assumed valid for the mesh. This permits setting up subdomain restrictions for subdomains initially containing no elements, which can occur, for example, in additive manufacturing simulations which dynamically add and remove elements.

  • allow_renumberingTrueIf allow_renumbering=false, node and element numbers are kept fixed until deletion

    Default:True

    C++ Type:bool

    Controllable:No

    Description:If allow_renumbering=false, node and element numbers are kept fixed until deletion

  • build_all_side_lowerd_meshFalseTrue to build the lower-dimensional mesh for all sides.

    Default:False

    C++ Type:bool

    Controllable:No

    Description:True to build the lower-dimensional mesh for all sides.

  • coord_blockBlock IDs for the coordinate systems. If this parameter is specified, then it must encompass all the subdomains on the mesh.

    C++ Type:std::vector<SubdomainName>

    Controllable:No

    Description:Block IDs for the coordinate systems. If this parameter is specified, then it must encompass all the subdomains on the mesh.

  • ghosting_patch_sizeThe number of nearest neighbors considered for ghosting purposes when 'iteration' patch update strategy is used. Default is 5 * patch_size.

    C++ Type:unsigned int

    Controllable:No

    Description:The number of nearest neighbors considered for ghosting purposes when 'iteration' patch update strategy is used. Default is 5 * patch_size.

  • inflow_bid1The boundary id to use for the inflow

    Default:1

    C++ Type:short

    Controllable:No

    Description:The boundary id to use for the inflow

  • inner_wall_bid2The boundary id to use for the inner wall

    Default:2

    C++ Type:short

    Controllable:No

    Description:The boundary id to use for the inner wall

  • max_leaf_size10The maximum number of points in each leaf of the KDTree used in the nearest neighbor search. As the leaf size becomes larger,KDTree construction becomes faster but the nearest neighbor searchbecomes slower.

    Default:10

    C++ Type:unsigned int

    Controllable:No

    Description:The maximum number of points in each leaf of the KDTree used in the nearest neighbor search. As the leaf size becomes larger,KDTree construction becomes faster but the nearest neighbor searchbecomes slower.

  • outer_wall_bid4The boundary id to use for the outer wall

    Default:4

    C++ Type:short

    Controllable:No

    Description:The boundary id to use for the outer wall

  • outflow_bid3The boundary id to use for the outflow

    Default:3

    C++ Type:short

    Controllable:No

    Description:The boundary id to use for the outflow

  • parallel_typeDEFAULTDEFAULT: Use libMesh::ReplicatedMesh unless --distributed-mesh is specified on the command line REPLICATED: Always use libMesh::ReplicatedMesh DISTRIBUTED: Always use libMesh::DistributedMesh

    Default:DEFAULT

    C++ Type:MooseEnum

    Options:DEFAULT, REPLICATED, DISTRIBUTED

    Controllable:No

    Description:DEFAULT: Use libMesh::ReplicatedMesh unless --distributed-mesh is specified on the command line REPLICATED: Always use libMesh::ReplicatedMesh DISTRIBUTED: Always use libMesh::DistributedMesh

  • skip_refine_when_use_splitTrueTrue to skip uniform refinements when using a pre-split mesh.

    Default:True

    C++ Type:bool

    Controllable:No

    Description:True to skip uniform refinements when using a pre-split mesh.

  • trianglesFalseIf true, all the quadrilateral elements will be split into triangles

    Default:False

    C++ Type:bool

    Controllable:No

    Description:If true, all the quadrilateral elements will be split into triangles

Optional Parameters

  • alpha_rotationThe number of degrees that the domain should be alpha-rotated using the Euler angle ZXZ convention from https://en.wikipedia.org/wiki/Euler_angles#Rotation_matrix in order to align with a canonical physical space of your choosing.

    C++ Type:double

    Controllable:No

    Description:The number of degrees that the domain should be alpha-rotated using the Euler angle ZXZ convention from https://en.wikipedia.org/wiki/Euler_angles#Rotation_matrix in order to align with a canonical physical space of your choosing.

  • beta_rotationThe number of degrees that the domain should be beta-rotated using the Euler angle ZXZ convention from https://en.wikipedia.org/wiki/Euler_angles#Rotation_matrix in order to align with a canonical physical space of your choosing.

    C++ Type:double

    Controllable:No

    Description:The number of degrees that the domain should be beta-rotated using the Euler angle ZXZ convention from https://en.wikipedia.org/wiki/Euler_angles#Rotation_matrix in order to align with a canonical physical space of your choosing.

  • gamma_rotationThe number of degrees that the domain should be gamma-rotated using the Euler angle ZXZ convention from https://en.wikipedia.org/wiki/Euler_angles#Rotation_matrix in order to align with a canonical physical space of your choosing.

    C++ Type:double

    Controllable:No

    Description:The number of degrees that the domain should be gamma-rotated using the Euler angle ZXZ convention from https://en.wikipedia.org/wiki/Euler_angles#Rotation_matrix in order to align with a canonical physical space of your choosing.

  • length_unitHow much distance one mesh length unit represents, e.g. 1 cm, 1 nm, 1 ft, 5inches

    C++ Type:std::string

    Controllable:No

    Description:How much distance one mesh length unit represents, e.g. 1 cm, 1 nm, 1 ft, 5inches

  • up_directionSpecify what axis corresponds to the up direction in physical space (the opposite of the gravity vector if you will). If this parameter is provided, we will perform a single 90 degree rotation of the domain--if the provided axis is 'x' or 'z', we will not rotate if the axis is 'y'--such that a point which was on the provided axis will now lie on the y-axis, e.g. the y-axis is our canonical up direction. If you want finer grained control than this, please use the 'alpha_rotation', 'beta_rotation', and 'gamma_rotation' parameters.

    C++ Type:MooseEnum

    Options:X, Y, Z

    Controllable:No

    Description:Specify what axis corresponds to the up direction in physical space (the opposite of the gravity vector if you will). If this parameter is provided, we will perform a single 90 degree rotation of the domain--if the provided axis is 'x' or 'z', we will not rotate if the axis is 'y'--such that a point which was on the provided axis will now lie on the y-axis, e.g. the y-axis is our canonical up direction. If you want finer grained control than this, please use the 'alpha_rotation', 'beta_rotation', and 'gamma_rotation' parameters.

Transformations Relative To Parent Application Frame Of Reference Parameters

  • coord_typeXYZType of the coordinate system per block param

    Default:XYZ

    C++ Type:MultiMooseEnum

    Options:XYZ, RZ, RSPHERICAL

    Controllable:No

    Description:Type of the coordinate system per block param

  • rz_coord_axisYThe rotation axis (X | Y) for axisymmetric coordinates

    Default:Y

    C++ Type:MooseEnum

    Options:X, Y

    Controllable:No

    Description:The rotation axis (X | Y) for axisymmetric coordinates

  • rz_coord_blocksBlocks using general axisymmetric coordinate systems

    C++ Type:std::vector<SubdomainName>

    Controllable:No

    Description:Blocks using general axisymmetric coordinate systems

  • rz_coord_directionsAxis directions for each block in 'rz_coord_blocks'

    C++ Type:std::vector<libMesh::VectorValue<double>>

    Controllable:No

    Description:Axis directions for each block in 'rz_coord_blocks'

  • rz_coord_originsAxis origin points for each block in 'rz_coord_blocks'

    C++ Type:std::vector<libMesh::Point>

    Controllable:No

    Description:Axis origin points for each block in 'rz_coord_blocks'

Coordinate System Parameters

  • centroid_partitioner_directionSpecifies the sort direction if using the centroid partitioner. Available options: x, y, z, radial

    C++ Type:MooseEnum

    Options:x, y, z, radial

    Controllable:No

    Description:Specifies the sort direction if using the centroid partitioner. Available options: x, y, z, radial

  • partitionerdefaultSpecifies a mesh partitioner to use when splitting the mesh for a parallel computation.

    Default:default

    C++ Type:MooseEnum

    Options:default, metis, parmetis, linear, centroid, hilbert_sfc, morton_sfc

    Controllable:No

    Description:Specifies a mesh partitioner to use when splitting the mesh for a parallel computation.

Partitioning Parameters

  • construct_node_list_from_side_listTrueWhether or not to generate nodesets from the sidesets (usually a good idea).

    Default:True

    C++ Type:bool

    Controllable:No

    Description:Whether or not to generate nodesets from the sidesets (usually a good idea).

  • control_tagsAdds user-defined labels for accessing object parameters via control logic.

    C++ Type:std::vector<std::string>

    Controllable:No

    Description:Adds user-defined labels for accessing object parameters via control logic.

  • dim1This is only required for certain mesh formats where the dimension of the mesh cannot be autodetected. In particular you must supply this for GMSH meshes. Note: This is completely ignored for ExodusII meshes!

    Default:1

    C++ Type:MooseEnum

    Options:1, 2, 3

    Controllable:No

    Description:This is only required for certain mesh formats where the dimension of the mesh cannot be autodetected. In particular you must supply this for GMSH meshes. Note: This is completely ignored for ExodusII meshes!

  • enableTrueSet the enabled status of the MooseObject.

    Default:True

    C++ Type:bool

    Controllable:No

    Description:Set the enabled status of the MooseObject.

  • nemesisFalseIf nemesis=true and file=foo.e, actually reads foo.e.N.0, foo.e.N.1, ... foo.e.N.N-1, where N = # CPUs, with NemesisIO.

    Default:False

    C++ Type:bool

    Controllable:No

    Description:If nemesis=true and file=foo.e, actually reads foo.e.N.0, foo.e.N.1, ... foo.e.N.N-1, where N = # CPUs, with NemesisIO.

  • patch_size40The number of nodes to consider in the NearestNode neighborhood.

    Default:40

    C++ Type:unsigned int

    Controllable:No

    Description:The number of nodes to consider in the NearestNode neighborhood.

  • patch_update_strategyneverHow often to update the geometric search 'patch'. The default is to never update it (which is the most efficient but could be a problem with lots of relative motion). 'always' will update the patch for all secondary nodes at the beginning of every timestep which might be time consuming. 'auto' will attempt to determine at the start of which timesteps the patch for all secondary nodes needs to be updated automatically.'iteration' updates the patch at every nonlinear iteration for a subset of secondary nodes for which penetration is not detected. If there can be substantial relative motion between the primary and secondary surfaces during the nonlinear iterations within a timestep, it is advisable to use 'iteration' option to ensure accurate contact detection.

    Default:never

    C++ Type:MooseEnum

    Options:never, always, auto, iteration

    Controllable:No

    Description:How often to update the geometric search 'patch'. The default is to never update it (which is the most efficient but could be a problem with lots of relative motion). 'always' will update the patch for all secondary nodes at the beginning of every timestep which might be time consuming. 'auto' will attempt to determine at the start of which timesteps the patch for all secondary nodes needs to be updated automatically.'iteration' updates the patch at every nonlinear iteration for a subset of secondary nodes for which penetration is not detected. If there can be substantial relative motion between the primary and secondary surfaces during the nonlinear iterations within a timestep, it is advisable to use 'iteration' option to ensure accurate contact detection.

Advanced Parameters