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 MB_TAG_CONVENTIONS_HPP
17 #define MB_TAG_CONVENTIONS_HPP
18
19 //! Conventional tag names used for some often-used sets
20
21 /* MATERIAL_SET_TAG_NAME tag:
22 * Represents sets of elements having a common material (corresponds to
23 * element blocks in ExodusII)
24 * size = sizeof(int)
25 * type = int
26 * value = integer id for this set (block id from ExodusII)
27 * default value = -1
28 */
29 #define MATERIAL_SET_TAG_NAME "MATERIAL_SET"
30
31 /* DIRICHLET_SET_TAG_NAME tag:
32 * Represents dirichlet-type boundary condition, usually contains only mesh vertices
33 * (corresponds to nodesets in ExodusII)
34 * size = sizeof(int)
35 * type = int
36 * value = integer id for this set (nodeset id from ExodusII)
37 * default value = -1
38 */
39 #define DIRICHLET_SET_TAG_NAME "DIRICHLET_SET"
40
41 /* NEUMANN_SET_TAG_NAME tag:
42 * Represents neumann-type boundary condition, usually contains elements with dimension
43 * one lower than those found in material sets (i.e. edges in FE quad/tri models, quads/tris
44 * in FE hex/tet models) (corresponds to sidesets in ExodusII)
45 * size = sizeof(int)
46 * type = int
47 * value = integer id for this set (sideset id from ExodusII)
48 * default value = -1
49 */
50 #define NEUMANN_SET_TAG_NAME "NEUMANN_SET"
51
52 /* HAS_MID_NODES_TAG_NAM tag:
53 * Flags telling whether elements in a given set have mid-(edge, face, region) vertices/nodes;
54 * index 0 is a place holder, so this datum can be indexed by dimension, e.g. has_mid_nodes[dim]
55 * indicates whether mesh entities of dimension dim have mid nodes
56 * size = 4*sizeof(int)
57 * type = int[4]
58 * value = 1 (has mid nodes), 0 (does not have mid nodes)
59 * default value = [-1, -1, -1, -1]
60 */
61 #define HAS_MID_NODES_TAG_NAME "HAS_MID_NODES"
62
63 /* GEOM_DIMENSION tag:
64 * Represents entities "owned" by a given topological entity in a geometric model
65 * size = sizeof(int)
66 * type = int
67 * value = dimension of geom entity
68 * default value = -1
69 */
70 #define GEOM_DIMENSION_TAG_NAME "GEOM_DIMENSION"
71
72 /* MESH_TRANSFORM tag:
73 * Represents homogeneous transform to be applied to mesh; used in ExodusII writer to apply
74 * transform before writing nodal coordinates
75 * size = 16*sizeof(double)
76 * type = double[16]
77 * value = 4x4 homogenous transform matrix
78 */
79 #define MESH_TRANSFORM_TAG_NAME "MESH_TRANSFORM"
80
81 /* GLOBAL_ID tag:
82 * Represents global id of entities (sets or mesh entities); this id is different than the id
83 * embedded in the entity handle
84 * size = sizeof(int)
85 * type = int
86 * value = global id
87 * default value = 0 // not -1 to allow gids stored in unsigned data types
88 */
89 #define GLOBAL_ID_TAG_NAME "GLOBAL_ID"
90
91 /* CATEGORY tag:
92 * String name indicating generic "category" if the entity to which it is assigned (usually
93 * sets); used e.g. to indicate a set represents geometric vertex/edge/face/region,
94 * dual surface/curve, etc.
95 * size = CATEGORY_TAG_NAME_LENGTH (defined below)
96 * type = char[CATEGORY_TAG_NAME_LENGTH]
97 * value = NULL-terminated string denoting category name
98 */
99 #define CATEGORY_TAG_NAME "CATEGORY"
100 #define CATEGORY_TAG_SIZE 32
101
102 /* NAME tag:
103 * A fixed length NULL-padded string containing a name.
104 * All values should be assumed to be of type char[NAME_TAG_SIZE].
105 * The string need not be null terminated. All values used for
106 * storing or searching for a value must be padded with '\0' chars.
107 */
108 #define NAME_TAG_NAME "NAME"
109 #define NAME_TAG_SIZE 32
110
111 /* BLOCK_HEADER: tag
112 * A fixex lenght tag containg block header data
113 * BlockColor, MaterialId and BlockDimension
114 */
115 #define BLOCK_HEADER "BLOCK_HEADER"
116
117 /* BLOCK_ATTRIBUTES: tag
118 * A varible lenght tag of doubles
119 * Tag contains attributes set to BlockSet in cubit file
120 */
121 #define BLOCK_ATTRIBUTES "BLOCK_ATTRIBUTES"
122
123 #ifndef MB_PARALLEL_CONVENTIONS_H
124 #define MB_PARALLEL_CONVENTIONS_H
125
126 /** Tag conventions for naming parallel things. Note this header
127 * file belongs in the main MOAB directory because even serial
128 * applications (e.g. partitioners) may write tags for use in
129 * parallel applications.
130 */
131
132 /** \brief Global identifier for interface mesh
133 *
134 * An integer identifier common to the corresponding mesh entity
135 * instances on each processor for a mesh entity on the interface.
136 */
137 #define PARALLEL_GID_TAG_NAME "GLOBAL_ID"
138
139 /** \brief Tag on a meshset representing a parallel partition.
140 *
141 * When the mesh is partitioned for use in a parallel environment,
142 * the each CPUs partiiton of the mesh is stored in a meshset with
143 * this tag. The value of the tag is an integer "part identifier".
144 */
145 #define PARALLEL_PARTITION_TAG_NAME "PARALLEL_PARTITION"
146 #define PARALLEL_PART_TAG_NAME PARALLEL_PARTITION_TAG_NAME
147
148 /** \brief Tag that groups the set of parts/partitions that are
149 * a covering of the mesh.
150 *
151 * This tag labels an entity set for which the child sets are part(ition)s
152 * that together are a single partitioning of the mesh. I.e. There should
153 * be no mesh entity that is contained in more than one child part(ition)
154 * set, and typically every mesh entity of the dimenion used to partition
155 * the mesh is contained in exactly one of the child sets.
156 *
157 * The data for this tag is a single integer value. The value of
158 * the tag is undefined.
159 */
160 #define PARALLEL_PARITIONING_TAG_NAME "PARALLEL_MESH_PARITIONING"
161
162 /** \brief Tag storing which other processor a given entity is shared with
163 *
164 * This single-valued tag implies an entity is shared with one other proc
165 */
166 #define PARALLEL_SHARED_PROC_TAG_NAME "__PARALLEL_SHARED_PROC"
167
168 /** \brief Tag storing which other processorS a given entity is shared with
169 *
170 * This multiple-valued tag implies an entity is shared with multiple
171 * other processors. Length of tag is application-dependent, and depends on
172 * what the maximum number of processors is which share an entity
173 */
174 #define PARALLEL_SHARED_PROCS_TAG_NAME "__PARALLEL_SHARED_PROCS"
175
176 /** \brief Tag storing the handle of a shared entity on the other proc
177 *
178 * This single-valued tag implies an entity is shared with one other proc
179 */
180 #define PARALLEL_SHARED_HANDLE_TAG_NAME "__PARALLEL_SHARED_HANDLE"
181
182 /** \brief Tag storing handles of a shared entity on other processors
183 *
184 * This multiple-valued tag implies an entity is shared with multiple
185 * other processors. Length of tag is application-dependent, and depends on
186 * what the maximum number of processors is which share an entity
187 */
188 #define PARALLEL_SHARED_HANDLES_TAG_NAME "__PARALLEL_SHARED_HANDLES"
189
190 /** \brief Tag storing parallel status (as bits in this tag)
191 *
192 * This tag stores various aspects of parallel status in bits; see also
193 * #define's following, to be used in bit mask operations. If an entity is
194 * not shared with any other processors, the pstatus is 0, otherwise it's > 0
195 *
196 * bit 0: !owned (0=owned, 1=not owned)
197 * bit 1: shared (0=not shared, 1=shared)
198 * bit 2: multishared (shared by > 2 procs; 0=not shared, 1=shared)
199 * bit 3: interface (0=not interface, 1=interface)
200 * bit 4: ghost (0=not ghost, 1=ghost)
201 * default value = 0
202 */
203 #define PARALLEL_STATUS_TAG_NAME "__PARALLEL_STATUS"
204
205 #define PSTATUS_NOT_OWNED 0x1
206 #define PSTATUS_SHARED 0x2
207 #define PSTATUS_MULTISHARED 0x4
208 #define PSTATUS_INTERFACE 0x8
209 // note, these numbers are in hex, so 0x10 is the 4th bit, or 2^4.
210 #define PSTATUS_GHOST 0x10
211
212 #define PSTATUS_AND 0x1
213 #define PSTATUS_OR 0x2
214 #define PSTATUS_NOT 0x3
215 #endif
216
217 #endif