1 #include "moab/Core.hpp"
2 #include "moab/MeshGeneration.hpp"
3 #include "TestUtil.hpp"
4 #include "moab/ProgOptions.hpp"
5 
6 #ifdef MOAB_HAVE_MPI
7 #include "moab_mpi.h"
8 #include "moab/ParallelComm.hpp"
9 #include "MBParallelConventions.h"
10 #endif
11 
12 using namespace moab;
13 using std::string;
14 
main(int argc,char * argv[])15 int main(int argc, char* argv[])
16 {
17   int proc_id = 0, size = 1;
18 #ifdef MOAB_HAVE_MPI
19   MPI_Init(&argc,&argv);
20   MPI_Comm_rank( MPI_COMM_WORLD, &proc_id );
21   MPI_Comm_size( MPI_COMM_WORLD, &size );
22 #endif
23   Core mcore;
24   Interface* mb = &mcore;
25   EntityHandle fileset;
26   MeshGeneration::BrickOpts opts;
27   // default options
28   opts.A=opts.B=opts.C=2;
29   opts.M=opts.N=opts.K=1;
30   opts.blockSize = 4;
31   opts.xsize = opts.ysize = opts.zsize = 1.;
32   opts.ui=CartVect(1.,0,0.);
33   opts.uj=CartVect(0.,1.,0.);
34   opts.uk=CartVect(0.,0.,1.);
35   opts.newMergeMethod =  opts.quadratic =  opts.keep_skins =  opts.tetra = false;
36   opts.adjEnts = opts.parmerge = false;
37   opts.GL = 0;
38 
39   ProgOptions popts;
40 
41   popts.addOpt<int>(string("blockSize,b"),
42       string("Block size of mesh (default=4)"), &opts.blockSize);
43   popts.addOpt<int>(string("xproc,M"),
44       string("Number of processors in x dir (default=1)"), &opts.M);
45   popts.addOpt<int>(string("yproc,N"),
46       string("Number of processors in y dir (default=1)"), &opts.N);
47   popts.addOpt<int>(string("zproc,K"),
48       string("Number of processors in z dir (default=1)"), &opts.K);
49 
50   popts.addOpt<int>(string("xblocks,A"),
51       string("Number of blocks on a task in x dir (default=2)"), &opts.A);
52   popts.addOpt<int>(string("yblocks,B"),
53       string("Number of blocks on a task in y dir (default=2)"), &opts.B);
54   popts.addOpt<int>(string("zblocks,C"),
55       string("Number of blocks on a task in x dir (default=2)"), &opts.C);
56 
57   popts.addOpt<double>(string("xsize,x"),
58       string("Total size in x direction (default=1.)"), &opts.xsize);
59   popts.addOpt<double>(string("ysize,y"),
60       string("Total size in y direction (default=1.)"), &opts.ysize);
61   popts.addOpt<double>(string("zsize,z"),
62       string("Total size in z direction (default=1.)"), &opts.zsize);
63 
64   popts.addOpt<void>("newMerge,w", "use new merging method", &opts.newMergeMethod);
65 
66   popts.addOpt<void>("quadratic,q", "use hex 27 elements", &opts.quadratic);
67 
68   popts.addOpt<void>("keep_skins,k", "keep skins with shared entities", &opts.keep_skins);
69 
70   popts.addOpt<void>("tetrahedrons,t", "generate tetrahedrons", &opts.tetra);
71 
72   popts.addOpt<void>("faces_edges,f", "create all faces and edges", &opts.adjEnts);
73 
74   popts.addOpt<int>(string("ghost_layers,g"),
75     string("Number of ghost layers (default=0)"), &opts.GL);
76 
77   popts.addOpt<void>("parallel_merge,p", "use parallel mesh merge, not vertex ID based merge", &opts.parmerge);
78 
79   popts.parseCommandLine(argc, argv);
80 
81   ErrorCode rval = mb->create_meshset(MESHSET_SET, fileset);MB_CHK_ERR(rval);
82 
83 #ifdef MOAB_HAVE_MPI
84   ParallelComm *pc = new ParallelComm(mb, MPI_COMM_WORLD);
85   MeshGeneration * mgen = new MeshGeneration(mb, pc, fileset);
86 #else
87   MeshGeneration * mgen = new MeshGeneration(mb, 0, fileset);
88 #endif
89 
90   rval = mgen->BrickInstance(opts); MB_CHK_ERR(rval);
91 
92   return 0;
93 }
94