IOSS 2.0
Loading...
Searching...
No Matches
Iogs::GeneratedMesh Class Reference

#include <Iogs_GeneratedMesh.h>

Public Types

enum  ShellLocation {
  MX = 0 , PX = 1 , MY = 2 , PY = 3 ,
  MZ = 4 , PZ = 5
}
 

Public Member Functions

 GeneratedMesh (const std::string &parameters, int proc_count=1, int my_proc=0)
 
 GeneratedMesh (int64_t num_x, int64_t num_y, int64_t num_z, int proc_count=1, int my_proc=0)
 
 GeneratedMesh ()
 
virtual ~GeneratedMesh ()=default
 
int64_t add_sideset (ShellLocation loc)
 
void set_scale (double scl_x, double scl_y, double scl_z)
 
void set_offset (double off_x, double off_y, double off_z)
 
void set_bbox (double xmin, double ymin, double zmin, double xmax, double ymax, double zmax)
 
void set_rotation (const std::string &axis, double angle_degrees)
 
virtual IOSS_NODISCARD int64_t node_count () const
 
virtual IOSS_NODISCARD int64_t node_count_proc () const
 
virtual IOSS_NODISCARD int64_t structured_block_count () const
 
virtual IOSS_NODISCARD int64_t sideset_count () const
 
IOSS_NODISCARD int64_t sideset_side_count (int64_t id) const
 
virtual IOSS_NODISCARD int64_t sideset_side_count_proc (int64_t id) const
 
IOSS_NODISCARD Ioss::IJK_t block_range (int64_t) const
 
IOSS_NODISCARD Ioss::IJK_t block_range_proc (int64_t id) const
 
IOSS_NODISCARD Ioss::IJK_t block_offset_proc (int64_t id) const
 
virtual IOSS_NODISCARD int64_t element_count () const
 
IOSS_NODISCARD int64_t element_count_proc () const
 
IOSS_NODISCARD int64_t timestep_count () const
 
virtual IOSS_NODISCARD int64_t element_count (int64_t block_number) const
 
IOSS_NODISCARD int64_t element_count_proc (int64_t block_number) const
 
virtual IOSS_NODISCARD std::pair< std::string, int > topology_type (int64_t block_number) const
 
void build_node_map (Ioss::Int64Vector &map, std::vector< int > &proc, int64_t slab, size_t slabOffset, size_t adjacentProc, size_t index)
 
virtual IOSS_NODISCARD int64_t communication_node_count_proc () const
 
virtual void node_communication_map (Ioss::Int64Vector &map, std::vector< int > &proc)
 
virtual void owning_processor (int *owner, int64_t num_node)
 
virtual void node_map (Ioss::Int64Vector &map) const
 
virtual void node_map (Ioss::IntVector &map) const
 
virtual void element_map (int64_t block_number, Ioss::Int64Vector &map) const
 
virtual void element_map (int64_t block_number, Ioss::IntVector &map) const
 
virtual void element_map (Ioss::Int64Vector &map) const
 
virtual void element_map (Ioss::IntVector &map) const
 
void element_surface_map (ShellLocation loc, Ioss::Int64Vector &map) const
 
void connectivity (int64_t block_number, Ioss::Int64Vector &connect) const
 
void connectivity (int64_t block_number, Ioss::IntVector &connect) const
 
void connectivity (int64_t block_number, int64_t *connect) const
 
virtual void connectivity (int64_t block_number, int *connect) const
 
virtual void coordinates (std::vector< double > &coord) const
 
virtual void coordinates (double *coord) const
 
virtual void coordinates (std::vector< double > &x, std::vector< double > &y, std::vector< double > &z) const
 
virtual void coordinates (int component, std::vector< double > &xyz) const
 
void coordinates (int component, int zone, double *coord) const
 
virtual void sideset_elem_sides (int64_t id, Ioss::Int64Vector &elem_sides) const
 
virtual IOSS_NODISCARD std::vector< std::string > sideset_touching_blocks (int64_t set_id) const
 
