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