Branch data Line data Source code
1 : : /**
2 : : * MOAB, a Mesh-Oriented datABase, is a software component for creating,
3 : : * storing and accessing finite element mesh data.
4 : : *
5 : : * Copyright 2004 Sandia Corporation. Under the terms of Contract
6 : : * DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government
7 : : * retains certain rights in this software.
8 : : *
9 : : * This library is free software; you can redistribute it and/or
10 : : * modify it under the terms of the GNU Lesser General Public
11 : : * License as published by the Free Software Foundation; either
12 : : * version 2.1 of the License, or (at your option) any later version.
13 : : *
14 : : */
15 : :
16 : : #ifndef EXOII_UTIL
17 : : #define EXOII_UTIL
18 : :
19 : : //
20 : : // ExoIIUtil class: utility class for functions used by both reader
21 : : // and writer
22 : :
23 : : #ifndef IS_BUILDING_MB
24 : : #error "ExoIIUtil.hpp isn't supposed to be included into an application"
25 : : #endif
26 : :
27 : : #include "moab/Forward.hpp"
28 : : #include "moab/ExoIIInterface.hpp"
29 : :
30 : : namespace moab
31 : : {
32 : :
33 : : class ExoIIUtil : public ExoIIInterface
34 : : {
35 : :
36 : : Interface* mMB;
37 : :
38 : : public:
39 : 0 : ExoIIUtil( Interface* mdb ) : mMB( mdb ) {}
40 [ # # ]: 0 : ~ExoIIUtil() {}
41 : :
42 : : //! given the element name, return the type
43 : 0 : virtual ExoIIElementType element_name_to_type( const char* name )
44 : : {
45 : 0 : return static_element_name_to_type( name );
46 : : }
47 : :
48 : : //! get the element type of the entity; this entity can either be a meshset,
49 : : //! in which case it will be assumed to be a material set meshset, or an
50 : : //! individual entity.
51 : 0 : virtual ExoIIElementType get_element_type( EntityHandle entity, Tag mid_nodes_tag, Tag geom_dimension_tag,
52 : : EntityType indiv_entity_type = MBMAXTYPE )
53 : : {
54 : 0 : return static_get_element_type( mMB, entity, mid_nodes_tag, geom_dimension_tag, indiv_entity_type );
55 : : }
56 : :
57 : 0 : virtual void has_mid_nodes( ExoIIElementType elem_type, int* array )
58 : : {
59 : 0 : array[0] = HasMidNodes[elem_type][0];
60 : 0 : array[1] = HasMidNodes[elem_type][1];
61 : 0 : array[2] = HasMidNodes[elem_type][2];
62 : 0 : array[3] = HasMidNodes[elem_type][3];
63 : 0 : }
64 : :
65 : 0 : virtual int has_mid_nodes( ExoIIElementType elem_type, int dimension )
66 : : {
67 : 0 : return HasMidNodes[elem_type][dimension];
68 : : }
69 : :
70 : 0 : virtual int geometric_dimension( const ExoIIElementType elem_type )
71 : : {
72 : 0 : return ElementGeometricDimension[elem_type];
73 : : }
74 : :
75 : 0 : virtual const char* element_type_name( ExoIIElementType type )
76 : : {
77 : 0 : return ElementTypeNames[type];
78 : : }
79 : :
80 : : //! given the element name, return the type
81 : : static ExoIIElementType static_element_name_to_type( const char* name );
82 : :
83 : : //! get the element type of the entity; this entity can either be a meshset, in which
84 : : //! case it will be assumed to be a material set meshset, or an individual entity. If a
85 : : //! meshset, and indiv_entity_type is input, that type is used to start the search for
86 : : //! the connectivity tag which determines how many vertices per entity are defined for that
87 : : //! meshset
88 : : static ExoIIElementType static_get_element_type( Interface* mdbImpl, const EntityHandle entity,
89 : : const Tag mid_nodes_tag, const Tag geom_dimension_tag,
90 : : const EntityType indiv_entity_type = MBMAXTYPE );
91 : :
92 : : //! given the number of vertices in an entity, and optionally the entity type and
93 : : //! geometric dimension, return the corresponding exodusII element type; dimension defaults
94 : : //! to 3 following TSTT convention
95 : : static ExoIIElementType get_element_type_from_num_verts( const int num_verts,
96 : : const EntityType entity_type = MBMAXTYPE,
97 : : const int dimension = 3 );
98 : :
99 : : //! the MB entity type used for each element type
100 : : static const EntityType ExoIIElementMBEntity[];
101 : :
102 : : //! names for all the element types that MB ExoII reader supports
103 : : static const char* ElementTypeNames[];
104 : :
105 : : //! number of vertices per element
106 : : static const int VerticesPerElement[];
107 : :
108 : : //! HasMidNode[elem_type][dim] = 1 denotes that elem_type has mid-nodes
109 : : //! on sub-entities of dimension dim
110 : : static const int HasMidNodes[][4];
111 : :
112 : : //! geometric dimension of each element
113 : : static const int ElementGeometricDimension[];
114 : : };
115 : :
116 : : //! postfix increment operator for EntityType
117 : : inline ExoIIElementType operator++( ExoIIElementType& type, int )
118 : : {
119 : : return ( ExoIIElementType )( ( (int&)type )++ );
120 : : }
121 : :
122 : : //! prefix increment operator for EntityType
123 : : inline ExoIIElementType& operator++( ExoIIElementType& type )
124 : : {
125 : : return (ExoIIElementType&)( ++( (int&)type ) );
126 : : }
127 : :
128 : : } // namespace moab
129 : :
130 : : #endif
|