IOSS_NODISCARD int64_t get_num_x () const
 
IOSS_NODISCARD int64_t get_num_y () const
 
IOSS_NODISCARD int64_t get_num_z () const
 
IOSS_NODISCARD size_t get_variable_count (Ioss::EntityType type) const
 

Private Member Functions

template<typename INT >
void raw_element_map (int64_t block_number, std::vector< INT > &map) const
 
template<typename INT >
void raw_element_map (std::vector< INT > &map) const
 
template<typename INT >
void raw_connectivity (int64_t block_number, INT *connect) const
 
 GeneratedMesh (const GeneratedMesh &)
 
GeneratedMeshoperator= (const GeneratedMesh &)
 
void set_variable_count (const std::string &type, size_t count)
 
void parse_options (const std::vector< std::string > &groups)
 
void show_parameters () const
 
void initialize ()
 

Private Attributes

std::vector< ShellLocationsidesets {}
 
std::array< std::array< double, 3 >, 3 > rotmat
 
size_t numX {0}
 
size_t numY {0}
 
size_t numZ {0}
 
size_t myNumZ {0}
 
size_t myStartZ {0}
 
size_t processorCount {1}
 
size_t myProcessor {0}
 
size_t timestepCount {0}
 
std::map< Ioss::EntityType, size_t > variableCount {}
 
double offX {0}
 
double offY {0}
 
double offZ {0}
 
double sclX {1}
 
double sclY {1}
 
double sclZ {1}
 
bool doRotation {false}
 

Member Enumeration Documentation

◆ ShellLocation

Enumerator
MX 
PX 
MY 
PY 
MZ 
PZ 

Constructor & Destructor Documentation

◆ GeneratedMesh() [1/4]

Iogs::GeneratedMesh::GeneratedMesh ( const std::string & parameters,
int proc_count = 1,
int my_proc = 0 )
explicit

Generate a cube mesh of size 'num_x' by 'num_y' by 'num_z' elements. By default, the mesh is gen_struc on a single processor. If 'proc_count' is greater than 1, then the mesh will be distributed over 'proc_count' processors and this process will get the portion of the mesh for 'my_proc'. The mesh will be decomposed along the 'Z' axis so 'num_z' must be greater than or equal to 'proc_count' and for even distribution of the hexes 'num_z' mod 'proc_count' should be zero.

The mesh can optionally include sidesets along each face of the cube mesh. These are specified via the 'add_sidesets' function.

If the 'parameters' string constructor is used, the string is parsed to determine the intervals in each direction and, optionally, additional information. The form of the string is "IxJxK" where I, J, and K are the number of intervals in the X, Y, and Z directions respectively and the "x" are literal 'x' characters. For example, the constructor GeneratedMesh("10x12x14") will create the same mesh as GeneratedMesh(10,12,14)

