12 namespace GridConversion {
14 namespace DriverProgram {
27 std::ostringstream Ostr;
33 std::ostringstream ErrOstr;
34 ErrOstr <<
"Error reading input file." << std::endl;
37 ErrOut(ErrOstr.str());
44 Ostr <<
"nodes: " << std::endl;
46 Ostr <<
i+1 <<
":" << std::endl;
47 for(
int j=0;
j < 3;
j++){
58 Ostr <<
"elements: " << std::endl;
60 Ostr <<
i+1 <<
":" << std::endl;
62 Ostr <<
elems[
i*numNodesPerElem +
j] <<
" ";
72 Ostr <<
"domains: " << std::endl;
74 Ostr <<
i+1 <<
":" << std::endl;
84 std::cout <<
"line " << __LINE__ << std::endl;
87 SolverUtils::Mesh::Connectivity utilsElems;
89 std::cout <<
"line " << __LINE__ << std::endl;
92 SolverUtils::Mesh::Connectivity nodesToElems;
94 utilsElems.Inverse(nodesToElems,
numNodes);
95 std::cout <<
"line " << __LINE__ << std::endl;
98 SolverUtils::Mesh::Connectivity utilsDomains;
100 utilsDomains.AddElement(
domains[
i]);
102 std::cout <<
"line " << __LINE__ << std::endl;
107 std::cout <<
"line " << __LINE__ << std::endl;
111 Ostr <<
"Domain connectivity: " << std::endl;
112 for(
int i=0;
i < utilsDomains.size();
i++){
113 Ostr <<
i <<
":" << std::endl;
114 for(
int j=0;
j < utilsDomains[
i].size();
j++){
115 Ostr << utilsDomains[
i][
j] <<
" ";
129 Ostr <<
"Nodes to elements: " << std::endl;
130 for(
int i=0;
i < nodesToElems.size();
i++){
132 for(
int j=0;
j < nodesToElems[
i].size();
j++){
133 Ostr << nodesToElems[
i][
j] <<
" ";
141 Ostr <<
"Nodes to domains: " << std::endl;
158 std::ostringstream ErrOstr;
159 ErrOstr <<
"Only 4 node tetrahedra can be made into" << std::endl
160 <<
"quadratic elements!" << std::endl;
163 ErrOut(ErrOstr.str());
172 SolverUtils::Mesh::Connectivity utilsElemToElemEdges;
174 std::cout <<
"line " << __LINE__ << std::endl;
177 SolverUtils::Mesh::Connectivity elemEdgeToElems;
178 utilsElemToElemEdges.Sync();
179 utilsElemToElemEdges.Inverse(elemEdgeToElems,
numElemEdges);
183 Ostr <<
"Element edges to elements: " << std::endl;
184 for(
int i=0;
i < elemEdgeToElems.size();
i++){
185 Ostr <<
i+1 <<
":" << std::endl;
186 for(
int j=0;
j < elemEdgeToElems[
i].size();
j++){
187 Ostr << elemEdgeToElems[
i][
j] <<
" ";
191 std::cout <<
"line " << __LINE__ << std::endl;
199 Ostr <<
"(after higher order) nodes: " << std::endl;
201 Ostr <<
i+1 <<
":" << std::endl;
202 for(
int j=0;
j < 3;
j++){
213 Ostr <<
"(after higher order) elements: " << std::endl;
215 Ostr <<
i+1 <<
":" << std::endl;
217 Ostr <<
elems[
i*numNodesPerElem +
j] <<
" ";
221 std::cout <<
"line " << __LINE__ << std::endl;
225 std::cout <<
"line " << __LINE__ << std::endl;
229 Ostr <<
"(after higher order) domains: " << std::endl;
231 Ostr <<
i+1 <<
":" << std::endl;
240 SolverUtils::Mesh::Connectivity newUtilsElems;
242 std::cout <<
"line " << __LINE__ << std::endl;
245 nodesToElems.clear();
246 newUtilsElems.Sync();
247 newUtilsElems.Inverse(nodesToElems,
numNodes);
248 std::cout <<
"line " << __LINE__ << std::endl;
251 SolverUtils::Mesh::Connectivity newUtilsDomains;
253 newUtilsDomains.AddElement(
domains[
i]);
255 std::cout <<
"line " << __LINE__ << std::endl;
260 std::cout <<
"line " << __LINE__ << std::endl;
264 newUtilsDomains.Sync();
269 Ostr <<
"Nodes to elements: " << std::endl;
270 for(
int i=0;
i < nodesToElems.size();
i++){
272 for(
int j=0;
j < nodesToElems[
i].size();
j++){
273 Ostr << nodesToElems[
i][
j] <<
" ";
281 Ostr <<
"Nodes to domains: " << std::endl;
302 std::map<int, int>domCount;
303 std::cout <<
"elem " <<
i+1 << std::endl;
307 std::cout <<
"node " <<
j+1 <<
" (" << node <<
")" << std::endl;
311 std::cout <<
"domain " <<
k+1 <<
" ("
316 if( domCount.find(domain) == domCount.end() )
317 domCount[domain] = 1;
321 std::cout <<
"domCount = " << domCount[domain] << std::endl;
332 if(newValue && domCount[domain] > 2){
333 std::cout <<
"Adding domain" << std::endl;
342 Ostr <<
"Elems to domains: " << std::endl;
354 Ostr <<
"domain bcs: " << std::endl;
366 Ostr <<
"domain bc values: " << std::endl;
368 Ostr <<
i+1 <<
": " << std::endl;
381 Ostr <<
"edges: " << std::endl;
382 for(
int i=0;
i <
edges.size();
i++){
393 Ostr <<
"edge bcs: " << std::endl;
405 Ostr <<
"edge bc values: " << std::endl;
407 Ostr <<
i+1 <<
": " << std::endl;
419 std::cout <<
"line " << __LINE__ << std::endl;
432 bool newValue =
true;
435 for(
int l=0; l <
nodeBCs[node].size(); l++){
468 for(
int l=0; l <
nodeBCValues[node][type8BC].size(); l++)
477 std::cout <<
"line " << __LINE__ << std::endl;
480 for(
int i=0;
i <
edges.size();
i++){
495 bool newValue =
true;
500 for(
int l=0; l <
nodeBCs[node].size(); l++){
533 for(
int l=0; l <
nodeBCValues[node][type8BC].size(); l++)
543 std::cout <<
"line " << __LINE__ << std::endl;
546 Ostr <<
"nodal bcs: " << std::endl;
556 std::cout <<
"line " << __LINE__ << std::endl;
559 Ostr <<
"nodal bc values: " << std::endl;
561 Ostr <<
i+1 <<
": " << std::endl;
574 std::cout <<
"line " << __LINE__ << std::endl;
580 std::cout <<
"node " <<
i+1 << std::endl;
582 for(
int j=0;
j < nodesToElems[
i].size();
j++){
584 elem = nodesToElems[
i][
j]-1;
585 std::cout <<
"elem " << elem+1 << std::endl;
589 std::cout <<
"line " << __LINE__ << std::endl;
591 bool newValue =
true;
592 std::cout <<
"nodeBC " <<
nodeBCs[
i][
k] << std::endl;
594 for(
int l=0; l <
elemBCs[elem].size(); l++){
595 std::cout <<
"elemBC " <<
elemBCs[elem][l] << std::endl;
609 std::cout <<
"newValue" << std::endl;
614 std::cout <<
"line " << __LINE__ << std::endl;
619 std::cout <<
"line " << __LINE__ << std::endl;
622 Ostr <<
"elemBCs:" << std::endl;
633 std::cout <<
"line " << __LINE__ << std::endl;
637 Ostr <<
"elem BC values:" << std::endl;
639 Ostr <<
i+1 <<
": " << std::endl;
651 std::cout <<
"line " << __LINE__ << std::endl;
654 std::cout <<
"line " << __LINE__ << std::endl;
656 std::ostringstream ErrOstr;
657 ErrOstr <<
"Error writing output file." << std::endl;
660 ErrOut(ErrOstr.str());
673 std::cout <<
"line " << __LINE__ << std::endl;
virtual int WriteOutput()
This function writes the output grid file.
virtual int HigherOrderTets(SolverUtils::Mesh::Connectivity elemEdgeToElems, SolverUtils::Mesh::Connectivity nodesToDomains)
This function creates higher order tets from linear tets.
std::vector< std::vector< unsigned int > > domains
vector of vectors to hold the domains
std::vector< std::vector< int > > elemBCs
vector to hold list of element bc values
int numElemEdges
number of element edges in mesh
virtual int Run()
This function implements the main function executed by the program.
virtual int ConnectivityMaps(SolverUtils::Mesh::Connectivity nodesToElems)
This function creates a few different connectivity maps that are needed.
std::vector< unsigned int > elemToElemEdges
map of elements to element edges
GridConversion interface.
std::vector< unsigned int > elems
vector for holding element connectivies read from input
int numElems
number of elements in mesh
std::vector< std::vector< int > > edgeBCs
vector to hold list of edge bc flags
std::vector< std::vector< int > > elemsToDomains
vector to hold the domains for each element
int verblevel
Verbosity level.
std::vector< std::vector< int > > nodeBCs
SolverUtils::Mesh::Connectivity nodesToDomains
int numNodesPerElem
number of nodes per element
std::vector< std::vector< int > > domainBCs
vector to hold list of domain bc flags
virtual int ReadStanfordInput()
This function parses a Stanford format input file.
std::vector< std::vector< int > > edges
vector of vectors to hold the edges
std::vector< std::vector< std::vector< double > > > domainBCValues
vector to hold list of domain bc values (these are different for each bc type - see the Rocfrac docum...
std::vector< std::vector< std::vector< double > > > edgeBCValues
vector to hold list of edge bc values (these are different for each bc type - see the Rocfrac documen...
int numNodes
number of nodes in mesh
std::vector< double > nodes
vector for holding nodal coordinates read from input
std::vector< std::vector< std::vector< double > > > elemBCValues
vector to hold list of element bc values (these are different for each bc type - see the Rocfrac docu...
std::vector< std::vector< std::vector< double > > > nodeBCValues
vector to hold list of node bc values (these are different for each bc type - see the Rocfrac documen...
bool quadratic
boolean for changing the elements to higher order