Panzer Version of the Day
Loading...
Searching...
No Matches
Panzer_STK_SculptMeshFactory.cpp
Go to the documentation of this file.
1// @HEADER
2// *****************************************************************************
3// Panzer: A partial differential equation assembly
4// engine for strongly coupled complex multiphysics systems
5//
6// Copyright 2011 NTESS and the Panzer contributors.
7// SPDX-License-Identifier: BSD-3-Clause
8// *****************************************************************************
9// @HEADER
10
12#include <Teuchos_TimeMonitor.hpp>
13#include <PanzerAdaptersSTK_config.hpp>
14
15#include "elsa.h"
16using Teuchos::RCP;
17using Teuchos::rcp;
18
19
20
21namespace panzer_stk {
22
27
32
34Teuchos::RCP<STK_Interface> SculptMeshFactory::buildMesh(stk::ParallelMachine parallelMach) const
35{
36 PANZER_FUNC_TIME_MONITOR("panzer::SculptMeshFactory::buildMesh()");
37
38 RCP<STK_Interface> mesh = buildUncommitedMesh(parallelMach);
39
40 // commit meta data
41 mesh->initialize(parallelMach);
42
43 // build bulk data
44 completeMeshConstruction(*mesh,parallelMach);
45
46 // wrtie exodus file
47 //mesh->writeToExodus("STKSculptMesh.exo");
48
49 return mesh;
50}
51
52Teuchos::RCP<STK_Interface> SculptMeshFactory::buildUncommitedMesh(stk::ParallelMachine parallelMach) const
53{
54 PANZER_FUNC_TIME_MONITOR("panzer::SculptMeshFactory::buildUncomittedMesh()");
55
56 RCP<STK_Interface> mesh = rcp(new STK_Interface(3));
57
58 machRank_ = stk::parallel_machine_rank(parallelMach);
59 machSize_ = stk::parallel_machine_size(parallelMach);
60
62
63 //if( machRank_ == 0 )
64 {
65 // call Sculptor
66 char diatom_file[1000];
68
69 callSculptor( parallelMach, diatom_file );
70
71 // build meta information: blocks and side set setups
72 buildMetaData(parallelMach,*mesh);
73
74 mesh->addPeriodicBCs(periodicBCVec_);
75 mesh->setBoundingBoxSearchFlag(useBBoxSearch_);
76
77 }
78
79// if( machRank_ == 0 )
80// if(mesh->isWritable())
81// mesh->writeToExodus("STKSculptMesh.exo");
82
83
84 return mesh;
85}
86
87int SculptMeshFactory::writeDiatomFile( std::string stl_path, std::string stl_filename, char *diatom_file ) const
88{
89
90 strcpy( diatom_file, stl_path.c_str() );
91 strcat( diatom_file, "stl.diatom" );
92 FILE *fp = fopen( diatom_file, "w" );
93 if ( !fp )
94 {
95 printf( "ERROR: Unable to open %s for writing\n", diatom_file );
96 return 0;
97 }
98
99 char stl_fullfile[1000];
100 strcpy( stl_fullfile, stl_path.c_str() );
101 strcat( stl_fullfile, stl_filename.c_str() );
102
103 fprintf( fp, " diatom\n" );
104 fprintf( fp, " package \'box\'\n" );
105 fprintf( fp, " material 1\n" );
106 fprintf( fp, " insert stl\n" );
107 fprintf( fp, " FILE = \'%s\'\n", stl_fullfile );
108 fprintf( fp, " endinsert\n" );
109 fprintf( fp, " endpackage\n" );
110 fprintf( fp, " enddiatom\n" );
111 fclose( fp );
112
113 return 1;
114
115}
116int SculptMeshFactory::callSculptor(stk::ParallelMachine parallelMach, char *diatom_file_name ) const
117{
118
119 char * base_exodus_file_name = NULL;
120 char * base_vfrac_file_name = NULL;
121 int nelx, nely, nelz;
122
123 nelx = xInterval_;
124 nely = yInterval_;
125 nelz = zInterval_;
126
127 int mesh_void = 0;
128
129 double gmin[3];
130 double gmax[3];
131
132 gmin[0] = xMin_;
133 gmin[1] = yMin_;
134 gmin[2] = zMin_;
135 gmax[0] = xMax_;
136 gmax[1] = yMax_;
137 gmax[2] = zMax_;
138
139 int stair = 0;
140 int smooth = 1;
141 int smooth_iterations = 7;
142
143 int gen_sidesets = 4; //for stl based sidesets
144 int adaptive_grid = 0;
145 int adapt_level = 2;
146 int adapt_type = 0;
147
148 printf("\n Sculpt BBox Min ( %lf, %lf, %lf )\n", xMin_, yMin_, zMin_ );
149 printf("\n Sculpt BBox Max ( %lf, %lf, %lf )\n", xMax_, yMax_, zMax_ );
150
151 int cr_result = Create_Sculptor_Mesh(diatom_file_name,
152 base_exodus_file_name,
153 base_vfrac_file_name,
154 0, //vfac_input
155 machSize_, //comm.size(),
156 machRank_, //comm.rank(),
157 1,
158 nelx,
159 nely,
160 nelz,
161 gmin,
162 gmax,
163 stair,
164 smooth,
165 10,/*num_laplac_iters*/
166 0, // max opt iters
167 .4,/*opt_threshold*/
168 0, // max pcol iters
169 .4, // pcol threshold
170 mesh_void,
171 gen_sidesets,
172 adapt_type, /* adatptive type*/
173 adaptive_grid,/*adaptive_grid*/
174 adapt_level, /* adapt level */
175 0, // max deg iter
176 0.0,/*double htet_threshold*/
177 0,/*int pillow*/
178 0, // capture
179 0, //micro_expand
180 0, //align
181 0, //cell_size
182 NULL,/*char * quality_filename*/
183 NULL,/*char * comm_maps_file_name*/
184 0, // write geom
185 0/*int quiet 1 is quiet*/
186 );
187
188
189
190 if (cr_result == 1){
191 if(machRank_ == 0)
192 printf("Error Generating Sculptor Mesh\n");
193 return 1;
194 }
195
196 return 0;
197}
198
199void SculptMeshFactory::completeMeshConstruction(STK_Interface & mesh,stk::ParallelMachine parallelMach) const
200{
201 PANZER_FUNC_TIME_MONITOR("panzer::SculptMeshFactory::completeMeshConstruction()");
202
203 if(not mesh.isInitialized())
204 mesh.initialize(parallelMach);
205
206 buildElements(parallelMach,mesh);
207
208 mesh.buildSubcells();
210 mesh.buildLocalEdgeIDs();
211 mesh.buildLocalFaceIDs();
212
213 addSideSets(mesh);
214 addNodeSets(mesh);
215 addEdgeBlocks(mesh);
216 addFaceBlocks(mesh);
217
218 this->rebalance(mesh);
219}
220
222void SculptMeshFactory::setParameterList(const Teuchos::RCP<Teuchos::ParameterList> & paramList)
223{
224 paramList->validateParametersAndSetDefaults(*getValidParameters(),0);
225
226 setMyParamList(paramList);
227
228 xInterval_ = paramList->get<int>("xInterval");
229 yInterval_ = paramList->get<int>("yInterval");
230 zInterval_ = paramList->get<int>("zInterval");
231
232
233 xMin_ = paramList->get<double>("xMin");
234 yMin_ = paramList->get<double>("yMin");
235 zMin_ = paramList->get<double>("zMin");
236
237 xMax_ = paramList->get<double>("xMax");
238 yMax_ = paramList->get<double>("yMax");
239 zMax_ = paramList->get<double>("zMax");
240
241 stlFileDir_ = paramList->get<std::string>("stlFileDir");
242 stlFileName_ = paramList->get<std::string>("stlFileName");
243
244 // read in periodic boundary conditions
245 parsePeriodicBCList(Teuchos::rcpFromRef(paramList->sublist("Periodic BCs")),periodicBCVec_,useBBoxSearch_);
246}
247
249Teuchos::RCP<const Teuchos::ParameterList> SculptMeshFactory::getValidParameters() const
250{
251 static RCP<Teuchos::ParameterList> defaultParams;
252
253 // fill with default values
254 if(defaultParams == Teuchos::null) {
255 defaultParams = rcp(new Teuchos::ParameterList);
256
257 defaultParams->set<int>("xInterval",10);
258 defaultParams->set<int>("yInterval",10);
259 defaultParams->set<int>("zInterval",10);
260
261 defaultParams->set<double>("xMin",0.0);
262 defaultParams->set<double>("yMin",0.0);
263 defaultParams->set<double>("zMin",0.0);
264
265 defaultParams->set<double>("xMax",1.0);
266 defaultParams->set<double>("yMax",1.0);
267 defaultParams->set<double>("zMax",1.0);
268
269 defaultParams->set<std::string>("stlFileDir", "NULL");
270 defaultParams->set<std::string>("stlFileName", "NULL");
271
272 Teuchos::ParameterList & bcs = defaultParams->sublist("Periodic BCs");
273 bcs.set<int>("Count",0); // no default periodic boundary conditions
274 }
275
276
277 return defaultParams;
278}
279
281{
282 // get valid parameters
283 RCP<Teuchos::ParameterList> validParams = rcp(new Teuchos::ParameterList(*getValidParameters()));
284
285 // set that parameter list
286 setParameterList(validParams);
287
288}
289
290void SculptMeshFactory::buildMetaData(stk::ParallelMachine parallelMach, STK_Interface & mesh) const
291{
292 struct MeshStorageStruct *mss = get_sculpt_mesh();
293
294 int nBlocks_ = mss->num_elem_blk;
295 int nSidesets_ = mss->num_side_sets;
296 int nNodesets_ = mss->num_node_sets;
297
298
299 typedef shards::Hexahedron<8> HexTopo;
300 const CellTopologyData * ctd = shards::getCellTopologyData<HexTopo>();
301 const CellTopologyData * side_ctd = shards::CellTopology(ctd).getBaseCellTopologyData(2,0);
302
303 const CellTopologyData * edge_ctd = shards::CellTopology(ctd).getBaseCellTopologyData(1,0);
304 const CellTopologyData * face_ctd = shards::CellTopology(ctd).getBaseCellTopologyData(2,0);
305
306
307 // build meta data
308 //mesh.setDimension(3);
309 for( int b = 0; b < nBlocks_; b++){
310 std::stringstream ebPostfix;
311 ebPostfix << "-" << mss->block_id[b];
312 mesh.addElementBlock("eblock"+ebPostfix.str(),ctd);
313 }
314
315
316 // add sidesets
317 int side_set_id;
318 machRank_ = stk::parallel_machine_rank(parallelMach);
319 for(int ict = 0;ict < nSidesets_;ict ++){
320 std::stringstream sPostfix;
321 sPostfix << "-" << mss->side_set_id[ict];
322 mesh.addSideset("Sideset"+sPostfix.str(),side_ctd);
323 }
324
325 // add nodesets
326 for(int nx=0;nx<nNodesets_;nx++) {
327 std::stringstream nPostfix;
328 nPostfix << "-" << nx;
329 mesh.addNodeset("Nodeset"+nPostfix.str());
330 }
331
334}
335
336void SculptMeshFactory::buildNodes( stk::ParallelMachine paralleMach, STK_Interface &mesh ) const
337{
338 struct MeshStorageStruct *mss = get_sculpt_mesh();
339 int num_nodes = mss->num_nodes;
340
341
342 int dimensionality = 3;
343
344 if (num_nodes){
345 int global_node_numbers;
346 for(int ict = 0; ict < num_nodes; ict ++){
347 global_node_numbers = mss->global_node_numbers[ict];
348 std::vector<double> coord(3, 0.0);
349 coord[0] = mss->coord[0*num_nodes+ict];
350 coord[1] = mss->coord[1*num_nodes+ict];
351 coord[2] = mss->coord[2*num_nodes+ict];
352 mesh.addNode(global_node_numbers, coord );
353
354 //std::cout<<"Node "<<global_node_numbers<<": ( "<<coord[0]<<", "<<coord[1]<<", "<<coord[2]<<" )"<<std::endl;
355
356 }
357 }
358
359
360}
361
362void SculptMeshFactory::buildElements(stk::ParallelMachine parallelMach,STK_Interface & mesh) const
363{
364 struct MeshStorageStruct *mss = get_sculpt_mesh();
365 int num_blocks = mss->num_elem_blk;
366
367
368 int *block_id = new int[num_blocks];
369 //char ** element_types = new std::string[num_blocks];
370 int *elements = new int[num_blocks];
371 int *nodes_per_element = new int[num_blocks];
372 int *element_attributes = new int[num_blocks];
373 int **elmt_node_linkage = new int*[num_blocks];
374
375 for(int b = 0; b < num_blocks; b++){
376 block_id[b] = mss->block_id[b];
377 // element_types[b] = mss->element_types[b];
378 elements[b] = mss->elements[b];
379 nodes_per_element[b] = mss->nodes_per_element[b];
380 element_attributes[b] = mss->element_attributes[b];
381 }
382
383
384 int elm_start = 1;
385 mesh.beginModification();
386 // build each block
387 for(int ib=0;ib<num_blocks;ib++) {
388 buildBlock(parallelMach,mesh, ib, block_id, elm_start, elements, nodes_per_element, element_attributes, elmt_node_linkage );
389 elm_start += elements[ib];
390 }
391 mesh.endModification();
392}
393
394void SculptMeshFactory::buildBlock(stk::ParallelMachine parallelMach,STK_Interface & mesh, int block_index, int *block_id, int elm_start, int *elements, int *nodes_per_element, int *elem_attributes, int **elmt_node_linkage ) const
395{
396
397 struct MeshStorageStruct *mss = get_sculpt_mesh();
398
399 // add blocks
400 std::stringstream blockName;
401 blockName << "eblock-" << block_id[block_index];
402 stk::mesh::Part * block = mesh.getElementBlockPart(blockName.str());
403
404
405 buildNodes( parallelMach, mesh );
406
407
408 // read element block properties
409 //read element connectivity information into a temporary array
410 if(elements[block_index]) {
411 int maximum_nodes = elements[block_index] * nodes_per_element[block_index];
412 elmt_node_linkage[block_index] = new int[maximum_nodes];
413 for(int ict = 0;ict < elements[block_index]; ict ++){
414 std::vector<stk::mesh::EntityId> nodes(nodes_per_element[block_index]);
415 //std::cout<<"Element id = "<<elm_start+ ict<<std::endl;
416 //std::cout<<"Element global id = "<<mss->global_element_numbers[elm_start+ ict-1]<<std::endl;
417 for(int nct = 0; nct < nodes_per_element[block_index]; nct++){
418 elmt_node_linkage[block_index][(ict*nodes_per_element[block_index])+nct] = mss->elmt_node_linkage[block_index][(ict*nodes_per_element[block_index])+nct];
419 nodes[nct] = mss->global_node_numbers[elmt_node_linkage[block_index][(ict*nodes_per_element[block_index])+nct]-1];
420 //std::cout<<" Node linkage id = "<<elmt_node_linkage[block_index][(ict*nodes_per_element[block_index])+nct]<<std::endl;
421 //std::cout<<" Node global id = "<<nodes[nct]<<std::endl;
422 }
423
424 stk::mesh::EntityId gid = mss->global_element_numbers[elm_start+ ict-1];
425 RCP<ElementDescriptor> ed = rcp(new ElementDescriptor(gid,nodes));
426 mesh.addElement(ed,block);
427 }
428 }
429 else {
430 elmt_node_linkage[block_index] = NULL;
431 }
432}
433
434const stk::mesh::Relation * SculptMeshFactory::getRelationByID(unsigned ID,stk::mesh::PairIterRelation relations) const
435{
436 for(std::size_t i=0;i<relations.size();i++)
437 if(relations[i].identifier()==ID)
438 return &relations[i];
439
440 return 0;
441}
442
443
444
446{
447 mesh.beginModification();
448
449 struct MeshStorageStruct *mss = get_sculpt_mesh();
450 int num_side_sets = mss->num_side_sets;
451
452 int *side_set_id = new int[num_side_sets];
453 int *num_elements_in_side_set = new int[num_side_sets];
454 int *num_nodes_in_side_set = new int[num_side_sets];
455 int *num_df_in_side_set = new int[num_side_sets];
456 int **side_set_elements = new int*[num_side_sets];
457 int **side_set_faces = new int*[num_side_sets];
458 //Element_Type **side_set_element_type = new Element_Type*[num_side_sets];
459 int **side_set_node_counter = new int*[num_side_sets];
460 int **side_set_nodes = new int*[num_side_sets];
461 double **side_set_df = new double*[num_side_sets];
462
463 for(int ict = 0;ict < num_side_sets;ict ++){
464 side_set_id[ict] = mss->side_set_id[ict];
465 }
466
467 for(int i = 0; i < num_side_sets; i++) {
468
469 std::stringstream sidesetName;
470 sidesetName << "Sideset-" << mss->side_set_id[i];
471 stk::mesh::Part * sideset = mesh.getSideset(sidesetName.str());
472
473
474 num_elements_in_side_set[i] = mss->num_elements_in_side_set[i];
475 num_df_in_side_set[i] = mss->num_df_in_side_set[i];
476
477 int ne = num_elements_in_side_set[i];
478 side_set_elements[i] = new int[ne];
479 side_set_faces[i] = new int[ne];
480 //side_set_element_type[i] = new Element_Type[ne];
481 side_set_node_counter[i] = new int[ne];
482 side_set_df[i] = new double[num_df_in_side_set[i]];
483
484
485 if(ne) {
486
487 for(int nct = 0; nct < ne; nct ++){
488
489 std::vector<stk::mesh::EntityId> nodes(4);
490
491 int sculpt_elem_id = mss->global_element_numbers[ mss->side_set_elements[i][nct]-1 ];
492 int sculpt_face_id = -1 ;
493
494 std::vector<stk::mesh::Entity> localElmts;
495 mesh.getMyElements(localElmts);
496
497 std::vector<stk::mesh::Entity>::const_iterator itr;
498 for(itr=localElmts.begin();itr!=localElmts.end();++itr) {
499 stk::mesh::Entity element = (*itr);
500
501 if( element->identifier() == sculpt_elem_id )
502 {
503 sculpt_face_id = mss->side_set_faces[i][nct];
504
505 stk::mesh::EntityId gid = element->identifier();
506
507 stk::mesh::PairIterRelation relations = element->relations(mesh.getSideRank());
508
509 stk::mesh::Entity side = getRelationByID(sculpt_face_id-1,relations)->entity();
510
511 if( side != NULL )
512 {
513 if(side->owner_rank()==machRank_)
514 mesh.addEntityToSideset(*side,sideset );
515 }
516 }
517 }
518
519 if( sculpt_face_id == -1 )
520 printf(" ERROR: Could not find the element id for a sideset face \n");
521 }
522 }
523 }
524 mesh.endModification();
525}
526
528{
529 mesh.beginModification();
530
531 struct MeshStorageStruct *mss = get_sculpt_mesh();
532 int num_node_sets = mss->num_node_sets;
533
534
535 if (num_node_sets) {
536 int *node_set_id = new int[num_node_sets];
537 int *num_nodes_in_node_set = new int[num_node_sets];
538 int *num_df_in_node_set = new int[num_node_sets];
539 int **node_set_nodes = new int*[num_node_sets];
540 double **node_set_df = new double*[num_node_sets];
541
542 for(int ict = 0; ict < num_node_sets; ict ++){
543 node_set_id[ict] = mss->node_set_id[ict];
544 num_nodes_in_node_set[ict] = mss->num_nodes_in_node_set[ict];
545 num_df_in_node_set[ict] = mss->num_df_in_node_set[ict];
546 }
547
548 for(int i = 0; i < num_node_sets; i++) {
549 node_set_nodes[i] = new int[num_nodes_in_node_set[i]];
550 node_set_df[i] = NULL;
551 if(num_nodes_in_node_set[i]) {
552 for(int nct = 0; nct < num_nodes_in_node_set[i];nct ++){
553 node_set_nodes[i][nct] = mss->node_set_nodes[i][nct];
554 }
555 }
556 }
557
558
559 for(int i = 0; i < num_node_sets; i++) {
560
561 std::stringstream nodesetName;
562 nodesetName << "Nodeset-" << mss->node_set_id[i];
563 stk::mesh::Part * nodeset = mesh.getNodeset(nodesetName.str());
564
565 for( int j = 0; j < num_nodes_in_node_set[i]; j++ )
566 {
567 int node_id = node_set_nodes[i][j];
568 Teuchos::RCP<stk::mesh::BulkData> bulkData = mesh.getBulkData();
569 if(machRank_==0)
570 {
571 stk::mesh::Entity node = bulkData->get_entity(mesh.getNodeRank(),node_id);
572 mesh.addEntityToNodeset(*node, nodeset);
573 }
574 }
575 }
576
577 }
578 mesh.endModification();
579}
580
581void ScupltMeshFactory::addEdgeBlocks(STK_Interface & mesh) const
582{
583 mesh.beginModification();
584
585 stk::mesh::Part * edge_block = mesh.getEdgeBlock(panzer_stk::STK_Interface::edgeBlockString);
586
587 Teuchos::RCP<stk::mesh::BulkData> bulkData = mesh.getBulkData();
588 Teuchos::RCP<stk::mesh::MetaData> metaData = mesh.getMetaData();
589
590 std::vector<stk::mesh::Entity> edges;
591 bulkData->get_entities(mesh.getEdgeRank(),metaData->locally_owned_part(),edges);
592 for(auto edge : edges) {
593 mesh.addEntityToEdgeBlock(edge, edge_block);
594 }
595
596 mesh.endModification();
597}
598
599void ScupltMeshFactory::addFaceBlocks(STK_Interface & mesh) const
600{
601 mesh.beginModification();
602
603 stk::mesh::Part * face_block = mesh.getFaceBlock(panzer_stk::STK_Interface::faceBlockString);
604
605 Teuchos::RCP<stk::mesh::BulkData> bulkData = mesh.getBulkData();
606 Teuchos::RCP<stk::mesh::MetaData> metaData = mesh.getMetaData();
607
608 std::vector<stk::mesh::Entity> faces;
609 bulkData->get_entities(mesh.getFaceRank(),metaData->locally_owned_part(),faces);
610 for(auto face : faces) {
611 mesh.addEntityToFaceBlock(face, face_block);
612 }
613
614 mesh.endModification();
615}
616
618Teuchos::Tuple<std::size_t,2> SculptMeshFactory::procRankToProcTuple(std::size_t procRank) const
619{
620 std::size_t i=0,j=0;
621
622 j = procRank/machSize_;
623 procRank = procRank % machSize_;
624 i = procRank;
625
626 return Teuchos::tuple(i,j);
627}
628
629} // end panzer_stk
void initialize(stk::ParallelMachine parallelMach, bool setupIO=true, const bool buildRefinementSupport=false)
stk::mesh::Part * getElementBlockPart(const std::string &name) const
get the block part
static const std::string edgeBlockString
stk::mesh::Part * getEdgeBlock(const std::string &name) const
get the block part
void addEntityToEdgeBlock(stk::mesh::Entity entity, stk::mesh::Part *edgeblock)
bool isInitialized() const
Has initialize been called on this mesh object?
stk::mesh::EntityRank getNodeRank() const
void addEdgeBlock(const std::string &elemBlockName, const std::string &edgeBlockName, const stk::topology &topology)
void buildSubcells()
force the mesh to build subcells: edges and faces
void addEntityToNodeset(stk::mesh::Entity entity, stk::mesh::Part *nodeset)
void addElement(const Teuchos::RCP< ElementDescriptor > &ed, stk::mesh::Part *block)
void addNode(stk::mesh::EntityId gid, const std::vector< double > &coord)
void addNodeset(const std::string &name)
void addSideset(const std::string &name, const CellTopologyData *ctData)
Teuchos::RCP< stk::mesh::MetaData > getMetaData() const
stk::mesh::Part * getNodeset(const std::string &name) const
void endModification(const bool find_and_set_shared_nodes_in_stk=true)
void addEntityToSideset(stk::mesh::Entity entity, stk::mesh::Part *sideset)
stk::mesh::EntityRank getSideRank() const
void getMyElements(std::vector< stk::mesh::Entity > &elements) const
void addElementBlock(const std::string &name, const CellTopologyData *ctData)
void addFaceBlock(const std::string &elemBlockName, const std::string &faceBlockName, const stk::topology &topology)
Teuchos::RCP< stk::mesh::BulkData > getBulkData() const
static const std::string faceBlockString
stk::mesh::EntityRank getEdgeRank() const
stk::mesh::Part * getSideset(const std::string &name) const
void rebalance(STK_Interface &mesh) const
static void parsePeriodicBCList(const Teuchos::RCP< Teuchos::ParameterList > &pl, std::vector< Teuchos::RCP< const PeriodicBC_MatcherBase > > &periodicBC, bool &useBBoxSearch)
std::vector< Teuchos::RCP< const PeriodicBC_MatcherBase > > periodicBCVec_
const stk::mesh::Relation * getRelationByID(unsigned ID, stk::mesh::PairIterRelation edges) const
void addEdgeBlocks(STK_Interface &mesh) const
Teuchos::RCP< STK_Interface > buildMesh(stk::ParallelMachine parallelMach) const
Build the mesh object.
void addNodeSets(STK_Interface &mesh) const
int writeDiatomFile(std::string stl_path, std::string stl_filename, char *diatom_file) const
Teuchos::Tuple< std::size_t, 2 > procTuple_
void addSideSets(STK_Interface &mesh) const
virtual Teuchos::RCP< STK_Interface > buildUncommitedMesh(stk::ParallelMachine parallelMach) const
void buildBlock(stk::ParallelMachine parallelMach, STK_Interface &mesh, int block_index, int *block_id, int elem_start, int *elements, int *nodes_per_elem, int *elem_attributes, int **elm_node_linkage) const
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
From ParameterListAcceptor.
int callSculptor(stk::ParallelMachine parallelMach, char *diatom_file) const
void buildMetaData(stk::ParallelMachine parallelMach, STK_Interface &mesh) const
void buildElements(stk::ParallelMachine parallelMach, STK_Interface &mesh) const
Teuchos::Tuple< std::size_t, 2 > procRankToProcTuple(std::size_t procRank) const
what is the 2D tuple describe this processor distribution
void buildNodes(stk::ParallelMachine parallelMach, STK_Interface &mesh) const
void addFaceBlocks(STK_Interface &mesh) const
void setParameterList(const Teuchos::RCP< Teuchos::ParameterList > &paramList)
From ParameterListAcceptor.
virtual void completeMeshConstruction(STK_Interface &mesh, stk::ParallelMachine parallelMach) const