Additional valid options are:

  • help – no argument, shows valid options
  • show – no argument, prints out a summary of the GeneratedMesh() parameters. The output will look similar to:
    "10x12x8|bbox:-10,-10,-10,10,10,10|sideset:XYZ|show"
    Mesh Parameters:
    Intervals: 10 by 12 by 8
    X = 2 * (0..10) + -10 Range: -10 <= X <= 10
    Y = 1.66667 * (0..12) + -10 Range: -10 <= Y <= 10
    Z = 2.5 * (0..8) + -10 Range: -10 <= Z <= 10
    Node Count (total) = 1287
    Element Count (total) = 1152
    Block Count = 3
    SideSet Count = 3
  • sideset – argument = xXyYzZ which specifies whether there is a sideset at that location. 'x' is minimum x face, 'X' is maximum x face, similarly for y and z. Note that the argument string is a single multicharacter string. You can add multiple sidesets to a face, for example, sideset:xxx would add three sidesets on the minimum x face. An error is output if a non xXyYzZ character is found, but execution continues.
  • zdecomp – argument = n0, n1, n2, ..., n::proc-1 which are the number of intervals in the z direction for each processor in a pallel run. If this option is specified, then the total number of intervals in the z direction is the sum of the n0, n1, ... An interval count must be specified for each processor. If this option is not specified, then the number of intervals on each processor in the z direction is numZ/numProc with the extras added to the lower numbered processors.
  • scale – argument = xs, ys, zs which are the scale factors in the x, y, and z directions. All three must be specified if this option is present.
  • offset – argument = xoff, yoff, zoff which are the offsets in the x, y, and z directions. All three must be specified if this option is present.
  • bbox – argument = xmin, ymin, zmin, xmax, ymax, zmax which specify the lower left and upper right corners of the bounding box for the gen_struc mesh. This will calculate the scale and offset which will fit the mesh in the specified box. All calculations are based on the currently active interval settings. If scale or offset or zdecomp specified later in the option list, you may not get the desired bounding box.
  • rotate – argument = axis,angle,axis,angle,... where axis is 'x', 'y', or 'z' and angle is the rotation angle in degrees. Multiple rotations are cumulative. The composite rotation matrix is applied at the time the coordinates are retrieved after scaling and offset are applied.

The unrotated coordinate of a node at grid location i,j,k is:

x = x_scale * i + x_off,
y = z_scale * j + y_off,
z = z_scale * k + z_off,

The extent of the unrotated mesh will be:

x_off <= x <= x_scale * numX + x_off
y_off <= y <= y_scale * numY + y_off
z_off <= z <= z_scale * numZ + z_off
size_t numX
Definition Iogs_GeneratedMesh.h:385
size_t numZ
Definition Iogs_GeneratedMesh.h:385
size_t numY
Definition Iogs_GeneratedMesh.h:385

If an unrecognized option is specified, an error message will be output and execution will continue.

An example of valid input is:

"10x20x40|scale:1,0.5,0.25|offset:-5,-5,-5"

This would create a mesh with 10 intervals in x, 20 in y, 40 in z The mesh would be centered on 0,0,0 with a range of 10 in each direction.

NOTE: All options are processed in the order they appear in the parameters string (except rotate which is applied at the time the coordinates are gen_struc/retrieved)

◆ GeneratedMesh() [2/4]

Iogs::GeneratedMesh::GeneratedMesh ( int64_t num_x,
int64_t num_y,
int64_t num_z,
int proc_count = 1,
int my_proc = 0 )

◆ GeneratedMesh() [3/4]

Iogs::GeneratedMesh::GeneratedMesh ( )

◆ ~GeneratedMesh()

virtual Iogs::GeneratedMesh::~GeneratedMesh ( )
virtualdefault

◆ GeneratedMesh() [4/4]

Iogs::GeneratedMesh::GeneratedMesh ( const GeneratedMesh & )
private

Member Function Documentation

◆ add_sideset()

int64_t Iogs::GeneratedMesh::add_sideset ( ShellLocation loc)

Add a sideset along the specified face of the hex mesh. The sidesets will maintain the order of definition. The first sideset defined will be sideset 1. The loc options are:

  • MX = add sideset on the face with minimum X
  • PX = add sideset on the face with maximum X
  • MY = add sideset on the face with minimum Y
  • PY = add sideset on the face with maximum Y
  • MZ = add sideset on the face with minimum Z
  • PZ = add sideset on the face with maximum Z

◆ block_offset_proc()

IOSS_NODISCARD Ioss::IJK_t Iogs::GeneratedMesh::block_offset_proc ( int64_t id) const

◆ block_range()

IOSS_NODISCARD Ioss::IJK_t Iogs::GeneratedMesh::block_range ( int64_t ) const
inline

◆ block_range_proc()

IOSS_NODISCARD Ioss::IJK_t Iogs::GeneratedMesh::block_range_proc ( int64_t id) const

◆ build_node_map()

void Iogs::GeneratedMesh::build_node_map ( Ioss::Int64Vector & map,
std::vector< int > & proc,
int64_t slab,
size_t slabOffset,
size_t adjacentProc,
size_t index )

