Go to the source code of this file.
Enumerations | |
enum | OperationType { ATOMIC_PILLOW = 0 , FACE_OPEN_COLLAPSE , FACE_SHRINK , CHORD_PUSH , MBTRIPLE_CHORD_PUSH , MBTRIPLE_HEX_PUSH , UNDEFINED } |
Functions | |
static ErrorCode | make_atomic_pillow () |
static ErrorCode | make_face_shrink () |
static ErrorCode | make_face_open_collapse () |
static ErrorCode | make_chord_push () |
static ErrorCode | make_triple_chord_push () |
static ErrorCode | make_triple_hex_push () |
int | main (int argc, char **argv) |
Variables | |
Interface * | gMB = NULL |
const char * | OperationNames [] |
enum OperationType |
Enumerator | |
---|---|
ATOMIC_PILLOW | |
FACE_OPEN_COLLAPSE | |
FACE_SHRINK | |
CHORD_PUSH | |
MBTRIPLE_CHORD_PUSH | |
MBTRIPLE_HEX_PUSH | |
UNDEFINED |
Definition at line 21 of file makeops.cpp.
22 { 23 ATOMIC_PILLOW = 0, 24 FACE_OPEN_COLLAPSE, 25 FACE_SHRINK, 26 CHORD_PUSH, 27 MBTRIPLE_CHORD_PUSH, 28 MBTRIPLE_HEX_PUSH, 29 UNDEFINED 30 };
int main | ( | int | argc, |
char ** | argv | ||
) |
Definition at line 35 of file makeops.cpp.
36 {
37 gMB = new Core();
38 const char* extensions[] = { ".g", ".h5m", ".vtk" };
39 int file_exten = 1;
40
41 std::vector< OperationType > op_types;
42
43 if( argc < 2 )
44 {
45 std::cout << "Usage: " << argv[0] << " [-h5m] [-vtk] {-ap | -foc | -fs | -cp | -tcp | -thp}" << std::endl;
46 return 1;
47 }
48
49 int current_arg = 1;
50 while( current_arg < argc )
51 {
52 if( !strcmp( "-g", argv[current_arg] ) )
53 file_exten = 0;
54 else if( !strcmp( "-h5m", argv[current_arg] ) )
55 file_exten = 1;
56 else if( !strcmp( "-vtk", argv[current_arg] ) )
57 file_exten = 2;
58 else if( !strcmp( "-ap", argv[current_arg] ) )
59 op_types.push_back( ATOMIC_PILLOW );
60 else if( !strcmp( "-foc", argv[current_arg] ) )
61 op_types.push_back( FACE_OPEN_COLLAPSE );
62 else if( !strcmp( "-fs", argv[current_arg] ) )
63 op_types.push_back( FACE_SHRINK );
64 else if( !strcmp( "-cp", argv[current_arg] ) )
65 op_types.push_back( CHORD_PUSH );
66 else if( !strcmp( "-tcp", argv[current_arg] ) )
67 op_types.push_back( MBTRIPLE_CHORD_PUSH );
68 else if( !strcmp( "-thp", argv[current_arg] ) )
69 op_types.push_back( MBTRIPLE_HEX_PUSH );
70 current_arg++;
71 }
72
73 ErrorCode result = MB_SUCCESS, tmp_result = MB_FAILURE;
74
75 for( std::vector< OperationType >::iterator vit = op_types.begin(); vit != op_types.end(); ++vit )
76 {
77 if( *vit == ATOMIC_PILLOW )
78 {
79 tmp_result = make_atomic_pillow();
80 }
81 else if( *vit == FACE_OPEN_COLLAPSE )
82 {
83 tmp_result = make_face_open_collapse();
84 }
85 else if( *vit == CHORD_PUSH )
86 {
87 tmp_result = make_chord_push();
88 }
89 else if( *vit == MBTRIPLE_CHORD_PUSH )
90 {
91 tmp_result = make_triple_chord_push();
92 }
93
94 else if( *vit == MBTRIPLE_HEX_PUSH )
95 {
96 tmp_result = make_triple_hex_push();
97 }
98 else if( *vit == FACE_SHRINK )
99 {
100 tmp_result = make_face_shrink();
101 }
102 else
103 {
104 std::cout << "Operation undefined." << std::endl;
105 return 1;
106 }
107 if( MB_SUCCESS != tmp_result ) result = tmp_result;
108
109 // now write to a file
110 std::string filename( OperationNames[*vit] );
111 filename.append( extensions[file_exten] );
112 tmp_result = gMB->write_mesh( filename.c_str() );
113 if( MB_SUCCESS != tmp_result ) result = tmp_result;
114 }
115
116 return ( result == MB_SUCCESS ? 0 : 1 );
117 }
References ATOMIC_PILLOW, CHORD_PUSH, ErrorCode, FACE_OPEN_COLLAPSE, FACE_SHRINK, gMB, make_atomic_pillow(), make_chord_push(), make_face_open_collapse(), make_face_shrink(), make_triple_chord_push(), make_triple_hex_push(), MB_SUCCESS, MBTRIPLE_CHORD_PUSH, MBTRIPLE_HEX_PUSH, OperationNames, and moab::Interface::write_mesh().
|
static |
Definition at line 119 of file makeops.cpp.
120 {
121 // make atomic pillow configuration
122 // make all vertices
123 double vtx_coord[] = { 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, 1.0,
124 .75, .75, 1.0, .75, .25, 1.0, .25, .25, 1.0, .25, .75, 1.0 };
125
126 int connect[] = { 0, 1, 2, 3, 4, 5, 6, 7, 4, 5, 6, 7, 0, 1, 2, 3 };
127
128 ErrorCode result;
129 EntityHandle vtx_handles[8];
130
131 for( int i = 0; i < 8; i++ )
132 {
133 result = gMB->create_vertex( &vtx_coord[3 * i], vtx_handles[i] );MB_CHK_ERR( result );
134 }
135
136 EntityHandle conn[8], elems[4];
137
138 // make the two hexes
139 for( int i = 0; i < 8; i++ )
140 conn[i] = vtx_handles[connect[i]];
141 result = gMB->create_element( MBHEX, conn, 8, elems[0] );MB_CHK_ERR( result );
142
143 for( int i = 0; i < 8; i++ )
144 conn[i] = vtx_handles[connect[8 + i]];
145 result = gMB->create_element( MBHEX, conn, 8, elems[1] );MB_CHK_ERR( result );
146
147 // make one of the end quads explicitly and bind to the first hex
148 for( int i = 0; i < 4; i++ )
149 conn[i] = vtx_handles[connect[i]];
150 result = gMB->create_element( MBQUAD, conn, 4, elems[2] );MB_CHK_ERR( result );
151
152 result = gMB->add_adjacencies( elems[2], elems, 1, false );MB_CHK_ERR( result );
153
154 // now the other one
155 result = gMB->create_element( MBQUAD, conn, 4, elems[3] );MB_CHK_ERR( result );
156
157 result = gMB->add_adjacencies( elems[3], &elems[1], 1, false );MB_CHK_ERR( result );
158
159 return MB_SUCCESS;
160 }
References moab::Interface::add_adjacencies(), moab::Interface::create_element(), moab::Interface::create_vertex(), ErrorCode, gMB, MB_CHK_ERR, MB_SUCCESS, MBHEX, and MBQUAD.
Referenced by main().
|
static |
Definition at line 200 of file makeops.cpp.
201 {
202 // make chord push configuration
203 // make all vertices
204 double vtx_coord[] = { // first layer
205 0.0, 0.0, 0.5, 0.0, 1.0, 0.0, -1.0, 0.5, 0.0, -1.0, -0.5, 0.0, 0.0, -1.0, 0.0, 1.0, -0.5,
206 0.0, 1.0, 0.5, 0.0,
207 // second layer
208 0.0, 0.0, -1.5, 0.0, 1.0, -1.0, -1.0, 0.5, -1.0, -1.0, -0.5, -1.0, 0.0, -1.0, -1.0, 1.0,
209 -0.5, -1.0, 1.0, 0.5, -1.0,
210 // 2 extra vertices for chord push
211 0.0, -.333, 0.05, 0.0, -.667, 0.10 };
212
213 int connect[] = { // 3 "normal" hexes first
214 // top hex
215 0, 2, 1, 6, 7, 9, 8, 13,
216 // bottom left
217 0, 4, 3, 2, 7, 11, 10, 9,
218 // bottom right
219 6, 5, 4, 0, 13, 12, 11, 7,
220 // front chord push hex
221 2, 0, 4, 3, 14, 6, 5, 15,
222 // back chord push hex
223 2, 14, 15, 3, 0, 6, 5, 4,
224 // front/rear quads a, b
225 2, 0, 4, 3, 6, 5, 4, 0,
226 // duplicate edges from chord push
227 0, 4,
228 // face between bottom 2 normal hexes (needed for explicit
229 // adjacency)
230 0, 4, 11, 7 };
231
232 ErrorCode result;
233 EntityHandle vtx_handles[16];
234
235 for( int i = 0; i < 16; i++ )
236 {
237 result = gMB->create_vertex( &vtx_coord[3 * i], vtx_handles[i] );MB_CHK_ERR( result );
238 }
239
240 EntityHandle conn[8], elems[12];
241
242 // make the five hexes
243 for( int i = 0; i < 5; i++ )
244 {
245 for( int j = 0; j < 8; j++ )
246 conn[j] = vtx_handles[connect[8 * i + j]];
247 result = gMB->create_element( MBHEX, conn, 8, elems[i] );MB_CHK_ERR( result );
248 }
249
250 // make the frontmost pair of quads and bind to the front degen hex
251 for( int i = 0; i < 2; i++ )
252 {
253 for( int j = 0; j < 4; j++ )
254 conn[j] = vtx_handles[connect[40 + 4 * i + j]];
255 result = gMB->create_element( MBQUAD, conn, 4, elems[5 + i] );MB_CHK_ERR( result );
256 }
257
258 // now the back pair
259 for( int i = 0; i < 2; i++ )
260 {
261 for( int j = 0; j < 4; j++ )
262 conn[j] = vtx_handles[connect[40 + 4 * i + j]];
263 result = gMB->create_element( MBQUAD, conn, 4, elems[7 + i] );MB_CHK_ERR( result );
264 }
265
266 // make the duplicated edges explicitly too
267 for( int i = 0; i < 2; i++ )
268 {
269 for( int j = 0; j < 2; j++ )
270 conn[j] = vtx_handles[connect[48 + j]];
271 result = gMB->create_element( MBEDGE, conn, 2, elems[9 + i] );MB_CHK_ERR( result );
272 }
273
274 // now the quad between the lower pair of hexes
275 for( int j = 0; j < 4; j++ )
276 conn[j] = vtx_handles[connect[50 + j]];
277 result = gMB->create_element( MBQUAD, conn, 4, elems[11] );MB_CHK_ERR( result );
278
279 // now set adjacencies explicitly
280 // front/rear duplicated edge to front/rear pair of quads
281 result = gMB->add_adjacencies( elems[9], &elems[5], 2, false );MB_CHK_ERR( result );
282 result = gMB->add_adjacencies( elems[10], &elems[7], 2, false );MB_CHK_ERR( result );
283
284 // rear duplicated edge to quad between lower pair of normal hexes
285 result = gMB->add_adjacencies( elems[10], &elems[11], 1, false );MB_CHK_ERR( result );
286
287 // front/rear duplicated edge to front/rear degen hex
288 result = gMB->add_adjacencies( elems[9], &elems[3], 1, false );MB_CHK_ERR( result );
289 result = gMB->add_adjacencies( elems[10], &elems[4], 1, false );MB_CHK_ERR( result );
290
291 // rear duplicated edge to normal hexes behind it
292 result = gMB->add_adjacencies( elems[10], &elems[1], 2, false );MB_CHK_ERR( result );
293
294 // front pair of quads to front degen hex
295 result = gMB->add_adjacencies( elems[5], &elems[3], 1, false );MB_CHK_ERR( result );
296 result = gMB->add_adjacencies( elems[6], &elems[3], 1, false );MB_CHK_ERR( result );
297
298 // rear pair of quads to rear degen hex
299 result = gMB->add_adjacencies( elems[7], &elems[4], 1, false );MB_CHK_ERR( result );
300 result = gMB->add_adjacencies( elems[8], &elems[4], 1, false );MB_CHK_ERR( result );
301
302 // rear pair of quads to normal hexes behind them
303 result = gMB->add_adjacencies( elems[7], &elems[1], 1, false );MB_CHK_ERR( result );
304 result = gMB->add_adjacencies( elems[8], &elems[2], 1, false );MB_CHK_ERR( result );
305
306 return MB_SUCCESS;
307 }
References moab::Interface::add_adjacencies(), moab::Interface::create_element(), moab::Interface::create_vertex(), ErrorCode, gMB, MB_CHK_ERR, MB_SUCCESS, MBEDGE, MBHEX, and MBQUAD.
Referenced by main().
|
static |
Definition at line 195 of file makeops.cpp.
196 {
197 return MB_FAILURE;
198 }
Referenced by main().
|
static |
Definition at line 162 of file makeops.cpp.
163 {
164 // make face shrink configuration
165 // make all vertices
166 double vtx_coord[] = { 1.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0,
167 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 2.0, 1.0, 0.0, 2.0, 0.0, 0.0,
168 2.0, 0.0, 1.0, 2.0, .75, .75, 1.0, .75, .25, 1.0, .25, .25, 1.0, .25, .75, 1.0 };
169
170 int connect[] = { 3, 7, 11, 15, 0, 4, 8, 12, 0, 4, 8, 12, 1, 5, 9, 13, 1, 5, 9, 13, 2, 6, 10, 14,
171 2, 6, 10, 14, 3, 7, 11, 15, 0, 3, 2, 1, 12, 15, 14, 13, 12, 15, 14, 13, 8, 11, 10, 9 };
172
173 ErrorCode result;
174 EntityHandle vtx_handles[16];
175
176 for( int i = 0; i < 16; i++ )
177 {
178 result = gMB->create_vertex( &vtx_coord[3 * i], vtx_handles[i] );MB_CHK_ERR( result );
179 }
180
181 // make all elements at once
182 EntityHandle conn[8], elems[6];
183
184 for( int j = 0; j < 6; j++ )
185 {
186 for( int i = 0; i < 8; i++ )
187 conn[i] = vtx_handles[connect[j * 8 + i]];
188
189 result = gMB->create_element( MBHEX, conn, 8, elems[j] );MB_CHK_ERR( result );
190 }
191
192 return MB_SUCCESS;
193 }
References moab::Interface::create_element(), moab::Interface::create_vertex(), ErrorCode, gMB, MB_CHK_ERR, MB_SUCCESS, and MBHEX.
Referenced by main().
|
static |
Definition at line 309 of file makeops.cpp.
310 {
311 // make chord push configuration
312 // make all vertices
313 double vtx_coord[] = { // first layer
314 0.0, 0.0, 0.5, 0.0, 1.0, 0.0, -1.0, 0.5, 0.0, -1.0, -0.5, 0.0, 0.0, -1.0, 0.0, 1.0, -0.5,
315 0.0, 1.0, 0.5, 0.0,
316 // second layer
317 0.0, 0.0, -1.5, 0.0, 1.0, -1.0, -1.0, 0.5, -1.0, -1.0, -0.5, -1.0, 0.0, -1.0, -1.0, 1.0,
318 -0.5, -1.0, 1.0, 0.5, -1.0,
319 // 2 extra vertices in middle
320 0.0, 0.0, -0.25, 0.0, 0.0, 0.0 };
321
322 int connect[] = { // 3 "normal" hexes first
323 // top hex
324 14, 2, 1, 6, 7, 9, 8, 13,
325 // bottom left
326 14, 4, 3, 2, 7, 11, 10, 9,
327 // bottom right
328 6, 5, 4, 14, 13, 12, 11, 7,
329 // front triple chord push hex
330 0, 4, 3, 2, 6, 5, 15, 1,
331 // back triple chord push hex
332 2, 1, 15, 3, 14, 6, 5, 4 };
333
334 ErrorCode result;
335 EntityHandle vtx_handles[16];
336
337 for( int i = 0; i < 16; i++ )
338 {
339 result = gMB->create_vertex( &vtx_coord[3 * i], vtx_handles[i] );MB_CHK_ERR( result );
340 }
341
342 EntityHandle conn[8], elems[12];
343
344 // make the five hexes
345 for( int i = 0; i < 5; i++ )
346 {
347 for( int j = 0; j < 8; j++ )
348 conn[j] = vtx_handles[connect[8 * i + j]];
349 result = gMB->create_element( MBHEX, conn, 8, elems[i] );MB_CHK_ERR( result );
350 }
351
352 return MB_SUCCESS;
353 }
References moab::Interface::create_element(), moab::Interface::create_vertex(), ErrorCode, gMB, MB_CHK_ERR, MB_SUCCESS, and MBHEX.
Referenced by main().
|
static |
Definition at line 355 of file makeops.cpp.
356 {
357 return MB_FAILURE;
358 }
Referenced by main().
Interface* gMB = NULL |
Definition at line 12 of file makeops.cpp.
Referenced by moab::get_adjacencies_union(), list_formats(), main(), make_atomic_pillow(), make_chord_push(), make_face_shrink(), make_triple_chord_push(), and remove_entities_from_sets().
const char* OperationNames[] |
= { "atomic_pillow", "face_open_collapse", "face_shrink", "chord_push",
"triple_chord_push", "triple_hex_push", "undefined" }
Definition at line 32 of file makeops.cpp.
Referenced by main().