Loading [MathJax]/extensions/tex2jax.js
Mesh Oriented datABase  (version 5.5.1)
An array-based unstructured mesh library
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
makeops.cpp File Reference
#include "moab/Core.hpp"
#include "moab/Range.hpp"
#include <iostream>
+ Include dependency graph for makeops.cpp:

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

InterfacegMB = NULL
 
const char * OperationNames []
 

Enumeration Type Documentation

◆ 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 };

Function Documentation

◆ main()

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().

◆ make_atomic_pillow()

ErrorCode make_atomic_pillow ( )
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().

◆ make_chord_push()

ErrorCode make_chord_push ( )
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().

◆ make_face_open_collapse()

ErrorCode make_face_open_collapse ( )
static

Definition at line 195 of file makeops.cpp.

196 { 197  return MB_FAILURE; 198 }

Referenced by main().

◆ make_face_shrink()

ErrorCode make_face_shrink ( )
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().

◆ make_triple_chord_push()

ErrorCode make_triple_chord_push ( )
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().

◆ make_triple_hex_push()

ErrorCode make_triple_hex_push ( )
static

Definition at line 355 of file makeops.cpp.

356 { 357  return MB_FAILURE; 358 }

Referenced by main().

Variable Documentation

◆ gMB

◆ OperationNames

const char* OperationNames[]
Initial value:
= { "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().