◆ communication_node_count_proc()

int64_t Iogs::GeneratedMesh::communication_node_count_proc ( ) const
virtual

◆ connectivity() [1/4]

void Iogs::GeneratedMesh::connectivity ( int64_t block_number,
int * connect ) const
virtual

◆ connectivity() [2/4]

void Iogs::GeneratedMesh::connectivity ( int64_t block_number,
int64_t * connect ) const

◆ connectivity() [3/4]

void Iogs::GeneratedMesh::connectivity ( int64_t block_number,
Ioss::Int64Vector & connect ) const

Return the connectivity for the elements on this processor in the block with id 'block_number'. If the elements in this block have 'npe' nodes per element, then the first 'npe' entries in the 'conn' vector will be the nodal connectivity for the first element; the next 'npe' entries are the nodal connectivity for the second element. The 'connect' vector will be resized to the size required to contain the nodal connectivity for the specified block; all information in 'connect' will be overwritten.

◆ connectivity() [4/4]

void Iogs::GeneratedMesh::connectivity ( int64_t block_number,
Ioss::IntVector & connect ) const

◆ coordinates() [1/5]

void Iogs::GeneratedMesh::coordinates ( double * coord) const
virtual

◆ coordinates() [2/5]

void Iogs::GeneratedMesh::coordinates ( int component,
int zone,
double * coord ) const

Return the coordinates for component 'comp' (1=x, 2=y, 3=z, 0=all) for all nodes in zone zone on this processor. The vector will be resized to the size required to contain the nodal coordinates; all information in the vector will be overwritten. It is an error to request the coordinates via this function if a rotation is defined.

◆ coordinates() [3/5]

void Iogs::GeneratedMesh::coordinates ( int component,
std::vector< double > & xyz ) const
virtual

Return the coordinates for component 'comp' (1=x, 2=y, 3=z) for all nodes on this processor. The vector will be resized to the size required to contain the nodal coordinates; all information in the vector will be overwritten. It is an error to request the coordinates via this function if a rotation is defined.

◆ coordinates() [4/5]

void Iogs::GeneratedMesh::coordinates ( std::vector< double > & coord) const
virtual

Return the coordinates for all nodes on this processor. The first 3 entries in the 'coord' vector are the x, y, and z coordinates of the first node, etc. The 'coord' vector will be resized to the size required to contain the nodal coordinates; all information in 'coord' will be overwritten.

◆ coordinates() [5/5]

void Iogs::GeneratedMesh::coordinates ( std::vector< double > & x,
std::vector< double > & y,
std::vector< double > & z ) const
virtual

Return the coordinates for all nodes on this processor in separate vectors. The vectors will be resized to the size required to contain the nodal coordinates; all information in the vectors will be overwritten.

◆ element_count() [1/2]

int64_t Iogs::GeneratedMesh::element_count ( ) const
virtual

Return number of elements in all structured blocks in the model.

◆ element_count() [2/2]

int64_t Iogs::GeneratedMesh::element_count ( int64_t block_number) const
virtual

Return number of elements in the structured block with id 'block_number'. The 'block_number' ranges from '1' to 'block_count()'.

◆ element_count_proc() [1/2]

int64_t Iogs::GeneratedMesh::element_count_proc ( ) const

Return number of elements in all structured blocks on this processor.

◆ element_count_proc() [2/2]

int64_t Iogs::GeneratedMesh::element_count_proc ( int64_t block_number) const

Return number of elements on this processor in the structured block with id 'block_number'. The 'block_number' ranges from '1' to 'block_count()'.

◆ element_map() [1/4]

void Iogs::GeneratedMesh::element_map ( int64_t block_number,
Ioss::Int64Vector & map ) const
virtual

Fill the passed in 'map' argument with the element map "map[local_position] = global_id" for the elements on this processor in block "block_number".

◆ element_map() [2/4]

