[cig-commits] r7480 - in short/3D/PyLith/trunk: libsrc/faults
unittests/libtests/faults/data
knepley at geodynamics.org
knepley at geodynamics.org
Mon Jun 25 10:41:06 PDT 2007
Author: knepley
Date: 2007-06-25 10:41:05 -0700 (Mon, 25 Jun 2007)
New Revision: 7480
Modified:
short/3D/PyLith/trunk/libsrc/faults/CohesiveTopology.cc
short/3D/PyLith/trunk/libsrc/faults/CohesiveTopology.hh
short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8.cc
short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8Lagrange.cc
short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8b.cc
short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8c.cc
short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8d.cc
short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8e.cc
short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8f.cc
short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8g.cc
short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8h.cc
short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataQuad4f.cc
short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataTet4.cc
short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataTet4Lagrange.cc
short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataTet4c.cc
short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataTet4f.cc
short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataTet4i.cc
short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataTri3e.cc
short/3D/PyLith/trunk/unittests/libtests/faults/data/hex8h.mesh
short/3D/PyLith/trunk/unittests/libtests/faults/data/tet4i.mesh
Log:
Really crappy fix for fault orientation. Must be redone
Modified: short/3D/PyLith/trunk/libsrc/faults/CohesiveTopology.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/CohesiveTopology.cc 2007-06-25 16:58:30 UTC (rev 7479)
+++ short/3D/PyLith/trunk/libsrc/faults/CohesiveTopology.cc 2007-06-25 17:41:05 UTC (rev 7480)
@@ -33,8 +33,25 @@
// Create set with vertices on fault
const int_section_type::chart_type& chart = groupField->getChart();
std::set<Mesh::point_type> faultVertices; // Vertices on fault
+ const ALE::Obj<sieve_type>& sieve = mesh->getSieve();
+ *fault = new Mesh(mesh->comm(), mesh->getDimension()-1, mesh->debug());
+ const ALE::Obj<sieve_type> faultSieve = new sieve_type(sieve->comm(),
+ sieve->debug());
+ const int numCells = mesh->heightStratum(0)->size();
+ int numCorners = 0;
+ int faceSize = 0;
+ int *indices = NULL;
+ int oppositeVertex;
+ PointArray origVertices;
+ PointArray faceVertices;
+ PointArray neighborVertices;
- const int numCells = mesh->heightStratum(0)->size();
+ if (!(*fault)->commRank()) {
+ numCorners = sieve->nCone(*mesh->heightStratum(0)->begin(), mesh->depth())->size();
+ faceSize = _numFaceVertices(*mesh->heightStratum(0)->begin(), mesh, -1);
+ indices = new int[faceSize];
+ }
+
for(int_section_type::chart_type::iterator c_iter = chart.begin();
c_iter != chart.end();
++c_iter) {
@@ -42,10 +59,6 @@
faultVertices.insert(*c_iter);
} // for
- const ALE::Obj<sieve_type>& sieve = mesh->getSieve();
- *fault = new Mesh(mesh->comm(), mesh->debug());
- const ALE::Obj<sieve_type> faultSieve = new sieve_type(sieve->comm(),
- sieve->debug());
const std::set<Mesh::point_type>::const_iterator fvBegin =
faultVertices.begin();
const std::set<Mesh::point_type>::const_iterator fvEnd =
@@ -53,7 +66,7 @@
int f = sieve->base()->size() + sieve->cap()->size();
int debug = mesh->debug();
- ALE::Obj<PointArray> face = new PointArray();
+ ALE::Obj<std::set<Mesh::point_type> > face = new std::set<Mesh::point_type>();
std::set<Mesh::point_type> faultCells;
// Create a sieve which captures the fault
@@ -70,50 +83,78 @@
for(sieveAlg::supportArray::iterator c_iter = cBegin;
c_iter != cEnd;
++c_iter) {
- const unsigned int faceSize = _numFaceVertices(*c_iter, mesh);
+ const unsigned int faceSize = _numFaceVertices(*c_iter, mesh, -1);
- if (debug)
- std::cout << " Checking cell " << *c_iter << std::endl;
- if (faultCells.find(*c_iter) != faultCells.end())
- continue;
+ if (debug) std::cout << " Checking cell " << *c_iter << std::endl;
+ if (faultCells.find(*c_iter) != faultCells.end()) continue;
const ALE::Obj<sieveAlg::coneArray>& cone =
sieveAlg::nCone(mesh, *c_iter, mesh->height());
const sieveAlg::coneArray::iterator vBegin = cone->begin();
const sieveAlg::coneArray::iterator vEnd = cone->end();
-
+
face->clear();
for(sieveAlg::coneArray::iterator v_iter = vBegin;
v_iter != vEnd;
++v_iter) {
- if (faultVertices.find(*v_iter) != fvEnd) {
- if (debug)
- std::cout << " contains fault vertex " << *v_iter << std::endl;
- face->insert(face->end(), *v_iter);
- } // if
+ if (faultVertices.find(*v_iter) != fvEnd) {
+ if (debug) std::cout << " contains fault vertex " << *v_iter << std::endl;
+ face->insert(face->end(), *v_iter);
+ } // if
} // for
if (face->size() > faceSize)
- throw ALE::Exception("Invalid fault mesh: Too many vertices of an "
- "element on the fault");
+ throw ALE::Exception("Invalid fault mesh: Too many vertices of an "
+ "element on the fault");
if (face->size() == faceSize) {
if (debug)
std::cout << " Contains a face on the fault" << std::endl;
- const ALE::Obj<sieve_type::supportSet> preFace =
- faultSieve->nJoin1(face);
-
- if (preFace->size() > 1)
+ const ALE::Obj<sieve_type::supportSet> preFace = faultSieve->nJoin1(face);
+
+ if (preFace->size() > 1) {
throw ALE::Exception("Invalid fault sieve: Multiple faces from "
"vertex set");
- else if (preFace->size() == 1)
- faultSieve->addArrow(*preFace->begin(), *c_iter);
- else if (preFace->size() == 0) {
- if (debug)
- std::cout << " Adding face " << f << std::endl;
+ } else if (preFace->size() == 1) {
+ const Mesh::point_type faultFace = *preFace->begin();
+
+ if (*c_iter < *faultSieve->support(faultFace)->begin()) {
+ if (debug) std::cout << " Reversing face " << faultFace << std::endl;
+ faceVertices.clear();
+ const ALE::Obj<sieve_type::traits::coneSequence>& cone = faultSieve->cone(faultFace);
+ for(sieve_type::traits::coneSequence::iterator v_iter = cone->begin();
+ v_iter != cone->end(); ++v_iter) {
+ faceVertices.insert(faceVertices.begin(), *v_iter);
+ }
+ faultSieve->clearCone(faultFace);
+ int color = 0;
+ for(PointArray::const_iterator v_iter = faceVertices.begin();
+ v_iter != faceVertices.end(); ++v_iter) {
+ faultSieve->addArrow(*v_iter, faultFace, color++);
+ } // for
+ }
+ faultSieve->addArrow(faultFace, *c_iter);
+ } else if (preFace->size() == 0) {
+ if (debug) std::cout << " Adding face " << f << std::endl;
+ // Give the face an orientation
+ const ALE::Obj<sieve_type::traits::coneSequence>& cone = sieve->cone(*c_iter);
+
+ origVertices.clear();
+ faceVertices.clear();
+ int v = 0;
+ for(sieve_type::traits::coneSequence::iterator v_iter = cone->begin();
+ v_iter != cone->end(); ++v_iter, ++v) {
+ if (face->find(*v_iter) != face->end()) {
+ if (debug) std::cout << " vertex " << *v_iter << std::endl;
+ indices[origVertices.size()] = v;
+ origVertices.insert(origVertices.end(), *v_iter);
+ } else {
+ if (debug) std::cout << " vertex " << *v_iter << std::endl;
+ oppositeVertex = v;
+ } // if/else
+ }
+ _faceOrientation(*c_iter, mesh, numCorners, indices, oppositeVertex, &origVertices, &faceVertices);
int color = 0;
- for(PointArray::const_iterator f_iter = face->begin();
- f_iter != face->end();
- ++f_iter) {
- if (debug)
- std::cout << " vertex " << *f_iter << std::endl;
+ for(PointArray::const_iterator f_iter = faceVertices.begin();
+ f_iter != faceVertices.end(); ++f_iter) {
+ if (debug) std::cout << " vertex " << *f_iter << std::endl;
faultSieve->addArrow(*f_iter, f, color++);
} // for
faultSieve->addArrow(f, *c_iter);
@@ -126,9 +167,112 @@
(*fault)->setSieve(faultSieve);
(*fault)->stratify();
faultCells.clear();
- if (debug)
- (*fault)->view("Fault mesh");
+ if (debug) (*fault)->view("Fault mesh");
+ // Orient the fault sieve
+ int numFaultCorners = 0;
+ PointArray flippedFaces;
+ if (!(*fault)->commRank()) {
+ numFaultCorners = faultSieve->nCone(*(*fault)->heightStratum(1)->begin(), (*fault)->depth()-1)->size();
+ if (debug) std::cout << " Fault corners " << numFaultCorners << std::endl;
+ }
+ const ALE::Obj<Mesh::label_sequence>& fFaces = (*fault)->heightStratum(1);
+ int faultFaceSize = _numFaceVertices(*fFaces->begin(), (*fault), (*fault)->depth()-1);
+ if (debug) std::cout << " Fault face size " << faultFaceSize << std::endl;
+ for(Mesh::label_sequence::iterator e_iter = fFaces->begin(); e_iter != fFaces->end(); ++e_iter) {
+ if (debug) std::cout << " Checking fault face " << *e_iter << std::endl;
+ const Obj<sieve_type::traits::coneSequence>& vertices = faultSieve->cone(*e_iter);
+ sieve_type::traits::coneSequence::iterator vEnd = vertices->end();
+ std::set<Mesh::point_type> facesSeen;
+
+ for(sieve_type::traits::coneSequence::iterator v_iter = vertices->begin(); v_iter != vEnd; ++v_iter) {
+ const Obj<sieve_type::traits::supportSequence>& neighbors = faultSieve->support(*v_iter);
+ sieve_type::traits::supportSequence::iterator nEnd = neighbors->end();
+
+ for(sieve_type::traits::supportSequence::iterator n_iter = neighbors->begin(); n_iter != nEnd; ++n_iter) {
+ if (facesSeen.find(*n_iter) != facesSeen.end()) continue;
+ facesSeen.insert(*n_iter);
+ if (debug) std::cout << " Checking fault neighbor " << *n_iter << std::endl;
+ if (*e_iter >= *n_iter) continue;
+ const ALE::Obj<sieve_type::coneSet>& meet = faultSieve->nMeet(*e_iter, *n_iter, 1);
+
+ for(sieve_type::coneSet::iterator c_iter = meet->begin(); c_iter != meet->end(); ++c_iter) {
+ if (debug) std::cout << " meet " << *c_iter << std::endl;
+ }
+ if ((int) meet->size() == faultFaceSize) {
+ if (debug) std::cout << " Found neighboring fault face " << *n_iter << std::endl;
+ // Give the faces an orientation
+ const ALE::Obj<sieve_type::traits::coneSequence>& eCone = faultSieve->cone(*e_iter);
+
+ origVertices.clear();
+ faceVertices.clear();
+ int v = 0;
+ for(sieve_type::traits::coneSequence::iterator v_iter = eCone->begin(); v_iter != eCone->end(); ++v_iter, ++v) {
+ if (meet->find(*v_iter) != meet->end()) {
+ indices[origVertices.size()] = v;
+ origVertices.insert(origVertices.end(), *v_iter);
+ if (debug) std::cout << " vertex " << *v_iter << std::endl;
+ } else {
+ oppositeVertex = v;
+ if (debug) std::cout << " vertex " << *v_iter << " opposite vertex " << oppositeVertex << std::endl;
+ } // if/else
+ }
+ bool eOrient = _faceOrientation(*e_iter, (*fault), numFaultCorners, indices, oppositeVertex, &origVertices, &faceVertices);
+ const ALE::Obj<sieve_type::traits::coneSequence>& nCone = faultSieve->cone(*n_iter);
+
+ origVertices.clear();
+ neighborVertices.clear();
+ v = 0;
+ for(sieve_type::traits::coneSequence::iterator v_iter = nCone->begin(); v_iter != nCone->end(); ++v_iter, ++v) {
+ if (meet->find(*v_iter) != meet->end()) {
+ indices[origVertices.size()] = v;
+ origVertices.insert(origVertices.end(), *v_iter);
+ if (debug) std::cout << " vertex " << *v_iter << std::endl;
+ } else {
+ oppositeVertex = v;
+ if (debug) std::cout << " vertex " << *v_iter << " opposite vertex " << oppositeVertex << std::endl;
+ } // if/else
+ }
+ bool nOrient = _faceOrientation(*n_iter, (*fault), numFaultCorners, indices, oppositeVertex, &origVertices, &neighborVertices);
+ if (faultFaceSize > 1) {
+ for(PointArray::iterator v_iter = faceVertices.begin(); v_iter != faceVertices.end(); ++v_iter) {
+ if (debug) std::cout << " face vertex " << *v_iter << std::endl;
+ }
+ for(PointArray::iterator v_iter = neighborVertices.begin(); v_iter != neighborVertices.end(); ++v_iter) {
+ if (debug) std::cout << " neighbor vertex " << *v_iter << std::endl;
+ }
+ if (*faceVertices.begin() == *neighborVertices.begin()) {
+ if (debug) std::cout << " Scheduling fault face " << *n_iter << " to be flipped" << std::endl;
+ flippedFaces.push_back(*n_iter);
+ }
+ } else {
+ if (nOrient == eOrient) {
+ if (debug) std::cout << " Scheduling fault face " << *n_iter << " to be flipped" << std::endl;
+ flippedFaces.push_back(*n_iter);
+ }
+ }
+ }
+ }
+ }
+ }
+ for(PointArray::const_iterator f_iter = flippedFaces.begin(); f_iter != flippedFaces.end(); ++f_iter) {
+ if (debug) std::cout << " Reversing fault face " << *f_iter << std::endl;
+ faceVertices.clear();
+ const ALE::Obj<sieve_type::traits::coneSequence>& cone = faultSieve->cone(*f_iter);
+ for(sieve_type::traits::coneSequence::iterator v_iter = cone->begin();
+ v_iter != cone->end(); ++v_iter) {
+ faceVertices.insert(faceVertices.begin(), *v_iter);
+ }
+ faultSieve->clearCone(*f_iter);
+ int color = 0;
+ for(PointArray::const_iterator v_iter = faceVertices.begin();
+ v_iter != faceVertices.end(); ++v_iter) {
+ faultSieve->addArrow(*v_iter, *f_iter, color++);
+ } // for
+ }
+ flippedFaces.clear();
+ if (debug) (*fault)->view("Oriented Fault mesh");
+
// Add new shadow vertices and possibly Lagrange multipler vertices
const ALE::Obj<Mesh::label_sequence>& fVertices = (*fault)->depthStratum(0);
const ALE::Obj<Mesh::label_sequence>& vertices = mesh->depthStratum(0);
@@ -169,20 +313,9 @@
// Split the mesh along the fault sieve and create cohesive elements
const ALE::Obj<Mesh::label_sequence>& faces = (*fault)->depthStratum(1);
const ALE::Obj<Mesh::label_type>& material = mesh->getLabel("material-id");
- PointArray origVertices;
+ int firstCohesiveCell = newPoint;
PointArray newVertices;
- int oppositeVertex;
- int numCorners = 0;
- int faceSize = 0;
- int *indices = NULL;
- int firstCohesiveCell;
- if (!(*fault)->commRank()) {
- numCorners = sieve->nCone(*mesh->heightStratum(0)->begin(), mesh->depth())->size();
- faceSize = _numFaceVertices(*mesh->heightStratum(0)->begin(), mesh);
- indices = new int[faceSize];
- firstCohesiveCell = newPoint;
- }
for(Mesh::label_sequence::iterator f_iter = faces->begin();
f_iter != faces->end();
++f_iter, ++newPoint) {
@@ -190,18 +323,59 @@
std::cout << "Considering fault face " << *f_iter << std::endl;
const ALE::Obj<sieve_type::traits::supportSequence>& cells =
faultSieve->support(*f_iter);
- Mesh::point_type cell = std::max(*cells->begin(), *(++cells->begin()));
+ Mesh::point_type cell = *cells->begin();
const ALE::Obj<sieve_type::traits::coneSequence>& cone = sieve->cone(cell);
- if (debug)
- std::cout << " Replacing cell " << cell << std::endl;
+ if (debug) std::cout << " Checking orientation against cell " << cell << std::endl;
origVertices.clear();
- newVertices.clear();
+ faceVertices.clear();
int v = 0;
- for(sieve_type::traits::coneSequence::iterator v_iter = cone->begin();
- v_iter != cone->end();
- ++v_iter, ++v) {
+ for(sieve_type::traits::coneSequence::iterator v_iter = cone->begin(); v_iter != cone->end(); ++v_iter, ++v) {
if (vertexRenumber.find(*v_iter) != vertexRenumber.end()) {
+ if (debug) std::cout << " vertex " << vertexRenumber[*v_iter] << std::endl;
+ indices[origVertices.size()] = v;
+ origVertices.insert(origVertices.end(), *v_iter);
+ } else {
+ if (debug) std::cout << " vertex " << *v_iter << " opposite vertex " << v << std::endl;
+ oppositeVertex = v;
+ } // if/else
+ }
+ _faceOrientation(cell, mesh, numCorners, indices, oppositeVertex, &origVertices, &faceVertices);
+ const ALE::Obj<sieve_type::traits::coneSequence>& faceCone = faultSieve->cone(*f_iter);
+ bool found = true;
+
+ v = 0;
+ for(sieve_type::traits::coneSequence::iterator v_iter = faceCone->begin(); v_iter != faceCone->end(); ++v_iter, ++v) {
+ if (debug) std::cout << " Checking " << *v_iter << " against " << faceVertices[v] << std::endl;
+ if (faceVertices[v] != *v_iter) {
+ found = false;
+ break;
+ }
+ }
+ if (found) {
+ if (debug) std::cout << " Choosing other cell" << std::endl;
+ cell = *(++cells->begin());
+ } else {
+ found = true;
+ v = 0;
+ for(sieve_type::traits::coneSequence::reverse_iterator v_iter = faceCone->rbegin(); v_iter != faceCone->rend(); ++v_iter, ++v) {
+ if (debug) std::cout << " Checking " << *v_iter << " against " << faceVertices[v] << std::endl;
+ if (faceVertices[v] != *v_iter) {
+ found = false;
+ break;
+ }
+ }
+ if (!found) std::cout << "ERROR: Invalid orientation " << cell << std::endl;
+ }
+ if (debug) std::cout << " Replacing cell " << cell << std::endl;
+ const ALE::Obj<sieve_type::traits::coneSequence>& cCone = sieve->cone(cell);
+
+ origVertices.clear();
+ newVertices.clear();
+ v = 0;
+ for(sieve_type::traits::coneSequence::iterator v_iter = cCone->begin();
+ v_iter != cCone->end(); ++v_iter, ++v) {
+ if (vertexRenumber.find(*v_iter) != vertexRenumber.end()) {
if (debug)
std::cout << " vertex " << vertexRenumber[*v_iter] << std::endl;
indices[origVertices.size()] = v;
@@ -217,43 +391,45 @@
sieve->clearCone(cell);
int color = 0;
for(PointArray::const_iterator v_iter = newVertices.begin();
- v_iter != newVertices.end();
- ++v_iter) {
+ v_iter != newVertices.end(); ++v_iter) {
sieve->addArrow(*v_iter, cell, color++);
} // for
// Adding cohesive cell (not interpolated)
- //const ALE::Obj<sieve_type::traits::coneSequence>& fCone = faultSieve->cone(*f_iter);
- //const sieve_type::traits::coneSequence::iterator fBegin = fCone->begin();
- //const sieve_type::traits::coneSequence::iterator fEnd = fCone->end();
- PointArray faceVertices;
- if (debug) {
- int v = 0;
+ const ALE::Obj<sieve_type::traits::coneSequence>& fCone = faultSieve->cone(*f_iter);
+ const sieve_type::traits::coneSequence::iterator fBegin = fCone->begin();
+ const sieve_type::traits::coneSequence::iterator fEnd = fCone->end();
+// if (debug) {
+// int v = 0;
- std::cout << " Original Vertices: " << std::endl << " ";
- for(PointArray::iterator v_iter = origVertices.begin(); v_iter != origVertices.end(); ++v_iter, ++v) {
- std::cout << " " << *v_iter << "(" << indices[v] << ")";
- }
- std::cout << std::endl << " Opposite Vertex: " << oppositeVertex << std::endl;
- }
- _faceOrientation(cell, mesh, numCorners, indices, oppositeVertex, &origVertices, &faceVertices);
- const PointArray::iterator fBegin = faceVertices.begin();
- const PointArray::iterator fEnd = faceVertices.end();
+// std::cout << " Original Vertices: " << std::endl << " ";
+// for(PointArray::iterator v_iter = origVertices.begin(); v_iter != origVertices.end(); ++v_iter, ++v) {
+// std::cout << " " << *v_iter << "(" << indices[v] << ")";
+// }
+// std::cout << std::endl << " Opposite Vertex: " << oppositeVertex << std::endl;
+// }
+// faceVertices.clear();
+// _faceOrientation(cell, mesh, numCorners, indices, oppositeVertex, &origVertices, &faceVertices);
+// const PointArray::iterator fBegin = faceVertices.begin();
+// const PointArray::iterator fEnd = faceVertices.end();
color = 0;
if (debug)
std::cout << " Creating cohesive cell " << newPoint << std::endl;
- for(PointArray::iterator v_iter = fBegin; v_iter != fEnd; ++v_iter) {
+ //for(PointArray::iterator v_iter = fBegin; v_iter != fEnd; ++v_iter) {
+ for(sieve_type::traits::coneSequence::iterator v_iter = fBegin; v_iter != fEnd; ++v_iter) {
if (debug)
std::cout << " vertex " << *v_iter << std::endl;
sieve->addArrow(*v_iter, newPoint, color++);
}
- for(PointArray::iterator v_iter = fBegin; v_iter != fEnd; ++v_iter) {
+ //for(PointArray::iterator v_iter = fBegin; v_iter != fEnd; ++v_iter) {
+ for(sieve_type::traits::coneSequence::iterator v_iter = fBegin; v_iter != fEnd; ++v_iter) {
if (debug)
std::cout << " shadow vertex " << vertexRenumber[*v_iter] << std::endl;
sieve->addArrow(vertexRenumber[*v_iter], newPoint, color++);
}
if (constraintCell) {
- for(PointArray::iterator v_iter = fBegin; v_iter != fEnd; ++v_iter) {
+ //for(PointArray::iterator v_iter = fBegin; v_iter != fEnd; ++v_iter) {
+ for(sieve_type::traits::coneSequence::iterator v_iter = fBegin; v_iter != fEnd; ++v_iter) {
if (debug)
std::cout << " Lagrange vertex " << vertexRenumber[*v_iter]+1 << std::endl;
sieve->addArrow(vertexRenumber[*v_iter]+1, newPoint, color++);
@@ -300,7 +476,8 @@
// ----------------------------------------------------------------------
unsigned int
pylith::faults::CohesiveTopology::_numFaceVertices(const Mesh::point_type& cell,
- const ALE::Obj<Mesh>& mesh)
+ const ALE::Obj<Mesh>& mesh,
+ const int depth = -1)
{ // _numFaceVertices
/** :QUESTION:
@@ -311,11 +488,15 @@
const int cellDim = mesh->getDimension();
const ALE::Obj<sieve_type>& sieve = mesh->getSieve();
- unsigned int numCorners = sieve->nCone(cell, mesh->depth())->size();
+ int meshDepth = (depth < 0) ? mesh->depth() : depth;
+ unsigned int numCorners = sieve->nCone(cell, meshDepth)->size();
unsigned int numFaceVertices = 0;
switch (cellDim)
{ // switch
+ case 0 :
+ numFaceVertices = 0;
+ break;
case 1 :
numFaceVertices = 1;
break;
@@ -407,22 +588,22 @@
if ((sortedIndices[0] == 0) && (sortedIndices[1] == 1) && (sortedIndices[2] == 2) && (sortedIndices[3] == 3)) {
if (debug) std::cout << "Bottom quad" << std::endl;
for(int i = 0; i < 4; ++i) {
- if (indices[i] == 0) {
+ if (indices[i] == 3) {
faceVertices->push_back((*origVertices)[i]); break;
}
}
for(int i = 0; i < 4; ++i) {
- if (indices[i] == 1) {
+ if (indices[i] == 2) {
faceVertices->push_back((*origVertices)[i]); break;
}
}
for(int i = 0; i < 4; ++i) {
- if (indices[i] == 2) {
+ if (indices[i] == 1) {
faceVertices->push_back((*origVertices)[i]); break;
}
}
for(int i = 0; i < 4; ++i) {
- if (indices[i] == 3) {
+ if (indices[i] == 0) {
faceVertices->push_back((*origVertices)[i]); break;
}
}
@@ -431,22 +612,22 @@
if ((sortedIndices[0] == 4) && (sortedIndices[1] == 5) && (sortedIndices[2] == 6) && (sortedIndices[3] == 7)) {
if (debug) std::cout << "Top quad" << std::endl;
for(int i = 0; i < 4; ++i) {
- if (indices[i] == 4) {
+ if (indices[i] == 5) {
faceVertices->push_back((*origVertices)[i]); break;
}
}
for(int i = 0; i < 4; ++i) {
- if (indices[i] == 7) {
+ if (indices[i] == 6) {
faceVertices->push_back((*origVertices)[i]); break;
}
}
for(int i = 0; i < 4; ++i) {
- if (indices[i] == 6) {
+ if (indices[i] == 7) {
faceVertices->push_back((*origVertices)[i]); break;
}
}
for(int i = 0; i < 4; ++i) {
- if (indices[i] == 5) {
+ if (indices[i] == 4) {
faceVertices->push_back((*origVertices)[i]); break;
}
}
@@ -455,22 +636,22 @@
if ((sortedIndices[0] == 0) && (sortedIndices[1] == 1) && (sortedIndices[2] == 4) && (sortedIndices[3] == 5)) {
if (debug) std::cout << "Front quad" << std::endl;
for(int i = 0; i < 4; ++i) {
- if (indices[i] == 0) {
+ if (indices[i] == 1) {
faceVertices->push_back((*origVertices)[i]); break;
}
}
for(int i = 0; i < 4; ++i) {
- if (indices[i] == 4) {
+ if (indices[i] == 5) {
faceVertices->push_back((*origVertices)[i]); break;
}
}
for(int i = 0; i < 4; ++i) {
- if (indices[i] == 5) {
+ if (indices[i] == 4) {
faceVertices->push_back((*origVertices)[i]); break;
}
}
for(int i = 0; i < 4; ++i) {
- if (indices[i] == 1) {
+ if (indices[i] == 0) {
faceVertices->push_back((*origVertices)[i]); break;
}
}
@@ -479,22 +660,22 @@
if ((sortedIndices[0] == 2) && (sortedIndices[1] == 3) && (sortedIndices[2] == 6) && (sortedIndices[3] == 7)) {
if (debug) std::cout << "Back quad" << std::endl;
for(int i = 0; i < 4; ++i) {
- if (indices[i] == 3) {
+ if (indices[i] == 7) {
faceVertices->push_back((*origVertices)[i]); break;
}
}
for(int i = 0; i < 4; ++i) {
- if (indices[i] == 2) {
+ if (indices[i] == 6) {
faceVertices->push_back((*origVertices)[i]); break;
}
}
for(int i = 0; i < 4; ++i) {
- if (indices[i] == 6) {
+ if (indices[i] == 2) {
faceVertices->push_back((*origVertices)[i]); break;
}
}
for(int i = 0; i < 4; ++i) {
- if (indices[i] == 7) {
+ if (indices[i] == 3) {
faceVertices->push_back((*origVertices)[i]); break;
}
}
@@ -503,22 +684,22 @@
if ((sortedIndices[0] == 1) && (sortedIndices[1] == 2) && (sortedIndices[2] == 5) && (sortedIndices[3] == 6)) {
if (debug) std::cout << "Right quad" << std::endl;
for(int i = 0; i < 4; ++i) {
- if (indices[i] == 1) {
+ if (indices[i] == 2) {
faceVertices->push_back((*origVertices)[i]); break;
}
}
for(int i = 0; i < 4; ++i) {
- if (indices[i] == 5) {
+ if (indices[i] == 6) {
faceVertices->push_back((*origVertices)[i]); break;
}
}
for(int i = 0; i < 4; ++i) {
- if (indices[i] == 6) {
+ if (indices[i] == 5) {
faceVertices->push_back((*origVertices)[i]); break;
}
}
for(int i = 0; i < 4; ++i) {
- if (indices[i] == 2) {
+ if (indices[i] == 1) {
faceVertices->push_back((*origVertices)[i]); break;
}
}
@@ -527,30 +708,29 @@
if ((sortedIndices[0] == 0) && (sortedIndices[1] == 3) && (sortedIndices[2] == 4) && (sortedIndices[3] == 7)) {
if (debug) std::cout << "Left quad" << std::endl;
for(int i = 0; i < 4; ++i) {
- if (indices[i] == 0) {
+ if (indices[i] == 4) {
faceVertices->push_back((*origVertices)[i]); break;
}
}
for(int i = 0; i < 4; ++i) {
- if (indices[i] == 3) {
+ if (indices[i] == 7) {
faceVertices->push_back((*origVertices)[i]); break;
}
}
for(int i = 0; i < 4; ++i) {
- if (indices[i] == 7) {
+ if (indices[i] == 3) {
faceVertices->push_back((*origVertices)[i]); break;
}
}
for(int i = 0; i < 4; ++i) {
- if (indices[i] == 4) {
+ if (indices[i] == 0) {
faceVertices->push_back((*origVertices)[i]); break;
}
}
}
- return false;
+ return true;
}
- // We reverse a positive orientation because our indices are from the "shadow" face side
- if (posOrient) {
+ if (!posOrient) {
if (debug) std::cout << " Reversing initial face orientation" << std::endl;
faceVertices->insert(faceVertices->end(), (*origVertices).rbegin(), (*origVertices).rend());
} else {
Modified: short/3D/PyLith/trunk/libsrc/faults/CohesiveTopology.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/CohesiveTopology.hh 2007-06-25 16:58:30 UTC (rev 7479)
+++ short/3D/PyLith/trunk/libsrc/faults/CohesiveTopology.hh 2007-06-25 17:41:05 UTC (rev 7480)
@@ -63,7 +63,8 @@
*/
static
unsigned int _numFaceVertices(const Mesh::point_type& cell,
- const ALE::Obj<Mesh>& mesh);
+ const ALE::Obj<Mesh>& mesh,
+ const int depth);
/** Determine a face orientation
* We should really have an interpolated mesh, instead of
Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8.cc 2007-06-25 16:58:30 UTC (rev 7479)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8.cc 2007-06-25 17:41:05 UTC (rev 7480)
@@ -22,7 +22,7 @@
*
* Cells are 0-1,16 and vertices are 4-15.
*
- * 2,3,4,5 -------- 6,7,8,9 -- 14,15,16,17 -------- 10,11,12,13
+ * 2,3,4,5 -------- 14,15,16,17 -- 6,7,8,9 -------- 10,11,12,13
*
* ^^^^^^^^^^^^^^^^^^^^^^ Cohesive element
*
@@ -64,8 +64,8 @@
};
const int pylith::faults::CohesiveDataHex8::_cells[] = {
- 2, 3, 5, 4, 6, 7, 9, 8,
- 14, 15, 17, 16, 10, 11, 13, 12,
+ 2, 3, 5, 4, 14, 15, 17, 16,
+ 6, 7, 9, 8, 10, 11, 13, 12,
6, 7, 9, 8, 14, 15, 17, 16,
};
Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8Lagrange.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8Lagrange.cc 2007-06-25 16:58:30 UTC (rev 7479)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8Lagrange.cc 2007-06-25 17:41:05 UTC (rev 7480)
@@ -68,8 +68,8 @@
};
const int pylith::faults::CohesiveDataHex8Lagrange::_cells[] = {
- 2, 3, 5, 4, 6, 7, 9, 8,
- 14, 16, 20, 18, 10, 11, 13, 12,
+ 2, 3, 5, 4, 14, 16, 20, 18,
+ 6, 7, 9, 8, 10, 11, 13, 12,
6, 7, 9, 8, 14, 16, 20, 18, 15, 17, 21, 19
};
Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8b.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8b.cc 2007-06-25 16:58:30 UTC (rev 7479)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8b.cc 2007-06-25 17:41:05 UTC (rev 7480)
@@ -64,8 +64,8 @@
};
const int pylith::faults::CohesiveDataHex8b::_cells[] = {
- 2, 6, 7, 3, 4, 8, 9, 5,
- 14, 10, 11, 15, 16, 12, 13, 17,
+ 2, 14, 15, 3, 4, 16, 17, 5,
+ 6, 10, 11, 7, 8, 12, 13, 9,
6, 7, 9, 8, 14, 15, 17, 16,
};
Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8c.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8c.cc 2007-06-25 16:58:30 UTC (rev 7479)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8c.cc 2007-06-25 17:41:05 UTC (rev 7480)
@@ -66,7 +66,7 @@
const int pylith::faults::CohesiveDataHex8c::_cells[] = {
6, 8, 9, 7, 2, 4, 5, 3,
10, 12, 13, 11, 14, 16, 17, 15,
- 6, 7, 9, 8, 14, 15, 17, 16,
+ 7, 9, 8, 6, 15, 17, 16, 14,
};
const int pylith::faults::CohesiveDataHex8c::_materialIds[] = {
Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8d.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8d.cc 2007-06-25 16:58:30 UTC (rev 7479)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8d.cc 2007-06-25 17:41:05 UTC (rev 7480)
@@ -66,7 +66,7 @@
const int pylith::faults::CohesiveDataHex8d::_cells[] = {
4, 8, 6, 2, 5, 9, 7, 3,
16, 12, 10, 14, 17, 13, 11, 15,
- 8, 6, 7, 9, 16, 14, 15, 17,
+ 6, 7, 9, 8, 14, 15, 17, 16,
};
const int pylith::faults::CohesiveDataHex8d::_materialIds[] = {
Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8e.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8e.cc 2007-06-25 16:58:30 UTC (rev 7479)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8e.cc 2007-06-25 17:41:05 UTC (rev 7480)
@@ -66,7 +66,7 @@
const int pylith::faults::CohesiveDataHex8e::_cells[] = {
5, 9, 8, 4, 3, 7, 6, 2,
17, 13, 12, 16, 15, 11, 10, 14,
- 9, 8, 6, 7, 17, 16, 14, 15,
+ 8, 6, 7, 9, 16, 14, 15, 17,
};
const int pylith::faults::CohesiveDataHex8e::_materialIds[] = {
Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8f.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8f.cc 2007-06-25 16:58:30 UTC (rev 7479)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8f.cc 2007-06-25 17:41:05 UTC (rev 7480)
@@ -64,8 +64,8 @@
};
const int pylith::faults::CohesiveDataHex8f::_cells[] = {
- 3, 7, 9, 5, 2, 6, 8, 4,
- 15, 11, 13, 17, 14, 10, 12, 16,
+ 3, 15, 17, 5, 2, 14, 16, 4,
+ 7, 11, 13, 9, 6, 10, 12, 8,
7, 9, 8, 6, 15, 17, 16, 14,
};
Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8g.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8g.cc 2007-06-25 16:58:30 UTC (rev 7479)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8g.cc 2007-06-25 17:41:05 UTC (rev 7480)
@@ -75,10 +75,10 @@
};
const int pylith::faults::CohesiveDataHex8g::_cells[] = {
- 4, 10, 11, 5, 6, 12, 13, 7,
- 6, 12, 13, 7, 8, 14, 15, 9,
- 22, 16, 17, 23, 24, 18, 19, 25,
- 24, 18, 19, 25, 26, 20, 21, 27,
+ 4, 22, 23, 5, 6, 24, 25, 7,
+ 6, 24, 25, 7, 8, 26, 27, 9,
+ 10, 16, 17, 11, 12, 18, 19, 13,
+ 12, 18, 19, 13, 14, 20, 21, 15,
10, 11, 13, 12, 22, 23, 25, 24,
12, 13, 15, 14, 24, 25, 27, 26,
};
Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8h.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8h.cc 2007-06-25 16:58:30 UTC (rev 7479)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8h.cc 2007-06-25 17:41:05 UTC (rev 7480)
@@ -80,7 +80,7 @@
23, 17, 19, 25, 22, 16, 18, 24,
15, 14, 8, 9, 13, 12, 6, 7,
11, 13, 12, 10, 23, 25, 24, 22,
- 15, 14, 12, 13, 27, 26, 24, 25,
+ 13, 15, 14, 12, 25, 27, 26, 24,
};
const int pylith::faults::CohesiveDataHex8h::_materialIds[] = {
Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataQuad4f.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataQuad4f.cc 2007-06-25 16:58:30 UTC (rev 7479)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataQuad4f.cc 2007-06-25 17:41:05 UTC (rev 7480)
@@ -38,7 +38,7 @@
*
* Cells are 0-3,16-17 vertices are 4-15.
*
- * 10 --------11--15 --------12
+ * 10 --------15--11 --------12
* | | | |
* | | | |
* | | | |
@@ -47,7 +47,7 @@
* | | | |
* | | | |
* | | | |
- * 5 -------- 7--14 -------- 9
+ * 5 --------14---7 -------- 9
* | | | |
* | | | |
* | | | |
@@ -56,7 +56,7 @@
* | | | |
* | | | |
* | | | |
- * 4 -------- 6--13 -------- 8
+ * 4 --------13---6 -------- 8
*/
#include "CohesiveDataQuad4f.hh"
@@ -94,12 +94,12 @@
};
const int pylith::faults::CohesiveDataQuad4f::_cells[] = {
- 5, 7, 11, 10,
- 14, 9, 12, 15,
- 13, 8, 9, 14,
- 4, 6, 7, 5,
- 6, 7, 13, 14,
- 7, 11, 14, 15,
+ 5, 14, 15, 10,
+ 7, 9, 12, 11,
+ 6, 8, 9, 7,
+ 4, 13, 14, 5,
+ 7, 6, 14, 13,
+ 11, 7, 15, 14,
};
const int pylith::faults::CohesiveDataQuad4f::_materialIds[] = {
Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataTet4.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataTet4.cc 2007-06-25 16:58:30 UTC (rev 7479)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataTet4.cc 2007-06-25 17:41:05 UTC (rev 7480)
@@ -57,7 +57,7 @@
const int pylith::faults::CohesiveDataTet4::_cells[] = {
3, 4, 5, 2,
7, 9, 8, 6,
- 3, 5, 4, 7, 9, 8
+ 5, 4, 3, 9, 8, 7
};
const int pylith::faults::CohesiveDataTet4::_materialIds[] = {
Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataTet4Lagrange.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataTet4Lagrange.cc 2007-06-25 16:58:30 UTC (rev 7479)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataTet4Lagrange.cc 2007-06-25 17:41:05 UTC (rev 7480)
@@ -60,7 +60,7 @@
const int pylith::faults::CohesiveDataTet4Lagrange::_cells[] = {
3, 4, 5, 2,
7, 11, 9, 6,
- 3, 5, 4, 7, 11, 9, 8, 12, 10
+ 5, 4, 3, 11, 9, 7, 12, 10, 8
};
const int pylith::faults::CohesiveDataTet4Lagrange::_materialIds[] = {
Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataTet4c.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataTet4c.cc 2007-06-25 16:58:30 UTC (rev 7479)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataTet4c.cc 2007-06-25 17:41:05 UTC (rev 7480)
@@ -57,7 +57,7 @@
const int pylith::faults::CohesiveDataTet4c::_cells[] = {
5, 4, 2, 3,
6, 8, 9, 7,
- 3, 5, 4, 7, 9, 8
+ 5, 4, 3, 9, 8, 7
};
const int pylith::faults::CohesiveDataTet4c::_materialIds[] = {
Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataTet4f.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataTet4f.cc 2007-06-25 16:58:30 UTC (rev 7479)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataTet4f.cc 2007-06-25 17:41:05 UTC (rev 7480)
@@ -57,7 +57,7 @@
const int pylith::faults::CohesiveDataTet4f::_cells[] = {
3, 5, 4, 6,
7, 8, 9, 2,
- 3, 4, 5, 7, 8, 9
+ 4, 5, 3, 8, 9, 7
};
const int pylith::faults::CohesiveDataTet4f::_materialIds[] = {
Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataTet4i.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataTet4i.cc 2007-06-25 16:58:30 UTC (rev 7479)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataTet4i.cc 2007-06-25 17:41:05 UTC (rev 7480)
@@ -64,12 +64,12 @@
10, 12, 11, 9,
13, 9, 12, 10,
4, 5, 8, 7,
- 5, 7, 6, 10, 12, 11,
- 7, 5, 8, 12, 10, 13,
+ 7, 6, 5, 12, 11, 10,
+ 5, 8, 7, 10, 13, 12,
};
const int pylith::faults::CohesiveDataTet4i::_materialIds[] = {
- 0, 0, 0, 0,
+ 0, 0, 0, 0,
1, 1
};
@@ -80,7 +80,7 @@
const int pylith::faults::CohesiveDataTet4i::_groups[] = {
5, 6, 7, 8, 10, 11, 12, 13,
- 0, 5
+ 4, 9
};
const char* pylith::faults::CohesiveDataTet4i::_groupNames[] = {
Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataTri3e.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataTri3e.cc 2007-06-25 16:58:30 UTC (rev 7479)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataTri3e.cc 2007-06-25 17:41:05 UTC (rev 7480)
@@ -18,14 +18,14 @@
* 9
* / \
* / \
- * / \
+ * / 2 \
* / \
* 8---------5
* \ /|\
- * \ / | \
+ * \ 3 / | \
* \ / | \
* \ / | \
- * 4 | 7
+ * 4 0 | 1 7
* \ | /
* \ | /
* \ | /
Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/hex8h.mesh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/hex8h.mesh 2007-06-25 16:58:30 UTC (rev 7479)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/hex8h.mesh 2007-06-25 17:41:05 UTC (rev 7480)
@@ -30,7 +30,7 @@
num-corners = 8
simplices = {
0 0 6 7 1 2 8 9 3
- 1 15 14 16 17 9 6 10 11
+ 1 15 14 16 17 9 8 10 11
2 7 13 15 9 6 12 14 8
3 11 10 4 5 9 8 2 3
}
Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/tet4i.mesh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/tet4i.mesh 2007-06-25 16:58:30 UTC (rev 7479)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/tet4i.mesh 2007-06-25 17:41:05 UTC (rev 7480)
@@ -41,7 +41,7 @@
}
}
group = {
- name = end points
+ name = output
type = vertices
count = 2
indices = {
More information about the cig-commits
mailing list