[cig-commits] r13018 - in short/3D/PyLith/trunk: libsrc/faults libsrc/feassemble unittests/libtests/faults
knepley at geodynamics.org
knepley at geodynamics.org
Fri Oct 10 18:21:35 PDT 2008
Author: knepley
Date: 2008-10-10 18:21:34 -0700 (Fri, 10 Oct 2008)
New Revision: 13018
Modified:
short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.cc
short/3D/PyLith/trunk/libsrc/feassemble/ElasticityImplicit.cc
short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKin.cc
Log:
Corrected mistake in FaultCohesiveKin, fixed fault tests
Modified: short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.cc 2008-10-09 20:39:51 UTC (rev 13017)
+++ short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.cc 2008-10-11 01:21:34 UTC (rev 13018)
@@ -864,13 +864,19 @@
const Mesh::label_sequence::iterator verticesEnd = vertices->end();
const int numVertices = vertices->size();
Mesh::renumbering_type& renumbering = _faultMesh->getRenumbering();
+ Mesh::point_type firstFaultVertex = -1;
const int fiberDim = solution->getFiberDimension(*vertices->begin());
double_array tractionValues(fiberDim);
// Allocate buffer for tractions field (if nec.).
+ for (Mesh::label_sequence::iterator v_iter = vertices->begin(); v_iter != verticesEnd; ++v_iter) {
+ if (renumbering.find(*v_iter) != renumbering.end()) {
+ firstFaultVertex = renumbering[*v_iter];
+ }
+ }
if (tractions->isNull() ||
- fiberDim != (*tractions)->getFiberDimension(renumbering[*vertices->begin()])) {
+ fiberDim != (*tractions)->getFiberDimension(firstFaultVertex)) {
*tractions = new real_section_type(_faultMesh->comm(), _faultMesh->debug());
int minE = _faultMesh->getSieve()->getChart().min();
int maxE = _faultMesh->getSieve()->getChart().max();
Modified: short/3D/PyLith/trunk/libsrc/feassemble/ElasticityImplicit.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/ElasticityImplicit.cc 2008-10-09 20:39:51 UTC (rev 13017)
+++ short/3D/PyLith/trunk/libsrc/feassemble/ElasticityImplicit.cc 2008-10-11 01:21:34 UTC (rev 13018)
@@ -406,6 +406,30 @@
CALL_MEMBER_FN(*this, elasticityJacobianFn)(elasticConsts);
+#if 0
+ for(int i = 0; i < numBasis*spaceDim; ++i) {
+ for(int j = 0; j < numBasis*spaceDim; ++j) {
+ if (_cellMatrix[i*numBasis*spaceDim+j] < 1.0e10) {
+
+ }
+ }
+ }
+ int n = numBasis*spaceDim, lwork = 5*n, idummy, lierr;
+ double *elemMat = new double[n*n];
+ double *svalues = new double[n];
+ double *work = new double[lwork];
+ double sdummy;
+
+ for(int i = 0; i < n; ++i) {elemMat[i] = _cellMatrix[i];}
+ LAPACKgesvd_("N", "N", &n, &n, elemMat, &n, svalues, &sdummy, &idummy, &sdummy, &idummy, work, &lwork, &lierr);
+ if (lierr) {throw std::runtime_error("Lapack SVD failed");}
+ minSV = svalues[n-1];
+ maxSV = svalues[0];
+ delete [] elemMat;
+ delete [] svalues;
+ delete [] work;
+#endif
+
// Assemble cell contribution into field. Not sure if this is correct for
// global stiffness matrix.
PetscErrorCode err = updateOperator(*mat, *mesh->getSieve(), iV, *c_iter, _cellMatrix, ADD_VALUES);
Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKin.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKin.cc 2008-10-09 20:39:51 UTC (rev 13017)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKin.cc 2008-10-11 01:21:34 UTC (rev 13018)
@@ -131,6 +131,7 @@
FaultCohesiveKin fault;
_initialize(&mesh, &fault);
+ Mesh::renumbering_type& renumbering = fault._faultMesh->getRenumbering();
const ALE::Obj<Mesh::label_sequence>& vertices =
fault._faultMesh->depthStratum(0);
const Mesh::label_sequence::iterator verticesEnd = vertices->end();
@@ -138,7 +139,8 @@
for (Mesh::label_sequence::iterator v_iter=vertices->begin();
v_iter != verticesEnd;
++v_iter, ++iVertex) {
- CPPUNIT_ASSERT_EQUAL(_data->constraintVertices[iVertex],
+ CPPUNIT_ASSERT(renumbering.find(_data->constraintVertices[iVertex]) != renumbering.end());
+ CPPUNIT_ASSERT_EQUAL(renumbering[_data->constraintVertices[iVertex]],
*v_iter);
} // for
CPPUNIT_ASSERT_EQUAL(_data->numConstraintVert, iVertex);
@@ -646,6 +648,7 @@
ALE::Obj<real_section_type> tractions =
new real_section_type(fault._faultMesh->comm(), fault._faultMesh->debug());
CPPUNIT_ASSERT(!tractions.isNull());
+ Mesh::renumbering_type& renumbering = fault._faultMesh->getRenumbering();
const ALE::Obj<Mesh::label_sequence>& vertices =
fault._faultMesh->depthStratum(0);
const Mesh::label_sequence::iterator verticesEnd = vertices->end();
@@ -660,16 +663,27 @@
for (Mesh::label_sequence::iterator v_iter=vertices->begin();
v_iter != verticesEnd;
++v_iter, ++iVertex) {
+ Mesh::point_type meshVertex = -1;
+ bool found = false;
+
+ for(Mesh::renumbering_type::const_iterator r_iter = renumbering.begin(); r_iter != renumbering.end(); ++r_iter) {
+ if (r_iter->second == *v_iter) {
+ meshVertex = r_iter->first;
+ found = true;
+ break;
+ }
+ }
+ CPPUNIT_ASSERT(found);
int fiberDim = tractions->getFiberDimension(*v_iter);
CPPUNIT_ASSERT_EQUAL(spaceDim, fiberDim);
const real_section_type::value_type* vertexTractions =
tractions->restrictPoint(*v_iter);
CPPUNIT_ASSERT(0 != vertexTractions);
- fiberDim = solution->getFiberDimension(*v_iter);
+ fiberDim = solution->getFiberDimension(meshVertex);
CPPUNIT_ASSERT_EQUAL(spaceDim, fiberDim);
const real_section_type::value_type* vertexSolution =
- solution->restrictPoint(*v_iter);
+ solution->restrictPoint(meshVertex);
CPPUNIT_ASSERT(0 != vertexSolution);
const double scale = _data->pseudoStiffness / _data->area[iVertex];
More information about the cig-commits
mailing list