void Iogs::GeneratedMesh::element_map ( int64_t block_number,
Ioss::IntVector & map ) const
virtual

◆ element_map() [3/4]

void Iogs::GeneratedMesh::element_map ( Ioss::Int64Vector & map) const
virtual

Fill the passed in 'map' argument with the element map "map[local_position] = global_id" for all elements on this processor

◆ element_map() [4/4]

void Iogs::GeneratedMesh::element_map ( Ioss::IntVector & map) const
virtual

◆ element_surface_map()

void Iogs::GeneratedMesh::element_surface_map ( ShellLocation loc,
Ioss::Int64Vector & map ) const

Fill the passed in 'map' argument with the element map pair "map[local_position] = element global_id" and "map[local_position+1] = element local face id (0-based)" for all elements on the current processor having a face on the surface defined by ShellLocation.

◆ get_num_x()

IOSS_NODISCARD int64_t Iogs::GeneratedMesh::get_num_x ( ) const
inline

◆ get_num_y()

IOSS_NODISCARD int64_t Iogs::GeneratedMesh::get_num_y ( ) const
inline

◆ get_num_z()

IOSS_NODISCARD int64_t Iogs::GeneratedMesh::get_num_z ( ) const
inline

◆ get_variable_count()

IOSS_NODISCARD size_t Iogs::GeneratedMesh::get_variable_count ( Ioss::EntityType type) const
inline

◆ initialize()

void Iogs::GeneratedMesh::initialize ( )
private

◆ node_communication_map()

void Iogs::GeneratedMesh::node_communication_map ( Ioss::Int64Vector & map,
std::vector< int > & proc )
virtual

◆ node_count()

int64_t Iogs::GeneratedMesh::node_count ( ) const
virtual

Return number of nodes in the entire model.

◆ node_count_proc()

int64_t Iogs::GeneratedMesh::node_count_proc ( ) const
virtual

Return number of nodes on this processor.

◆ node_map() [1/2]

void Iogs::GeneratedMesh::node_map ( Ioss::Int64Vector & map) const
virtual

Fill the passed in 'map' argument with the node map "map[local_position] = global_id" for the nodes on this processor.

◆ node_map() [2/2]

void Iogs::GeneratedMesh::node_map ( Ioss::IntVector & map) const
virtual

◆ operator=()

GeneratedMesh & Iogs::GeneratedMesh::operator= ( const GeneratedMesh & )
private

◆ owning_processor()

void Iogs::GeneratedMesh::owning_processor ( int * owner,
int64_t num_node )
virtual

◆ parse_options()

void Iogs::GeneratedMesh::parse_options ( const std::vector< std::string > & groups)
private

◆ raw_connectivity()

template<typename INT >
void Iogs::GeneratedMesh::raw_connectivity ( int64_t block_number,
INT * connect ) const
private

◆ raw_element_map() [1/2]

template<typename INT >
void Iogs::GeneratedMesh::raw_element_map ( int64_t block_number,
std::vector< INT > & map ) const
private

◆ raw_element_map() [2/2]

template<typename INT >
void Iogs::GeneratedMesh::raw_element_map ( std::vector< INT > & map) const
private

◆ set_bbox()

void Iogs::GeneratedMesh::set_bbox ( double xmin,
double ymin,
double zmin,
double xmax,
double ymax,
double zmax )

◆ set_offset()

void Iogs::GeneratedMesh::set_offset ( double off_x,
double off_y,
double off_z )

◆ set_rotation()

void Iogs::GeneratedMesh::set_rotation ( const std::string & axis,
double angle_degrees )

Set rotation. Multiple calls are cumulative. Rotate 'angle_degrees' degrees about the axis 'axis' Center of rotation is about the origin and operates on the scaled/offset coordinates of the mesh.

◆ set_scale()

void Iogs::GeneratedMesh::set_scale ( double scl_x,
double scl_y,
double scl_z )

Specify the coordinate scaling and offset in all three spatial dimensions.

node location of node at (i,j,k) is

X = scale X * i + offset X
Y = scale Y * i + offset Y
Z = scale Z * i + offset Z

WARNING: Should be called before retrieving node coordinates.

◆ set_variable_count()

void Iogs::GeneratedMesh::set_variable_count ( const std::string & type,
size_t count )
private

◆ show_parameters()

void Iogs::GeneratedMesh::show_parameters ( ) const
private

◆ sideset_count()

int64_t Iogs::GeneratedMesh::sideset_count ( ) const
virtual

Return number of sidesets in the entire model.

◆ sideset_elem_sides()

void Iogs::GeneratedMesh::sideset_elem_sides ( int64_t id,
Ioss::Int64Vector & elem_sides ) const
virtual

Return the list of the face/ordinal pairs "elem_sides[local_position] = element global_id" and "elem_sides[local_position+1] = element local face id (0-based)" for the faces in sideset 'id' on this processor. The 'elem_sides' vector will be resized to the size required to contain the list. The element ids are global ids, the side ordinal is 0-based.

◆ sideset_side_count()

int64_t Iogs::GeneratedMesh::sideset_side_count ( int64_t id) const

Return number of sideset 'sides' on sideset 'id'

◆ sideset_side_count_proc()

int64_t Iogs::GeneratedMesh::sideset_side_count_proc ( int64_t id) const
virtual

Return number of sideset 'sides' on sideset 'id' on the current processor.

◆ sideset_touching_blocks()

std::vector< std::string > Iogs::GeneratedMesh::sideset_touching_blocks ( int64_t set_id) const
virtual

◆ structured_block_count()

int64_t Iogs::GeneratedMesh::structured_block_count ( ) const
virtual

Return number of structured blocks in the entire model.

◆ timestep_count()

IOSS_NODISCARD int64_t Iogs::GeneratedMesh::timestep_count ( ) const
inline

◆ topology_type()

std::pair< std::string, int > Iogs::GeneratedMesh::topology_type ( int64_t block_number) const
virtual

Returns pair containing "topology type string" and "number of nodes / element". The topology type string will be "hex8" for the hex element block

Member Data Documentation

◆ doRotation

bool Iogs::GeneratedMesh::doRotation {false}
private

Scale in X, Y, and Z directions location of node at (i,j,k) position is (sclX*i+offX, sclY*i+offY, sclZ*i+offZ)

◆ myNumZ

size_t Iogs::GeneratedMesh::myNumZ {0}
private

◆ myProcessor

size_t Iogs::GeneratedMesh::myProcessor {0}
private

◆ myStartZ

size_t Iogs::GeneratedMesh::myStartZ {0}
private

◆ numX

size_t Iogs::GeneratedMesh::numX {0}
private

◆ numY

size_t Iogs::GeneratedMesh::numY {0}
private

◆ numZ

size_t Iogs::GeneratedMesh::numZ {0}
private

◆ offX

double Iogs::GeneratedMesh::offX {0}
private

◆ offY

double Iogs::GeneratedMesh::offY {0}
private

◆ offZ

double Iogs::GeneratedMesh::offZ {0}
private

◆ processorCount

size_t Iogs::GeneratedMesh::processorCount {1}
private

◆ rotmat

std::array<std::array<double, 3>, 3> Iogs::GeneratedMesh::rotmat
private

◆ sclX

double Iogs::GeneratedMesh::sclX {1}
private

Offsets in X, Y, and Z directions

◆ sclY

double Iogs::GeneratedMesh::sclY {1}
private

◆ sclZ

double Iogs::GeneratedMesh::sclZ {1}
private

◆ sidesets

std::vector<ShellLocation> Iogs::GeneratedMesh::sidesets {}
private

◆ timestepCount

size_t Iogs::GeneratedMesh::timestepCount {0}
private

◆ variableCount

std::map<Ioss::EntityType, size_t> Iogs::GeneratedMesh::variableCount {}
private

The documentation for this class was generated from the following files: