[cig-commits] r19086 - in short/3D/PyLith/branches/v1.6-stable: examples/bar_shearwave/quad4 libsrc/pylith/faults libsrc/pylith/feassemble libsrc/pylith/friction libsrc/pylith/problems modulesrc/friction playpen playpen/faultpc pylith/faults tests/2d/faultstrip tests/2d/frictionslide tests/2d/slipdir tests/3d tests/3d/slipdir tests_auto/2d/quad4 unittests/libtests/faults unittests/libtests/faults/data
brad at geodynamics.org
brad at geodynamics.org
Mon Oct 17 15:23:49 PDT 2011
Author: brad
Date: 2011-10-17 15:23:48 -0700 (Mon, 17 Oct 2011)
New Revision: 19086
Added:
short/3D/PyLith/branches/v1.6-stable/tests/3d/cyclicfriction/
Removed:
short/3D/PyLith/branches/v1.6-stable/playpen/friction/
Modified:
short/3D/PyLith/branches/v1.6-stable/examples/bar_shearwave/quad4/dynamic.cfg
short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/faults/FaultCohesiveDyn.cc
short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/faults/FaultCohesiveDyn.hh
short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/faults/FaultCohesiveKin.cc
short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/faults/FaultCohesiveLagrange.cc
short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/faults/FaultCohesiveLagrange.hh
short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/feassemble/ElasticityExplicit.cc
short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/friction/FrictionModel.cc
short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/friction/FrictionModel.hh
short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/problems/SolverNonlinear.cc
short/3D/PyLith/branches/v1.6-stable/modulesrc/friction/FrictionModel.i
short/3D/PyLith/branches/v1.6-stable/playpen/faultpc/checkfaultpc.py
short/3D/PyLith/branches/v1.6-stable/playpen/faultpc/notes.tex
short/3D/PyLith/branches/v1.6-stable/pylith/faults/FaultCohesive.py
short/3D/PyLith/branches/v1.6-stable/pylith/faults/FaultCohesiveKin.py
short/3D/PyLith/branches/v1.6-stable/tests/2d/faultstrip/dynamic_timeweakening.cfg
short/3D/PyLith/branches/v1.6-stable/tests/2d/faultstrip/pylithapp.cfg
short/3D/PyLith/branches/v1.6-stable/tests/2d/frictionslide/plot_friction.py
short/3D/PyLith/branches/v1.6-stable/tests/2d/frictionslide/pylithapp.cfg
short/3D/PyLith/branches/v1.6-stable/tests/2d/frictionslide/tension.cfg
short/3D/PyLith/branches/v1.6-stable/tests/2d/frictionslide/tension_axial.timedb
short/3D/PyLith/branches/v1.6-stable/tests/2d/frictionslide/tension_shear.timedb
short/3D/PyLith/branches/v1.6-stable/tests/2d/frictionslide/velocitysteps.timedb
short/3D/PyLith/branches/v1.6-stable/tests/2d/slipdir/pylithapp.cfg
short/3D/PyLith/branches/v1.6-stable/tests/3d/Makefile.am
short/3D/PyLith/branches/v1.6-stable/tests/3d/slipdir/pylithapp.cfg
short/3D/PyLith/branches/v1.6-stable/tests_auto/2d/quad4/friction_shear_stick.cfg
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveDyn.cc
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKin.cc
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKin.hh
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKinHex8.hh
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKinLine2.hh
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKinQuad4.hh
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKinQuad4e.hh
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKinTet4.hh
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKinTet4e.hh
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKinTet4f.hh
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKinTri3.hh
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKinTri3d.hh
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynData.cc
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynData.hh
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynDataHex8.cc
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynDataHex8.hh
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynDataQuad4.cc
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynDataQuad4.hh
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynDataTet4.cc
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynDataTet4.hh
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynDataTri3.cc
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynDataTri3.hh
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynDataTri3d.cc
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynDataTri3d.hh
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataHex8.cc
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataLine2.cc
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataQuad4.cc
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataQuad4e.cc
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataQuad4e.hh
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataTet4.cc
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataTet4e.cc
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataTet4e.hh
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataTet4f.cc
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataTet4f.hh
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataTri3.cc
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataTri3d.cc
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataTri3d.hh
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinSrcsDataHex8.cc
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinSrcsDataHex8.hh
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinSrcsDataLine2.cc
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinSrcsDataLine2.hh
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinSrcsDataQuad4.cc
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinSrcsDataQuad4.hh
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinSrcsDataTet4.cc
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinSrcsDataTet4.hh
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinSrcsDataTri3.cc
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinSrcsDataTri3.hh
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/adjustsoln.py
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/cohesivedyn.py
short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/hex8_initialtract.spatialdb
Log:
Merged revised fault implementation branch back into stable branch.
Modified: short/3D/PyLith/branches/v1.6-stable/examples/bar_shearwave/quad4/dynamic.cfg
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/examples/bar_shearwave/quad4/dynamic.cfg 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/examples/bar_shearwave/quad4/dynamic.cfg 2011-10-17 22:23:48 UTC (rev 19086)
@@ -43,7 +43,7 @@
# output
# ----------------------------------------------------------------------
[pylithapp.timedependent.interfaces.fault.output]
-# Add slip rate to the default output fiels of slip and traction.
+vertex_info_fields=[initial_traction]
vertex_data_fields=[slip,slip_rate,traction]
skip = 1
writer.time_format = %05.2f
Modified: short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/faults/FaultCohesiveDyn.cc
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/faults/FaultCohesiveDyn.cc 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/faults/FaultCohesiveDyn.cc 2011-10-17 22:23:48 UTC (rev 19086)
@@ -131,19 +131,20 @@
assert(0 != _faultMesh);
assert(0 != _fields);
_friction->normalizer(*_normalizer);
- _friction->initialize(*_faultMesh, _quadrature, _fields->get("area"));
+ _friction->initialize(*_faultMesh, _quadrature);
const spatialdata::geocoords::CoordSys* cs = mesh.coordsys();
assert(0 != cs);
+ // Create field for relative velocity associated with Lagrange vertex k
+ _fields->add("relative velocity", "relative_velocity");
+ topology::Field<topology::SubMesh>& velRel =
+ _fields->get("relative velocity");
+ topology::Field<topology::SubMesh>& dispRel = _fields->get("relative disp");
+ velRel.cloneSection(dispRel);
+ velRel.vectorFieldType(topology::FieldBase::VECTOR);
+ velRel.scale(_normalizer->lengthScale() / _normalizer->timeScale());
- // Create field for slip rate associated with Lagrange vertex k
- _fields->add("slip rate", "slip_rate");
- topology::Field<topology::SubMesh>& slipRate = _fields->get("slip rate");
- topology::Field<topology::SubMesh>& slip = _fields->get("slip");
- slipRate.cloneSection(slip);
- slipRate.vectorFieldType(topology::FieldBase::VECTOR);
-
//logger.stagePop();
} // initialize
@@ -157,6 +158,7 @@
{ // integrateResidual
assert(0 != fields);
assert(0 != _fields);
+ assert(0 != _logger);
// Initial fault tractions have been assembled, so they do not need
// assembling across processors.
@@ -167,32 +169,56 @@
if (0 == _dbInitialTract)
return;
+ const int setupEvent = _logger->eventId("FaIR setup");
+ const int geometryEvent = _logger->eventId("FaIR geometry");
+ const int computeEvent = _logger->eventId("FaIR compute");
+ const int restrictEvent = _logger->eventId("FaIR restrict");
+ const int updateEvent = _logger->eventId("FaIR update");
+
+ _logger->eventBegin(setupEvent);
+
+ // Get cell geometry information that doesn't depend on cell
const int spaceDim = _quadrature->spaceDim();
- // Get sections
- double_array forcesInitialVertex(spaceDim);
- const ALE::Obj<RealSection>& forcesInitialSection =
- _fields->get("initial forces").section();
- assert(!forcesInitialSection.isNull());
-
- double_array residualVertex(spaceDim);
+ // Get sections associated with cohesive cells
+ double_array residualVertexN(spaceDim);
+ double_array residualVertexP(spaceDim);
const ALE::Obj<RealSection>& residualSection = residual.section();
assert(!residualSection.isNull());
- const ALE::Obj<RealSection>& slipSection = _fields->get("slip").section();
- assert(!slipSection.isNull());
+ const ALE::Obj<RealSection>& areaSection = _fields->get("area").section();
+ assert(!areaSection.isNull());
+ const ALE::Obj<RealSection>& initialTractionsSection =
+ _fields->get("initial traction").section();
+ assert(!initialTractionsSection.isNull());
+
+ const ALE::Obj<RealSection>& dispRelSection =
+ _fields->get("relative disp").section();
+ assert(!dispRelSection.isNull());
+
+ const ALE::Obj<RealSection>& orientationSection =
+ _fields->get("orientation").section();
+ assert(!orientationSection.isNull());
+
+ // Get fault information
const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
assert(!sieveMesh.isNull());
const ALE::Obj<SieveMesh::order_type>& globalOrder =
- sieveMesh->getFactory()->getGlobalOrder(sieveMesh, "default",
- residualSection);
+ sieveMesh->getFactory()->getGlobalOrder(sieveMesh, "default",
+ residualSection);
assert(!globalOrder.isNull());
+ _logger->eventEnd(setupEvent);
+#if !defined(DETAILED_EVENT_LOGGING)
+ _logger->eventBegin(computeEvent);
+#endif
+
+ // Loop over fault vertices
const int numVertices = _cohesiveVertices.size();
for (int iVertex=0; iVertex < numVertices; ++iVertex) {
+ const int v_lagrange = _cohesiveVertices[iVertex].lagrange;
const int v_fault = _cohesiveVertices[iVertex].fault;
- const int v_lagrange = _cohesiveVertices[iVertex].lagrange;
const int v_negative = _cohesiveVertices[iVertex].negative;
const int v_positive = _cohesiveVertices[iVertex].positive;
@@ -200,32 +226,82 @@
if (!globalOrder->isLocal(v_lagrange))
continue;
- // Get initial forces at fault vertex. Forces are in the global
- // coordinate system so no rotation is necessary.
- forcesInitialSection->restrictPoint(v_fault,
- &forcesInitialVertex[0],
- forcesInitialVertex.size());
+#if defined(DETAILED_EVENT_LOGGING)
+ _logger->eventBegin(restrictEvent);
+#endif
- assert(spaceDim == slipSection->getFiberDimension(v_fault));
- const double* slipVertex = slipSection->restrictPoint(v_fault);
- assert(0 != slipVertex);
-
- // only apply initial tractions if there is no opening
- if (0.0 == slipVertex[spaceDim-1]) {
- residualVertex = forcesInitialVertex;
+ // Get initial tractions at fault vertex.
+ assert(spaceDim == initialTractionsSection->getFiberDimension(v_fault));
+ const double* initialTractionsVertex =
+ initialTractionsSection->restrictPoint(v_fault);
+ assert(initialTractionsVertex);
- assert(residualVertex.size() ==
- residualSection->getFiberDimension(v_positive));
- residualSection->updateAddPoint(v_positive, &residualVertex[0]);
-
- residualVertex *= -1.0;
- assert(residualVertex.size() ==
- residualSection->getFiberDimension(v_negative));
- residualSection->updateAddPoint(v_negative, &residualVertex[0]);
+ // Get relative dislplacement at fault vertex.
+ assert(spaceDim == dispRelSection->getFiberDimension(v_fault));
+ const double* dispRelVertex = dispRelSection->restrictPoint(v_fault);
+ assert(dispRelVertex);
+
+ // Get area associated with fault vertex.
+ assert(1 == areaSection->getFiberDimension(v_fault));
+ assert(areaSection->restrictPoint(v_fault));
+ const double areaVertex = *areaSection->restrictPoint(v_fault);
+
+ // Get orientation associated with fault vertex.
+ assert(spaceDim*spaceDim == orientationSection->getFiberDimension(v_fault));
+ const double* orientationVertex =
+ orientationSection->restrictPoint(v_fault);
+ assert(orientationVertex);
+
+#if defined(DETAILED_EVENT_LOGGING)
+ _logger->eventEnd(restrictEvent);
+ _logger->eventBegin(computeEvent);
+#endif
+
+ // Initial (external) tractions oppose (internal) tractions
+ // associated with Lagrange multiplier, so these terms have the
+ // opposite sign as the integration of the Lagrange multipliers in
+ // FaultCohesiveLagrange.
+ for (int iDim=0; iDim < spaceDim; ++iDim) {
+ residualVertexP[iDim] = areaVertex * initialTractionsVertex[iDim];
+ } // for
+ residualVertexN = -residualVertexP;
+
+ // Only apply initial tractions if there is no opening.
+ // If there is opening, zero out initial tractions
+ double slipNormal = 0.0;
+ const int indexN = spaceDim - 1;
+ for (int jDim=0; jDim < spaceDim; ++jDim) {
+ slipNormal += orientationVertex[indexN*spaceDim+jDim]*dispRelVertex[jDim];
+ } // for
+
+ if (slipNormal > _zeroTolerance) {
+ residualVertexN = 0.0;
+ residualVertexP = 0.0;
} // if
+
+#if defined(DETAILED_EVENT_LOGGING)
+ _logger->eventEnd(computeEvent);
+ _logger->eventBegin(updateEvent);
+#endif
+
+ // Assemble contributions into field
+ assert(residualVertexN.size() ==
+ residualSection->getFiberDimension(v_negative));
+ residualSection->updateAddPoint(v_negative, &residualVertexN[0]);
+
+ assert(residualVertexP.size() ==
+ residualSection->getFiberDimension(v_positive));
+ residualSection->updateAddPoint(v_positive, &residualVertexP[0]);
+
+#if defined(DETAILED_EVENT_LOGGING)
+ _logger->eventEnd(updateEvent);
+#endif
} // for
+ PetscLogFlops(numVertices*spaceDim*(2+spaceDim*2));
- PetscLogFlops(numVertices*spaceDim);
+#if !defined(DETAILED_EVENT_LOGGING)
+ _logger->eventEnd(computeEvent);
+#endif
} // integrateResidual
// ----------------------------------------------------------------------
@@ -238,38 +314,35 @@
assert(0 != fields);
assert(0 != _fields);
- _updateSlipRate(*fields);
+ _updateVelRel(*fields);
const int spaceDim = _quadrature->spaceDim();
// Allocate arrays for vertex values
- double_array tractionTVertex(spaceDim);
- double_array tractionTpdtVertex(spaceDim);
- double_array slipTpdtVertex(spaceDim);
- double_array lagrangeTpdtVertex(spaceDim);
+ double_array tractionTpdtVertex(spaceDim); // Fault coordinate system
// Get sections
double_array slipVertex(spaceDim);
- const ALE::Obj<RealSection>& slipSection = _fields->get("slip").section();
- assert(!slipSection.isNull());
+ const ALE::Obj<RealSection>& dispRelSection =
+ _fields->get("relative disp").section();
+ assert(!dispRelSection.isNull());
double_array slipRateVertex(spaceDim);
- const ALE::Obj<RealSection>& slipRateSection =
- _fields->get("slip rate").section();
- assert(!slipRateSection.isNull());
+ const ALE::Obj<RealSection>& velRelSection =
+ _fields->get("relative velocity").section();
+ assert(!velRelSection.isNull());
- const ALE::Obj<RealSection>& areaSection = _fields->get("area").section();
- assert(!areaSection.isNull());
-
- double_array lagrangeTVertex(spaceDim);
const ALE::Obj<RealSection>& dispTSection = fields->get("disp(t)").section();
assert(!dispTSection.isNull());
- double_array lagrangeTIncrVertex(spaceDim);
const ALE::Obj<RealSection>& dispTIncrSection =
fields->get("dispIncr(t->t+dt)").section();
assert(!dispTIncrSection.isNull());
+ const ALE::Obj<RealSection>& orientationSection =
+ _fields->get("orientation").section();
+ assert(!orientationSection.isNull());
+
const int numVertices = _cohesiveVertices.size();
for (int iVertex=0; iVertex < numVertices; ++iVertex) {
const int v_lagrange = _cohesiveVertices[iVertex].lagrange;
@@ -277,34 +350,44 @@
const int v_negative = _cohesiveVertices[iVertex].negative;
const int v_positive = _cohesiveVertices[iVertex].positive;
- // Get slip
- slipSection->restrictPoint(v_fault, &slipVertex[0], slipVertex.size());
+ // Get relative displacement
+ assert(spaceDim == dispRelSection->getFiberDimension(v_fault));
+ const double* dispRelVertex = dispRelSection->restrictPoint(v_fault);
+ assert(dispRelVertex);
- // Get slip rate
- slipRateSection->restrictPoint(v_fault, &slipRateVertex[0],
- slipRateVertex.size());
+ // Get relative velocity
+ assert(spaceDim == velRelSection->getFiberDimension(v_fault));
+ const double* velRelVertex = velRelSection->restrictPoint(v_fault);
+ assert(velRelVertex);
- // Get total fault area asssociated with vertex (assembled over all cells)
- const double* areaVertex = areaSection->restrictPoint(v_fault);
- assert(0 != areaVertex);
- assert(1 == areaSection->getFiberDimension(v_fault));
+ // Get orientation
+ assert(spaceDim*spaceDim == orientationSection->getFiberDimension(v_fault));
+ const double* orientationVertex =
+ orientationSection->restrictPoint(v_fault);
// Get Lagrange multiplier values from disp(t), and dispIncr(t->t+dt)
- dispTSection->restrictPoint(v_lagrange, &lagrangeTVertex[0],
- lagrangeTVertex.size());
- dispTIncrSection->restrictPoint(v_lagrange, &lagrangeTIncrVertex[0],
- lagrangeTIncrVertex.size());
+ assert(spaceDim == dispTSection->getFiberDimension(v_lagrange));
+ const double* lagrangeTVertex = dispTSection->restrictPoint(v_lagrange);
+ assert(spaceDim == dispTIncrSection->getFiberDimension(v_lagrange));
+ const double* lagrangeTIncrVertex =
+ dispTIncrSection->restrictPoint(v_lagrange);
- // Compute Lagrange multiplier at time t+dt
- lagrangeTpdtVertex = lagrangeTVertex + lagrangeTIncrVertex;
+ // Compute slip, slip rate, and fault traction (Lagrange
+ // multiplier) at time t+dt in fault coordinate system.
+ slipVertex = 0.0;
+ slipRateVertex = 0.0;
+ tractionTpdtVertex = 0.0;
+ for (int iDim=0; iDim < spaceDim; ++iDim) {
+ for (int jDim=0; jDim < spaceDim; ++jDim) {
+ slipVertex[iDim] += orientationVertex[iDim*spaceDim+jDim] *
+ dispRelVertex[jDim];
+ slipRateVertex[iDim] += orientationVertex[iDim*spaceDim+jDim] *
+ velRelVertex[jDim];
+ tractionTpdtVertex[iDim] += orientationVertex[iDim*spaceDim+jDim] *
+ (lagrangeTVertex[jDim]+lagrangeTIncrVertex[jDim]);
+ } // for
+ } // for
- // :KLUDGE: Solution at Lagrange constraint vertices is the
- // Lagrange multiplier value, which is currently the force.
- // Compute traction by dividing force by area
- assert(*areaVertex > 0);
- tractionTVertex = lagrangeTVertex / (*areaVertex);
- tractionTpdtVertex = lagrangeTpdtVertex / (*areaVertex);
-
// Get friction properties and state variables.
_friction->retrievePropsStateVars(v_fault);
@@ -356,15 +439,14 @@
(double_array*,
const double_array&,
const double_array&,
- const double_array&,
- const double);
+ const double_array&);
assert(0 != fields);
assert(0 != _quadrature);
assert(0 != _fields);
assert(0 != _friction);
- _updateSlipRate(*fields);
+ _updateVelRel(*fields);
_sensitivitySetup(jacobian);
// Update time step in friction (can vary).
@@ -373,44 +455,34 @@
const int spaceDim = _quadrature->spaceDim();
// Allocate arrays for vertex values
- double_array tractionTVertex(spaceDim);
double_array tractionTpdtVertex(spaceDim);
- double_array slipTpdtVertex(spaceDim);
- double_array lagrangeTpdtVertex(spaceDim);
// Get sections
double_array slipVertex(spaceDim);
- double_array dSlipVertex(spaceDim);
- const ALE::Obj<RealSection>& slipSection = _fields->get("slip").section();
- assert(!slipSection.isNull());
+ const ALE::Obj<RealSection>& dispRelSection =
+ _fields->get("relative disp").section();
+ assert(!dispRelSection.isNull());
double_array slipRateVertex(spaceDim);
- const ALE::Obj<RealSection>& slipRateSection =
- _fields->get("slip rate").section();
- assert(!slipRateSection.isNull());
+ const ALE::Obj<RealSection>& velRelSection =
+ _fields->get("relative velocity").section();
+ assert(!velRelSection.isNull());
- const ALE::Obj<RealSection>& areaSection = _fields->get("area").section();
- assert(!areaSection.isNull());
-
- double_array orientationVertex(spaceDim * spaceDim);
const ALE::Obj<RealSection>& orientationSection =
_fields->get("orientation").section();
assert(!orientationSection.isNull());
- double_array lagrangeTVertex(spaceDim);
- double_array dispTVertexN(spaceDim);
- double_array dispTVertexP(spaceDim);
const ALE::Obj<RealSection>& dispTSection = fields->get("disp(t)").section();
assert(!dispTSection.isNull());
- double_array lagrangeTIncrVertex(spaceDim);
- double_array dispTIncrVertexN(spaceDim);
- double_array dispTIncrVertexP(spaceDim);
+ double_array dDispTIncrVertexN(spaceDim);
+ double_array dDispTIncrVertexP(spaceDim);
const ALE::Obj<RealSection>& dispTIncrSection =
fields->get("dispIncr(t->t+dt)").section();
assert(!dispTIncrSection.isNull());
double_array dLagrangeTpdtVertex(spaceDim);
+ double_array dLagrangeTpdtVertexGlobal(spaceDim);
const ALE::Obj<RealSection>& dLagrangeTpdtSection =
_fields->get("sensitivity dLagrange").section();
assert(!dLagrangeTpdtSection.isNull());
@@ -437,11 +509,8 @@
#if 0 // DEBUGGING
- slipSection->view("SLIP");
- slipRateSection->view("SLIP RATE");
- //areaSection->view("AREA");
- //dispTSection->view("DISP (t)");
- //dispTIncrSection->view("DISP INCR (t->t+dt)");
+ dispRelSection->view("BEFORE RELATIVE DISPLACEMENT");
+ dispTIncrSection->view("BEFORE DISP INCR (t->t+dt)");
#endif
const int numVertices = _cohesiveVertices.size();
@@ -449,48 +518,95 @@
const int v_lagrange = _cohesiveVertices[iVertex].lagrange;
const int v_fault = _cohesiveVertices[iVertex].fault;
- // Get slip
- slipSection->restrictPoint(v_fault, &slipVertex[0], slipVertex.size());
+ // Get relative displacement
+ assert(spaceDim == dispRelSection->getFiberDimension(v_fault));
+ const double* dispRelVertex = dispRelSection->restrictPoint(v_fault);
+ assert(dispRelVertex);
- // Get slip rate
- slipRateSection->restrictPoint(v_fault, &slipRateVertex[0],
- slipRateVertex.size());
+ // Get relative velocity
+ assert(spaceDim == velRelSection->getFiberDimension(v_fault));
+ const double* velRelVertex = velRelSection->restrictPoint(v_fault);
+ assert(velRelVertex);
- // Get total fault area asssociated with vertex (assembled over all cells)
- const double* areaVertex = areaSection->restrictPoint(v_fault);
- assert(0 != areaVertex);
- assert(1 == areaSection->getFiberDimension(v_fault));
+ // Get orientation
+ assert(spaceDim*spaceDim == orientationSection->getFiberDimension(v_fault));
+ const double* orientationVertex =
+ orientationSection->restrictPoint(v_fault);
// Get Lagrange multiplier values from disp(t), and dispIncr(t->t+dt)
- dispTSection->restrictPoint(v_lagrange, &lagrangeTVertex[0],
- lagrangeTVertex.size());
- dispTIncrSection->restrictPoint(v_lagrange, &lagrangeTIncrVertex[0],
- lagrangeTIncrVertex.size());
+ assert(spaceDim == dispTSection->getFiberDimension(v_lagrange));
+ const double* lagrangeTVertex = dispTSection->restrictPoint(v_lagrange);
+ assert(lagrangeTVertex);
- // Compute Lagrange multiplier at time t+dt
- lagrangeTpdtVertex = lagrangeTVertex + lagrangeTIncrVertex;
- dLagrangeTpdtVertex = 0.0;
+ assert(spaceDim == dispTIncrSection->getFiberDimension(v_lagrange));
+ const double* lagrangeTIncrVertex =
+ dispTIncrSection->restrictPoint(v_lagrange);
+ assert(lagrangeTIncrVertex);
- // :KLUDGE: Solution at Lagrange constraint vertices is the
- // Lagrange multiplier value, which is currently the force.
- // Compute traction by dividing force by area
- assert(*areaVertex > 0);
- tractionTVertex = lagrangeTVertex / (*areaVertex);
- tractionTpdtVertex = lagrangeTpdtVertex / (*areaVertex);
+ // Compute slip, slip rate, and Lagrange multiplier at time t+dt
+ // in fault coordinate system.
+ slipVertex = 0.0;
+ slipRateVertex = 0.0;
+ tractionTpdtVertex = 0.0;
+ for (int iDim=0; iDim < spaceDim; ++iDim) {
+ for (int jDim=0; jDim < spaceDim; ++jDim) {
+ slipVertex[iDim] += orientationVertex[iDim*spaceDim+jDim] *
+ dispRelVertex[jDim];
+ slipRateVertex[iDim] += orientationVertex[iDim*spaceDim+jDim] *
+ velRelVertex[jDim];
+ tractionTpdtVertex[iDim] += orientationVertex[iDim*spaceDim+jDim] *
+ (lagrangeTVertex[jDim] + lagrangeTIncrVertex[jDim]);
+ } // for
+ } // for
// Get friction properties and state variables.
_friction->retrievePropsStateVars(v_fault);
// Use fault constitutive model to compute traction associated with
// friction.
+ dLagrangeTpdtVertex = 0.0;
CALL_MEMBER_FN(*this,
constrainSolnSpaceFn)(&dLagrangeTpdtVertex,
slipVertex, slipRateVertex,
- tractionTpdtVertex, *areaVertex);
+ tractionTpdtVertex);
- assert(dLagrangeTpdtVertex.size() ==
+ // Rotate traction back to global coordinate system.
+ dLagrangeTpdtVertexGlobal = 0.0;
+ for (int iDim=0; iDim < spaceDim; ++iDim) {
+ for (int jDim=0; jDim < spaceDim; ++jDim) {
+ dLagrangeTpdtVertexGlobal[iDim] +=
+ orientationVertex[jDim*spaceDim+iDim] * dLagrangeTpdtVertex[jDim];
+ } // for
+ } // for
+
+#if 0 // debugging
+ std::cout << "slipVertex: ";
+ for (int iDim=0; iDim < spaceDim; ++iDim)
+ std::cout << " " << slipVertex[iDim];
+ std::cout << ", slipRateVertex: ";
+ for (int iDim=0; iDim < spaceDim; ++iDim)
+ std::cout << " " << slipRateVertex[iDim];
+ std::cout << ", tractionVertex: ";
+ for (int iDim=0; iDim < spaceDim; ++iDim)
+ std::cout << " " << tractionTpdtVertex[iDim];
+ std::cout << ", lagrangeTVertex: ";
+ for (int iDim=0; iDim < spaceDim; ++iDim)
+ std::cout << " " << lagrangeTVertex[iDim];
+ std::cout << ", lagrangeTIncrVertex: ";
+ for (int iDim=0; iDim < spaceDim; ++iDim)
+ std::cout << " " << lagrangeTIncrVertex[iDim];
+ std::cout << ", dLagrangeTpdtVertex: ";
+ for (int iDim=0; iDim < spaceDim; ++iDim)
+ std::cout << " " << dLagrangeTpdtVertex[iDim];
+ std::cout << ", dLagrangeTpdtVertexGlobal: ";
+ for (int iDim=0; iDim < spaceDim; ++iDim)
+ std::cout << " " << dLagrangeTpdtVertexGlobal[iDim];
+ std::cout << std::endl;
+#endif
+
+ assert(dLagrangeTpdtVertexGlobal.size() ==
dLagrangeTpdtSection->getFiberDimension(v_fault));
- dLagrangeTpdtSection->updatePoint(v_fault, &dLagrangeTpdtVertex[0]);
+ dLagrangeTpdtSection->updatePoint(v_fault, &dLagrangeTpdtVertexGlobal[0]);
} // for
// Solve sensitivity problem for negative side of the fault.
@@ -507,99 +623,175 @@
_sensitivitySolve();
_sensitivityUpdateSoln(negativeSide);
+
+ double_array dSlipVertex(spaceDim);
+ double_array dDispRelVertex(spaceDim);
+ double_array dispRelVertex(spaceDim);
+
// Update slip field based on solution of sensitivity problem and
// increment in Lagrange multipliers.
- const ALE::Obj<RealSection>& dispRelSection =
- _fields->get("sensitivity dispRel").section();
+ const ALE::Obj<RealSection>& sensDispRelSection =
+ _fields->get("sensitivity relative disp").section();
for (int iVertex=0; iVertex < numVertices; ++iVertex) {
const int v_fault = _cohesiveVertices[iVertex].fault;
const int v_lagrange = _cohesiveVertices[iVertex].lagrange;
const int v_negative = _cohesiveVertices[iVertex].negative;
const int v_positive = _cohesiveVertices[iVertex].positive;
- // Get fault orientation
- orientationSection->restrictPoint(v_fault, &orientationVertex[0],
- orientationVertex.size());
+ // Get change in relative displacement from sensitivity solve.
+ assert(spaceDim == sensDispRelSection->getFiberDimension(v_fault));
+ const double* sensDispRelVertex =
+ sensDispRelSection->restrictPoint(v_fault);
+ assert(sensDispRelVertex);
- // Get slip
- slipSection->restrictPoint(v_fault, &slipVertex[0], slipVertex.size());
+ // Get current relative displacement for updating.
+ dispRelSection->restrictPoint(v_fault, &dispRelVertex[0],
+ dispRelVertex.size());
- // Get change in relative displacement.
- const double* dispRelVertex = dispRelSection->restrictPoint(v_fault);
- assert(0 != dispRelVertex);
- assert(spaceDim == dispRelSection->getFiberDimension(v_fault));
+ // Get orientation.
+ assert(spaceDim*spaceDim == orientationSection->getFiberDimension(v_fault));
+ const double* orientationVertex =
+ orientationSection->restrictPoint(v_fault);
+ assert(orientationVertex);
+ // Get displacements from disp(t) and dispIncr(t).
+ assert(spaceDim == dispTSection->getFiberDimension(v_negative));
+ const double* dispTVertexN = dispTSection->restrictPoint(v_negative);
+ assert(dispTVertexN);
+
+ assert(spaceDim == dispTSection->getFiberDimension(v_positive));
+ const double* dispTVertexP = dispTSection->restrictPoint(v_positive);
+ assert(dispTVertexP);
+
+ assert(spaceDim == dispTIncrSection->getFiberDimension(v_negative));
+ const double* dispTIncrVertexN =
+ dispTIncrSection->restrictPoint(v_negative);
+ assert(dispTIncrVertexN);
+
+ assert(spaceDim == dispTIncrSection->getFiberDimension(v_positive));
+ const double* dispTIncrVertexP =
+ dispTIncrSection->restrictPoint(v_positive);
+ assert(dispTIncrVertexP);
+
// Get Lagrange multiplier at time t
- dispTSection->restrictPoint(v_lagrange, &lagrangeTVertex[0],
- lagrangeTVertex.size());
+ assert(spaceDim == dispTSection->getFiberDimension(v_lagrange));
+ const double* lagrangeTVertex = dispTSection->restrictPoint(v_lagrange);
+ assert(lagrangeTVertex);
// Get Lagrange multiplier increment at time t
- dispTIncrSection->restrictPoint(v_lagrange, &lagrangeTIncrVertex[0],
- lagrangeTIncrVertex.size());
+ assert(spaceDim == dispTIncrSection->getFiberDimension(v_lagrange));
+ const double* lagrangeTIncrVertex =
+ dispTIncrSection->restrictPoint(v_lagrange);
+ assert(lagrangeTIncrVertex);
// Get change in Lagrange multiplier.
dLagrangeTpdtSection->restrictPoint(v_fault, &dLagrangeTpdtVertex[0],
dLagrangeTpdtVertex.size());
- // Only update slip if Lagrange multiplier is changing
+ // Only update slip, disp, etc if Lagrange multiplier is
+ // changing. If Lagrange multiplier is the same, there is no slip
+ // so disp, etc should be unchanged.
double dLagrangeMag = 0.0;
for (int iDim=0; iDim < spaceDim; ++iDim)
dLagrangeMag += dLagrangeTpdtVertex[iDim]*dLagrangeTpdtVertex[iDim];
- if (0.0 == dLagrangeMag)
+ if (dLagrangeMag < _zeroTolerance) {
continue; // No change, so continue
+ } // if
- // Compute change in slip.
+ // Compute slip and change in slip in fault coordinates.
dSlipVertex = 0.0;
- for (int iDim = 0; iDim < spaceDim; ++iDim)
- for (int kDim = 0; kDim < spaceDim; ++kDim)
- dSlipVertex[iDim] +=
- orientationVertex[iDim*spaceDim+kDim] * dispRelVertex[kDim];
+ slipVertex = 0.0;
+ for (int iDim=0; iDim < spaceDim; ++iDim) {
+ for (int jDim=0; jDim < spaceDim; ++jDim) {
+ dSlipVertex[iDim] += orientationVertex[iDim*spaceDim+jDim] *
+ sensDispRelVertex[jDim];
+ slipVertex[iDim] += orientationVertex[iDim*spaceDim+jDim] *
+ (dispTVertexP[jDim] - dispTVertexN[jDim] +
+ dispTIncrVertexP[jDim] - dispTIncrVertexN[jDim]);
+ } // for
+ } // for
+ // Compute normal traction in fault coordinates.
+ double tractionNormal = 0.0;
+ const int indexN = spaceDim - 1;
+ for (int jDim=0; jDim < spaceDim; ++jDim) {
+ tractionNormal += orientationVertex[indexN*spaceDim+jDim] *
+ (lagrangeTVertex[jDim] + lagrangeTIncrVertex[jDim] +
+ dLagrangeTpdtVertex[jDim]);
+ } // for
+
// Do not allow fault interpenetration and set fault opening to
// zero if fault is under compression.
- const int indexN = spaceDim - 1;
- const double lagrangeTpdtNormal = lagrangeTVertex[indexN] +
- lagrangeTIncrVertex[indexN] + dLagrangeTpdtVertex[indexN];
- if (lagrangeTpdtNormal < -_zeroTolerance ||
- slipVertex[indexN] + dSlipVertex[indexN] < 0.0) {
+ if (tractionNormal < -_zeroTolerance ||
+ slipVertex[indexN] + dSlipVertex[indexN] < -_zeroTolerance) {
dSlipVertex[indexN] = -slipVertex[indexN];
} // if
- // Set change in slip.
- assert(dSlipVertex.size() ==
- slipSection->getFiberDimension(v_fault));
- slipSection->updateAddPoint(v_fault, &dSlipVertex[0]);
+ // Compute current estimate of slip.
+ for (int iDim=0; iDim < spaceDim; ++iDim) {
+ const double value = slipVertex[iDim] + dSlipVertex[iDim];
+ slipVertex[iDim] = fabs(value) > _zeroTolerance ? value : 0.0;
+ dSlipVertex[iDim] =
+ fabs(dSlipVertex[iDim]) > _zeroTolerance ? dSlipVertex[iDim] : 0.0;
+ } // for
+
+ // Update relative displacement from slip.
+ dispRelVertex = 0.0;
+ dDispRelVertex = 0.0;
+ for (int iDim=0; iDim < spaceDim; ++iDim) {
+ for (int jDim=0; jDim < spaceDim; ++jDim) {
+ dispRelVertex[iDim] += orientationVertex[jDim*spaceDim+iDim] *
+ slipVertex[jDim];
+ dDispRelVertex[iDim] += orientationVertex[jDim*spaceDim+iDim] *
+ dSlipVertex[jDim];
+ } // for
+
+ dDispTIncrVertexN[iDim] = -0.5*dDispRelVertex[iDim];
+ dDispTIncrVertexP[iDim] = +0.5*dDispRelVertex[iDim];
+
+ } // for
+
+#if 0 // debugging
+ std::cout << "dLagrangeTpdtVertex: ";
+ for (int iDim=0; iDim < spaceDim; ++iDim)
+ std::cout << " " << dLagrangeTpdtVertex[iDim];
+ std::cout << ", slipVertex: ";
+ for (int iDim=0; iDim < spaceDim; ++iDim)
+ std::cout << " " << slipVertex[iDim];
+ std::cout << ", dispRelVertex: ";
+ for (int iDim=0; iDim < spaceDim; ++iDim)
+ std::cout << " " << dispRelVertex[iDim];
+ std::cout << ", dDispRelVertex: ";
+ for (int iDim=0; iDim < spaceDim; ++iDim)
+ std::cout << " " << dDispRelVertex[iDim];
+ std::cout << std::endl;
+#endif
+
+ // Set change in relative displacement.
+ assert(dispRelVertex.size() ==
+ dispRelSection->getFiberDimension(v_fault));
+ dispRelSection->updatePoint(v_fault, &dispRelVertex[0]);
// Update Lagrange multiplier increment.
assert(dLagrangeTpdtVertex.size() ==
dispTIncrSection->getFiberDimension(v_lagrange));
dispTIncrSection->updateAddPoint(v_lagrange, &dLagrangeTpdtVertex[0]);
- // Compute change in displacement field.
- dispTIncrVertexN = 0.0;
- for (int iDim = 0; iDim < spaceDim; ++iDim)
- for (int kDim = 0; kDim < spaceDim; ++kDim)
- dispTIncrVertexN[iDim] +=
- orientationVertex[kDim*spaceDim+iDim] * dSlipVertex[kDim];
-
// Update displacement field
- dispTIncrVertexN *= -0.5;
- assert(dispTIncrVertexN.size() ==
+ assert(dDispTIncrVertexN.size() ==
dispTIncrSection->getFiberDimension(v_negative));
- dispTIncrSection->updateAddPoint(v_negative, &dispTIncrVertexN[0]);
+ dispTIncrSection->updateAddPoint(v_negative, &dDispTIncrVertexN[0]);
- dispTIncrVertexP = -dispTIncrVertexN;
- assert(dispTIncrVertexP.size() ==
+ assert(dDispTIncrVertexP.size() ==
dispTIncrSection->getFiberDimension(v_positive));
- dispTIncrSection->updateAddPoint(v_positive, &dispTIncrVertexP[0]);
+ dispTIncrSection->updateAddPoint(v_positive, &dDispTIncrVertexP[0]);
} // for
#if 0 // DEBUGGING
- dLagrangeTpdtSection->view("AFTER dLagrange");
- //dispTIncrSection->view("AFTER DISP INCR (t->t+dt)");
- slipSection->view("AFTER SLIP");
- slipRateSection->view("AFTER SLIP RATE");
+ //dLagrangeTpdtSection->view("AFTER dLagrange");
+ dispRelSection->view("AFTER RELATIVE DISPLACEMENT");
+ dispTIncrSection->view("AFTER DISP INCR (t->t+dt)");
#endif
} // constrainSolnSpace
@@ -616,25 +808,8 @@
(double_array*,
const double_array&,
const double_array&,
- const double_array&,
- const double);
-
- /// Member prototype for _sensitivitySolveLumpedXD()
- typedef void (pylith::faults::FaultCohesiveDyn::*sensitivitySolveLumped_fn_type)
- (double_array*,
- const double_array&,
- const double_array&,
const double_array&);
- /// Member prototype for _adjustSolnLumpedXD()
- typedef void (pylith::faults::FaultCohesiveDyn::*adjustSolnLumped_fn_type)
- (double_array*, double_array*, double_array*,
- const double_array&, const double_array&,
- const double_array&, const double_array&,
- const double_array&, const double_array&,
- const double_array&, const double_array&);
-
-
assert(0 != fields);
assert(0 != _quadrature);
@@ -662,39 +837,35 @@
// Get cell information and setup storage for cell data
const int spaceDim = _quadrature->spaceDim();
- const int orientationSize = spaceDim * spaceDim;
// Allocate arrays for vertex values
- double_array tractionTVertex(spaceDim);
double_array tractionTpdtVertex(spaceDim);
- double_array slipTpdtVertex(spaceDim);
double_array lagrangeTpdtVertex(spaceDim);
double_array dLagrangeTpdtVertex(spaceDim);
+ double_array dLagrangeTpdtVertexGlobal(spaceDim);
// Update time step in friction (can vary).
_friction->timeStep(_dt);
// Get section information
+ double_array dispRelVertex(spaceDim);
double_array slipVertex(spaceDim);
- const ALE::Obj<RealSection>& slipSection = _fields->get("slip").section();
- assert(!slipSection.isNull());
+ const ALE::Obj<RealSection>& dispRelSection =
+ _fields->get("relative disp").section();
+ assert(!dispRelSection.isNull());
double_array slipRateVertex(spaceDim);
- const ALE::Obj<RealSection>& slipRateSection =
- _fields->get("slip rate").section();
- assert(!slipRateSection.isNull());
+ const ALE::Obj<RealSection>& velRelSection =
+ _fields->get("relative velocity").section();
+ assert(!velRelSection.isNull());
- const ALE::Obj<RealSection>& areaSection = _fields->get("area").section();
- assert(!areaSection.isNull());
-
- double_array orientationVertex(orientationSize);
const ALE::Obj<RealSection>& orientationSection =
_fields->get("orientation").section();
assert(!orientationSection.isNull());
- double_array dispTVertexN(spaceDim);
- double_array dispTVertexP(spaceDim);
- double_array lagrangeTVertex(spaceDim);
+ const ALE::Obj<RealSection>& areaSection = _fields->get("area").section();
+ assert(!areaSection.isNull());
+
const ALE::Obj<RealSection>& dispTSection = fields->get("disp(t)").section();
assert(!dispTSection.isNull());
@@ -709,13 +880,9 @@
"dispIncr adjust").section();
assert(!dispTIncrAdjSection.isNull());
- double_array jacobianVertexN(spaceDim);
- double_array jacobianVertexP(spaceDim);
const ALE::Obj<RealSection>& jacobianSection = jacobian.section();
assert(!jacobianSection.isNull());
- double_array residualVertexN(spaceDim);
- double_array residualVertexP(spaceDim);
const ALE::Obj<RealSection>& residualSection =
fields->get("residual").section();
@@ -726,33 +893,19 @@
jacobianSection);
assert(!globalOrder.isNull());
- adjustSolnLumped_fn_type adjustSolnLumpedFn;
constrainSolnSpace_fn_type constrainSolnSpaceFn;
- sensitivitySolveLumped_fn_type sensitivitySolveLumpedFn;
switch (spaceDim) { // switch
case 1:
- adjustSolnLumpedFn =
- &pylith::faults::FaultCohesiveDyn::_adjustSolnLumped1D;
constrainSolnSpaceFn =
&pylith::faults::FaultCohesiveDyn::_constrainSolnSpace1D;
- sensitivitySolveLumpedFn =
- &pylith::faults::FaultCohesiveDyn::_sensitivitySolveLumped1D;
break;
case 2:
- adjustSolnLumpedFn =
- &pylith::faults::FaultCohesiveDyn::_adjustSolnLumped2D;
constrainSolnSpaceFn =
&pylith::faults::FaultCohesiveDyn::_constrainSolnSpace2D;
- sensitivitySolveLumpedFn =
- &pylith::faults::FaultCohesiveDyn::_sensitivitySolveLumped2D;
break;
case 3:
- adjustSolnLumpedFn =
- &pylith::faults::FaultCohesiveDyn::_adjustSolnLumped3D;
constrainSolnSpaceFn =
&pylith::faults::FaultCohesiveDyn::_constrainSolnSpace3D;
- sensitivitySolveLumpedFn =
- &pylith::faults::FaultCohesiveDyn::_sensitivitySolveLumped3D;
break;
default :
assert(0);
@@ -777,189 +930,170 @@
_logger->eventBegin(restrictEvent);
#endif
- // Get slip
- slipSection->restrictPoint(v_fault, &slipVertex[0], slipVertex.size());
+ // Get residual at cohesive cell's vertices.
+ assert(spaceDim == residualSection->getFiberDimension(v_lagrange));
+ const double* residualVertexL = residualSection->restrictPoint(v_lagrange);
+ assert(residualVertexL);
- // Get slip rate
- slipRateSection->restrictPoint(v_fault, &slipRateVertex[0],
- slipRateVertex.size());
-
- // Get total fault area asssociated with vertex (assembled over all cells)
- const double* areaVertex = areaSection->restrictPoint(v_fault);
- assert(0 != areaVertex);
+ // Get jacobian at cohesive cell's vertices.
+ assert(spaceDim == jacobianSection->getFiberDimension(v_negative));
+ const double* jacobianVertexN = jacobianSection->restrictPoint(v_negative);
+ assert(jacobianVertexN);
+
+ assert(spaceDim == jacobianSection->getFiberDimension(v_positive));
+ const double* jacobianVertexP = jacobianSection->restrictPoint(v_positive);
+ assert(jacobianVertexP);
+
+ // Get area at fault vertex.
assert(1 == areaSection->getFiberDimension(v_fault));
-
- // Get fault orientation
- orientationSection->restrictPoint(v_fault, &orientationVertex[0],
- orientationVertex.size());
-
- // Get Jacobian at vertices on positive and negative sides of the fault.
- jacobianSection->restrictPoint(v_negative, &jacobianVertexN[0],
- jacobianVertexN.size());
- jacobianSection->restrictPoint(v_positive, &jacobianVertexP[0],
- jacobianVertexP.size());
-
- // Get residual at cohesive cell's vertices.
- residualSection->restrictPoint(v_negative, &residualVertexN[0],
- residualVertexN.size());
- residualSection->restrictPoint(v_positive, &residualVertexP[0],
- residualVertexP.size());
+ assert(areaSection->restrictPoint(v_fault));
+ const double areaVertex = *areaSection->restrictPoint(v_fault);
+ assert(areaVertex > 0.0);
- // Get disp(t) at cohesive cell's vertices.
- dispTSection->restrictPoint(v_negative, &dispTVertexN[0],
- dispTVertexN.size());
- dispTSection->restrictPoint(v_positive, &dispTVertexP[0],
- dispTVertexP.size());
-
- // Get Lagrange multiplier values from disp(t), and dispIncr(t->t+dt)
- dispTSection->restrictPoint(v_lagrange, &lagrangeTVertex[0],
- lagrangeTVertex.size());
+ // Get disp(t) at Lagrange vertex.
+ assert(spaceDim == dispTSection->getFiberDimension(v_lagrange));
+ const double* lagrangeTVertex = dispTSection->restrictPoint(v_lagrange);
+ assert(lagrangeTVertex);
+
+ // Get dispIncr(t) at cohesive cell's vertices.
+ dispTIncrSection->restrictPoint(v_negative, &dispTIncrVertexN[0],
+ dispTIncrVertexN.size());
+ dispTIncrSection->restrictPoint(v_positive, &dispTIncrVertexP[0],
+ dispTIncrVertexP.size());
dispTIncrSection->restrictPoint(v_lagrange, &lagrangeTIncrVertex[0],
lagrangeTIncrVertex.size());
+
+ // Get relative displacement at fault vertex.
+ dispRelSection->restrictPoint(v_fault, &dispRelVertex[0],
+ dispRelVertex.size());
+
+ // Get relative velocity at fault vertex.
+ assert(spaceDim == velRelSection->getFiberDimension(v_fault));
+ const double* velRelVertex = velRelSection->restrictPoint(v_fault);
+ assert(velRelVertex);
+ // Get fault orientation at fault vertex.
+ assert(spaceDim*spaceDim == orientationSection->getFiberDimension(v_fault));
+ const double* orientationVertex =
+ orientationSection->restrictPoint(v_fault);
+ assert(orientationVertex);
+
#if defined(DETAILED_EVENT_LOGGING)
_logger->eventEnd(restrictEvent);
_logger->eventBegin(computeEvent);
#endif
- CALL_MEMBER_FN(*this,
- adjustSolnLumpedFn)(&lagrangeTIncrVertex,
- &dispTIncrVertexN,
- &dispTIncrVertexP,
- slipVertex,
- orientationVertex,
- dispTVertexN,
- dispTVertexP,
- residualVertexN,
- residualVertexP,
- jacobianVertexN,
- jacobianVertexP);
+ // Adjust solution as in prescribed rupture, updating the Lagrange
+ // multipliers and the corresponding displacment increments.
+ for (int iDim=0; iDim < spaceDim; ++iDim) {
+ assert(jacobianVertexP[iDim] > 0.0);
+ assert(jacobianVertexN[iDim] > 0.0);
+ const double S = (1.0/jacobianVertexP[iDim] + 1.0/jacobianVertexN[iDim]) *
+ areaVertex * areaVertex;
+ assert(S > 0.0);
+ lagrangeTIncrVertex[iDim] = 1.0/S *
+ (-residualVertexL[iDim] +
+ areaVertex * (dispTIncrVertexP[iDim] - dispTIncrVertexN[iDim]));
+ assert(jacobianVertexN[iDim] > 0.0);
+ dispTIncrVertexN[iDim] =
+ +areaVertex / jacobianVertexN[iDim]*lagrangeTIncrVertex[iDim];
+
+ assert(jacobianVertexP[iDim] > 0.0);
+ dispTIncrVertexP[iDim] =
+ -areaVertex / jacobianVertexP[iDim]*lagrangeTIncrVertex[iDim];
+
+ } // for
+
+ // Compute slip, slip rate, and Lagrange multiplier at time t+dt
+ // in fault coordinate system.
+ slipVertex = 0.0;
+ slipRateVertex = 0.0;
+ tractionTpdtVertex = 0.0;
+ for (int iDim=0; iDim < spaceDim; ++iDim) {
+ for (int jDim=0; jDim < spaceDim; ++jDim) {
+ slipVertex[iDim] += orientationVertex[iDim*spaceDim+jDim] *
+ dispRelVertex[jDim];
+ slipRateVertex[iDim] += orientationVertex[iDim*spaceDim+jDim] *
+ velRelVertex[jDim];
+ tractionTpdtVertex[iDim] += orientationVertex[iDim*spaceDim+jDim] *
+ (lagrangeTVertex[jDim] + lagrangeTIncrVertex[jDim]);
+ } // for
+ } // for
- // Compute Lagrange multiplier at time t+dt
- lagrangeTpdtVertex = lagrangeTVertex + lagrangeTIncrVertex;
- dLagrangeTpdtVertex = 0.0;
-
- // :KLUDGE: Solution at Lagrange constraint vertices is the
- // Lagrange multiplier value, which is currently the force.
- // Compute traction by dividing force by area
- assert(*areaVertex > 0);
- tractionTVertex = lagrangeTVertex / (*areaVertex);
- tractionTpdtVertex = lagrangeTpdtVertex / (*areaVertex);
-
// Get friction properties and state variables.
_friction->retrievePropsStateVars(v_fault);
+ // Use fault constitutive model to compute traction associated with
+ // friction.
+ dLagrangeTpdtVertex = 0.0;
CALL_MEMBER_FN(*this,
constrainSolnSpaceFn)(&dLagrangeTpdtVertex,
slipVertex, slipRateVertex,
- tractionTpdtVertex, *areaVertex);
- CALL_MEMBER_FN(*this,
- sensitivitySolveLumpedFn)(&slipVertex,
- dLagrangeTpdtVertex, jacobianVertexN, jacobianVertexP);
+ tractionTpdtVertex);
- lagrangeTIncrVertex += dLagrangeTpdtVertex;
+ // Rotate traction back to global coordinate system.
+ dLagrangeTpdtVertexGlobal = 0.0;
+ for (int iDim=0; iDim < spaceDim; ++iDim) {
+ for (int jDim=0; jDim < spaceDim; ++jDim) {
+ dLagrangeTpdtVertexGlobal[iDim] +=
+ orientationVertex[jDim*spaceDim+iDim] * dLagrangeTpdtVertex[jDim];
+ } // for
+ } // for
- // :TODO: Refactor this into sensitivitySolveLumpedXD().
- switch (spaceDim) { // switch
- case 1: {
- assert(jacobianVertexN[0] > 0.0);
- assert(jacobianVertexP[0] > 0.0);
+#if 0 // debugging
+ std::cout << "dispTIncrP: ";
+ for (int iDim=0; iDim < spaceDim; ++iDim)
+ std::cout << " " << dispTIncrVertexP[iDim];
+ std::cout << ", dispTIncrN: ";
+ for (int iDim=0; iDim < spaceDim; ++iDim)
+ std::cout << " " << dispTIncrVertexN[iDim];
+ std::cout << ", slipVertex: ";
+ for (int iDim=0; iDim < spaceDim; ++iDim)
+ std::cout << " " << slipVertex[iDim];
+ std::cout << ", slipRateVertex: ";
+ for (int iDim=0; iDim < spaceDim; ++iDim)
+ std::cout << " " << slipRateVertex[iDim];
+ std::cout << ", orientationVertex: ";
+ for (int iDim=0; iDim < spaceDim*spaceDim; ++iDim)
+ std::cout << " " << orientationVertex[iDim];
+ std::cout << ", tractionVertex: ";
+ for (int iDim=0; iDim < spaceDim; ++iDim)
+ std::cout << " " << tractionTpdtVertex[iDim];
+ std::cout << ", lagrangeTVertex: ";
+ for (int iDim=0; iDim < spaceDim; ++iDim)
+ std::cout << " " << lagrangeTVertex[iDim];
+ std::cout << ", lagrangeTIncrVertex: ";
+ for (int iDim=0; iDim < spaceDim; ++iDim)
+ std::cout << " " << lagrangeTIncrVertex[iDim];
+ std::cout << ", dLagrangeTpdtVertex: ";
+ for (int iDim=0; iDim < spaceDim; ++iDim)
+ std::cout << " " << dLagrangeTpdtVertex[iDim];
+ std::cout << ", dLagrangeTpdtVertexGlobal: ";
+ for (int iDim=0; iDim < spaceDim; ++iDim)
+ std::cout << " " << dLagrangeTpdtVertexGlobal[iDim];
+ std::cout << std::endl;
+#endif
- const double dlp = lagrangeTIncrVertex[0];
+ // Compute change in displacement.
+ for (int iDim=0; iDim < spaceDim; ++iDim) {
+ assert(jacobianVertexP[iDim] > 0.0);
+ assert(jacobianVertexN[iDim] > 0.0);
- // Update displacements at negative vertex
- dispTIncrVertexN[0] = +1.0 / jacobianVertexN[0] * dlp;
-
- // Update displacements at positive vertex
- dispTIncrVertexP[0] = -1.0 / jacobianVertexP[0] * dlp;
-
- break;
- } // case 1
- case 2: {
- assert(jacobianVertexN[0] > 0.0);
- assert(jacobianVertexN[1] > 0.0);
- assert(jacobianVertexP[0] > 0.0);
- assert(jacobianVertexP[1] > 0.0);
+ dispTIncrVertexN[iDim] +=
+ areaVertex * dLagrangeTpdtVertexGlobal[iDim] / jacobianVertexN[iDim];
+ dispTIncrVertexP[iDim] -=
+ areaVertex * dLagrangeTpdtVertexGlobal[iDim] / jacobianVertexP[iDim];
- // Check to make sure Jacobian is same at all DOF for
- // vertices i and j (means S is diagonal with equal enties).
- assert(jacobianVertexN[0] == jacobianVertexN[1]);
- assert(jacobianVertexP[0] == jacobianVertexP[1]);
+ // Set increment in relative displacement.
+ dispRelVertex[iDim] = -areaVertex * dLagrangeTpdtVertexGlobal[iDim] /
+ (jacobianVertexN[iDim] + jacobianVertexP[iDim]);
- const double Cpx = orientationVertex[0];
- const double Cpy = orientationVertex[1];
- const double Cqx = orientationVertex[2];
- const double Cqy = orientationVertex[3];
+ // Update increment in Lagrange multiplier.
+ lagrangeTIncrVertex[iDim] += dLagrangeTpdtVertexGlobal[iDim];
+ } // for
- const double dlp = lagrangeTIncrVertex[0];
- const double dlq = lagrangeTIncrVertex[1];
-
- const double dlx = Cpx * dlp + Cqx * dlq;
- const double dly = Cpy * dlp + Cqy * dlq;
-
- // Update displacements at negative vertex.
- dispTIncrVertexN[0] = dlx / jacobianVertexN[0];
- dispTIncrVertexN[1] = dly / jacobianVertexN[0];
-
- // Update displacements at positive vertex.
- dispTIncrVertexP[0] = -dlx / jacobianVertexP[0];
- dispTIncrVertexP[1] = -dly / jacobianVertexP[0];
-
- break;
- } // case 2
- case 3: {
- assert(jacobianVertexN[0] > 0.0);
- assert(jacobianVertexN[1] > 0.0);
- assert(jacobianVertexN[2] > 0.0);
- assert(jacobianVertexP[0] > 0.0);
- assert(jacobianVertexP[1] > 0.0);
- assert(jacobianVertexP[2] > 0.0);
-
- // Check to make sure Jacobian is same at all DOF for
- // vertices i and j (means S is diagonal with equal enties).
- assert(jacobianVertexN[0] == jacobianVertexN[1] &&
- jacobianVertexN[0] == jacobianVertexN[2]);
- assert(jacobianVertexP[0] == jacobianVertexP[1] &&
- jacobianVertexP[0] == jacobianVertexP[2]);
-
- const double Cpx = orientationVertex[0];
- const double Cpy = orientationVertex[1];
- const double Cpz = orientationVertex[2];
- const double Cqx = orientationVertex[3];
- const double Cqy = orientationVertex[4];
- const double Cqz = orientationVertex[5];
- const double Crx = orientationVertex[6];
- const double Cry = orientationVertex[7];
- const double Crz = orientationVertex[8];
-
- const double dlp = lagrangeTIncrVertex[0];
- const double dlq = lagrangeTIncrVertex[1];
- const double dlr = lagrangeTIncrVertex[2];
-
- const double dlx = Cpx * dlp + Cqx * dlq + Crx * dlr;
- const double dly = Cpy * dlp + Cqy * dlq + Cry * dlr;
- const double dlz = Cpz * dlp + Cqz * dlq + Crz * dlr;
-
- // Update displacements at negative vertex.
- dispTIncrVertexN[0] = dlx / jacobianVertexN[0];
- dispTIncrVertexN[1] = dly / jacobianVertexN[1];
- dispTIncrVertexN[2] = dlz / jacobianVertexN[2];
-
- // Update displacements at positive vertex.
- dispTIncrVertexP[0] = -dlx / jacobianVertexP[0];
- dispTIncrVertexP[1] = -dly / jacobianVertexP[1];
- dispTIncrVertexP[2] = -dlz / jacobianVertexP[2];
-
- break;
- } // case 3
- default:
- assert(0);
- throw std::logic_error("Unknown spatial dimension in "
- "FaultCohesiveDyn::adjustSolnLumped().");
- } // switch
-
#if defined(DETAILED_EVENT_LOGGING)
_logger->eventEnd(computeEvent);
_logger->eventBegin(updateEvent);
@@ -969,7 +1103,7 @@
// constraint is local (the adjustment is assembled across processors).
if (globalOrder->isLocal(v_lagrange)) {
// Adjust displacements to account for Lagrange multiplier values
- // (assumed to be zero in perliminary solve).
+ // (assumed to be zero in preliminary solve).
assert(dispTIncrVertexN.size() ==
dispTIncrAdjSection->getFiberDimension(v_negative));
dispTIncrAdjSection->updateAddPoint(v_negative, &dispTIncrVertexN[0]);
@@ -979,27 +1113,40 @@
dispTIncrAdjSection->updateAddPoint(v_positive, &dispTIncrVertexP[0]);
} // if
- // The Lagrange multiplier and slip are NOT assembled across processors.
+ // The Lagrange multiplier and relative displacement are NOT
+ // assembled across processors.
// Set Lagrange multiplier value. Value from preliminary solve is
- // bogus due to artificial diagonal entry of 1.0.
+ // bogus due to artificial diagonal entry in Jacobian of 1.0.
assert(lagrangeTIncrVertex.size() ==
dispTIncrSection->getFiberDimension(v_lagrange));
dispTIncrSection->updatePoint(v_lagrange, &lagrangeTIncrVertex[0]);
- // Update the slip estimate based on adjustment to the Lagrange
- // multiplier values.
- assert(slipVertex.size() ==
- slipSection->getFiberDimension(v_fault));
- slipSection->updatePoint(v_fault, &slipVertex[0]);
+ // Update the relative displacement estimate based on adjustment
+ // to the Lagrange multiplier values.
+ assert(dispRelVertex.size() ==
+ dispRelSection->getFiberDimension(v_fault));
+ dispRelSection->updateAddPoint(v_fault, &dispRelVertex[0]);
+
#if defined(DETAILED_EVENT_LOGGING)
_logger->eventEnd(updateEvent);
#endif
- } // for
+ } // for
+ PetscLogFlops(numVertices*spaceDim*(17 + // adjust solve
+ 9 + // updates
+ spaceDim*9));
+
#if !defined(DETAILED_EVENT_LOGGING)
_logger->eventEnd(computeEvent);
#endif
+
+#if 0 // DEBUGGING
+ //dLagrangeTpdtSection->view("AFTER dLagrange");
+ //dispTIncrSection->view("AFTER DISP INCR (t->t+dt)");
+ dispRelSection->view("AFTER RELATIVE DISPLACEMENT");
+ //velRelSection->view("AFTER RELATIVE VELOCITY");
+#endif
} // adjustSolnLumped
// ----------------------------------------------------------------------
@@ -1020,13 +1167,26 @@
double scale = 0.0;
int fiberDim = 0;
if (0 == strcasecmp("slip", name)) {
- const topology::Field<topology::SubMesh>& slip = _fields->get("slip");
- return slip;
+ const topology::Field<topology::SubMesh>& dispRel =
+ _fields->get("relative disp");
+ _allocateBufferVectorField();
+ topology::Field<topology::SubMesh>& buffer =
+ _fields->get("buffer (vector)");
+ buffer.copy(dispRel);
+ buffer.label("slip");
+ _globalToFault(&buffer);
+ return buffer;
} else if (0 == strcasecmp("slip_rate", name)) {
- const topology::Field<topology::SubMesh>& slipRate =
- _fields->get("slip rate");
- return slipRate;
+ const topology::Field<topology::SubMesh>& velRel =
+ _fields->get("relative velocity");
+ _allocateBufferVectorField();
+ topology::Field<topology::SubMesh>& buffer =
+ _fields->get("buffer (vector)");
+ buffer.copy(velRel);
+ buffer.label("slip_rate");
+ _globalToFault(&buffer);
+ return buffer;
} else if (cohesiveDim > 0 && 0 == strcasecmp("strike_dir", name)) {
const ALE::Obj<RealSection>& orientationSection = _fields->get(
@@ -1078,7 +1238,10 @@
_allocateBufferVectorField();
topology::Field<topology::SubMesh>& buffer =
_fields->get("buffer (vector)");
- _getInitialTractions(&buffer);
+ topology::Field<topology::SubMesh>& tractions =
+ _fields->get("initial traction");
+ buffer.copy(tractions);
+ _globalToFault(&buffer);
return buffer;
} else if (0 == strcasecmp("traction", name)) {
@@ -1100,11 +1263,13 @@
throw std::runtime_error(msg.str());
} // else
+ // Should never get here.
+ throw std::logic_error("Unknown field in FaultCohesiveDyn::vertexField().");
+
// Satisfy return values
assert(0 != _fields);
const topology::Field<topology::SubMesh>& buffer = _fields->get(
"buffer (vector)");
- throw std::logic_error("Internal error.");
return buffer;
} // vertexField
@@ -1114,7 +1279,6 @@
pylith::faults::FaultCohesiveDyn::_setupInitialTractions(void)
{ // _setupInitialTractions
assert(0 != _normalizer);
- assert(0 != _quadrature);
// If no initial tractions specified, leave method
if (0 == _dbInitialTract)
@@ -1124,29 +1288,38 @@
const double pressureScale = _normalizer->pressureScale();
const double lengthScale = _normalizer->lengthScale();
- // Get quadrature information
- const int numQuadPts = _quadrature->numQuadPts();
- const int numBasis = _quadrature->numBasis();
const int spaceDim = _quadrature->spaceDim();
- const double_array& quadWts = _quadrature->quadWts();
- assert(quadWts.size() == numQuadPts);
- double_array quadPtsGlobal(numQuadPts*spaceDim);
-
// Create section to hold initial tractions.
- _fields->add("initial forces", "initial_forces");
- topology::Field<topology::SubMesh>& forcesInitial =
- _fields->get("initial forces");
- topology::Field<topology::SubMesh>& slip = _fields->get("slip");
- forcesInitial.cloneSection(slip);
- forcesInitial.scale(pressureScale);
- const ALE::Obj<RealSection>& forcesInitialSection = forcesInitial.section();
- assert(!forcesInitialSection.isNull());
- double_array forcesInitialCell(numBasis*spaceDim);
- double_array tractionQuadPt(spaceDim);
- UpdateAddVisitor forcesInitialVisitor(*forcesInitialSection,
- &forcesInitialCell[0]);
+ _fields->add("initial traction", "initial_traction");
+ topology::Field<topology::SubMesh>& initialTractions =
+ _fields->get("initial traction");
+ topology::Field<topology::SubMesh>& dispRel = _fields->get("relative disp");
+ initialTractions.cloneSection(dispRel);
+ initialTractions.scale(pressureScale);
+ double_array initialTractionsVertex(spaceDim);
+ double_array initialTractionsVertexGlobal(spaceDim);
+ const ALE::Obj<RealSection>& initialTractionsSection =
+ initialTractions.section();
+ assert(!initialTractionsSection.isNull());
+
+ const ALE::Obj<RealSection>& orientationSection =
+ _fields->get("orientation").section();
+ assert(!orientationSection.isNull());
+
+ const spatialdata::geocoords::CoordSys* cs = _faultMesh->coordsys();
+ assert(0 != cs);
+
+ const ALE::Obj<SieveSubMesh>& faultSieveMesh = _faultMesh->sieveMesh();
+ assert(!faultSieveMesh.isNull());
+
+ double_array coordsVertex(spaceDim);
+ const ALE::Obj<RealSection>& coordsSection =
+ faultSieveMesh->getRealSection("coordinates");
+ assert(!coordsSection.isNull());
+
+
assert(0 != _dbInitialTract);
_dbInitialTract->open();
switch (spaceDim) { // switch
@@ -1171,124 +1344,61 @@
assert(0);
throw std::logic_error("Bad spatial dimension in Neumann.");
} // switch
-
- // Get cells associated with fault
- const ALE::Obj<SieveSubMesh>& faultSieveMesh = _faultMesh->sieveMesh();
- assert(!faultSieveMesh.isNull());
- const ALE::Obj<SieveSubMesh::label_sequence>& cells =
- faultSieveMesh->heightStratum(0);
- assert(!cells.isNull());
- const SieveSubMesh::label_sequence::iterator cellsBegin = cells->begin();
- const SieveSubMesh::label_sequence::iterator cellsEnd = cells->end();
- const spatialdata::geocoords::CoordSys* cs = _faultMesh->coordsys();
- assert(0 != cs);
+ const int numVertices = _cohesiveVertices.size();
+ for (int iVertex=0; iVertex < numVertices; ++iVertex) {
+ const int v_fault = _cohesiveVertices[iVertex].fault;
-#if !defined(PRECOMPUTE_GEOMETRY)
- double_array coordinatesCell(numBasis*spaceDim);
- const ALE::Obj<RealSection>& coordinates =
- faultSieveMesh->getRealSection("coordinates");
- RestrictVisitor coordsVisitor(*coordinates,
- coordinatesCell.size(), &coordinatesCell[0]);
-#endif
+ coordsSection->restrictPoint(v_fault, &coordsVertex[0], coordsVertex.size());
- for (SieveSubMesh::label_sequence::iterator c_iter=cellsBegin;
- c_iter != cellsEnd;
- ++c_iter) {
- // Compute geometry information for current cell
-#if defined(PRECOMPUTE_GEOMETRY)
- _quadrature->retrieveGeometry(*c_iter);
-#else
- coordsVisitor.clear();
- faultSieveMesh->restrictClosure(*c_iter, coordsVisitor);
- _quadrature->computeGeometry(coordinatesCell, *c_iter);
-#endif
+ assert(spaceDim*spaceDim == orientationSection->getFiberDimension(v_fault));
+ const double* orientationVertex =
+ orientationSection->restrictPoint(v_fault);
+ assert(orientationVertex);
- const double_array& quadPtsNonDim = _quadrature->quadPts();
- quadPtsGlobal = quadPtsNonDim;
- _normalizer->dimensionalize(&quadPtsGlobal[0], quadPtsGlobal.size(),
- lengthScale);
- forcesInitialCell = 0.0;
+ _normalizer->dimensionalize(&coordsVertex[0], coordsVertex.size(),
+ lengthScale);
- // Loop over quadrature points in cell and query database
- for (int iQuadPt=0, index=0;
- iQuadPt < numQuadPts;
- ++iQuadPt, index+=spaceDim) {
+ initialTractionsVertex = 0.0;
+ int err = _dbInitialTract->query(&initialTractionsVertex[0],
+ initialTractionsVertex.size(),
+ &coordsVertex[0], coordsVertex.size(), cs);
+ if (err) {
+ std::ostringstream msg;
+ msg << "Could not find parameters for physical properties at \n" << "(";
+ for (int i = 0; i < spaceDim; ++i)
+ msg << " " << coordsVertex[i];
+ msg << ") in friction model " << label() << "\n"
+ << "using spatial database '" << _dbInitialTract->label() << "'.";
+ throw std::runtime_error(msg.str());
+ } // if
+ _normalizer->nondimensionalize(&initialTractionsVertex[0],
+ initialTractionsVertex.size(),
+ pressureScale);
- tractionQuadPt = 0.0;
- int err = _dbInitialTract->query(&tractionQuadPt[0], spaceDim,
- &quadPtsGlobal[index], spaceDim, cs);
- if (err) {
- std::ostringstream msg;
- msg << "Could not find parameters for physical properties at \n" << "(";
- for (int i = 0; i < spaceDim; ++i)
- msg << " " << quadPtsGlobal[index + i];
- msg << ") in friction model " << label() << "\n"
- << "using spatial database '" << _dbInitialTract->label() << "'.";
- throw std::runtime_error(msg.str());
- } // if
- tractionQuadPt /= pressureScale;
-
- // Get cell geometry information that depends on cell
- const double_array& basis = _quadrature->basis();
- const double_array& jacobianDet = _quadrature->jacobianDet();
-
- // Integrate tractions over cell.
- const double wt = quadWts[iQuadPt] * jacobianDet[iQuadPt];
- for (int iBasis=0; iBasis < numBasis; ++iBasis) {
- const double valI = wt*basis[iQuadPt*numBasis+iBasis];
- for (int jBasis=0; jBasis < numBasis; ++jBasis) {
- const double valIJ = valI * basis[iQuadPt*numBasis+jBasis];
- for (int iDim=0; iDim < spaceDim; ++iDim)
- forcesInitialCell[iBasis*spaceDim+iDim] +=
- tractionQuadPt[iDim] * valIJ;
- } // for
+ // Rotate tractions from fault coordinate system to global
+ // coordinate system
+ initialTractionsVertexGlobal = 0.0;
+ for (int iDim=0; iDim < spaceDim; ++iDim) {
+ for (int jDim=0; jDim < spaceDim; ++jDim) {
+ initialTractionsVertexGlobal[iDim] +=
+ orientationVertex[jDim*spaceDim+iDim] *
+ initialTractionsVertex[jDim];
} // for
} // for
- // Assemble cell contribution into field
- forcesInitialVisitor.clear();
- faultSieveMesh->updateClosure(*c_iter, forcesInitialVisitor);
+
+ assert(initialTractionsVertexGlobal.size() ==
+ initialTractionsSection->getFiberDimension(v_fault));
+ initialTractionsSection->updatePoint(v_fault,
+ &initialTractionsVertexGlobal[0]);
} // for
+
// Close properties database
_dbInitialTract->close();
- forcesInitial.complete(); // Assemble contributions
+ initialTractions.complete(); // Assemble contributions
- // Rotate forces from fault coordinate system to global coordinate system
- const int orientationSize = spaceDim * spaceDim;
- const ALE::Obj<RealSection>& orientationSection =
- _fields->get("orientation").section();
-
- double_array forcesInitialVertexFault(spaceDim);
- double_array forcesInitialVertexGlobal(spaceDim);
-
- const int numVertices = _cohesiveVertices.size();
- for (int iVertex=0; iVertex < numVertices; ++iVertex) {
- const int v_fault = _cohesiveVertices[iVertex].fault;
-
- assert(orientationSize == orientationSection->getFiberDimension(v_fault));
- assert(spaceDim == forcesInitialSection->getFiberDimension(v_fault));
-
- const double* orientationVertex =
- orientationSection->restrictPoint(v_fault);
-
- forcesInitialSection->restrictPoint(v_fault,
- &forcesInitialVertexFault[0],
- forcesInitialVertexFault.size());
-
- forcesInitialVertexGlobal = 0.0;
- for (int iDim = 0; iDim < spaceDim; ++iDim)
- for (int kDim = 0; kDim < spaceDim; ++kDim)
- forcesInitialVertexGlobal[iDim] +=
- forcesInitialVertexFault[kDim] *
- orientationVertex[kDim*spaceDim+iDim];
-
- assert(forcesInitialVertexGlobal.size() ==
- forcesInitialSection->getFiberDimension(v_fault));
- forcesInitialSection->updatePoint(v_fault, &forcesInitialVertexGlobal[0]);
- } // for
-
- //forcesInitial.view("INITIAL FORCES"); // DEBUGGING
+ //initialTractions.view("INITIAL TRACTIONS"); // DEBUGGING
} // _setupInitialTractions
// ----------------------------------------------------------------------
@@ -1304,86 +1414,16 @@
assert(0 != _normalizer);
// Fiber dimension of tractions matches spatial dimension.
- const int fiberDim = _quadrature->spaceDim();
- double_array tractionsVertex(fiberDim);
+ const int spaceDim = _quadrature->spaceDim();
+ double_array tractionsVertex(spaceDim);
// Get sections.
- const ALE::Obj<RealSection>& areaSection = _fields->get("area").section();
- assert(!areaSection.isNull());
const ALE::Obj<RealSection>& dispTSection = dispT.section();
assert(!dispTSection.isNull());
- // Allocate buffer for tractions field (if necessary).
- const ALE::Obj<RealSection>& tractionsSection = tractions->section();
- if (tractionsSection.isNull()) {
- ALE::MemoryLogger& logger = ALE::MemoryLogger::singleton();
- //logger.stagePush("Fault");
-
- const topology::Field<topology::SubMesh>& slip = _fields->get("slip");
- tractions->cloneSection(slip);
-
- //logger.stagePop();
- } // if
- const double pressureScale = _normalizer->pressureScale();
- tractions->label("traction");
- tractions->scale(pressureScale);
- tractions->zero();
-
- const int numVertices = _cohesiveVertices.size();
- for (int iVertex=0; iVertex < numVertices; ++iVertex) {
- const int v_lagrange = _cohesiveVertices[iVertex].lagrange;
- const int v_fault = _cohesiveVertices[iVertex].fault;
-
- assert(fiberDim == dispTSection->getFiberDimension(v_lagrange));
- assert(fiberDim == tractionsSection->getFiberDimension(v_fault));
- assert(1 == areaSection->getFiberDimension(v_fault));
-
- const double* dispTVertex = dispTSection->restrictPoint(v_lagrange);
- assert(0 != dispTVertex);
- const double* areaVertex = areaSection->restrictPoint(v_fault);
- assert(0 != areaVertex);
-
- for (int i=0; i < fiberDim; ++i)
- tractionsVertex[i] = dispTVertex[i] / areaVertex[0];
-
- assert(tractionsVertex.size() ==
- tractionsSection->getFiberDimension(v_fault));
- tractionsSection->updatePoint(v_fault, &tractionsVertex[0]);
- } // for
-
- PetscLogFlops(numVertices * (1 + fiberDim) );
-
-#if 0 // DEBUGGING
- tractions->view("TRACTIONS");
-#endif
-
-} // _calcTractions
-
-// ----------------------------------------------------------------------
-// Compute initial tractions on fault surface.
-void
-pylith::faults::FaultCohesiveDyn::_getInitialTractions(
- topology::Field<topology::SubMesh>* tractions)
-{ // _getInitialTractions
- assert(0 != tractions);
- assert(0 != _faultMesh);
- assert(0 != _fields);
- assert(0 != _normalizer);
-
- // Fiber dimension of tractions matches spatial dimension.
- const int spaceDim = _quadrature->spaceDim();
- double_array tractionsVertexGlobal(spaceDim);
- double_array tractionsVertexFault(spaceDim);
-
- // Get sections.
- const ALE::Obj<RealSection>& areaSection = _fields->get("area").section();
- assert(!areaSection.isNull());
const ALE::Obj<RealSection>& orientationSection =
_fields->get("orientation").section();
assert(!orientationSection.isNull());
- const ALE::Obj<RealSection>& forcesInitialSection =
- _fields->get("initial forces").section();
- assert(!forcesInitialSection.isNull());
// Allocate buffer for tractions field (if necessary).
const ALE::Obj<RealSection>& tractionsSection = tractions->section();
@@ -1391,82 +1431,73 @@
ALE::MemoryLogger& logger = ALE::MemoryLogger::singleton();
//logger.stagePush("Fault");
- const topology::Field<topology::SubMesh>& slip = _fields->get("slip");
- tractions->cloneSection(slip);
+ const topology::Field<topology::SubMesh>& dispRel =
+ _fields->get("relative disp");
+ tractions->cloneSection(dispRel);
//logger.stagePop();
} // if
const double pressureScale = _normalizer->pressureScale();
- tractions->label("initial_traction");
+ tractions->label("traction");
tractions->scale(pressureScale);
tractions->zero();
const int numVertices = _cohesiveVertices.size();
for (int iVertex=0; iVertex < numVertices; ++iVertex) {
+ const int v_lagrange = _cohesiveVertices[iVertex].lagrange;
const int v_fault = _cohesiveVertices[iVertex].fault;
- assert(spaceDim == forcesInitialSection->getFiberDimension(v_fault));
- assert(spaceDim == tractionsSection->getFiberDimension(v_fault));
- assert(1 == areaSection->getFiberDimension(v_fault));
+ assert(spaceDim == dispTSection->getFiberDimension(v_lagrange));
+ const double* dispTVertex = dispTSection->restrictPoint(v_lagrange);
+ assert(dispTVertex);
- const double* forcesInitialVertex =
- forcesInitialSection->restrictPoint(v_fault);
- assert(0 != forcesInitialVertex);
- const double* areaVertex = areaSection->restrictPoint(v_fault);
- assert(0 != areaVertex);
+ assert(spaceDim*spaceDim ==
+ orientationSection->getFiberDimension(v_fault));
const double* orientationVertex =
orientationSection->restrictPoint(v_fault);
- assert(0 != orientationVertex);
+ assert(orientationVertex);
- for (int i = 0; i < spaceDim; ++i)
- tractionsVertexGlobal[i] = forcesInitialVertex[i] / areaVertex[0];
+ // Rotate tractions to fault coordinate system.
+ tractionsVertex = 0.0;
+ for (int iDim=0; iDim < spaceDim; ++iDim) {
+ for (int jDim=0; jDim < spaceDim; ++jDim) {
+ tractionsVertex[iDim] += orientationVertex[iDim*spaceDim+jDim] *
+ dispTVertex[jDim];
+ } // for
+ } // for
- // Rotate from global coordinate system to local coordinate system
- tractionsVertexFault = 0.0;
- for (int iDim = 0; iDim < spaceDim; ++iDim)
- for (int kDim = 0; kDim < spaceDim; ++kDim)
- tractionsVertexFault[iDim] +=
- tractionsVertexGlobal[kDim] * orientationVertex[iDim*spaceDim+kDim];
-
- assert(tractionsVertexFault.size() ==
+ assert(tractionsVertex.size() ==
tractionsSection->getFiberDimension(v_fault));
- tractionsSection->updatePoint(v_fault, &tractionsVertexFault[0]);
+ tractionsSection->updatePoint(v_fault, &tractionsVertex[0]);
} // for
PetscLogFlops(numVertices * (1 + spaceDim) );
#if 0 // DEBUGGING
- tractions->view("INITIAL TRACTIONS");
+ tractions->view("TRACTIONS");
#endif
-} // _getInitialTractions
+} // _calcTractions
// ----------------------------------------------------------------------
// Update slip rate associated with Lagrange vertex k corresponding
// to diffential velocity between conventional vertices i and j.
void
-pylith::faults::FaultCohesiveDyn::_updateSlipRate(const topology::SolutionFields& fields)
-{ // _updateSlipRate
+pylith::faults::FaultCohesiveDyn::_updateVelRel(const topology::SolutionFields& fields)
+{ // _updateVelRel
assert(0 != _fields);
const int spaceDim = _quadrature->spaceDim();
// Get section information
- double_array velocityVertexN(spaceDim);
- double_array velocityVertexP(spaceDim);
const ALE::Obj<RealSection>& velocitySection =
fields.get("velocity(t)").section();
assert(!velocitySection.isNull());
- double_array slipRateVertex(spaceDim);
- const ALE::Obj<RealSection>& slipRateSection =
- _fields->get("slip rate").section();
+ double_array velRelVertex(spaceDim);
+ const ALE::Obj<RealSection>& velRelSection =
+ _fields->get("relative velocity").section();
- double_array orientationVertex(spaceDim*spaceDim);
- const ALE::Obj<RealSection>& orientationSection =
- _fields->get("orientation").section();
- assert(!orientationSection.isNull());
-
const int numVertices = _cohesiveVertices.size();
for (int iVertex=0; iVertex < numVertices; ++iVertex) {
const int v_lagrange = _cohesiveVertices[iVertex].lagrange;
@@ -1483,36 +1514,20 @@
assert(0 != velocityVertexP);
assert(spaceDim == velocitySection->getFiberDimension(v_positive));
- const double* orientationVertex = orientationSection->restrictPoint(v_fault);
- assert(0 != orientationVertex);
- assert(spaceDim*spaceDim == orientationSection->getFiberDimension(v_fault));
+ // Compute relative velocity
+ for (int iDim=0; iDim < spaceDim; ++iDim) {
+ const double value = velocityVertexP[iDim] - velocityVertexN[iDim];
+ velRelVertex[iDim] = fabs(value) > _zeroTolerance ? value : 0.0;
+ } // for
- slipRateVertex = 0.0;
- // Velocity for negative vertex.
- for (int iDim = 0; iDim < spaceDim; ++iDim)
- for (int kDim = 0; kDim < spaceDim; ++kDim)
- slipRateVertex[iDim] +=
- velocityVertexN[kDim] * -orientationVertex[iDim*spaceDim+kDim];
-
- // Velocity for positive vertex.
- for (int iDim = 0; iDim < spaceDim; ++iDim)
- for (int kDim = 0; kDim < spaceDim; ++kDim)
- slipRateVertex[iDim] +=
- velocityVertexP[kDim] * +orientationVertex[iDim*spaceDim+kDim];
-
- // Limit velocity to resolvable range
- for (int iDim = 0; iDim < spaceDim; ++iDim)
- if (fabs(slipRateVertex[iDim]) < _zeroTolerance)
- slipRateVertex[iDim] = 0.0;
-
// Update slip rate field.
- assert(slipRateVertex.size() ==
- slipRateSection->getFiberDimension(v_fault));
- slipRateSection->updatePoint(v_fault, &slipRateVertex[0]);
+ assert(velRelVertex.size() ==
+ velRelSection->getFiberDimension(v_fault));
+ velRelSection->updatePoint(v_fault, &velRelVertex[0]);
} // for
PetscLogFlops(numVertices*spaceDim*spaceDim*4);
-} // _updateSlipRate
+} // _updateVelRel
// ----------------------------------------------------------------------
// Setup sensitivity problem to compute change in slip given change in Lagrange multipliers.
@@ -1529,9 +1544,9 @@
_fields->add("sensitivity solution", "sensitivity_soln");
topology::Field<topology::SubMesh>& solution =
_fields->get("sensitivity solution");
- const topology::Field<topology::SubMesh>& slip =
- _fields->get("slip");
- solution.cloneSection(slip);
+ const topology::Field<topology::SubMesh>& dispRel =
+ _fields->get("relative disp");
+ solution.cloneSection(dispRel);
solution.createScatter(solution.mesh());
} // if
const topology::Field<topology::SubMesh>& solution =
@@ -1545,14 +1560,14 @@
residual.createScatter(solution.mesh());
} // if
- if (!_fields->hasField("sensitivity dispRel")) {
- _fields->add("sensitivity dispRel", "sensitivity_disprel");
+ if (!_fields->hasField("sensitivity relative disp")) {
+ _fields->add("sensitivity relative disp", "sensitivity_relative_disp");
topology::Field<topology::SubMesh>& dispRel =
- _fields->get("sensitivity dispRel");
+ _fields->get("sensitivity relative disp");
dispRel.cloneSection(solution);
} // if
topology::Field<topology::SubMesh>& dispRel =
- _fields->get("sensitivity dispRel");
+ _fields->get("sensitivity relative disp");
dispRel.zero();
if (!_fields->hasField("sensitivity dLagrange")) {
@@ -1629,6 +1644,7 @@
cellsCohesive->end();
// Visitor for Jacobian matrix associated with domain.
+ double_array jacobianSubCell(submatrixSize);
const PetscMat jacobianDomainMatrix = jacobian.matrix();
assert(0 != jacobianDomainMatrix);
const ALE::Obj<SieveMesh::order_type>& globalOrderDomain =
@@ -1650,7 +1666,6 @@
assert(!solutionFaultSection.isNull());
// Visitor for Jacobian matrix associated with fault.
- double_array jacobianSubCell(submatrixSize);
assert(0 != _jacobian);
const PetscMat jacobianFaultMatrix = _jacobian->matrix();
assert(0 != jacobianFaultMatrix);
@@ -1691,7 +1706,9 @@
else
indicesGlobal[iB+iDim] = -1;
- // Set matrix diagonal entries to 1.0 (used when vertex is not local).
+ // Set matrix diagonal entries to 1.0 (used when vertex is not
+ // local). This happens if a vertex is not on the same
+ // processor as the cohesive cell.
jacobianSubCell[(iB+iDim)*numBasis*spaceDim+iB+iDim] = 1.0;
} // for
} // for
@@ -1720,50 +1737,106 @@
void
pylith::faults::FaultCohesiveDyn::_sensitivityReformResidual(const bool negativeSide)
{ // _sensitivityReformResidual
- assert(0 != _fields);
- assert(0 != _quadrature);
+ /** Compute residual -L^T dLagrange
+ *
+ * Note: We need all entries for L, even those on other processors,
+ * so we compute L rather than extract entries from the Jacoiab.
+ */
+ const double signFault = (negativeSide) ? 1.0 : -1.0;
+
+ // Get cell information
+ const int numQuadPts = _quadrature->numQuadPts();
+ const double_array& quadWts = _quadrature->quadWts();
+ assert(quadWts.size() == numQuadPts);
const int spaceDim = _quadrature->spaceDim();
+ const int numBasis = _quadrature->numBasis();
- // Compute residual -C^T dLagrange
- double_array residualVertex(spaceDim);
+
+ double_array basisProducts(numBasis*numBasis);
+
+ // Get fault cell information
+ const ALE::Obj<SieveMesh>& faultSieveMesh = _faultMesh->sieveMesh();
+ assert(!faultSieveMesh.isNull());
+ const ALE::Obj<SieveSubMesh::label_sequence>& cells =
+ faultSieveMesh->heightStratum(0);
+ assert(!cells.isNull());
+ const SieveSubMesh::label_sequence::iterator cellsBegin = cells->begin();
+ const SieveSubMesh::label_sequence::iterator cellsEnd = cells->end();
+ const int numCells = cells->size();
+
+ // Get sections
+ double_array coordinatesCell(numBasis*spaceDim);
+ const ALE::Obj<RealSection>& coordinates =
+ faultSieveMesh->getRealSection("coordinates");
+ assert(!coordinates.isNull());
+ RestrictVisitor coordsVisitor(*coordinates,
+ coordinatesCell.size(), &coordinatesCell[0]);
+
+ double_array dLagrangeCell(numBasis*spaceDim);
+ const ALE::Obj<RealSection>& dLagrangeSection =
+ _fields->get("sensitivity dLagrange").section();
+ assert(!dLagrangeSection.isNull());
+ RestrictVisitor dLagrangeVisitor(*dLagrangeSection,
+ dLagrangeCell.size(), &dLagrangeCell[0]);
+
+ double_array residualCell(numBasis*spaceDim);
topology::Field<topology::SubMesh>& residual =
_fields->get("sensitivity residual");
const ALE::Obj<RealSection>& residualSection = residual.section();
+ UpdateAddVisitor residualVisitor(*residualSection, &residualCell[0]);
+
residual.zero();
- const ALE::Obj<RealSection>& dLagrangeSection =
- _fields->get("sensitivity dLagrange").section();
+ // Loop over cells
+ for (SieveSubMesh::label_sequence::iterator c_iter=cellsBegin;
+ c_iter != cellsEnd;
+ ++c_iter) {
+ // Compute geometry
+ coordsVisitor.clear();
+ faultSieveMesh->restrictClosure(*c_iter, coordsVisitor);
+ _quadrature->computeGeometry(coordinatesCell, *c_iter);
- const ALE::Obj<RealSection>& orientationSection =
- _fields->get("orientation").section();
- assert(!orientationSection.isNull());
+ // Restrict input fields to cell
+ dLagrangeVisitor.clear();
+ faultSieveMesh->restrictClosure(*c_iter, dLagrangeVisitor);
- const double sign = (negativeSide) ? -1.0 : 1.0;
+ // Get cell geometry information that depends on cell
+ const double_array& basis = _quadrature->basis();
+ const double_array& jacobianDet = _quadrature->jacobianDet();
- const int numVertices = _cohesiveVertices.size();
- for (int iVertex=0; iVertex < numVertices; ++iVertex) {
- const int v_fault = _cohesiveVertices[iVertex].fault;
+ // Compute product of basis functions.
+ // Want values summed over quadrature points
+ basisProducts = 0.0;
+ for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
+ const double wt = quadWts[iQuad] * jacobianDet[iQuad];
- const double* dLagrangeVertex = dLagrangeSection->restrictPoint(v_fault);
- assert(0 != dLagrangeVertex);
- assert(spaceDim == dLagrangeSection->getFiberDimension(v_fault));
+ for (int iBasis=0, iQ=iQuad*numBasis; iBasis < numBasis; ++iBasis) {
+ const double valI = wt*basis[iQ+iBasis];
+
+ for (int jBasis=0; jBasis < numBasis; ++jBasis) {
+
+ basisProducts[iBasis*numBasis+jBasis] += valI*basis[iQ+jBasis];
+ } // for
+ } // for
+ } // for
- const double* orientationVertex = orientationSection->restrictPoint(v_fault);
- assert(0 != orientationVertex);
- assert(spaceDim*spaceDim == orientationSection->getFiberDimension(v_fault));
+ residualCell = 0.0;
+
+ for (int iBasis=0; iBasis < numBasis; ++iBasis) {
+ for (int jBasis=0; jBasis < numBasis; ++jBasis) {
+ const double l = signFault * basisProducts[iBasis*numBasis+jBasis];
+ for (int iDim=0; iDim < spaceDim; ++iDim) {
+ residualCell[iBasis*spaceDim+iDim] +=
+ l * dLagrangeCell[jBasis*spaceDim+iDim];
+ } // for
+ } // for
+ } // for
- residualVertex = 0.0;
- for (int iDim = 0; iDim < spaceDim; ++iDim)
- for (int kDim = 0; kDim < spaceDim; ++kDim)
- residualVertex[iDim] +=
- sign * dLagrangeVertex[kDim] * -orientationVertex[kDim*spaceDim+iDim];
-
- assert(residualVertex.size() == residualSection->getFiberDimension(v_fault));
- residualSection->updatePoint(v_fault, &residualVertex[0]);
+ // Assemble cell contribution into field
+ residualVisitor.clear();
+ faultSieveMesh->updateClosure(*c_iter, residualVisitor);
} // for
-
- PetscLogFlops(numVertices*spaceDim*spaceDim*4);
} // _sensitivityReformResidual
// ----------------------------------------------------------------------
@@ -1816,7 +1889,7 @@
const ALE::Obj<RealSection>& solutionSection =
_fields->get("sensitivity solution").section();
const ALE::Obj<RealSection>& dispRelSection =
- _fields->get("sensitivity dispRel").section();
+ _fields->get("sensitivity relative disp").section();
const double sign = (negativeSide) ? -1.0 : 1.0;
@@ -1930,8 +2003,7 @@
pylith::faults::FaultCohesiveDyn::_constrainSolnSpace1D(double_array* dLagrangeTpdt,
const double_array& slip,
const double_array& sliprate,
- const double_array& tractionTpdt,
- const double area)
+ const double_array& tractionTpdt)
{ // _constrainSolnSpace1D
assert(0 != dLagrangeTpdt);
@@ -1940,7 +2012,11 @@
} else {
// if tension, then traction is zero.
+#if 0 // :TODO: FIX THIS
const double dlp = -tractionTpdt[0] * area;
+#else
+ const double dlp = -tractionTpdt[0];
+#endif //
(*dLagrangeTpdt)[0] = dlp;
} // else
@@ -1953,8 +2029,7 @@
pylith::faults::FaultCohesiveDyn::_constrainSolnSpace2D(double_array* dLagrangeTpdt,
const double_array& slip,
const double_array& slipRate,
- const double_array& tractionTpdt,
- const double area)
+ const double_array& tractionTpdt)
{ // _constrainSolnSpace2D
assert(0 != dLagrangeTpdt);
@@ -1975,7 +2050,7 @@
if (tractionShearMag > 0.0) {
// Update traction increment based on value required to stick
// versus friction
- const double dlp = -(tractionShearMag - frictionStress) * area *
+ const double dlp = -(tractionShearMag - frictionStress) *
tractionTpdt[0] / tractionShearMag;
(*dLagrangeTpdt)[0] = dlp;
(*dLagrangeTpdt)[1] = 0.0;
@@ -1990,8 +2065,8 @@
} // if/else
} else {
// if in tension, then traction is zero.
- (*dLagrangeTpdt)[0] = -tractionTpdt[0] * area;
- (*dLagrangeTpdt)[1] = -tractionTpdt[1] * area;
+ (*dLagrangeTpdt)[0] = -tractionTpdt[0];
+ (*dLagrangeTpdt)[1] = -tractionTpdt[1];
} // else
PetscLogFlops(8);
@@ -2003,8 +2078,7 @@
pylith::faults::FaultCohesiveDyn::_constrainSolnSpace3D(double_array* dLagrangeTpdt,
const double_array& slip,
const double_array& slipRate,
- const double_array& tractionTpdt,
- const double area)
+ const double_array& tractionTpdt)
{ // _constrainSolnSpace3D
assert(0 != dLagrangeTpdt);
@@ -2029,9 +2103,9 @@
if (tractionShearMag > 0.0) {
// Update traction increment based on value required to stick
// versus friction
- const double dlp = -(tractionShearMag - frictionStress) * area *
+ const double dlp = -(tractionShearMag - frictionStress) *
tractionTpdt[0] / tractionShearMag;
- const double dlq = -(tractionShearMag - frictionStress) * area *
+ const double dlq = -(tractionShearMag - frictionStress) *
tractionTpdt[1] / tractionShearMag;
(*dLagrangeTpdt)[0] = dlp;
@@ -2050,9 +2124,9 @@
} // if/else
} else {
// if in tension, then traction is zero.
- (*dLagrangeTpdt)[0] = -tractionTpdt[0] * area;
- (*dLagrangeTpdt)[1] = -tractionTpdt[1] * area;
- (*dLagrangeTpdt)[2] = -tractionTpdt[2] * area;
+ (*dLagrangeTpdt)[0] = -tractionTpdt[0];
+ (*dLagrangeTpdt)[1] = -tractionTpdt[1];
+ (*dLagrangeTpdt)[2] = -tractionTpdt[2];
} // else
PetscLogFlops(22);
Modified: short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/faults/FaultCohesiveDyn.hh
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/faults/FaultCohesiveDyn.hh 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/faults/FaultCohesiveDyn.hh 2011-10-17 22:23:48 UTC (rev 19086)
@@ -146,18 +146,13 @@
void _calcTractions(topology::Field<topology::SubMesh>* tractions,
const topology::Field<topology::Mesh>& solution);
- /** Get initial tractions on fault surface.
+ /** Update relative velocity associated with Lagrange vertex k
+ * corresponding to diffential velocity between conventional
+ * vertices i and j.
*
- * @param tractions Field for tractions.
- */
- void _getInitialTractions(topology::Field<topology::SubMesh>* tractions);
-
- /** Update slip rate associated with Lagrange vertex k corresponding
- * to diffential velocity between conventional vertices i and j.
- *
* @param fields Solution fields.
*/
- void _updateSlipRate(const topology::SolutionFields& fields);
+ void _updateVelRel(const topology::SolutionFields& fields);
/** Setup sensitivity problem to compute change in slip given change
* in Lagrange multipliers.
@@ -240,13 +235,11 @@
* @param slip Slip assoc. w/Lagrange multiplier vertex.
* @param slipRate Slip rate assoc. w/Lagrange multiplier vertex.
* @param tractionTpdt Fault traction assoc. w/Lagrange multiplier vertex.
- * @param area Fault area associated w/Lagrange multiplier vertex.
*/
void _constrainSolnSpace1D(double_array* dLagrangeTpdt,
const double_array& slip,
const double_array& slipRate,
- const double_array& tractionTpdt,
- const double area);
+ const double_array& tractionTpdt);
/** Constrain solution space with lumped Jacobian in 2-D.
*
@@ -254,13 +247,11 @@
* @param slip Slip assoc. w/Lagrange multiplier vertex.
* @param slipRate Slip rate assoc. w/Lagrange multiplier vertex.
* @param tractionTpdt Fault traction assoc. w/Lagrange multiplier vertex.
- * @param area Fault area associated w/Lagrange multiplier vertex.
*/
void _constrainSolnSpace2D(double_array* dLagrangeTpdt,
const double_array& slip,
const double_array& slipRate,
- const double_array& tractionTpdt,
- const double area);
+ const double_array& tractionTpdt);
/** Constrain solution space with lumped Jacobian in 3-D.
*
@@ -268,13 +259,11 @@
* @param slip Slip assoc. w/Lagrange multiplier vertex.
* @param slipRate Slip rate assoc. w/Lagrange multiplier vertex.
* @param tractionTpdt Fault traction assoc. w/Lagrange multiplier vertex.
- * @param area Fault area associated w/Lagrange multiplier vertex.
*/
void _constrainSolnSpace3D(double_array* dLagrangeTpdt,
const double_array& slip,
const double_array& slipRate,
- const double_array& tractionTpdt,
- const double area);
+ const double_array& tractionTpdt);
// PRIVATE MEMBERS ////////////////////////////////////////////////////
private :
Modified: short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/faults/FaultCohesiveKin.cc
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/faults/FaultCohesiveKin.cc 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/faults/FaultCohesiveKin.cc 2011-10-17 22:23:48 UTC (rev 19086)
@@ -129,17 +129,21 @@
const int setupEvent = _logger->eventId("FaIR setup");
_logger->eventBegin(setupEvent);
- topology::Field<topology::SubMesh>& slip = _fields->get("slip");
- slip.zero();
+ topology::Field<topology::SubMesh>& dispRel = _fields->get("relative disp");
+ dispRel.zero();
// Compute slip field at current time step
const srcs_type::const_iterator srcsEnd = _eqSrcs.end();
for (srcs_type::iterator s_iter = _eqSrcs.begin(); s_iter != srcsEnd; ++s_iter) {
EqKinSrc* src = s_iter->second;
assert(0 != src);
if (t >= src->originTime())
- src->slip(&slip, t);
+ src->slip(&dispRel, t);
} // for
+ // Transform slip from local (fault) coordinate system to relative
+ // displacement field in global coordinate system
+ _faultToGlobal(&dispRel);
+
_logger->eventEnd(setupEvent);
FaultCohesiveLagrange::integrateResidual(residual, t, fields);
@@ -166,8 +170,15 @@
double scale = 0.0;
int fiberDim = 0;
if (0 == strcasecmp("slip", name)) {
- const topology::Field<topology::SubMesh>& slip = _fields->get("slip");
- return slip;
+ const topology::Field<topology::SubMesh>& dispRel =
+ _fields->get("relative disp");
+ _allocateBufferVectorField();
+ topology::Field<topology::SubMesh>& buffer =
+ _fields->get("buffer (vector)");
+ buffer.copy(dispRel);
+ buffer.label("slip");
+ _globalToFault(&buffer);
+ return buffer;
} else if (cohesiveDim > 0 && 0 == strcasecmp("strike_dir", name)) {
const ALE::Obj<RealSection>& orientationSection = _fields->get(
@@ -268,6 +279,9 @@
} // else
+ // Should never get here.
+ throw std::logic_error("Unknown field in FaultCohesiveKin::vertexField().");
+
// Satisfy return values
assert(0 != _fields);
const topology::Field<topology::SubMesh>& buffer = _fields->get(
Modified: short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/faults/FaultCohesiveLagrange.cc
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/faults/FaultCohesiveLagrange.cc 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/faults/FaultCohesiveLagrange.cc 2011-10-17 22:23:48 UTC (rev 19086)
@@ -107,18 +107,18 @@
ALE::MemoryLogger& logger = ALE::MemoryLogger::singleton();
//logger.stagePush("Fault");
- // Allocate slip field
+ // Allocate dispRel field
const ALE::Obj<SieveSubMesh>& faultSieveMesh = _faultMesh->sieveMesh();
assert(!faultSieveMesh.isNull());
const ALE::Obj<SieveSubMesh::label_sequence>& vertices =
faultSieveMesh->depthStratum(0);
assert(!vertices.isNull());
- _fields->add("slip", "slip");
- topology::Field<topology::SubMesh>& slip = _fields->get("slip");
- slip.newSection(vertices, cs->spaceDim());
- slip.allocate();
- slip.vectorFieldType(topology::FieldBase::VECTOR);
- slip.scale(_normalizer->lengthScale());
+ _fields->add("relative disp", "relative_disp");
+ topology::Field<topology::SubMesh>& dispRel = _fields->get("relative disp");
+ dispRel.newSection(vertices, cs->spaceDim());
+ dispRel.allocate();
+ dispRel.vectorFieldType(topology::FieldBase::VECTOR);
+ dispRel.scale(_normalizer->lengthScale());
const ALE::Obj<SieveSubMesh::label_sequence>& cells =
faultSieveMesh->heightStratum(0);
@@ -137,11 +137,11 @@
assert(!distSection.isNull());
const double rank = (double) distSection->commRank();
- // Loop over cells in fault mesh, compute area
+ // Loop over cells in fault mesh, set distribution
for (SieveSubMesh::label_sequence::iterator c_iter = cellsBegin; c_iter
!= cellsEnd; ++c_iter) {
distSection->updatePoint(*c_iter, &rank);
- }
+ } // for
// Compute orientation at vertices in fault mesh.
_calcOrientation(upDir);
@@ -195,13 +195,14 @@
assert(0 != _fields);
assert(0 != _logger);
- // Cohesive cells with normal vertices i and j, and constraint
- // vertex k make contributions to the assembled residual:
+ // Cohesive cells with conventional vertices N and P, and constraint
+ // vertex L make contributions to the assembled residual:
//
- // * DOF i and j: internal forces in soln field associated with
- // slip -[C]^T{L(t)+dL(t)}
- // * DOF k: slip values -[C]{u(t)+dt(t)}
- // * DOF k: slip values {D(t+dt)}
+ // DOF P: \int_{S_f^+} \tensor{N}_m^T \cdot \tensor{N}_p \cdot \vec{l}_p dS
+ // DOF N: -\int_{S_f^+} \tensor{N}_m^T \cdot \tensor{N}_p \cdot \vec{l}_p dS
+ // DOF L: \int_S_f \tensor{N}_p^T ( \tensor{R} \cdot \vec{d}
+ // -\tensor{N}_{n^+} \cdot \vec{u}_{n^+}
+ // +\tensor{N}_{n^-} \cdot \vec{u}_{n^-} dS
const int setupEvent = _logger->eventId("FaIR setup");
const int geometryEvent = _logger->eventId("FaIR geometry");
@@ -211,51 +212,40 @@
_logger->eventBegin(setupEvent);
- // Get cell information and setup storage for cell data
+ // Get cell geometry information that doesn't depend on cell
const int spaceDim = _quadrature->spaceDim();
- const int orientationSize = spaceDim * spaceDim;
- // Allocate vectors for vertex values
- double_array slipVertex(spaceDim);
- double_array orientationVertex(orientationSize);
- double_array dispTVertexN(spaceDim);
- double_array dispTVertexP(spaceDim);
- double_array dispTVertexL(spaceDim);
- double_array dispTIncrVertexN(spaceDim);
- double_array dispTIncrVertexP(spaceDim);
- double_array dispTIncrVertexL(spaceDim);
- double_array dispTpdtVertexN(spaceDim);
- double_array dispTpdtVertexP(spaceDim);
- double_array dispTpdtVertexL(spaceDim);
+ // Get sections associated with cohesive cells
double_array residualVertexN(spaceDim);
double_array residualVertexP(spaceDim);
double_array residualVertexL(spaceDim);
-
- // Get sections
- topology::Field<topology::SubMesh>& slip = _fields->get("slip");
- const ALE::Obj<RealSection>& slipSection = slip.section();
- assert(!slipSection.isNull());
-
const ALE::Obj<RealSection>& residualSection = residual.section();
assert(!residualSection.isNull());
- const ALE::Obj<RealSection>& orientationSection =
- _fields->get("orientation").section();
- assert(!orientationSection.isNull());
-
- topology::Field<topology::Mesh>& dispT = fields->get("disp(t)");
- const ALE::Obj<RealSection>& dispTSection = dispT.section();
+ const ALE::Obj<RealSection>& dispTSection = fields->get("disp(t)").section();
assert(!dispTSection.isNull());
- topology::Field<topology::Mesh>& dispTIncr = fields->get("dispIncr(t->t+dt)");
- const ALE::Obj<RealSection>& dispTIncrSection = dispTIncr.section();
+ const ALE::Obj<RealSection>& dispTIncrSection =
+ fields->get("dispIncr(t->t+dt)").section();
assert(!dispTIncrSection.isNull());
+ double_array dispTpdtVertexN(spaceDim);
+ double_array dispTpdtVertexP(spaceDim);
+ double_array dispTpdtVertexL(spaceDim);
+
+ const ALE::Obj<RealSection>& dispRelSection =
+ _fields->get("relative disp").section();
+ assert(!dispRelSection.isNull());
+
+ const ALE::Obj<RealSection>& areaSection = _fields->get("area").section();
+ assert(!areaSection.isNull());
+
+ // Get fault information
const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
assert(!sieveMesh.isNull());
const ALE::Obj<SieveMesh::order_type>& globalOrder =
- sieveMesh->getFactory()->getGlobalOrder(sieveMesh, "default",
- residualSection);
+ sieveMesh->getFactory()->getGlobalOrder(sieveMesh, "default",
+ residualSection);
assert(!globalOrder.isNull());
_logger->eventEnd(setupEvent);
@@ -263,6 +253,7 @@
_logger->eventBegin(computeEvent);
#endif
+ // Loop over fault vertices
const int numVertices = _cohesiveVertices.size();
for (int iVertex=0; iVertex < numVertices; ++iVertex) {
const int v_lagrange = _cohesiveVertices[iVertex].lagrange;
@@ -278,29 +269,45 @@
_logger->eventBegin(restrictEvent);
#endif
- // Get slip at fault vertex.
- slipSection->restrictPoint(v_fault, &slipVertex[0], slipVertex.size());
+ // Get relative dislplacement at fault vertex.
+ assert(spaceDim == dispRelSection->getFiberDimension(v_fault));
+ const double* dispRelVertex = dispRelSection->restrictPoint(v_fault);
+ assert(dispRelVertex);
- // Get orientations at fault vertex.
- orientationSection->restrictPoint(v_fault, &orientationVertex[0],
- orientationVertex.size());
+ // Get area associated with fault vertex.
+ assert(1 == areaSection->getFiberDimension(v_fault));
+ assert(areaSection->restrictPoint(v_fault));
+ const double areaVertex = *areaSection->restrictPoint(v_fault);
// Get disp(t) at conventional vertices and Lagrange vertex.
- dispTSection->restrictPoint(v_negative, &dispTVertexN[0],
- dispTVertexN.size());
- dispTSection->restrictPoint(v_positive, &dispTVertexP[0],
- dispTVertexP.size());
- dispTSection->restrictPoint(v_lagrange, &dispTVertexL[0],
- dispTVertexL.size());
+ assert(spaceDim == dispTSection->getFiberDimension(v_negative));
+ const double* dispTVertexN = dispTSection->restrictPoint(v_negative);
+ assert(dispTVertexN);
+ assert(spaceDim == dispTSection->getFiberDimension(v_positive));
+ const double* dispTVertexP = dispTSection->restrictPoint(v_positive);
+ assert(dispTVertexP);
+
+ assert(spaceDim == dispTSection->getFiberDimension(v_lagrange));
+ const double* dispTVertexL = dispTSection->restrictPoint(v_lagrange);
+ assert(dispTVertexL);
+
// Get dispIncr(t->t+dt) at conventional vertices and Lagrange vertex.
- dispTIncrSection->restrictPoint(v_negative, &dispTIncrVertexN[0],
- dispTIncrVertexN.size());
- dispTIncrSection->restrictPoint(v_positive, &dispTIncrVertexP[0],
- dispTIncrVertexP.size());
- dispTIncrSection->restrictPoint(v_lagrange, &dispTIncrVertexL[0],
- dispTIncrVertexL.size());
+ assert(spaceDim == dispTIncrSection->getFiberDimension(v_negative));
+ const double* dispTIncrVertexN =
+ dispTIncrSection->restrictPoint(v_negative);
+ assert(dispTIncrVertexN);
+ assert(spaceDim == dispTIncrSection->getFiberDimension(v_positive));
+ const double* dispTIncrVertexP =
+ dispTIncrSection->restrictPoint(v_positive);
+ assert(dispTIncrVertexP);
+
+ assert(spaceDim == dispTIncrSection->getFiberDimension(v_lagrange));
+ const double* dispTIncrVertexL =
+ dispTIncrSection->restrictPoint(v_lagrange);
+ assert(dispTIncrVertexL);
+
#if defined(DETAILED_EVENT_LOGGING)
_logger->eventEnd(restrictEvent);
_logger->eventBegin(computeEvent);
@@ -308,33 +315,27 @@
// Compute current estimate of displacement at time t+dt using
// solution increment.
- dispTpdtVertexN = dispTVertexN + dispTIncrVertexN;
- dispTpdtVertexP = dispTVertexP + dispTIncrVertexP;
- dispTpdtVertexL = dispTVertexL + dispTIncrVertexL;
+ for (int iDim=0; iDim < spaceDim; ++iDim) {
+ dispTpdtVertexN[iDim] = dispTVertexN[iDim] + dispTIncrVertexN[iDim];
+ dispTpdtVertexP[iDim] = dispTVertexP[iDim] + dispTIncrVertexP[iDim];
+ dispTpdtVertexL[iDim] = dispTVertexL[iDim] + dispTIncrVertexL[iDim];
+ } // for
- // Entries associated with constraint forces applied at negative vertex
- residualVertexN = 0.0;
- for (int iDim = 0; iDim < spaceDim; ++iDim)
- for (int kDim = 0; kDim < spaceDim; ++kDim)
- residualVertexN[iDim] -=
- dispTpdtVertexL[kDim] * -orientationVertex[kDim*spaceDim+iDim];
-
- // Entries associated with constraint forces applied at positive vertex
+ residualVertexN = areaVertex * dispTpdtVertexL;
residualVertexP = -residualVertexN;
- // Entries associated with relative displacements between positive
- // and negative vertices for Lagrange vertex.
- residualVertexL = slipVertex;
- for (int kDim = 0; kDim < spaceDim; ++kDim)
- for (int iDim = 0; iDim < spaceDim; ++iDim)
- residualVertexL[kDim] -= (dispTpdtVertexP[iDim] - dispTpdtVertexN[iDim])
- * orientationVertex[kDim*spaceDim+iDim];
+ residualVertexL = 0.0;
+ for (int iDim=0; iDim < spaceDim; ++iDim) {
+ residualVertexL[iDim] = -areaVertex *
+ (dispTpdtVertexP[iDim] - dispTpdtVertexN[iDim] - dispRelVertex[iDim]);
+ } // for
#if defined(DETAILED_EVENT_LOGGING)
_logger->eventEnd(computeEvent);
_logger->eventBegin(updateEvent);
#endif
+ // Assemble contributions into field
assert(residualVertexN.size() ==
residualSection->getFiberDimension(v_negative));
residualSection->updateAddPoint(v_negative, &residualVertexN[0]);
@@ -351,7 +352,7 @@
_logger->eventEnd(updateEvent);
#endif
} // for
- PetscLogFlops(numVertices*spaceDim*spaceDim*8);
+ PetscLogFlops(numVertices*spaceDim*8);
#if !defined(DETAILED_EVENT_LOGGING)
_logger->eventEnd(computeEvent);
@@ -379,39 +380,37 @@
_logger->eventBegin(setupEvent);
- // Add constraint information to Jacobian matrix; these are the
- // direction cosines. Entries are associated with vertices ik, jk,
- // ki, and kj.
+ // Add constraint information to Jacobian matrix; Entries are
+ // associated with vertices ik, jk, ki, and kj.
- // Get cell information and setup storage for cell data
+ // Get cell geometry information that doesn't depend on cell
const int spaceDim = _quadrature->spaceDim();
- const int orientationSize = spaceDim * spaceDim;
- // Allocate vectors for vertex values
- double_array orientationVertex(orientationSize);
- double_array jacobianVertex(spaceDim*spaceDim);
- int_array indicesL(spaceDim);
- int_array indicesN(spaceDim);
- int_array indicesP(spaceDim);
- int_array indicesRel(spaceDim);
- for (int i=0; i < spaceDim; ++i)
- indicesRel[i] = i;
-
// Get sections
- const ALE::Obj<RealSection>& solutionSection = fields->solution().section();
- assert(!solutionSection.isNull());
+ const ALE::Obj<RealSection>& areaSection = _fields->get("area").section();
+ assert(!areaSection.isNull());
- const ALE::Obj<RealSection>& orientationSection =
- _fields->get("orientation").section();
- assert(!orientationSection.isNull());
+ const ALE::Obj<RealSection>& solnSection = fields->solution().section();
+ assert(!solnSection.isNull());
+ // Get fault information
const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
assert(!sieveMesh.isNull());
const ALE::Obj<SieveMesh::order_type>& globalOrder =
sieveMesh->getFactory()->getGlobalOrder(sieveMesh, "default",
- solutionSection);
+ solnSection);
assert(!globalOrder.isNull());
+ // Allocate vectors for vertex values
+ double_array jacobianVertex(spaceDim*spaceDim);
+ int_array indicesL(spaceDim);
+ int_array indicesN(spaceDim);
+ int_array indicesP(spaceDim);
+ int_array indicesRel(spaceDim);
+ for (int i=0; i < spaceDim; ++i)
+ indicesRel[i] = i;
+
+ // Get sparse matrix
const PetscMat jacobianMatrix = jacobian->matrix();
assert(0 != jacobianMatrix);
@@ -435,55 +434,51 @@
_logger->eventBegin(restrictEvent);
#endif
- // Get orientations at fault cell's vertices.
- orientationSection->restrictPoint(v_fault, &orientationVertex[0], orientationVertex.size());
+ // Get area associated with fault vertex.
+ assert(1 == areaSection->getFiberDimension(v_fault));
+ assert(areaSection->restrictPoint(v_fault));
+ const double areaVertex = *areaSection->restrictPoint(v_fault);
// Set global order indices
indicesL = indicesRel + globalOrder->getIndex(v_lagrange);
indicesN = indicesRel + globalOrder->getIndex(v_negative);
indicesP = indicesRel + globalOrder->getIndex(v_positive);
- assert(0 == solutionSection->getConstraintDimension(v_negative));
- assert(0 == solutionSection->getConstraintDimension(v_positive));
+ assert(0 == solnSection->getConstraintDimension(v_negative));
+ assert(0 == solnSection->getConstraintDimension(v_positive));
#if defined(DETAILED_EVENT_LOGGING)
_logger->eventEnd(restrictEvent);
_logger->eventBegin(updateEvent);
#endif
- // Values associated with [C]
+ // Set diagonal entries of Jacobian at positive vertex to area
+ // associated with vertex.
+ for (int iDim=0; iDim < spaceDim; ++iDim)
+ jacobianVertex[iDim*spaceDim+iDim] = areaVertex;
+
// Values at positive vertex, entry L,P in Jacobian
- jacobianVertex = orientationVertex;
MatSetValues(jacobianMatrix,
indicesL.size(), &indicesL[0],
indicesP.size(), &indicesP[0],
&jacobianVertex[0],
ADD_VALUES);
- // Values at negative vertex, entry L,N in Jacobian
- jacobianVertex *= -1.0;
+ // Values at positive vertex, entry P,L in Jacobian
MatSetValues(jacobianMatrix,
+ indicesP.size(), &indicesP[0],
indicesL.size(), &indicesL[0],
- indicesN.size(), &indicesN[0],
&jacobianVertex[0],
ADD_VALUES);
- // Values associated with [C]^T
- // Transpose orientation matrix
- jacobianVertex = 0.0;
- for (int iDim=0; iDim < spaceDim; ++iDim)
- for (int jDim=0; jDim < spaceDim; ++jDim)
- jacobianVertex[iDim*spaceDim+jDim] =
- orientationVertex[jDim*spaceDim+iDim];
-
- // Values at positive vertex, entry P,L in Jacobian
+ // Values at negative vertex, entry L,N in Jacobian
+ jacobianVertex *= -1.0;
MatSetValues(jacobianMatrix,
- indicesP.size(), &indicesP[0],
indicesL.size(), &indicesL[0],
+ indicesN.size(), &indicesN[0],
&jacobianVertex[0],
ADD_VALUES);
- // Values at negative vertex, entry L,N in Jacobian
- jacobianVertex *= -1.0;
+ // Values at negative vertex, entry N,L in Jacobian
MatSetValues(jacobianMatrix,
indicesN.size(), &indicesN[0],
indicesL.size(), &indicesL[0],
@@ -500,14 +495,13 @@
ADD_VALUES);
#if defined(DETAILED_EVENT_LOGGING)
- PetscLogFlops(spaceDim*spaceDim*2);
- _logger->eventBegin(updateEvent);
+ _logger->eventEnd(updateEvent);
#endif
} // for
+ PetscLogFlops(numVertices*spaceDim*2);
#if !defined(DETAILED_EVENT_LOGGING)
- PetscLogFlops(numVertices*(spaceDim*spaceDim*2));
_logger->eventEnd(computeEvent);
#endif
@@ -517,7 +511,6 @@
sieveMesh->getSendOverlap()->view("Send domain overlap");
sieveMesh->getRecvOverlap()->view("Receive domain overlap");
#endif
-
} // integrateJacobian
// ----------------------------------------------------------------------
@@ -571,12 +564,13 @@
if (!globalOrder->isLocal(v_lagrange))
continue;
- assert(jacobianSection->getFiberDimension(v_lagrange) == spaceDim);
-
#if defined(DETAILED_EVENT_LOGGING)
_logger->eventBegin(updateEvent);
#endif
+
+ assert(jacobianSection->getFiberDimension(v_lagrange) == spaceDim);
jacobianSection->updatePoint(v_lagrange, &jacobianVertex[0]);
+
#if defined(DETAILED_EVENT_LOGGING)
_logger->eventEnd(updateEvent);
#endif
@@ -605,44 +599,22 @@
assert(0 != _fields);
assert(0 != _logger);
- /** We have J = [A C^T]
- * [C 0]
+ /** We have A = [K L^T]
+ * [L 0]
*
- * We want to approximate -( C A^(-1) C^T )
+ * Compute Pmat = -( [L] [K]^(-1) [L]^T ) using the diagonal of K to
+ * approximate [K]^(-1).
*
- * Consider Lagrange vertex L that constrains the relative
- * displacement between vertex N on the negative side of the fault
- * and vertex P on the positive side of the fault.
+ * Decompose [K] into [Kn] and [Kp], where [Kn] contains the terms
+ * for vertices on the negative side of the fault and [Kp] contains
+ * the terms for vertices on the positive side of the fault.
*
- * If we approximate A(-1) by 1/diag(A), then we can write
- * C A^(-1) C^T for a 2-D case as
+ * Pmat = L_{ik} (1.0/Kn_{kk} + 1.0/Kp{kk}) L_{ik}
*
- * [-R00 -R01 R00 R01][Ai_nx 0 0 0 ][-R00 -R10]
- * [-R10 -R11 R10 R11][ Ai_ny 0 0 ][-R01 -R11]
- * [ 0 Ai_px 0 ][ R00 R10]
- * [ Ai_py][ R01 R11]
- *
- * where
- *
- * Ai_nx is the inverse of the diag(A) for DOF x of vertex N
- * Ai_ny is the inverse of the diag(A) for DOF y of vertex N
- * Ai_px is the inverse of the diag(A) for DOF x of vertex P
- * Ai_py is the inverse of the diag(A) for DOF y of vertex P
- *
- * If Ai_nx == Ai_ny and Ai_px == Ai_py, then the result is
- * diagonal. Otherwise, the off-diagonal terms will be nonzero,
- * but we expect them to be small. Since we already approximate
- * the inverse of A by the inverse of the diagonal, we drop the
- * off-diagonal terms of C A^(-1) C^T:
- *
- * Term for DOF x of vertex L is:
- * -(R00^2 (Ai_nx + Ai_px) + R01^2 (Ai_ny + Ai_py))
- *
- * Term for DOF y of vertex L is:
- * -(R10^2 (Ai_nx + Ai_px) + R11^2 (Ai_ny + Ai_py))
+ * Because we use quadrature points located at the vertices,
+ * L_{ii} = area, L_{ij} = 0 if i != j
*/
-#if 1 // DIAGONAL PRECONDITIONER
const int setupEvent = _logger->eventId("FaPr setup");
const int computeEvent = _logger->eventId("FaPr compute");
const int restrictEvent = _logger->eventId("FaPr restrict");
@@ -652,10 +624,8 @@
// Get cell information and setup storage for cell data
const int spaceDim = _quadrature->spaceDim();
- const int orientationSize = spaceDim * spaceDim;
// Allocate vectors for vertex values
- double_array orientationVertex(orientationSize);
double_array jacobianVertexP(spaceDim*spaceDim);
double_array jacobianVertexN(spaceDim*spaceDim);
double_array jacobianInvVertexP(spaceDim);
@@ -668,13 +638,12 @@
indicesRel[i] = i;
// Get sections
+ const ALE::Obj<RealSection>& areaSection = _fields->get("area").section();
+ assert(!areaSection.isNull());
+
const ALE::Obj<RealSection>& solutionSection = fields->solution().section();
assert(!solutionSection.isNull());
- const ALE::Obj<RealSection>& orientationSection =
- _fields->get("orientation").section();
- assert(!orientationSection.isNull());
-
const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
assert(!sieveMesh.isNull());
const ALE::Obj<SieveMesh::order_type>& globalOrder =
@@ -711,10 +680,12 @@
#if defined(DETAILED_EVENT_LOGGING)
_logger->eventBegin(restrictEvent);
#endif
- // Get orientations at fault cell's vertices.
- orientationSection->restrictPoint(v_fault, &orientationVertex[0],
- orientationVertex.size());
+ // Get area associated with fault vertex.
+ assert(1 == areaSection->getFiberDimension(v_fault));
+ assert(areaSection->restrictPoint(v_fault));
+ const double areaVertex = *areaSection->restrictPoint(v_fault);
+
indicesN =
indicesRel + indicesMatToSubmat[globalOrder->getIndex(v_negative)];
err = MatGetValues(jacobianNP,
@@ -739,18 +710,13 @@
jacobianInvVertexP[iDim] = 1.0/jacobianVertexP[iDim*spaceDim+iDim];
} // for
- // Compute -[C] [Adiag]^(-1) [C]^T
- // C_{ij} = orientationVertex[i*spaceDim+j]
- // C^T_{ij} = orientationVertex[j*spaceDim+i]
+ // Compute -[L] [Adiag]^(-1) [L]^T
+ // L_{ii} = L^T{ii} = areaVertex
// Adiag^{-1}_{ii} = jacobianInvVertexN[i] + jacobianInvVertexP[i]
- // \sum_{j} C_{ij} Adiag^{-1}_{jj} C^T_{ji}
precondVertexL = 0.0;
- for (int kDim=0; kDim < spaceDim; ++kDim) {
- for (int iDim=0; iDim < spaceDim; ++iDim)
- precondVertexL[kDim] -=
- orientationVertex[kDim*spaceDim+iDim] *
- orientationVertex[kDim*spaceDim+iDim] *
- (jacobianInvVertexN[iDim] + jacobianInvVertexP[iDim]);
+ for (int iDim=0; iDim < spaceDim; ++iDim) {
+ precondVertexL[iDim] -= areaVertex * areaVertex *
+ (jacobianInvVertexN[iDim] + jacobianInvVertexP[iDim]);
} // for
@@ -759,7 +725,8 @@
_logger->eventBegin(updateEvent);
#endif
- // Set global preconditioner index associated with Lagrange constraint vertex.
+ // Set global preconditioner index associated with Lagrange
+ // constraint vertex.
const int indexLprecond = lagrangeGlobalOrder->getIndex(v_lagrange);
// Set diagonal entries in preconditioned matrix.
@@ -769,371 +736,25 @@
indexLprecond + iDim,
precondVertexL[iDim],
INSERT_VALUES);
+
+#if 0 // DEBUGGING
+ std::cout << "1/P_vertex " << *v_lagrange << std::endl;
+ for(int iDim = 0; iDim < spaceDim; ++iDim) {
+ std::cout << " " << precondVertexL[iDim] << std::endl;
+ } // for
+#endif
+
#if defined(DETAILED_EVENT_LOGGING)
- PetscLogFlops(spaceDim*spaceDim*4);
_logger->eventEnd(updateEvent);
#endif
} // for
err = MatDestroy(&jacobianNP); CHECK_PETSC_ERROR(err);
+ PetscLogFlops(numVertices*spaceDim*6);
-
-#else // FULL PRECONDITIONER
-
- // Compute -( [C] [A]^(-1) [C]^T ) for cell.
- //
- // numBasis = number of corners in fault cell
- // spaceDim = spatial dimension
- //
- // For the cell, [A] is 2*numBasis*spaceDim x 2*numBasis*spaceDim,
- // [C] is numBasis*spaceDim x 2*numBasis*spaceDim
- //
- // Decompose [A] into [An] and [Ap], where [An] contains the terms
- // for vertices on the negative side of the fault and [Ap] contains
- // the terms for vertices on the positive side of the fault.
- //
- // [An] and [Ap] are numBasis*spaceDim x numBasis*spaceDim
- //
- // Let [CAC] = [C] [A]^(-1) [C]^T.
- //
- // CAiC_kl = Cij Ai_jk C_lk
- //
- // Cij: iLagrange, iDim, jBasis, jDim
- // Ai_jk: jBasis, jDim, kBasis, kDim
- // C_lk: lLagrange, lDim, kBasis, kDim
-
-
- const int setupEvent = _logger->eventId("FaPr setup");
- const int computeEvent = _logger->eventId("FaPr compute");
- const int restrictEvent = _logger->eventId("FaPr restrict");
- const int updateEvent = _logger->eventId("FaPr update");
-
- _logger->eventBegin(setupEvent);
-
- // Get cell information and setup storage for cell data
- const int spaceDim = _quadrature->spaceDim();
- const int numBasis = _quadrature->numBasis();
- const int orientationSize = spaceDim * spaceDim;
- const int nrowsF = numBasis*spaceDim; // number of rows/cols in fault matrix
-
- // Size of fault preconditioner matrix for cell
- const int matrixSizeF = nrowsF * nrowsF;
- PetscBLASInt workSize = 6*nrowsF;
-
- // Allocate vectors for vertex values
- double_array preconditionerCell(matrixSizeF);
- int_array indicesN(nrowsF);
- int_array indicesP(nrowsF);
- int_array indicesLagrange(nrowsF);
- double_array jacobianCellP(matrixSizeF);
- double_array jacobianCellN(matrixSizeF);
- double_array jacobianInvCellP(matrixSizeF);
- double_array jacobianInvCellN(matrixSizeF);
- double_array UN(matrixSizeF);
- double_array UP(matrixSizeF);
- double_array VNt(matrixSizeF);
- double_array VPt(matrixSizeF);
- double_array singularValuesN(nrowsF);
- double_array singularValuesP(nrowsF);
- double_array work(workSize);
-
- // Get sections
- const ALE::Obj<RealSection>& solutionSection = fields->solution().section();
- assert(!solutionSection.isNull());
-
- double_array orientationCell(numBasis*orientationSize);
- const ALE::Obj<RealSection>& orientationSection =
- _fields->get("orientation").section();
- assert(!orientationSection.isNull());
- RestrictVisitor orientationVisitor(*orientationSection,
- orientationCell.size(),
- &orientationCell[0]);
-
- const int numConstraintVert = numBasis;
- const int numCorners = 3 * numConstraintVert; // cohesive cell
-
- // Get cohesive cells
- const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
- assert(!sieveMesh.isNull());
- const ALE::Obj<SieveMesh::order_type>& lagrangeGlobalOrder =
- sieveMesh->getFactory()->getGlobalOrder(sieveMesh, "faultDefault",
- solutionSection, spaceDim);
- assert(!lagrangeGlobalOrder.isNull());
- const ALE::Obj<SieveMesh::label_sequence>& cellsCohesive =
- sieveMesh->getLabelStratum("material-id", id());
- assert(!cellsCohesive.isNull());
- const SieveMesh::label_sequence::iterator cellsCohesiveBegin =
- cellsCohesive->begin();
- const SieveMesh::label_sequence::iterator cellsCohesiveEnd =
- cellsCohesive->end();
-
- const PetscMat jacobianMatrix = jacobian->matrix();
- assert(0 != jacobianMatrix);
- const ALE::Obj<SieveMesh::order_type>& globalOrder =
- sieveMesh->getFactory()->getGlobalOrder(sieveMesh, "default",
- solutionSection);
- assert(!globalOrder.isNull());
- // We would need to request unique points here if we had an interpolated mesh
- IndicesVisitor jacobianVisitor(*solutionSection, *globalOrder,
- (int) pow(sieveMesh->getSieve()->getMaxConeSize(),
- sieveMesh->depth())*spaceDim);
-
-
-
- const ALE::Obj<SieveMesh::sieve_type>& sieve = sieveMesh->getSieve();
- assert(!sieve.isNull());
- ALE::ISieveVisitor::NConeRetriever<SieveMesh::sieve_type> ncV(*sieve,
- (size_t) pow(sieve->getMaxConeSize(), std::max(0, sieveMesh->depth())));
-
-
- const ALE::Obj<SieveSubMesh>& faultSieveMesh = _faultMesh->sieveMesh();
- assert(!faultSieveMesh.isNull());
- const ALE::Obj<SieveSubMesh::sieve_type>& faultSieve = faultSieveMesh->getSieve();
- assert(!faultSieve.isNull());
- ALE::ISieveVisitor::NConeRetriever<SieveSubMesh::sieve_type> fncV(*faultSieve,
- (size_t) pow(faultSieve->getMaxConeSize(), std::max(0, faultSieveMesh->depth())));
-
- _logger->eventEnd(setupEvent);
#if !defined(DETAILED_EVENT_LOGGING)
- _logger->eventBegin(computeEvent);
-#endif
-
- for (SieveMesh::label_sequence::iterator c_iter=cellsCohesiveBegin;
- c_iter != cellsCohesiveEnd;
- ++c_iter) {
- // Get cone for cohesive cell
- ncV.clear();
- ALE::ISieveTraversal<SieveMesh::sieve_type>::orientedClosure(*sieve,
- *c_iter, ncV);
- const int coneSize = ncV.getSize();
- assert(coneSize == numCorners);
- const Mesh::point_type *cohesiveCone = ncV.getPoints();
- assert(0 != cohesiveCone);
-
- // Get cone for corresponding fault cell
- const SieveMesh::point_type c_fault = _cohesiveToFault[*c_iter];
- fncV.clear();
- ALE::ISieveTraversal<SieveMesh::sieve_type>::orientedClosure(*faultSieve,
- c_fault, fncV);
- const int coneSizeFault = fncV.getSize();
- assert(coneSizeFault == numBasis);
- const Mesh::point_type *faultCone = fncV.getPoints();
- assert(0 != faultCone);
-
- jacobianCellP = 0.0;
- jacobianCellN = 0.0;
- preconditionerCell = 0.0;
-
-#if defined(DETAILED_EVENT_LOGGING)
- _logger->eventBegin(restrictEvent);
-#endif
-
- // Get indices
- for (int iBasis = 0; iBasis < numBasis; ++iBasis) {
- // constraint vertex k
- const int v_negative = cohesiveCone[0*numBasis+iBasis];
- const int v_positive = cohesiveCone[1*numBasis+iBasis];
- const int v_lagrange = cohesiveCone[2*numBasis+iBasis];
-
- for (int iDim=0, iB=iBasis*spaceDim; iDim < spaceDim; ++iDim) {
- if (globalOrder->isLocal(v_negative))
- indicesN[iB+iDim] = globalOrder->getIndex(v_negative) + iDim;
- else
- indicesN[iB+iDim] = -1;
- if (globalOrder->isLocal(v_positive))
- indicesP[iB+iDim] = globalOrder->getIndex(v_positive) + iDim;
- else
- indicesP[iB+iDim] = -1;
- if (globalOrder->isLocal(v_lagrange))
- indicesLagrange[iB+iDim] = lagrangeGlobalOrder->getIndex(v_lagrange) + iDim;
- else
- indicesLagrange[iB+iDim] = -1;
-
- // Set matrix diagonal entries to 1.0 (used when vertex is not local).
- jacobianCellN[iB+iDim] = 1.0;
- jacobianCellP[iB+iDim] = 1.0;
- } // for
- } // for
-
- // Get values from Jacobian matrix.
- PetscErrorCode err = 0;
- err = MatGetValues(jacobianMatrix,
- indicesN.size(), &indicesN[0],
- indicesN.size(), &indicesN[0],
- &jacobianCellN[0]);
- CHECK_PETSC_ERROR_MSG(err, "Restrict from PETSc Mat failed.");
-
- err = MatGetValues(jacobianMatrix,
- indicesP.size(), &indicesP[0],
- indicesP.size(), &indicesP[0],
- &jacobianCellP[0]);
- CHECK_PETSC_ERROR_MSG(err, "Restrict from PETSc Mat failed.");
-
- // Get orientation at fault vertices.
- orientationVisitor.clear();
- faultSieveMesh->restrictClosure(c_fault, orientationVisitor);
-
-
-#if defined(DETAILED_EVENT_LOGGING)
- _logger->eventEnd(restrictEvent);
- _logger->eventBegin(computeEvent);
-#endif
-
- // Invert jacobianCellN and jacobianCellP, result goes in
- // jacobianInvCellN and jacobianInvCellP if need separate place
- // for result.
- PetscBLASInt elemRows = nrowsF;
- PetscScalar one = 1.0;
- PetscBLASInt berr;
-
-#if 0
- std::cout << "AN_cell " << *c_iter << std::endl;
- for(int i = 0; i < nrowsF; ++i) {
- for(int j = 0; j < nrowsF; ++j) {
- std::cout << " " << jacobianCellN[i*nrowsF+j];
- }
- std::cout << std::endl;
- }
-#endif
-
- // Transpose matrices so we can call LAPACK
- for(int i = 0; i < nrowsF; ++i) {
- for(int j = 0; j < i; ++j) {
- PetscInt k = i*nrowsF+j;
- PetscInt kp = j*nrowsF+i;
- PetscScalar tmp;
- tmp = jacobianCellN[k];
- jacobianCellN[k] = jacobianCellN[kp];
- jacobianCellN[kp] = tmp;
- tmp = jacobianCellP[k];
- jacobianCellP[k] = jacobianCellP[kp];
- jacobianCellP[kp] = tmp;
- }
- }
- LAPACKgesvd_("A", "A", &elemRows, &elemRows, &jacobianCellN[0], &elemRows, &singularValuesN[0], &UN[0], &elemRows, &VNt[0], &elemRows, &work[0], &workSize, &berr);
- CHECK_PETSC_ERROR_MSG(berr, "Inversion of negative-side element matrix failed.");
- LAPACKgesvd_("A", "A", &elemRows, &elemRows, &jacobianCellP[0], &elemRows, &singularValuesP[0], &UP[0], &elemRows, &VPt[0], &elemRows, &work[0], &workSize, &berr);
- CHECK_PETSC_ERROR_MSG(berr, "Inversion of positive-side element matrix failed.");
-
-#if 0
- for(int i = 0; i < nrowsF; ++i) {
- std::cout << "sigmaN["<<i<<"]: " << singularValuesN[i] << " sigmaP["<<i<<"]: " << singularValuesP[i] << std::endl;
- }
- std::cout << "UN_cell " << *c_iter << std::endl;
- for(int i = 0; i < nrowsF; ++i) {
- for(int j = 0; j < nrowsF; ++j) {
- std::cout << " " << UN[j*nrowsF+i];
- }
- std::cout << std::endl;
- }
- std::cout << "VNt_cell " << *c_iter << std::endl;
- for(int i = 0; i < nrowsF; ++i) {
- for(int j = 0; j < nrowsF; ++j) {
- std::cout << " " << VNt[j*nrowsF+i];
- }
- std::cout << std::endl;
- }
-#endif
-
- // Row scale Vt by the inverse of the singular values
- for(int i = 0; i < nrowsF; ++i) {
- const PetscReal invN = singularValuesN[i] > 1.0e-10 ? 1.0/singularValuesN[i] : 0.0;
- const PetscReal invP = singularValuesP[i] > 1.0e-10 ? 1.0/singularValuesP[i] : 0.0;
-
- for(int j = 0; j < nrowsF; ++j) {
- VNt[j*nrowsF+i] *= invN;
- VPt[j*nrowsF+i] *= invP;
- }
- }
- BLASgemm_("N", "N", &elemRows, &elemRows, &elemRows, &one, &UN[0], &elemRows, &VNt[0], &elemRows, &one, &jacobianInvCellN[0], &elemRows);
- BLASgemm_("N", "N", &elemRows, &elemRows, &elemRows, &one, &UP[0], &elemRows, &VPt[0], &elemRows, &one, &jacobianInvCellP[0], &elemRows);
-
- // Transpose matrices from LAPACK
- for(int i = 0; i < nrowsF; ++i) {
- for(int j = 0; j < i; ++j) {
- PetscInt k = i*nrowsF+j;
- PetscInt kp = j*nrowsF+i;
- PetscScalar tmp;
- tmp = jacobianInvCellN[k];
- jacobianInvCellN[k] = jacobianInvCellN[kp];
- jacobianInvCellN[kp] = tmp;
- tmp = jacobianInvCellP[k];
- jacobianInvCellP[k] = jacobianInvCellP[kp];
- jacobianInvCellP[kp] = tmp;
- }
- }
-
- // Combine Jacbian inverse terms with result in jacobianInvCellN
- jacobianInvCellN += jacobianInvCellP;
-
- for (int iLagrange=0; iLagrange < numBasis; ++iLagrange) {
- // Exploit structure of C in matrix multiplication.
- // C_ij Ai_jk C_lk - Structure of C means j == i;
- const int jBasis = iLagrange;
-
- for (int lLagrange=0; lLagrange < numBasis; ++lLagrange) {
- // Exploit structure of C in matrix multiplication.
- // -C_ij Ai_jk C_lk - Structure of C means k == l;
- const int kBasis = lLagrange;
-
- for (int iDim=0; iDim < spaceDim; ++iDim) {
- const int iL = iLagrange*spaceDim + iDim;
-
- for (int lDim=0; lDim < spaceDim; ++lDim) {
- const int lL = lLagrange*spaceDim + lDim;
-
- for (int jDim=0; jDim < spaceDim; ++jDim) {
- const int jB = jBasis*spaceDim + jDim;
-
- for (int kDim=0; kDim < spaceDim; ++kDim) {
- const int kB = kBasis*spaceDim + kDim;
-
- preconditionerCell[iL*nrowsF+lL] -=
- orientationCell[iLagrange*orientationSize+iDim*spaceDim+jDim] *
- jacobianInvCellN[jB*nrowsF+kB] *
- orientationCell[lLagrange*orientationSize+kDim*spaceDim+lDim];
-
- } // for
- } // for
- } // for
- } // for
- } // for
- } // for
-
-#if 0
- std::cout << "1/P_cell " << *c_iter << std::endl;
- for(int i = 0; i < nrowsF; ++i) {
- for(int j = 0; j < nrowsF; ++j) {
- std::cout << " " << preconditionerCell[i*nrowsF+j];
- }
- std::cout << std::endl;
- }
-#endif
-
-#if defined(DETAILED_EVENT_LOGGING)
_logger->eventEnd(computeEvent);
- _logger->eventBegin(updateEvent);
#endif
-
- err = MatSetValues(*precondMatrix,
- indicesLagrange.size(), &indicesLagrange[0],
- indicesLagrange.size(), &indicesLagrange[0],
- &preconditionerCell[0],
- ADD_VALUES);
- CHECK_PETSC_ERROR_MSG(err, "Setting values in fault preconditioner failed.");
-
-#if defined(DETAILED_EVENT_LOGGING)
- _logger->eventBegin(updateEvent);
-#endif
-
- } // for
-
-#if !defined(DETAILED_EVENT_LOGGING)
- _logger->eventEnd(computeEvent);
-#endif
-
-#endif
-
} // calcPreconditioner
// ----------------------------------------------------------------------
@@ -1144,28 +765,27 @@
const topology::Field<
topology::Mesh>& jacobian)
{ // adjustSolnLumped
- /// Member prototype for _adjustSolnLumpedXD()
- typedef void (pylith::faults::FaultCohesiveLagrange::*adjustSolnLumped_fn_type)
- (double_array*, double_array*, double_array*,
- const double_array&, const double_array&,
- const double_array&, const double_array&,
- const double_array&, const double_array&,
- const double_array&, const double_array&);
-
assert(0 != fields);
assert(0 != _quadrature);
- // Cohesive cells with conventional vertices i and j, and constraint
- // vertex k require 2 adjustments to the solution:
+ // Cohesive cells with conventional vertices N and P, and constraint
+ // vertex L require 2 adjustments to the solution:
//
- // * DOF k: Compute increment in Lagrange multipliers
- // dl_k = S^{-1} (-C_ki (A_i^{-1} r_i - C_kj A_j^{-1} r_j + u_i - u_j) - d_k)
- // S = C_ki (A_i^{-1} + A_j^{-1}) C_ki^T
+ // * DOF L: Compute increment in Lagrange multipliers
//
+ // d\vec{l}_p = \tensor{S}^{-1} \cdot (-\vec{r}_p^{*} + \tensor{L}_p
+ // \cdot (d\vec{u}_{n+}^* - d\vec{u}_{n-}^*))
+ // \tensor{S} = \tensor{L}_p \cdot
+ // (\tensor{K}_{n+n+}{-1} + \tensor{K}_{n-n-})
+ // \cdot \tensor{L}_p^T
+ //
// * DOF i and j: Adjust displacement increment (solution) to create slip
// consistent with Lagrange multiplier constraints
- // du_i = +A_i^-1 C_ki^T dlk
- // du_j = -A_j^-1 C_kj^T dlk
+ //
+ // d\vec{u}_{n+} = d\vec{u}_{n+}^{*} - \tensor{K}_{n+n+}^{-1} \cdot
+ // \tensor{L}_p^T \cdot d\vec{l}_p
+ // d\vec{u}_{n-} = d\vec{u}_{n-}^{*} + \tensor{K}_{n-n-}^{-1} \cdot
+ // \tensor{L}_p^T \cdot d\vec{l}_p
const int setupEvent = _logger->eventId("FaAS setup");
const int geometryEvent = _logger->eventId("FaAS geometry");
@@ -1177,37 +797,21 @@
// Get cell information and setup storage for cell data
const int spaceDim = _quadrature->spaceDim();
- const int orientationSize = spaceDim * spaceDim;
// Get section information
- double_array orientationVertex(orientationSize);
- const ALE::Obj<RealSection>& orientationSection =
- _fields->get("orientation").section();
- assert(!orientationSection.isNull());
+ const ALE::Obj<RealSection>& areaSection = _fields->get("area").section();
+ assert(!areaSection.isNull());
- double_array slipVertex(spaceDim);
- const ALE::Obj<RealSection>& slipSection = _fields->get("slip").section();
- assert(!slipSection.isNull());
-
- double_array jacobianVertexN(spaceDim);
- double_array jacobianVertexP(spaceDim);
const ALE::Obj<RealSection>& jacobianSection = jacobian.section();
assert(!jacobianSection.isNull());
- double_array residualVertexN(spaceDim);
- double_array residualVertexP(spaceDim);
const ALE::Obj<RealSection>& residualSection =
fields->get("residual").section();
assert(!residualSection.isNull());
- double_array dispTVertexN(spaceDim);
- double_array dispTVertexP(spaceDim);
- const ALE::Obj<RealSection>& dispTSection = fields->get("disp(t)").section();
- assert(!dispTSection.isNull());
-
double_array dispTIncrVertexN(spaceDim);
double_array dispTIncrVertexP(spaceDim);
- double_array lagrangeTIncrVertex(spaceDim);
+ double_array dispTIncrVertexL(spaceDim);
const ALE::Obj<RealSection>& dispTIncrSection = fields->get(
"dispIncr(t->t+dt)").section();
assert(!dispTIncrSection.isNull());
@@ -1219,29 +823,10 @@
const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
assert(!sieveMesh.isNull());
const ALE::Obj<SieveMesh::order_type>& globalOrder =
- sieveMesh->getFactory()->getGlobalOrder(sieveMesh, "default", jacobianSection);
+ sieveMesh->getFactory()->getGlobalOrder(sieveMesh, "default",
+ jacobianSection);
assert(!globalOrder.isNull());
- adjustSolnLumped_fn_type adjustSolnLumpedFn;
- switch (spaceDim) { // switch
- case 1:
- adjustSolnLumpedFn =
- &pylith::faults::FaultCohesiveLagrange::_adjustSolnLumped1D;
- break;
- case 2:
- adjustSolnLumpedFn =
- &pylith::faults::FaultCohesiveLagrange::_adjustSolnLumped2D;
- break;
- case 3:
- adjustSolnLumpedFn =
- &pylith::faults::FaultCohesiveLagrange::_adjustSolnLumped3D;
- break;
- default :
- assert(0);
- throw std::logic_error("Unknown spatial dimension in "
- "FaultCohesiveLagrange::adjustSolnLumped.");
- } // switch
-
_logger->eventEnd(setupEvent);
#if !defined(DETAILED_EVENT_LOGGING)
@@ -1263,44 +848,61 @@
_logger->eventBegin(restrictEvent);
#endif
- // Get orientations at fault cell's vertices.
- orientationSection->restrictPoint(v_fault, &orientationVertex[0],
- orientationVertex.size());
-
- // Get slip at fault cell's vertices.
- slipSection->restrictPoint(v_fault, &slipVertex[0], slipVertex.size());
-
// Get residual at cohesive cell's vertices.
- residualSection->restrictPoint(v_negative, &residualVertexN[0],
- residualVertexN.size());
- residualSection->restrictPoint(v_positive, &residualVertexP[0],
- residualVertexP.size());
-
+ assert(spaceDim == residualSection->getFiberDimension(v_lagrange));
+ const double* residualVertexL = residualSection->restrictPoint(v_lagrange);
+ assert(residualVertexL);
+
// Get jacobian at cohesive cell's vertices.
- jacobianSection->restrictPoint(v_negative, &jacobianVertexN[0],
- jacobianVertexN.size());
- jacobianSection->restrictPoint(v_positive, &jacobianVertexP[0],
- jacobianVertexP.size());
+ assert(spaceDim == jacobianSection->getFiberDimension(v_negative));
+ const double* jacobianVertexN = jacobianSection->restrictPoint(v_negative);
+ assert(jacobianVertexN);
- // Get disp(t) at cohesive cell's vertices.
- dispTSection->restrictPoint(v_negative, &dispTVertexN[0],
- dispTVertexN.size());
- dispTSection->restrictPoint(v_positive, &dispTVertexP[0],
- dispTVertexP.size());
+ assert(spaceDim == jacobianSection->getFiberDimension(v_positive));
+ const double* jacobianVertexP = jacobianSection->restrictPoint(v_positive);
+ assert(jacobianVertexP);
+ // Get area at fault vertex.
+ assert(1 == areaSection->getFiberDimension(v_fault));
+ assert(areaSection->restrictPoint(v_fault));
+ const double areaVertex = *areaSection->restrictPoint(v_fault);
+ assert(areaVertex > 0.0);
+
+ // Get dispIncr(t) at vertices.
+ assert(spaceDim == dispTIncrSection->getFiberDimension(v_negative));
+ dispTIncrSection->restrictPoint(v_negative, &dispTIncrVertexN[0],
+ dispTIncrVertexN.size());
+
+ assert(spaceDim == dispTIncrSection->getFiberDimension(v_positive));
+ dispTIncrSection->restrictPoint(v_positive, &dispTIncrVertexP[0],
+ dispTIncrVertexP.size());
+
+ assert(spaceDim == dispTIncrSection->getFiberDimension(v_lagrange));
+ dispTIncrSection->restrictPoint(v_lagrange, &dispTIncrVertexL[0],
+ dispTIncrVertexL.size());
+
#if defined(DETAILED_EVENT_LOGGING)
_logger->eventEnd(restrictEvent);
_logger->eventBegin(computeEvent);
#endif
- CALL_MEMBER_FN(*this,
- adjustSolnLumpedFn)(&lagrangeTIncrVertex,
- &dispTIncrVertexN, &dispTIncrVertexP,
- slipVertex, orientationVertex,
- dispTVertexN, dispTVertexP,
- residualVertexN, residualVertexP,
- jacobianVertexN, jacobianVertexP);
+ for (int iDim=0; iDim < spaceDim; ++iDim) {
+ const double S = (1.0/jacobianVertexP[iDim] + 1.0/jacobianVertexN[iDim]) *
+ areaVertex * areaVertex;
+ dispTIncrVertexL[iDim] = 1.0/S *
+ (-residualVertexL[iDim] +
+ areaVertex * (dispTIncrVertexP[iDim] - dispTIncrVertexN[iDim]));
+ assert(jacobianVertexN[iDim] > 0.0);
+ dispTIncrVertexN[iDim] =
+ +areaVertex / jacobianVertexN[iDim]*dispTIncrVertexL[iDim];
+
+ assert(jacobianVertexP[iDim] > 0.0);
+ dispTIncrVertexP[iDim] =
+ -areaVertex / jacobianVertexP[iDim]*dispTIncrVertexL[iDim];
+
+ } // for
+
#if defined(DETAILED_EVENT_LOGGING)
_logger->eventEnd(computeEvent);
_logger->eventBegin(updateEvent);
@@ -1317,10 +919,10 @@
dispTIncrAdjSection->updateAddPoint(v_positive, &dispTIncrVertexP[0]);
// Set Lagrange multiplier value. Value from preliminary solve is
- // bogus due to artificial diagonal entry of 1.0.
- assert(lagrangeTIncrVertex.size() ==
+ // bogus due to artificial diagonal entry.
+ assert(dispTIncrVertexL.size() ==
dispTIncrSection->getFiberDimension(v_lagrange));
- dispTIncrSection->updatePoint(v_lagrange, &lagrangeTIncrVertex[0]);
+ dispTIncrSection->updatePoint(v_lagrange, &dispTIncrVertexL[0]);
#if defined(DETAILED_EVENT_LOGGING)
_logger->eventEnd(updateEvent);
@@ -1349,6 +951,31 @@
throw std::runtime_error(msg.str());
} // if
+ // Verify quadrature scheme is consistent with points collocated
+ // with verties. Expect basis functions to be 1.0 at one quadrature
+ // point and zero at all others.
+ const double_array basis = _quadrature->basis();
+ const int numBasis = _quadrature->numBasis();
+ const int numQuadPts = _quadrature->numQuadPts();
+ for (int iQuadPt=0; iQuadPt < numQuadPts; ++iQuadPt) {
+ int nonzero = 0;
+ const double tolerance = 1.0e-6;
+ for (int iBasis=0; iBasis < numBasis; ++iBasis) {
+ if (fabs(basis[iQuadPt*numBasis+iBasis]) > tolerance)
+ ++nonzero;
+ } // for
+ if (numBasis != numQuadPts || 1 != nonzero) {
+ std::ostringstream msg;
+ msg << "Quadrature scheme for fault " << label()
+ << " is incompatible with fault implementation.\n"
+ << "Expected quadrature points collocated with vertices, so that "
+ << "basis functions are \n"
+ << "1.0 at one quadrature point and zero at all other quadrature "
+ << "points.";
+ throw std::runtime_error(msg.str());
+ } // if
+ } // for
+
// check compatibility of mesh and quadrature scheme
const int dimension = mesh.dimension() - 1;
if (_quadrature->cellDim() != dimension) {
@@ -1582,8 +1209,9 @@
// Allocate orientation field.
_fields->add("orientation", "orientation");
topology::Field<topology::SubMesh>& orientation = _fields->get("orientation");
- const topology::Field<topology::SubMesh>& slip = _fields->get("slip");
- orientation.newSection(slip, orientationSize);
+ const topology::Field<topology::SubMesh>& dispRel =
+ _fields->get("relative disp");
+ orientation.newSection(dispRel, orientationSize);
const ALE::Obj<RealSection>& orientationSection = orientation.section();
assert(!orientationSection.isNull());
// Create subspaces for along-strike, up-dip, and normal directions
@@ -1824,8 +1452,9 @@
// Allocate area field.
_fields->add("area", "area");
topology::Field<topology::SubMesh>& area = _fields->get("area");
- const topology::Field<topology::SubMesh>& slip = _fields->get("slip");
- area.newSection(slip, 1);
+ const topology::Field<topology::SubMesh>& dispRel =
+ _fields->get("relative disp");
+ area.newSection(dispRel, 1);
area.allocate();
area.vectorFieldType(topology::FieldBase::SCALAR);
area.zero();
@@ -1908,19 +1537,22 @@
double_array tractionsVertex(spaceDim);
// Get sections.
- const ALE::Obj<RealSection>& areaSection = _fields->get("area").section();
- assert(!areaSection.isNull());
const ALE::Obj<RealSection>& dispTSection = dispT.section();
assert(!dispTSection.isNull());
+ const ALE::Obj<RealSection>& orientationSection =
+ _fields->get("orientation").section();
+ assert(!orientationSection.isNull());
+
// Allocate buffer for tractions field (if necessary).
const ALE::Obj<RealSection>& tractionsSection = tractions->section();
if (tractionsSection.isNull()) {
ALE::MemoryLogger& logger = ALE::MemoryLogger::singleton();
//logger.stagePush("Fault");
- const topology::Field<topology::SubMesh>& slip = _fields->get("slip");
- tractions->cloneSection(slip);
+ const topology::Field<topology::SubMesh>& dispRel =
+ _fields->get("relative disp");
+ tractions->cloneSection(dispRel);
//logger.stagePop();
} // if
@@ -1935,18 +1567,23 @@
const int v_fault = _cohesiveVertices[iVertex].fault;
assert(spaceDim == dispTSection->getFiberDimension(v_lagrange));
- assert(spaceDim == tractionsSection->getFiberDimension(v_fault));
- assert(1 == areaSection->getFiberDimension(v_fault));
-
const double* dispTVertex = dispTSection->restrictPoint(v_lagrange);
assert(0 != dispTVertex);
- const double* areaVertex = areaSection->restrictPoint(v_fault);
- assert(0 != areaVertex);
- for (int i = 0; i < spaceDim; ++i)
- tractionsVertex[i] = dispTVertex[i] / areaVertex[0];
+ assert(spaceDim*spaceDim == orientationSection->getFiberDimension(v_fault));
+ const double* orientationVertex =
+ orientationSection->restrictPoint(v_fault);
+ assert(orientationVertex);
- assert(tractionsVertex.size() == tractionsSection->getFiberDimension(v_fault));
+ // Rotate from global coordinate system to fault (orientation)
+ tractionsVertex = 0.0;
+ for (int iDim=0; iDim < spaceDim; ++iDim)
+ for (int jDim=0; jDim < spaceDim; ++jDim)
+ tractionsVertex[iDim] +=
+ orientationVertex[iDim*spaceDim+jDim] * dispTVertex[jDim];
+
+ assert(tractionsVertex.size() ==
+ tractionsSection->getFiberDimension(v_fault));
tractionsSection->updatePoint(v_fault, &tractionsVertex[0]);
} // for
@@ -1958,6 +1595,112 @@
} // _calcTractionsChange
// ----------------------------------------------------------------------
+// Transform field from local (fault) coordinate system to
+// global coordinate system.
+void
+pylith::faults::FaultCohesiveLagrange::_faultToGlobal(topology::Field<topology::SubMesh>* field)
+{ // _faultToGlobal
+ assert(field);
+ assert(0 != _faultMesh);
+ assert(0 != _fields);
+
+ // Fiber dimension of vector field matches spatial dimension.
+ const int spaceDim = _quadrature->spaceDim();
+ double_array fieldVertexGlobal(spaceDim);
+
+ // Get sections.
+ const ALE::Obj<RealSection>& fieldSection = field->section();
+ assert(!fieldSection.isNull());
+
+ const ALE::Obj<RealSection>& orientationSection =
+ _fields->get("orientation").section();
+ assert(!orientationSection.isNull());
+
+ const int numVertices = _cohesiveVertices.size();
+ for (int iVertex=0; iVertex < numVertices; ++iVertex) {
+ const int v_fault = _cohesiveVertices[iVertex].fault;
+
+ assert(spaceDim == fieldSection->getFiberDimension(v_fault));
+ const double* fieldVertexFault = fieldSection->restrictPoint(v_fault);
+ assert(fieldVertexFault);
+
+ assert(spaceDim*spaceDim == orientationSection->getFiberDimension(v_fault));
+ const double* orientationVertex = orientationSection->restrictPoint(v_fault);
+ assert(orientationVertex);
+
+ // Rotate from fault to global coordinate system (transpose orientation)
+ fieldVertexGlobal = 0.0;
+ for (int iDim=0; iDim < spaceDim; ++iDim)
+ for (int jDim=0; jDim < spaceDim; ++jDim)
+ fieldVertexGlobal[iDim] +=
+ orientationVertex[jDim*spaceDim+iDim] * fieldVertexFault[jDim];
+
+ assert(fieldVertexGlobal.size() ==
+ fieldSection->getFiberDimension(v_fault));
+ fieldSection->updatePoint(v_fault, &fieldVertexGlobal[0]);
+ } // for
+
+ PetscLogFlops(numVertices * (2*spaceDim*spaceDim) );
+
+#if 0 // DEBUGGING
+ field->view("FIELD (GLOBAL)");
+#endif
+} // _faultToGlobal
+
+// ----------------------------------------------------------------------
+// Transform field from global coordinate system to local (fault)
+// coordinate system.
+void
+pylith::faults::FaultCohesiveLagrange::_globalToFault(topology::Field<topology::SubMesh>* field)
+{ // _globalToFault
+ assert(field);
+ assert(0 != _faultMesh);
+ assert(0 != _fields);
+
+ // Fiber dimension of vector field matches spatial dimension.
+ const int spaceDim = _quadrature->spaceDim();
+ double_array fieldVertexFault(spaceDim);
+
+ // Get sections.
+ const ALE::Obj<RealSection>& fieldSection = field->section();
+ assert(!fieldSection.isNull());
+
+ const ALE::Obj<RealSection>& orientationSection =
+ _fields->get("orientation").section();
+ assert(!orientationSection.isNull());
+
+ const int numVertices = _cohesiveVertices.size();
+ for (int iVertex=0; iVertex < numVertices; ++iVertex) {
+ const int v_fault = _cohesiveVertices[iVertex].fault;
+
+ assert(spaceDim == fieldSection->getFiberDimension(v_fault));
+ const double* fieldVertexGlobal = fieldSection->restrictPoint(v_fault);
+ assert(fieldVertexGlobal);
+
+ assert(spaceDim*spaceDim == orientationSection->getFiberDimension(v_fault));
+ const double* orientationVertex = orientationSection->restrictPoint(v_fault);
+ assert(orientationVertex);
+
+ // Rotate from global coordinate system to fault (orientation)
+ fieldVertexFault = 0.0;
+ for (int iDim=0; iDim < spaceDim; ++iDim)
+ for (int jDim=0; jDim < spaceDim; ++jDim)
+ fieldVertexFault[iDim] +=
+ orientationVertex[iDim*spaceDim+jDim] * fieldVertexGlobal[jDim];
+
+ assert(fieldVertexFault.size() ==
+ fieldSection->getFiberDimension(v_fault));
+ fieldSection->updatePoint(v_fault, &fieldVertexFault[0]);
+ } // for
+
+ PetscLogFlops(numVertices * (2*spaceDim*spaceDim) );
+
+#if 0 // DEBUGGING
+ field->view("FIELD (FAULT)");
+#endif
+} // _faultToGlobal
+
+// ----------------------------------------------------------------------
// Allocate buffer for vector field.
void
pylith::faults::FaultCohesiveLagrange::_allocateBufferVectorField(void)
@@ -1969,12 +1712,14 @@
ALE::MemoryLogger& logger = ALE::MemoryLogger::singleton();
logger.stagePush("Output");
- // Create vector field; use same shape/chart as slip field.
+ // Create vector field; use same shape/chart as relative
+ // displacement field.
assert(0 != _faultMesh);
_fields->add("buffer (vector)", "buffer");
topology::Field<topology::SubMesh>& buffer = _fields->get("buffer (vector)");
- const topology::Field<topology::SubMesh>& slip = _fields->get("slip");
- buffer.cloneSection(slip);
+ const topology::Field<topology::SubMesh>& dispRel =
+ _fields->get("relative disp");
+ buffer.cloneSection(dispRel);
buffer.zero();
assert(buffer.vectorFieldType() == topology::FieldBase::VECTOR);
@@ -1997,8 +1742,15 @@
assert(0 != _faultMesh);
_fields->add("buffer (scalar)", "buffer");
topology::Field<topology::SubMesh>& buffer = _fields->get("buffer (scalar)");
- const topology::Field<topology::SubMesh>& area = _fields->get("area");
- buffer.cloneSection(area);
+ const ALE::Obj<SieveSubMesh>& faultSieveMesh = _faultMesh->sieveMesh();
+ assert(!faultSieveMesh.isNull());
+ const ALE::Obj<SieveSubMesh::label_sequence>& vertices =
+ faultSieveMesh->depthStratum(0);
+ assert(!vertices.isNull());
+ buffer.newSection(vertices, 1);
+ buffer.allocate();
+ buffer.vectorFieldType(topology::FieldBase::SCALAR);
+ buffer.scale(1.0);
buffer.zero();
assert(buffer.vectorFieldType() == topology::FieldBase::SCALAR);
Modified: short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/faults/FaultCohesiveLagrange.hh
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/faults/FaultCohesiveLagrange.hh 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/faults/FaultCohesiveLagrange.hh 2011-10-17 22:23:48 UTC (rev 19086)
@@ -234,6 +234,20 @@
void _calcTractionsChange(topology::Field<topology::SubMesh>* tractions,
const topology::Field<topology::Mesh>& solution);
+ /** Transform field from local (fault) coordinate system to
+ * global coordinate system.
+ *
+ * @param field Field to transform.
+ */
+ void _faultToGlobal(topology::Field<topology::SubMesh>* field);
+
+ /** Transform field from global coordinate system to local (fault)
+ * coordinate system.
+ *
+ * @param field Field to transform.
+ */
+ void _globalToFault(topology::Field<topology::SubMesh>* field);
+
/// Allocate buffer for vector field.
void _allocateBufferVectorField(void);
Modified: short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/feassemble/ElasticityExplicit.cc
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/feassemble/ElasticityExplicit.cc 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/feassemble/ElasticityExplicit.cc 2011-10-17 22:23:48 UTC (rev 19086)
@@ -691,7 +691,6 @@
const int numBasis = _quadrature->numBasis();
const int spaceDim = _quadrature->spaceDim();
const int cellDim = _quadrature->cellDim();
- const int tensorSize = _material->tensorSize();
if (cellDim != spaceDim)
throw std::logic_error("Don't know how to integrate elasticity " \
"contribution to Jacobian matrix for cells with " \
@@ -851,7 +850,6 @@
const int numBasis = _quadrature->numBasis();
const int spaceDim = _quadrature->spaceDim();
const int cellDim = _quadrature->cellDim();
- const int tensorSize = _material->tensorSize();
if (cellDim != spaceDim)
throw std::logic_error("Don't know how to integrate elasticity " \
"contribution to Jacobian matrix for cells with " \
Modified: short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/friction/FrictionModel.cc
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/friction/FrictionModel.cc 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/friction/FrictionModel.cc 2011-10-17 22:23:48 UTC (rev 19086)
@@ -97,8 +97,7 @@
void
pylith::friction::FrictionModel::initialize(
const topology::SubMesh& faultMesh,
- feassemble::Quadrature<topology::SubMesh>* quadrature,
- const topology::Field<topology::SubMesh>& area)
+ feassemble::Quadrature<topology::SubMesh>* quadrature)
{ // initialize
assert(0 != _dbProperties);
Modified: short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/friction/FrictionModel.hh
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/friction/FrictionModel.hh 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/friction/FrictionModel.hh 2011-10-17 22:23:48 UTC (rev 19086)
@@ -116,12 +116,10 @@
*
* @param mesh Finite-element mesh of subdomain.
* @param quadrature Quadrature for finite-element integration
- * @param area Area at vertices of subdomain.
*/
virtual
void initialize(const topology::SubMesh& mesh,
- feassemble::Quadrature<topology::SubMesh>* quadrature,
- const topology::Field<topology::SubMesh>& area);
+ feassemble::Quadrature<topology::SubMesh>* quadrature);
/** Check whether friction model has a field as a property or state
* variable.
Modified: short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/problems/SolverNonlinear.cc
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/problems/SolverNonlinear.cc 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/problems/SolverNonlinear.cc 2011-10-17 22:23:48 UTC (rev 19086)
@@ -361,7 +361,7 @@
ierr = PetscViewerASCIIPrintf(snes->ls_monitor," Line search: fnorm=%18.16e, gnorm=%18.16e, ynorm=%18.16e, minlambda=%18.16e, lambda=%18.16e, initial slope=%18.16e\n",(double)fnorm,(double)*gnorm,(double)*ynorm,(double)minlambda,(double)lambda,(double)initslope);CHKERRQ(ierr);
ierr = PetscViewerASCIISubtractTab(snes->ls_monitor,((PetscObject)snes)->tablevel);CHKERRQ(ierr);
}
- *flag = PETSC_FALSE;
+ *flag = PETSC_FALSE; // DIVERGED_LINE_SEARCH
break;
}
t1 = .5*((*gnorm)*(*gnorm) - fnorm*fnorm) - lambda*initslope;
Modified: short/3D/PyLith/branches/v1.6-stable/modulesrc/friction/FrictionModel.i
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/modulesrc/friction/FrictionModel.i 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/modulesrc/friction/FrictionModel.i 2011-10-17 22:23:48 UTC (rev 19086)
@@ -95,12 +95,10 @@
*
* @param mesh Finite-element mesh of subdomain.
* @param quadrature Quadrature for finite-element integration
- * @param area Area at vertices of subdomain.
*/
virtual
void initialize(const pylith::topology::SubMesh& mesh,
- pylith::feassemble::Quadrature<pylith::topology::SubMesh>* quadrature,
- const pylith::topology::Field<pylith::topology::SubMesh>& area);
+ pylith::feassemble::Quadrature<pylith::topology::SubMesh>* quadrature);
/** Check whether friction model has a field as a property or
* state variable.
Modified: short/3D/PyLith/branches/v1.6-stable/playpen/faultpc/checkfaultpc.py
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/playpen/faultpc/checkfaultpc.py 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/playpen/faultpc/checkfaultpc.py 2011-10-17 22:23:48 UTC (rev 19086)
@@ -3,7 +3,7 @@
import numpy
import numpy.linalg as linalg
-A = numpy.array([[4/3.0, -0.5, 1/6.0, 0, 0,0,0,0],
+K = numpy.array([[4/3.0, -0.5, 1/6.0, 0, 0,0,0,0],
[-0.5, 4/3.0, 0, -5/6.0, 0,0,0,0],
[1/6.0, 0, 4/3.0, 0.5, 0,0,0,0],
[0, -5/6.0, 0.5, 4/3.0, 0,0,0,0],
@@ -12,47 +12,79 @@
[0,0,0,0, 1/6.0, 0, 4/3.0, -0.5],
[0,0,0,0, 0, -5/6.0, -0.5, 4/3.0]],
dtype=numpy.float64)
-Ai = linalg.inv(A)
+Ki = linalg.inv(K)
-C = numpy.array([[0,-1, 0,0, 0,1, 0,0],
- [-1,0, 0,0, 1,0, 0,0],
- [0,0, 0,-1, 0,0, 0,1],
- [0,0, -1,0, 0,0, 1,0]],
+# Gauss quadrature
+L = numpy.array([[-2/3.0,0.0, -1/3.0,0.0, +2/3.0,0.0, +1/3.0,0.0],
+ [0.0,-2/3.0, 0.0,-1/3.0, 0.0,+2/3.0, 0.0,+1/3.0],
+ [-1/3.0,0.0, -2/3.0,0.0, +1/3.0,0.0, +2/3.0,0.0],
+ [0.0,-1/3.0, 0.0,-2/3.0, 0.0,+1/3.0, 0.0,+2/3.0]],
dtype=numpy.float64)
+
+# Collocated vertices and quadrature
+Lc = numpy.array([[-1.0,0.0, 0.0,0.0, +1.0,0.0, 0.0,0.0],
+ [0.0,-1.0, 0.0,0.0, 0.0,+1.0, 0.0,0.0],
+ [0.0,0.0, -1.0,0.0, 0.0,0.0, +1.0,0.0],
+ [0.0,0.0, 0.0,-1.0, 0.0,0.0, 0.0,+1.0]],
+ dtype=numpy.float64)
+
Z = numpy.zeros( (4,4), dtype=numpy.float64)
-J = numpy.vstack( (numpy.hstack( (A, C.transpose()) ),
- numpy.hstack( (C, Z) ) ) )
-Jinv = linalg.inv(J)
+A = numpy.vstack( (numpy.hstack( (K, L.transpose()) ),
+ numpy.hstack( (L, Z) ) ) )
+Ainv = linalg.inv(A)
-# Compute [C] [A]^(-1) [C]^T and its inverse.
-CAC = numpy.dot(numpy.dot(C, Ai), C.transpose())
-CACi = numpy.linalg.inv(CAC)
+Ac = numpy.vstack( (numpy.hstack( (K, Lc.transpose()) ),
+ numpy.hstack( (Lc, Z) ) ) )
+Acinv = linalg.inv(Ac)
-# Compute diagonal approximation of CAC and its inverse
-Aid = 1.0 / A.diagonal() * numpy.identity(A.shape[0])
-CACd = numpy.dot(numpy.dot(C, Aid), C.transpose())
-CACdi = 1.0 / CACd.diagonal() * numpy.identity(CACd.shape[0])
+# Compute [L] [K]^(-1) [L]^T and its inverse.
+LKiL = numpy.dot(numpy.dot(L, Ki), L.transpose())
+LKiLi = numpy.linalg.inv(LKiL)
+LKiLc = numpy.dot(numpy.dot(Lc, Ki), Lc.transpose())
+LKiLic = numpy.linalg.inv(LKiLc)
+
+# Compute diagonal approximation of LKiL and its inverse
+Kid = 1.0 / K.diagonal() * numpy.identity(K.shape[0])
+LKidL = numpy.dot(numpy.dot(L, Kid), L.transpose())
+LKidLd = LKidL.diagonal() * numpy.identity(LKidL.shape[0])
+
+LKidLc = numpy.dot(numpy.dot(Lc, Kid), Lc.transpose())
+LKidLdc = LKidLc.diagonal() * numpy.identity(LKidLc.shape[0])
+
# Compute preconditioner using full matrices (no approximations)
-P = J
+P = A
Pi = numpy.linalg.inv(P)
# Compute condition number
-evals, evecs = numpy.linalg.eig(numpy.dot(J, Pi))
+evals, evecs = numpy.linalg.eig(numpy.dot(Pi, A))
print numpy.abs(evals)
print numpy.max(numpy.abs(evals))/numpy.min(numpy.abs(evals))
-# Compute preconditioner using diagonal approximations (but full A)
-Pd = numpy.zeros(J.shape)
-Pd[0:8,0:8] = A
+# Compute preconditioner using diagonal approximations for K
+Pd = numpy.zeros(A.shape)
+Pd[0:8,0:8] = K
Pd[0:8,8:12] = 0.0
Pd[8:12,0:8] = 0.0
-Pd[8:12,8:12] = -CACd
+Pd[8:12,8:12] = -LKidL
+print LKidL
-Pdi = numpy.linalg.inv(Pd)
+# Compute preconditioner using diagonal approximations for K
+Pdc = numpy.zeros(Ac.shape)
+Pdc[0:8,0:8] = K
+Pdc[0:8,8:12] = 0.0
+Pdc[8:12,0:8] = 0.0
+Pdc[8:12,8:12] = -LKidLc
+print LKidLc
# Compute condition number for diagonal approximations
-evals, evecs = numpy.linalg.eig(numpy.dot(Pdi, J))
+Pdi = numpy.linalg.inv(Pd)
+evals, evecs = numpy.linalg.eig(numpy.dot(Pdi, A))
print numpy.abs(evals)
print numpy.max(numpy.abs(evals))/numpy.min(numpy.abs(evals))
+
+Pdci = numpy.linalg.inv(Pdc)
+evals, evecs = numpy.linalg.eig(numpy.dot(Pdci, Ac))
+print numpy.abs(evals)
+print numpy.max(numpy.abs(evals))/numpy.min(numpy.abs(evals))
Modified: short/3D/PyLith/branches/v1.6-stable/playpen/faultpc/notes.tex
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/playpen/faultpc/notes.tex 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/playpen/faultpc/notes.tex 2011-10-17 22:23:48 UTC (rev 19086)
@@ -35,57 +35,58 @@
We have a Jacobian of the form
\begin{equation}
- J = \left( \begin{array}{cc}
- A & C^T \\
- C & 0
+ A = \left( \begin{array}{cc}
+ K & L^T \\
+ L & 0
\end{array} \right).
\end{equation}
-We use the Schur complement of block A to examine the form of $J^{-1}$,
+We use the Schur complement of block K to examine the form of $A^{-1}$,
\begin{equation}
- J^{-1} = \left( \begin{array}{cc}
- A^{-1}+A^{-1} C^{T}(-C A^{-1} C^{T})^{-1} C A^{-1} &
- -A^{-1}C^{T}(-C A^{-1} C^{T})^{-1} \\
- -(-C A^{-1} C^{T})^{-1} C A^{-1} & -(C A^{-1} C^T)^{-1}
+ A^{-1} = \left( \begin{array}{cc}
+ K^{-1}+K^{-1} L^{T}(-L K^{-1} L^{T})^{-1} L K^{-1} &
+ -K^{-1}L^{T}(-L K^{-1} L^{T})^{-1} \\
+ -(-L K^{-1} L^{T})^{-1} L K^{-1} & -(L K^{-1} L^T)^{-1}
\end{array} \right),
\end{equation}
-A suitable block diagonal $P^{-1}$ is
+A suitable block diagonal approximation of $A^{-1}$ is
\begin{equation}
P^{-1} = \left( \begin{array}{cc}
- A^{-1} & 0 \\
- 0 & -(C A^{-1} C^T)^{-1}
+ K^{-1} & 0 \\
+ 0 & -(L K^{-1} L^T)^{-1}
\end{array} \right),
\end{equation}
which leads to
\begin{equation}
P = \left( \begin{array}{cc}
- A & 0 \\
- 0 & C A^{-1} C^T
+ K & 0 \\
+ 0 & L K^{-1} L^T
\end{array} \right).
\end{equation}
-We provide PETSc with $P$ so that it can create $P^{-1}$. Using the
-field split preconditioner, we form
+We provide PETSc with preconditioning matrix $P$ so that it can create
+$P^{-1}$. Using the field split preconditioner, we form
\begin{equation}
P = \left( \begin{array}{cc}
- A_\mathit{ml} & 0 \\
+ K_\mathit{ml} & 0 \\
0 & P_f
\end{array} \right),
\end{equation}
-where we use the ML package to form $A_\mathit{ml}$ and we create a
-custom matrix for the portion of the preconditioner associated with
+where we use the ML package to form $K_\mathit{ml}$ and we create a
+custom matrix for the portion of the preconditioning matrix associated with
the Lagrange constraints, $P_f$. Let $n$ be the number of conventional
degrees of freedom and $l$ be the number of Lagrange constraints. This
-means $A$ and $P$ are $(n+l) \times (n+l)$, $A$ and $A_\mathit{ml}$
-are $n \times n$, $C$ is $l \times n$, and $P_f$ is $l \times l$.
-We let $P_f$ be the the diagonal approximation of $C A^{-1} C^T$,
+means $K$ and $P$ are $(n+l) \times (n+l)$, $K$ and $K_\mathit{ml}$
+are $n \times n$, $L$ is $l \times n$, and $P_f$ is $l \times l$.
+
+We let $P_f$ be the the diagonal approximation of $L K^{-1} L^T$,
\begin{equation}
- P_f = \text{diagonal}(C A_\mathit{diag}^{-1} C^T).
+ P_f = \text{diagonal}(L K_\mathit{diag}^{-1} L^T).
\end{equation}
Using the {\tt multiplicative} field split type, PETSc will form
$P^{-1}$ as
\begin{equation}
P^{-1} = \left( \begin{array}{cc}
- A_\mathit{ml}^{-1} & -A_\mathit{ml}^{-1} C^T ?? \\
+ K_\mathit{ml}^{-1} & -K_\mathit{ml}^{-1} L^T ?? \\
0 & P_f^{-1}
\end{array} \right).
\end{equation}
Modified: short/3D/PyLith/branches/v1.6-stable/pylith/faults/FaultCohesive.py
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/pylith/faults/FaultCohesive.py 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/pylith/faults/FaultCohesive.py 2011-10-17 22:23:48 UTC (rev 19086)
@@ -92,6 +92,10 @@
# TEMPORARY
ModuleFaultCohesive.faultMeshFilename(self,
self.inventory.meshFilename)
+
+ # Hardwire collocated quadrature
+ self.faultQuadrature.cell.collocateQuad = True
+ self.faultQuadrature.cell.order = self.faultQuadrature.cell.degree
return
Modified: short/3D/PyLith/branches/v1.6-stable/pylith/faults/FaultCohesiveKin.py
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/pylith/faults/FaultCohesiveKin.py 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/pylith/faults/FaultCohesiveKin.py 2011-10-17 22:23:48 UTC (rev 19086)
@@ -73,7 +73,6 @@
output = pyre.inventory.facility("output", family="output_manager",
factory=OutputFaultKin)
output.meta['tip'] = "Output manager associated with fault data."
-
# PUBLIC METHODS /////////////////////////////////////////////////////
Modified: short/3D/PyLith/branches/v1.6-stable/tests/2d/faultstrip/dynamic_timeweakening.cfg
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/tests/2d/faultstrip/dynamic_timeweakening.cfg 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/tests/2d/faultstrip/dynamic_timeweakening.cfg 2011-10-17 22:23:48 UTC (rev 19086)
@@ -8,6 +8,7 @@
# Use slip-weakening friction
friction = pylith.friction.TimeWeakening
+friction.label = Time weakening
friction.db_properties = spatialdata.spatialdb.UniformDB
friction.db_properties.label = Time weakening
Modified: short/3D/PyLith/branches/v1.6-stable/tests/2d/faultstrip/pylithapp.cfg
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/tests/2d/faultstrip/pylithapp.cfg 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/tests/2d/faultstrip/pylithapp.cfg 2011-10-17 22:23:48 UTC (rev 19086)
@@ -46,10 +46,6 @@
normalizer = spatialdata.units.NondimElasticDynamic
normalizer.shear_wave_speed = 1.0*km/s
-bc = [y_pos,y_neg]
-interfaces = [fault]
-materials = [elastic]
-
[pylithapp.timedependent.formulation.time_step]
total_time = 10.0*s
dt = 0.05*s
@@ -57,6 +53,9 @@
# ----------------------------------------------------------------------
# materials
# ----------------------------------------------------------------------
+[pylithapp.timedependent]
+materials = [elastic]
+
[pylithapp.timedependent.materials]
elastic = pylith.materials.ElasticPlaneStrain
@@ -75,6 +74,9 @@
# ----------------------------------------------------------------------
# boundary conditions
# ----------------------------------------------------------------------
+[pylithapp.timedependent]
+bc = [y_pos,y_neg]
+
[pylithapp.timedependent.bc.y_pos]
label = face_ypos
bc_dof = [0, 1]
@@ -86,6 +88,9 @@
# ----------------------------------------------------------------------
# faults
# ----------------------------------------------------------------------
+[pylithapp.timedependent]
+interfaces = [fault]
+
[pylithapp.timedependent.interfaces]
fault = pylith.faults.FaultCohesiveDyn
Modified: short/3D/PyLith/branches/v1.6-stable/tests/2d/frictionslide/plot_friction.py
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/tests/2d/frictionslide/plot_friction.py 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/tests/2d/frictionslide/plot_friction.py 2011-10-17 22:23:48 UTC (rev 19086)
@@ -1,6 +1,6 @@
#!/usr/bin/env python
-sim = "ratestate_stable"
+sim = "ratestate_weak"
# ======================================================================
import tables
@@ -10,7 +10,7 @@
# ----------------------------------------------------------------------
dt = 0.01
-t = numpy.arange(0.0, 12.001, dt)
+t = numpy.arange(0.0, 14.001, dt)
mu0 = 0.6
if sim == "ratestate_stable":
a = 0.016
@@ -31,25 +31,33 @@
return
-theta = L/V0*numpy.ones(t.shape)
mask1 = t < 2.0
V1 = 1.0e-6
+theta = L/V1*numpy.ones(t.shape)
integrateStateVar(theta, V1, 0.0)
mask2 = numpy.bitwise_and(t >= 2.0, t < 4.0)
-V2 = 2.0e-5
+V2 = 1.0e-5
integrateStateVar(theta, V2, 2.0)
-mask3 = numpy.bitwise_and(t >= 4.0, t < 8.0)
-V3 = 5.0e-6
+mask3 = numpy.bitwise_and(t >= 4.0, t < 6.0)
+V3 = 4.0e-6
integrateStateVar(theta, V3, 4.0)
-mask4 = numpy.bitwise_and(t >= 8.0, t < 12.0)
-V4 = 1.0e-7
-integrateStateVar(theta, V4, 8.0)
+mask4 = numpy.bitwise_and(t >= 6.0, t < 8.0)
+V4 = 2.0e-5
+integrateStateVar(theta, V4, 6.0)
-slipRateE = mask1*V1 + mask2*V2 + mask3*V3 + mask4*V4
+mask5 = numpy.bitwise_and(t >= 8.0, t < 12.0)
+V5 = 5.0e-6
+integrateStateVar(theta, V5, 8.0)
+
+mask6 = t >= 12.0
+V6 = 1.0e-6
+integrateStateVar(theta, V6, 12.0)
+
+slipRateE = mask1*V1 + mask2*V2 + mask3*V3 + mask4*V4 + mask5*V5 + mask6*V6
stateVarE = theta
muE = mu0 + a*numpy.log(slipRateE/V0) + b*numpy.log(V0*stateVarE/L)
@@ -69,7 +77,7 @@
p = 2
ax = pylab.subplot(1, 4, 1)
-ax.plot(time, slip[:,p,0])
+ax.plot(time, slip[:,p,0], 'r--')
ax = pylab.subplot(1, 4, 2)
ax.plot(t, numpy.log10(numpy.abs(slipRateE)), 'b-',
Modified: short/3D/PyLith/branches/v1.6-stable/tests/2d/frictionslide/pylithapp.cfg
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/tests/2d/frictionslide/pylithapp.cfg 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/tests/2d/frictionslide/pylithapp.cfg 2011-10-17 22:23:48 UTC (rev 19086)
@@ -40,14 +40,14 @@
normalizer = spatialdata.units.NondimElasticQuasistatic
normalizer.length_scale = 1.0*m
-normalizer.relaxation_time = 1.0*s
+normalizer.relaxation_time = 0.1*s
[pylithapp.timedependent.implicit]
solver = pylith.problems.SolverNonlinear
[pylithapp.timedependent.implicit.time_step]
-total_time = 12.0*s
-dt = 0.1*s
+total_time = 14.0*s
+dt = 0.05*s
# ----------------------------------------------------------------------
# materials
@@ -111,11 +111,12 @@
snes_max_it = 500
snes_monitor = true
+snes_ls_monitor = true
#snes_view = true
snes_converged_reason = true
#log_summary = true
-info =
+#info =
# ----------------------------------------------------------------------
# output
Modified: short/3D/PyLith/branches/v1.6-stable/tests/2d/frictionslide/tension.cfg
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/tests/2d/frictionslide/tension.cfg 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/tests/2d/frictionslide/tension.cfg 2011-10-17 22:23:48 UTC (rev 19086)
@@ -10,7 +10,7 @@
normalizer.length_scale = 1.0*mm
[pylithapp.timedependent.implicit.time_step]
-total_time = 4.0*s
+total_time = 5.0*s
dt = 1.0*s
# ----------------------------------------------------------------------
Modified: short/3D/PyLith/branches/v1.6-stable/tests/2d/frictionslide/tension_axial.timedb
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/tests/2d/frictionslide/tension_axial.timedb 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/tests/2d/frictionslide/tension_axial.timedb 2011-10-17 22:23:48 UTC (rev 19086)
@@ -1,6 +1,6 @@
#TIME HISTORY ascii
TimeHistory {
- num-points = 5
+ num-points = 6
time-units = second
}
0.0 -5.0
@@ -8,3 +8,4 @@
2.0 +7.0
3.0 +9.0
4.0 -5.0
+ 5.0 -5.0
Modified: short/3D/PyLith/branches/v1.6-stable/tests/2d/frictionslide/tension_shear.timedb
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/tests/2d/frictionslide/tension_shear.timedb 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/tests/2d/frictionslide/tension_shear.timedb 2011-10-17 22:23:48 UTC (rev 19086)
@@ -1,6 +1,6 @@
#TIME HISTORY ascii
TimeHistory {
- num-points = 5
+ num-points = 6
time-units = second
}
0.0 +8.0
@@ -8,3 +8,4 @@
2.0 +4.0
3.0 +4.0
4.0 +4.0
+ 5.0 +5.0
Modified: short/3D/PyLith/branches/v1.6-stable/tests/2d/frictionslide/velocitysteps.timedb
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/tests/2d/frictionslide/velocitysteps.timedb 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/tests/2d/frictionslide/velocitysteps.timedb 2011-10-17 22:23:48 UTC (rev 19086)
@@ -5,8 +5,8 @@
}
0.0 0.0
2.0 2.0e-6 // slip rate = 1.0e-6
- 4.0 4.2e-5 // slip rate = 2.0e-5
- 8.0 6.2e-05 // slip rate = 5.0e-6
-12.0 6.28e-05 // slip rate = 2.0e-7
-16.0 6.244e-05 // slip rate = 1.0e-8
-99.9 6.244e-05 // slip rate = 0
+ 4.0 2.2e-5 // slip rate = 1.0e-5
+ 6.0 3.0e-05 // slip rate = 4.0e-6
+ 8.0 7.0e-05 // slip rate = 2.0e-5
+12.0 9.0e-05 // slip rate = 5.0e-6
+22.0 1.0e-04 // slip rate = 1.0e-6
Modified: short/3D/PyLith/branches/v1.6-stable/tests/2d/slipdir/pylithapp.cfg
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/tests/2d/slipdir/pylithapp.cfg 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/tests/2d/slipdir/pylithapp.cfg 2011-10-17 22:23:48 UTC (rev 19086)
@@ -29,11 +29,6 @@
[pylithapp.timedependent]
dimension = 2
-bc = [boundary]
-interfaces = [fault]
-
-materials = [elastic]
-
[pylithapp.timedependent.formulation.time_step]
total_time = 0.0*s
dt = 1.0*s
@@ -41,14 +36,17 @@
# ----------------------------------------------------------------------
# materials
# ----------------------------------------------------------------------
+[pylithapp.timedependent]
+materials = [elastic]
+
[pylithapp.timedependent.materials]
elastic = pylith.materials.ElasticPlaneStrain
[pylithapp.timedependent.materials.elastic]
-
label = Elastic material
id = 1
+db_properties.label = Elastic properties
db_properties.iohandler.filename = matprops.spatialdb
quadrature.cell = pylith.feassemble.FIATLagrange
@@ -58,6 +56,9 @@
# ----------------------------------------------------------------------
# boundary conditions
# ----------------------------------------------------------------------
+[pylithapp.timedependent]
+bc = [boundary]
+
[pylithapp.timedependent.bc.boundary]
bc_dof = [0,1]
@@ -66,6 +67,9 @@
# ----------------------------------------------------------------------
# faults
# ----------------------------------------------------------------------
+[pylithapp.timedependent]
+interfaces = [fault]
+
[pylithapp.timedependent.interfaces.fault]
id = 100
@@ -79,7 +83,10 @@
[pylithapp.timedependent.interfaces.fault.eq_srcs.rupture.slip_function]
+slip.label = Final slip
slip.iohandler.filename = slip.spatialdb
+
+slip_time.label = Slip time
slip_time.iohandler.filename = sliptime.spatialdb
# ----------------------------------------------------------------------
Modified: short/3D/PyLith/branches/v1.6-stable/tests/3d/Makefile.am
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/tests/3d/Makefile.am 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/tests/3d/Makefile.am 2011-10-17 22:23:48 UTC (rev 19086)
@@ -17,8 +17,10 @@
#
SUBDIRS = \
+ cyclicfriction \
matprops \
plasticity \
slipdir
+
# End of file
Copied: short/3D/PyLith/branches/v1.6-stable/tests/3d/cyclicfriction (from rev 19085, short/3D/PyLith/branches/v1.6-revisedfault/tests/3d/cyclicfriction)
Modified: short/3D/PyLith/branches/v1.6-stable/tests/3d/slipdir/pylithapp.cfg
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/tests/3d/slipdir/pylithapp.cfg 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/tests/3d/slipdir/pylithapp.cfg 2011-10-17 22:23:48 UTC (rev 19086)
@@ -20,19 +20,12 @@
[pylithapp.mesh_generator]
reader = pylith.meshio.MeshIOCubit
-[pylithapp.mesh_generator.reader]
-
# ----------------------------------------------------------------------
# problem
# ----------------------------------------------------------------------
[pylithapp.timedependent]
dimension = 3
-bc = [boundary]
-interfaces = [fault]
-
-materials = [elastic]
-
[pylithapp.timedependent.formulation.time_step]
total_time = 0.0*s
dt = 1.0*year
@@ -40,6 +33,9 @@
# ----------------------------------------------------------------------
# materials
# ----------------------------------------------------------------------
+[pylithapp.timedependent]
+materials = [elastic]
+
[pylithapp.timedependent.materials]
elastic = pylith.materials.ElasticIsotropic3D
@@ -48,6 +44,7 @@
label = Elastic material
id = 1
+db_properties.label = Elastic properties
db_properties.iohandler.filename = matprops.spatialdb
quadrature.cell = pylith.feassemble.FIATSimplex
@@ -56,14 +53,20 @@
# ----------------------------------------------------------------------
# boundary conditions
# ----------------------------------------------------------------------
+[pylithapp.timedependent]
+bc = [boundary]
+
[pylithapp.timedependent.bc.boundary]
-bc_dof = [0,2]
+bc_dof = [0,1,2]
label = boundary_nofault
# ----------------------------------------------------------------------
# faults
# ----------------------------------------------------------------------
+[pylithapp.timedependent]
+interfaces = [fault]
+
[pylithapp.timedependent.interfaces.fault]
id = 100
@@ -71,12 +74,16 @@
quadrature.cell = pylith.feassemble.FIATSimplex
quadrature.cell.shape = triangle
+quadrature.cell.quad_order = 2
eq_srcs.rupture.slip_function = pylith.faults.StepSlipFn
[pylithapp.timedependent.interfaces.fault.eq_srcs.rupture.slip_function]
+slip.label = Final slip
slip.iohandler.filename = slip.spatialdb
+
+slip_time.label = Slip time
slip_time.iohandler.filename = sliptime.spatialdb
# ----------------------------------------------------------------------
@@ -84,20 +91,39 @@
# ----------------------------------------------------------------------
[pylithapp.petsc]
ksp_type = gmres
-pc_type = asm
-sub_pc_factor_shift_type = nonzero
-
ksp_rtol = 1.0e-8
ksp_atol = 1.0e-10
-ksp_max_it = 50
-ksp_gmres_restart = 25
+ksp_max_it = 100
+ksp_gmres_restart = 100
ksp_monitor = true
#ksp_view = true
#log_summary = true
+[pylithapp.timedependent.formulation]
+split_fields = True
+matrix_type = aij
+[pylithapp.petsc]
+ksp_gmres_restart = 500
+fs_pc_type = fieldsplit
+fs_pc_fieldsplit_real_diagonal =
+fs_pc_fieldsplit_type = multiplicative
+fs_fieldsplit_0_pc_type = ml
+fs_fieldsplit_1_pc_type = ml
+fs_fieldsplit_2_pc_type = ml
+fs_fieldsplit_3_pc_type = ml
+fs_fieldsplit_0_ksp_type = preonly
+fs_fieldsplit_1_ksp_type = preonly
+fs_fieldsplit_2_ksp_type = preonly
+fs_fieldsplit_3_ksp_type = preonly
+
+[pylithapp.timedependent.formulation]
+use_custom_constraint_pc = True
+
+
+
# ----------------------------------------------------------------------
# output
# ----------------------------------------------------------------------
Modified: short/3D/PyLith/branches/v1.6-stable/tests_auto/2d/quad4/friction_shear_stick.cfg
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/tests_auto/2d/quad4/friction_shear_stick.cfg 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/tests_auto/2d/quad4/friction_shear_stick.cfg 2011-10-17 22:23:48 UTC (rev 19086)
@@ -66,7 +66,6 @@
db_properties.label = Elastic properties
db_properties.iohandler.filename = matprops.spatialdb
-# Set cell type to quadrilateral (2-d Lagrange).
quadrature.cell = pylith.feassemble.FIATLagrange
quadrature.cell.dimension = 2
@@ -120,34 +119,19 @@
# ----------------------------------------------------------------------
# faults
# ----------------------------------------------------------------------
-# Provide information on the fault (interface).
[friction_shear_stick.timedependent.interfaces]
fault = pylith.faults.FaultCohesiveDyn
# Define fault properties.
[friction_shear_stick.timedependent.interfaces.fault]
-
-# The nodes associated with this fault have the name 'fault' in the mesh file.
label = 10
-# NOTE: It is possible to assign an ID number to a fault (e.g.,
-# 'id = 10'). Care must be taken when doing this, however, because the
-# assigned ID will become the material ID for the cohesive element.
-# This ID must not conflict with any of the material ID numbers for
-# volume elements. The default ID for a fault is 100. If you have a
-# fault in your mesh you must:
-# 1. If you create your own fault ID, make sure it does not conflict
-# with any of you material ID's.
-# 2. If you use the default fault ID, make sure that none of your
-# material ID's are equal to 100.
-
-# The quadrature for a 2D fault is 1D with a linear shape.
quadrature.cell = pylith.feassemble.FIATLagrange
quadrature.cell.dimension = 1
db_initial_tractions = spatialdata.spatialdb.UniformDB
-db_initial_tractions.label = "Initial fault tractions"
+db_initial_tractions.label = Initial fault tractions
db_initial_tractions.values = [traction-shear,traction-normal]
db_initial_tractions.data = [0.0*Pa, -10.0*MPa]
@@ -163,7 +147,6 @@
[friction_shear_stick.petsc]
pc_type = asm
-# Change the preconditioner settings.
sub_pc_factor_shift_type = nonzero
ksp_rtol = 1.0e-8
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveDyn.cc
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveDyn.cc 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveDyn.cc 2011-10-17 22:23:48 UTC (rev 19086)
@@ -155,46 +155,28 @@
} // for
} // for
- // Check area
- const ALE::Obj<RealSection>& areaSection =
- fault._fields->get("area").section();
- CPPUNIT_ASSERT(!areaSection.isNull());
- iVertex = 0;
- for (SieveSubMesh::label_sequence::iterator v_iter=verticesBegin;
- v_iter != verticesEnd;
- ++v_iter, ++iVertex) {
- const int fiberDim = areaSection->getFiberDimension(*v_iter);
- CPPUNIT_ASSERT_EQUAL(1, fiberDim);
- const double* areaVertex = areaSection->restrictPoint(*v_iter);
- CPPUNIT_ASSERT(0 != areaVertex);
-
- const double tolerance = 1.0e-06;
- CPPUNIT_ASSERT_DOUBLES_EQUAL(_data->area[iVertex], areaVertex[0],
- tolerance);
- } // for
-
- // Initial forces/tractions
+ // Initial tractions
if (0 != fault._dbInitialTract) {
- //fault._fields->get("initial forces").view("INITIAL FORCES"); // DEBUGGING
- const ALE::Obj<RealSection>& forcesInitialSection =
- fault._fields->get("initial forces").section();
- CPPUNIT_ASSERT(!forcesInitialSection.isNull());
+ //fault._fields->get("initial traction").view("INITIAL TRACTIONS"); // DEBUGGING
+ const ALE::Obj<RealSection>& initialTractionsSection =
+ fault._fields->get("initial traction").section();
+ CPPUNIT_ASSERT(!initialTractionsSection.isNull());
const int spaceDim = _data->spaceDim;
iVertex = 0;
for (SieveSubMesh::label_sequence::iterator v_iter = verticesBegin;
v_iter != verticesEnd;
++v_iter, ++iVertex) {
- const int fiberDim = forcesInitialSection->getFiberDimension(*v_iter);
+ const int fiberDim = initialTractionsSection->getFiberDimension(*v_iter);
CPPUNIT_ASSERT_EQUAL(spaceDim, fiberDim);
- const double* forcesInitialVertex =
- forcesInitialSection->restrictPoint(*v_iter);
- CPPUNIT_ASSERT(0 != forcesInitialVertex);
+ const double* initialTractionsVertex =
+ initialTractionsSection->restrictPoint(*v_iter);
+ CPPUNIT_ASSERT(initialTractionsVertex);
const double tolerance = 1.0e-06;
for (int i = 0; i < spaceDim; ++i) {
const int index = iVertex * spaceDim + i;
- CPPUNIT_ASSERT_DOUBLES_EQUAL(_data->forcesInitial[index],
- forcesInitialVertex[i], tolerance);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(_data->initialTractions[index],
+ initialTractionsVertex[i], tolerance);
} // for
} // for
} // if
@@ -270,8 +252,6 @@
// Get fault vertex info
const ALE::Obj<SieveSubMesh>& faultSieveMesh = fault._faultMesh->sieveMesh();
CPPUNIT_ASSERT(!faultSieveMesh.isNull());
- SieveSubMesh::renumbering_type& renumbering =
- faultSieveMesh->getRenumbering();
const ALE::Obj<SieveSubMesh::label_sequence>& vertices =
faultSieveMesh->depthStratum(0);
CPPUNIT_ASSERT(!vertices.isNull());
@@ -280,7 +260,7 @@
// Get section containing slip
const ALE::Obj<RealSection>& slipSection =
- fault._fields->get("slip").section();
+ fault.vertexField("slip").section();
CPPUNIT_ASSERT(!slipSection.isNull());
const double valE = 0.0; // slip should be zero
@@ -327,36 +307,38 @@
fault.timeStep(dt);
fault.constrainSolnSpace(&fields, t, jacobian);
- //residual.view("RESIDUAL"); // DEBUGGING
+ { // Check slip values
+ // Slip values should be adjusted based on the change in the
+ // Lagrange multipliers as reflected in the slipSlipE data member.
- { // Check solution values
- // Lagrange multipliers should be adjusted according to friction
- // as reflected in the fieldIncrSlipE data member.
- const ALE::Obj<SieveMesh>& sieveMesh = mesh.sieveMesh();
- CPPUNIT_ASSERT(!sieveMesh.isNull());
- const ALE::Obj<SieveMesh::label_sequence>& vertices =
- sieveMesh->depthStratum(0);
+ // Get fault vertex info
+ const ALE::Obj<SieveSubMesh>& faultSieveMesh = fault._faultMesh->sieveMesh();
+ CPPUNIT_ASSERT(!faultSieveMesh.isNull());
+ const ALE::Obj<SieveSubMesh::label_sequence>& vertices =
+ faultSieveMesh->depthStratum(0);
CPPUNIT_ASSERT(!vertices.isNull());
- const SieveMesh::label_sequence::iterator verticesBegin = vertices->begin();
- const SieveMesh::label_sequence::iterator verticesEnd = vertices->end();
+ const SieveSubMesh::label_sequence::iterator verticesBegin = vertices->begin();
+ const SieveSubMesh::label_sequence::iterator verticesEnd = vertices->end();
- // Get section containing solution (disp + Lagrange multipliers)
- const ALE::Obj<RealSection>& dispIncrSection =
- fields.get("dispIncr(t->t+dt)").section();
- CPPUNIT_ASSERT(!dispIncrSection.isNull());
+ // Get section containing slip
+ const ALE::Obj<RealSection>& slipSection =
+ fault.vertexField("slip").section();
+ CPPUNIT_ASSERT(!slipSection.isNull());
+ //slipSection->view("SLIP"); // DEBUGGING
+
// Get expected values
- const double* valsE = _data->fieldIncrSlipE; // Expected values for dispIncr
+ const double* valsE = _data->slipSlipE;
int iVertex = 0; // variable to use as index into valsE array
const int fiberDimE = spaceDim; // number of values per point
const double tolerance = 1.0e-06;
- for (SieveMesh::label_sequence::iterator v_iter = verticesBegin;
- v_iter != verticesEnd;
- ++v_iter, ++iVertex) { // loop over all vertices in mesh
+ for (SieveMesh::label_sequence::iterator v_iter = verticesBegin; v_iter
+ != verticesEnd;
+ ++v_iter, ++iVertex) { // loop over fault vertices
// Check fiber dimension (number of values at point)
- const int fiberDim = dispIncrSection->getFiberDimension(*v_iter);
+ const int fiberDim = slipSection->getFiberDimension(*v_iter);
CPPUNIT_ASSERT_EQUAL(fiberDimE, fiberDim);
- const double* vals = dispIncrSection->restrictPoint(*v_iter);
+ const double* vals = slipSection->restrictPoint(*v_iter);
CPPUNIT_ASSERT(0 != vals);
// Check values at point
@@ -364,51 +346,47 @@
const int index = iVertex * spaceDim + i;
const double valE = valsE[index];
#if 0 // DEBUGGING
- std::cout << "SOLUTION valE: " << valE
+ std::cout << "SLIP valE: " << valE
<< ", val: " << vals[i]
<< ", error: " << fabs(1.0-vals[i]/valE)
<< std::endl;
#endif // DEBUGGING
- if (fabs(valE) > tolerance)
+ if (fabs(valE) > tolerance)
CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vals[i]/valE, tolerance);
else
CPPUNIT_ASSERT_DOUBLES_EQUAL(valE, vals[i], tolerance);
} // for
} // for
- } // Check solution values
+ } // Check slip values
- { // Check slip values
- // Slip values should be adjusted based on the change in the
- // Lagrange multipliers as reflected in the slipSlipE data member.
-
- // Get fault vertex info
- const ALE::Obj<SieveSubMesh>& faultSieveMesh = fault._faultMesh->sieveMesh();
- CPPUNIT_ASSERT(!faultSieveMesh.isNull());
- SieveSubMesh::renumbering_type& renumbering =
- faultSieveMesh->getRenumbering();
- const ALE::Obj<SieveSubMesh::label_sequence>& vertices =
- faultSieveMesh->depthStratum(0);
+ { // Check solution values
+ // Lagrange multipliers should be adjusted according to friction
+ // as reflected in the fieldIncrSlipE data member.
+ const ALE::Obj<SieveMesh>& sieveMesh = mesh.sieveMesh();
+ CPPUNIT_ASSERT(!sieveMesh.isNull());
+ const ALE::Obj<SieveMesh::label_sequence>& vertices =
+ sieveMesh->depthStratum(0);
CPPUNIT_ASSERT(!vertices.isNull());
- const SieveSubMesh::label_sequence::iterator verticesBegin = vertices->begin();
- const SieveSubMesh::label_sequence::iterator verticesEnd = vertices->end();
+ const SieveMesh::label_sequence::iterator verticesBegin = vertices->begin();
+ const SieveMesh::label_sequence::iterator verticesEnd = vertices->end();
- // Get section containing slip
- const ALE::Obj<RealSection>& slipSection =
- fault._fields->get("slip").section();
- CPPUNIT_ASSERT(!slipSection.isNull());
+ // Get section containing solution (disp + Lagrange multipliers)
+ const ALE::Obj<RealSection>& dispIncrSection =
+ fields.get("dispIncr(t->t+dt)").section();
+ CPPUNIT_ASSERT(!dispIncrSection.isNull());
// Get expected values
- const double* valsE = _data->slipSlipE;
+ const double* valsE = _data->fieldIncrSlipE; // Expected values for dispIncr
int iVertex = 0; // variable to use as index into valsE array
const int fiberDimE = spaceDim; // number of values per point
const double tolerance = 1.0e-06;
- for (SieveMesh::label_sequence::iterator v_iter = verticesBegin; v_iter
- != verticesEnd;
- ++v_iter, ++iVertex) { // loop over fault vertices
+ for (SieveMesh::label_sequence::iterator v_iter = verticesBegin;
+ v_iter != verticesEnd;
+ ++v_iter, ++iVertex) { // loop over all vertices in mesh
// Check fiber dimension (number of values at point)
- const int fiberDim = slipSection->getFiberDimension(*v_iter);
+ const int fiberDim = dispIncrSection->getFiberDimension(*v_iter);
CPPUNIT_ASSERT_EQUAL(fiberDimE, fiberDim);
- const double* vals = slipSection->restrictPoint(*v_iter);
+ const double* vals = dispIncrSection->restrictPoint(*v_iter);
CPPUNIT_ASSERT(0 != vals);
// Check values at point
@@ -416,18 +394,18 @@
const int index = iVertex * spaceDim + i;
const double valE = valsE[index];
#if 0 // DEBUGGING
- std::cout << "SLIP valE: " << valE
+ std::cout << "SOLUTION valE: " << valE
<< ", val: " << vals[i]
<< ", error: " << fabs(1.0-vals[i]/valE)
<< std::endl;
#endif // DEBUGGING
- if (fabs(valE) > tolerance)
+ if (fabs(valE) > tolerance)
CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vals[i]/valE, tolerance);
else
CPPUNIT_ASSERT_DOUBLES_EQUAL(valE, vals[i], tolerance);
} // for
} // for
- } // Check slip values
+ } // Check solution values
} // testConstrainSolnSpaceSlip
@@ -508,8 +486,6 @@
// Get fault vertex info
const ALE::Obj<SieveSubMesh>& faultSieveMesh = fault._faultMesh->sieveMesh();
CPPUNIT_ASSERT(!faultSieveMesh.isNull());
- SieveSubMesh::renumbering_type& renumbering =
- faultSieveMesh->getRenumbering();
const ALE::Obj<SieveSubMesh::label_sequence>& vertices =
faultSieveMesh->depthStratum(0);
CPPUNIT_ASSERT(!vertices.isNull());
@@ -518,7 +494,7 @@
// Get section containing slip
const ALE::Obj<RealSection>& slipSection =
- fault._fields->get("slip").section();
+ fault.vertexField("slip").section();
CPPUNIT_ASSERT(!slipSection.isNull());
// Get expected values
@@ -647,22 +623,27 @@
int fiberDim = tractionsSection->getFiberDimension(*v_iter);
CPPUNIT_ASSERT_EQUAL(spaceDim, fiberDim);
const double* tractionsVertex = tractionsSection->restrictPoint(*v_iter);
- CPPUNIT_ASSERT(0 != tractionsVertex);
+ CPPUNIT_ASSERT(tractionsVertex);
- fiberDim = dispSection->getFiberDimension(meshVertex);
- CPPUNIT_ASSERT_EQUAL(spaceDim, fiberDim);
- const double* dispVertex = dispSection->restrictPoint(meshVertex);
- CPPUNIT_ASSERT(0 != dispVertex);
+ const double* tractionsVertexGlobalE =
+ dispSection->restrictPoint(meshVertex);
+ CPPUNIT_ASSERT(tractionsVertexGlobalE);
+ const double* orientationVertex =
+ &_data->orientation[iVertex*spaceDim*spaceDim];
+ CPPUNIT_ASSERT(orientationVertex);
- const double scale = 1.0 / _data->area[iVertex];
for (int iDim=0; iDim < spaceDim; ++iDim) {
- const double tractionE = dispVertex[iDim] * scale;
+ double tractionE = 0.0;
+ for (int jDim=0; jDim < spaceDim; ++jDim) {
+ tractionE +=
+ orientationVertex[iDim*spaceDim+jDim]*tractionsVertexGlobalE[jDim];
+ } // for
if (tractionE != 0.0)
CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, tractionsVertex[iDim]/tractionE,
tolerance);
else
CPPUNIT_ASSERT_DOUBLES_EQUAL(tractionE, tractionsVertex[iDim],
- tolerance);
+ tolerance);
} // for
} // for
} // testCalcTractions
@@ -756,6 +737,8 @@
disp.newSection(topology::FieldBase::VERTICES_FIELD, spaceDim);
disp.allocate();
fields->copyLayout("disp(t)");
+
+ fault->verifyConfiguration(*mesh);
} // _initialize
// ----------------------------------------------------------------------
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKin.cc
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKin.cc 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKin.cc 2011-10-17 22:23:48 UTC (rev 19086)
@@ -143,6 +143,8 @@
void
pylith::faults::TestFaultCohesiveKin::testInitialize(void)
{ // testInitialize
+ CPPUNIT_ASSERT(_data);
+
topology::Mesh mesh;
FaultCohesiveKin fault;
topology::SolutionFields fields(mesh);
@@ -248,6 +250,11 @@
void
pylith::faults::TestFaultCohesiveKin::testIntegrateResidual(void)
{ // testIntegrateResidual
+ CPPUNIT_ASSERT(_data);
+ CPPUNIT_ASSERT(_data->fieldT);
+ CPPUNIT_ASSERT(_data->residual);
+ CPPUNIT_ASSERT(_data->residualIncr);
+
topology::Mesh mesh;
FaultCohesiveKin fault;
topology::SolutionFields fields(mesh);
@@ -344,6 +351,10 @@
void
pylith::faults::TestFaultCohesiveKin::testIntegrateJacobian(void)
{ // testIntegrateJacobian
+ CPPUNIT_ASSERT(_data);
+ CPPUNIT_ASSERT(_data->fieldT);
+ CPPUNIT_ASSERT(_data->jacobian);
+
topology::Mesh mesh;
FaultCohesiveKin fault;
topology::SolutionFields fields(mesh);
@@ -427,6 +438,9 @@
void
pylith::faults::TestFaultCohesiveKin::testIntegrateJacobianLumped(void)
{ // testIntegrateJacobianLumped
+ CPPUNIT_ASSERT(_data);
+ CPPUNIT_ASSERT(_data->jacobianLumped);
+
topology::Mesh mesh;
FaultCohesiveKin fault;
topology::SolutionFields fields(mesh);
@@ -443,51 +457,69 @@
CPPUNIT_ASSERT_EQUAL(false, fault.needNewJacobian());
jacobian.complete();
- // jacobian.view("JACOBIAN"); // DEBUGGING
+ //jacobian.view("JACOBIAN"); // DEBUGGING
const ALE::Obj<RealSection>& jacobianSection = jacobian.section();
CPPUNIT_ASSERT(!jacobianSection.isNull());
+ // Only check Lagrange multiplier values
+
int iVertex = 0;
const double tolerance = 1.0e-06;
const int spaceDim = _data->spaceDim;
- const ALE::Obj<SieveSubMesh>& faultSieveMesh = fault._faultMesh->sieveMesh();
- CPPUNIT_ASSERT(!faultSieveMesh.isNull());
+
+ const ALE::Obj<SieveSubMesh>& sieveMesh = mesh.sieveMesh();
+ CPPUNIT_ASSERT(!sieveMesh.isNull());
const ALE::Obj<SieveMesh::label_sequence>& vertices =
- faultSieveMesh->depthStratum(0);
+ sieveMesh->depthStratum(0);
CPPUNIT_ASSERT(!vertices.isNull());
- const SieveSubMesh::label_sequence::iterator verticesBegin =
- vertices->begin();
- const SieveSubMesh::label_sequence::iterator verticesEnd = vertices->end();
+ const SieveMesh::label_sequence::iterator verticesBegin = vertices->begin();
+ const SieveMesh::label_sequence::iterator verticesEnd = vertices->end();
+
+ const ALE::Obj<SieveSubMesh>& faultSieveMesh = fault._faultMesh->sieveMesh();
+ CPPUNIT_ASSERT(!faultSieveMesh.isNull());
SieveSubMesh::renumbering_type& renumbering =
faultSieveMesh->getRenumbering();
const SieveMesh::renumbering_type::const_iterator renumberingBegin =
renumbering.begin();
const SieveMesh::renumbering_type::const_iterator renumberingEnd =
renumbering.end();
+
for (SieveMesh::label_sequence::iterator v_iter=verticesBegin;
v_iter != verticesEnd;
++v_iter, ++iVertex) {
- SieveMesh::point_type meshVertex = -1;
bool found = false;
for (SieveMesh::renumbering_type::const_iterator r_iter = renumberingBegin;
r_iter != renumberingEnd;
++r_iter) {
- if (r_iter->second == *v_iter) {
- meshVertex = r_iter->first;
+ if (r_iter->first == *v_iter) {
found = true;
break;
} // if
} // for
+ if (!found) // only check Lagrange multiplier values
+ continue;
+
CPPUNIT_ASSERT(found);
- int fiberDim = jacobianSection->getFiberDimension(meshVertex);
+ int fiberDim = jacobianSection->getFiberDimension(*v_iter);
CPPUNIT_ASSERT_EQUAL(spaceDim, fiberDim);
- const double* jacobianVertex = jacobianSection->restrictPoint(meshVertex);
- CPPUNIT_ASSERT(0 != jacobianVertex);
- for (int iDim=0; iDim < spaceDim; ++iDim)
- CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, jacobianVertex[iDim],
- tolerance);
+ const double* vals = jacobianSection->restrictPoint(*v_iter);
+ CPPUNIT_ASSERT(0 != vals);
+
+ for (int iDim=0; iDim < spaceDim; ++iDim) {
+ const double valE = _data->jacobianLumped[iVertex*spaceDim+iDim];
+#if 0 // debugging
+ std::cout << "vertex: " << *v_iter << ", iDim: " << iDim
+ << ", valE: " << valE
+ << ", val: " << vals[iDim]
+ << std::endl;
+#endif
+ if (fabs(valE) > 1.0)
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vals[iDim]/valE, tolerance);
+ else
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(valE, vals[iDim], tolerance);
+ } // for
} // for
} // testIntegrateJacobianLumped
@@ -496,6 +528,12 @@
void
pylith::faults::TestFaultCohesiveKin::testAdjustSolnLumped(void)
{ // testAdjustSolnLumped
+ CPPUNIT_ASSERT(_data);
+ CPPUNIT_ASSERT(_data->fieldT);
+ CPPUNIT_ASSERT(_data->fieldIncr);
+ CPPUNIT_ASSERT(_data->fieldIncrAdjusted);
+ CPPUNIT_ASSERT(_data->jacobianLumped);
+
topology::Mesh mesh;
FaultCohesiveKin fault;
topology::SolutionFields fields(mesh);
@@ -570,7 +608,7 @@
CPPUNIT_ASSERT(!solutionSection.isNull());
int i = 0;
- const double tolerance = 1.0e-06;
+ const double tolerance = 2.0e-06;
const double* solutionE = _data->fieldIncrAdjusted;
for (SieveMesh::label_sequence::iterator v_iter=verticesBegin;
v_iter != verticesEnd;
@@ -579,124 +617,25 @@
CPPUNIT_ASSERT_EQUAL(spaceDim, fiberDim);
const double* solutionVertex = solutionSection->restrictPoint(*v_iter);
CPPUNIT_ASSERT(0 != solutionVertex);
- for (int iDim=0; iDim < spaceDim; ++iDim, ++i)
+ for (int iDim=0; iDim < spaceDim; ++iDim, ++i) {
if (0.0 != solutionE[i])
CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, solutionVertex[iDim]/solutionE[i],
tolerance);
else
CPPUNIT_ASSERT_DOUBLES_EQUAL(solutionE[i], solutionVertex[iDim],
tolerance);
+ } // for
} // for
} // testAdjustSolnLumped
// ----------------------------------------------------------------------
-// Test updateStateVars().
-void
-pylith::faults::TestFaultCohesiveKin::testUpdateStateVars(void)
-{ // testUpdateStateVars
- topology::Mesh mesh;
- FaultCohesiveKin fault;
- topology::SolutionFields fields(mesh);
- _initialize(&mesh, &fault, &fields);
-
- const int spaceDim = _data->spaceDim;
- const ALE::Obj<RealSection>& dispSection = fields.get("disp(t)").section();
- CPPUNIT_ASSERT(!dispSection.isNull());
- { // setup disp
- dispSection->zero();
-
- const ALE::Obj<SieveMesh>& sieveMesh = mesh.sieveMesh();
- CPPUNIT_ASSERT(!sieveMesh.isNull());
- const ALE::Obj<SieveMesh::label_sequence>& vertices = sieveMesh->depthStratum(0);
- CPPUNIT_ASSERT(!vertices.isNull());
- const SieveMesh::label_sequence::iterator verticesBegin = vertices->begin();
- const SieveMesh::label_sequence::iterator verticesEnd = vertices->end();
- int iVertex = 0;
- for (SieveMesh::label_sequence::iterator v_iter=verticesBegin;
- v_iter != verticesEnd;
- ++v_iter, ++iVertex)
- dispSection->updatePoint(*v_iter, &_data->fieldT[iVertex*spaceDim]);
- } // setup disp
- topology::Field<topology::Mesh>& residual = fields.get("residual");
-
- const double t = 2.134;
- const double dt = 0.01;
- fault.useSolnIncr(false);
- fault.timeStep(dt);
- fault.integrateResidual(residual, t, &fields);
- fault.updateStateVars(t, &fields);
-
- CPPUNIT_ASSERT(0 != fault._faultMesh);
- const ALE::Obj<SieveSubMesh>& faultSieveMesh = fault._faultMesh->sieveMesh();
- CPPUNIT_ASSERT(!faultSieveMesh.isNull());
- const ALE::Obj<SieveSubMesh::label_sequence>& vertices =
- faultSieveMesh->depthStratum(0);
- CPPUNIT_ASSERT(!vertices.isNull());
- const SieveSubMesh::label_sequence::iterator verticesBegin = vertices->begin();
- const SieveSubMesh::label_sequence::iterator verticesEnd = vertices->end();
- SieveSubMesh::renumbering_type& renumbering = faultSieveMesh->getRenumbering();
-
- // Compute expected slip using eqsrcs
- topology::Field<topology::SubMesh> slipE(*fault._faultMesh);
- slipE.newSection(topology::FieldBase::VERTICES_FIELD, spaceDim);
- slipE.allocate();
- const ALE::Obj<RealSection> slipESection = slipE.section();
- CPPUNIT_ASSERT(!slipESection.isNull());
-
- const ALE::Obj<RealSection> slipSection =
- fault._fields->get("slip").section();
- CPPUNIT_ASSERT(!slipSection.isNull());
-
- const FaultCohesiveKin::srcs_type::const_iterator srcsEnd = fault._eqSrcs.end();
- for (FaultCohesiveKin::srcs_type::iterator s_iter=fault._eqSrcs.begin();
- s_iter != srcsEnd;
- ++s_iter) {
- EqKinSrc* src = s_iter->second;
- assert(0 != src);
- if (t >= src->originTime())
- src->slip(&slipE, t);
- } // for
-
- int iVertex = 0;
- const double tolerance = 1.0e-06;
- for (SieveSubMesh::label_sequence::iterator v_iter=verticesBegin;
- v_iter != verticesEnd;
- ++v_iter, ++iVertex) {
- const SieveSubMesh::point_type meshVertex = _data->verticesLagrange[iVertex];
- bool found = false;
- for(SieveSubMesh::renumbering_type::const_iterator r_iter = renumbering.begin();
- r_iter != renumbering.end();
- ++r_iter) {
- if (r_iter->second == *v_iter) {
- found = true;
- break;
- } // if
- } // for
- CPPUNIT_ASSERT(found);
-
- // Check _slip
- int fiberDim = slipSection->getFiberDimension(*v_iter);
- CPPUNIT_ASSERT_EQUAL(spaceDim, fiberDim);
- const double* slipV = slipSection->restrictPoint(*v_iter);
- CPPUNIT_ASSERT(0 != slipV);
-
- const double* slipE = slipESection->restrictPoint(*v_iter);
- CPPUNIT_ASSERT(0 != slipE);
-
- for (int iDim=0; iDim < spaceDim; ++iDim) {
- if (slipE[iDim] > 1.0)
- CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, slipV[iDim]/slipE[iDim], tolerance);
- else
- CPPUNIT_ASSERT_DOUBLES_EQUAL(slipE[iDim], slipV[iDim], tolerance);
- } // for
- } // for
-} // testUpdateStateVars
-
-// ----------------------------------------------------------------------
// Test calcTractionsChange().
void
pylith::faults::TestFaultCohesiveKin::testCalcTractionsChange(void)
{ // testCalcTractionsChange
+ CPPUNIT_ASSERT(_data);
+ CPPUNIT_ASSERT(_data->fieldT);
+
topology::Mesh mesh;
FaultCohesiveKin fault;
topology::SolutionFields fields(mesh);
@@ -775,9 +714,20 @@
const double* dispVertex = dispSection->restrictPoint(meshVertex);
CPPUNIT_ASSERT(0 != dispVertex);
- const double scale = 1.0 / _data->area[iVertex];
+ const double* orientationVertex =
+ &_data->orientation[iVertex*spaceDim*spaceDim];
+
for (int iDim=0; iDim < spaceDim; ++iDim) {
- const double tractionE = dispVertex[iDim] * scale;
+ double tractionE = 0.0;
+ for (int jDim=0; jDim < spaceDim; ++jDim)
+ tractionE += orientationVertex[iDim*spaceDim+jDim] * dispVertex[jDim];
+#if 0 // DEBUGGING
+ std::cout << "vertex: " << *v_iter
+ << ", iDim: " << iDim
+ << ", tractionE: " << tractionE
+ << ", traction: " << tractionsVertex[iDim]
+ << std::endl;
+#endif
if (tractionE > 1.0)
CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, tractionsVertex[iDim]/tractionE,
tolerance);
@@ -793,7 +743,7 @@
void
pylith::faults::TestFaultCohesiveKin::testSplitField(void)
{ // testSplitField
- assert(0 != _data);
+ CPPUNIT_ASSERT(_data);
topology::Mesh mesh;
FaultCohesiveKin fault;
@@ -950,6 +900,8 @@
residual.newSection(topology::FieldBase::VERTICES_FIELD, spaceDim);
residual.allocate();
fields->copyLayout("residual");
+
+ fault->verifyConfiguration(*mesh);
} // _initialize
// ----------------------------------------------------------------------
@@ -957,7 +909,7 @@
bool
pylith::faults::TestFaultCohesiveKin::_isLagrangeVertex(const int vertex) const
{ // _isLagrangeVertex
- assert(0 != _data);
+ CPPUNIT_ASSERT(_data);
const int numFaultVertices = _data->numFaultVertices;
bool isFound = false;
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKin.hh
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKin.hh 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKin.hh 2011-10-17 22:23:48 UTC (rev 19086)
@@ -107,9 +107,6 @@
/// Test adjustSolnLumped().
void testAdjustSolnLumped(void);
- /// Test updateStateVars().
- void testUpdateStateVars(void);
-
/// Test _calcTractionsChange().
void testCalcTractionsChange(void);
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKinHex8.hh
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKinHex8.hh 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKinHex8.hh 2011-10-17 22:23:48 UTC (rev 19086)
@@ -48,7 +48,6 @@
CPPUNIT_TEST( testIntegrateJacobian );
CPPUNIT_TEST( testIntegrateJacobianLumped );
CPPUNIT_TEST( testAdjustSolnLumped );
- CPPUNIT_TEST( testUpdateStateVars );
CPPUNIT_TEST( testCalcTractionsChange );
CPPUNIT_TEST( testSplitField );
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKinLine2.hh
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKinLine2.hh 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKinLine2.hh 2011-10-17 22:23:48 UTC (rev 19086)
@@ -48,7 +48,6 @@
CPPUNIT_TEST( testIntegrateJacobian );
CPPUNIT_TEST( testIntegrateJacobianLumped );
CPPUNIT_TEST( testAdjustSolnLumped );
- CPPUNIT_TEST( testUpdateStateVars );
CPPUNIT_TEST( testCalcTractionsChange );
CPPUNIT_TEST( testSplitField );
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKinQuad4.hh
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKinQuad4.hh 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKinQuad4.hh 2011-10-17 22:23:48 UTC (rev 19086)
@@ -48,7 +48,6 @@
CPPUNIT_TEST( testIntegrateJacobian );
CPPUNIT_TEST( testIntegrateJacobianLumped );
CPPUNIT_TEST( testAdjustSolnLumped );
- CPPUNIT_TEST( testUpdateStateVars );
CPPUNIT_TEST( testCalcTractionsChange );
CPPUNIT_TEST( testSplitField );
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKinQuad4e.hh
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKinQuad4e.hh 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKinQuad4e.hh 2011-10-17 22:23:48 UTC (rev 19086)
@@ -47,7 +47,6 @@
CPPUNIT_TEST( testIntegrateResidual );
CPPUNIT_TEST( testIntegrateJacobian );
CPPUNIT_TEST( testIntegrateJacobianLumped );
- CPPUNIT_TEST( testUpdateStateVars );
CPPUNIT_TEST( testCalcTractionsChange );
CPPUNIT_TEST( testSplitField );
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKinTet4.hh
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKinTet4.hh 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKinTet4.hh 2011-10-17 22:23:48 UTC (rev 19086)
@@ -48,7 +48,6 @@
CPPUNIT_TEST( testIntegrateJacobian );
CPPUNIT_TEST( testIntegrateJacobianLumped );
CPPUNIT_TEST( testAdjustSolnLumped );
- CPPUNIT_TEST( testUpdateStateVars );
CPPUNIT_TEST( testCalcTractionsChange );
CPPUNIT_TEST( testSplitField );
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKinTet4e.hh
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKinTet4e.hh 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKinTet4e.hh 2011-10-17 22:23:48 UTC (rev 19086)
@@ -47,7 +47,6 @@
CPPUNIT_TEST( testIntegrateResidual );
CPPUNIT_TEST( testIntegrateJacobian );
CPPUNIT_TEST( testIntegrateJacobianLumped );
- CPPUNIT_TEST( testUpdateStateVars );
CPPUNIT_TEST( testCalcTractionsChange );
CPPUNIT_TEST( testSplitField );
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKinTet4f.hh
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKinTet4f.hh 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKinTet4f.hh 2011-10-17 22:23:48 UTC (rev 19086)
@@ -47,7 +47,6 @@
CPPUNIT_TEST( testIntegrateResidual );
CPPUNIT_TEST( testIntegrateJacobian );
CPPUNIT_TEST( testIntegrateJacobianLumped );
- CPPUNIT_TEST( testUpdateStateVars );
CPPUNIT_TEST( testCalcTractionsChange );
CPPUNIT_TEST( testSplitField );
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKinTri3.hh
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKinTri3.hh 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKinTri3.hh 2011-10-17 22:23:48 UTC (rev 19086)
@@ -48,7 +48,6 @@
CPPUNIT_TEST( testIntegrateJacobian );
CPPUNIT_TEST( testIntegrateJacobianLumped );
CPPUNIT_TEST( testAdjustSolnLumped );
- CPPUNIT_TEST( testUpdateStateVars );
CPPUNIT_TEST( testCalcTractionsChange );
CPPUNIT_TEST( testSplitField );
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKinTri3d.hh
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKinTri3d.hh 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/TestFaultCohesiveKinTri3d.hh 2011-10-17 22:23:48 UTC (rev 19086)
@@ -47,7 +47,6 @@
CPPUNIT_TEST( testIntegrateResidual );
CPPUNIT_TEST( testIntegrateJacobian );
CPPUNIT_TEST( testIntegrateJacobianLumped );
- CPPUNIT_TEST( testUpdateStateVars );
CPPUNIT_TEST( testCalcTractionsChange );
CPPUNIT_TEST( testSplitField );
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynData.cc
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynData.cc 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynData.cc 2011-10-17 22:23:48 UTC (rev 19086)
@@ -40,7 +40,7 @@
fieldIncrOpen(0),
jacobian(0),
orientation(0),
- forcesInitial(0),
+ initialTractions(0),
area(0),
fieldIncrSlipE(0),
slipSlipE(0),
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynData.hh
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynData.hh 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynData.hh 2011-10-17 22:23:48 UTC (rev 19086)
@@ -75,7 +75,7 @@
//@{
double* orientation; ///< Expected values for fault orientation.
double* area; ///< Expected values for fault area.
- double* forcesInitial; ///< Expected values for initial forces.
+ double* initialTractions; ///< Expected values for initial tractions.
double* fieldIncrSlipE; ///< Expected values for solution increment for slipping case.
double* slipSlipE; ///< Expected values for slip for slipping case.
double* fieldIncrOpenE; ///< Expected values for solution increment for opening case.
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynDataHex8.cc
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynDataHex8.cc 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynDataHex8.cc 2011-10-17 22:23:48 UTC (rev 19086)
@@ -49,10 +49,10 @@
const int pylith::faults::CohesiveDynDataHex8::_numQuadPts = 4;
const double pylith::faults::CohesiveDynDataHex8::_quadPts[] = {
- -0.57735027, -0.57735027,
- +0.57735027, -0.57735027,
- +0.57735027, +0.57735027,
- -0.57735027, +0.57735027,
+ -1.0, -1.0,
+ +1.0, -1.0,
+ +1.0, +1.0,
+ -1.0, +1.0
};
const double pylith::faults::CohesiveDynDataHex8::_quadWts[] = {
@@ -60,10 +60,10 @@
};
const double pylith::faults::CohesiveDynDataHex8::_basis[] = {
- 0.62200847, 0.16666667, 0.0446582, 0.16666667,
- 0.16666667, 0.62200847, 0.16666667, 0.0446582,
- 0.0446582, 0.16666667, 0.62200847, 0.16666667,
- 0.16666667, 0.0446582, 0.16666667, 0.62200847,
+ 1.0, 0.0, 0.0, 0.0,
+ 0.0, 1.0, 0.0, 0.0,
+ 0.0, 0.0, 1.0, 0.0,
+ 0.0, 0.0, 0.0, 1.0,
};
const double pylith::faults::CohesiveDynDataHex8::_basisDeriv[] = {
@@ -103,1237 +103,991 @@
"data/hex8_initialtract.spatialdb";
const double pylith::faults::CohesiveDynDataHex8::_fieldT[] = {
- 4.1, 6.1, 8.1,
- 4.2, 6.2, 8.2,
- 4.3, 6.3, 8.3,
- 4.4, 6.4, 8.4,
- 4.5, 6.5, 8.5, // 6
- 4.6, 6.6, 8.6, // 7
- 4.7, 6.7, 8.7, // 8
- 4.8, 6.8, 8.8, // 9
- 4.9, 6.9, 8.9,
- 4.0, 6.0, 8.0,
- 5.1, 7.1, 9.1,
- 5.2, 7.2, 9.2,
- 5.3, 7.3, 9.3, // 14
- 5.5, 7.5, 9.5, // 15
- 5.7, 7.7, 9.7, // 16
- 5.9, 7.9, 9.9, // 17
- 5.4, 7.4, 9.4, // 18
- 5.6, 7.6, 9.6, // 19
- 5.8, 7.8, 9.8, // 20
- 5.0, 7.0, 9.0, // 21
+ 4.1, 2.1, 3.1,
+ 4.2, 2.2, 3.2,
+ 4.3, 2.3, 3.3,
+ 4.4, 2.4, 3.4,
+ 4.5, 2.5, 3.5, // 6
+ 4.6, 2.6, 3.6, // 7
+ 4.7, 2.7, 3.7, // 8
+ 4.8, 2.8, 3.8, // 9
+ 4.9, 2.9, 3.9,
+ 4.0, 2.0, 3.0,
+ 4.1, 2.1, 3.1,
+ 4.2, 2.2, 3.2,
+ 4.5, 2.5, 3.5, // 14
+ 4.6, 2.6, 3.6, // 15
+ 4.7, 2.7, 3.7, // 16
+ 4.8, 2.8, 3.8, // 17
+ 4.4, 2.4, 3.4, // 18
+ 4.6, 2.6, 3.6, // 19
+ 4.8, 2.8, 3.8, // 20
+ 4.0, 2.0, 3.0, // 21
};
-// :TODO: Make sensible values for Jacobian for DOF on positive and
-// negative sides of the fault. Add semi-random values for other DOF.
const double pylith::faults::CohesiveDynDataHex8::_jacobian[] = {
- 1, 0.1, 0.2,
+ 1.0, 0.1, 0.2, // 2x
0.3, 0.4, 0.5,
0.6, 0.7, 0.8,
- 0.9, 1, 1.1,
+ 0.9, 1.0, 1.1,
1.2, 1.3, 1.4,
1.5, 1.6, 1.7,
- 1.8, 1.9, 2,
+ 1.8, 1.9, 2.0,
2.1, 2.2, 2.3,
2.4, 2.5, 2.6,
2.7, 2.8, 2.9,
- 3, 3.1, 3.2,
+ 3.0, 3.1, 3.2,
3.3, 3.4, 3.5,
3.6, 3.7, 3.8,
- 3.9, 4, 4.1,
+ 3.9, 4.0, 4.1,
4.2, 4.3, 4.4,
4.5, 4.6, 4.7,
- 4.8, 4.9, 5,
+ 4.8, 4.9, 5.0,
5.1, 5.2, 5.3,
5.4, 5.5, 5.6,
5.7, 5.8, 5.9,
- 6, 1, 6.1,
- 6.2, 6.3, 6.4,
- 6.5, 6.6, 6.7,
- 6.8, 6.9, 7,
- 7.1, 7.2, 7.3,
- 7.4, 7.5, 7.6,
- 7.7, 7.8, 7.9,
- 8, 8.1, 8.2,
- 8.3, 8.4, 8.5,
- 8.6, 8.7, 8.8,
- 8.9, 9, 9.1,
- 9.2, 9.3, 9.4,
- 9.5, 9.6, 9.7,
- 9.8, 9.9, 10,
- 10.1, 10.2, 10.3,
- 10.4, 10.5, 10.6,
- 10.7, 10.8, 10.9,
- 11, 11.1, 11.2,
- 11.3, 11.4, 11.5,
- 11.6, 11.7, 11.8,
- 11.9, 12, 1,
- 12.1, 12.2, 12.3,
- 12.4, 12.5, 12.6,
- 12.7, 12.8, 12.9,
- 13, 13.1, 13.2,
- 13.3, 13.4, 13.5,
- 13.6, 13.7, 13.8,
- 13.9, 14, 14.1,
- 14.2, 14.3, 14.4,
- 14.5, 14.6, 14.7,
- 14.8, 14.9, 15,
- 15.1, 15.2, 15.3,
- 15.4, 15.5, 15.6,
- 15.7, 15.8, 15.9,
- 16, 16.1, 16.2,
- 16.3, 16.4, 16.5,
- 16.6, 16.7, 16.8,
- 16.9, 17, 17.1,
- 17.2, 17.3, 17.4,
- 17.5, 17.6, 17.7,
- 17.8, 17.9, 18,
- 1, 18.1, 18.2,
- 18.3, 18.4, 18.5,
- 18.6, 18.7, 18.8,
- 18.9, 19, 19.1,
- 19.2, 19.3, 19.4,
- 19.5, 19.6, 19.7,
- 19.8, 19.9, 20,
- 20.1, 20.2, 20.3,
- 20.4, 20.5, 20.6,
- 20.7, 20.8, 20.9,
- 21, 21.1, 21.2,
- 21.3, 21.4, 21.5,
- 21.6, 21.7, 21.8,
- 21.9, 22, 22.1,
- 22.2, 22.3, 22.4,
- 22.5, 22.6, 22.7,
- 22.8, 22.9, 23,
- 23.1, 23.2, 23.3,
- 23.4, 23.5, 23.6,
- 23.7, 23.8, 23.9,
- 24, 1, 24.1,
- 24.2, 24.3, 24.4,
- 24.5, 24.6, 24.7,
- 24.8, 24.9, 25,
- 25.1, 25.2, 25.3,
- 25.4, 25.5, 25.6,
- 25.7, 25.8, 25.9,
- 26, 26.1, 26.2,
- 26.3, 26.4, 26.5,
- 26.6, 26.7, 26.8,
- 26.9, 27, 27.1,
- 27.2, 27.3, 27.4,
- 27.5, 27.6, 27.7,
- 27.8, 27.9, 28,
- 28.1, 28.2, 28.3,
- 28.4, 28.5, 28.6,
- 28.7, 28.8, 28.9,
- 29, 29.1, 29.2,
- 29.3, 29.4, 29.5,
- 29.6, 29.7, 29.8,
- 29.9, 30, 1,
- 30.1, 30.2, 30.3,
- 30.4, 30.5, 30.6,
- 30.7, 30.8, 30.9,
- 31, 31.1, 31.2,
- 31.3, 31.4, 31.5,
- 31.6, 31.7, 31.8,
- 31.9, 32, 32.1,
- 32.2, 32.3, 32.4,
- 32.5, 32.6, 32.7,
- 32.8, 32.9, 33,
- 33.1, 33.2, 33.3,
- 33.4, 33.5, 33.6,
- 33.7, 33.8, 33.9,
- 34, 34.1, 34.2,
- 34.3, 34.4, 34.5,
- 34.6, 34.7, 34.8,
- 34.9, 35, 35.1,
- 35.2, 35.3, 35.4,
- 35.5, 35.6, 35.7,
- 35.8, 35.9, 36,
- 1, 36.1, 36.2,
- 36.3, 36.4, 36.5,
- 36.6, 36.7, 36.8,
- 36.9, 37, 37.1,
- 37.2, 37.3, 37.4,
- 37.5, 37.6, 37.7,
- 37.8, 37.9, 38,
- 38.1, 38.2, 38.3,
- 38.4, 38.5, 38.6,
- 38.7, 38.8, 38.9,
- 39, 39.1, 39.2,
- 39.3, 39.4, 39.5,
- 39.6, 39.7, 39.8,
- 39.9, 40, 40.1,
- 40.2, 40.3, 40.4,
- 40.5, 40.6, 40.7,
- 40.8, 40.9, 41,
- 41.1, 41.2, 41.3,
- 41.4, 41.5, 41.6,
- 41.7, 41.8, 41.9,
- 42, 1, 42.1,
- 42.2, 42.3, 42.4,
- 42.5, 42.6, 42.7,
- 42.8, 42.9, 43,
- 43.1, 43.2, 43.3,
- 43.4, 43.5, 43.6,
- 43.7, 43.8, 43.9,
- 44, 44.1, 44.2,
- 44.3, 44.4, 44.5,
- 44.6, 44.7, 44.8,
- 44.9, 45, 45.1,
- 45.2, 45.3, 45.4,
- 45.5, 45.6, 45.7,
- 45.8, 45.9, 46,
- 46.1, 46.2, 46.3,
- 46.4, 46.5, 46.6,
- 46.7, 46.8, 46.9,
- 47, 47.1, 47.2,
- 47.3, 47.4, 47.5,
- 47.6, 47.7, 47.8,
- 47.9, 48, 1,
- 48.1, 48.2, 48.3,
- 48.4, 48.5, 48.6,
- 48.7, 48.8, 48.9,
- 49, 49.1, 49.2,
- 49.3, 49.4, 49.5,
- 49.6, 49.7, 49.8,
- 49.9, 50, 50.1,
- 50.2, 50.3, 50.4,
- 50.5, 50.6, 50.7,
- 50.8, 50.9, 51,
- 51.1, 51.2, 51.3,
- 51.4, 51.5, 51.6,
- 51.7, 51.8, 51.9,
- 52, 52.1, 52.2,
- 52.3, 52.4, 52.5,
- 52.6, 52.7, 52.8,
- 52.9, 53, 53.1,
- 53.2, 53.3, 53.4,
- 53.5, 53.6, 53.7,
- 53.8, 53.9, 54,
- 1, 54.1, 54.2,
- 54.3, 54.4, 54.5,
- 54.6, 54.7, 54.8,
- 54.9, 55, 55.1,
- 55.2, 55.3, 55.4,
- 55.5, 55.6, 55.7,
- 55.8, 55.9, 56,
- 56.1, 56.2, 56.3,
- 56.4, 56.5, 56.6,
- 56.7, 56.8, 56.9,
- 57, 57.1, 57.2,
- 57.3, 57.4, 57.5,
- 57.6, 57.7, 57.8,
- 57.9, 58, 58.1,
- 58.2, 58.3, 58.4,
- 58.5, 58.6, 58.7,
- 58.8, 58.9, 59,
- 59.1, 59.2, 59.3,
- 59.4, 59.5, 59.6,
- 59.7, 59.8, 59.9,
- 60, 1, 60.1,
- 60.2, 60.3, 60.4,
- 60.5, 60.6, 60.7,
- 60.8, 60.9, 61,
- 61.1, 61.2, 61.3,
- 61.4, 61.5, 61.6,
- 61.7, 61.8, 61.9,
- 62, 62.1, 62.2,
- 62.3, 62.4, 62.5,
- 62.6, 62.7, 62.8,
- 62.9, 63, 63.1,
- 63.2, 63.3, 63.4,
- 63.5, 63.6, 63.7,
- 63.8, 63.9, 64,
- 64.1, 64.2, 64.3,
- 64.4, 64.5, 64.6,
- 64.7, 64.8, 64.9,
- 65, 65.1, 65.2,
- 65.3, 65.4, 65.5,
- 65.6, 65.7, 65.8,
- 65.9, 66, 1,
- 66.1, 66.2, 66.3,
- 66.4, 66.5, 66.6,
- 66.7, 66.8, 66.9,
- 67, 67.1, 67.2,
- 67.3, 67.4, 67.5,
- 67.6, 67.7, 67.8,
- 67.9, 68, 68.1,
- 68.2, 68.3, 68.4,
- 68.5, 68.6, 68.7,
- 68.8, 68.9, 69,
- 69.1, 69.2, 69.3,
- 69.4, 69.5, 69.6,
- 69.7, 69.8, 69.9,
- 70, 70.1, 70.2,
- 70.3, 70.4, 70.5,
- 70.6, 70.7, 70.8,
- 70.9, 71, 71.1,
- 71.2, 71.3, 71.4,
- 71.5, 71.6, 71.7,
- 71.8, 71.9, 72,
- 1, 72.1, 72.2,
- 72.3, 72.4, 72.5,
- 72.6, 72.7, 72.8,
- 72.9, 73, 73.1,
- 73.2, 73.3, 73.4,
- 73.5, 73.6, 73.7,
- 73.8, 73.9, 74,
- 74.1, 74.2, 74.3,
- 74.4, 74.5, 74.6,
- 74.7, 74.8, 74.9,
- 75, 75.1, 75.2,
- 75.3, 75.4, 75.5,
- 75.6, 75.7, 1,
- 75.8, 75.9, 76,
- 76.1, 76.2, 76.3,
- 76.4, 76.5, 76.6,
- 76.7, 76.8, 76.9,
- 77, 77.1, 77.2,
- 77.3, 77.4, 77.5,
- 77.6, 77.7, 77.8,
- 77.9, 1, 78,
- 78.1, 78.2, 78.3,
- 78.4, 78.5, 78.6,
- 78.7, 78.8, 78.9,
- 79, 79.1, 79.2,
- 79.3, 79.4, 79.5,
- 79.6, 79.7, 79.8,
- 79.9, 80, 80.1,
- 80.2, 80.3, 80.4,
- 80.5, 80.6, 80.7,
- 80.8, 80.9, 81,
- 81.1, 81.2, 81.3,
- 1, 81.4, 81.5,
- 81.6, 81.7, 81.8,
- 81.9, 82, 82.1,
- 82.2, 82.3, 82.4,
- 82.5, 82.6, 82.7,
- 82.8, 82.9, 83,
- 83.1, 83.2, 83.3,
- 83.4, 83.5, 83.6,
- 83.7, 83.8, 1,
- 83.9, 84, 84.1,
- 84.2, 84.3, 84.4,
- 84.5, 84.6, 84.7,
- 84.8, 84.9, 85,
- 85.1, 85.2, 85.3,
- 85.4, 85.5, 85.6,
- 85.7, 85.8, 85.9,
- 86, 86.1, 86.2,
- 86.3, 86.4, 86.5,
- 86.6, 86.7, 86.8,
- 86.9, 87, 87.1,
- 87.2, 1, 87.3,
- 87.4, 87.5, 87.6,
- 87.7, 87.8, 87.9,
- 88, 88.1, 88.2,
- 88.3, 88.4, 88.5,
- 88.6, 88.7, 88.8,
- 88.9, 89, 89.1,
- 89.2, 89.3, 89.4,
- 89.5, 89.6, 89.7,
- 1, 89.8, 89.9,
- 90, 90.1, 90.2,
- 90.3, 90.4, 90.5,
- 90.6, 90.7, 90.8,
- 90.9, 91, 91.1,
- 91.2, 91.3, 91.4,
- 91.5, 91.6, 91.7,
- 91.8, 91.9, 92,
- 92.1, 92.2, 92.3,
- 92.4, 92.5, 92.6,
- 92.7, 92.8, 92.9,
- 93, 93.1, 93.2,
- 93.3, 93.4, 1,
- 93.5, 93.6, 93.7,
- 93.8, 93.9, 94,
- 94.1, 94.2, 94.3,
- 94.4, 94.5, 94.6,
- 94.7, 94.8, 94.9,
- 95, 95.1, 95.2,
- 95.3, 95.4, 95.5,
- 95.6, 1, 95.7,
- 95.8, 95.9, 96,
- 96.1, 96.2, 96.3,
- 96.4, 96.5, 96.6,
- 96.7, 96.8, 96.9,
- 97, 97.1, 97.2,
- 97.3, 97.4, 97.5,
- 97.6, 97.7, 97.8,
- 97.9, 98, 98.1,
- 98.2, 98.3, 98.4,
- 98.5, 98.6, 98.7,
- 98.8, 98.9, 99,
- 1, 99.1, 99.2,
- 99.3, 99.4, 99.5,
- 99.6, 99.7, 99.8,
- 99.9, 100,100.1,
-100.2,100.3,100.4,
-100.5,100.6,100.7,
-100.8,100.9, 101,
-101.1,101.2,101.3,
-101.4,101.5, 1,
-101.6,101.7,101.8,
-101.9, 102,102.1,
-102.2,102.3,102.4,
-102.5,102.6,102.7,
-102.8,102.9, 103,
-103.1,103.2,103.3,
-103.4,103.5,103.6,
-103.7,103.8,103.9,
- 104,104.1,104.2,
-104.3,104.4,104.5,
-104.6,104.7,104.8,
-104.9, 1, 105,
-105.1,105.2,105.3,
-105.4,105.5,105.6,
-105.7,105.8,105.9,
- 106,106.1,106.2,
-106.3,106.4,106.5,
-106.6,106.7,106.8,
-106.9, 107,107.1,
-107.2,107.3,107.4,
- 1,107.5,107.6,
-107.7,107.8,107.9,
- 108,108.1,108.2,
-108.3,108.4,108.5,
-108.6,108.7,108.8,
-108.9, 109,109.1,
-109.2,109.3,109.4,
-109.5,109.6,109.7,
-109.8,109.9, 110,
-110.1,110.2,110.3,
-110.4,110.5,110.6,
-110.7,110.8,110.9,
- 111,111.1, 1,
-111.2,111.3,111.4,
-111.5,111.6,111.7,
-111.8,111.9, 112,
-112.1,112.2,112.3,
-112.4,112.5,112.6,
-112.7,112.8,112.9,
- 113,113.1,113.2,
-113.3, 1,113.4,
-113.5,113.6,113.7,
-113.8,113.9, 114,
-114.1,114.2,114.3,
-114.4,114.5,114.6,
-114.7,114.8,114.9,
- 115,115.1,115.2,
-115.3,115.4,115.5,
-115.6,115.7,115.8,
-115.9, 116,116.1,
-116.2,116.3,116.4,
-116.5,116.6,116.7,
- 1,116.8,116.9,
- 117,117.1,117.2,
-117.3,117.4,117.5,
-117.6,117.7,117.8,
-117.9, 118,118.1,
-118.2,118.3,118.4,
-118.5,118.6,118.7,
-118.8,118.9, 119,
-119.1,119.2, 1,
-119.3,119.4,119.5,
-119.6,119.7,119.8,
-119.9, 120,120.1,
-120.2,120.3,120.4,
-120.5,120.6,120.7,
-120.8,120.9, 121,
-121.1,121.2,121.3,
-121.4,121.5,121.6,
-121.7,121.8,121.9,
- 122,122.1,122.2,
-122.3,122.4,122.5,
-122.6, 1,122.7,
-122.8,122.9, 123,
-123.1,123.2,123.3,
-123.4,123.5,123.6,
-123.7,123.8,123.9,
- 124,124.1,124.2,
-124.3,124.4,124.5,
-124.6,124.7,124.8,
-124.9, 125,125.1,
- 1,125.2,125.3,
-125.4,125.5,125.6,
-125.7,125.8,125.9,
- 126,126.1,126.2,
-126.3,126.4,126.5,
-126.6,126.7,126.8,
-126.9, 127,127.1,
-127.2,127.3,127.4,
-127.5,127.6,127.7,
-127.8,127.9, 128,
-128.1,128.2,128.3,
-128.4,128.5,128.6,
-128.7,128.8, 1,
-128.9, 129,129.1,
-129.2,129.3,129.4,
-129.5,129.6,129.7,
-129.8,129.9, 130,
-130.1,130.2,130.3,
-130.4,130.5,130.6,
-130.7,130.8,130.9,
- 131, 1,131.1,
-131.2,131.3,131.4,
-131.5,131.6,131.7,
-131.8,131.9, 132,
-132.1,132.2,132.3,
-132.4,132.5,132.6,
-132.7,132.8,132.9,
- 133,133.1,133.2,
-133.3,133.4,133.5,
-133.6,133.7,133.8,
-133.9, 134,134.1,
-134.2,134.3,134.4,
- 1,134.5,134.6,
-134.7,134.8,134.9,
- 135,135.1,135.2,
-135.3,135.4,135.5,
-135.6,135.7,135.8,
-135.9, 136,136.1,
-136.2,136.3,136.4,
-136.5,136.6,136.7,
-136.8,136.9, 1,
- 137,137.1,137.2,
-137.3,137.4,137.5,
-137.6,137.7,137.8,
-137.9, 138,138.1,
-138.2,138.3,138.4,
-138.5,138.6,138.7,
-138.8,138.9, 139,
-139.1,139.2,139.3,
-139.4,139.5,139.6,
-139.7,139.8,139.9,
- 140,140.1,140.2,
-140.3, 1,140.4,
-140.5,140.6,140.7,
-140.8,140.9, 141,
-141.1,141.2,141.3,
-141.4,141.5,141.6,
-141.7,141.8,141.9,
- 142,142.1,142.2,
-142.3,142.4,142.5,
-142.6,142.7,142.8,
- 1,142.9, 143,
-143.1,143.2,143.3,
-143.4,143.5,143.6,
-143.7,143.8,143.9,
- 144,144.1,144.2,
-144.3,144.4,144.5,
-144.6,144.7,144.8,
-144.9, 145,145.1,
-145.2,145.3,145.4,
-145.5,145.6,145.7,
-145.8,145.9, 146,
-146.1,146.2,146.3,
-146.4,146.5,146.6,
-146.7,146.8,146.9,
- 147,147.1,147.2,
-147.3,147.4,147.5,
-147.6,147.7,147.8,
-147.9, 148,148.1,
-148.2,148.3,148.4,
-148.5,148.6,148.7,
-148.8, 1,148.9,
- 149,149.1,149.2,
-149.3,149.4,149.5,
-149.6,149.7,149.8,
-149.9, 150,150.1,
-150.2,150.3,150.4,
-150.5,150.6,150.7,
-150.8,150.9, 151,
-151.1,151.2,151.3,
-151.4,151.5,151.6,
-151.7,151.8,151.9,
- 152,152.1,152.2,
-152.3,152.4,152.5,
-152.6,152.7,152.8,
-152.9, 153,153.1,
-153.2,153.3,153.4,
-153.5,153.6,153.7,
-153.8,153.9, 154,
-154.1,154.2,154.3,
-154.4,154.5,154.6,
-154.7,154.8, 1,
-154.9, 155,155.1,
-155.2,155.3,155.4,
-155.5,155.6,155.7,
-155.8,155.9, 156,
-156.1,156.2,156.3,
-156.4,156.5,156.6,
-156.7,156.8,156.9,
- 157,157.1,157.2,
-157.3,157.4,157.5,
-157.6,157.7,157.8,
-157.9, 158,158.1,
-158.2,158.3,158.4,
-158.5,158.6,158.7,
-158.8,158.9, 159,
-159.1,159.2,159.3,
-159.4,159.5,159.6,
-159.7,159.8,159.9,
- 160,160.1,160.2,
-160.3,160.4,160.5,
-160.6,160.7,160.8,
- 1,160.9, 161,
-161.1,161.2,161.3,
-161.4,161.5,161.6,
-161.7,161.8,161.9,
- 162,162.1,162.2,
-162.3,162.4,162.5,
-162.6,162.7,162.8,
-162.9, 163,163.1,
-163.2,163.3,163.4,
-163.5,163.6,163.7,
-163.8,163.9, 164,
-164.1,164.2,164.3,
-164.4,164.5,164.6,
-164.7,164.8,164.9,
- 165,165.1,165.2,
-165.3,165.4,165.5,
-165.6,165.7,165.8,
-165.9, 166,166.1,
-166.2,166.3,166.4,
-166.5,166.6,166.7,
-166.8, 1,166.9,
- 167,167.1,167.2,
-167.3,167.4,167.5,
-167.6,167.7,167.8,
-167.9, 168,168.1,
-168.2,168.3,168.4,
-168.5,168.6,168.7,
-168.8,168.9, 169,
-169.1,169.2,169.3,
-169.4,169.5,169.6,
-169.7,169.8,169.9,
- 170,170.1,170.2,
-170.3,170.4,170.5,
-170.6,170.7,170.8,
-170.9, 171,171.1,
-171.2,171.3,171.4,
-171.5,171.6,171.7,
-171.8,171.9, 172,
-172.1,172.2,172.3,
-172.4,172.5,172.6,
-172.7,172.8, 1,
-172.9, 173,173.1,
-173.2,173.3,173.4,
-173.5,173.6,173.7,
-173.8,173.9, 174,
-174.1,174.2,174.3,
-174.4,174.5,174.6,
-174.7,174.8,174.9,
- 175,175.1,175.2,
-175.3,175.4,175.5,
-175.6,175.7,175.8,
-175.9, 176,176.1,
-176.2,176.3,176.4,
-176.5,176.6,176.7,
-176.8,176.9, 177,
-177.1,177.2,177.3,
-177.4,177.5,177.6,
-177.7,177.8,177.9,
- 178,178.1,178.2,
-178.3,178.4,178.5,
-178.6,178.7,178.8,
- 1,178.9, 179,
-179.1,179.2,179.3,
-179.4,179.5,179.6,
-179.7,179.8,179.9,
- 180,180.1,180.2,
-180.3,180.4,180.5,
-180.6,180.7,180.8,
-180.9, 181,181.1,
-181.2,181.3,181.4,
-181.5,181.6,181.7,
-181.8,181.9, 182,
-182.1,182.2,182.3,
-182.4,182.5,182.6,
-182.7,182.8,182.9,
- 183,183.1,183.2,
-183.3,183.4,183.5,
-183.6,183.7,183.8,
-183.9, 184,184.1,
-184.2,184.3,184.4,
-184.5,184.6,184.7,
-184.8, 1,184.9,
- 185,185.1,185.2,
-185.3,185.4,185.5,
-185.6,185.7,185.8,
-185.9, 186,186.1,
-186.2,186.3,186.4,
-186.5,186.6,186.7,
-186.8,186.9, 187,
-187.1,187.2,187.3,
-187.4,187.5,187.6,
-187.7,187.8,187.9,
- 188,188.1,188.2,
-188.3,188.4,188.5,
-188.6,188.7,188.8,
-188.9, 189,189.1,
-189.2,189.3,189.4,
-189.5,189.6,189.7,
-189.8,189.9, 190,
-190.1,190.2,190.3,
-190.4,190.5,190.6,
-190.7,190.8, 1,
-190.9, 191,191.1,
-191.2,191.3,191.4,
-191.5,191.6,191.7,
-191.8,191.9, 192,
-192.1,192.2,192.3,
-192.4,192.5,192.6,
-192.7,192.8,192.9,
- 193,193.1,193.2,
-193.3,193.4,193.5,
-193.6,193.7,193.8,
-193.9, 194,194.1,
-194.2,194.3,194.4,
-194.5,194.6,194.7,
-194.8,194.9, 195,
-195.1,195.2,195.3,
-195.4,195.5,195.6,
-195.7,195.8,195.9,
- 196,196.1,196.2,
-196.3,196.4,196.5,
-196.6,196.7,196.8,
- 1,196.9, 197,
-197.1,197.2,197.3,
-197.4,197.5,197.6,
-197.7,197.8,197.9,
- 198,198.1,198.2,
-198.3,198.4,198.5,
-198.6,198.7,198.8,
-198.9, 199,199.1,
-199.2,199.3,199.4,
-199.5,199.6,199.7,
-199.8,199.9, 200,
-200.1,200.2,200.3,
-200.4,200.5,200.6,
-200.7,200.8,200.9,
- 201,201.1,201.2,
-201.3,201.4,201.5,
-201.6,201.7,201.8,
-201.9, 202,202.1,
-202.2,202.3,202.4,
-202.5,202.6,202.7,
-202.8, 1,202.9,
- 203,203.1,203.2,
-203.3,203.4,203.5,
-203.6,203.7,203.8,
-203.9, 204,204.1,
-204.2,204.3,204.4,
-204.5,204.6,204.7,
-204.8,204.9, 205,
-205.1,205.2,205.3,
-205.4,205.5,205.6,
-205.7,205.8,205.9,
- 206,206.1,206.2,
-206.3,206.4,206.5,
-206.6,206.7,206.8,
-206.9, 207,207.1,
-207.2,207.3,207.4,
-207.5,207.6,207.7,
-207.8,207.9, 208,
-208.1,208.2,208.3,
-208.4,208.5,208.6,
-208.7,208.8, 1,
-208.9, 209,209.1,
-209.2,209.3,209.4,
-209.5,209.6,209.7,
-209.8,209.9, 210,
-210.1,210.2,210.3,
-210.4,210.5,210.6,
-210.7,210.8,210.9,
- 211,211.1,211.2,
-211.3,211.4,211.5,
-211.6,211.7,211.8,
-211.9, 212,212.1,
-212.2,212.3,212.4,
-212.5,212.6,212.7,
-212.8,212.9, 213,
-213.1,213.2,213.3,
-213.4,213.5,213.6,
-213.7,213.8,213.9,
- 214,214.1,214.2,
-214.3,214.4,214.5,
-214.6,214.7,214.8,
- 1,214.9, 215,
-215.1,215.2,215.3,
-215.4,215.5,215.6,
-215.7,215.8,215.9,
- 216,216.1, -1,
-216.2,216.3,216.4,
-216.5,216.6,216.7,
-216.8,216.9, 217,
-217.1,217.2,217.3,
-217.4,217.5,217.6,
-217.7,217.8,217.9,
- 218,218.1,218.2,
-218.3,218.4,218.5,
-218.6,218.7,218.8,
-218.9, 219,219.1,
-219.2,219.3,219.4,
-219.5,219.6,219.7,
-219.8,219.9, 220,
-220.1,220.2,220.3,
-220.4,220.5,220.6,
-220.7, 1,220.8,
-220.9, 221,221.1,
-221.2,221.3,221.4,
-221.5,221.6,221.7,
- -1,221.8,221.9,
- 222,222.1,222.2,
-222.3,222.4,222.5,
-222.6,222.7,222.8,
-222.9, 223,223.1,
-223.2,223.3,223.4,
-223.5,223.6,223.7,
-223.8,223.9, 224,
-224.1,224.2,224.3,
-224.4,224.5,224.6,
-224.7,224.8,224.9,
- 225,225.1,225.2,
-225.3,225.4,225.5,
-225.6,225.7,225.8,
-225.9, 226,226.1,
-226.2,226.3,226.4,
-226.5,226.6, 1,
-226.7,226.8,226.9,
- 227,227.1,227.2,
-227.3,227.4,227.5,
-227.6, -1,227.7,
-227.8,227.9, 228,
-228.1,228.2,228.3,
-228.4,228.5,228.6,
-228.7,228.8,228.9,
- 229,229.1,229.2,
-229.3,229.4,229.5,
-229.6,229.7,229.8,
-229.9, 230,230.1,
-230.2,230.3,230.4,
-230.5,230.6,230.7,
-230.8,230.9, 231,
-231.1,231.2,231.3,
-231.4,231.5,231.6,
-231.7,231.8,231.9,
- 232,232.1,232.2,
-232.3,232.4,232.5,
- 1,232.6,232.7,
-232.8,232.9, 233,
-233.1,233.2,233.3,
-233.4,233.5,233.6,
-233.7,233.8, -1,
-233.9, 234,234.1,
-234.2,234.3,234.4,
-234.5,234.6,234.7,
-234.8,234.9, 235,
-235.1,235.2,235.3,
-235.4,235.5,235.6,
-235.7,235.8,235.9,
- 236,236.1,236.2,
-236.3,236.4,236.5,
-236.6,236.7,236.8,
-236.9, 237,237.1,
-237.2,237.3,237.4,
-237.5,237.6,237.7,
-237.8,237.9, 238,
-238.1,238.2,238.3,
-238.4, 1,238.5,
-238.6,238.7,238.8,
-238.9, 239,239.1,
-239.2,239.3,239.4,
- -1,239.5,239.6,
-239.7,239.8,239.9,
- 240,240.1,240.2,
-240.3,240.4,240.5,
-240.6,240.7,240.8,
-240.9, 241,241.1,
-241.2,241.3,241.4,
-241.5,241.6,241.7,
-241.8,241.9, 242,
-242.1,242.2,242.3,
-242.4,242.5,242.6,
-242.7,242.8,242.9,
- 243,243.1,243.2,
-243.3,243.4,243.5,
-243.6,243.7,243.8,
-243.9, 244,244.1,
-244.2,244.3, 1,
-244.4,244.5,244.6,
-244.7,244.8,244.9,
- 245,245.1,245.2,
-245.3, -1,245.4,
-245.5,245.6,245.7,
-245.8,245.9, 246,
-246.1,246.2,246.3,
-246.4,246.5,246.6,
-246.7,246.8,246.9,
- 247,247.1,247.2,
-247.3,247.4,247.5,
-247.6,247.7,247.8,
-247.9, 248,248.1,
-248.2,248.3,248.4,
-248.5,248.6,248.7,
-248.8,248.9, 249,
-249.1,249.2,249.3,
-249.4,249.5,249.6,
-249.7,249.8,249.9,
- 250,250.1,250.2,
- 1,250.3,250.4,
-250.5,250.6,250.7,
-250.8,250.9, 251,
-251.1,251.2,251.3,
-251.4,251.5, -1,
-251.6,251.7,251.8,
-251.9, 252,252.1,
-252.2,252.3,252.4,
-252.5,252.6,252.7,
-252.8,252.9, 253,
-253.1,253.2,253.3,
-253.4,253.5,253.6,
-253.7,253.8,253.9,
- 254,254.1,254.2,
-254.3,254.4,254.5,
-254.6,254.7,254.8,
-254.9, 255,255.1,
-255.2,255.3,255.4,
-255.5,255.6,255.7,
-255.8,255.9, 256,
-256.1, 1,256.2,
-256.3,256.4,256.5,
-256.6,256.7,256.8,
-256.9, 257,257.1,
- -1,257.2,257.3,
-257.4,257.5,257.6,
-257.7,257.8,257.9,
- 258,258.1,258.2,
-258.3,258.4,258.5,
-258.6,258.7,258.8,
-258.9, 259,259.1,
-259.2,259.3,259.4,
-259.5,259.6,259.7,
-259.8,259.9, 260,
-260.1,260.2,260.3,
-260.4,260.5,260.6,
-260.7,260.8,260.9,
- 261,261.1,261.2,
-261.3,261.4,261.5,
-261.6,261.7,261.8,
-261.9, 262, 1,
-262.1,262.2,262.3,
-262.4,262.5,262.6,
-262.7,262.8,262.9,
- 263, -1,263.1,
-263.2,263.3,263.4,
-263.5,263.6,263.7,
-263.8,263.9, 264,
-264.1,264.2,264.3,
-264.4,264.5,264.6,
-264.7,264.8,264.9,
- 265,265.1,265.2,
-265.3,265.4,265.5,
-265.6,265.7,265.8,
-265.9, 266,266.1,
-266.2,266.3,266.4,
-266.5,266.6,266.7,
-266.8,266.9, 267,
-267.1,267.2,267.3,
-267.4,267.5,267.6,
-267.7,267.8,267.9,
- 1, 268,268.1,
-268.2,268.3,268.4,
-268.5,268.6,268.7,
-268.8,268.9, 269,
-269.1,269.2, -1,
-269.3,269.4,269.5,
-269.6,269.7,269.8,
-269.9, 270,270.1,
-270.2,270.3,270.4,
-270.5,270.6,270.7,
-270.8,270.9, 271,
-271.1,271.2,271.3,
-271.4,271.5,271.6,
-271.7,271.8,271.9,
- 272,272.1,272.2,
-272.3,272.4,272.5,
-272.6,272.7,272.8,
-272.9, 273,273.1,
-273.2,273.3,273.4,
-273.5,273.6,273.7,
-273.8, 1,273.9,
- 274,274.1,274.2,
-274.3,274.4,274.5,
-274.6,274.7,274.8,
- -1,274.9, 275,
-275.1,275.2,275.3,
-275.4,275.5,275.6,
-275.7,275.8,275.9,
- 276,276.1,276.2,
-276.3,276.4,276.5,
-276.6,276.7,276.8,
-276.9, 277,277.1,
-277.2,277.3,277.4,
-277.5,277.6,277.7,
-277.8,277.9, 278,
-278.1,278.2,278.3,
-278.4,278.5,278.6,
-278.7,278.8,278.9,
- 279,279.1,279.2,
-279.3,279.4,279.5,
-279.6,279.7, 1,
-279.8,279.9, 280,
-280.1,280.2,280.3,
-280.4,280.5,280.6,
-280.7, -1,280.8,
-280.9, 281,281.1,
-281.2,281.3,281.4,
-281.5,281.6,281.7,
-281.8,281.9, 282,
-282.1, 1,282.2,
-282.3,282.4,282.5,
-282.6,282.7,282.8,
-282.9, 283,283.1,
-283.2,283.3,283.4,
-283.5,283.6,283.7,
-283.8,283.9, 284,
-284.1,284.2,284.3,
-284.4, -1,284.5,
-284.6,284.7,284.8,
-284.9, 285,285.1,
-285.2,285.3,285.4,
-285.5,285.6,285.7,
-285.8,285.9, 286,
-286.1,286.2,286.3,
-286.4,286.5,286.6,
-286.7,286.8,286.9,
- 287,287.1,287.2,
-287.3,287.4,287.5,
-287.6,287.7,287.8,
-287.9, 288, 1,
-288.1,288.2,288.3,
-288.4,288.5,288.6,
-288.7,288.8,288.9,
- 289,289.1,289.2,
-289.3,289.4,289.5,
-289.6,289.7,289.8,
-289.9, 290,290.1,
-290.2,290.3, -1,
-290.4,290.5,290.6,
-290.7,290.8,290.9,
- 291,291.1,291.2,
-291.3,291.4,291.5,
-291.6,291.7,291.8,
-291.9, 292,292.1,
-292.2,292.3,292.4,
-292.5,292.6,292.7,
-292.8,292.9, 293,
-293.1,293.2,293.3,
-293.4,293.5,293.6,
- 1,293.7,293.8,
-293.9, 294,294.1,
-294.2,294.3,294.4,
-294.5,294.6,294.7,
-294.8,294.9, 295,
-295.1,295.2,295.3,
-295.4,295.5,295.6,
-295.7,295.8,295.9,
- -1, 296,296.1,
-296.2,296.3,296.4,
-296.5,296.6,296.7,
-296.8,296.9, 297,
-297.1,297.2,297.3,
-297.4,297.5,297.6,
-297.7,297.8,297.9,
- 298,298.1,298.2,
-298.3,298.4,298.5,
-298.6,298.7,298.8,
-298.9, 299,299.1,
-299.2,299.3,299.4,
-299.5,299.6,299.7,
-299.8, 1,299.9,
- 300,300.1,300.2,
-300.3,300.4,300.5,
-300.6,300.7,300.8,
-300.9, 301,301.1,
-301.2,301.3,301.4,
-301.5,301.6,301.7,
-301.8,301.9, 302,
-302.1, -1,302.2,
-302.3,302.4,302.5,
-302.6,302.7,302.8,
-302.9, 303,303.1,
-303.2,303.3,303.4,
-303.5,303.6,303.7,
-303.8,303.9, 304,
-304.1,304.2,304.3,
-304.4,304.5,304.6,
-304.7,304.8,304.9,
- 305,305.1,305.2,
-305.3,305.4,305.5,
-305.6,305.7, 1,
-305.8,305.9, 306,
-306.1,306.2,306.3,
-306.4,306.5,306.6,
-306.7,306.8,306.9,
- 307,307.1,307.2,
-307.3,307.4,307.5,
-307.6,307.7,307.8,
-307.9, 308, -1,
-308.1,308.2,308.3,
-308.4,308.5,308.6,
-308.7,308.8,308.9,
- 309,309.1,309.2,
-309.3,309.4,309.5,
-309.6,309.7,309.8,
-309.9, 310,310.1,
-310.2,310.3,310.4,
-310.5,310.6,310.7,
-310.8,310.9, 311,
-311.1,311.2,311.3,
- 1,311.4,311.5,
-311.6,311.7,311.8,
-311.9, 312,312.1,
-312.2,312.3,312.4,
-312.5,312.6,312.7,
-312.8,312.9, 313,
-313.1,313.2,313.3,
-313.4,313.5,313.6,
- -1,313.7,313.8,
-313.9, 314,314.1,
-314.2,314.3,314.4,
-314.5,314.6,314.7,
-314.8,314.9, 315,
-315.1,315.2,315.3,
-315.4,315.5,315.6,
-315.7,315.8,315.9,
- 316,316.1,316.2,
-316.3,316.4,316.5,
-316.6,316.7,316.8,
-316.9, 317,317.1,
-317.2,317.3,317.4,
-317.5, 1,317.6,
-317.7,317.8,317.9,
- 318,318.1,318.2,
-318.3,318.4,318.5,
-318.6,318.7,318.8,
-318.9, 319,319.1,
-319.2,319.3,319.4,
-319.5,319.6,319.7,
-319.8, -1,319.9,
- 320,320.1,320.2,
-320.3,320.4,320.5,
-320.6,320.7,320.8,
-320.9, 321,321.1,
-321.2,321.3,321.4,
-321.5,321.6,321.7,
-321.8,321.9, 322,
-322.1,322.2,322.3,
-322.4,322.5,322.6,
-322.7,322.8,322.9,
- 323,323.1,323.2,
-323.3,323.4, 1,
-323.5,323.6,323.7,
-323.8,323.9, 324,
-324.1,324.2,324.3,
-324.4,324.5,324.6,
-324.7,324.8,324.9,
- 325,325.1,325.2,
-325.3,325.4,325.5,
-325.6,325.7, -1,
-325.8,325.9, 326,
-326.1,326.2,326.3,
-326.4,326.5,326.6,
-326.7,326.8,326.9,
- 327,327.1,327.2,
-327.3,327.4,327.5,
-327.6,327.7,327.8,
-327.9, 328,328.1,
-328.2,328.3,328.4,
-328.5,328.6,328.7,
-328.8,328.9, 329,
- 1,329.1,329.2,
-329.3,329.4,329.5,
-329.6,329.7,329.8,
-329.9, 330,330.1,
-330.2,330.3,330.4,
-330.5,330.6,330.7,
-330.8,330.9, 331,
-331.1,331.2,331.3,
- -1,331.4,331.5,
-331.6,331.7,331.8,
-331.9, 332,332.1,
-332.2,332.3,332.4,
-332.5,332.6,332.7,
-332.8,332.9, 333,
-333.1,333.2,333.3,
-333.4,333.5,333.6,
-333.7,333.8,333.9,
- 334,334.1,334.2,
-334.3,334.4,334.5,
-334.6,334.7,334.8,
-334.9, 335,335.1,
-335.2, 1,335.3,
-335.4,335.5,335.6,
-335.7,335.8,335.9,
- 336,336.1,336.2,
-336.3,336.4,336.5,
-336.6,336.7,336.8,
-336.9, 337,337.1,
-337.2,337.3,337.4,
-337.5, -1,337.6,
-337.7,337.8,337.9,
- 338,338.1,338.2,
-338.3,338.4,338.5,
-338.6,338.7,338.8,
-338.9, 339,339.1,
-339.2,339.3,339.4,
-339.5,339.6,339.7,
-339.8,339.9, 340,
-340.1,340.2,340.3,
-340.4,340.5,340.6,
-340.7,340.8,340.9,
- 341,341.1, 1,
-341.2,341.3,341.4,
-341.5,341.6,341.7,
-341.8,341.9, 342,
-342.1,342.2,342.3,
-342.4,342.5,342.6,
-342.7,342.8,342.9,
- 343,343.1,343.2,
-343.3,343.4, -1,
-343.5,343.6,343.7,
-343.8,343.9, 344,
-344.1,344.2,344.3,
-344.4,344.5,344.6,
-344.7,344.8,344.9,
- 345,345.1,345.2,
-345.3,345.4,345.5,
-345.6,345.7,345.8,
-345.9, 346,346.1,
-346.2,346.3,346.4,
-346.5,346.6,346.7,
- 1,346.8,346.9,
- 347,347.1,347.2,
-347.3,347.4,347.5,
-347.6,347.7,347.8,
-347.9, 348,348.1,
-348.2,348.3,348.4,
-348.5,348.6,348.7,
-348.8,348.9, 349,
- -1,349.1,349.2,
-349.3,349.4,349.5,
-349.6,349.7,349.8,
-349.9, 350,350.1,
-350.2,350.3,350.4,
+ 3.0, 4.1, 1.2, // 2y
+ 3.3, 6.4, 4.5,
+ 3.6, 3.7, 6.8,
+ 3.9, 7.0, 6.1,
+ 3.2, 5.3, 3.4,
+ 1.5, 4.6, 2.7,
+ 2.8, 3.9, 2.0,
+ 2.1, 6.2, 2.3,
+ 1.4, 6.5, 2.6,
+ 1.7, 9.8, 2.9,
+ 1.0, 5.1, 3.2,
+ 1.3, 3.4, 3.5,
+ 2.6, 2.7, 3.8,
+ 2.9, 4.0, 4.1,
+ 2.2, 4.3, 4.4,
+ 3.5, 4.6, 4.7,
+ 3.8, 4.9, 5.0,
+ 4.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 7.7, 5.8, 5.9,
+ 3.0, 4.1, 1.2, // 2z
+ 3.3, 6.4, 4.5,
+ 3.6, 3.7, 6.8,
+ 3.9, 7.0, 6.1,
+ 3.2, 5.3, 3.4,
+ 1.5, 4.6, 2.7,
+ 2.8, 3.9, 2.0,
+ 2.1, 6.2, 2.3,
+ 1.4, 6.5, 2.6,
+ 1.7, 9.8, 2.9,
+ 1.0, 5.1, 3.2,
+ 1.3, 3.4, 3.5,
+ 2.6, 2.7, 3.8,
+ 2.9, 4.0, 4.1,
+ 2.2, 4.3, 4.4,
+ 3.5, 4.6, 4.7,
+ 3.8, 4.9, 5.0,
+ 4.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 7.7, 5.8, 5.9,
+ 1.0, 0.1, 0.2, // 3x
+ 0.3, 0.4, 0.5,
+ 0.6, 0.7, 0.8,
+ 0.9, 1.0, 1.1,
+ 1.2, 1.3, 1.4,
+ 1.5, 1.6, 1.7,
+ 1.8, 1.9, 2.0,
+ 2.1, 2.2, 2.3,
+ 2.4, 2.5, 2.6,
+ 2.7, 2.8, 2.9,
+ 3.0, 3.1, 3.2,
+ 3.3, 3.4, 3.5,
+ 3.6, 3.7, 3.8,
+ 3.9, 4.0, 4.1,
+ 4.2, 4.3, 4.4,
+ 4.5, 4.6, 4.7,
+ 4.8, 4.9, 5.0,
+ 5.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 5.7, 5.8, 5.9,
+ 3.0, 4.1, 1.2, // 3y
+ 3.3, 6.4, 4.5,
+ 3.6, 3.7, 6.8,
+ 3.9, 7.0, 6.1,
+ 3.2, 5.3, 3.4,
+ 1.5, 4.6, 2.7,
+ 2.8, 3.9, 2.0,
+ 2.1, 6.2, 2.3,
+ 1.4, 6.5, 2.6,
+ 1.7, 9.8, 2.9,
+ 1.0, 5.1, 3.2,
+ 1.3, 3.4, 3.5,
+ 2.6, 2.7, 3.8,
+ 2.9, 4.0, 4.1,
+ 2.2, 4.3, 4.4,
+ 3.5, 4.6, 4.7,
+ 3.8, 4.9, 5.0,
+ 4.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 7.7, 5.8, 5.9,
+ 3.0, 4.1, 1.2, // 3z
+ 3.3, 6.4, 4.5,
+ 3.6, 3.7, 6.8,
+ 3.9, 7.0, 6.1,
+ 3.2, 5.3, 3.4,
+ 1.5, 4.6, 2.7,
+ 2.8, 3.9, 2.0,
+ 2.1, 6.2, 2.3,
+ 1.4, 6.5, 2.6,
+ 1.7, 9.8, 2.9,
+ 1.0, 5.1, 3.2,
+ 1.3, 3.4, 3.5,
+ 2.6, 2.7, 3.8,
+ 2.9, 4.0, 4.1,
+ 2.2, 4.3, 4.4,
+ 3.5, 4.6, 4.7,
+ 3.8, 4.9, 5.0,
+ 4.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 7.7, 5.8, 5.9,
+ 1.0, 0.1, 0.2, // 4x
+ 0.3, 0.4, 0.5,
+ 0.6, 0.7, 0.8,
+ 0.9, 1.0, 1.1,
+ 1.2, 1.3, 1.4,
+ 1.5, 1.6, 1.7,
+ 1.8, 1.9, 2.0,
+ 2.1, 2.2, 2.3,
+ 2.4, 2.5, 2.6,
+ 2.7, 2.8, 2.9,
+ 3.0, 3.1, 3.2,
+ 3.3, 3.4, 3.5,
+ 3.6, 3.7, 3.8,
+ 3.9, 4.0, 4.1,
+ 4.2, 4.3, 4.4,
+ 4.5, 4.6, 4.7,
+ 4.8, 4.9, 5.0,
+ 5.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 5.7, 5.8, 5.9,
+ 3.0, 4.1, 1.2, // 4y
+ 3.3, 6.4, 4.5,
+ 3.6, 3.7, 6.8,
+ 3.9, 7.0, 6.1,
+ 3.2, 5.3, 3.4,
+ 1.5, 4.6, 2.7,
+ 2.8, 3.9, 2.0,
+ 2.1, 6.2, 2.3,
+ 1.4, 6.5, 2.6,
+ 1.7, 9.8, 2.9,
+ 1.0, 5.1, 3.2,
+ 1.3, 3.4, 3.5,
+ 2.6, 2.7, 3.8,
+ 2.9, 4.0, 4.1,
+ 2.2, 4.3, 4.4,
+ 3.5, 4.6, 4.7,
+ 3.8, 4.9, 5.0,
+ 4.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 7.7, 5.8, 5.9,
+ 3.0, 4.1, 1.2, // 4z
+ 3.3, 6.4, 4.5,
+ 3.6, 3.7, 6.8,
+ 3.9, 7.0, 6.1,
+ 3.2, 5.3, 3.4,
+ 1.5, 4.6, 2.7,
+ 2.8, 3.9, 2.0,
+ 2.1, 6.2, 2.3,
+ 1.4, 6.5, 2.6,
+ 1.7, 9.8, 2.9,
+ 1.0, 5.1, 3.2,
+ 1.3, 3.4, 3.5,
+ 2.6, 2.7, 3.8,
+ 2.9, 4.0, 4.1,
+ 2.2, 4.3, 4.4,
+ 3.5, 4.6, 4.7,
+ 3.8, 4.9, 5.0,
+ 4.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 7.7, 5.8, 5.9,
+ 1.0, 0.1, 0.2, // 5x
+ 0.3, 0.4, 0.5,
+ 0.6, 0.7, 0.8,
+ 0.9, 1.0, 1.1,
+ 1.2, 1.3, 1.4,
+ 1.5, 1.6, 1.7,
+ 1.8, 1.9, 2.0,
+ 2.1, 2.2, 2.3,
+ 2.4, 2.5, 2.6,
+ 2.7, 2.8, 2.9,
+ 3.0, 3.1, 3.2,
+ 3.3, 3.4, 3.5,
+ 3.6, 3.7, 3.8,
+ 3.9, 4.0, 4.1,
+ 4.2, 4.3, 4.4,
+ 4.5, 4.6, 4.7,
+ 4.8, 4.9, 5.0,
+ 5.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 5.7, 5.8, 5.9,
+ 3.0, 4.1, 1.2, // 5y
+ 3.3, 6.4, 4.5,
+ 3.6, 3.7, 6.8,
+ 3.9, 7.0, 6.1,
+ 3.2, 5.3, 3.4,
+ 1.5, 4.6, 2.7,
+ 2.8, 3.9, 2.0,
+ 2.1, 6.2, 2.3,
+ 1.4, 6.5, 2.6,
+ 1.7, 9.8, 2.9,
+ 1.0, 5.1, 3.2,
+ 1.3, 3.4, 3.5,
+ 2.6, 2.7, 3.8,
+ 2.9, 4.0, 4.1,
+ 2.2, 4.3, 4.4,
+ 3.5, 4.6, 4.7,
+ 3.8, 4.9, 5.0,
+ 4.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 7.7, 5.8, 5.9,
+ 3.0, 4.1, 1.2, // 5z
+ 3.3, 6.4, 4.5,
+ 3.6, 3.7, 6.8,
+ 3.9, 7.0, 6.1,
+ 3.2, 5.3, 3.4,
+ 1.5, 4.6, 2.7,
+ 2.8, 3.9, 2.0,
+ 2.1, 6.2, 2.3,
+ 1.4, 6.5, 2.6,
+ 1.7, 9.8, 2.9,
+ 1.0, 5.1, 3.2,
+ 1.3, 3.4, 3.5,
+ 2.6, 2.7, 3.8,
+ 2.9, 4.0, 4.1,
+ 2.2, 4.3, 4.4,
+ 3.5, 4.6, 4.7,
+ 3.8, 4.9, 5.0,
+ 4.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 7.7, 5.8, 5.9,
+ 1.0, 0.1, 0.2, // 6x
+ 0.3, 0.4, 0.5,
+ 0.6, 0.7, 0.8,
+ 0.9, 1.0, 1.1,
+ +6.0, -0.5, -0.6, // 6
+ -0.7, -0.8, -0.9, // 7
+ -1.0, -0.8, -0.7, // 8
+ -0.6, -0.5, -0.4, // 9
+ 2.4, 2.5, 2.6,
+ 2.7, 2.8, 2.9,
+ 3.0, 3.1, 3.2,
+ 3.3, 3.4, 3.5,
+ 3.6, 3.7, 3.8,
+ 3.9, 4.0, 4.1,
+ 4.2, 4.3, 4.4,
+ 4.5, 4.6, 4.7,
+ 4.8, 4.9, 5.0,
+ 5.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 5.7, 5.8, 5.9,
+ 3.0, 4.1, 1.2, // 6y
+ 3.3, 6.4, 4.5,
+ 3.6, 3.7, 6.8,
+ 3.9, 7.0, 6.1,
+ -0.5, +6.1, -1.0, // 6
+ -1.1, -1.2, -1.3, // 7
+ -1.4, -1.3, -1.2, // 8
+ -1.1, -1.0, -0.9, // 9
+ 1.4, 6.5, 2.6,
+ 1.7, 9.8, 2.9,
+ 1.0, 5.1, 3.2,
+ 1.3, 3.4, 3.5,
+ 2.6, 2.7, 3.8,
+ 2.9, 4.0, 4.1,
+ 2.2, 4.3, 4.4,
+ 3.5, 4.6, 4.7,
+ 3.8, 4.9, 5.0,
+ 4.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 7.7, 5.8, 5.9,
+ 3.0, 4.1, 1.2, // 6z
+ 3.3, 6.4, 4.5,
+ 3.6, 3.7, 6.8,
+ 3.9, 7.0, 6.1,
+ -0.6, -1.0, +6.2, // 6
+ -0.5, -0.6, -0.7, // 7
+ -0.8, -0.9, -0.8, // 8
+ -0.7, -0.6, -0.5, // 9
+ 1.4, 6.5, 2.6,
+ 1.7, 9.8, 2.9,
+ 1.0, 5.1, 3.2,
+ 1.3, 3.4, 3.5,
+ 2.6, 2.7, 3.8,
+ 2.9, 4.0, 4.1,
+ 2.2, 4.3, 4.4,
+ 3.5, 4.6, 4.7,
+ 3.8, 4.9, 5.0,
+ 4.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 7.7, 5.8, 5.9,
+ 1.0, 0.1, 0.2, // 7x
+ 0.3, 0.4, 0.5,
+ 0.6, 0.7, 0.8,
+ 0.9, 1.0, 1.1,
+ -0.7, -1.1, -0.5, // 6
+ +6.3, -0.8, -0.7, // 7
+ -0.6, -0.5, -0.4, // 8
+ -0.3, -0.2, -0.1, // 9
+ 2.4, 2.5, 2.6,
+ 2.7, 2.8, 2.9,
+ 3.0, 3.1, 3.2,
+ 3.3, 3.4, 3.5,
+ 3.6, 3.7, 3.8,
+ 3.9, 4.0, 4.1,
+ 4.2, 4.3, 4.4,
+ 4.5, 4.6, 4.7,
+ 4.8, 4.9, 5.0,
+ 5.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 5.7, 5.8, 5.9,
+ 3.0, 4.1, 1.2, // 7y
+ 3.3, 6.4, 4.5,
+ 3.6, 3.7, 6.8,
+ 3.9, 7.0, 6.1,
+ -0.8, -1.2, -0.6, // 6
+ -0.8, +6.4, -0.3, // 7
+ -0.4, -0.5, -0.6, // 8
+ -0.7, -0.8, -0.9, // 9
+ 1.4, 6.5, 2.6,
+ 1.7, 9.8, 2.9,
+ 1.0, 5.1, 3.2,
+ 1.3, 3.4, 3.5,
+ 2.6, 2.7, 3.8,
+ 2.9, 4.0, 4.1,
+ 2.2, 4.3, 4.4,
+ 3.5, 4.6, 4.7,
+ 3.8, 4.9, 5.0,
+ 4.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 7.7, 5.8, 5.9,
+ 3.0, 4.1, 1.2, // 7z
+ 3.3, 6.4, 4.5,
+ 3.6, 3.7, 6.8,
+ 3.9, 7.0, 6.1,
+ -0.9, -1.3, -0.7, // 6
+ -0.7, -0.3, +6.5, // 7
+ -0.3, -0.8, -0.7, // 8
+ -0.6, -0.9, -0.7, // 9
+ 1.4, 6.5, 2.6,
+ 1.7, 9.8, 2.9,
+ 1.0, 5.1, 3.2,
+ 1.3, 3.4, 3.5,
+ 2.6, 2.7, 3.8,
+ 2.9, 4.0, 4.1,
+ 2.2, 4.3, 4.4,
+ 3.5, 4.6, 4.7,
+ 3.8, 4.9, 5.0,
+ 4.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 7.7, 5.8, 5.9,
+ 1.0, 0.1, 0.2, // 8x
+ 0.3, 0.4, 0.5,
+ 0.6, 0.7, 0.8,
+ 0.9, 1.0, 1.1,
+ -1.0, -1.4, -0.8, // 6
+ -0.6, -0.4, -0.3, // 7
+ +6.6, -1.1, -0.8, // 8
+ -0.7, -0.6, -0.5, // 9
+ 2.4, 2.5, 2.6,
+ 2.7, 2.8, 2.9,
+ 3.0, 3.1, 3.2,
+ 3.3, 3.4, 3.5,
+ 3.6, 3.7, 3.8,
+ 3.9, 4.0, 4.1,
+ 4.2, 4.3, 4.4,
+ 4.5, 4.6, 4.7,
+ 4.8, 4.9, 5.0,
+ 5.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 5.7, 5.8, 5.9,
+ 3.0, 4.1, 1.2, // 8y
+ 3.3, 6.4, 4.5,
+ 3.6, 3.7, 6.8,
+ 3.9, 7.0, 6.1,
+ -0.8, -1.3, -0.9, // 6
+ -0.5, -0.5, -0.8, // 7
+ -1.1, +6.7, -0.8, // 8
+ -0.9, -1.0, -1.1, // 9
+ 1.4, 6.5, 2.6,
+ 1.7, 9.8, 2.9,
+ 1.0, 5.1, 3.2,
+ 1.3, 3.4, 3.5,
+ 2.6, 2.7, 3.8,
+ 2.9, 4.0, 4.1,
+ 2.2, 4.3, 4.4,
+ 3.5, 4.6, 4.7,
+ 3.8, 4.9, 5.0,
+ 4.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 7.7, 5.8, 5.9,
+ 3.0, 4.1, 1.2, // 8z
+ 3.3, 6.4, 4.5,
+ 3.6, 3.7, 6.8,
+ 3.9, 7.0, 6.1,
+ -0.7, -1.2, -0.8, // 6
+ -0.4, -0.6, -0.7, // 7
+ -0.8, -0.8, +6.8, // 8
+ -1.0, -1.1, -1.2, // 9
+ 1.4, 6.5, 2.6,
+ 1.7, 9.8, 2.9,
+ 1.0, 5.1, 3.2,
+ 1.3, 3.4, 3.5,
+ 2.6, 2.7, 3.8,
+ 2.9, 4.0, 4.1,
+ 2.2, 4.3, 4.4,
+ 3.5, 4.6, 4.7,
+ 3.8, 4.9, 5.0,
+ 4.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 7.7, 5.8, 5.9,
+ 1.0, 0.1, 0.2, // 9x
+ 0.3, 0.4, 0.5,
+ 0.6, 0.7, 0.8,
+ 0.9, 1.0, 1.1,
+ -0.6, -1.1, -0.7, // 6
+ -0.3, -0.7, -0.6, // 7
+ -0.7, -0.9, -1.0, // 8
+ +6.9, -0.5, -0.4, // 9
+ 2.4, 2.5, 2.6,
+ 2.7, 2.8, 2.9,
+ 3.0, 3.1, 3.2,
+ 3.3, 3.4, 3.5,
+ 3.6, 3.7, 3.8,
+ 3.9, 4.0, 4.1,
+ 4.2, 4.3, 4.4,
+ 4.5, 4.6, 4.7,
+ 4.8, 4.9, 5.0,
+ 5.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 5.7, 5.8, 5.9,
+ 3.0, 4.1, 1.2, // 9y
+ 3.3, 6.4, 4.5,
+ 3.6, 3.7, 6.8,
+ 3.9, 7.0, 6.1,
+ -0.5, -1.0, -0.6, // 6
+ -0.2, -0.8, -0.9, // 7
+ -0.6, -1.0, -1.1, // 8
+ -0.5, +6.0, -1.2, // 9
+ 1.4, 6.5, 2.6,
+ 1.7, 9.8, 2.9,
+ 1.0, 5.1, 3.2,
+ 1.3, 3.4, 3.5,
+ 2.6, 2.7, 3.8,
+ 2.9, 4.0, 4.1,
+ 2.2, 4.3, 4.4,
+ 3.5, 4.6, 4.7,
+ 3.8, 4.9, 5.0,
+ 4.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 7.7, 5.8, 5.9,
+ 3.0, 4.1, 1.2, // 9z
+ 3.3, 6.4, 4.5,
+ 3.6, 3.7, 6.8,
+ 3.9, 7.0, 6.1,
+ -0.4, -0.9, -0.5, // 6
+ -0.1, -0.9, -0.7, // 7
+ -0.5, -1.1, -1.2, // 8
+ -0.4, -1.2, +6.1, // 9
+ 1.4, 6.5, 2.6,
+ 1.7, 9.8, 2.9,
+ 1.0, 5.1, 3.2,
+ 1.3, 3.4, 3.5,
+ 2.6, 2.7, 3.8,
+ 2.9, 4.0, 4.1,
+ 2.2, 4.3, 4.4,
+ 3.5, 4.6, 4.7,
+ 3.8, 4.9, 5.0,
+ 4.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 7.7, 5.8, 5.9,
+ 1.0, 0.1, 0.2, // 10x
+ 0.3, 0.4, 0.5,
+ 0.6, 0.7, 0.8,
+ 0.9, 1.0, 1.1,
+ 1.2, 1.3, 1.4,
+ 1.5, 1.6, 1.7,
+ 1.8, 1.9, 2.0,
+ 2.1, 2.2, 2.3,
+ 2.4, 2.5, 2.6,
+ 2.7, 2.8, 2.9,
+ 3.0, 3.1, 3.2,
+ 3.3, 3.4, 3.5,
+ 3.6, 3.7, 3.8,
+ 3.9, 4.0, 4.1,
+ 4.2, 4.3, 4.4,
+ 4.5, 4.6, 4.7,
+ 4.8, 4.9, 5.0,
+ 5.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 5.7, 5.8, 5.9,
+ 3.0, 4.1, 1.2, // 10y
+ 3.3, 6.4, 4.5,
+ 3.6, 3.7, 6.8,
+ 3.9, 7.0, 6.1,
+ 3.2, 5.3, 3.4,
+ 1.5, 4.6, 2.7,
+ 2.8, 3.9, 2.0,
+ 2.1, 6.2, 2.3,
+ 1.4, 6.5, 2.6,
+ 1.7, 9.8, 2.9,
+ 1.0, 5.1, 3.2,
+ 1.3, 3.4, 3.5,
+ 2.6, 2.7, 3.8,
+ 2.9, 4.0, 4.1,
+ 2.2, 4.3, 4.4,
+ 3.5, 4.6, 4.7,
+ 3.8, 4.9, 5.0,
+ 4.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 7.7, 5.8, 5.9,
+ 3.0, 4.1, 1.2, // 10z
+ 3.3, 6.4, 4.5,
+ 3.6, 3.7, 6.8,
+ 3.9, 7.0, 6.1,
+ 3.2, 5.3, 3.4,
+ 1.5, 4.6, 2.7,
+ 2.8, 3.9, 2.0,
+ 2.1, 6.2, 2.3,
+ 1.4, 6.5, 2.6,
+ 1.7, 9.8, 2.9,
+ 1.0, 5.1, 3.2,
+ 1.3, 3.4, 3.5,
+ 2.6, 2.7, 3.8,
+ 2.9, 4.0, 4.1,
+ 2.2, 4.3, 4.4,
+ 3.5, 4.6, 4.7,
+ 3.8, 4.9, 5.0,
+ 4.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 7.7, 5.8, 5.9,
+ 1.0, 0.1, 0.2, // 11x
+ 0.3, 0.4, 0.5,
+ 0.6, 0.7, 0.8,
+ 0.9, 1.0, 1.1,
+ 1.2, 1.3, 1.4,
+ 1.5, 1.6, 1.7,
+ 1.8, 1.9, 2.0,
+ 2.1, 2.2, 2.3,
+ 2.4, 2.5, 2.6,
+ 2.7, 2.8, 2.9,
+ 3.0, 3.1, 3.2,
+ 3.3, 3.4, 3.5,
+ 3.6, 3.7, 3.8,
+ 3.9, 4.0, 4.1,
+ 4.2, 4.3, 4.4,
+ 4.5, 4.6, 4.7,
+ 4.8, 4.9, 5.0,
+ 5.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 5.7, 5.8, 5.9,
+ 3.0, 4.1, 1.2, // 11y
+ 3.3, 6.4, 4.5,
+ 3.6, 3.7, 6.8,
+ 3.9, 7.0, 6.1,
+ 3.2, 5.3, 3.4,
+ 1.5, 4.6, 2.7,
+ 2.8, 3.9, 2.0,
+ 2.1, 6.2, 2.3,
+ 1.4, 6.5, 2.6,
+ 1.7, 9.8, 2.9,
+ 1.0, 5.1, 3.2,
+ 1.3, 3.4, 3.5,
+ 2.6, 2.7, 3.8,
+ 2.9, 4.0, 4.1,
+ 2.2, 4.3, 4.4,
+ 3.5, 4.6, 4.7,
+ 3.8, 4.9, 5.0,
+ 4.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 7.7, 5.8, 5.9,
+ 3.0, 4.1, 1.2, // 11z
+ 3.3, 6.4, 4.5,
+ 3.6, 3.7, 6.8,
+ 3.9, 7.0, 6.1,
+ 3.2, 5.3, 3.4,
+ 1.5, 4.6, 2.7,
+ 2.8, 3.9, 2.0,
+ 2.1, 6.2, 2.3,
+ 1.4, 6.5, 2.6,
+ 1.7, 9.8, 2.9,
+ 1.0, 5.1, 3.2,
+ 1.3, 3.4, 3.5,
+ 2.6, 2.7, 3.8,
+ 2.9, 4.0, 4.1,
+ 2.2, 4.3, 4.4,
+ 3.5, 4.6, 4.7,
+ 3.8, 4.9, 5.0,
+ 4.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 7.7, 5.8, 5.9,
+ 1.0, 0.1, 0.2, // 12x
+ 0.3, 0.4, 0.5,
+ 0.6, 0.7, 0.8,
+ 0.9, 1.0, 1.1,
+ 1.2, 1.3, 1.4,
+ 1.5, 1.6, 1.7,
+ 1.8, 1.9, 2.0,
+ 2.1, 2.2, 2.3,
+ 2.4, 2.5, 2.6,
+ 2.7, 2.8, 2.9,
+ 3.0, 3.1, 3.2,
+ 3.3, 3.4, 3.5,
+ 3.6, 3.7, 3.8,
+ 3.9, 4.0, 4.1,
+ 4.2, 4.3, 4.4,
+ 4.5, 4.6, 4.7,
+ 4.8, 4.9, 5.0,
+ 5.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 5.7, 5.8, 5.9,
+ 3.0, 4.1, 1.2, // 12y
+ 3.3, 6.4, 4.5,
+ 3.6, 3.7, 6.8,
+ 3.9, 7.0, 6.1,
+ 3.2, 5.3, 3.4,
+ 1.5, 4.6, 2.7,
+ 2.8, 3.9, 2.0,
+ 2.1, 6.2, 2.3,
+ 1.4, 6.5, 2.6,
+ 1.7, 9.8, 2.9,
+ 1.0, 5.1, 3.2,
+ 1.3, 3.4, 3.5,
+ 2.6, 2.7, 3.8,
+ 2.9, 4.0, 4.1,
+ 2.2, 4.3, 4.4,
+ 3.5, 4.6, 4.7,
+ 3.8, 4.9, 5.0,
+ 4.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 7.7, 5.8, 5.9,
+ 3.0, 4.1, 1.2, // 12z
+ 3.3, 6.4, 4.5,
+ 3.6, 3.7, 6.8,
+ 3.9, 7.0, 6.1,
+ 3.2, 5.3, 3.4,
+ 1.5, 4.6, 2.7,
+ 2.8, 3.9, 2.0,
+ 2.1, 6.2, 2.3,
+ 1.4, 6.5, 2.6,
+ 1.7, 9.8, 2.9,
+ 1.0, 5.1, 3.2,
+ 1.3, 3.4, 3.5,
+ 2.6, 2.7, 3.8,
+ 2.9, 4.0, 4.1,
+ 2.2, 4.3, 4.4,
+ 3.5, 4.6, 4.7,
+ 3.8, 4.9, 5.0,
+ 4.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 7.7, 5.8, 5.9,
+ 1.0, 0.1, 0.2, // 13x
+ 0.3, 0.4, 0.5,
+ 0.6, 0.7, 0.8,
+ 0.9, 1.0, 1.1,
+ 1.2, 1.3, 1.4,
+ 1.5, 1.6, 1.7,
+ 1.8, 1.9, 2.0,
+ 2.1, 2.2, 2.3,
+ 2.4, 2.5, 2.6,
+ 2.7, 2.8, 2.9,
+ 3.0, 3.1, 3.2,
+ 3.3, 3.4, 3.5,
+ 3.6, 3.7, 3.8,
+ 3.9, 4.0, 4.1,
+ 4.2, 4.3, 4.4,
+ 4.5, 4.6, 4.7,
+ 4.8, 4.9, 5.0,
+ 5.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 5.7, 5.8, 5.9,
+ 3.0, 4.1, 1.2, // 13y
+ 3.3, 6.4, 4.5,
+ 3.6, 3.7, 6.8,
+ 3.9, 7.0, 6.1,
+ 3.2, 5.3, 3.4,
+ 1.5, 4.6, 2.7,
+ 2.8, 3.9, 2.0,
+ 2.1, 6.2, 2.3,
+ 1.4, 6.5, 2.6,
+ 1.7, 9.8, 2.9,
+ 1.0, 5.1, 3.2,
+ 1.3, 3.4, 3.5,
+ 2.6, 2.7, 3.8,
+ 2.9, 4.0, 4.1,
+ 2.2, 4.3, 4.4,
+ 3.5, 4.6, 4.7,
+ 3.8, 4.9, 5.0,
+ 4.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 7.7, 5.8, 5.9,
+ 3.0, 4.1, 1.2, // 13z
+ 3.3, 6.4, 4.5,
+ 3.6, 3.7, 6.8,
+ 3.9, 7.0, 6.1,
+ 3.2, 5.3, 3.4,
+ 1.5, 4.6, 2.7,
+ 2.8, 3.9, 2.0,
+ 2.1, 6.2, 2.3,
+ 1.4, 6.5, 2.6,
+ 1.7, 9.8, 2.9,
+ 1.0, 5.1, 3.2,
+ 1.3, 3.4, 3.5,
+ 2.6, 2.7, 3.8,
+ 2.9, 4.0, 4.1,
+ 2.2, 4.3, 4.4,
+ 3.5, 4.6, 4.7,
+ 3.8, 4.9, 5.0,
+ 4.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 7.7, 5.8, 5.9,
+ 1.0, 0.1, 0.2, // 14x
+ 0.3, 0.4, 0.5,
+ 0.6, 0.7, 0.8,
+ 0.9, 1.0, 1.1,
+ 2.4, 2.5, 2.6,
+ 2.7, 2.8, 2.9,
+ 3.0, 3.1, 3.2,
+ 3.3, 3.4, 3.5,
+ 3.6, 3.7, 3.8,
+ 3.9, 4.0, 4.1,
+ 4.2, 4.3, 4.4,
+ 4.5, 4.6, 4.7,
+ +7.0, -0.5, -0.6, // 14
+ -0.7, -0.8, -0.9, // 15
+ -1.0, -0.8, -0.7, // 16
+ -0.6, -0.5, -0.4, // 17
+ 4.8, 4.9, 5.0,
+ 5.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 5.7, 5.8, 5.9,
+ 3.0, 4.1, 1.2, // 14y
+ 3.3, 6.4, 4.5,
+ 3.6, 3.7, 6.8,
+ 3.9, 7.0, 6.1,
+ 1.4, 6.5, 2.6,
+ 1.7, 9.8, 2.9,
+ 1.0, 5.1, 3.2,
+ 1.3, 3.4, 3.5,
+ 2.6, 2.7, 3.8,
+ 2.9, 4.0, 4.1,
+ 2.2, 4.3, 4.4,
+ 3.5, 4.6, 4.7,
+ -0.5, +7.1, -1.0, // 14
+ -1.1, -1.2, -1.3, // 15
+ -1.4, -1.3, -1.2, // 16
+ -1.1, -1.0, -0.9, // 17
+ 3.8, 4.9, 5.0,
+ 4.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 7.7, 5.8, 5.9,
+ 3.0, 4.1, 1.2, // 14z
+ 3.3, 6.4, 4.5,
+ 3.6, 3.7, 6.8,
+ 3.9, 7.0, 6.1,
+ 1.4, 6.5, 2.6,
+ 1.7, 9.8, 2.9,
+ 1.0, 5.1, 3.2,
+ 1.3, 3.4, 3.5,
+ 2.6, 2.7, 3.8,
+ 2.9, 4.0, 4.1,
+ 2.2, 4.3, 4.4,
+ 3.5, 4.6, 4.7,
+ -0.6, -1.0, +7.2, // 14
+ -0.5, -0.6, -0.7, // 15
+ -0.8, -0.9, -0.8, // 16
+ -0.7, -0.6, -0.5, // 17
+ 3.8, 4.9, 5.0,
+ 4.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 7.7, 5.8, 5.9,
+ 1.0, 0.1, 0.2, // 15x
+ 0.3, 0.4, 0.5,
+ 0.6, 0.7, 0.8,
+ 0.9, 1.0, 1.1,
+ 2.4, 2.5, 2.6,
+ 2.7, 2.8, 2.9,
+ 3.0, 3.1, 3.2,
+ 3.3, 3.4, 3.5,
+ 3.6, 3.7, 3.8,
+ 3.9, 4.0, 4.1,
+ 4.2, 4.3, 4.4,
+ 4.5, 4.6, 4.7,
+ -0.7, -1.1, -0.5, // 14
+ +7.3, -0.8, -0.7, // 15
+ -0.6, -0.5, -0.4, // 16
+ -0.3, -0.2, -0.1, // 17
+ 4.8, 4.9, 5.0,
+ 5.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 5.7, 5.8, 5.9,
+ 3.0, 4.1, 1.2, // 15y
+ 3.3, 6.4, 4.5,
+ 3.6, 3.7, 6.8,
+ 3.9, 7.0, 6.1,
+ 1.4, 6.5, 2.6,
+ 1.7, 9.8, 2.9,
+ 1.0, 5.1, 3.2,
+ 1.3, 3.4, 3.5,
+ 2.6, 2.7, 3.8,
+ 2.9, 4.0, 4.1,
+ 2.2, 4.3, 4.4,
+ 3.5, 4.6, 4.7,
+ -0.8, -1.2, -0.6, // 14
+ -0.8, +7.4, -0.3, // 15
+ -0.4, -0.5, -0.6, // 16
+ -0.7, -0.8, -0.9, // 17
+ 3.8, 4.9, 5.0,
+ 4.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 7.7, 5.8, 5.9,
+ 3.0, 4.1, 1.2, // 15z
+ 3.3, 6.4, 4.5,
+ 3.6, 3.7, 6.8,
+ 3.9, 7.0, 6.1,
+ 1.4, 6.5, 2.6,
+ 1.7, 9.8, 2.9,
+ 1.0, 5.1, 3.2,
+ 1.3, 3.4, 3.5,
+ 2.6, 2.7, 3.8,
+ 2.9, 4.0, 4.1,
+ 2.2, 4.3, 4.4,
+ 3.5, 4.6, 4.7,
+ -0.9, -1.3, -0.7, // 14
+ -0.7, -0.3, +7.5, // 15
+ -0.3, -0.8, -0.7, // 16
+ -0.6, -0.9, -0.7, // 17
+ 3.8, 4.9, 5.0,
+ 4.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 7.7, 5.8, 5.9,
+ 1.0, 0.1, 0.2, // 16x
+ 0.3, 0.4, 0.5,
+ 0.6, 0.7, 0.8,
+ 0.9, 1.0, 1.1,
+ 2.4, 2.5, 2.6,
+ 2.7, 2.8, 2.9,
+ 3.0, 3.1, 3.2,
+ 3.3, 3.4, 3.5,
+ 3.6, 3.7, 3.8,
+ 3.9, 4.0, 4.1,
+ 4.2, 4.3, 4.4,
+ 4.5, 4.6, 4.7,
+ -1.0, -1.4, -0.8, // 14
+ -0.6, -0.4, -0.3, // 15
+ +7.6, -1.1, -0.8, // 16
+ -0.7, -0.6, -0.5, // 17
+ 4.8, 4.9, 5.0,
+ 5.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 5.7, 5.8, 5.9,
+ 3.0, 4.1, 1.2, // 16y
+ 3.3, 6.4, 4.5,
+ 3.6, 3.7, 6.8,
+ 3.9, 7.0, 6.1,
+ 1.4, 6.5, 2.6,
+ 1.7, 9.8, 2.9,
+ 1.0, 5.1, 3.2,
+ 1.3, 3.4, 3.5,
+ 2.6, 2.7, 3.8,
+ 2.9, 4.0, 4.1,
+ 2.2, 4.3, 4.4,
+ 3.5, 4.6, 4.7,
+ -0.8, -1.3, -0.9, // 14
+ -0.5, -0.5, -0.8, // 15
+ -1.1, +7.7, -0.8, // 16
+ -0.9, -1.0, -1.1, // 17
+ 3.8, 4.9, 5.0,
+ 4.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 7.7, 5.8, 5.9,
+ 3.0, 4.1, 1.2, // 16z
+ 3.3, 6.4, 4.5,
+ 3.6, 3.7, 6.8,
+ 3.9, 7.0, 6.1,
+ 1.4, 6.5, 2.6,
+ 1.7, 9.8, 2.9,
+ 1.0, 5.1, 3.2,
+ 1.3, 3.4, 3.5,
+ 2.6, 2.7, 3.8,
+ 2.9, 4.0, 4.1,
+ 2.2, 4.3, 4.4,
+ 3.5, 4.6, 4.7,
+ -0.7, -1.2, -0.8, // 14
+ -0.4, -0.6, -0.7, // 15
+ -0.8, -0.8, +7.8, // 16
+ -1.0, -1.1, -1.2, // 17
+ 3.8, 4.9, 5.0,
+ 4.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 7.7, 5.8, 5.9,
+ 1.0, 0.1, 0.2, // 17x
+ 0.3, 0.4, 0.5,
+ 0.6, 0.7, 0.8,
+ 0.9, 1.0, 1.1,
+ 2.4, 2.5, 2.6,
+ 2.7, 2.8, 2.9,
+ 3.0, 3.1, 3.2,
+ 3.3, 3.4, 3.5,
+ 3.6, 3.7, 3.8,
+ 3.9, 4.0, 4.1,
+ 4.2, 4.3, 4.4,
+ 4.5, 4.6, 4.7,
+ -0.6, -1.1, -0.7, // 14
+ -0.3, -0.7, -0.6, // 15
+ -0.7, -0.9, -1.0, // 16
+ +7.9, -0.5, -0.4, // 17
+ 4.8, 4.9, 5.0,
+ 5.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 5.7, 5.8, 5.9,
+ 3.0, 4.1, 1.2, // 17y
+ 3.3, 6.4, 4.5,
+ 3.6, 3.7, 6.8,
+ 3.9, 7.0, 6.1,
+ 1.4, 6.5, 2.6,
+ 1.7, 9.8, 2.9,
+ 1.0, 5.1, 3.2,
+ 1.3, 3.4, 3.5,
+ 2.6, 2.7, 3.8,
+ 2.9, 4.0, 4.1,
+ 2.2, 4.3, 4.4,
+ 3.5, 4.6, 4.7,
+ -0.5, -1.0, -0.6, // 14
+ -0.2, -0.8, -0.9, // 15
+ -0.6, -1.0, -1.1, // 16
+ -0.5, +7.0, -1.2, // 17
+ 3.8, 4.9, 5.0,
+ 4.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 7.7, 5.8, 5.9,
+ 3.0, 4.1, 1.2, // 17z
+ 3.3, 6.4, 4.5,
+ 3.6, 3.7, 6.8,
+ 3.9, 7.0, 6.1,
+ 1.4, 6.5, 2.6,
+ 1.7, 9.8, 2.9,
+ 1.0, 5.1, 3.2,
+ 1.3, 3.4, 3.5,
+ 2.6, 2.7, 3.8,
+ 2.9, 4.0, 4.1,
+ 2.2, 4.3, 4.4,
+ 3.5, 4.6, 4.7,
+ -0.4, -0.9, -0.5, // 14
+ -0.1, -0.9, -0.7, // 15
+ -0.5, -1.1, -1.2, // 16
+ -0.4, -1.2, +7.1, // 17
+ 3.8, 4.9, 5.0,
+ 4.1, 5.2, 5.3,
+ 5.4, 5.5, 5.6,
+ 7.7, 5.8, 5.9,
};
-// ----------------------------------------------------------------------
-// Computed values
-// ----------------------------------------------------------------------
-
const double pylith::faults::CohesiveDynDataHex8::_orientation[] = {
0.0, -1.0, 0.0, 0.0, 0.0, +1.0, -1.0, 0.0, 0.0,
0.0, -1.0, 0.0, 0.0, 0.0, +1.0, -1.0, 0.0, 0.0,
@@ -1345,11 +1099,11 @@
1.0, 1.0, 1.0, 1.0
};
-const double pylith::faults::CohesiveDynDataHex8::_forcesInitial[] = {
- 3.063397471, -1.063397471, +2.063397471,
- 3.121132498, -1.121132498, +2.121132498,
- 3.178867525, -1.178867525, +2.178867525,
- 3.236602552, -1.236602552, +2.236602552,
+const double pylith::faults::CohesiveDynDataHex8::_initialTractions[] = {
+ +3.0, -1.0, +2.0,
+ +3.1, -1.1, +2.1,
+ +3.2, -1.2, +2.2,
+ +3.3, -1.3, +2.3,
};
@@ -1362,26 +1116,26 @@
// ----------------------------------------------------------------------
// Input
const double pylith::faults::CohesiveDynDataHex8::_fieldIncrStick[] = {
- 0.1, 2.1, 28.1,
- 0.2, 2.2, 28.2,
- 0.3, 2.3, 28.3,
- 0.4, 2.4, 28.4,
- 0.5, 2.5, 28.5, // 6
- 0.6, 2.6, 28.6, // 7
- 0.7, 2.7, 28.7, // 8
- 0.8, 2.8, 28.8, // 9
- 0.9, 2.9, 28.9,
- 0.0, 2.0, 28.0,
- 1.1, 3.1, 29.1,
- 1.2, 3.2, 29.2,
- 1.3, 3.3, 29.3, // 14
- 1.5, 3.5, 29.5, // 15
- 1.7, 3.7, 29.7, // 16
- 1.9, 3.9, 29.9, // 17
- 1.4, 3.4, -89.4, // 18
- 1.6, 3.6, -89.6, // 19
- 1.8, 3.8, -89.8, // 20
- 1.0, 3.0, -89.0, // 21
+ 0.1, 2.1, 1.1,
+ 0.2, 2.2, 1.2,
+ 0.3, 2.3, 1.3,
+ 0.4, 2.4, 1.4,
+ 0.5, 2.5, 1.5, // 6
+ 0.6, 2.6, 1.6, // 7
+ 0.7, 2.7, 1.7, // 8
+ 0.8, 2.8, 1.8, // 9
+ 0.9, 2.9, 1.9,
+ 0.0, 2.0, 1.0,
+ 1.1, 3.1, 2.1,
+ 1.2, 3.2, 2.2,
+ 1.3, 3.3, 2.3, // 14
+ 1.5, 3.5, 2.5, // 15
+ 1.7, 3.7, 2.7, // 16
+ 1.9, 3.9, 2.9, // 17
+ 41.4, 3.4, 2.4, // 18
+ 41.6, 3.6, 2.6, // 19
+ 41.8, 3.8, 2.8, // 20
+ 41.0, 3.0, 2.0, // 21
};
// No change in fieldIncr
@@ -1392,57 +1146,57 @@
// ----------------------------------------------------------------------
// Input
const double pylith::faults::CohesiveDynDataHex8::_fieldIncrSlip[] = {
- 5.1, 7.1, 9.1,
- 5.2, 7.2, 9.2,
- 5.3, 7.3, 9.3,
- 5.4, 7.4, 9.4,
- 5.5, 7.5, 9.5, // 6
- 5.6, 7.6, 9.6, // 7
- 5.7, 7.7, 9.7, // 8
- 5.8, 7.8, 9.8, // 9
- 5.9, 7.9, 9.9,
- 5.0, 7.0, 9.0,
- 6.1, 8.1, 10.1,
- 6.2, 8.2, 10.2,
- 6.3, 8.3, 10.3, // 14
- 6.5, 8.5, 10.5, // 15
- 6.7, 8.7, 10.7, // 16
- 6.9, 8.9, 10.9, // 17
- -6.4, -8.4, -10.4, // 18
- -6.6, -8.6, -10.6, // 19
- -6.8, -8.8, -10.8, // 20
- -6.0, -8.0, -10.0, // 21
+ 1.1, 2.1, 0.1,
+ 1.2, 2.2, 0.2,
+ 1.3, 2.3, 0.3,
+ 1.4, 2.4, 0.4,
+ 1.5, 2.5, 0.5, // 6
+ 1.6, 2.6, 0.6, // 7
+ 1.7, 2.7, 0.7, // 8
+ 1.8, 2.8, 0.8, // 9
+ 1.9, 2.9, 0.9,
+ 1.0, 2.0, 0.0,
+ 1.1, 2.1, 0.1,
+ 1.2, 2.2, 0.2,
+ 1.5, 2.5, 0.5, // 14
+ 1.6, 2.6, 0.6, // 15
+ 1.7, 2.7, 0.7, // 16
+ 1.8, 2.8, 0.8, // 17
+ 1.4, 2.4, 0.4, // 18
+ 1.6, 2.6, 0.6, // 19
+ 1.8, 2.8, 0.8, // 20
+ 1.0, 2.0, 0.2, // 21
};
// Output
const double pylith::faults::CohesiveDynDataHex8::_fieldIncrSlipE[] = {
- 5.100000000000, 7.100000000000, 9.100000000000,
- 5.200000000000, 7.200000000000, 9.200000000000,
- 5.300000000000, 7.300000000000, 9.300000000000,
- 5.400000000000, 7.400000000000, 9.400000000000,
- 5.500000000000, 7.504978662071, 9.495178588558,
- 5.600000000000, 7.604183996601, 9.595885186290,
- 5.700000000000, 7.703622549597, 9.696395508868,
- 5.800000000000, 7.803201980792, 9.796783683690,
- 5.900000000000, 7.900000000000, 9.900000000000,
- 5.000000000000, 7.000000000000, 9.000000000000,
- 6.100000000000, 8.100000000000, 10.100000000000,
- 6.200000000000, 8.200000000000, 10.200000000000,
- 6.300000000000, 8.295021337929, 10.304821411442,
- 6.500000000000, 8.495816003399, 10.504114813710,
- 6.700000000000, 8.696377450403, 10.703604491132,
- 6.900000000000, 8.896798019208, 10.903216316310,
- -5.824264068712, -7.824264068712, -10.400000000000,
- -6.024264068712, -8.024264068712, -10.600000000000,
- -6.224264068712, -8.224264068712, -10.800000000000,
- -5.424264068712, -7.424264068712, -10.000000000000,
+ 1.100000000000, 2.100000000000, 0.100000000000,
+ 1.200000000000, 2.200000000000, 0.200000000000,
+ 1.300000000000, 2.300000000000, 0.300000000000,
+ 1.400000000000, 2.400000000000, 0.400000000000,
+ 1.500000000000, 3.745293503266, 1.312227205500,
+ 1.600000000000, 3.294980394575, 1.386664200491,
+ 1.700000000000, 3.591763265955, 1.582543631245,
+ 1.800000000000, 3.703107773803, 1.671356663600,
+ 1.900000000000, 2.900000000000, 0.900000000000,
+ 1.000000000000, 2.000000000000, 0.000000000000,
+ 1.100000000000, 2.100000000000, 0.100000000000,
+ 1.200000000000, 2.200000000000, 0.200000000000,
+ 1.500000000000, 1.254706496734, -0.312227205500,
+ 1.600000000000, 1.905019605425, -0.186664200491,
+ 1.700000000000, 1.808236734045, -0.182543631245,
+ 1.800000000000, 1.896892226197, -0.071356663600,
+ 1.400000000000, 0.328479469127, -1.239953753608,
+ 1.600000000000, 0.293941190358, -1.262585961634,
+ 1.800000000000, 0.259995967920, -1.286431883494,
+ 1.000000000000, 0.342606428329, -1.125914857337,
};
const double pylith::faults::CohesiveDynDataHex8::_slipSlipE[] = {
- 0.009957324142, 0.009642822884, 0.000000000000,
- 0.008367993202, 0.008229627421, 0.000000000000,
- 0.007245099193, 0.007208982264, 0.000000000000,
- 0.006403961584, 0.006432632620, 0.000000000000,
+ 2.490587006532, -1.624454410999, 0.000000000000,
+ 1.389960789150, -1.573328400983, 0.000000000000,
+ 1.783526531910, -1.765087262491, 0.000000000000,
+ 1.806215547605, -1.742713327201, 0.000000000000,
};
// ----------------------------------------------------------------------
@@ -1450,57 +1204,57 @@
// ----------------------------------------------------------------------
// Input
const double pylith::faults::CohesiveDynDataHex8::_fieldIncrOpen[] = {
- 5.1, 7.1, 9.1,
- 5.2, 7.2, 9.2,
- 5.3, 7.3, 9.3,
- 5.4, 7.4, 9.4,
- 5.5, 7.5, 9.5, // 6
- 5.6, 7.6, 9.6, // 7
- 5.7, 7.7, 9.7, // 8
- 5.8, 7.8, 9.8, // 9
- 5.9, 7.9, 9.9,
- 5.0, 7.0, 9.0,
- 6.1, 8.1, 10.1,
- 6.2, 8.2, 10.2,
- 6.3, 8.3, 10.3, // 14
- 6.5, 8.5, 10.5, // 15
- 6.7, 8.7, 10.7, // 16
- 6.9, 8.9, 10.9, // 17
- 6.4, 8.4, 10.4, // 18
- 6.6, 8.6, 10.6, // 19
- 6.8, 8.8, 10.8, // 20
- 6.0, 8.0, 10.0, // 21
+ 1.1, 2.1, 0.1,
+ 1.2, 2.2, 0.2,
+ 1.3, 2.3, 0.3,
+ 1.4, 2.4, 0.4,
+ 1.5, 2.5, 0.5, // 6
+ 1.6, 2.6, 0.6, // 7
+ 1.7, 2.7, 0.7, // 8
+ 1.8, 2.8, 0.8, // 9
+ 1.9, 2.9, 0.9,
+ 1.0, 2.0, 0.0,
+ 1.1, 2.1, 0.1,
+ 1.2, 2.2, 0.2,
+ 1.5, 2.5, 0.5, // 14
+ 1.6, 2.6, 0.6, // 15
+ 1.7, 2.7, 0.7, // 16
+ 1.8, 2.8, 0.8, // 17
+ -10.4, 2.4, 0.4, // 18
+ -10.6, 2.6, 0.6, // 19
+ -10.8, 2.8, 0.8, // 20
+ -10.0, 2.0, 0.2, // 21
};
// Output
const double pylith::faults::CohesiveDynDataHex8::_fieldIncrOpenE[] = {
- 5.100000000000, 7.100000000000, 9.100000000000,
- 5.200000000000, 7.200000000000, 9.200000000000,
- 5.300000000000, 7.300000000000, 9.300000000000,
- 5.400000000000, 7.400000000000, 9.400000000000,
- 5.500000000000, 7.442454974471, 9.676228188067,
- 5.600000000000, 7.555401305851, 9.759311696661,
- 5.700000000000, 7.664478333931, 9.847182893464,
- 5.800000000000, 7.782595639240, 9.927084810574,
- 5.900000000000, 7.900000000000, 9.900000000000,
- 5.000000000000, 7.000000000000, 9.000000000000,
- 6.100000000000, 8.100000000000, 10.100000000000,
- 6.200000000000, 8.200000000000, 10.200000000000,
- 6.300000000000, 8.357545025529, 10.123771811933,
- 6.500000000000, 8.544598694149, 10.340688303339,
- 6.700000000000, 8.735521666069, 10.552817106536,
- 6.900000000000, 8.917404360760, 10.772915189426,
- -5.400000000000, -7.400000000000, -9.400000000000,
- -5.600000000000, -7.600000000000, -9.600000000000,
- -5.800000000000, -7.800000000000, -9.800000000000,
- -5.000000000000, -7.000000000000, -9.000000000000,
+ 1.100000000000, 2.100000000000, 0.100000000000,
+ 1.200000000000, 2.200000000000, 0.200000000000,
+ 1.300000000000, 2.300000000000, 0.300000000000,
+ 1.400000000000, 2.400000000000, 0.400000000000,
+ 3.473386524898, 3.450458773757, 1.061077907335,
+ 3.302801176428, 2.966499592247, 1.097759351340,
+ 3.627558189277, 3.252968860584, 1.264881344260,
+ 3.475698668581, 3.241605816971, 1.233144951440,
+ 1.900000000000, 2.900000000000, 0.900000000000,
+ 1.000000000000, 2.000000000000, 0.000000000000,
+ 1.100000000000, 2.100000000000, 0.100000000000,
+ 1.200000000000, 2.200000000000, 0.200000000000,
+ -0.473386524898, 1.549541226243, -0.061077907335,
+ -0.102801176428, 2.233500407753, 0.102240648660,
+ -0.227558189277, 2.147031139416, 0.135118655740,
+ 0.124301331419, 2.358394183029, 0.366855048560,
+ -4.400000000000, -2.400000000000, -3.400000000000,
+ -4.600000000000, -2.600000000000, -3.600000000000,
+ -4.800000000000, -2.800000000000, -3.800000000000,
+ -4.000000000000, -2.000000000000, -3.000000000000,
};
const double pylith::faults::CohesiveDynDataHex8::_slipOpenE[] = {
- -0.115090051058, -0.352456376134, 0.000000000000,
- -0.089197388297, -0.318623393323, 0.000000000000,
- -0.071043332138, -0.294365786929, 0.000000000000,
- -0.034808721519, -0.254169621148, 0.000000000000,
+ 1.900917547514, -1.122155814671, 3.946773049797,
+ 0.732999184495, -0.995518702680, 3.405602352856,
+ 1.105937721169, -1.129762688519, 3.855116378553,
+ 0.883211633942, -0.866289902880, 3.351397337162,
};
// ----------------------------------------------------------------------
@@ -1524,7 +1278,7 @@
jacobian = const_cast<double*>(_jacobian);
orientation = const_cast<double*>(_orientation);
area = const_cast<double*>(_area);
- forcesInitial = const_cast<double*>(_forcesInitial);
+ initialTractions = const_cast<double*>(_initialTractions);
constraintVertices = const_cast<int*>(_constraintVertices);
numConstraintVert = _numConstraintVert;
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynDataHex8.hh
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynDataHex8.hh 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynDataHex8.hh 2011-10-17 22:23:48 UTC (rev 19086)
@@ -67,7 +67,7 @@
static const double _orientation[]; ///< Expected values for fault orientation.
static const double _area[]; ///< Expected values for fault area.
- static const double _forcesInitial[]; ///< Expected values for initial forces.
+ static const double _initialTractions[]; ///< Expected values for initial tractions.
static const double _fieldIncrSlipE[]; ///< Expected values for solution increment for slip case.
static const double _slipSlipE[]; ///< Expected values for slip for slip case.
static const double _fieldIncrOpenE[]; ///< Expected values for solution increment for opening case.
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynDataQuad4.cc
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynDataQuad4.cc 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynDataQuad4.cc 2011-10-17 22:23:48 UTC (rev 19086)
@@ -59,24 +59,24 @@
const int pylith::faults::CohesiveDynDataQuad4::_numBasis = 2;
-const int pylith::faults::CohesiveDynDataQuad4::_numQuadPts = 1;
+const int pylith::faults::CohesiveDynDataQuad4::_numQuadPts = 2;
const double pylith::faults::CohesiveDynDataQuad4::_quadPts[] = {
- 0.0,
+ -1.0, 1.0,
};
const double pylith::faults::CohesiveDynDataQuad4::_quadWts[] = {
- 2.0,
+ 1.0, 1.0
};
const double pylith::faults::CohesiveDynDataQuad4::_basis[] = {
- 0.5,
- 0.5
+ 1.0, 0.0,
+ 0.0, 1.0,
};
const double pylith::faults::CohesiveDynDataQuad4::_basisDeriv[] = {
- -0.5,
- 0.5
+ -0.5, 0.5,
+ -0.5, 0.5,
};
const double pylith::faults::CohesiveDynDataQuad4::_verticesRef[] = {
@@ -97,215 +97,173 @@
8.4, 9.4, // 5
8.5, 9.5,
8.6, 9.6,
- 8.7, 9.7, // 8
- 8.9, 9.9, // 9
+ 8.3, 9.3, // 8
+ 8.4, 9.4, // 9
8.8, 9.8, // 10
8.0, 9.0, // 11
};
-// :TODO: Make sensible values for Jacobian for DOF on positive and
-// negative sides of the fault. Add semi-random values for other DOF.
const double pylith::faults::CohesiveDynDataQuad4::_jacobian[] = {
- 1, 0.1,
+ 0.1, 0.1, // 2x
0.2, 0.3,
0.4, 0.5,
0.6, 0.7,
0.8, 0.9,
- 1, 1.1,
+ 1.0, 1.1,
1.2, 1.3,
1.4, 1.5,
1.6, 1.7,
1.8, 1.9,
- 2, 1,
+ 2.0, 2.1, // 2y
2.1, 2.2,
2.3, 2.4,
2.5, 2.6,
2.7, 2.8,
- 2.9, 3,
+ 2.9, 3.0,
3.1, 3.2,
3.3, 3.4,
3.5, 3.6,
3.7, 3.8,
- 3.9, 4,
- 1, 4.1,
+ 3.9, 4.0, // 3x
+ 4.0, 4.1,
4.2, 4.3,
4.4, 4.5,
4.6, 4.7,
4.8, 4.9,
- 5, 5.1,
+ 5.0, 5.1,
5.2, 5.3,
5.4, 5.5,
5.6, 5.7,
- 5.8, 5.9,
- 6, 1,
+ 5.8, 5.9, // 3y
+ 6.0, 6.1,
6.1, 6.2,
6.3, 6.4,
6.5, 6.6,
6.7, 6.8,
- 6.9, 7,
+ 6.9, 7.0,
7.1, 7.2,
7.3, 7.4,
7.5, 7.6,
- 7.7, 7.8,
- 7.9, 8,
- 1, 8.1,
- 8.2, 8.3,
+ 7.7, 7.8, // 4x
+ 7.9, 8.0,
++4.0,-1.2, // 4
+-2.2,-2.3, // 5
8.4, 8.5,
8.6, 8.7,
8.8, 8.9,
- 9, 9.1,
- 9.2, -1,
+ 9.0, 9.1,
+ 9.2, 9.3,
9.3, 9.4,
- 9.5, 9.6,
- 9.7, 9.8,
- 9.9, 1,
- 10,10.1,
-10.2,10.3,
-10.4,10.5,
-10.6,10.7,
-10.8,10.9,
- -1, 11,
-11.1,11.2,
-11.3,11.4,
-11.5,11.6,
-11.7,11.8,
- 1,11.9,
- 12,12.1,
-12.2,12.3,
-12.4,12.5,
-12.6,12.7,
-12.8,12.9,
- 13, -1,
-13.1,13.2,
-13.3,13.4,
-13.5,13.6,
-13.7, 1,
-13.8,13.9,
- 14,14.1,
-14.2,14.3,
-14.4,14.5,
-14.6,14.7,
- -1,14.8,
-14.9, 15,
-15.1,15.2,
-15.3,15.4,
-15.5,15.6,
- 1,15.7,
-15.8,15.9,
- 16,16.1,
-16.2,16.3,
-16.4,16.5,
-16.6,16.7,
-16.8,16.9,
- 17,17.1,
-17.2,17.3,
-17.4,17.5,
-17.6, 1,
-17.7,17.8,
-17.9, 18,
-18.1,18.2,
-18.3,18.4,
-18.5,18.6,
-18.7,18.8,
-18.9, 19,
-19.1,19.2,
-19.3,19.4,
-19.5,19.6,
- 1,19.7,
-19.8,19.9,
- 20,20.1,
-20.2,20.3,
-20.4,20.5,
-20.6,20.7,
-20.8,20.9,
- 21,21.1,
-21.2,21.3,
-21.4,21.5,
-21.6, 1,
-21.7,21.8,
-21.9, 22,
-22.1,22.2,
-22.3,22.4,
-22.5,22.6,
-22.7,22.8,
-22.9, 23,
-23.1,23.2,
-23.3,23.4,
-23.5,23.6,
- 1,23.7,
-23.8,23.9,
- 24, 1,
-24.1,24.2,
-24.3,24.4,
-24.5,24.6,
-24.7,24.8,
-24.9, 25,
-25.1,25.2,
-25.3,25.4,
-25.5, 1,
-25.6,25.7,
- 1,25.8,
-25.9, 26,
-26.1,26.2,
-26.3,26.4,
-26.5,26.6,
-26.7,26.8,
-26.9, 27,
-27.1,27.2,
-27.3,27.4,
- 1,27.5,
-27.6,27.7,
-27.8, 1,
-27.9, 28,
-28.1,28.2,
-28.3,28.4,
-28.5,28.6,
-28.7,28.8,
-28.9, 29,
-29.1,29.2,
-29.3, 1,
-29.4,29.5,
- 1,29.6,
-29.7,29.8,
-29.9, 30,
-30.1, -1,
-30.2,30.3,
-30.4,30.5,
-30.6,30.7,
-30.8, 1,
-30.9, 31,
-31.1,31.2,
-31.3,31.4,
-31.5,31.6,
-31.7,31.8,
- -1,31.9,
- 32,32.1,
-32.2,32.3,
-32.4,32.5,
- 1,32.6,
-32.7,32.8,
-32.9, 33,
-33.1,33.2,
-33.3,33.4,
-33.5,33.6,
-33.7,33.8,
-33.9, -1,
- 34,34.1,
-34.2,34.3,
-34.4,34.5,
-34.6, 1,
-34.7,34.8,
-34.9, 35,
-35.1,35.2,
-35.3,35.4,
-35.5,35.6,
- -1,35.7,
-35.8,35.9,
- 36,36.1,
-36.2,36.3,
- 1,36.4,
-36.5,36.6,
-36.7,36.8,
+ 3.7, 4.8, // 4y
+ 3.9, 4.0,
+-1.2,+5.0, // 4
+-1.3,-3.2, // 5
+ 4.4, 5.5,
+ 4.6, 5.7,
+ 4.8, 5.9,
+ 4.0, 5.1,
+ 4.2, 5.3,
+ 4.3, 5.4,
+ 7.7, 7.8, // 5x
+ 7.9, 8.0,
+-2.2,-1.3, // 4
++4.1,-4.3, // 5
+ 8.4, 8.5,
+ 8.6, 8.7,
+ 8.8, 8.9,
+ 9.0, 9.1,
+ 9.2, 9.3,
+ 9.3, 9.4,
+ 3.7, 4.8, // 5y
+ 3.9, 4.0,
+-2.3,-3.2, // 4
+-4.3,+5.1, // 5
+ 4.4, 5.5,
+ 4.6, 5.7,
+ 4.8, 5.9,
+ 4.0, 5.1,
+ 4.2, 5.3,
+ 4.3, 5.4,
+ 0.1, 0.1, // 6x
+ 0.2, 0.3,
+ 0.4, 0.5,
+ 0.6, 0.7,
+ 0.8, 0.9,
+ 1.0, 1.1,
+ 1.2, 1.3,
+ 1.4, 1.5,
+ 1.6, 1.7,
+ 1.8, 1.9,
+ 2.0, 2.1, // 6y
+ 2.1, 2.2,
+ 2.3, 2.4,
+ 2.5, 2.6,
+ 2.7, 2.8,
+ 2.9, 3.0,
+ 3.1, 3.2,
+ 3.3, 3.4,
+ 3.5, 3.6,
+ 3.7, 3.8,
+ 3.9, 4.0, // 7x
+ 4.0, 4.1,
+ 4.2, 4.3,
+ 4.4, 4.5,
+ 4.6, 4.7,
+ 4.8, 4.9,
+ 5.0, 5.1,
+ 5.2, 5.3,
+ 5.4, 5.5,
+ 5.6, 5.7,
+ 5.8, 5.9, // 7y
+ 6.0, 6.1,
+ 6.1, 6.2,
+ 6.3, 6.4,
+ 6.5, 6.6,
+ 6.7, 6.8,
+ 6.9, 7.0,
+ 7.1, 7.2,
+ 7.3, 7.4,
+ 7.5, 7.6,
+ 7.7, 7.8, // 8x
+ 7.9, 8.0,
+ 8.4, 8.5,
+ 8.6, 8.7,
+ 8.8, 8.9,
+ 9.0, 9.1,
++5.0,-1.2, // 8
+-2.2,-2.3, // 9
+ 9.2, 9.3,
+ 9.3, 9.4,
+ 3.7, 4.8, // 8y
+ 3.9, 4.0,
+ 4.4, 5.5,
+ 4.6, 5.7,
+ 4.8, 5.9,
+ 4.0, 5.1,
+-1.2,+4.0, // 8
+-1.3,-3.2, // 9
+ 4.2, 5.3,
+ 4.3, 5.4,
+ 7.7, 7.8, // 9x
+ 7.9, 8.0,
+ 8.4, 8.5,
+ 8.6, 8.7,
+ 8.8, 8.9,
+ 9.0, 9.1,
+-2.2,-1.3, // 8
++5.1,-4.3, // 9
+ 9.2, 9.3,
+ 9.3, 9.4,
+ 3.7, 4.8, // 9y
+ 3.9, 4.0,
+ 4.4, 5.5,
+ 4.6, 5.7,
+ 4.8, 5.9,
+ 4.0, 5.1,
+-2.3,-3.2, // 8
+-4.3,+4.1, // 9
+ 4.2, 5.3,
+ 4.3, 5.4,
};
// ----------------------------------------------------------------------
@@ -322,9 +280,9 @@
1.0,
};
-const double pylith::faults::CohesiveDynDataQuad4::_forcesInitial[] = {
- 2.05, -1.05,
- 2.05, -1.05,
+const double pylith::faults::CohesiveDynDataQuad4::_initialTractions[] = {
+ 2.0, -1.0,
+ 2.1, -1.1,
};
@@ -338,16 +296,16 @@
// ----------------------------------------------------------------------
// Input
const double pylith::faults::CohesiveDynDataQuad4::_fieldIncrStick[] = {
- 1.1, 29.1,
- 1.2, 29.2,
- 1.3, 29.3, // 4
- 1.4, 29.4, // 5
- 1.5, 29.5,
- 1.6, 29.6,
- 1.7, 29.7, // 8
- 1.9, 29.9, // 9
- 1.8, -29.8, // 10
- 1.0, -29.0, // 11
+ 1.1, 2.1,
+ 1.2, 2.2,
+ 1.3, 2.3, // 4
+ 1.4, 2.4, // 5
+ 1.5, 2.5,
+ 1.6, 2.6,
+ 1.7, 2.7, // 8
+ 1.9, 2.9, // 9
+ 21.8, 2.8, // 10
+ 21.0, 2.0, // 11
};
// No change in fieldIncr
@@ -358,37 +316,35 @@
// ----------------------------------------------------------------------
// Input
const double pylith::faults::CohesiveDynDataQuad4::_fieldIncrSlip[] = {
- 9.1, 10.1,
- 9.2, 10.2,
- 9.3, 10.3, // 4
- 9.4, 10.4, // 5
- 9.5, 10.5,
- 9.6, 10.6,
- 9.7, 10.7, // 8
- 9.9, 10.9, // 9
- -9.8, -10.8, // 10
- -9.0, -10.0, // 11
+ 1.1, 2.1,
+ 1.2, 2.2,
+ 1.3, 2.3, // 4
+ 1.4, 2.4, // 5
+ 1.5, 2.5,
+ 1.6, 2.6,
+ 1.3, 2.3, // 8
+ 1.4, 2.4, // 9
+ 1.8, 2.8, // 10
+ 1.0, 2.0, // 11
};
// Output
-// :TODO: Update Lagrange multiplier values
const double pylith::faults::CohesiveDynDataQuad4::_fieldIncrSlipE[] = {
- 9.1, 10.100000000000,
- 9.2, 10.200000000000,
- 9.3, 10.313079001869,
- 9.4, 10.405865253910,
- 9.5, 10.500000000000,
- 9.6, 10.600000000000,
- 9.7, 10.686920998131,
- 9.9, 10.894134746090,
- -9.4, -10.800000000000,
- -8.6, -10.000000000000,
+ 1.100000000000, 2.100000000000,
+ 1.200000000000, 2.200000000000,
+ 1.300000000000, 2.406970297611,
+ 1.400000000000, 3.369389712309,
+ 1.500000000000, 2.500000000000,
+ 1.600000000000, 2.600000000000,
+ 1.300000000000, 2.193029702389,
+ 1.400000000000, 1.430610287691,
+ 1.800000000000, -3.440000000000,
+ 1.000000000000, -3.600000000000,
};
-// Update slip values based on changes in Lagrange multiplier values
const double pylith::faults::CohesiveDynDataQuad4::_slipSlipE[] = {
- 0.026158003737426, 0.0,
- 0.011730507820273, 0.0,
+ 0.213940595221, 0.000000000000,
+ 1.938779424618, 0.000000000000,
};
// ----------------------------------------------------------------------
@@ -396,35 +352,35 @@
// ----------------------------------------------------------------------
// Input
const double pylith::faults::CohesiveDynDataQuad4::_fieldIncrOpen[] = {
- 9.1, 10.1,
- 9.2, 10.2,
- 9.3, 10.3, // 4
- 9.4, 10.4, // 5
- 9.5, 10.5,
- 9.6, 10.6,
- 9.7, 10.7, // 8
- 9.9, 10.9, // 9
- 9.8, 10.8, // 10
- 9.0, 10.0, // 11
+ 1.1, 2.1,
+ 1.2, 2.2,
+ 1.3, 2.3, // 4
+ 1.4, 2.4, // 5
+ 1.5, 2.5,
+ 1.6, 2.6,
+ 1.3, 2.3, // 8
+ 1.4, 2.4, // 9
+ -10.8, 2.8, // 10
+ -10.0, 2.0, // 11
};
// Output
const double pylith::faults::CohesiveDynDataQuad4::_fieldIncrOpenE[] = {
- 9.100000000000, 10.100000000000,
- 9.200000000000, 10.200000000000,
- 9.300000000000, 10.685047196672,
- 9.932709332305, 11.176949275526,
- 9.500000000000, 10.500000000000,
- 9.600000000000, 10.600000000000,
- 9.700000000000, 10.314952803328,
- 9.367290667695, 10.123050724474,
+ 1.100000000000, 2.100000000000,
+ 1.200000000000, 2.200000000000,
+ 3.815834136232, 2.039404156843,
+ 4.287400342924, 3.820863468454,
+ 1.500000000000, 2.500000000000,
+ 1.600000000000, 2.600000000000,
+ -1.215834136232, 2.560595843157,
+ -1.487400342924, 0.979136531546,
-8.800000000000, -9.800000000000,
-8.000000000000, -9.000000000000,
};
const double pylith::faults::CohesiveDynDataQuad4::_slipOpenE[] = {
- 0.770094393343286, 0.0,
- 1.553898551051246, 1.065418664609568,
+ -0.521191686313, 5.031668272463,
+ 2.841726936907, 5.774800685848,
};
// ----------------------------------------------------------------------
@@ -448,7 +404,7 @@
jacobian = const_cast<double*>(_jacobian);
orientation = const_cast<double*>(_orientation);
area = const_cast<double*>(_area);
- forcesInitial = const_cast<double*>(_forcesInitial);
+ initialTractions = const_cast<double*>(_initialTractions);
constraintVertices = const_cast<int*>(_constraintVertices);
numConstraintVert = _numConstraintVert;
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynDataQuad4.hh
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynDataQuad4.hh 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynDataQuad4.hh 2011-10-17 22:23:48 UTC (rev 19086)
@@ -67,7 +67,7 @@
static const double _orientation[]; ///< Expected values for fault orientation.
static const double _area[]; ///< Expected values for fault area.
- static const double _forcesInitial[]; ///< Expected values for initial forces.
+ static const double _initialTractions[]; ///< Expected values for initial tractions.
static const double _fieldIncrSlipE[]; ///< Expected values for solution increment for slip case.
static const double _slipSlipE[]; ///< Expected values for slip for slip case.
static const double _fieldIncrOpenE[]; ///< Expected values for solution increment for opening case.
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynDataTet4.cc
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynDataTet4.cc 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynDataTet4.cc 2011-10-17 22:23:48 UTC (rev 19086)
@@ -45,24 +45,34 @@
const int pylith::faults::CohesiveDynDataTet4::_numBasis = 3;
-const int pylith::faults::CohesiveDynDataTet4::_numQuadPts = 1;
+const int pylith::faults::CohesiveDynDataTet4::_numQuadPts = 3;
const double pylith::faults::CohesiveDynDataTet4::_quadPts[] = {
- -3.33333333e-01, -3.33333333e-01,
+ -1.00000000e+00, -1.00000000e+00,
+ 1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00, 1.00000000e+00,
};
const double pylith::faults::CohesiveDynDataTet4::_quadWts[] = {
- 2.0,
+ 2.0/3.0, 2.0/3.0, 2.0/3.0,
};
const double pylith::faults::CohesiveDynDataTet4::_basis[] = {
- 3.33333333e-01, 3.33333333e-01,
- 3.33333333e-01,};
+ 1.0, 0.0, 0.0,
+ 0.0, 1.0, 0.0,
+ 0.0, 0.0, 1.0,
+};
const double pylith::faults::CohesiveDynDataTet4::_basisDeriv[] = {
-0.50000000e+00, -0.50000000e+00,
0.50000000e+00, 0.00000000e+00,
0.00000000e+00, 0.50000000e+00,
+ -0.50000000e+00, -0.50000000e+00,
+ 0.50000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.50000000e+00,
+ -0.50000000e+00, -0.50000000e+00,
+ 0.50000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.50000000e+00,
};
const double pylith::faults::CohesiveDynDataTet4::_verticesRef[] = {
@@ -84,380 +94,378 @@
7.3, 8.3, 9.3, // 4
7.4, 8.4, 9.4, // 5
7.5, 8.5, 9.5,
- 7.6, 8.6, 9.6, // 7
- 7.8, 8.8, 9.8, // 8
- 7.0, 8.0, 9.0, // 9
+ 7.2, 8.2, 9.2, // 7
+ 7.3, 8.3, 9.3, // 8
+ 7.4, 8.4, 9.4, // 9
7.7, 8.7, 9.7, // 10
7.9, 8.9, 9.9, // 11
7.1, 8.1, 9.1, // 12
};
-// :TODO: Make sensible values for Jacobian for DOF on positive and
-// negative sides of the fault. Add semi-random values for other DOF.
const double pylith::faults::CohesiveDynDataTet4::_jacobian[] = {
- 1, 0.1, 0.2,
+ 1.0, 0.1, 0.2, // 2x
0.3, 0.4, 0.5,
0.6, 0.7, 0.8,
- 0.9, 1, 1.1,
+ 0.9, 1.0, 1.1,
1.2, 1.3, 1.4,
1.5, 1.6, 1.7,
- 1.8, 1.9, 2,
+ 1.8, 1.9, 2.0,
2.1, 2.2, 2.3,
2.4, 2.5, 2.6,
2.7, 2.8, 2.9,
- 3, 3.1, 3.2,
- 3.3, 1, 3.4,
- 3.5, 3.6, 3.7,
- 3.8, 3.9, 4,
- 4.1, 4.2, 4.3,
- 4.4, 4.5, 4.6,
- 4.7, 4.8, 4.9,
- 5, 5.1, 5.2,
- 5.3, 5.4, 5.5,
- 5.6, 5.7, 5.8,
- 5.9, 6, 6.1,
- 6.2, 6.3, 6.4,
- 6.5, 6.6, 1,
- 6.7, 6.8, 6.9,
- 7, 7.1, 7.2,
- 7.3, 7.4, 7.5,
- 7.6, 7.7, 7.8,
- 7.9, 8, 8.1,
- 8.2, 8.3, 8.4,
- 8.5, 8.6, 8.7,
- 8.8, 8.9, 9,
- 9.1, 9.2, 9.3,
- 9.4, 9.5, 9.6,
- 9.7, 9.8, 9.9,
- 1, 10, 10.1,
- 10.2, 10.3, 10.4,
- 10.5, 10.6, 10.7,
- 10.8, 10.9, 11,
- 11.1, 11.2, 11.3,
- 11.4, 11.5, 11.6,
- 11.7, 11.8, 11.9,
- 12, 12.1, -1,
- 12.2, 12.3, 12.4,
- 12.5, 12.6, 12.7,
- 12.8, 12.9, 13,
- 13.1, 1, 13.2,
- 13.3, 13.4, 13.5,
- 13.6, 13.7, 13.8,
- 13.9, 14, 14.1,
- 14.2, 14.3, 14.4,
- 14.5, 14.6, 14.7,
- 14.8, 14.9, 15,
- -1, 15.1, 15.2,
- 15.3, 15.4, 15.5,
- 15.6, 15.7, 15.8,
- 15.9, 16, 16.1,
- 16.2, 16.3, 1,
- 16.4, 16.5, 16.6,
- 16.7, 16.8, 16.9,
- 17, 17.1, 17.2,
- 17.3, 17.4, 17.5,
- 17.6, 17.7, 17.8,
- 17.9, 18, 18.1,
- 18.2, -1, 18.3,
- 18.4, 18.5, 18.6,
- 18.7, 18.8, 18.9,
- 19, 19.1, 19.2,
- 19.3, 19.4, 19.5,
- 1, 19.6, 19.7,
- 19.8, 19.9, 20,
- 20.1, 20.2, 20.3,
- 20.4, 20.5, 20.6,
- 20.7, 20.8, 20.9,
- 21, 21.1, 21.2,
- 21.3, 21.4, 21.5,
- 21.6, 21.7, -1,
- 21.8, 21.9, 22,
- 22.1, 22.2, 22.3,
- 22.4, 22.5, 22.6,
- 22.7, 1, 22.8,
- 22.9, 23, 23.1,
- 23.2, 23.3, 23.4,
- 23.5, 23.6, 23.7,
- 23.8, 23.9, 24,
- 24.1, 24.2, 24.3,
- 24.4, 24.5, 24.6,
- -1, 24.7, 24.8,
- 24.9, 25, 25.1,
- 25.2, 25.3, 25.4,
- 25.5, 25.6, 25.7,
- 25.8, 25.9, 1,
- 26, 26.1, 26.2,
- 26.3, 26.4, 26.5,
- 26.6, 26.7, 26.8,
- 26.9, 27, 27.1,
- 27.2, 27.3, 27.4,
- 27.5, 27.6, 27.7,
- 27.8, -1, 27.9,
- 28, 28.1, 28.2,
- 28.3, 28.4, 28.5,
- 28.6, 28.7, 28.8,
- 28.9, 29, 29.1,
- 1, 29.2, 29.3,
- 29.4, 29.5, 29.6,
- 29.7, 29.8, 29.9,
- 30, 30.1, 30.2,
- 30.3, 30.4, 30.5,
- 30.6, 30.7, 30.8,
- 30.9, 31, 31.1,
- 31.2, 31.3, -1,
- 31.4, 31.5, 31.6,
- 31.7, 31.8, 31.9,
- 32, 32.1, 32.2,
- 32.3, 1, 32.4,
- 32.5, 32.6, 32.7,
- 32.8, 32.9, 33,
- 33.1, 33.2, 33.3,
- 33.4, 33.5, 33.6,
- 33.7, 33.8, 33.9,
- 34, 34.1, 34.2,
- -1, 34.3, 34.4,
- 34.5, 34.6, 34.7,
- 34.8, 34.9, 35,
- 35.1, 35.2, 35.3,
- 35.4, 35.5, 1,
- 35.6, 35.7, 35.8,
- 35.9, 36, 36.1,
- 36.2, 36.3, 36.4,
- 36.5, 36.6, 36.7,
- 36.8, 36.9, 37,
- 37.1, 37.2, 37.3,
- 37.4, -1, 37.5,
- 37.6, 37.7, 37.8,
- 37.9, 38, 38.1,
- 38.2, 38.3, 38.4,
- 38.5, 38.6, 38.7,
- 1, 38.8, 38.9,
- 39, 39.1, 39.2,
- 39.3, 39.4, 39.5,
- 39.6, 39.7, 39.8,
- 39.9, 40, 40.1,
- 40.2, 40.3, 40.4,
- 40.5, 40.6, 40.7,
- 40.8, 40.9, 41,
- 41.1, 41.2, 41.3,
- 41.4, 41.5, 41.6,
- 41.7, 41.8, 41.9,
- 42, 1, 42.1,
- 42.2, 42.3, 42.4,
- 42.5, 42.6, 42.7,
- 42.8, 42.9, 43,
- 43.1, 43.2, 43.3,
- 43.4, 43.5, 43.6,
- 43.7, 43.8, 43.9,
- 44, 44.1, 44.2,
- 44.3, 44.4, 44.5,
- 44.6, 44.7, 44.8,
- 44.9, 45, 45.1,
- 45.2, 45.3, 1,
- 45.4, 45.5, 45.6,
- 45.7, 45.8, 45.9,
- 46, 46.1, 46.2,
- 46.3, 46.4, 46.5,
- 46.6, 46.7, 46.8,
- 46.9, 47, 47.1,
- 47.2, 47.3, 47.4,
- 47.5, 47.6, 47.7,
- 47.8, 47.9, 48,
- 48.1, 48.2, 48.3,
- 48.4, 48.5, 48.6,
- 1, 48.7, 48.8,
- 48.9, 49, 49.1,
- 49.2, 49.3, 49.4,
- 49.5, 49.6, 1,
- 49.7, 49.8, 49.9,
- 50, 50.1, 50.2,
- 50.3, 50.4, 50.5,
- 50.6, 50.7, 50.8,
- 50.9, 51, 51.1,
- 51.2, 51.3, 51.4,
- 51.5, 51.6, 51.7,
- 51.8, 1, 51.9,
- 52, 52.1, 52.2,
- 52.3, 52.4, 52.5,
- 1, 52.6, 52.7,
- 52.8, 52.9, 53,
- 53.1, 53.2, 53.3,
- 53.4, 53.5, 53.6,
- 53.7, 53.8, 53.9,
- 54, 54.1, 54.2,
- 54.3, 54.4, 54.5,
- 54.6, 54.7, 54.8,
- 54.9, 55, 1,
- 55.1, 55.2, 55.3,
- 55.4, 55.5, 55.6,
- 55.7, 1, 55.8,
- 55.9, 56, 56.1,
- 56.2, 56.3, 56.4,
- 56.5, 56.6, 56.7,
- 56.8, 56.9, 57,
- 57.1, 57.2, 57.3,
- 57.4, 57.5, 57.6,
- 57.7, 57.8, 57.9,
- 58, 58.1, 58.2,
- 1, 58.3, 58.4,
- 58.5, 58.6, 58.7,
- 58.8, 58.9, 59,
- 59.1, 59.2, 1,
- 59.3, 59.4, 59.5,
- 59.6, 59.7, 59.8,
- 59.9, 60, 60.1,
- 60.2, 60.3, 60.4,
- 60.5, 60.6, 60.7,
- 60.8, 60.9, 61,
- 61.1, 61.2, 61.3,
- 61.4, 1, 61.5,
- 61.6, 61.7, 61.8,
- 61.9, 62, 62.1,
- 1, 62.2, 62.3,
- 62.4, 62.5, 62.6,
- 62.7, 62.8, 62.9,
- 63, 63.1, 63.2,
- 63.3, 63.4, 63.5,
- 63.6, 63.7, 63.8,
- 63.9, 64, 64.1,
- 64.2, 64.3, 64.4,
- 64.5, 64.6, 1,
- 64.7, 64.8, 64.9,
- 65, 65.1, 65.2,
- 65.3, 1, 65.4,
- 65.5, 65.6, 65.7,
- 65.8, 65.9, 66,
- 66.1, 66.2, 66.3,
- 66.4, 66.5, 66.6,
- 66.7, 66.8, 66.9,
- 67, 67.1, 67.2,
- 67.3, 67.4, 67.5,
- 67.6, 67.7, 67.8,
- 1, 67.9, 68,
- 68.1, 68.2, 68.3,
- 68.4, 68.5, 68.6,
- 68.7, 68.8, 1,
- 68.9, 69, 69.1,
- 69.2, 69.3, 69.4,
- 69.5, 69.6, 69.7,
- 69.8, 69.9, 70,
- 70.1, 70.2, 70.3,
- 70.4, 70.5, 70.6,
- 70.7, 70.8, 70.9,
- 71, 1, 71.1,
- 71.2, 71.3, 71.4,
- 71.5, 71.6, 71.7,
- 1, 71.8, 71.9,
- 72, 72.1, 72.2,
- 72.3, 72.4, 72.5,
- 72.6, 72.7, 72.8,
- 72.9, 73, 73.1,
- 73.2, 73.3, 73.4,
- 73.5, 73.6, 73.7,
- 73.8, 73.9, 74,
- 74.1, 74.2, 1,
- 74.3, 74.4, 74.5,
- 74.6, 74.7, 74.8,
- 74.9, 1, 75,
- 75.1, 75.2, 75.3,
- 75.4, -1, 75.5,
- 75.6, 75.7, 75.8,
- 75.9, 76, 76.1,
- 76.2, 76.3, 76.4,
- 76.5, 1, 76.6,
- 76.7, 76.8, 76.9,
- 77, 77.1, 77.2,
- 77.3, 77.4, 77.5,
- 77.6, 77.7, 77.8,
- 77.9, 78, 78.1,
- 78.2, 78.3, 78.4,
- 78.5, 78.6, -1,
- 78.7, 78.8, 78.9,
- 79, 79.1, 79.2,
- 79.3, 79.4, 79.5,
- 79.6, 79.7, 1,
- 79.8, 79.9, 80,
- 80.1, 80.2, 80.3,
- 80.4, 80.5, 80.6,
- 80.7, 80.8, 80.9,
- 81, 81.1, 81.2,
- 81.3, 81.4, 81.5,
- -1, 81.6, 81.7,
- 81.8, 81.9, 82,
- 82.1, 82.2, 82.3,
- 82.4, 82.5, 82.6,
- 1, 82.7, 82.8,
- 82.9, 83, 83.1,
- 83.2, 83.3, 83.4,
- 83.5, 83.6, 83.7,
- 83.8, 83.9, 84,
- 84.1, 84.2, 84.3,
- 84.4, 84.5, 84.6,
- 84.7, 84.8, 84.9,
- 85, -1, 85.1,
- 85.2, 85.3, 85.4,
- 85.5, 85.6, 85.7,
- 85.8, 85.9, 86,
- 86.1, 1, 86.2,
- 86.3, 86.4, 86.5,
- 86.6, 86.7, 86.8,
- 86.9, 87, 87.1,
- 87.2, 87.3, 87.4,
- 87.5, 87.6, 87.7,
- 87.8, 87.9, 88,
- 88.1, 88.2, -1,
- 88.3, 88.4, 88.5,
- 88.6, 88.7, 88.8,
- 88.9, 89, 89.1,
- 89.2, 89.3, 1,
- 89.4, 89.5, 89.6,
- 89.7, 89.8, 89.9,
- 90, 90.1, 90.2,
- 90.3, 90.4, 90.5,
- 90.6, 90.7, 90.8,
- 90.9, 91, 91.1,
- -1, 91.2, 91.3,
- 91.4, 91.5, 91.6,
- 91.7, 91.8, 91.9,
- 92, 92.1, 92.2,
- 1, 92.3, 92.4,
- 92.5, 92.6, 92.7,
- 92.8, 92.9, 93,
- 93.1, 93.2, 93.3,
- 93.4, 93.5, 93.6,
- 93.7, 93.8, 93.9,
- 94, 94.1, 94.2,
- 94.3, 94.4, 94.5,
- 94.6, -1, 94.7,
- 94.8, 94.9, 95,
- 95.1, 95.2, 95.3,
- 95.4, 95.5, 95.6,
- 95.7, 1, 95.8,
- 95.9, 96, 96.1,
- 96.2, 96.3, 96.4,
- 96.5, 96.6, 96.7,
- 96.8, 96.9, 97,
- 97.1, 97.2, 97.3,
- 97.4, 97.5, 97.6,
- 97.7, 97.8, -1,
- 97.9, 98, 98.1,
- 98.2, 98.3, 98.4,
- 98.5, 98.6, 98.7,
- 98.8, 98.9, 1,
- 99, 99.1, 99.2,
- 99.3, 99.4, 99.5,
- 99.6, 99.7, 99.8,
- 99.9, 100,100.1,
-100.2,100.3,100.4,
-100.5,100.6,100.7,
- -1,100.8,100.9,
- 101,101.1,101.2,
-101.3,101.4,101.5,
-101.6,101.7,101.8,
- 1,101.9, 102,
-102.1,102.2,102.3,
-102.4,102.5,102.6,
-102.7,102.8,102.9,
+ 3.0, 3.1, 3.2,
+ 2.0, 4.1, 3.2, // 2y
+ 2.3, 4.4, 3.5,
+ 2.6, 4.7, 3.8,
+ 2.9, 4.0, 3.1,
+ 2.2, 4.3, 3.4,
+ 2.5, 4.6, 3.7,
+ 2.8, 4.9, 3.0,
+ 2.1, 4.2, 3.3,
+ 2.4, 4.5, 3.6,
+ 2.7, 4.8, 3.9,
+ 2.0, 4.1, 3.2,
+ 1.0, 7.1, 2.2, // 2z
+ 1.3, 7.4, 2.5,
+ 1.6, 7.7, 2.8,
+ 1.9, 7.0, 2.1,
+ 1.2, 7.3, 2.4,
+ 1.5, 7.6, 2.7,
+ 1.8, 7.9, 2.0,
+ 1.1, 7.2, 2.3,
+ 1.4, 7.5, 2.6,
+ 1.7, 7.8, 2.9,
+ 1.0, 7.1, 2.2,
+ 1.0, 0.1, 0.2, // 3x
+ +4.0, -1.1, -1.2, // 3
+ -1.3, -1.4, -1.5, // 4
+ -1.6, -1.7, -1.8, // 5
+ 0.3, 0.4, 0.5,
+ 1.5, 1.6, 1.7,
+ 1.8, 1.9, 2.0,
+ 2.1, 2.2, 2.3,
+ 2.4, 2.5, 2.6,
+ 2.7, 2.8, 2.9,
+ 3.0, 3.1, 3.2,
+ 2.0, 4.1, 3.2, // 3y
+ -1.1, +4.1, -2.3, // 3
+ -2.4, -2.5, -2.6, // 4
+ -2.7, -2.8, -2.9, // 5
+ 2.3, 4.4, 3.5,
+ 2.5, 4.6, 3.7,
+ 2.8, 4.9, 3.0,
+ 2.1, 4.2, 3.3,
+ 2.4, 4.5, 3.6,
+ 2.7, 4.8, 3.9,
+ 2.0, 4.1, 3.2,
+ 1.0, 7.1, 2.2, // 3z
+ -1.2, -2.3, +4.2, // 3
+ -1.0, -1.1, -1.2, // 4
+ -1.3, -1.4, -1.5, // 5
+ 1.5, 7.6, 2.7,
+ 1.3, 7.4, 2.5,
+ 1.8, 7.9, 2.0,
+ 1.1, 7.2, 2.3,
+ 1.4, 7.5, 2.6,
+ 1.7, 7.8, 2.9,
+ 1.0, 7.1, 2.2,
+ 1.0, 0.1, 0.2, // 4x
+ -1.3, -2.4, -1.0, // 3
+ +4.3, -0.2, -0.3, // 4
+ -0.4, -0.5, -0.6, // 5
+ 0.3, 0.4, 0.5,
+ 1.5, 1.6, 1.7,
+ 1.8, 1.9, 2.0,
+ 2.1, 2.2, 2.3,
+ 2.4, 2.5, 2.6,
+ 2.7, 2.8, 2.9,
+ 3.0, 3.1, 3.2,
+ 2.0, 4.1, 3.2, // 4y
+ -1.4, -2.5, -1.1, // 3
+ -0.2, +4.4, -0.9, // 4
+ -0.8, -0.7, -0.5, // 5
+ 2.3, 4.4, 3.5,
+ 2.5, 4.6, 3.7,
+ 2.8, 4.9, 3.0,
+ 2.1, 4.2, 3.3,
+ 2.4, 4.5, 3.6,
+ 2.7, 4.8, 3.9,
+ 2.0, 4.1, 3.2,
+ 1.0, 7.1, 2.2, // 4z
+ -1.5, -2.6, -1.2, // 3
+ -0.3, -0.9, +4.5, // 4
+ -1.1, -1.2, -1.3, // 5
+ 1.3, 7.4, 2.5,
+ 1.5, 7.6, 2.7,
+ 1.8, 7.9, 2.0,
+ 1.1, 7.2, 2.3,
+ 1.4, 7.5, 2.6,
+ 1.7, 7.8, 2.9,
+ 1.0, 7.1, 2.2,
+ 1.0, 0.1, 0.2, // 5x
+ -1.6, -2.7, -1.3, // 3
+ -0.4, -0.8, -1.1, // 4
+ +4.6, -1.8, -1.5, // 5
+ 0.3, 0.4, 0.5,
+ 1.5, 1.6, 1.7,
+ 1.8, 1.9, 2.0,
+ 2.1, 2.2, 2.3,
+ 2.4, 2.5, 2.6,
+ 2.7, 2.8, 2.9,
+ 3.0, 3.1, 3.2,
+ 1.0, 0.1, 0.2, // 5y
+ -1.7, -2.8, -1.4, // 3
+ -0.5, -0.7, -1.2, // 4
+ -1.8, +4.7, -1.1, // 5
+ 0.3, 0.4, 0.5,
+ 1.5, 1.6, 1.7,
+ 1.8, 1.9, 2.0,
+ 2.1, 2.2, 2.3,
+ 2.4, 2.5, 2.6,
+ 2.7, 2.8, 2.9,
+ 3.0, 3.1, 3.2,
+ 1.0, 7.1, 2.2, // 5z
+ -1.8, -2.9, -1.5, // 3
+ -0.6, -0.5, -1.3, // 4
+ -1.5, -1.1, +4.8, // 5
+ 1.3, 7.4, 2.5,
+ 1.5, 7.6, 2.7,
+ 1.8, 7.9, 2.0,
+ 1.1, 7.2, 2.3,
+ 1.4, 7.5, 2.6,
+ 1.7, 7.8, 2.9,
+ 1.0, 7.1, 2.2,
+ 1.0, 0.1, 0.2, // 6x
+ 0.3, 0.4, 0.5,
+ 0.6, 0.7, 0.8,
+ 0.9, 1.0, 1.1,
+ 1.2, 1.3, 1.4,
+ 1.5, 1.6, 1.7,
+ 1.8, 1.9, 2.0,
+ 2.1, 2.2, 2.3,
+ 2.4, 2.5, 2.6,
+ 2.7, 2.8, 2.9,
+ 3.0, 3.1, 3.2,
+ 2.0, 4.1, 3.2, // 6y
+ 2.3, 4.4, 3.5,
+ 2.6, 4.7, 3.8,
+ 2.9, 4.0, 3.1,
+ 2.2, 4.3, 3.4,
+ 2.5, 4.6, 3.7,
+ 2.8, 4.9, 3.0,
+ 2.1, 4.2, 3.3,
+ 2.4, 4.5, 3.6,
+ 2.7, 4.8, 3.9,
+ 2.0, 4.1, 3.2,
+ 1.0, 7.1, 2.2, // 6z
+ 1.3, 7.4, 2.5,
+ 1.6, 7.7, 2.8,
+ 1.9, 7.0, 2.1,
+ 1.2, 7.3, 2.4,
+ 1.5, 7.6, 2.7,
+ 1.8, 7.9, 2.0,
+ 1.1, 7.2, 2.3,
+ 1.4, 7.5, 2.6,
+ 1.7, 7.8, 2.9,
+ 1.0, 7.1, 2.2,
+ 1.0, 0.1, 0.2, // 7x
+ 0.3, 0.4, 0.5,
+ 1.5, 1.6, 1.7,
+ 1.8, 1.9, 2.0,
+ 2.1, 2.2, 2.3,
+ +5.0, -1.1, -1.2, // 3
+ -1.3, -1.4, -1.5, // 4
+ -1.6, -1.7, -1.8, // 5
+ 2.4, 2.5, 2.6,
+ 2.7, 2.8, 2.9,
+ 3.0, 3.1, 3.2,
+ 2.0, 4.1, 3.2, // 7y
+ 2.3, 4.4, 3.5,
+ 2.5, 4.6, 3.7,
+ 2.8, 4.9, 3.0,
+ 2.1, 4.2, 3.3,
+ -1.1, +5.1, -2.3, // 7
+ -2.4, -2.5, -2.6, // 8
+ -2.7, -2.8, -2.9, // 9
+ 2.4, 4.5, 3.6,
+ 2.7, 4.8, 3.9,
+ 2.0, 4.1, 3.2,
+ 1.0, 7.1, 2.2, // 7z
+ 1.5, 7.6, 2.7,
+ 1.8, 7.9, 2.0,
+ 1.1, 7.2, 2.3,
+ 1.3, 7.4, 2.5,
+ -1.2, -2.3, +5.2, // 7
+ -1.0, -1.1, -1.2, // 8
+ -1.3, -1.4, -1.5, // 9
+ 1.4, 7.5, 2.6,
+ 1.7, 7.8, 2.9,
+ 1.0, 7.1, 2.2,
+ 1.0, 0.1, 0.2, // 8x
+ 0.3, 0.4, 0.5,
+ 1.5, 1.6, 1.7,
+ 1.8, 1.9, 2.0,
+ 2.1, 2.2, 2.3,
+ -1.3, -2.4, -1.0, // 7
+ +5.3, -0.2, -0.3, // 8
+ -0.4, -0.5, -0.6, // 9
+ 2.4, 2.5, 2.6,
+ 2.7, 2.8, 2.9,
+ 3.0, 3.1, 3.2,
+ 2.0, 4.1, 3.2, // 8y
+ 2.3, 4.4, 3.5,
+ 2.5, 4.6, 3.7,
+ 2.8, 4.9, 3.0,
+ 2.1, 4.2, 3.3,
+ -1.4, -2.5, -1.1, // 7
+ -0.2, +5.4, -0.9, // 8
+ -0.8, -0.7, -0.5, // 9
+ 2.4, 4.5, 3.6,
+ 2.7, 4.8, 3.9,
+ 2.0, 4.1, 3.2,
+ 1.0, 7.1, 2.2, // 8z
+ 1.3, 7.4, 2.5,
+ 1.5, 7.6, 2.7,
+ 1.8, 7.9, 2.0,
+ 1.1, 7.2, 2.3,
+ -1.5, -2.6, -1.2, // 7
+ -0.3, -0.9, +5.5, // 8
+ -1.1, -1.2, -1.3, // 9
+ 1.4, 7.5, 2.6,
+ 1.7, 7.8, 2.9,
+ 1.0, 7.1, 2.2,
+ 1.0, 0.1, 0.2, // 9x
+ 0.3, 0.4, 0.5,
+ 1.5, 1.6, 1.7,
+ 1.8, 1.9, 2.0,
+ 2.1, 2.2, 2.3,
+ -1.6, -2.7, -1.3, // 7
+ -0.4, -0.8, -1.1, // 8
+ +5.6, -1.8, -1.5, // 9
+ 2.4, 2.5, 2.6,
+ 2.7, 2.8, 2.9,
+ 3.0, 3.1, 3.2,
+ 2.0, 4.1, 3.2, // 9y
+ 2.3, 4.4, 3.5,
+ 2.5, 4.6, 3.7,
+ 2.8, 4.9, 3.0,
+ 2.1, 4.2, 3.3,
+ -1.7, -2.8, -1.4, // 7
+ -0.5, -0.7, -1.2, // 8
+ -1.8, +5.7, -1.1, // 9
+ 2.4, 4.5, 3.6,
+ 2.7, 4.8, 3.9,
+ 2.0, 4.1, 3.2,
+ 1.0, 7.1, 2.2, // 9z
+ 1.3, 7.4, 2.5,
+ 1.5, 7.6, 2.7,
+ 1.8, 7.9, 2.0,
+ 1.1, 7.2, 2.3,
+ -1.8, -2.9, -1.5, // 7
+ -0.6, -0.5, -1.3, // 8
+ -1.5, -1.1, +5.8, // 9
+ 1.4, 7.5, 2.6,
+ 1.7, 7.8, 2.9,
+ 1.0, 7.1, 2.2,
+ 1.0, 0.1, 0.2, // 10x
+ 0.3, 0.4, 0.5,
+ 0.6, 0.7, 0.8,
+ 0.9, 1.0, 1.1,
+ 1.2, 1.3, 1.4,
+ 1.5, 1.6, 1.7,
+ 1.8, 1.9, 2.0,
+ 2.1, 2.2, 2.3,
+ 2.4, 2.5, 2.6,
+ 2.7, 2.8, 2.9,
+ 3.0, 3.1, 3.2,
+ 2.0, 4.1, 3.2, // 10y
+ 2.3, 4.4, 3.5,
+ 2.6, 4.7, 3.8,
+ 2.9, 4.0, 3.1,
+ 2.2, 4.3, 3.4,
+ 2.5, 4.6, 3.7,
+ 2.8, 4.9, 3.0,
+ 2.1, 4.2, 3.3,
+ 2.4, 4.5, 3.6,
+ 2.7, 4.8, 3.9,
+ 2.0, 4.1, 3.2,
+ 1.0, 7.1, 2.2, // 10z
+ 1.3, 7.4, 2.5,
+ 1.6, 7.7, 2.8,
+ 1.9, 7.0, 2.1,
+ 1.2, 7.3, 2.4,
+ 1.5, 7.6, 2.7,
+ 1.8, 7.9, 2.0,
+ 1.1, 7.2, 2.3,
+ 1.4, 7.5, 2.6,
+ 1.7, 7.8, 2.9,
+ 1.0, 7.1, 2.2,
+ 1.0, 0.1, 0.2, // 11x
+ 0.3, 0.4, 0.5,
+ 0.6, 0.7, 0.8,
+ 0.9, 1.0, 1.1,
+ 1.2, 1.3, 1.4,
+ 1.5, 1.6, 1.7,
+ 1.8, 1.9, 2.0,
+ 2.1, 2.2, 2.3,
+ 2.4, 2.5, 2.6,
+ 2.7, 2.8, 2.9,
+ 3.0, 3.1, 3.2,
+ 2.0, 4.1, 3.2, // 11y
+ 2.3, 4.4, 3.5,
+ 2.6, 4.7, 3.8,
+ 2.9, 4.0, 3.1,
+ 2.2, 4.3, 3.4,
+ 2.5, 4.6, 3.7,
+ 2.8, 4.9, 3.0,
+ 2.1, 4.2, 3.3,
+ 2.4, 4.5, 3.6,
+ 2.7, 4.8, 3.9,
+ 2.0, 4.1, 3.2,
+ 1.0, 7.1, 2.2, // 11z
+ 1.3, 7.4, 2.5,
+ 1.6, 7.7, 2.8,
+ 1.9, 7.0, 2.1,
+ 1.2, 7.3, 2.4,
+ 1.5, 7.6, 2.7,
+ 1.8, 7.9, 2.0,
+ 1.1, 7.2, 2.3,
+ 1.4, 7.5, 2.6,
+ 1.7, 7.8, 2.9,
+ 1.0, 7.1, 2.2,
+ 1.0, 0.1, 0.2, // 12x
+ 0.3, 0.4, 0.5,
+ 0.6, 0.7, 0.8,
+ 0.9, 1.0, 1.1,
+ 1.2, 1.3, 1.4,
+ 1.5, 1.6, 1.7,
+ 1.8, 1.9, 2.0,
+ 2.1, 2.2, 2.3,
+ 2.4, 2.5, 2.6,
+ 2.7, 2.8, 2.9,
+ 3.0, 3.1, 3.2,
+ 2.0, 4.1, 3.2, // 12y
+ 2.3, 4.4, 3.5,
+ 2.6, 4.7, 3.8,
+ 2.9, 4.0, 3.1,
+ 2.2, 4.3, 3.4,
+ 2.5, 4.6, 3.7,
+ 2.8, 4.9, 3.0,
+ 2.1, 4.2, 3.3,
+ 2.4, 4.5, 3.6,
+ 2.7, 4.8, 3.9,
+ 2.0, 4.1, 3.2,
+ 1.0, 7.1, 2.2, // 12z
+ 1.3, 7.4, 2.5,
+ 1.6, 7.7, 2.8,
+ 1.9, 7.0, 2.1,
+ 1.2, 7.3, 2.4,
+ 1.5, 7.6, 2.7,
+ 1.8, 7.9, 2.0,
+ 1.1, 7.2, 2.3,
+ 1.4, 7.5, 2.6,
+ 1.7, 7.8, 2.9,
+ 1.0, 7.1, 2.2,
};
// ----------------------------------------------------------------------
@@ -476,10 +484,10 @@
1.0/3.0,
};
-const double pylith::faults::CohesiveDynDataTet4::_forcesInitial[] = {
- 3.1/3.0, -1.1/3.0, +2.1/3.0,
- 3.1/3.0, -1.1/3.0, +2.1/3.0,
- 3.1/3.0, -1.1/3.0, +2.1/3.0,
+const double pylith::faults::CohesiveDynDataTet4::_initialTractions[] = {
+ +3.0, -1.0, +2.0,
+ +3.1, -1.1, +2.1,
+ +3.2, -1.2, +2.2,
};
@@ -493,17 +501,17 @@
// ----------------------------------------------------------------------
// Input
const double pylith::faults::CohesiveDynDataTet4::_fieldIncrStick[] = {
- 1.1, 2.1, 35.1,
- 1.2, 2.2, 35.2, // 3
- 1.3, 2.3, 35.3, // 4
- 1.4, 2.4, 35.4, // 5
- 1.5, 2.5, 35.5,
- 1.6, 2.6, 35.6, // 7
- 1.8, 2.8, 35.8, // 8
- 1.0, 2.0, 35.0, // 9
- 1.7, 2.7, -35.7, // 10
- 1.9, 2.9, -35.9, // 11
- 1.1, 2.1, -35.1, // 12
+ 1.1, 2.1, 3.1,
+ 1.2, 2.2, 3.2, // 3
+ 1.3, 2.3, 3.3, // 4
+ 1.4, 2.4, 3.4, // 5
+ 1.5, 2.5, 3.5,
+ 1.6, 2.6, 3.6, // 7
+ 1.8, 2.8, 3.8, // 8
+ 1.0, 2.0, 3.0, // 9
+ 41.7, 2.7, 3.7, // 10
+ 41.9, 2.9, 3.9, // 11
+ 41.1, 2.1, 3.1, // 12
};
// No change in fieldIncr
@@ -514,38 +522,38 @@
// ----------------------------------------------------------------------
// Input
const double pylith::faults::CohesiveDynDataTet4::_fieldIncrSlip[] = {
- 8.1, 9.1, 10.1,
- 8.2, 9.2, 10.2, // 3
- 8.3, 9.3, 10.3, // 4
- 8.4, 9.4, 10.4, // 5
- 8.5, 9.5, 10.5,
- 8.6, 9.6, 10.6, // 7
- 8.8, 9.8, 10.8, // 8
- 8.0, 9.0, 10.0, // 9
- 8.7, 9.7, -10.7, // 10
- 8.9, 9.9, -10.9, // 11
- 8.1, 9.1, -10.1, // 12
+ 1.1, 2.1, 3.1,
+ 1.2, 2.2, 3.2, // 3
+ 1.3, 2.3, 3.3, // 4
+ 1.4, 2.4, 3.4, // 5
+ 1.5, 2.5, 3.5,
+ 1.2, 2.2, 3.2, // 7
+ 1.3, 2.3, 3.3, // 8
+ 1.4, 2.4, 3.4, // 9
+ 9.7, 2.7, 3.7, // 10
+ 9.9, 2.9, 3.9, // 11
+ 9.1, 2.1, 3.1, // 12
};
// Output
const double pylith::faults::CohesiveDynDataTet4::_fieldIncrSlipE[] = {
- 8.100000000000, 9.100000000000, 10.100000000000,
- 8.200000000000, 8.391727731714, 10.956284985259,
- 8.300000000000, 8.791277340217, 10.815192651071,
- 8.400000000000, 9.060755249362, 10.758883268626,
- 8.500000000000, 9.500000000000, 10.500000000000,
- 8.600000000000, 10.408272268286, 9.843715014741,
- 8.800000000000, 10.308722659783, 10.284807348929,
- 8.000000000000, 9.339244750638, 9.641116731374,
- -7.300777685147, -8.252092036995, -10.700000000000,
- -7.500201409882, -8.452606339630, -10.900000000000,
- -6.702681322117, -7.650402548711, -10.100000000000,
+ 1.100000000000, 2.100000000000, 3.100000000000,
+ 1.200000000000, 2.427020189783, 3.226804829918,
+ 1.300000000000, 2.281534813168, 3.292288303722,
+ 1.400000000000, 2.543753403100, 3.499170314087,
+ 1.500000000000, 2.500000000000, 3.500000000000,
+ 1.200000000000, 1.972979810217, 3.173195170082,
+ 1.300000000000, 2.318465186832, 3.307711696278,
+ 1.400000000000, 2.256246596900, 3.300829685913,
+ 9.700000000000, -1.935106067360, -1.748282570405,
+ 9.900000000000, -1.959241090539, -1.782841275376,
+ 9.100000000000, -1.865391385620, -1.642919108291,
};
const double pylith::faults::CohesiveDynDataTet4::_slipSlipE[] = {
- -1.616544536572, -1.512569970519, 0.000000000000,
- -1.017445319566, -1.030385302142, 0.000000000000,
- -0.678489501275, -0.717766537252, 0.000000000000,
+ 0.454040379566, -0.053609659837, 0.000000000000,
+ -0.036930373664, 0.015423392555, 0.000000000000,
+ 0.287506806199, -0.198340628174, 0.000000000000,
};
// ----------------------------------------------------------------------
@@ -553,38 +561,38 @@
// ----------------------------------------------------------------------
// Input
const double pylith::faults::CohesiveDynDataTet4::_fieldIncrOpen[] = {
- 8.1, 9.1, 10.1,
- 8.2, 9.2, 10.2, // 3
- 8.3, 9.3, 10.3, // 4
- 8.4, 9.4, 10.4, // 5
- 8.5, 9.5, 10.5,
- 8.6, 9.6, 10.6, // 7
- 8.8, 9.8, 10.8, // 8
- 8.0, 9.0, 10.0, // 9
- 8.7, 9.7, 10.7, // 10
- 8.9, 9.9, 10.9, // 11
- 8.1, 9.1, 10.1, // 12
+ 1.1, 2.1, 3.1,
+ 1.2, 2.2, 3.2, // 3
+ 1.3, 2.3, 3.3, // 4
+ 1.4, 2.4, 3.4, // 5
+ 1.5, 2.5, 3.5,
+ 1.2, 2.2, 3.2, // 7
+ 1.3, 2.3, 3.3, // 8
+ 1.4, 2.4, 3.4, // 9
+ -20.7, 2.7, 3.7, // 10
+ -20.9, 2.9, 3.9, // 11
+ -20.1, 2.1, 3.1, // 12
};
// Output
const double pylith::faults::CohesiveDynDataTet4::_fieldIncrOpenE[] = {
- 8.100000000000, 9.100000000000, 10.100000000000,
- 8.200000000000, 8.707485448105, 11.300792216319,
- 8.300000000000, 9.089936432069, 11.135493258511,
- 8.400000000000, 9.353421152116, 11.068689140292,
- 8.500000000000, 9.500000000000, 10.500000000000,
- 8.600000000000, 10.092514551895, 9.499207783681,
- 8.800000000000, 10.010063567931, 9.964506741489,
- 8.000000000000, 9.046578847884, 9.331310859708,
+ 1.100000000000, 2.100000000000, 3.100000000000,
+ 2.478935676274, 2.200668834288, 2.866497129446,
+ 2.514833997358, 1.906576121577, 2.868854721277,
+ 2.460386652668, 2.373508489140, 3.258697327233,
+ 1.500000000000, 2.500000000000, 3.500000000000,
+ -0.078935676274, 2.199331165712, 3.533502870554,
+ 0.085166002642, 2.693423878423, 3.731145278723,
+ 0.339613347332, 2.426491510860, 3.541302672767,
-7.700000000000, -8.700000000000, -9.700000000000,
-7.900000000000, -8.900000000000, -9.900000000000,
-7.100000000000, -8.100000000000, -9.100000000000,
};
const double pylith::faults::CohesiveDynDataTet4::_slipOpenE[] = {
- -0.985029103789, -2.201584432637, 0.000000000000,
- -0.420127135861, -1.670986517021, 0.000000000000,
- -0.093157695768, -1.337378280584, 0.000000000000,
+ 0.001337668577, 0.667005741108, 2.557871352547,
+ -0.786847756846, 0.862290557446, 2.429667994716,
+ -0.052983021720, 0.282605345535, 2.120773305336,
};
// ----------------------------------------------------------------------
@@ -608,7 +616,7 @@
jacobian = const_cast<double*>(_jacobian);
orientation = const_cast<double*>(_orientation);
area = const_cast<double*>(_area);
- forcesInitial = const_cast<double*>(_forcesInitial);
+ initialTractions = const_cast<double*>(_initialTractions);
constraintVertices = const_cast<int*>(_constraintVertices);
numConstraintVert = _numConstraintVert;
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynDataTet4.hh
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynDataTet4.hh 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynDataTet4.hh 2011-10-17 22:23:48 UTC (rev 19086)
@@ -67,7 +67,7 @@
static const double _orientation[]; ///< Expected values for fault orientation.
static const double _area[]; ///< Expected values for fault area.
- static const double _forcesInitial[]; ///< Expected values for initial forces.
+ static const double _initialTractions[]; ///< Expected values for initial tractions.
static const double _fieldIncrSlipE[]; ///< Expected values for solution increment for slip case.
static const double _slipSlipE[]; ///< Expected values for slip for slip case.
static const double _fieldIncrOpenE[]; ///< Expected values for solution increment for opening case.
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynDataTri3.cc
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynDataTri3.cc 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynDataTri3.cc 2011-10-17 22:23:48 UTC (rev 19086)
@@ -61,24 +61,24 @@
const int pylith::faults::CohesiveDynDataTri3::_numBasis = 2;
-const int pylith::faults::CohesiveDynDataTri3::_numQuadPts = 1;
+const int pylith::faults::CohesiveDynDataTri3::_numQuadPts = 2;
const double pylith::faults::CohesiveDynDataTri3::_quadPts[] = {
- 0.0,
+ -1.0, 1.0,
};
const double pylith::faults::CohesiveDynDataTri3::_quadWts[] = {
- 2.0,
+ 1.0, 1.0
};
const double pylith::faults::CohesiveDynDataTri3::_basis[] = {
- 0.5,
- 0.5
+ 1.0, 0.0,
+ 0.0, 1.0,
};
const double pylith::faults::CohesiveDynDataTri3::_basisDeriv[] = {
- -0.5,
- 0.5
+ -0.5, 0.5,
+ -0.5, 0.5,
};
const double pylith::faults::CohesiveDynDataTri3::_verticesRef[] = {
@@ -97,16 +97,14 @@
8.2, 9.2, // 3
8.3, 9.3, // 4
8.4, 9.4,
- 8.5, 9.5, // 6
- 8.7, 9.7, // 7
+ 8.2, 9.2, // 6
+ 8.3, 9.3, // 7
8.6, 9.6, // 8
8.8, 9.8, // 9
};
-// :TODO: Make sensible values for Jacobian for DOF on positive and
-// negative sides of the fault. Add semi-random values for other DOF.
const double pylith::faults::CohesiveDynDataTri3::_jacobian[] = {
- 1.0, 1.1, // 2x (values for row associated with vertex with label 2, x DOF)
+ 1.0, 1.1, // 2x
0.1, 1.2,
0.2, 1.3,
0.3, 1.4,
@@ -122,86 +120,86 @@
2.6, 3.5,
2.7, 3.6,
2.8, 3.7,
- 4.1, 5.1, // 3x (values for row associated with vertex label 3, x DOF)
- 1.0, 5.2,
- 4.2, 5.3,
+ 4.1, 5.1, // 3x
+ +4.0,-1.2, // 3
+ -2.2,-2.3, // 4
4.3, 5.4,
4.4, 5.5,
4.5, 5.6,
- 4.6,+1.0, // 8 (column for DOF associated with vertex label 8)
+ 4.6,+1.0,
4.7, 5.7,
6.1, 7.1, // 3y
- 6.2, 1.0,
- 6.3, 7.2,
+ -1.2,+5.0, // 3
+ -1.3,-3.2, // 4
6.4, 7.3,
6.5, 7.4,
6.6, 7.5,
- +1.0, 7.6, // 8
+ 1.0, 7.6,
6.7, 7.7,
8.1, 9.1, // 4x
- 8.2, 9.2,
- 1.0, 9.3,
+ -2.2,-1.3, // 3
+ +4.1,-4.3, // 4
8.3, 9.4,
8.4, 9.5,
8.5, 9.6,
8.6, 9.7,
- 8.7,+1.0, // 9
- 10.1, 11.1, // 4y
- 10.2, 11.2,
- 10.3, 1.0,
- 10.4, 11.3,
- 10.5, 11.4,
- 10.6, 11.5,
- 10.7, 11.6,
- +1.0, 11.7, // 9
- 12.1, 13.1, // 5x
- 12.2, 13.2,
- 12.3, 13.3,
- 1.0, 13.4,
- 12.4, 13.5,
- 12.5, 13.6,
- 12.6, 13.7,
- 12.7, 13.8,
- 14.1, 15.1, // 5y
- 14.2, 15.2,
- 14.3, 15.3,
- 14.4, 1.0,
- 14.5, 15.4,
- 14.6, 15.5,
- 14.7, 15.6,
- 14.8, 15.7,
- 16.1, 17.1, // 6x
- 16.2, 17.2,
- 16.3, 17.3,
- 16.4, 17.4,
- 1.0, 17.5,
- 16.5, 17.6,
- 16.6,-1.0, // 8
- 16.7, 17.7,
- 18.1, 19.1, // 6y
- 18.2, 19.2,
- 18.3, 19.3,
- 18.4, 19.4,
- 18.5, 1.0,
- 18.6, 19.5,
- -1.0, 19.6, // 8
- 18.7, 19.7,
- 20.1, 21.1, // 7x
- 20.2, 21.2,
- 20.3, 21.3,
- 20.4, 21.4,
- 20.5, 21.5,
- 1.0, 21.6,
- 20.6, 21.7,
- 20.7,-1.0, // 9
- 22.1, 23.1, // 7y
- 22.2, 23.2,
- 22.3, 23.3,
- 22.4, 23.4,
- 22.5, 23.5,
- 22.6, 1.0,
- 22.7, 23.6,
- -1.0, 23.7, // 9
+ 8.7,+1.0,
+ 1.1, 1.1, // 4y
+ -2.3,-3.2, // 3
+ -4.3,+5.1, // 4
+ 1.4, 1.3,
+ 1.5, 1.4,
+ 1.6, 1.5,
+ 1.7, 1.6,
+ 1.0, 1.7,
+ 2.1, 3.1, // 5x
+ 2.2, 3.2,
+ 2.3, 3.3,
+ 1.0, 3.4,
+ 2.4, 3.5,
+ 2.5, 3.6,
+ 2.6, 3.7,
+ 2.7, 3.8,
+ 4.1, 5.1, // 5y
+ 4.2, 5.2,
+ 4.3, 5.3,
+ 4.4, 1.0,
+ 4.5, 5.4,
+ 4.6, 5.5,
+ 4.7, 5.6,
+ 4.8, 5.7,
+ 6.1, 7.1, // 6x
+ 6.2, 7.2,
+ 6.3, 7.3,
+ 6.4, 7.4,
+ +5.0,-1.2, // 6
+ -2.2,-2.3, // 7
+ 6.6, 1.0,
+ 6.7, 7.7,
+ 8.1, 9.1, // 6y
+ 8.2, 9.2,
+ 8.3, 9.3,
+ 8.4, 9.4,
+ -1.2,+4.0, // 6
+ -1.3,-3.2, // 7
+ 1.0, 9.6,
+ 8.7, 9.7,
+ 0.1, 1.1, // 7x
+ 0.2, 1.2,
+ 0.3, 1.3,
+ 0.4, 1.4,
+ -2.2,-1.3, // 6
+ +5.1,-4.3, // 7
+ 0.6, 1.7,
+ 0.7, 1.0,
+ 2.1, 3.1, // 7y
+ 2.2, 3.2,
+ 2.3, 3.3,
+ 2.4, 3.4,
+ -2.3,-3.2, // 6
+ -4.3,+4.1, // 7
+ 2.7, 3.6,
+ 1.0, 3.7, // 9
24.1, 25.1, // 8x (rows associated with Lagrange multiplier vertex label 8)
24.2,+1.0, // 3
@@ -252,9 +250,9 @@
1.0,
};
-const double pylith::faults::CohesiveDynDataTri3::_forcesInitial[] = {
- 2.05, -1.05,
- 2.05, -1.05,
+const double pylith::faults::CohesiveDynDataTri3::_initialTractions[] = {
+ 2.0, -1.0,
+ 2.1, -1.1,
};
@@ -268,14 +266,14 @@
// ----------------------------------------------------------------------
// Input
const double pylith::faults::CohesiveDynDataTri3::_fieldIncrStick[] = {
- 1.1, 29.1,
- 1.2, 29.2, // 3
- 1.3, 29.3, // 4
- 1.4, 29.4,
- 1.5, 29.5, // 6
- 1.7, 29.7, // 7
- 1.6, -29.6, // 8
- 1.8, -29.8, // 9
+ 1.1, 2.1,
+ 1.2, 2.2, // 3
+ 1.3, 2.3, // 4
+ 1.4, 2.4,
+ 1.2, 2.2, // 6
+ 1.3, 2.3, // 7
+ 21.6, 2.6, // 8
+ 21.8, 2.8, // 9
};
// No change in fieldIncr
@@ -286,31 +284,31 @@
// ----------------------------------------------------------------------
// Input
const double pylith::faults::CohesiveDynDataTri3::_fieldIncrSlip[] = {
- 9.1, 10.1,
- 9.2, 10.2, // 3
- 9.3, 10.3, // 4
- 9.4, 10.4,
- 9.5, 10.5, // 6
- 9.7, 10.7, // 7
- 9.6, -10.6, // 8
- 9.8, -10.8, // 9
+ 9.1, 7.1,
+ 9.2, 7.2, // 3
+ 9.3, 7.3, // 4
+ 9.4, 7.4,
+ 9.2, 7.2, // 6
+ 9.3, 7.3, // 7
+ 1.6, 2.6, // 8
+ 1.8, 2.8, // 9
};
// Output
const double pylith::faults::CohesiveDynDataTri3::_fieldIncrSlipE[] = {
- 9.1, 10.100000000000,
- 9.2, 9.304186565683,
- 9.3, 10.066643380561,
- 9.4, 10.400000000000,
- 9.5, 11.395813434317,
- 9.7, 10.933356619439,
- -8.0, -10.600000000000,
- -8.2, -10.800000000000,
+ 9.100000000000, 7.100000000000,
+ 9.200000000000, 7.390546440275,
+ 9.300000000000, 8.283993111958,
+ 9.400000000000, 7.400000000000,
+ 9.200000000000, 7.009453559725,
+ 9.300000000000, 6.316006888042,
+ 1.600000000000, -3.480000000000,
+ 1.800000000000, -3.440000000000,
};
const double pylith::faults::CohesiveDynDataTri3::_slipSlipE[] = {
- -1.791626868633122, 0.0,
- -0.466713238878134, 0.0,
+ 0.381092880550, 0.000000000000,
+ 1.967986223916, 0.000000000000,
};
// ----------------------------------------------------------------------
@@ -318,31 +316,31 @@
// ----------------------------------------------------------------------
// Input
const double pylith::faults::CohesiveDynDataTri3::_fieldIncrOpen[] = {
- 9.1, 10.1,
- 9.2, 10.2, // 3
- 9.3, 10.3, // 4
- 9.4, 10.4,
- 9.5, 10.5, // 6
- 9.7, 10.7, // 7
- 9.6, 10.6, // 8
- 9.8, 10.8, // 9
+ 9.1, 7.1,
+ 9.2, 7.2, // 3
+ 9.3, 7.3, // 4
+ 9.4, 7.4,
+ 9.2, 7.2, // 6
+ 9.3, 7.3, // 7
+ -10.6, 2.6, // 8
+ -10.8, 2.8, // 9
};
// Output
const double pylith::faults::CohesiveDynDataTri3::_fieldIncrOpenE[] = {
- 9.100000000000, 10.100000000000,
- 9.200000000000, 10.851688943849,
-10.191208845155, 11.487449638489,
- 9.400000000000, 10.400000000000,
- 9.500000000000, 9.848311056151,
- 8.808791154845, 9.512550361511,
--8.600000000000, -9.600000000000,
--8.800000000000, -9.800000000000,
+ 9.100000000000, 7.100000000000,
+ 11.874337677762, 7.148344513504,
+ 12.357207850137, 8.757371967576,
+ 9.400000000000, 7.400000000000,
+ 6.525662322238, 7.251655486496,
+ 6.242792149863, 5.842628032424,
+ -8.600000000000, -9.600000000000,
+ -8.800000000000, -9.800000000000,
};
const double pylith::faults::CohesiveDynDataTri3::_slipOpenE[] = {
- 1.303377887698464, 0.0,
- 2.374899276978848, 1.782417690310881,
+ -0.103310972991, 5.348675355523,
+ 2.914743935152, 6.114415700274,
};
// ----------------------------------------------------------------------
@@ -366,7 +364,7 @@
jacobian = const_cast<double*>(_jacobian);
orientation = const_cast<double*>(_orientation);
area = const_cast<double*>(_area);
- forcesInitial = const_cast<double*>(_forcesInitial);
+ initialTractions = const_cast<double*>(_initialTractions);
constraintVertices = const_cast<int*>(_constraintVertices);
numConstraintVert = _numConstraintVert;
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynDataTri3.hh
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynDataTri3.hh 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynDataTri3.hh 2011-10-17 22:23:48 UTC (rev 19086)
@@ -67,7 +67,7 @@
static const double _orientation[]; ///< Expected values for fault orientation.
static const double _area[]; ///< Expected values for fault area.
- static const double _forcesInitial[]; ///< Expected values for initial forces.
+ static const double _initialTractions[]; ///< Expected values for initial tractions.
static const double _fieldIncrSlipE[]; ///< Expected values for solution increment for slip case.
static const double _slipSlipE[]; ///< Expected values for slip for slip case.
static const double _fieldIncrOpenE[]; ///< Expected values for solution increment for opening case.
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynDataTri3d.cc
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynDataTri3d.cc 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynDataTri3d.cc 2011-10-17 22:23:48 UTC (rev 19086)
@@ -76,24 +76,24 @@
const int pylith::faults::CohesiveDynDataTri3d::_numBasis = 2;
-const int pylith::faults::CohesiveDynDataTri3d::_numQuadPts = 1;
+const int pylith::faults::CohesiveDynDataTri3d::_numQuadPts = 2;
const double pylith::faults::CohesiveDynDataTri3d::_quadPts[] = {
- 0.0,
+ -1.0, 1.0,
};
const double pylith::faults::CohesiveDynDataTri3d::_quadWts[] = {
- 2.0,
+ 1.0, 1.0
};
const double pylith::faults::CohesiveDynDataTri3d::_basis[] = {
- 0.5,
- 0.5
+ 1.0, 0.0,
+ 0.0, 1.0,
};
const double pylith::faults::CohesiveDynDataTri3d::_basisDeriv[] = {
- -0.5,
- 0.5
+ -0.5, 0.5,
+ -0.5, 0.5,
};
const double pylith::faults::CohesiveDynDataTri3d::_verticesRef[] = {
@@ -114,16 +114,14 @@
6.4, 8.4,
6.5, 8.5, // 8
6.6, 8.6,
- 6.7, 8.7, // 10
- 6.9, 8.9, // 11
- 7.1, 9.1, // 12
- 6.8, 8.8, // 13
- 6.0, 8.0, // 14
- 7.2, 9.2, // 15
+ 6.2, 8.2, // 10
+ 6.3, 8.3, // 11
+ 6.5, 8.5, // 12
+ -3.8, 4.8, // 13
+ 3.0, 4.0, // 14
+ 3.2, 4.2, // 15
};
-// :TODO: Make sensible values for Jacobian for DOF on positive and
-// negative sides of the fault. Add semi-random values for other DOF.
const double pylith::faults::CohesiveDynDataTri3d::_jacobian[] = {
1.0, 1.1, // 4x
1.1, 2.1,
@@ -150,78 +148,54 @@
3.1, 4.0,
3.2, 4.1,
6.1, 7.2, // 5x
- 6.0, 7.3,
- 6.9, 7.4,
+ +6.0,-1.0, // 5
+ -1.1,-1.2, // 6
6.8, 7.5,
- 6.7, 7.6,
+ -1.3,-1.4, // 8
6.6, 7.7,
6.5, 7.8,
6.4, 7.9,
6.3, 7.0,
- -0.70710678118654757, +0.70710678118654757, // 13
+ 6.5, 6.6,
6.2, 7.1,
6.1, 7.2,
3.0, 5.1, // 5y
- 3.1, 5.2,
- 3.2, 5.2,
+ -1.0,+6.1, // 5
+ -0.9,-0.8, // 6
3.3, 5.1,
- 3.4, 5.3,
+ -0.7,-0.6, // 8
3.5, 5.0,
3.6, 5.4,
3.7, 5.9,
3.8, 5.5,
- +0.70710678118654757, +0.70710678118654757, // 13
+ 3.9, 5.5,
4.2, 5.6,
4.1, 5.8,
3.0, 2.7, // 6x
- 3.9, 2.7,
- 3.8, 2.8,
+ -1.1,-0.9, // 5
+ +6.2,-2.1, // 6
3.7, 2.6,
- 3.6, 2.9,
+ -2.2,-2.3, // 8
3.5, 2.5,
3.4, 2.1,
3.3, 2.4,
3.2, 2.2,
3.1, 2.3,
- 0.0,+1.0, // 14
+ 2.0, 2.0,
3.0, 2.4,
4.1, 6.1, // 6y
- 4.1, 6.6,
- 4.2, 6.2,
- 4.2, 6.5,
+ -1.2,-0.8, // 5
+ -2.1,+6.3, // 6
4.3, 6.3,
+ -1.4,-1.5, // 8
4.3, 6.4,
4.4, 6.4,
4.4, 6.3,
4.5, 6.5,
4.5, 6.2,
- +1.0, 0.0, // 14
+ 4.6, 7.0,
4.6, 6.1,
- 4.6, 6.6, // 7x
- 5.7, 9.7,
- 5.7, 9.9,
- 5.8, 9.8,
- 5.8, 9.8,
- 5.9, 9.9,
- 5.1, 9.7,
- 5.2, 9.1,
- 5.3, 9.6,
- 5.1, 9.2,
- 5.4, 9.5,
- 5.2, 9.3,
- 5.5, 9.4, // 7y
- 6.3, 9.4,
- 6.6, 9.3,
- 6.4, 9.5,
- 6.7, 9.2,
- 6.5, 9.6,
- 6.8, 9.1,
- 6.6, 9.7,
- 7.9, 8.9,
- 7.7, 8.8,
- 7.1, 8.8,
- 7.8, 8.9,
- 7.2, 8.7, // 8x
+ 7.2, 8.7, // 7x
7.9, 8.1,
7.3, 8.6,
7.1, 8.2,
@@ -232,8 +206,8 @@
7.6, 8.3,
7.4, 8.5,
7.7, 8.6,
- -1.0, 0.0, // 15
- 6.5, 3.3, // 8y
+ 7.8, 8.7,
+ 6.5, 3.3, // 7y
6.4, 3.4,
6.3, 3.8,
6.2, 3.9,
@@ -244,7 +218,31 @@
5.6, 3.4,
5.5, 3.3,
5.4, 3.2,
- 0.0,+1.0, // 15
+ 5.5, 3.3,
+ 4.6, 6.6, // 8x
+ -1.3,-0.7, // 5
+ -2.2,-1.4, // 6
+ 5.8, 9.8,
+ +6.4,-1.1, // 8
+ 5.9, 9.9,
+ 5.1, 9.7,
+ 5.2, 9.1,
+ 5.3, 9.6,
+ 5.1, 9.2,
+ 5.4, 9.5,
+ 5.2, 9.3,
+ 5.5, 9.4, // 8y
+ -1.4,-0.6, // 5
+ -2.3,-1.5, // 6
+ 6.4, 9.5,
+ -1.1,+6.5, // 8
+ 6.5, 9.6,
+ 6.8, 9.1,
+ 6.6, 9.7,
+ 7.9, 8.9,
+ 7.7, 8.8,
+ 7.1, 8.8,
+ 7.8, 8.9,
4.4, 2.0, // 9x
4.3, 2.1,
4.2, 2.2,
@@ -269,97 +267,97 @@
2.7, 3.8,
2.8, 3.7,
2.9, 3.6,
- 1.0, 3.5, // 10x
- 1.1, 4.4,
- 1.2, 4.3,
- 1.3, 4.2,
- 1.4, 4.1,
- 1.5, 4.0,
- 1.6, 4.1,
- 1.7, 4.2,
- 1.8, 4.3,
- +0.70710678118654757, -0.70710678118654757, // 13
- 1.9, 5.4,
- 9.0, 5.5,
- 8.0, 4.7, // 10y
- 7.1, 4.5,
- 6.2, 4.4,
- 6.3, 4.6,
- 6.4, 4.7,
- 6.5, 4.4,
- 4.6, 4.8,
- 4.7, 4.4,
- 4.8, 4.2,
- -0.70710678118654757, -0.70710678118654757, // 13
- 6.1, 4.8,
- 6.2, 4.7,
- 6.3, 5.6, // 11x
- 6.4, 5.5,
- 6.5, 5.4,
- 6.6, 5.3,
- 6.7, 5.1,
- 6.8, 5.2,
- 6.9, 5.3,
- 7.0, 5.9,
- 7.7, 5.8,
- 7.6, 5.7,
- 0.0,-1.0, // 14
- 7.5, 5.5,
- 7.4, 6.4, // 11y
- 7.3, 6.2,
- 7.2, 6.0,
- 7.2, 6.9,
- 7.1, 6.8,
- 7.0, 6.7,
- 7.2, 6.6,
- 7.3, 6.5,
- 7.4, 6.3,
- 7.5, 6.2,
- -1.0, 0.0, // 14
- 8.6, 6.2,
- 8.7, 6.3, // 12x
- 8.8, 6.3,
- 8.9, 7.4,
- 8.0, 7.5,
- 8.6, 7.6,
- 8.5, 7.7,
- 8.4, 7.8,
- 8.0, 7.9,
- 8.3, 7.1,
- 8.0, 7.2,
- 8.2, 7.3,
- +1.0, 0.0, // 15
- 7.2, 8.6, // 12y
- 6.6, 8.5,
- 6.7, 8.4,
- 6.9, 8.2,
- 6.5, 8.3,
- 6.4, 8.5,
- 6.3, 8.6,
- 6.5, 8.8,
- 4.7, 8.7,
- 4.9, 8.5,
- 7.5, 8.3,
- 6.0,-1.0, // 15
+ 6.1, 7.2, // 10x
+ 6.8, 7.5,
+ 6.6, 7.7,
+ 6.5, 7.8,
+ 6.4, 7.9,
+ 6.3, 7.0,
+ +5.0,-1.0, // 10
+ -1.1,-1.2, // 11
+ -1.3,-1.4, // 12
+ 6.5, 6.6,
+ 6.2, 7.1,
+ 6.1, 7.2,
+ 3.0, 5.1, // 10y
+ 3.3, 5.1,
+ 3.5, 5.0,
+ 3.6, 5.4,
+ 3.7, 5.9,
+ 3.8, 5.5,
+ -1.0,+5.1, // 10
+ -0.9,-0.8, // 11
+ -0.7,-0.6, // 12
+ 3.9, 5.5,
+ 4.2, 5.6,
+ 4.1, 5.8,
+ 3.0, 2.7, // 11x
+ 3.7, 2.6,
+ 3.5, 2.5,
+ 3.4, 2.1,
+ 3.3, 2.4,
+ 3.2, 2.2,
+ -1.1,-0.9, // 10
+ +5.2,-2.1, // 11
+ -2.2,-2.3, // 12
+ 3.1, 2.3,
+ 2.0, 2.0,
+ 3.0, 2.4,
+ 4.1, 6.1, // 11y
+ 4.3, 6.3,
+ 4.3, 6.4,
+ 4.4, 6.4,
+ 4.4, 6.3,
+ 4.5, 6.5,
+ -1.2,-0.8, // 10
+ -2.1,+5.3, // 11
+ -1.4,-1.5, // 12
+ 4.5, 6.2,
+ 4.6, 7.0,
+ 4.6, 6.1,
+ 4.6, 6.6, // 12x
+ 5.8, 9.8,
+ 5.9, 9.9,
+ 5.1, 9.7,
+ 5.2, 9.1,
+ 5.3, 9.6,
+ -1.3,-0.7, // 10
+ -2.2,-1.4, // 11
+ +5.4,-1.1, // 12
+ 5.1, 9.2,
+ 5.4, 9.5,
+ 5.2, 9.3,
+ 5.5, 9.4, // 12y
+ 6.4, 9.5,
+ 6.5, 9.6,
+ 6.8, 9.1,
+ 6.6, 9.7,
+ 7.9, 8.9,
+ -1.4,-0.6, // 10
+ -2.3,-1.5, // 11
+ -1.1,+5.5, // 12
+ 7.7, 8.8,
+ 7.1, 8.8,
+ 7.8, 8.9,
3.2, 8.3, // 13x
- -0.70710678118654757, +0.70710678118654757, // 5
+ 3.3, 8.4,
5.4, 9.3,
5.6, 9.7,
3.7, 9.0,
5.9, 9.9,
- +0.70710678118654757, -0.70710678118654757, // 10
+ 6.0, 9.8,
4.4, 4.8,
4.6, 4.7,
4.8, 4.6,
4.9, 4.4,
4.0, 4.2,
4.2, 4.3, // 13y
- +0.70710678118654757, +0.70710678118654757, // 5
+ 4.3, 4.4,
7.5, 3.4,
6.7, 3.5,
6.4, 3.6,
4.6, 3.9,
- -0.70710678118654757, -0.70710678118654757, // 10
+ 4.7, 4.0,
8.9, 2.8,
7.6, 2.7,
6.4, 2.6,
@@ -367,24 +365,24 @@
3.8, 2.3,
4.5, 2.2, // 14x
8.5, 2.4,
- 0.0,+1.0, // 6
+ 0.0, 1.0,
7.4, 3.6,
6.6, 3.5,
4.7, 3.4,
3.8, 3.5,
- 0.0,-1.0, // 11
+ 0.0, 1.0,
5.9, 3.7,
8.7, 4.6,
7.6, 4.5,
6.5, 4.4,
5.5, 4.3, // 14y
4.3, 4.8,
- +1.0, 0.0, // 6
+ 1.0, 0.0,
4.3, 4.7,
6.5, 4.6,
9.6, 4.5,
8.7, 4.3,
- -1.0, 0.0, // 11
+ 1.0, 0.0,
7.9, 4.5,
6.7, 5.3,
5.6, 5.8,
@@ -393,11 +391,11 @@
3.3, 5.5,
4.2, 5.3,
5.4, 5.6,
- -1.0, 6.0, // 8
+ 1.0, 6.0,
0.8, 6.6,
9.8, 6.5,
8.5, 6.5,
- +1.0, 0.0, // 12
+ 1.0, 0.0,
7.5, 7.3,
6.4, 7.6,
5.2, 7.8,
@@ -405,11 +403,11 @@
3.7, 8.6,
3.8, 8.5,
2.9, 8.3,
- 0.0,+1.0, // 8
+ 0.0, 1.0,
2.0, 9.9,
2.7, 9.8,
1.6, 9.7,
- 0.0,-1.0, // 12
+ 0.0, 1.0,
1.5, 5.5,
1.2, 5.4,
1.1, 5.3,
@@ -438,10 +436,10 @@
13, 14, 15
};
-const double pylith::faults::CohesiveDynDataTri3d::_forcesInitial[] = {
- 3.15*1.4142135623730951, 1.00*1.41421356237309,
- 2.05, -1.05,
- 1.10, 2.10,
+const double pylith::faults::CohesiveDynDataTri3d::_initialTractions[] = {
+ 3.0*0.70710678118654757, 0.70710678118654757,
+ 2.1, -1.1,
+ 1.2, 2.2,
};
@@ -450,18 +448,18 @@
// ----------------------------------------------------------------------
// Input
const double pylith::faults::CohesiveDynDataTri3d::_fieldIncrStick[] = {
- 1.1, 29.1,
- 1.2, 29.2, // 5
- 1.3, 29.3, // 6
- 1.4, 29.4,
- 1.5, 29.5, // 8
- 1.6, 29.6,
- 1.7, 29.7, // 10
- 1.9, 29.9, // 11
- 2.1, 29.1, // 12
- 1.8, -29.8, // 13
- 1.0, -29.0, // 14
- 2.2, -29.2, // 15
+ 1.1, 2.1,
+ 1.2, 2.2, // 5
+ 1.3, 2.3, // 6
+ 1.4, 2.4,
+ 1.5, 2.5, // 8
+ 1.6, 2.6,
+ 1.7, 2.7, // 10
+ 1.9, 2.9, // 11
+ 2.1, 2.1, // 12
+ 21.8, 22.8, // 13
+ 21.0, 2.0, // 14
+ 2.2, 22.2, // 15
};
// No change in fieldIncr
@@ -472,41 +470,40 @@
// ----------------------------------------------------------------------
// Input
const double pylith::faults::CohesiveDynDataTri3d::_fieldIncrSlip[] = {
- 9.1, 10.1,
- 9.2, 10.2, // 5
- 9.3, 10.3, // 6
- 9.4, 10.4,
- 9.5, 10.5, // 8
- 9.6, 10.6,
- 9.7, 10.7, // 10
- 9.9, 10.9, // 11
- 9.1, 10.1, // 12
- 9.8, -10.8, // 13
- 9.0, -10.0, // 14
- 9.2, -10.2, // 15
+ 1.1, 2.1,
+ 1.2, 2.2, // 5
+ 1.3, 2.3, // 6
+ 1.4, 2.4,
+ 1.5, 2.5, // 8
+ 1.6, 2.6,
+ 1.2, 2.2, // 10
+ 1.3, 2.3, // 11
+ 1.5, 2.5, // 12
+ 1.8, 0.8, // 13
+ 1.0, 0.1, // 14
+ 1.2, 0.2, // 15
};
// Output
-// TODO Update
const double pylith::faults::CohesiveDynDataTri3d::_fieldIncrSlipE[] = {
- 9.100000000000, 10.100000000000,
- 4.178047263424, 15.221952736576,
- 9.300000000000, 10.050098043990,
- 9.400000000000, 10.400000000000,
- 9.655679817715, 10.500000000000,
- 9.600000000000, 10.600000000000,
- 14.721952736576, 5.678047263424,
- 9.900000000000, 11.149901956010,
- 8.944320182285, 10.100000000000,
- -5.600000000000, -10.800000000000,
- -4.800000000000, -10.000000000000,
- -6.600000000000, -10.200000000000,
+ 1.100000000000, 2.100000000000,
+ 2.005761009464, 1.394238990536,
+ 1.300000000000, 1.928356338235,
+ 1.400000000000, 2.400000000000,
+ 1.216364402612, 2.500000000000,
+ 1.600000000000, 2.600000000000,
+ 0.394238990536, 3.005761009464,
+ 1.300000000000, 2.671643661765,
+ 1.783635597388, 2.500000000000,
+ 4.520000000000, -1.920000000000,
+ 1.000000000000, -1.600000000000,
+ -0.560000000000, 0.200000000000,
};
const double pylith::faults::CohesiveDynDataTri3d::_slipSlipE[] = {
- 14.204227339325, 0.0,
- -0.499803912020, 0.0,
- -0.311359635429, 0.0,
+ -2.279036295232, 0.000000000000,
+ -0.743287323529, 0.000000000000,
+ 0.567271194775, 0.000000000000,
};
// ----------------------------------------------------------------------
@@ -514,41 +511,40 @@
// ----------------------------------------------------------------------
// Input
const double pylith::faults::CohesiveDynDataTri3d::_fieldIncrOpen[] = {
- 9.1, 10.1,
- 9.2, 10.2, // 5
- 9.3, 10.3, // 6
- 9.4, 10.4,
- 9.5, 10.5, // 8
- 9.6, 10.6,
- 9.7, 10.7, // 10
- 9.9, 10.9, // 11
- 9.1, 10.1, // 12
- 9.8, 10.8, // 13
- 9.0, 10.0, // 14
- 9.2, 10.2, // 15
+ 1.1, 2.1,
+ 1.2, 2.2, // 5
+ 1.3, 2.3, // 6
+ 1.4, 2.4,
+ 1.5, 2.5, // 8
+ 1.6, 2.6,
+ 1.2, 2.2, // 10
+ 1.3, 2.3, // 11
+ 1.5, 2.5, // 12
+-10.8, 0.8, // 13
+-10.0, 0.1, // 14
+ 1.2,-10.2, // 15
};
// Output
const double pylith::faults::CohesiveDynDataTri3d::_fieldIncrOpenE[] = {
- 9.100000000000, 10.100000000000,
- 17.946141606808, 1.453858393192,
- 9.300000000000, 16.358051491522,
- 9.400000000000, 10.400000000000,
- 1.376240123890, 19.299429217321,
- 9.600000000000, 10.600000000000,
- 0.953858393192, 19.446141606808,
- 9.900000000000, 4.841948508478,
- 17.223759876110, 1.300570782679,
- -6.800000000000, -8.800000000000,
- -6.000000000000, -8.000000000000,
- -7.200000000000, -9.200000000000,
+ 1.100000000000, 2.100000000000,
+ 9.940107961522, 3.662120348918,
+ 5.688525058023, 5.314075601410,
+ 1.400000000000, 2.400000000000,
+ 3.622067204316, 6.167076609904,
+ 1.600000000000, 2.600000000000,
+ -7.540107961522, 0.737879651082,
+ -3.088525058023, -0.714075601410,
+ -0.622067204316, -1.167076609904,
+ 3.800000000000, -4.800000000000,
+ -3.000000000000, -4.000000000000,
+ -3.200000000000, -4.200000000000,
};
const double pylith::faults::CohesiveDynDataTri3d::_slipOpenE[] = {
--24.737824157567, 0.0,
- 12.116102983044, 0.0,
- 16.247519752219, 17.598858434641,
-
+ -10.292628788528, 14.428129643052,
+ 6.028151202820, 8.777050116045,
+ -4.244134408633, 7.334153219809,
};
// ----------------------------------------------------------------------
@@ -572,7 +568,7 @@
jacobian = const_cast<double*>(_jacobian);
orientation = const_cast<double*>(_orientation);
area = const_cast<double*>(_area);
- forcesInitial = const_cast<double*>(_forcesInitial);
+ initialTractions = const_cast<double*>(_initialTractions);
constraintVertices = const_cast<int*>(_constraintVertices);
numConstraintVert = _numConstraintVert;
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynDataTri3d.hh
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynDataTri3d.hh 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveDynDataTri3d.hh 2011-10-17 22:23:48 UTC (rev 19086)
@@ -67,7 +67,7 @@
static const double _orientation[]; ///< Expected values for fault orientation.
static const double _area[]; ///< Expected values for fault area.
- static const double _forcesInitial[]; ///< Expected values for initial forces.
+ static const double _initialTractions[]; ///< Expected values for initial tractions.
static const double _fieldIncrSlipE[]; ///< Expected values for solution increment for slip case.
static const double _slipSlipE[]; ///< Expected values for slip for slip case.
static const double _fieldIncrOpenE[]; ///< Expected values for solution increment for opening case.
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataHex8.cc
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataHex8.cc 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataHex8.cc 2011-10-17 22:23:48 UTC (rev 19086)
@@ -48,10 +48,10 @@
const int pylith::faults::CohesiveKinDataHex8::_numQuadPts = 4;
const double pylith::faults::CohesiveKinDataHex8::_quadPts[] = {
- -0.57735027, -0.57735027,
- +0.57735027, -0.57735027,
- +0.57735027, +0.57735027,
- -0.57735027, +0.57735027,
+ -1.0, -1.0,
+ +1.0, -1.0,
+ +1.0, +1.0,
+ -1.0, +1.0
};
const double pylith::faults::CohesiveKinDataHex8::_quadWts[] = {
@@ -59,10 +59,10 @@
};
const double pylith::faults::CohesiveKinDataHex8::_basis[] = {
- 0.62200847, 0.16666667, 0.16666667, 0.0446582,
- 0.16666667, 0.62200847, 0.0446582, 0.16666667,
- 0.16666667, 0.0446582, 0.62200847, 0.16666667,
- 0.0446582, 0.16666667, 0.16666667, 0.62200847,
+ 1.0, 0.0, 0.0, 0.0,
+ 0.0, 1.0, 0.0, 0.0,
+ 0.0, 0.0, 1.0, 0.0,
+ 0.0, 0.0, 0.0, 1.0,
};
const double pylith::faults::CohesiveKinDataHex8::_basisDeriv[] = {
@@ -170,9 +170,9 @@
1.5, 1.5, 1.5, // 15
1.7, 1.7, 1.7, // 16
1.9, 1.9, 1.9, // 17
- 1.4, 1.4, 1.4, // 18
- 1.6, 1.6, 1.6, // 19
- 1.8, 1.8, 1.8, // 20
+ 1.0, 1.0, 1.0, // 18
+ 1.0, 1.0, 1.0, // 19
+ 1.0, 1.0, 1.0, // 20
1.0, 1.0, 1.0, // 21
};
@@ -215,22 +215,30 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- -9.4,-5.4,+7.4, // 6
- -9.6,-5.6,+7.6, // 7
- -9.8,-5.8,+7.8, // 8
- -9.0,-5.0,+7.0, // 9
+ +5.4, +7.4, +9.4, // 6
+ +5.6, +7.6, +9.6, // 7
+ +5.8, +7.8, +9.8, // 8
+ +5.0, +7.0, +9.0, // 9
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +9.4,+5.4,-7.4, // 14
- +9.6,+5.6,-7.6, // 15
- +9.8,+5.8,-7.8, // 16
- +9.0,+5.0,-7.0, // 17
- 0.8+1.82575588523, -0.8+-0.55566483464, 0.8+0.07938069066, // 18 (constraint)
- 0.9+1.69682900001, -0.9+-0.56560966667, 0.9+0.14140241667, // 19 (constraint)
- 1.0+1.51709826228, -1.0+-0.54615537442, 1.0+0.18205179147, // 20 (constraint)
- 1.1+1.29378670385, -1.1+-0.49761027071, 1.1+0.19904410828, // 21 (constraint)
+ -5.4, -7.4, -9.4, // 14
+ -5.6, -7.6, -9.6, // 15
+ -5.8, -7.8, -9.8, // 16
+ -5.0, -7.0, -9.0, // 17
+
+ // 18 (constraint)
+ -(5.3-4.5+0.07938069066), -(7.3-6.5+1.82575588523), -(9.3-8.5+0.55566483464),
+
+ // 19 (constraint)
+ -(5.5-4.6+0.14140241667), -(7.5-6.6+1.69682900001), -(9.5-8.6+0.56560966667),
+
+ // 20 (constraint)
+ -(5.7-4.7+0.18205179147), -(7.7-6.7+1.51709826228), -(9.7-8.7+0.54615537442),
+
+ // 21 (constraint)
+ -(5.9-4.8+0.19904410828), -(7.9-6.8+1.29378670385), -(9.9-8.8+0.49761027071),
};
const double pylith::faults::CohesiveKinDataHex8::_residualIncr[] = {
@@ -238,22 +246,30 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- -9.4,-5.4,+7.4, // 6
- -9.6,-5.6,+7.6, // 7
- -9.8,-5.8,+7.8, // 8
- -9.0,-5.0,+7.0, // 9
+ +5.4, +7.4, +9.4, // 6
+ +5.6, +7.6, +9.6, // 7
+ +5.8, +7.8, +9.8, // 8
+ +5.0, +7.0, +9.0, // 9
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +9.4,+5.4,-7.4, // 14
- +9.6,+5.6,-7.6, // 15
- +9.8,+5.8,-7.8, // 16
- +9.0,+5.0,-7.0, // 17
- 0.8+1.82575588523, -0.8+-0.55566483464, 0.8+0.07938069066, // 18 (constraint)
- 0.9+1.69682900001, -0.9+-0.56560966667, 0.9+0.14140241667, // 19 (constraint)
- 1.0+1.51709826228, -1.0+-0.54615537442, 1.0+0.18205179147, // 20 (constraint)
- 1.1+1.29378670385, -1.1+-0.49761027071, 1.1+0.19904410828, // 21 (constraint)
+ -5.4, -7.4, -9.4, // 14
+ -5.6, -7.6, -9.6, // 15
+ -5.8, -7.8, -9.8, // 16
+ -5.0, -7.0, -9.0, // 17
+
+ // 18 (constraint)
+ -(5.3-4.5+0.07938069066), -(7.3-6.5+1.82575588523), -(9.3-8.5+0.55566483464),
+
+ // 19 (constraint)
+ -(5.5-4.6+0.14140241667), -(7.5-6.6+1.69682900001), -(9.5-8.6+0.56560966667),
+
+ // 20 (constraint)
+ -(5.7-4.7+0.18205179147), -(7.7-6.7+1.51709826228), -(9.7-8.7+0.54615537442),
+
+ // 21 (constraint)
+ -(5.9-4.8+0.19904410828), -(7.9-6.8+1.29378670385), -(9.9-8.8+0.49761027071),
};
const double pylith::faults::CohesiveKinDataHex8::_jacobian[] = {
@@ -513,7 +529,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,+1.0, // 18
+ -1.0, 0.0, 0.0, // 18
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -533,7 +549,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 18
+ 0.0,-1.0, 0.0, // 18
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -553,7 +569,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,-1.0, 0.0, // 18
+ 0.0, 0.0,-1.0, // 18
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -574,7 +590,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,+1.0, // 19
+ -1.0, 0.0, 0.0, // 19
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 7y
@@ -594,7 +610,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 19
+ 0.0,-1.0, 0.0, // 19
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 7z
@@ -614,7 +630,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,-1.0, 0.0, // 19
+ 0.0, 0.0,-1.0, // 19
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 8x
@@ -635,7 +651,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,+1.0, // 20
+ -1.0, 0.0, 0.0, // 20
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 8y
0.0, 0.0, 0.0,
@@ -655,7 +671,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 20
+ 0.0,-1.0, 0.0, // 20
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 8z
0.0, 0.0, 0.0,
@@ -675,7 +691,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,-1.0, 0.0, // 20
+ 0.0, 0.0,-1.0, // 20
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 9x
0.0, 0.0, 0.0,
@@ -696,7 +712,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,+1.0, // 21
+ -1.0, 0.0, 0.0, // 21
0.0, 0.0, 0.0, // 9y
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -716,7 +732,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 21
+ 0.0,-1.0, 0.0, // 21
0.0, 0.0, 0.0, // 9z
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -736,7 +752,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,-1.0, 0.0, // 21
+ 0.0, 0.0,-1.0, // 21
0.0, 0.0, 0.0, // 10x
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -993,7 +1009,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,-1.0, // 18
+ +1.0, 0.0, 0.0, // 18
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1013,7 +1029,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 18
+ 0.0,+1.0, 0.0, // 18
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1033,7 +1049,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,+1.0, 0.0, // 18
+ 0.0, 0.0,+1.0, // 18
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1054,7 +1070,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,-1.0, // 19
+ +1.0, 0.0, 0.0, // 19
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 15y
@@ -1074,7 +1090,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 19
+ 0.0,+1.0, 0.0, // 19
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 15z
@@ -1094,7 +1110,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,+1.0, 0.0, // 19
+ 0.0, 0.0,+1.0, // 19
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 16x
@@ -1115,7 +1131,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,-1.0, // 20
+ +1.0, 0.0, 0.0, // 20
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 16y
0.0, 0.0, 0.0,
@@ -1135,7 +1151,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 20
+ 0.0,+1.0, 0.0, // 20
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 16z
0.0, 0.0, 0.0,
@@ -1155,7 +1171,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,+1.0, 0.0, // 20
+ 0.0, 0.0,+1.0, // 20
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 17x
0.0, 0.0, 0.0,
@@ -1176,7 +1192,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,-1.0, // 21
+ +1.0, 0.0, 0.0, // 21
0.0, 0.0, 0.0, // 17y
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1196,7 +1212,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 21
+ 0.0,+1.0, 0.0, // 21
0.0, 0.0, 0.0, // 17z
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1216,12 +1232,12 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,+1.0, 0.0, // 21
+ 0.0, 0.0,+1.0, // 21
0.0, 0.0, 0.0, // 18x
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,+1.0, 0.0, // 6
+ -1.0, 0.0, 0.0, // 6
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1229,7 +1245,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,-1.0, 0.0, // 14
+ +1.0, 0.0, 0.0, // 14
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1241,7 +1257,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,-1.0, // 6
+ 0.0,-1.0, 0.0, // 6
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1249,7 +1265,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,+1.0, // 14
+ 0.0,+1.0, 0.0, // 14
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1261,7 +1277,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 6
+ 0.0, 0.0,-1.0, // 6
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1269,7 +1285,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 14
+ 0.0, 0.0,+1.0, // 14
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1282,7 +1298,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,+1.0, 0.0, // 7
+ -1.0, 0.0, 0.0, // 7
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1290,7 +1306,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,-1.0, 0.0, // 15
+ +1.0, 0.0, 0.0, // 15
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1302,7 +1318,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,-1.0, // 7
+ 0.0,-1.0, 0.0, // 7
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1310,7 +1326,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,+1.0, // 15
+ 0.0,+1.0, 0.0, // 15
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1322,7 +1338,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 7
+ 0.0, 0.0,-1.0, // 7
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1330,7 +1346,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 15
+ 0.0, 0.0,+1.0, // 15
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1343,7 +1359,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,+1.0, 0.0, // 8
+ -1.0, 0.0, 0.0, // 8
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1351,7 +1367,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,-1.0, 0.0, // 16
+ +1.0, 0.0, 0.0, // 16
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1363,7 +1379,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,-1.0, // 8
+ 0.0,-1.0, 0.0, // 8
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1371,7 +1387,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,+1.0, // 16
+ 0.0,+1.0, 0.0, // 8
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1383,7 +1399,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 8
+ 0.0, 0.0,-1.0, // 8
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1391,7 +1407,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 16
+ 0.0, 0.0,+1.0, // 16
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1404,7 +1420,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,+1.0, 0.0, // 9
+ -1.0, 0.0, 0.0, // 9
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1412,7 +1428,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,-1.0, 0.0, // 17
+ +1.0, 0.0, 0.0, // 17
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1424,7 +1440,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,-1.0, // 9
+ 0.0,-1.0, 0.0, // 9
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1432,7 +1448,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,+1.0, // 17
+ 0.0,+1.0, 0.0, // 17
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1444,7 +1460,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 9
+ 0.0, 0.0,-1.0, // 9
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1452,7 +1468,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 17
+ 0.0, 0.0,+1.0, // 17
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1464,22 +1480,22 @@
3.2, 4.2, 5.2,
3.3, 4.3, 5.3,
3.4, 4.4, 5.4,
- 10.1749505588, 9.31910094671, 1.19608248275, // 6
- 10.1039043952, 9.3565301613, 1.55916596774, // 7
- 10.0557317781, 9.37031383702, 1.88484239309, // 8
- 9.46707670425, 8.80701959867, 2.73150557445, // 9
+ 3.81542674923, 5.62624380386, 6.03655867323, // 6
+ 4.05551729839, 5.80814306452, 6.26077887097, // 7
+ 4.29102589574, 5.95854913114, 6.47307768721, // 8
+ 4.5184280556, 6.08059317225, 6.67174581469, // 9
3.9, 4.9, 5.9,
3.0, 4.0, 5.0,
3.1, 4.1, 5.1,
3.2, 4.2, 5.2,
- -4.40186602934, -1.26050109236, 10.2660586738, // 14
- -3.43749802151, -0.573632172048, 9.81022296774, // 15
- -2.65573177809, 0.0296861629776, 9.51515760691, // 16
- -1.46880950929, 1.10387616968, 8.80699471894, // 17
- -7.22865142007, -6.45587627588, -10.0124258381, // 18
- -7.61044825807, -6.46533445161, -10.4062470323, // 19
- -7.93953352294, -6.48576793174, -10.8047440227, // 20
- -7.21263527761, -5.52328996599, -10.2007380677, // 21
+ 2.93604605858, 3.00048791863, 4.68089383859, // 14
+ 3.01411488172, 3.21131406451, 4.7951692043, // 15
+ 3.10897410427, 3.44145086886, 4.92692231279, // 16
+ 3.21938394732, 3.6868064684, 5.07413554398, // 17
+ 0.473140123852, 1.68936570579, 0.804838009839, // 18
+ 0.728827677422, 1.93302890323, 1.05724619355, // 19
+ 1.00474402275, 2.13953352294, 1.31423206826, // 20
+ 1.29317050009, 2.30506771005, 1.56914246644, // 21
};
pylith::faults::CohesiveKinDataHex8::CohesiveKinDataHex8(void)
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataLine2.cc
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataLine2.cc 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataLine2.cc 2011-10-17 22:23:48 UTC (rev 19086)
@@ -121,7 +121,7 @@
const double pylith::faults::CohesiveKinDataLine2::_orientation[] = {
- 1.0
+ 1.0
};
const double pylith::faults::CohesiveKinDataLine2::_area[] = {
@@ -130,17 +130,17 @@
const double pylith::faults::CohesiveKinDataLine2::_residualIncr[] = {
0.0,
- 7.5,
+ +7.5, // 3
0.0,
- -7.5,
+ -7.5, // 5
-0.2+1.89546413727,
};
const double pylith::faults::CohesiveKinDataLine2::_residual[] = {
0.0,
- 7.5, // 3
+ +7.5, // 3
0.0,
- -7.5, // 5
+ -7.5, // 5
-0.2+1.89546413727,
};
@@ -154,10 +154,10 @@
const double pylith::faults::CohesiveKinDataLine2::_fieldIncrAdjusted[] = {
1.1,
- -3.09368089375, // 3
+ 0.419757841424, // 3
1.3,
- 5.33587415261, // 5
- -9.44609796626, // 6
+ 2.11522197869, // 5
+ -1.71653274887, // 6
};
pylith::faults::CohesiveKinDataLine2::CohesiveKinDataLine2(void)
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataQuad4.cc
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataQuad4.cc 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataQuad4.cc 2011-10-17 22:23:48 UTC (rev 19086)
@@ -58,24 +58,24 @@
const int pylith::faults::CohesiveKinDataQuad4::_numBasis = 2;
-const int pylith::faults::CohesiveKinDataQuad4::_numQuadPts = 1;
+const int pylith::faults::CohesiveKinDataQuad4::_numQuadPts = 2;
const double pylith::faults::CohesiveKinDataQuad4::_quadPts[] = {
- 0.0,
+ -1.0, 1.0,
};
const double pylith::faults::CohesiveKinDataQuad4::_quadWts[] = {
- 2.0,
+ 1.0, 1.0
};
const double pylith::faults::CohesiveKinDataQuad4::_basis[] = {
- 0.5,
- 0.5
+ 1.0, 0.0,
+ 0.0, 1.0,
};
const double pylith::faults::CohesiveKinDataQuad4::_basisDeriv[] = {
- -0.5,
- 0.5
+ -0.5, 0.5,
+ -0.5, 0.5,
};
const double pylith::faults::CohesiveKinDataQuad4::_verticesRef[] = {
@@ -130,7 +130,7 @@
1.6, 1.6,
1.7, 1.7, // 8
1.9, 1.9, // 9
- 1.8, 1.8, // 10
+ 1.0, 1.0, // 10
1.0, 1.0, // 11
};
@@ -171,27 +171,31 @@
const double pylith::faults::CohesiveKinDataQuad4::_residual[] = {
0.0, 0.0,
0.0, 0.0,
- 9.8, 8.8, // 4
- 9.0, 8.0, // 5
+ +8.8, +9.8, // 4
+ +8.0, +9.0, // 5
0.0, 0.0,
0.0, 0.0,
- -9.8, -8.8, // 8
- -9.0, -8.0, // 9
- -0.4+1.77538035254, -0.4+0.14794836271, // 10
- -0.5+1.89546413727, -0.5+0.08241148423, // 11
+ -8.8, -9.8, // 8
+ -8.0, -9.0, // 9
+ -(8.7-8.3) + 0.14794836271,
+ -(9.7-9.3) + 1.77538035254, // 10
+ -(8.9-8.4) + 0.08241148423,
+ -(9.9-9.4) + 1.89546413727, // 11
};
const double pylith::faults::CohesiveKinDataQuad4::_residualIncr[] = {
0.0, 0.0,
0.0, 0.0,
- 9.8, 8.8, // 4
- 9.0, 8.0, // 5
+ +8.8, +9.8, // 4
+ +8.0, +9.0, // 5
0.0, 0.0,
0.0, 0.0,
- -9.8, -8.8, // 8
- -9.0, -8.0, // 9
- -0.4+1.77538035254, -0.4+0.14794836271, // 10
- -0.5+1.89546413727, -0.5+0.08241148423, // 11
+ -8.8, -9.8, // 8
+ -8.0, -9.0, // 9
+ -(8.7-8.3) + 0.14794836271,
+ -(9.7-9.3) + 1.77538035254, // 10
+ -(8.9-8.4) + 0.08241148423,
+ -(9.9-9.4) + 1.89546413727, // 11
};
const double pylith::faults::CohesiveKinDataQuad4::_jacobian[] = {
@@ -243,7 +247,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- 0.0,-1.0, // 10
+ -1.0, 0.0, // 10
0.0, 0.0,
0.0, 0.0, // 4y
0.0, 0.0,
@@ -253,7 +257,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- -1.0, 0.0, // 10
+ 0.0,-1.0, // 10
0.0, 0.0,
0.0, 0.0, // 5x
0.0, 0.0,
@@ -264,7 +268,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- 0.0,-1.0, // 11
+ -1.0, 0.0, // 11
0.0, 0.0, // 5y
0.0, 0.0,
0.0, 0.0,
@@ -274,7 +278,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- -1.0, 0.0, // 11
+ 0.0,-1.0, // 11
0.0, 0.0, // 6x
0.0, 0.0,
0.0, 0.0,
@@ -323,7 +327,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- 0.0,+1.0, // 10
+ +1.0, 0.0, // 10
0.0, 0.0,
0.0, 0.0, // 8y
0.0, 0.0,
@@ -333,7 +337,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- +1.0, 0.0, // 10
+ 0.0,+1.0, // 10
0.0, 0.0,
0.0, 0.0, // 9x
0.0, 0.0,
@@ -344,7 +348,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- 0.0,+1.0, // 11
+ +1.0, 0.0, // 11
0.0, 0.0, // 9y
0.0, 0.0,
0.0, 0.0,
@@ -354,45 +358,45 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- +1.0, 0.0, // 11
+ 0.0,+1.0, // 11
0.0, 0.0, // 10x
0.0, 0.0,
- 0.0,-1.0, // 4
+ -1.0, 0.0, // 4
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- 0.0,+1.0, // 8
+ +1.0, 0.0, // 8
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
0.0, 0.0, // 10y
0.0, 0.0,
- -1.0, 0.0, // 4
+ 0.0,-1.0, // 4
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- +1.0, 0.0, // 8
+ 0.0,+1.0, // 8
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
0.0, 0.0, // 11x
0.0, 0.0,
0.0, 0.0,
- 0.0,-1.0, // 5
+ -1.0, 0.0, // 5
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- 0.0,+1.0, // 9
+ +1.0, 0.0, // 9
0.0, 0.0,
0.0, 0.0,
0.0, 0.0, // 11y
0.0, 0.0,
0.0, 0.0,
- -1.0, 0.0, // 5
+ 0.0,-1.0, // 5
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- +1.0, 0.0, // 9
+ 0.0,+1.0, // 9
0.0, 0.0,
0.0, 0.0,
};
@@ -400,14 +404,14 @@
const double pylith::faults::CohesiveKinDataQuad4::_fieldIncrAdjusted[] = {
3.1, 4.1,
3.2, 4.2,
- -4.09563227733, -3.248612969, // 4
- -2.78814167707, -2.11773476302, // 5
+ 3.6694959278, 3.74728446689, // 4
+ 3.92830853938, 3.88442973915, // 5
3.5, 4.5,
3.6, 4.6,
- 9.35548350619, 10.472468741, // 8
- 8.459683341, 9.70254140433, // 9
- -9.8131968597, -9.61432196053, // 10
- -9.12482866822, -8.66339834789, // 11
+ 3.41744429051, 5.12266481943, // 8
+ 3.51072002361, 5.27989387642, // 9
+ 0.480344706137, -0.718530193038, // 10
+ 0.739631955136, -0.721798365193, // 11
};
pylith::faults::CohesiveKinDataQuad4::CohesiveKinDataQuad4(void)
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataQuad4e.cc
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataQuad4e.cc 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataQuad4e.cc 2011-10-17 22:23:48 UTC (rev 19086)
@@ -77,24 +77,24 @@
const int pylith::faults::CohesiveKinDataQuad4e::_numBasis = 2;
-const int pylith::faults::CohesiveKinDataQuad4e::_numQuadPts = 1;
+const int pylith::faults::CohesiveKinDataQuad4e::_numQuadPts = 2;
const double pylith::faults::CohesiveKinDataQuad4e::_quadPts[] = {
- 0.0,
+ -1.0, 1.0,
};
const double pylith::faults::CohesiveKinDataQuad4e::_quadWts[] = {
- 2.0,
+ 1.0, 1.0,
};
const double pylith::faults::CohesiveKinDataQuad4e::_basis[] = {
- 0.5,
- 0.5
+ 1.0, 0.0,
+ 0.0, 1.0,
};
const double pylith::faults::CohesiveKinDataQuad4e::_basisDeriv[] = {
- -0.5,
- 0.5
+ -0.5, 0.5,
+ -0.5, 0.5,
};
const double pylith::faults::CohesiveKinDataQuad4e::_verticesRef[] = {
@@ -134,6 +134,45 @@
+const double pylith::faults::CohesiveKinDataQuad4e::_fieldIncr[] = {
+ 6.1, 4.1,
+ 6.2, 4.2,
+ 6.3, 4.3, // 6
+ 6.4, 4.4, // 7
+ 6.5, 4.5,
+ 6.6, 4.6,
+ 6.7, 4.7,
+ 6.8, 4.8, // 11
+ 6.9, 4.9,
+ 6.0, 4.0, // 13
+ 5.2, 3.2, // 14
+ 5.4, 3.4, // 15
+ 5.1, 3.1, // 16
+ 5.3, 3.3, // 17
+ 5.5, 3.5, // 18
+};
+
+
+const double pylith::faults::CohesiveKinDataQuad4e::_jacobianLumped[] = {
+ 1.1, 7.1,
+ 1.2, 7.2,
+ 1.3, 7.3, // 6
+ 1.4, 7.4, // 7
+ 1.5, 7.5,
+ 1.6, 7.6,
+ 1.7, 7.7,
+ 1.8, 7.8, // 11
+ 1.9, 7.9,
+ 1.0, 7.0, // 13
+ 2.2, 3.2, // 14
+ 2.4, 3.4, // 15
+ 1.0, 1.0, // 16
+ 1.0, 1.0, // 17
+ 1.0, 1.0, // 18
+};
+
+
+
const double pylith::faults::CohesiveKinDataQuad4e::_orientation[] = {
0.0, -1.0, -1.0, 0.0,
0.0, -1.0, -1.0, 0.0,
@@ -172,37 +211,43 @@
const double pylith::faults::CohesiveKinDataQuad4e::_residual[] = {
0.0, 0.0,
0.0, 0.0,
- -6.1, -4.1, // 6
- -6.3, -4.3, // 7
+ +1.0*4.1, +1.0*6.1, // 6
+ +2.0*4.3, +2.0*6.3, // 7
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- -6.5, -4.5, // 11
+ +1.0*4.5, +1.0*6.5, // 11
0.0, 0.0,
- +6.1, +4.1, // 13
- +6.3, +4.3, // 15
- +6.5, +4.5, // 17
- -0.3+1.77538035254, -0.3+0.14794836271, // 16
- 0.8+1.89546413727, 0.8+0.08241148423, // 17
- 0.6+1.59887481971, 0.6+0.19186497837, // 18
+ -1.0*4.1, -1.0*6.1, // 13
+ -2.0*4.3, -2.0*6.3, // 14
+ -1.0*4.5, -1.0*6.5, // 15
+ -1.0*(3.0-3.3 + 0.14794836271),
+ -1.0*(5.0-5.3 + 1.77538035254), // 16
+ -2.0*(4.2-3.4 + 0.08241148423),
+ -2.0*(6.2-5.4 + 1.89546413727), // 17
+ -1.0*(4.4-3.8 + 0.19186497837),
+ -1.0*(6.4-5.8 + 1.59887481971), // 18
};
const double pylith::faults::CohesiveKinDataQuad4e::_residualIncr[] = {
0.0, 0.0,
0.0, 0.0,
- -6.1, -4.1, // 6
- -6.3, -4.3, // 7
+ +1.0*4.1, +1.0*6.1, // 6
+ +2.0*4.3, +2.0*6.3, // 7
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- -6.5, -4.5, // 11
+ +1.0*4.5, +1.0*6.5, // 11
0.0, 0.0,
- +6.1, +4.1, // 13
- +6.3, +4.3, // 15
- +6.5, +4.5, // 17
- -0.3+1.77538035254, -0.3+0.14794836271, // 16
- 0.8+1.89546413727, 0.8+0.08241148423, // 17
- 0.6+1.59887481971, 0.6+0.19186497837, // 18
+ -1.0*4.1, -1.0*6.1, // 13
+ -2.0*4.3, -2.0*6.3, // 14
+ -1.0*4.5, -1.0*6.5, // 15
+ -1.0*(3.0-3.3 + 0.14794836271),
+ -1.0*(5.0-5.3 + 1.77538035254), // 16
+ -2.0*(4.2-3.4 + 0.08241148423),
+ -2.0*(6.2-5.4 + 1.89546413727), // 17
+ -1.0*(4.4-3.8 + 0.19186497837),
+ -1.0*(6.4-5.8 + 1.59887481971), // 18
};
const double pylith::faults::CohesiveKinDataQuad4e::_jacobian[] = {
@@ -278,7 +323,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- 0.0,+1.0, // 16
+ -1.0, 0.0, // 16
0.0, 0.0,
0.0, 0.0,
0.0, 0.0, // 6y
@@ -293,7 +338,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- +1.0, 0.0, // 16
+ 0.0,-1.0, // 16
0.0, 0.0,
0.0, 0.0,
0.0, 0.0, // 7x
@@ -309,7 +354,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- 0.0,+1.0, // 17
+ -2.0, 0.0, // 17
0.0, 0.0,
0.0, 0.0, // 7y
0.0, 0.0,
@@ -324,7 +369,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- +1.0, 0.0, // 17
+ 0.0,-2.0, // 17
0.0, 0.0,
0.0, 0.0, // 8x
0.0, 0.0,
@@ -430,7 +475,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- 0.0,+1.0, // 18
+ -1.0, 0.0, // 18
0.0, 0.0, // 11y
0.0, 0.0,
0.0, 0.0,
@@ -445,7 +490,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- +1.0, 0.0, // 18
+ 0.0,-1.0, // 18
0.0, 0.0, // 12x
0.0, 0.0,
0.0, 0.0,
@@ -488,7 +533,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- 0.0,-1.0, // 16
+ +1.0, 0.0, // 16
0.0, 0.0,
0.0, 0.0,
0.0, 0.0, // 13y
@@ -503,7 +548,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- -1.0, 0.0, // 16
+ 0.0,+1.0, // 16
0.0, 0.0,
0.0, 0.0,
0.0, 0.0, // 14x
@@ -519,7 +564,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- 0.0,-1.0, // 17
+ +2.0, 0.0, // 17
0.0, 0.0,
0.0, 0.0, // 14y
0.0, 0.0,
@@ -534,7 +579,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- -1.0, 0.0, // 17
+ 0.0,+2.0, // 17
0.0, 0.0,
0.0, 0.0, // 15x
0.0, 0.0,
@@ -550,7 +595,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- 0.0,-1.0, // 18
+ +1.0, 0.0, // 18
0.0, 0.0, // 15y
0.0, 0.0,
0.0, 0.0,
@@ -565,17 +610,17 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- -1.0, 0.0, // 18
+ 0.0,+1.0, // 18
0.0, 0.0, // 16x
0.0, 0.0,
- 0.0,+1.0, // 6
+ -1.0, 0.0, // 6
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- 0.0,-1.0, // 13
+ +1.0, 0.0, // 13
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
@@ -583,14 +628,14 @@
0.0, 0.0,
0.0, 0.0, // 16y
0.0, 0.0,
- +1.0, 0.0, // 6
+ 0.0,-1.0, // 6
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- -1.0, 0.0, // 13
+ 0.0,+1.0, // 13
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
@@ -599,14 +644,14 @@
0.0, 0.0, // 17x
0.0, 0.0,
0.0, 0.0,
- 0.0,+1.0, // 7
+ -2.0, 0.0, // 7
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- 0.0,-1.0, // 14
+ +2.0, 0.0, // 14
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
@@ -614,14 +659,14 @@
0.0, 0.0, // 17y
0.0, 0.0,
0.0, 0.0,
- +1.0, 0.0, // 7
+ 0.0,-2.0, // 7
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- -1.0, 0.0, // 14
+ 0.0,+2.0, // 14
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
@@ -633,11 +678,11 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- 0.0,+1.0, // 11
+ -1.0, 0.0, // 11
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- 0.0,-1.0, // 15
+ +1.0, 0.0, // 15
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
@@ -648,11 +693,11 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- +1.0, 0.0, // 11
+ 0.0,-1.0, // 11
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- -1.0, 0.0, // 15
+ 0.0,+1.0, // 15
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
@@ -676,6 +721,8 @@
slipTimeFilename = const_cast<char*>(_slipTimeFilename);
riseTimeFilename = const_cast<char*>(_riseTimeFilename);
fieldT = const_cast<double*>(_fieldT);
+ fieldIncr = const_cast<double*>(_fieldIncr);
+ jacobianLumped = const_cast<double*>(_jacobianLumped);
orientation = const_cast<double*>(_orientation);
area = const_cast<double*>(_area);
residual = const_cast<double*>(_residual);
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataQuad4e.hh
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataQuad4e.hh 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataQuad4e.hh 2011-10-17 22:23:48 UTC (rev 19086)
@@ -64,6 +64,8 @@
//@}
static const double _fieldT[]; ///< Solution field at time t.
+ static const double _fieldIncr[]; ///< Solution increment field over domain at time t.
+ static const double _jacobianLumped[]; ///< Lumped Jacobian.
static const double _orientation[]; ///< Expected values for fault orientation.
static const double _area[]; ///< Expected values for fault area.
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataTet4.cc
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataTet4.cc 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataTet4.cc 2011-10-17 22:23:48 UTC (rev 19086)
@@ -44,24 +44,34 @@
const int pylith::faults::CohesiveKinDataTet4::_numBasis = 3;
-const int pylith::faults::CohesiveKinDataTet4::_numQuadPts = 1;
+const int pylith::faults::CohesiveKinDataTet4::_numQuadPts = 3;
const double pylith::faults::CohesiveKinDataTet4::_quadPts[] = {
- -3.33333333e-01, -3.33333333e-01,
+ -1.00000000e+00, -1.00000000e+00,
+ 1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00, 1.00000000e+00,
};
const double pylith::faults::CohesiveKinDataTet4::_quadWts[] = {
- 2.0,
+ 2.0/3.0, 2.0/3.0, 2.0/3.0,
};
const double pylith::faults::CohesiveKinDataTet4::_basis[] = {
- 3.33333333e-01, 3.33333333e-01,
- 3.33333333e-01,};
+ 1.0, 0.0, 0.0,
+ 0.0, 1.0, 0.0,
+ 0.0, 0.0, 1.0,
+};
const double pylith::faults::CohesiveKinDataTet4::_basisDeriv[] = {
-0.50000000e+00, -0.50000000e+00,
0.50000000e+00, 0.00000000e+00,
0.00000000e+00, 0.50000000e+00,
+ -0.50000000e+00, -0.50000000e+00,
+ 0.50000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.50000000e+00,
+ -0.50000000e+00, -0.50000000e+00,
+ 0.50000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.50000000e+00,
};
const double pylith::faults::CohesiveKinDataTet4::_verticesRef[] = {
@@ -120,9 +130,9 @@
1.6, 1.6, 1.6, // 7
1.8, 1.8, 1.8, // 8
1.0, 1.0, 1.0, // 9
- 1.7, 1.7, 1.7, // 10
- 1.9, 1.9, 1.9, // 11
- 1.1, 1.1, 1.1, // 12
+ 1.0, 1.0, 1.0, // 10
+ 1.0, 1.0, 1.0, // 11
+ 1.0, 1.0, 1.0, // 12
};
const int pylith::faults::CohesiveKinDataTet4::_numFaultVertices = 3;
@@ -163,30 +173,42 @@
const double pylith::faults::CohesiveKinDataTet4::_residual[] = {
0.0, 0.0, 0.0,
- 9.7, 7.7, 8.7, // 3
- 9.9, 7.9, 8.9, // 4
- 9.1, 7.1, 8.1, // 5
+ +7.7/3.0, +8.7/3.0, +9.7/3.0, // 3
+ +7.9/3.0, +8.9/3.0, +9.9/3.0, // 4
+ +7.1/3.0, +8.1/3.0, +9.1/3.0, // 5
0.0, 0.0, 0.0,
- -9.7, -7.7, -8.7, // 7
- -9.9, -7.9, -8.9, // 4
- -9.1, -7.1, -8.1, // 5
- -0.4+1.82575588523, -0.4+-0.55566483464, -0.4+0.07938069066, // 10
- -0.5+1.69682900001, -0.5+-0.56560966667, -0.5+0.14140241667, // 11
- 0.4+1.51709826228, 0.4+-0.54615537442, 0.4+0.18205179147, // 12
+ -7.7/3.0, -8.7/3.0, -9.7/3.0, // 7
+ -7.9/3.0, -8.9/3.0, -9.9/3.0, // 8
+ -7.1/3.0, -8.1/3.0, -9.1/3.0, // 9
+ -1.0/3.0*(7.6-7.2 + -0.07938069066),
+ -1.0/3.0*(8.6-8.2 + -1.82575588523),
+ -1.0/3.0*(9.6-9.2 + 0.55566483464), // 10
+ -1.0/3.0*(7.8-7.3 + -0.14140241667),
+ -1.0/3.0*(8.8-8.3 + -1.69682900001),
+ -1.0/3.0*(9.8-9.3 + 0.56560966667), // 11
+ -1.0/3.0*(7.0-7.4 + -0.18205179147),
+ -1.0/3.0*(8.0-8.4 + -1.51709826228),
+ -1.0/3.0*(9.0-9.4 + 0.54615537442), // 12
};
const double pylith::faults::CohesiveKinDataTet4::_residualIncr[] = {
0.0, 0.0, 0.0,
- 9.7, 7.7, 8.7, // 3
- 9.9, 7.9, 8.9, // 4
- 9.1, 7.1, 8.1, // 5
+ +7.7/3.0, +8.7/3.0, +9.7/3.0, // 3
+ +7.9/3.0, +8.9/3.0, +9.9/3.0, // 4
+ +7.1/3.0, +8.1/3.0, +9.1/3.0, // 5
0.0, 0.0, 0.0,
- -9.7, -7.7, -8.7, // 7
- -9.9, -7.9, -8.9, // 4
- -9.1, -7.1, -8.1, // 5
- -0.4+1.82575588523, -0.4+-0.55566483464, -0.4+0.07938069066, // 10
- -0.5+1.69682900001, -0.5+-0.56560966667, -0.5+0.14140241667, // 11
- 0.4+1.51709826228, 0.4+-0.54615537442, 0.4+0.18205179147, // 12
+ -7.7/3.0, -8.7/3.0, -9.7/3.0, // 7
+ -7.9/3.0, -8.9/3.0, -9.9/3.0, // 8
+ -7.1/3.0, -8.1/3.0, -9.1/3.0, // 9
+ -1.0/3.0*(7.6-7.2 + -0.07938069066),
+ -1.0/3.0*(8.6-8.2 + -1.82575588523),
+ -1.0/3.0*(9.6-9.2 + 0.55566483464), // 10
+ -1.0/3.0*(7.8-7.3 + -0.14140241667),
+ -1.0/3.0*(8.8-8.3 + -1.69682900001),
+ -1.0/3.0*(9.8-9.3 + 0.56560966667), // 11
+ -1.0/3.0*(7.0-7.4 + -0.18205179147),
+ -1.0/3.0*(8.0-8.4 + -1.51709826228),
+ -1.0/3.0*(9.0-9.4 + 0.54615537442), // 12
};
const double pylith::faults::CohesiveKinDataTet4::_jacobian[] = {
@@ -231,7 +253,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,-1.0, // 10
+ -1.0/3.0, 0.0, 0.0, // 10
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 3y
@@ -242,7 +264,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 10
+ 0.0,-1.0/3.0, 0.0, // 10
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 3z
@@ -253,7 +275,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,-1.0, 0.0, // 10
+ 0.0, 0.0,-1.0/3.0, // 10
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 4x
@@ -265,7 +287,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,-1.0, // 11
+ -1.0/3.0, 0.0, 0.0, // 11
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 4y
0.0, 0.0, 0.0,
@@ -276,7 +298,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 11
+ 0.0,-1.0/3.0, 0.0, // 11
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 4z
0.0, 0.0, 0.0,
@@ -287,7 +309,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,-1.0, 0.0, // 11
+ 0.0, 0.0,-1.0/3.0, // 11
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 5x
0.0, 0.0, 0.0,
@@ -299,7 +321,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,-1.0, // 12
+ -1.0/3.0, 0.0, 0.0, // 12
0.0, 0.0, 0.0, // 5y
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -310,7 +332,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 12
+ 0.0,-1.0/3.0, 0.0, // 12
0.0, 0.0, 0.0, // 5z
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -321,7 +343,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,-1.0, 0.0, // 12
+ 0.0, 0.0,-1.0/3.0, // 12
0.0, 0.0, 0.0, // 6x
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -363,7 +385,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,+1.0, // 10
+ +1.0/3.0, 0.0, 0.0, // 10
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 7y
@@ -374,7 +396,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 10
+ 0.0,+1.0/3.0, 0.0, // 10
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 7z
@@ -385,7 +407,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,+1.0, 0.0, // 10
+ 0.0, 0.0,+1.0/3.0, // 10
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 8x
@@ -397,7 +419,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,+1.0, // 11
+ +1.0/3.0, 0.0, 0.0, // 11
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 8y
0.0, 0.0, 0.0,
@@ -408,7 +430,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 11
+ 0.0,+1.0/3.0, 0.0, // 11
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 8z
0.0, 0.0, 0.0,
@@ -419,7 +441,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,+1.0, 0.0, // 11
+ 0.0, 0.0,+1.0/3.0, // 11
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 9x
0.0, 0.0, 0.0,
@@ -431,7 +453,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,+1.0, // 12
+ +1.0/3.0, 0.0, 0.0, // 12
0.0, 0.0, 0.0, // 9y
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -442,7 +464,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 12
+ 0.0,+1.0/3.0, 0.0, // 12
0.0, 0.0, 0.0, // 9z
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -453,35 +475,35 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,+1.0, 0.0, // 12
+ 0.0, 0.0,+1.0/3.0, // 12
0.0, 0.0, 0.0, // 10x
- 0.0,-1.0, 0.0, // 3
+ -1.0/3.0, 0.0, 0.0, // 3
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,+1.0, 0.0, // 7
+ +1.0/3.0, 0.0, 0.0, // 7
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 10y
- 0.0, 0.0,-1.0, // 3
+ 0.0,-1.0/3.0, 0.0, // 3
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,+1.0, // 7
+ 0.0,+1.0/3.0, 0.0, // 7
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 10z
- -1.0, 0.0, 0.0, // 3
+ 0.0, 0.0,-1.0/3.0, // 3
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 7
+ 0.0, 0.0,+1.0/3.0, // 7
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -489,33 +511,33 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 11x
0.0, 0.0, 0.0,
- 0.0,-1.0, 0.0, // 4
+ -1.0/3.0, 0.0, 0.0, // 4
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,+1.0, 0.0, // 8
+ +1.0/3.0, 0.0, 0.0, // 8
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 11y
0.0, 0.0, 0.0,
- 0.0, 0.0,-1.0, // 4
+ 0.0,-1.0/3.0, 0.0, // 4
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,+1.0, // 8
+ 0.0,+1.0/3.0, 0.0, // 8
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 11z
0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 4
+ 0.0, 0.0,-1.0/3.0, // 4
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 8
+ 0.0, 0.0,+1.0/3.0, // 8
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -523,33 +545,33 @@
0.0, 0.0, 0.0, // 12x
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,-1.0, 0.0, // 5
+ -1.0/3.0, 0.0, 0.0, // 5
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,+1.0, 0.0, // 9
+ +1.0/3.0, 0.0, 0.0, // 9
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 12y
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,-1.0, // 5
+ 0.0,-1.0/3.0, 0.0, // 5
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,+1.0, // 9
+ 0.0,+1.0/3.0, 0.0, // 9
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 12z
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 5
+ 0.0, 0.0,-1.0/3.0, // 5
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 9
+ 0.0, 0.0,+1.0/3.0, // 9
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -557,16 +579,16 @@
const double pylith::faults::CohesiveKinDataTet4::_fieldIncrAdjusted[] = {
3.1, 4.1, 5.1,
- -4.70012229942, -3.03138431537, -1.50390580878, // 3
- -4.10716666377, -2.47185604467, -0.927412749378, // 4
- -3.34252157978, -1.47021951405, -0.324816213039, // 5
+ 3.61178246248, 3.61385377987, 5.97466561979, // 3
+ 3.79854053226, 3.8953896129, 6.20906367742, // 4
+ 2.99081175355, 3.43454239072, 5.29423140601, // 5
3.5, 4.5, 5.5,
- 9.52509172457, 10.0235382365, 10.6279293566, // 7
- 9.14962036828, 9.69078492115, 10.2975758746, // 8
- 12.4395302117, 12.2183073197, 13.0147426983, // 9
- -8.67766117844, -8.04468697053, -9.48014675931, // 10
- -8.80341285807, -8.09563657419, -9.62931666291, // 11
- -8.21830731966, -8.01474269826, -9.43953021169, // 12
+ 3.29116315314, 5.0396096651, 5.01900078515, // 7
+ 3.43994294893, 5.09221861291, 5.14345401075, // 8
+ 3.57286354502, 5.351640653, 5.14807603159, // 9
+ 1.48241686493, -2.11012639247, 2.78879623126, // 10
+ 1.9443080758, -1.5779805097, 3.54534834194, // 11
+ -1.71859063507, -4.05492195899, -0.444228094765, // 12
};
pylith::faults::CohesiveKinDataTet4::CohesiveKinDataTet4(void)
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataTet4e.cc
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataTet4e.cc 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataTet4e.cc 2011-10-17 22:23:48 UTC (rev 19086)
@@ -44,24 +44,34 @@
const int pylith::faults::CohesiveKinDataTet4e::_numBasis = 3;
-const int pylith::faults::CohesiveKinDataTet4e::_numQuadPts = 1;
+const int pylith::faults::CohesiveKinDataTet4e::_numQuadPts = 3;
const double pylith::faults::CohesiveKinDataTet4e::_quadPts[] = {
- -3.33333333e-01, -3.33333333e-01,
+ -1.00000000e+00, -1.00000000e+00,
+ 1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00, 1.00000000e+00,
};
const double pylith::faults::CohesiveKinDataTet4e::_quadWts[] = {
- 2.0,
+ 2.0/3.0, 2.0/3.0, 2.0/3.0,
};
const double pylith::faults::CohesiveKinDataTet4e::_basis[] = {
- 3.33333333e-01, 3.33333333e-01,
- 3.33333333e-01,};
+ 1.0, 0.0, 0.0,
+ 0.0, 1.0, 0.0,
+ 0.0, 0.0, 1.0,
+};
const double pylith::faults::CohesiveKinDataTet4e::_basisDeriv[] = {
-0.50000000e+00, -0.50000000e+00,
0.50000000e+00, 0.00000000e+00,
0.00000000e+00, 0.50000000e+00,
+ -0.50000000e+00, -0.50000000e+00,
+ 0.50000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.50000000e+00,
+ -0.50000000e+00, -0.50000000e+00,
+ 0.50000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.50000000e+00,
};
const double pylith::faults::CohesiveKinDataTet4e::_verticesRef[] = {
@@ -100,7 +110,41 @@
4.4, 6.4, 8.4, // 17
};
+const double pylith::faults::CohesiveKinDataTet4e::_fieldIncr[] = {
+ 6.1, 7.1, 2.1,
+ 6.2, 7.2, 2.2, // 5
+ 6.3, 7.3, 2.3, // 6
+ 6.4, 7.4, 2.4, // 7
+ 6.5, 7.5, 2.5, // 8
+ 6.6, 7.6, 2.6,
+ 6.7, 7.7, 2.7, // 10
+ 6.9, 7.9, 2.9, // 11
+ 5.1, 8.1, 1.1, // 12
+ 5.3, 8.3, 1.3, // 13
+ 4.8, 8.8, 2.8, // 14
+ 4.0, 8.0, 2.0, // 15
+ 5.2, 8.2, 1.2, // 16
+ 5.4, 8.4, 1.4, // 17
+};
+const double pylith::faults::CohesiveKinDataTet4e::_jacobianLumped[] = {
+ 4.1, 6.1, 8.1,
+ 4.2, 6.2, 8.2, // 5
+ 4.3, 6.3, 8.3, // 6
+ 4.4, 6.4, 8.4, // 7
+ 4.5, 6.5, 8.5, // 8
+ 4.6, 6.6, 8.6,
+ 4.7, 6.7, 8.7, // 10
+ 4.9, 6.9, 8.9, // 11
+ 3.1, 5.1, 7.1, // 12
+ 3.3, 5.3, 7.3, // 13
+ 1.0, 1.0, 1.0, // 14
+ 1.0, 1.0, 1.0, // 15
+ 1.0, 1.0, 1.0, // 16
+ 1.0, 1.0, 1.0, // 17
+};
+
+
const double pylith::faults::CohesiveKinDataTet4e::_orientation[] = {
0.0, +1.0, 0.0, 0.0, 0.0, +1.0, +1.0, 0.0, 0.0,
0.0, +1.0, 0.0, 0.0, 0.0, +1.0, +1.0, 0.0, 0.0,
@@ -141,36 +185,60 @@
const double pylith::faults::CohesiveKinDataTet4e::_residual[] = {
0.0, 0.0, 0.0,
- 7.8, 3.8, 5.8, // 5
- 7.0, 3.0, 5.0, // 6
- 8.2, 4.2, 6.2, // 7
- 8.4, 4.4, 6.4, // 8
+ +2.0/3.0*3.8, +2.0/3.0*5.8, +2.0/3.0*7.8, // 5
+ +1.0/3.0*3.0, +1.0/3.0*5.0, +1.0/3.0*7.0, // 6
+ +2.0/3.0*4.2, +2.0/3.0*6.2, +2.0/3.0*8.2, // 7
+ +1.0/3.0*4.4, +1.0/3.0*6.4, +1.0/3.0*8.4, // 8
0.0, 0.0, 0.0,
- -7.8, -3.8, -5.8, // 10
- -7.0, -3.0, -5.0, // 11
- -8.2, -4.2, -6.2, // 12
- -8.4, -4.4, -6.4, // 13
- -0.5+1.82575588523, -0.5+-0.55566483464, -0.5+0.07938069066, // 14
- -0.6+1.69682900001, -0.6+-0.56560966667, -0.6+0.14140241667, // 15
- -0.7+1.51709826228, -0.7-0.54615537442, -0.7+0.18205179147, // 16
- -0.8+1.29378670385, -0.8-0.49761027071, -0.8+0.19904410828, // 17
+ -2.0/3.0*3.8, -2.0/3.0*5.8, -2.0/3.0*7.8, // 10
+ -1.0/3.0*3.0, -1.0/3.0*5.0, -1.0/3.0*7.0, // 11
+ -2.0/3.0*4.2, -2.0/3.0*6.2, -2.0/3.0*8.2, // 12
+ -1.0/3.0*4.4, -1.0/3.0*6.4, -1.0/3.0*8.4, // 13
+
+ -2.0/3.0*(3.7-3.2 + -0.07938069066),
+ -2.0/3.0*(5.7-5.2 + -1.82575588523),
+ -2.0/3.0*(7.7-7.2 + 0.55566483464), // 14
+
+ -1.0/3.0*(3.9-3.3 + -0.14140241667),
+ -1.0/3.0*(5.9-5.3 + -1.69682900001),
+ -1.0/3.0*(7.9-7.3 + 0.56560966667), // 15
+
+ -2.0/3.0*(4.1-3.4 + -0.18205179147),
+ -2.0/3.0*(6.1-5.4 + -1.51709826228),
+ -2.0/3.0*(8.1-7.4 + 0.54615537442), // 16
+
+ -1.0/3.0*(4.3-3.5 + -0.19904410828),
+ -1.0/3.0*(6.3-5.5 + -1.29378670385),
+ -1.0/3.0*(8.3-7.5 + 0.49761027071), // 17
};
const double pylith::faults::CohesiveKinDataTet4e::_residualIncr[] = {
0.0, 0.0, 0.0,
- 7.8, 3.8, 5.8, // 5
- 7.0, 3.0, 5.0, // 6
- 8.2, 4.2, 6.2, // 7
- 8.4, 4.4, 6.4, // 8
+ +2.0/3.0*3.8, +2.0/3.0*5.8, +2.0/3.0*7.8, // 5
+ +1.0/3.0*3.0, +1.0/3.0*5.0, +1.0/3.0*7.0, // 6
+ +2.0/3.0*4.2, +2.0/3.0*6.2, +2.0/3.0*8.2, // 7
+ +1.0/3.0*4.4, +1.0/3.0*6.4, +1.0/3.0*8.4, // 8
0.0, 0.0, 0.0,
- -7.8, -3.8, -5.8, // 10
- -7.0, -3.0, -5.0, // 11
- -8.2, -4.2, -6.2, // 12
- -8.4, -4.4, -6.4, // 13
- -0.5+1.82575588523, -0.5+-0.55566483464, -0.5+0.07938069066, // 14
- -0.6+1.69682900001, -0.6+-0.56560966667, -0.6+0.14140241667, // 15
- -0.7+1.51709826228, -0.7-0.54615537442, -0.7+0.18205179147, // 16
- -0.8+1.29378670385, -0.8-0.49761027071, -0.8+0.19904410828, // 17
+ -2.0/3.0*3.8, -2.0/3.0*5.8, -2.0/3.0*7.8, // 10
+ -1.0/3.0*3.0, -1.0/3.0*5.0, -1.0/3.0*7.0, // 11
+ -2.0/3.0*4.2, -2.0/3.0*6.2, -2.0/3.0*8.2, // 12
+ -1.0/3.0*4.4, -1.0/3.0*6.4, -1.0/3.0*8.4, // 13
+
+ -2.0/3.0*(3.7-3.2 + -0.07938069066),
+ -2.0/3.0*(5.7-5.2 + -1.82575588523),
+ -2.0/3.0*(7.7-7.2 + 0.55566483464), // 14
+
+ -1.0/3.0*(3.9-3.3 + -0.14140241667),
+ -1.0/3.0*(5.9-5.3 + -1.69682900001),
+ -1.0/3.0*(7.9-7.3 + 0.56560966667), // 15
+
+ -2.0/3.0*(4.1-3.4 + -0.18205179147),
+ -2.0/3.0*(6.1-5.4 + -1.51709826228),
+ -2.0/3.0*(8.1-7.4 + 0.54615537442), // 16
+
+ -1.0/3.0*(4.3-3.5 + -0.19904410828),
+ -1.0/3.0*(6.3-5.5 + -1.29378670385),
+ -1.0/3.0*(8.3-7.5 + 0.49761027071), // 17
};
const double pylith::faults::CohesiveKinDataTet4e::_jacobian[] = {
@@ -226,7 +294,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,-1.0, // 14
+ -2.0/3.0, 0.0, 0.0, // 14
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -240,7 +308,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 14
+ 0.0,-2.0/3.0, 0.0, // 14
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -254,7 +322,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,-1.0, 0.0, // 14
+ 0.0, 0.0,-2.0/3.0, // 14
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -269,7 +337,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,-1.0, // 15
+ -1.0/3.0, 0.0, 0.0, // 15
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 6y
@@ -283,7 +351,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 15
+ 0.0,-1.0/3.0, 0.0, // 15
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 6z
@@ -297,7 +365,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,-1.0, 0.0, // 15
+ 0.0, 0.0,-1.0/3.0, // 15
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 7x
@@ -312,7 +380,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,-1.0, // 16
+ -2.0/3.0, 0.0, 0.0, // 16
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 7y
0.0, 0.0, 0.0,
@@ -326,7 +394,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 16
+ 0.0,-2.0/3.0, 0.0, // 16
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 7z
0.0, 0.0, 0.0,
@@ -340,7 +408,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,-1.0, 0.0, // 16
+ 0.0, 0.0,-2.0/3.0, // 16
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 8x
0.0, 0.0, 0.0,
@@ -355,7 +423,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,-1.0, // 17
+ -1.0/3.0, 0.0, 0.0, // 17
0.0, 0.0, 0.0, // 8y
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -369,7 +437,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 17
+ 0.0,-1.0/3.0, 0.0, // 17
0.0, 0.0, 0.0, // 8z
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -383,7 +451,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,-1.0, 0.0, // 17
+ 0.0, 0.0,-1.0/3.0, // 17
0.0, 0.0, 0.0, // 9x
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -436,7 +504,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,+1.0, // 14
+ +2.0/3.0, 0.0, 0.0, // 14
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -450,7 +518,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 14
+ 0.0,+2.0/3.0, 0.0, // 14
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -464,7 +532,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,+1.0, 0.0, // 14
+ 0.0, 0.0,+2.0/3.0, // 14
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -479,7 +547,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,+1.0, // 15
+ +1.0/3.0, 0.0, 0.0, // 15
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 11y
@@ -493,7 +561,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 15
+ 0.0,+1.0/3.0, 0.0, // 15
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 11z
@@ -507,7 +575,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,+1.0, 0.0, // 15
+ 0.0, 0.0,+1.0/3.0, // 15
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 12x
@@ -522,7 +590,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,+1.0, // 16
+ +2.0/3.0, 0.0, 0.0, // 16
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 12y
0.0, 0.0, 0.0,
@@ -536,7 +604,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 16
+ 0.0,+2.0/3.0, 0.0, // 16
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 12z
0.0, 0.0, 0.0,
@@ -550,7 +618,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,+1.0, 0.0, // 16
+ 0.0, 0.0,+2.0/3.0, // 16
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 13x
0.0, 0.0, 0.0,
@@ -565,7 +633,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,+1.0, // 17
+ +1.0/3.0, 0.0, 0.0, // 17
0.0, 0.0, 0.0, // 13y
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -579,7 +647,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 17
+ 0.0,+1.0/3.0, 0.0, // 17
0.0, 0.0, 0.0, // 13z
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -593,14 +661,14 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,+1.0, 0.0, // 17
+ 0.0, 0.0,+1.0/3.0, // 17
0.0, 0.0, 0.0, // 14x
- 0.0,-1.0, 0.0, // 5
+ -2.0/3.0, 0.0, 0.0, // 5
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,+1.0, 0.0, // 10
+ +2.0/3.0, 0.0, 0.0, // 10
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -609,12 +677,12 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 14y
- 0.0, 0.0,-1.0, // 5
+ 0.0,-2.0/3.0, 0.0, // 5
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,+1.0, // 10
+ 0.0,+2.0/3.0, 0.0, // 10
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -623,12 +691,12 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 14z
- -1.0, 0.0, 0.0, // 5
+ 0.0, 0.0,-2.0/3.0, // 5
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 10
+ 0.0, 0.0,+2.0/3.0, // 10
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -638,12 +706,12 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 15x
0.0, 0.0, 0.0,
- 0.0,-1.0, 0.0, // 6
+ -1.0/3.0, 0.0, 0.0, // 6
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,+1.0, 0.0, // 11
+ +1.0/3.0, 0.0, 0.0, // 11
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -652,12 +720,12 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 15y
0.0, 0.0, 0.0,
- 0.0, 0.0,-1.0, // 6
+ 0.0,-1.0/3.0, 0.0, // 6
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,+1.0, // 11
+ 0.0,+1.0/3.0, 0.0, // 11
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -666,12 +734,12 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 15z
0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 6
+ 0.0, 0.0,-1.0/3.0, // 6
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 11
+ 0.0, 0.0,+1.0/3.0, // 11
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -681,12 +749,12 @@
0.0, 0.0, 0.0, // 16x
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,-1.0, 0.0, // 7
+ -2.0/3.0, 0.0, 0.0, // 7
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,+1.0, 0.0, // 12
+ +2.0/3.0, 0.0, 0.0, // 12
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -695,12 +763,12 @@
0.0, 0.0, 0.0, // 16y
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,-1.0, // 7
+ 0.0,-2.0/3.0, 0.0, // 7
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,+1.0, // 12
+ 0.0,+2.0/3.0, 0.0, // 12
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -709,27 +777,27 @@
0.0, 0.0, 0.0, // 16z
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 7
+ 0.0, 0.0,-2.0/3.0, // 7
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 12
+ 0.0, 0.0,+2.0/3.0, // 12
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0, 0.0, // 17x
+ 0.0, 0.0, 0.0,// 17x
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,-1.0, 0.0, // 8
+ -1.0/3.0, 0.0, 0.0, // 8
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,+1.0, 0.0, // 13
+ +1.0/3.0, 0.0, 0.0, // 13
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -738,12 +806,12 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,-1.0, // 8
+ 0.0,-1.0/3.0, 0.0, // 8
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,+1.0, // 13
+ 0.0,+1.0/3.0, 0.0, // 13
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -752,12 +820,12 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 8
+ 0.0, 0.0,-1.0/3.0, // 8
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 13
+ 0.0, 0.0,+1.0/3.0, // 13
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -782,6 +850,8 @@
slipTimeFilename = const_cast<char*>(_slipTimeFilename);
riseTimeFilename = const_cast<char*>(_riseTimeFilename);
fieldT = const_cast<double*>(_fieldT);
+ fieldIncr = const_cast<double*>(_fieldIncr);
+ jacobianLumped = const_cast<double*>(_jacobianLumped);
orientation = const_cast<double*>(_orientation);
area = const_cast<double*>(_area);
residual = const_cast<double*>(_residual);
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataTet4e.hh
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataTet4e.hh 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataTet4e.hh 2011-10-17 22:23:48 UTC (rev 19086)
@@ -64,6 +64,8 @@
//@}
static const double _fieldT[]; ///< Solution field at time t.
+ static const double _fieldIncr[]; ///< Solution increment field over domain at time t.
+ static const double _jacobianLumped[]; ///< Lumped Jacobian.
static const double _orientation[]; ///< Expected values for fault orientation.
static const double _area[]; ///< Expected values for fault area.
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataTet4f.cc
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataTet4f.cc 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataTet4f.cc 2011-10-17 22:23:48 UTC (rev 19086)
@@ -44,24 +44,34 @@
const int pylith::faults::CohesiveKinDataTet4f::_numBasis = 3;
-const int pylith::faults::CohesiveKinDataTet4f::_numQuadPts = 1;
+const int pylith::faults::CohesiveKinDataTet4f::_numQuadPts = 3;
const double pylith::faults::CohesiveKinDataTet4f::_quadPts[] = {
- -3.33333333e-01, -3.33333333e-01,
+ -1.00000000e+00, -1.00000000e+00,
+ 1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00, 1.00000000e+00,
};
const double pylith::faults::CohesiveKinDataTet4f::_quadWts[] = {
- 2.0,
+ 2.0/3.0, 2.0/3.0, 2.0/3.0,
};
const double pylith::faults::CohesiveKinDataTet4f::_basis[] = {
- 3.33333333e-01, 3.33333333e-01,
- 3.33333333e-01,};
+ 1.0, 0.0, 0.0,
+ 0.0, 1.0, 0.0,
+ 0.0, 0.0, 1.0,
+};
const double pylith::faults::CohesiveKinDataTet4f::_basisDeriv[] = {
-0.50000000e+00, -0.50000000e+00,
0.50000000e+00, 0.00000000e+00,
0.00000000e+00, 0.50000000e+00,
+ -0.50000000e+00, -0.50000000e+00,
+ 0.50000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.50000000e+00,
+ -0.50000000e+00, -0.50000000e+00,
+ 0.50000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.50000000e+00,
};
const double pylith::faults::CohesiveKinDataTet4f::_verticesRef[] = {
@@ -98,6 +108,34 @@
};
+const double pylith::faults::CohesiveKinDataTet4f::_fieldIncr[] = {
+ 3.1, 4.1, 5.1,
+ 3.2, 4.2, 5.2, // 3
+ 3.3, 4.3, 5.3, // 4
+ 3.4, 4.4, 5.4, // 5
+ 3.5, 4.5, 5.5,
+ 3.6, 4.6, 5.6, // 7
+ 3.8, 4.8, 5.8, // 8
+ 3.0, 4.0, 5.0, // 9
+ 3.7, 4.7, 5.7, // 10
+ 3.9, 4.9, 5.9, // 11
+ 3.1, 4.1, 5.1, // 12
+};
+
+const double pylith::faults::CohesiveKinDataTet4f::_jacobianLumped[] = {
+ 1.1, 1.1, 1.1,
+ 1.2, 1.2, 1.2, // 3
+ 1.3, 1.3, 1.3, // 4
+ 1.4, 1.4, 1.4, // 5
+ 1.5, 1.5, 1.5,
+ 1.6, 1.6, 1.6, // 7
+ 1.8, 1.8, 1.8, // 8
+ 1.0, 1.0, 1.0, // 9
+ 1.0, 1.0, 1.0, // 10
+ 1.0, 1.0, 1.0, // 11
+ 1.0, 1.0, 1.0, // 12
+};
+
const double pylith::faults::CohesiveKinDataTet4f::_orientation[] = {
0.0, -1.0, 0.0, 0.0, 0.0, +1.0, -1.0, 0.0, 0.0,
0.0, -1.0, 0.0, 0.0, 0.0, +1.0, -1.0, 0.0, 0.0,
@@ -135,30 +173,42 @@
const double pylith::faults::CohesiveKinDataTet4f::_residual[] = {
0.0, 0.0, 0.0,
- -9.7, -7.7, +8.7, // 3
- -9.9, -7.9, +8.9, // 4
- -9.1, -7.1, +8.1, // 5
+ +7.7/3.0, +8.7/3.0, +9.7/3.0, // 3
+ +7.9/3.0, +8.9/3.0, +9.9/3.0, // 4
+ +7.1/3.0, +8.1/3.0, +9.1/3.0, // 5
0.0, 0.0, 0.0,
- +9.7, +7.7, -8.7, // 7
- +9.9, +7.9, -8.9, // 8
- +9.1, +7.1, -8.1, // 9
- 0.4+1.82575588523, -0.4+-0.55566483464, 0.4+0.07938069066, // 10
- 0.5+1.69682900001, -0.5+-0.56560966667, 0.5+0.14140241667, // 11
- -0.4+1.51709826228, +0.4+-0.54615537442, -0.4+0.18205179147, // 12
+ -7.7/3.0, -8.7/3.0, -9.7/3.0, // 7
+ -7.9/3.0, -8.9/3.0, -9.9/3.0, // 8
+ -7.1/3.0, -8.1/3.0, -9.1/3.0, // 9
+ -1.0/3.0*(7.6-7.2 + 0.07938069066),
+ -1.0/3.0*(8.6-8.2 + 1.82575588523),
+ -1.0/3.0*(9.6-9.2 + 0.55566483464), // 10
+ -1.0/3.0*(7.8-7.3 + 0.14140241667),
+ -1.0/3.0*(8.8-8.3 + 1.69682900001),
+ -1.0/3.0*(9.8-9.3 + 0.56560966667), // 11
+ -1.0/3.0*(7.0-7.4 + 0.18205179147),
+ -1.0/3.0*(8.0-8.4 + 1.51709826228),
+ -1.0/3.0*(9.0-9.4 + 0.54615537442), // 12
};
const double pylith::faults::CohesiveKinDataTet4f::_residualIncr[] = {
0.0, 0.0, 0.0,
- -9.7, -7.7, +8.7, // 3
- -9.9, -7.9, +8.9, // 4
- -9.1, -7.1, +8.1, // 5
+ +7.7/3.0, +8.7/3.0, +9.7/3.0, // 3
+ +7.9/3.0, +8.9/3.0, +9.9/3.0, // 4
+ +7.1/3.0, +8.1/3.0, +9.1/3.0, // 5
0.0, 0.0, 0.0,
- +9.7, +7.7, -8.7, // 7
- +9.9, +7.9, -8.9, // 8
- +9.1, +7.1, -8.1, // 9
- 0.4+1.82575588523, -0.4+-0.55566483464, 0.4+0.07938069066, // 10
- 0.5+1.69682900001, -0.5+-0.56560966667, 0.5+0.14140241667, // 11
- -0.4+1.51709826228, +0.4+-0.54615537442, -0.4+0.18205179147, // 12
+ -7.7/3.0, -8.7/3.0, -9.7/3.0, // 7
+ -7.9/3.0, -8.9/3.0, -9.9/3.0, // 8
+ -7.1/3.0, -8.1/3.0, -9.1/3.0, // 9
+ -1.0/3.0*(7.6-7.2 + 0.07938069066),
+ -1.0/3.0*(8.6-8.2 + 1.82575588523),
+ -1.0/3.0*(9.6-9.2 + 0.55566483464), // 10
+ -1.0/3.0*(7.8-7.3 + 0.14140241667),
+ -1.0/3.0*(8.8-8.3 + 1.69682900001),
+ -1.0/3.0*(9.8-9.3 + 0.56560966667), // 11
+ -1.0/3.0*(7.0-7.4 + 0.18205179147),
+ -1.0/3.0*(8.0-8.4 + 1.51709826228),
+ -1.0/3.0*(9.0-9.4 + 0.54615537442), // 12
};
const double pylith::faults::CohesiveKinDataTet4f::_jacobian[] = {
@@ -203,7 +253,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,+1.0, // 10
+ -1.0/3.0, 0.0, 0.0, // 10
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 3y
@@ -214,7 +264,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 10
+ 0.0,-1.0/3.0, 0.0, // 10
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 3z
@@ -225,7 +275,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,-1.0, 0.0, // 10
+ 0.0, 0.0,-1.0/3.0, // 10
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 4x
@@ -237,7 +287,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,+1.0, // 11
+ -1.0/3.0, 0.0, 0.0, // 11
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 4y
0.0, 0.0, 0.0,
@@ -248,7 +298,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 11
+ 0.0,-1.0/3.0, 0.0, // 11
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 4z
0.0, 0.0, 0.0,
@@ -259,7 +309,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,-1.0, 0.0, // 11
+ 0.0, 0.0,-1.0/3.0, // 11
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 5x
0.0, 0.0, 0.0,
@@ -271,7 +321,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,+1.0, // 12
+ -1.0/3.0, 0.0, 0.0, // 12
0.0, 0.0, 0.0, // 5y
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -282,7 +332,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 12
+ 0.0,-1.0/3.0, 0.0, // 12
0.0, 0.0, 0.0, // 5z
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -293,7 +343,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,-1.0, 0.0, // 12
+ 0.0, 0.0,-1.0/3.0, // 12
0.0, 0.0, 0.0, // 6x
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -335,7 +385,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,-1.0, // 10
+ +1.0/3.0, 0.0, 0.0, // 10
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 7y
@@ -346,7 +396,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 10
+ 0.0,+1.0/3.0, 0.0, // 10
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 7z
@@ -357,7 +407,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,+1.0, 0.0, // 10
+ 0.0, 0.0,+1.0/3.0, // 10
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 8x
@@ -369,7 +419,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,-1.0, // 11
+ +1.0/3.0, 0.0, 0.0, // 11
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 8y
0.0, 0.0, 0.0,
@@ -380,7 +430,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 11
+ 0.0,+1.0/3.0, 0.0, // 11
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 8z
0.0, 0.0, 0.0,
@@ -391,7 +441,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,+1.0, 0.0, // 11
+ 0.0, 0.0,+1.0/3.0, // 11
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 9x
0.0, 0.0, 0.0,
@@ -403,7 +453,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,-1.0, // 12
+ +1.0/3.0, 0.0, 0.0, // 12
0.0, 0.0, 0.0, // 9y
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -414,7 +464,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 12
+ 0.0,+1.0/3.0, 0.0, // 12
0.0, 0.0, 0.0, // 9z
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -425,35 +475,35 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,+1.0, 0.0, // 12
+ 0.0, 0.0,+1.0/3.0, // 12
0.0, 0.0, 0.0, // 10x
- 0.0,+1.0, 0.0, // 3
+ -1.0/3.0, 0.0, 0.0, // 3
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,-1.0, 0.0, // 7
+ +1.0/3.0, 0.0, 0.0, // 7
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 10y
- 0.0, 0.0,-1.0, // 3
+ 0.0,-1.0/3.0, 0.0, // 3
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,+1.0, // 7
+ 0.0,+1.0/3.0, 0.0, // 7
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 10z
- +1.0, 0.0, 0.0, // 3
+ 0.0, 0.0,-1.0/3.0, // 3
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 7
+ 0.0, 0.0,+1.0/3.0, // 7
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -461,33 +511,33 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 11x
0.0, 0.0, 0.0,
- 0.0,+1.0, 0.0, // 4
+ -1.0/3.0, 0.0, 0.0, // 4
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,-1.0, 0.0, // 8
+ +1.0/3.0, 0.0, 0.0, // 8
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 11y
0.0, 0.0, 0.0,
- 0.0, 0.0,-1.0, // 4
+ 0.0,-1.0/3.0, 0.0, // 4
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,+1.0, // 8
+ 0.0,+1.0/3.0, 0.0, // 8
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 11z
0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 4
+ 0.0, 0.0,-1.0/3.0, // 4
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 8
+ 0.0, 0.0,+1.0/3.0, // 8
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -495,33 +545,33 @@
0.0, 0.0, 0.0, // 12x
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,+1.0, 0.0, // 5
+ -1.0/3.0, 0.0, 0.0, // 5
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,-1.0, 0.0, // 9
+ +1.0/3.0, 0.0, 0.0, // 9
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 12y
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,-1.0, // 5
+ 0.0,-1.0/3.0, 0.0, // 5
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,+1.0, // 9
+ 0.0,+1.0/3.0, 0.0, // 9
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 12z
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 5
+ 0.0, 0.0,-1.0/3.0, // 5
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 9
+ 0.0, 0.0,+1.0/3.0, // 9
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -545,6 +595,8 @@
slipTimeFilename = const_cast<char*>(_slipTimeFilename);
riseTimeFilename = const_cast<char*>(_riseTimeFilename);
fieldT = const_cast<double*>(_fieldT);
+ fieldIncr = const_cast<double*>(_fieldIncr);
+ jacobianLumped = const_cast<double*>(_jacobianLumped);
orientation = const_cast<double*>(_orientation);
area = const_cast<double*>(_area);
residual = const_cast<double*>(_residual);
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataTet4f.hh
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataTet4f.hh 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataTet4f.hh 2011-10-17 22:23:48 UTC (rev 19086)
@@ -64,6 +64,8 @@
//@}
static const double _fieldT[]; ///< Solution field at time t.
+ static const double _fieldIncr[]; ///< Solution increment field over domain at time t.
+ static const double _jacobianLumped[]; ///< Lumped Jacobian.
static const double _orientation[]; ///< Expected values for fault orientation.
static const double _area[]; ///< Expected values for fault area.
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataTri3.cc
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataTri3.cc 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataTri3.cc 2011-10-17 22:23:48 UTC (rev 19086)
@@ -61,24 +61,24 @@
const int pylith::faults::CohesiveKinDataTri3::_numBasis = 2;
-const int pylith::faults::CohesiveKinDataTri3::_numQuadPts = 1;
+const int pylith::faults::CohesiveKinDataTri3::_numQuadPts = 2;
const double pylith::faults::CohesiveKinDataTri3::_quadPts[] = {
- 0.0,
+ -1.0, 1.0,
};
const double pylith::faults::CohesiveKinDataTri3::_quadWts[] = {
- 2.0,
+ 1.0, 1.0
};
const double pylith::faults::CohesiveKinDataTri3::_basis[] = {
- 0.5,
- 0.5
+ 1.0, 0.0,
+ 0.0, 1.0,
};
const double pylith::faults::CohesiveKinDataTri3::_basisDeriv[] = {
- -0.5,
- 0.5
+ -0.5, 0.5,
+ -0.5, 0.5,
};
const double pylith::faults::CohesiveKinDataTri3::_verticesRef[] = {
@@ -127,8 +127,8 @@
1.4, 1.4,
1.5, 1.5, // 6
1.7, 1.7, // 7
- 1.6, 1.6, // 8
- 1.8, 1.8, // 9
+ 1.0, 1.0, // 8
+ 1.0, 1.0, // 9
};
const int pylith::faults::CohesiveKinDataTri3::_numFaultVertices = 2;
@@ -166,24 +166,28 @@
const double pylith::faults::CohesiveKinDataTri3::_residual[] = {
0.0, 0.0,
- -9.6, -8.6, // 3
- -9.8, -8.8, // 4
+ +8.6, +9.6, // 3
+ +8.8, +9.8, // 4
0.0, 0.0,
- +9.6, +8.6, // 6
- +9.8, +8.8, // 7
- 0.3+1.89546413727, 0.3+0.08241148423, // 8
- 0.4+1.77538035254, 0.4+0.14794836271, // 9
+ -8.6, -9.6, // 6
+ -8.8, -9.8, // 7
+ -(8.5-8.2) - (0.08241148423),
+ -(9.5-9.2) - (1.89546413727), // 8
+ -(8.7-8.3) - (0.14794836271),
+ -(9.7-9.3) - (1.77538035254), // 9
};
const double pylith::faults::CohesiveKinDataTri3::_residualIncr[] = {
0.0, 0.0,
- -9.6, -8.6, // 3
- -9.8, -8.8, // 4
+ +8.6, +9.6, // 3
+ +8.8, +9.8, // 4
0.0, 0.0,
- +9.6, +8.6, // 6
- +9.8, +8.8, // 7
- 0.3+1.89546413727, 0.3+0.08241148423, // 8
- 0.4+1.77538035254, 0.4+0.14794836271, // 9
+ -8.6, -9.6, // 6
+ -8.8, -9.8, // 7
+ -(8.5-8.2) - (0.08241148423),
+ -(9.5-9.2) - (1.89546413727), // 8
+ -(8.7-8.3) - (0.14794836271),
+ -(9.7-9.3) - (1.77538035254), // 9
};
const double pylith::faults::CohesiveKinDataTri3::_jacobian[] = {
@@ -209,7 +213,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- 0.0,+1.0, // 8
+ -1.0, 0.0, // 8
0.0, 0.0,
0.0, 0.0, // 3y
0.0, 0.0,
@@ -217,7 +221,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- +1.0, 0.0, // 8
+ 0.0,-1.0, // 8
0.0, 0.0,
0.0, 0.0, // 4x
0.0, 0.0,
@@ -226,7 +230,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- 0.0,+1.0, // 9
+ -1.0, 0.0, // 9
0.0, 0.0, // 4y
0.0, 0.0,
0.0, 0.0,
@@ -234,7 +238,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- +1.0, 0.0, // 9
+ 0.0,-1.0, // 9
0.0, 0.0, // 5x
0.0, 0.0,
0.0, 0.0,
@@ -257,7 +261,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- 0.0,-1.0, // 8
+ +1.0, 0.0, // 8
0.0, 0.0,
0.0, 0.0, // 6y
0.0, 0.0,
@@ -265,7 +269,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- -1.0, 0.0, // 8
+ 0.0,+1.0, // 8
0.0, 0.0,
0.0, 0.0, // 7x
0.0, 0.0,
@@ -274,7 +278,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- 0.0,-1.0, // 9
+ +1.0, 0.0, // 9
0.0, 0.0, // 7y
0.0, 0.0,
0.0, 0.0,
@@ -282,52 +286,52 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- -1.0, 0.0, // 9
+ 0.0,+1.0, // 9
0.0, 0.0, // 8x
- 0.0,+1.0, // 3
+ -1.0, 0.0, // 3
0.0, 0.0,
0.0, 0.0,
- 0.0,-1.0, // 6
+ +1.0, 0.0, // 6
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
0.0, 0.0, // 8y
- +1.0, 0.0, // 3
+ 0.0,-1.0, // 3
0.0, 0.0,
0.0, 0.0,
- -1.0, 0.0, // 6
+ 0.0,+1.0, // 6
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
0.0, 0.0, // 9x
0.0, 0.0,
- 0.0,+1.0, // 4
+ -1.0, 0.0, // 4
0.0, 0.0,
0.0, 0.0,
- 0.0,-1.0, // 7
+ +1.0, 0.0, // 7
0.0, 0.0,
0.0, 0.0,
0.0, 0.0, // 9y
0.0, 0.0,
- +1.0, 0.0, // 4
+ 0.0,-1.0, // 4
0.0, 0.0,
0.0, 0.0,
- -1.0, 0.0, // 7
+ 0.0,+1.0, // 7
0.0, 0.0,
0.0, 0.0,
};
const double pylith::faults::CohesiveKinDataTri3::_fieldIncrAdjusted[] = {
3.1, 4.1,
- 11.4124508246, 12.5863689652, // 3
- 11.1489656107, 12.3019463023, // 4
+ 3.57911749124, 5.58636896515, // 3
+ 3.83717073887, 5.75938219977, // 4
3.4, 4.4,
- -3.06996065966, -2.20909517212, // 6
- -2.30215017286, -1.41913540767, // 7
- -10.0636427582, -9.85494098949, // 8
- -10.402530193, -10.2036552939, // 9
+ 3.19670600701, 3.39090482788, // 6
+ 3.28922237616, 3.58400184723, // 7
+ 0.454940989487, 1.66364275818, // 8
+ 0.69832196053, 1.8971968597, // 9
};
pylith::faults::CohesiveKinDataTri3::CohesiveKinDataTri3(void)
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataTri3d.cc
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataTri3d.cc 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataTri3d.cc 2011-10-17 22:23:48 UTC (rev 19086)
@@ -76,24 +76,24 @@
const int pylith::faults::CohesiveKinDataTri3d::_numBasis = 2;
-const int pylith::faults::CohesiveKinDataTri3d::_numQuadPts = 1;
+const int pylith::faults::CohesiveKinDataTri3d::_numQuadPts = 2;
const double pylith::faults::CohesiveKinDataTri3d::_quadPts[] = {
- 0.0,
+ -1.0, 1.0,
};
const double pylith::faults::CohesiveKinDataTri3d::_quadWts[] = {
- 2.0,
+ 1.0, 1.0
};
const double pylith::faults::CohesiveKinDataTri3d::_basis[] = {
- 0.5,
- 0.5
+ 1.0, 0.0,
+ 0.0, 1.0,
};
const double pylith::faults::CohesiveKinDataTri3d::_basisDeriv[] = {
- -0.5,
- 0.5
+ -0.5, 0.5,
+ -0.5, 0.5,
};
const double pylith::faults::CohesiveKinDataTri3d::_verticesRef[] = {
@@ -128,7 +128,37 @@
7.2, 9.2, // 15
};
+const double pylith::faults::CohesiveKinDataTri3d::_fieldIncr[] = {
+ 3.1, 7.1,
+ 3.2, 7.2, // 5
+ 3.3, 7.3, // 6
+ 3.4, 7.4,
+ 3.5, 7.5, // 8
+ 3.6, 7.6,
+ 3.7, 7.7, // 10
+ 3.9, 7.9, // 11
+ 3.1, 7.1, // 12
+ 3.8, 7.8, // 13
+ 3.0, 7.0, // 14
+ 2.2, 5.2, // 15
+};
+const double pylith::faults::CohesiveKinDataTri3d::_jacobianLumped[] = {
+ 6.1, 8.1,
+ 6.2, 8.2, // 5
+ 6.3, 8.3, // 6
+ 6.4, 8.4,
+ 6.5, 8.5, // 8
+ 6.6, 8.6,
+ 6.7, 8.7, // 10
+ 6.9, 8.9, // 11
+ 7.1, 9.1, // 12
+ 1.0, 1.0, // 13
+ 1.0, 1.0, // 14
+ 1.0, 1.0, // 15
+};
+
+
const double pylith::faults::CohesiveKinDataTri3d::_orientation[] = {
+0.70710678118654757, -0.70710678118654757,
-0.70710678118654757, -0.70710678118654757,
@@ -166,32 +196,38 @@
const double pylith::faults::CohesiveKinDataTri3d::_residual[] = {
0.0, 0.0,
- -1.4142135623730949, -11.030865786510143, // 5
- -8.0, -6.0, // 6
+ +2.0*6.8, +2.0*8.8, // 5
+ +1.0*6.0, +1.0*8.0, // 6
0.0, 0.0,
- +7.2, -9.2, // 8
+ +1.0*7.2, +1.0*9.2, // 8
0.0, 0.0,
- +1.4142135623730949, +11.030865786510143, // 10
- +8.0, +6.0, // 11
- -7.2, +9.2, // 12
- 0.0+1.89546413727, +0.70710678118654757+0.08241148423, // 13
- 0.6+1.77538035254, 0.6+0.14794836271, // 14
- -0.6+1.59887481971, 0.6+0.19186497837, // 15
+ -2.0*6.8, -2.0*8.8, // 10
+ -1.0*6.0, -1.0*8.0, // 6
+ -1.0*7.2, -1.0*9.2, // 8
+ -2.0*(6.7-6.2 -0.70710678118654757*(1.89546413727-0.08241148423)),
+ -2.0*(8.7-8.2 -0.70710678118654757*(-1.89546413727-0.08241148423)), // 13
+ -1.0*(6.9-6.3 +0.14794836271),
+ -1.0*(8.9-8.3 +1.77538035254), // 14
+ -1.0*(7.1-6.5 -1.59887481971),
+ -1.0*(9.1-8.5 +0.19186497837), // 15
};
const double pylith::faults::CohesiveKinDataTri3d::_residualIncr[] = {
0.0, 0.0,
- -1.4142135623730949, -11.030865786510143, // 5
- -8.0, -6.0, // 6
+ +2.0*6.8, +2.0*8.8, // 5
+ +1.0*6.0, +1.0*8.0, // 6
0.0, 0.0,
- +7.2, -9.2, // 8
+ +1.0*7.2, +1.0*9.2, // 8
0.0, 0.0,
- +1.4142135623730949, +11.030865786510143, // 10
- +8.0, +6.0, // 11
- -7.2, +9.2, // 12
- 0.0+1.89546413727, +0.70710678118654757+0.08241148423, // 13
- 0.6+1.77538035254, 0.6+0.14794836271, // 14
- -0.6+1.59887481971, 0.6+0.19186497837, // 15
+ -2.0*6.8, -2.0*8.8, // 10
+ -1.0*6.0, -1.0*8.0, // 6
+ -1.0*7.2, -1.0*9.2, // 8
+ -2.0*(6.7-6.2 -0.70710678118654757*(1.89546413727-0.08241148423)),
+ -2.0*(8.7-8.2 -0.70710678118654757*(-1.89546413727-0.08241148423)), // 13
+ -1.0*(6.9-6.3 +0.14794836271),
+ -1.0*(8.9-8.3 +1.77538035254), // 14
+ -1.0*(7.1-6.5 -1.59887481971),
+ -1.0*(9.1-8.5 +0.19186497837), // 15
};
const double pylith::faults::CohesiveKinDataTri3d::_jacobian[] = {
@@ -228,7 +264,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- -0.70710678118654757, +0.70710678118654757, // 13
+ -2.0, 0.0, // 13
0.0, 0.0,
0.0, 0.0,
0.0, 0.0, // 5y
@@ -240,7 +276,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- +0.70710678118654757, +0.70710678118654757, // 13
+ 0.0,-2.0, // 13
0.0, 0.0,
0.0, 0.0,
0.0, 0.0, // 6x
@@ -253,7 +289,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- 0.0,+1.0, // 14
+ -1.0, 0.0, // 14
0.0, 0.0,
0.0, 0.0, // 6y
0.0, 0.0,
@@ -265,7 +301,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- +1.0, 0.0, // 14
+ 0.0,-1.0, // 14
0.0, 0.0,
0.0, 0.0, // 7x
0.0, 0.0,
@@ -314,7 +350,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- 0.0,+1.0, // 15
+ 0.0,-1.0, // 15
0.0, 0.0, // 9x
0.0, 0.0,
0.0, 0.0,
@@ -348,7 +384,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- +0.70710678118654757, -0.70710678118654757, // 13
+ +2.0, 0.0, // 13
0.0, 0.0,
0.0, 0.0,
0.0, 0.0, // 10y
@@ -360,7 +396,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- -0.70710678118654757, -0.70710678118654757, // 13
+ 0.0,+2.0, // 13
0.0, 0.0,
0.0, 0.0,
0.0, 0.0, // 11x
@@ -373,7 +409,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- 0.0,-1.0, // 14
+ +1.0, 0.0, // 14
0.0, 0.0,
0.0, 0.0, // 11y
0.0, 0.0,
@@ -385,7 +421,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- -1.0, 0.0, // 14
+ 0.0,+1.0, // 14
0.0, 0.0,
0.0, 0.0, // 12x
0.0, 0.0,
@@ -410,26 +446,26 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- 0.0,-1.0, // 15
+ 0.0,+1.0, // 15
0.0, 0.0, // 13x
- -0.70710678118654757, +0.70710678118654757, // 5
+ -2.0, 0.0, // 5
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- +0.70710678118654757, -0.70710678118654757, // 10
+ +2.0, 0.0, // 10
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
0.0, 0.0, // 13y
- +0.70710678118654757, +0.70710678118654757, // 5
+ 0.0,-2.0, // 5
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- -0.70710678118654757, -0.70710678118654757, // 10
+ 0.0,+2.0, // 10
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
@@ -437,24 +473,24 @@
0.0, 0.0,
0.0, 0.0, // 14x
0.0, 0.0,
- 0.0,+1.0, // 6
+ -1.0, 0.0, // 6
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- 0.0,-1.0, // 11
+ +1.0, 0.0, // 11
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
0.0, 0.0, // 14y
0.0, 0.0,
- +1.0, 0.0, // 6
+ 0.0,-1.0, // 6
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- -1.0, 0.0, // 11
+ 0.0,+1.0, // 11
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
@@ -475,11 +511,11 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- 0.0,+1.0, // 8
+ 0.0,-1.0, // 8
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- 0.0,-1.0, // 12
+ 0.0,+1.0, // 12
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
@@ -503,6 +539,8 @@
slipTimeFilename = const_cast<char*>(_slipTimeFilename);
riseTimeFilename = const_cast<char*>(_riseTimeFilename);
fieldT = const_cast<double*>(_fieldT);
+ fieldIncr = const_cast<double*>(_fieldIncr);
+ jacobianLumped = const_cast<double*>(_jacobianLumped);
orientation = const_cast<double*>(_orientation);
area = const_cast<double*>(_area);
residual = const_cast<double*>(_residual);
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataTri3d.hh
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataTri3d.hh 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinDataTri3d.hh 2011-10-17 22:23:48 UTC (rev 19086)
@@ -64,6 +64,8 @@
//@}
static const double _fieldT[]; ///< Solution field at time t.
+ static const double _fieldIncr[]; ///< Solution increment field over domain at time t.
+ static const double _jacobianLumped[]; ///< Lumped Jacobian.
static const double _orientation[]; ///< Expected values for fault orientation.
static const double _area[]; ///< Expected values for fault area.
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinSrcsDataHex8.cc
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinSrcsDataHex8.cc 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinSrcsDataHex8.cc 2011-10-17 22:23:48 UTC (rev 19086)
@@ -48,10 +48,10 @@
const int pylith::faults::CohesiveKinSrcsDataHex8::_numQuadPts = 4;
const double pylith::faults::CohesiveKinSrcsDataHex8::_quadPts[] = {
- -0.57735027, -0.57735027,
- +0.57735027, -0.57735027,
- +0.57735027, +0.57735027,
- -0.57735027, +0.57735027,
+ -1.0, -1.0,
+ +1.0, -1.0,
+ +1.0, +1.0,
+ -1.0, +1.0
};
const double pylith::faults::CohesiveKinSrcsDataHex8::_quadWts[] = {
@@ -59,10 +59,10 @@
};
const double pylith::faults::CohesiveKinSrcsDataHex8::_basis[] = {
- 0.62200847, 0.16666667, 0.16666667, 0.0446582,
- 0.16666667, 0.62200847, 0.0446582, 0.16666667,
- 0.16666667, 0.0446582, 0.62200847, 0.16666667,
- 0.0446582, 0.16666667, 0.16666667, 0.62200847,
+ 1.0, 0.0, 0.0, 0.0,
+ 0.0, 1.0, 0.0, 0.0,
+ 0.0, 0.0, 1.0, 0.0,
+ 0.0, 0.0, 0.0, 1.0,
};
const double pylith::faults::CohesiveKinSrcsDataHex8::_basisDeriv[] = {
@@ -112,18 +112,18 @@
4.2, 6.2, 8.2,
4.3, 6.3, 8.3,
4.4, 6.4, 8.4,
- 4.5, 6.5, 8.5,
- 4.6, 6.6, 8.6,
- 4.7, 6.7, 8.7,
- 4.8, 6.8, 8.8,
+ 4.5, 6.5, 8.5, // 6
+ 4.6, 6.6, 8.6, // 7
+ 4.7, 6.7, 8.7, // 8
+ 4.8, 6.8, 8.8, // 9
4.9, 6.9, 8.9,
4.0, 6.0, 8.0,
5.1, 7.1, 9.1,
5.2, 7.2, 9.2,
- 5.3, 7.3, 9.3,
- 5.5, 7.5, 9.5,
- 5.7, 7.7, 9.7,
- 5.9, 7.9, 9.9,
+ 5.3, 7.3, 9.3, // 14
+ 5.5, 7.5, 9.5, // 15
+ 5.7, 7.7, 9.7, // 16
+ 5.9, 7.9, 9.9, // 17
5.4, 7.4, 9.4, // 18
5.6, 7.6, 9.6, // 19
5.8, 7.8, 9.8, // 20
@@ -131,6 +131,52 @@
};
+const double pylith::faults::CohesiveKinSrcsDataHex8::_fieldIncr[] = {
+ 3.1, 4.1, 5.1,
+ 3.2, 4.2, 5.2,
+ 3.3, 4.3, 5.3,
+ 3.4, 4.4, 5.4,
+ 3.5, 4.5, 5.5, // 6
+ 3.6, 4.6, 5.6, // 7
+ 3.7, 4.7, 5.7, // 8
+ 3.8, 4.8, 5.8, // 9
+ 3.9, 4.9, 5.9,
+ 3.0, 4.0, 5.0,
+ 3.1, 4.1, 5.1,
+ 3.2, 4.2, 5.2,
+ 3.3, 4.3, 5.3, // 14
+ 3.5, 4.5, 5.5, // 15
+ 3.7, 4.7, 5.7, // 16
+ 3.9, 4.9, 5.9, // 17
+ 3.4, 4.4, 5.4, // 18
+ 3.6, 4.6, 5.6, // 19
+ 3.8, 4.8, 5.8, // 20
+ 3.0, 4.0, 5.0, // 21
+};
+
+const double pylith::faults::CohesiveKinSrcsDataHex8::_jacobianLumped[] = {
+ 1.1, 1.1, 1.1,
+ 1.2, 1.2, 1.2,
+ 1.3, 1.3, 1.3,
+ 1.4, 1.4, 1.4,
+ 1.5, 1.5, 1.5, // 6
+ 1.6, 1.6, 1.6, // 7
+ 1.7, 1.7, 1.7, // 8
+ 1.8, 1.8, 1.8, // 9
+ 1.9, 1.9, 1.9,
+ 1.0, 1.0, 1.0,
+ 1.1, 1.1, 1.1,
+ 1.2, 1.2, 1.2,
+ 1.3, 1.3, 1.3, // 14
+ 1.5, 1.5, 1.5, // 15
+ 1.7, 1.7, 1.7, // 16
+ 1.9, 1.9, 1.9, // 17
+ 1.0, 1.0, 1.0, // 18
+ 1.0, 1.0, 1.0, // 19
+ 1.0, 1.0, 1.0, // 20
+ 1.0, 1.0, 1.0, // 21
+};
+
const double pylith::faults::CohesiveKinSrcsDataHex8::_orientation[] = {
0.0, -1.0, 0.0, 0.0, 0.0, +1.0, -1.0, 0.0, 0.0,
0.0, -1.0, 0.0, 0.0, 0.0, +1.0, -1.0, 0.0, 0.0,
@@ -170,22 +216,38 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- -9.4,-5.4,+7.4, // 6
- -9.6,-5.6,+7.6, // 7
- -9.8,-5.8,+7.8, // 8
- -9.0,-5.0,+7.0, // 9
+ +5.4, +7.4, +9.4, // 6
+ +5.6, +7.6, +9.6, // 7
+ +5.8, +7.8, +9.8, // 8
+ +5.0, +7.0, +9.0, // 9
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +9.4,+5.4,-7.4, // 14
- +9.6,+5.6,-7.6, // 15
- +9.8,+5.8,-7.8, // 16
- +9.0,+5.0,-7.0, // 17
- 0.8+1.82575588523+0.91680340354, -0.8+-0.55566483464-0.27902712282, 0.8+0.07938069066+0.03986101755, // 18 (constraint)
- 0.9+1.69682900001+0.62551316338, -0.9+-0.56560966667-0.20850438779, 0.9+0.14140241667+0.05212609695, // 19 (constraint)
- 1.0+1.51709826228+0.34903622931, -1.0+-0.54615537442-0.12565304255, 1.0+0.18205179147+0.04188434752, // 20 (constraint)
- 1.1+1.29378670385+0.12855127934, -1.1+-0.49761027071+-0.04944279975, 1.1+0.19904410828+0.01977711990, // 21 (constraint)
+ -5.4, -7.4, -9.4, // 14
+ -5.6, -7.6, -9.6, // 15
+ -5.8, -7.8, -9.8, // 16
+ -5.0, -7.0, -9.0, // 17
+
+ // 18 (constraint)
+ -(5.3-4.5 + 0.07938069066+0.03986101755),
+ -(7.3-6.5 + 1.82575588523+0.91680340354),
+ -(9.3-8.5 + 0.55566483464+0.27902712282),
+
+ // 19 (constraint)
+ -(5.5-4.6 + 0.14140241667+0.05212609695),
+ -(7.5-6.6 + 1.69682900001+0.62551316338),
+ -(9.5-8.6 + 0.56560966667+0.20850438779),
+
+ // 20 (constraint)
+ -(5.7-4.7 + 0.18205179147+0.04188434752),
+ -(7.7-6.7 + 1.51709826228+0.34903622931),
+ -(9.7-8.7 + 0.54615537442+0.12565304255),
+
+ // 21 (constraint)
+ -(5.9-4.8 + 0.19904410828+0.01977711990),
+ -(7.9-6.8 + 1.29378670385+0.12855127934),
+ -(9.9-8.8 + 0.49761027071+0.04944279975),
};
const double pylith::faults::CohesiveKinSrcsDataHex8::_residualIncr[] = {
@@ -193,22 +255,38 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- -9.4,-5.4,+7.4, // 6
- -9.6,-5.6,+7.6, // 7
- -9.8,-5.8,+7.8, // 8
- -9.0,-5.0,+7.0, // 9
+ +5.4, +7.4, +9.4, // 6
+ +5.6, +7.6, +9.6, // 7
+ +5.8, +7.8, +9.8, // 8
+ +5.0, +7.0, +9.0, // 9
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +9.4,+5.4,-7.4, // 14
- +9.6,+5.6,-7.6, // 15
- +9.8,+5.8,-7.8, // 16
- +9.0,+5.0,-7.0, // 17
- 0.8+1.82575588523+0.91680340354, -0.8+-0.55566483464-0.27902712282, 0.8+0.07938069066+0.03986101755, // 18 (constraint)
- 0.9+1.69682900001+0.62551316338, -0.9+-0.56560966667-0.20850438779, 0.9+0.14140241667+0.05212609695, // 19 (constraint)
- 1.0+1.51709826228+0.34903622931, -1.0+-0.54615537442-0.12565304255, 1.0+0.18205179147+0.04188434752, // 20 (constraint)
- 1.1+1.29378670385+0.12855127934, -1.1+-0.49761027071+-0.04944279975, 1.1+0.19904410828+0.01977711990, // 21 (constraint)
+ -5.4, -7.4, -9.4, // 14
+ -5.6, -7.6, -9.6, // 15
+ -5.8, -7.8, -9.8, // 16
+ -5.0, -7.0, -9.0, // 17
+
+ // 18 (constraint)
+ -(5.3-4.5 + 0.07938069066+0.03986101755),
+ -(7.3-6.5 + 1.82575588523+0.91680340354),
+ -(9.3-8.5 + 0.55566483464+0.27902712282),
+
+ // 19 (constraint)
+ -(5.5-4.6 + 0.14140241667+0.05212609695),
+ -(7.5-6.6 + 1.69682900001+0.62551316338),
+ -(9.5-8.6 + 0.56560966667+0.20850438779),
+
+ // 20 (constraint)
+ -(5.7-4.7 + 0.18205179147+0.04188434752),
+ -(7.7-6.7 + 1.51709826228+0.34903622931),
+ -(9.7-8.7 + 0.54615537442+0.12565304255),
+
+ // 21 (constraint)
+ -(5.9-4.8 + 0.19904410828+0.01977711990),
+ -(7.9-6.8 + 1.29378670385+0.12855127934),
+ -(9.9-8.8 + 0.49761027071+0.04944279975),
};
const double pylith::faults::CohesiveKinSrcsDataHex8::_jacobian[] = {
@@ -468,7 +546,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,+1.0, // 18
+ -1.0, 0.0, 0.0, // 18
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -488,7 +566,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 18
+ 0.0,-1.0, 0.0, // 18
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -508,7 +586,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,-1.0, 0.0, // 18
+ 0.0, 0.0,-1.0, // 18
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -529,7 +607,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,+1.0, // 19
+ -1.0, 0.0, 0.0, // 19
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 7y
@@ -549,7 +627,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 19
+ 0.0,-1.0, 0.0, // 19
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 7z
@@ -569,7 +647,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,-1.0, 0.0, // 19
+ 0.0, 0.0,-1.0, // 19
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 8x
@@ -590,7 +668,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,+1.0, // 20
+ -1.0, 0.0, 0.0, // 20
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 8y
0.0, 0.0, 0.0,
@@ -610,7 +688,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 20
+ 0.0,-1.0, 0.0, // 20
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 8z
0.0, 0.0, 0.0,
@@ -630,7 +708,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,-1.0, 0.0, // 20
+ 0.0, 0.0,-1.0, // 20
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 9x
0.0, 0.0, 0.0,
@@ -651,7 +729,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,+1.0, // 21
+ -1.0, 0.0, 0.0, // 21
0.0, 0.0, 0.0, // 9y
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -671,7 +749,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 21
+ 0.0,-1.0, 0.0, // 21
0.0, 0.0, 0.0, // 9z
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -691,7 +769,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,-1.0, 0.0, // 21
+ 0.0, 0.0,-1.0, // 21
0.0, 0.0, 0.0, // 10x
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -948,7 +1026,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,-1.0, // 18
+ +1.0, 0.0, 0.0, // 18
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -968,7 +1046,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 18
+ 0.0,+1.0, 0.0, // 18
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -988,7 +1066,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,+1.0, 0.0, // 18
+ 0.0, 0.0,+1.0, // 18
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1009,7 +1087,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,-1.0, // 19
+ +1.0, 0.0, 0.0, // 19
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 15y
@@ -1029,7 +1107,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 19
+ 0.0,+1.0, 0.0, // 19
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 15z
@@ -1049,7 +1127,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,+1.0, 0.0, // 19
+ 0.0, 0.0,+1.0, // 19
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 16x
@@ -1070,7 +1148,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,-1.0, // 20
+ +1.0, 0.0, 0.0, // 20
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 16y
0.0, 0.0, 0.0,
@@ -1090,7 +1168,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 20
+ 0.0,+1.0, 0.0, // 20
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 16z
0.0, 0.0, 0.0,
@@ -1110,7 +1188,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,+1.0, 0.0, // 20
+ 0.0, 0.0,+1.0, // 20
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 17x
0.0, 0.0, 0.0,
@@ -1131,7 +1209,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,-1.0, // 21
+ +1.0, 0.0, 0.0, // 21
0.0, 0.0, 0.0, // 17y
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1151,7 +1229,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 21
+ 0.0,+1.0, 0.0, // 21
0.0, 0.0, 0.0, // 17z
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1171,12 +1249,12 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,+1.0, 0.0, // 21
+ 0.0, 0.0,+1.0, // 21
0.0, 0.0, 0.0, // 18x
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,+1.0, 0.0, // 6
+ -1.0, 0.0, 0.0, // 6
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1184,7 +1262,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,-1.0, 0.0, // 14
+ +1.0, 0.0, 0.0, // 14
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1196,7 +1274,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,-1.0, // 6
+ 0.0,-1.0, 0.0, // 6
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1204,7 +1282,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,+1.0, // 14
+ 0.0,+1.0, 0.0, // 14
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1216,7 +1294,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 6
+ 0.0, 0.0,-1.0, // 6
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1224,7 +1302,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 14
+ 0.0, 0.0,+1.0, // 14
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1237,7 +1315,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,+1.0, 0.0, // 7
+ -1.0, 0.0, 0.0, // 7
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1245,7 +1323,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,-1.0, 0.0, // 15
+ +1.0, 0.0, 0.0, // 15
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1257,7 +1335,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,-1.0, // 7
+ 0.0,-1.0, 0.0, // 7
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1265,7 +1343,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,+1.0, // 15
+ 0.0,+1.0, 0.0, // 15
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1277,7 +1355,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 7
+ 0.0, 0.0,-1.0, // 7
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1285,7 +1363,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 15
+ 0.0, 0.0,+1.0, // 15
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1298,7 +1376,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,+1.0, 0.0, // 8
+ -1.0, 0.0, 0.0, // 8
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1306,7 +1384,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,-1.0, 0.0, // 16
+ +1.0, 0.0, 0.0, // 16
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1318,7 +1396,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,-1.0, // 8
+ 0.0,-1.0, 0.0, // 8
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1326,7 +1404,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,+1.0, // 16
+ 0.0,+1.0, 0.0, // 8
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1338,7 +1416,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 8
+ 0.0, 0.0,-1.0, // 8
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1346,7 +1424,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 16
+ 0.0, 0.0,+1.0, // 16
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1359,7 +1437,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,+1.0, 0.0, // 9
+ -1.0, 0.0, 0.0, // 9
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1367,7 +1445,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,-1.0, 0.0, // 17
+ +1.0, 0.0, 0.0, // 17
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1379,7 +1457,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,-1.0, // 9
+ 0.0,-1.0, 0.0, // 9
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1387,7 +1465,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,+1.0, // 17
+ 0.0,+1.0, 0.0, // 17
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1399,7 +1477,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 9
+ 0.0, 0.0,-1.0, // 9
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1407,7 +1485,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 17
+ 0.0, 0.0,+1.0, // 17
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -1432,6 +1510,8 @@
slipTimeFilename = const_cast<char*>(_slipTimeFilename);
riseTimeFilename = const_cast<char*>(_riseTimeFilename);
fieldT = const_cast<double*>(_fieldT);
+ fieldIncr = const_cast<double*>(_fieldIncr);
+ jacobianLumped = const_cast<double*>(_jacobianLumped);
orientation = const_cast<double*>(_orientation);
area = const_cast<double*>(_area);
residual = const_cast<double*>(_residual);
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinSrcsDataHex8.hh
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinSrcsDataHex8.hh 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinSrcsDataHex8.hh 2011-10-17 22:23:48 UTC (rev 19086)
@@ -63,7 +63,9 @@
static const char* _matPropsFilename; ///< Name of db for bulk mat properties.
//@}
- static const double _fieldT[]; ///< Solution field at time t.
+ static const double _fieldT[]; ///< Field over domain at time t.
+ static const double _fieldIncr[]; ///< Solution increment field over domain at time t.
+ static const double _jacobianLumped[]; ///< Lumped Jacobian.
static const double _orientation[]; ///< Expected values for fault orientation.
static const double _area[]; ///< Expected values for fault area.
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinSrcsDataLine2.cc
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinSrcsDataLine2.cc 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinSrcsDataLine2.cc 2011-10-17 22:23:48 UTC (rev 19086)
@@ -82,6 +82,22 @@
};
+const double pylith::faults::CohesiveKinSrcsDataLine2::_fieldIncr[] = {
+ 1.1,
+ 1.2, // 3
+ 1.3,
+ 1.4, // 5
+ 1.5
+};
+
+const double pylith::faults::CohesiveKinSrcsDataLine2::_jacobianLumped[] = {
+ 2.1,
+ 2.2, // 3
+ 2.3,
+ 2.4, // 5
+ 1.0
+};
+
const double pylith::faults::CohesiveKinSrcsDataLine2::_orientation[] = {
1.0
};
@@ -115,7 +131,7 @@
const double pylith::faults::CohesiveKinSrcsDataLine2::_residualIncr[] = {
0.0,
- 7.5,
+ +7.5,
0.0,
-7.5,
-0.2+1.89546413727+0.99414665414,
@@ -123,7 +139,7 @@
const double pylith::faults::CohesiveKinSrcsDataLine2::_residual[] = {
0.0,
- 7.5,
+ +7.5,
0.0,
-7.5,
-0.2+1.89546413727+0.99414665414,
@@ -155,6 +171,8 @@
slipTimeFilename = const_cast<char*>(_slipTimeFilename);
riseTimeFilename = const_cast<char*>(_riseTimeFilename);
fieldT = const_cast<double*>(_fieldT);
+ fieldIncr = const_cast<double*>(_fieldIncr);
+ jacobianLumped = const_cast<double*>(_jacobianLumped);
orientation = const_cast<double*>(_orientation);
area = const_cast<double*>(_area);
residualIncr = const_cast<double*>(_residualIncr);
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinSrcsDataLine2.hh
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinSrcsDataLine2.hh 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinSrcsDataLine2.hh 2011-10-17 22:23:48 UTC (rev 19086)
@@ -63,7 +63,9 @@
static const char* _matPropsFilename; ///< Name of db for bulk mat properties.
//@}
- static const double _fieldT[]; ///< Solution field at time t.
+ static const double _fieldT[]; ///< Field over domain at time t.
+ static const double _fieldIncr[]; ///< Solution increment field over domain at time t.
+ static const double _jacobianLumped[]; ///< Lumped Jacobian.
static const double _orientation[]; ///< Expected values for fault orientation.
static const double _area[]; ///< Expected values for fault area.
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinSrcsDataQuad4.cc
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinSrcsDataQuad4.cc 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinSrcsDataQuad4.cc 2011-10-17 22:23:48 UTC (rev 19086)
@@ -58,24 +58,24 @@
const int pylith::faults::CohesiveKinSrcsDataQuad4::_numBasis = 2;
-const int pylith::faults::CohesiveKinSrcsDataQuad4::_numQuadPts = 1;
+const int pylith::faults::CohesiveKinSrcsDataQuad4::_numQuadPts = 2;
const double pylith::faults::CohesiveKinSrcsDataQuad4::_quadPts[] = {
- 0.0,
+ -1.0, 1.0,
};
const double pylith::faults::CohesiveKinSrcsDataQuad4::_quadWts[] = {
- 2.0,
+ 1.0, 1.0
};
const double pylith::faults::CohesiveKinSrcsDataQuad4::_basis[] = {
- 0.5,
- 0.5
+ 1.0, 0.0,
+ 0.0, 1.0,
};
const double pylith::faults::CohesiveKinSrcsDataQuad4::_basisDeriv[] = {
- -0.5,
- 0.5
+ -0.5, 0.5,
+ -0.5, 0.5,
};
const double pylith::faults::CohesiveKinSrcsDataQuad4::_verticesRef[] = {
@@ -108,7 +108,31 @@
8.0, 9.0, // 11
};
+const double pylith::faults::CohesiveKinSrcsDataQuad4::_fieldIncr[] = {
+ 3.1, 4.1,
+ 3.2, 4.2,
+ 3.3, 4.3, // 4
+ 3.4, 4.4, // 5
+ 3.5, 4.5,
+ 3.6, 4.6,
+ 3.7, 4.7, // 8
+ 3.9, 4.9, // 9
+ 3.8, 4.8, // 10
+ 3.0, 4.0, // 11
+};
+const double pylith::faults::CohesiveKinSrcsDataQuad4::_jacobianLumped[] = {
+ 1.1, 1.1,
+ 1.2, 1.2,
+ 1.3, 1.3, // 4
+ 1.4, 1.4, // 5
+ 1.5, 1.5,
+ 1.6, 1.6,
+ 1.7, 1.7, // 8
+ 1.9, 1.9, // 9
+ 1.0, 1.0, // 10
+ 1.0, 1.0, // 11
+};
const double pylith::faults::CohesiveKinSrcsDataQuad4::_orientation[] = {
0.0, 1.0, +1.0, 0.0,
@@ -145,27 +169,31 @@
const double pylith::faults::CohesiveKinSrcsDataQuad4::_residual[] = {
0.0, 0.0,
0.0, 0.0,
- 9.8, 8.8, // 4
- 9.0, 8.0, // 5
+ +8.8, +9.8, // 4
+ +8.0, +9.0, // 5
0.0, 0.0,
0.0, 0.0,
- -9.8, -8.8, // 8
- -9.0, -8.0, // 9
- -0.4+1.77538035254+0.68377062865, -0.4+0.14794836271+0.05698088572, // 10
- -0.5+1.89546413727+0.99414665414, -0.5+0.08241148423+0.04322376757, // 11
+ -8.8, -9.8, // 8
+ -8.0, -9.0, // 9
+ -(8.7-8.3 + -0.14794836271 + -0.05698088572),
+ -(9.7-9.3 + -1.77538035254 + -0.68377062865), // 10
+ -(8.9-8.4 + -0.08241148423 + -0.04322376757),
+ -(9.9-9.4 + -1.89546413727 + -0.99414665414), // 11
};
const double pylith::faults::CohesiveKinSrcsDataQuad4::_residualIncr[] = {
0.0, 0.0,
0.0, 0.0,
- 9.8, 8.8, // 4
- 9.0, 8.0, // 5
+ +8.8, +9.8, // 4
+ +8.0, +9.0, // 5
0.0, 0.0,
0.0, 0.0,
- -9.8, -8.8, // 8
- -9.0, -8.0, // 9
- -0.4+1.77538035254+0.68377062865, -0.4+0.14794836271+0.05698088572, // 10
- -0.5+1.89546413727+0.99414665414, -0.5+0.08241148423+0.04322376757, // 11
+ -8.8, -9.8, // 8
+ -8.0, -9.0, // 9
+ -(8.7-8.3 + -0.14794836271 + -0.05698088572),
+ -(9.7-9.3 + -1.77538035254 + -0.68377062865), // 10
+ -(8.9-8.4 + -0.08241148423 + -0.04322376757),
+ -(9.9-9.4 + -1.89546413727 + -0.99414665414), // 11
};
const double pylith::faults::CohesiveKinSrcsDataQuad4::_jacobian[] = {
@@ -217,7 +245,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- 0.0,-1.0, // 10
+ -1.0, 0.0, // 10
0.0, 0.0,
0.0, 0.0, // 4y
0.0, 0.0,
@@ -227,7 +255,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- -1.0, 0.0, // 10
+ 0.0,-1.0, // 10
0.0, 0.0,
0.0, 0.0, // 5x
0.0, 0.0,
@@ -238,7 +266,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- 0.0,-1.0, // 11
+ -1.0, 0.0, // 11
0.0, 0.0, // 5y
0.0, 0.0,
0.0, 0.0,
@@ -248,7 +276,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- -1.0, 0.0, // 11
+ 0.0,-1.0, // 11
0.0, 0.0, // 6x
0.0, 0.0,
0.0, 0.0,
@@ -297,7 +325,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- 0.0,+1.0, // 10
+ +1.0, 0.0, // 10
0.0, 0.0,
0.0, 0.0, // 8y
0.0, 0.0,
@@ -307,7 +335,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- +1.0, 0.0, // 10
+ 0.0,+1.0, // 10
0.0, 0.0,
0.0, 0.0, // 9x
0.0, 0.0,
@@ -318,7 +346,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- 0.0,+1.0, // 11
+ +1.0, 0.0, // 11
0.0, 0.0, // 9y
0.0, 0.0,
0.0, 0.0,
@@ -328,45 +356,45 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- +1.0, 0.0, // 11
+ 0.0,+1.0, // 11
0.0, 0.0, // 10x
0.0, 0.0,
- 0.0,-1.0, // 4
+ -1.0, 0.0, // 4
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- 0.0,+1.0, // 8
+ +1.0, 0.0, // 8
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
0.0, 0.0, // 10y
0.0, 0.0,
- -1.0, 0.0, // 4
+ 0.0,-1.0, // 4
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- +1.0, 0.0, // 8
+ 0.0,+1.0, // 8
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
0.0, 0.0, // 11x
0.0, 0.0,
0.0, 0.0,
- 0.0,-1.0, // 5
+ -1.0, 0.0, // 5
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- 0.0,+1.0, // 9
+ +1.0, 0.0, // 9
0.0, 0.0,
0.0, 0.0,
0.0, 0.0, // 11y
0.0, 0.0,
0.0, 0.0,
- -1.0, 0.0, // 5
+ 0.0,-1.0, // 5
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- +1.0, 0.0, // 9
+ 0.0,+1.0, // 9
0.0, 0.0,
0.0, 0.0,
};
@@ -389,6 +417,8 @@
slipTimeFilename = const_cast<char*>(_slipTimeFilename);
riseTimeFilename = const_cast<char*>(_riseTimeFilename);
fieldT = const_cast<double*>(_fieldT);
+ fieldIncr = const_cast<double*>(_fieldIncr);
+ jacobianLumped = const_cast<double*>(_jacobianLumped);
orientation = const_cast<double*>(_orientation);
area = const_cast<double*>(_area);
residual = const_cast<double*>(_residual);
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinSrcsDataQuad4.hh
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinSrcsDataQuad4.hh 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinSrcsDataQuad4.hh 2011-10-17 22:23:48 UTC (rev 19086)
@@ -63,7 +63,9 @@
static const char* _matPropsFilename; ///< Name of db for bulk mat properties.
//@}
- static const double _fieldT[]; ///< Solution field at time t.
+ static const double _fieldT[]; ///< Field over domain at time t.
+ static const double _fieldIncr[]; ///< Solution increment field over domain at time t.
+ static const double _jacobianLumped[]; ///< Lumped Jacobian.
static const double _orientation[]; ///< Expected values for fault orientation.
static const double _area[]; ///< Expected values for fault area.
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinSrcsDataTet4.cc
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinSrcsDataTet4.cc 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinSrcsDataTet4.cc 2011-10-17 22:23:48 UTC (rev 19086)
@@ -44,24 +44,34 @@
const int pylith::faults::CohesiveKinSrcsDataTet4::_numBasis = 3;
-const int pylith::faults::CohesiveKinSrcsDataTet4::_numQuadPts = 1;
+const int pylith::faults::CohesiveKinSrcsDataTet4::_numQuadPts = 3;
const double pylith::faults::CohesiveKinSrcsDataTet4::_quadPts[] = {
- -3.33333333e-01, -3.33333333e-01,
+ -1.00000000e+00, -1.00000000e+00,
+ 1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00, 1.00000000e+00,
};
const double pylith::faults::CohesiveKinSrcsDataTet4::_quadWts[] = {
- 2.0,
+ 2.0/3.0, 2.0/3.0, 2.0/3.0,
};
const double pylith::faults::CohesiveKinSrcsDataTet4::_basis[] = {
- 3.33333333e-01, 3.33333333e-01,
- 3.33333333e-01,};
+ 1.0, 0.0, 0.0,
+ 0.0, 1.0, 0.0,
+ 0.0, 0.0, 1.0,
+};
const double pylith::faults::CohesiveKinSrcsDataTet4::_basisDeriv[] = {
-0.50000000e+00, -0.50000000e+00,
0.50000000e+00, 0.00000000e+00,
0.00000000e+00, 0.50000000e+00,
+ -0.50000000e+00, -0.50000000e+00,
+ 0.50000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.50000000e+00,
+ -0.50000000e+00, -0.50000000e+00,
+ 0.50000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.50000000e+00,
};
const double pylith::faults::CohesiveKinSrcsDataTet4::_verticesRef[] = {
@@ -97,7 +107,34 @@
7.1, 8.1, 9.1, // 12
};
+const double pylith::faults::CohesiveKinSrcsDataTet4::_fieldIncr[] = {
+ 3.1, 4.1, 5.1,
+ 3.2, 4.2, 5.2, // 3
+ 3.3, 4.3, 5.3, // 4
+ 3.4, 4.4, 5.4, // 5
+ 3.5, 4.5, 5.5,
+ 3.6, 4.6, 5.6, // 7
+ 3.8, 4.8, 5.8, // 8
+ 3.0, 4.0, 5.0, // 9
+ 3.7, 4.7, 5.7, // 10
+ 3.9, 4.9, 5.9, // 11
+ 3.1, 4.1, 5.1, // 12
+};
+const double pylith::faults::CohesiveKinSrcsDataTet4::_jacobianLumped[] = {
+ 1.1, 1.1, 1.1,
+ 1.2, 1.2, 1.2, // 3
+ 1.3, 1.3, 1.3, // 4
+ 1.4, 1.4, 1.4, // 5
+ 1.5, 1.5, 1.5,
+ 1.6, 1.6, 1.6, // 7
+ 1.8, 1.8, 1.8, // 8
+ 1.0, 1.0, 1.0, // 9
+ 1.0, 1.0, 1.0, // 10
+ 1.0, 1.0, 1.0, // 11
+ 1.0, 1.0, 1.0, // 12
+};
+
const double pylith::faults::CohesiveKinSrcsDataTet4::_orientation[] = {
0.0, +1.0, 0.0, 0.0, 0.0, +1.0, +1.0, 0.0, 0.0,
0.0, +1.0, 0.0, 0.0, 0.0, +1.0, +1.0, 0.0, 0.0,
@@ -135,30 +172,42 @@
const double pylith::faults::CohesiveKinSrcsDataTet4::_residual[] = {
0.0, 0.0, 0.0,
- 9.7, 7.7, 8.7, // 3
- 9.9, 7.9, 8.9, // 4
- 9.1, 7.1, 8.1, // 5
+ +7.7/3.0, +8.7/3.0, +9.7/3.0, // 3
+ +7.9/3.0, +8.9/3.0, +9.9/3.0, // 4
+ +7.1/3.0, +8.1/3.0, +9.1/3.0, // 5
0.0, 0.0, 0.0,
- -9.7, -7.7, -8.7, // 7
- -9.9, -7.9, -8.9, // 4
- -9.1, -7.1, -8.1, // 5
- -0.4+1.82575588523+0.91680340354, -0.4+-0.55566483464+-0.27902712282, -0.4+0.07938069066+0.03986101755, // 10
- -0.5+1.69682900001+0.62551316338, -0.5+-0.56560966667+-0.20850438779, -0.5+0.14140241667+0.05212609695, // 11
- 0.4+1.51709826228+0.34903622931, 0.4+-0.54615537442+-0.12565304255, 0.4+0.18205179147+0.04188434752, // 12
+ -7.7/3.0, -8.7/3.0, -9.7/3.0, // 7
+ -7.9/3.0, -8.9/3.0, -9.9/3.0, // 8
+ -7.1/3.0, -8.1/3.0, -9.1/3.0, // 9
+ -1.0/3.0*(7.6-7.2 + -0.07938069066-0.03986101755),
+ -1.0/3.0*(8.6-8.2 + -1.82575588523-0.91680340354),
+ -1.0/3.0*(9.6-9.2 + 0.55566483464+0.27902712282), // 10
+ -1.0/3.0*(7.8-7.3 + -0.14140241667-0.05212609695),
+ -1.0/3.0*(8.8-8.3 + -1.69682900001-0.62551316338),
+ -1.0/3.0*(9.8-9.3 + 0.56560966667+0.20850438779), // 11
+ -1.0/3.0*(7.0-7.4 + -0.18205179147-0.04188434752),
+ -1.0/3.0*(8.0-8.4 + -1.51709826228-0.34903622931),
+ -1.0/3.0*(9.0-9.4 + 0.54615537442+0.12565304255), // 12
};
const double pylith::faults::CohesiveKinSrcsDataTet4::_residualIncr[] = {
0.0, 0.0, 0.0,
- 9.7, 7.7, 8.7, // 3
- 9.9, 7.9, 8.9, // 4
- 9.1, 7.1, 8.1, // 5
+ +7.7/3.0, +8.7/3.0, +9.7/3.0, // 3
+ +7.9/3.0, +8.9/3.0, +9.9/3.0, // 4
+ +7.1/3.0, +8.1/3.0, +9.1/3.0, // 5
0.0, 0.0, 0.0,
- -9.7, -7.7, -8.7, // 7
- -9.9, -7.9, -8.9, // 4
- -9.1, -7.1, -8.1, // 5
- -0.4+1.82575588523+0.91680340354, -0.4+-0.55566483464+-0.27902712282, -0.4+0.07938069066+0.03986101755, // 10
- -0.5+1.69682900001+0.62551316338, -0.5+-0.56560966667+-0.20850438779, -0.5+0.14140241667+0.05212609695, // 11
- 0.4+1.51709826228+0.34903622931, 0.4+-0.54615537442+-0.12565304255, 0.4+0.18205179147+0.04188434752, // 12
+ -7.7/3.0, -8.7/3.0, -9.7/3.0, // 7
+ -7.9/3.0, -8.9/3.0, -9.9/3.0, // 8
+ -7.1/3.0, -8.1/3.0, -9.1/3.0, // 9
+ -1.0/3.0*(7.6-7.2 + -0.07938069066-0.03986101755),
+ -1.0/3.0*(8.6-8.2 + -1.82575588523-0.91680340354),
+ -1.0/3.0*(9.6-9.2 + 0.55566483464+0.27902712282), // 10
+ -1.0/3.0*(7.8-7.3 + -0.14140241667-0.05212609695),
+ -1.0/3.0*(8.8-8.3 + -1.69682900001-0.62551316338),
+ -1.0/3.0*(9.8-9.3 + 0.56560966667+0.20850438779), // 11
+ -1.0/3.0*(7.0-7.4 + -0.18205179147-0.04188434752),
+ -1.0/3.0*(8.0-8.4 + -1.51709826228-0.34903622931),
+ -1.0/3.0*(9.0-9.4 + 0.54615537442+0.12565304255), // 12
};
const double pylith::faults::CohesiveKinSrcsDataTet4::_jacobian[] = {
@@ -203,7 +252,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,-1.0, // 10
+ -1.0/3.0, 0.0, 0.0, // 10
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 3y
@@ -214,7 +263,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 10
+ 0.0,-1.0/3.0, 0.0, // 10
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 3z
@@ -225,7 +274,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,-1.0, 0.0, // 10
+ 0.0, 0.0,-1.0/3.0, // 10
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 4x
@@ -237,7 +286,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,-1.0, // 11
+ -1.0/3.0, 0.0, 0.0, // 11
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 4y
0.0, 0.0, 0.0,
@@ -248,7 +297,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 11
+ 0.0,-1.0/3.0, 0.0, // 11
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 4z
0.0, 0.0, 0.0,
@@ -259,7 +308,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,-1.0, 0.0, // 11
+ 0.0, 0.0,-1.0/3.0, // 11
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 5x
0.0, 0.0, 0.0,
@@ -271,7 +320,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,-1.0, // 12
+ -1.0/3.0, 0.0, 0.0, // 12
0.0, 0.0, 0.0, // 5y
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -282,7 +331,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 12
+ 0.0,-1.0/3.0, 0.0, // 12
0.0, 0.0, 0.0, // 5z
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -293,7 +342,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,-1.0, 0.0, // 12
+ 0.0, 0.0,-1.0/3.0, // 12
0.0, 0.0, 0.0, // 6x
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -335,7 +384,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,+1.0, // 10
+ +1.0/3.0, 0.0, 0.0, // 10
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 7y
@@ -346,7 +395,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 10
+ 0.0,+1.0/3.0, 0.0, // 10
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 7z
@@ -357,7 +406,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,+1.0, 0.0, // 10
+ 0.0, 0.0,+1.0/3.0, // 10
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 8x
@@ -369,7 +418,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,+1.0, // 11
+ +1.0/3.0, 0.0, 0.0, // 11
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 8y
0.0, 0.0, 0.0,
@@ -380,7 +429,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 11
+ 0.0,+1.0/3.0, 0.0, // 11
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 8z
0.0, 0.0, 0.0,
@@ -391,7 +440,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,+1.0, 0.0, // 11
+ 0.0, 0.0,+1.0/3.0, // 11
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 9x
0.0, 0.0, 0.0,
@@ -403,7 +452,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,+1.0, // 12
+ +1.0/3.0, 0.0, 0.0, // 12
0.0, 0.0, 0.0, // 9y
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -414,7 +463,7 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 12
+ 0.0,+1.0/3.0, 0.0, // 12
0.0, 0.0, 0.0, // 9z
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -425,35 +474,35 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,+1.0, 0.0, // 12
+ 0.0, 0.0,+1.0/3.0, // 12
0.0, 0.0, 0.0, // 10x
- 0.0,-1.0, 0.0, // 3
+ -1.0/3.0, 0.0, 0.0, // 3
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,+1.0, 0.0, // 7
+ +1.0/3.0, 0.0, 0.0, // 7
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 10y
- 0.0, 0.0,-1.0, // 3
+ 0.0,-1.0/3.0, 0.0, // 3
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,+1.0, // 7
+ 0.0,+1.0/3.0, 0.0, // 7
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 10z
- -1.0, 0.0, 0.0, // 3
+ 0.0, 0.0,-1.0/3.0, // 3
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 7
+ 0.0, 0.0,+1.0/3.0, // 7
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -461,33 +510,33 @@
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 11x
0.0, 0.0, 0.0,
- 0.0,-1.0, 0.0, // 4
+ -1.0/3.0, 0.0, 0.0, // 4
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,+1.0, 0.0, // 8
+ +1.0/3.0, 0.0, 0.0, // 8
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 11y
0.0, 0.0, 0.0,
- 0.0, 0.0,-1.0, // 4
+ 0.0,-1.0/3.0, 0.0, // 4
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,+1.0, // 8
+ 0.0,+1.0/3.0, 0.0, // 8
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 11z
0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 4
+ 0.0, 0.0,-1.0/3.0, // 4
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 8
+ 0.0, 0.0,+1.0/3.0, // 8
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -495,33 +544,33 @@
0.0, 0.0, 0.0, // 12x
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,-1.0, 0.0, // 5
+ -1.0/3.0, 0.0, 0.0, // 5
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0,+1.0, 0.0, // 9
+ +1.0/3.0, 0.0, 0.0, // 9
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 12y
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,-1.0, // 5
+ 0.0,-1.0/3.0, 0.0, // 5
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- 0.0, 0.0,+1.0, // 9
+ 0.0,+1.0/3.0, 0.0, // 9
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0, // 12z
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 5
+ 0.0, 0.0,-1.0/3.0, // 5
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 9
+ 0.0, 0.0,+1.0/3.0, // 9
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0,
@@ -545,6 +594,8 @@
slipTimeFilename = const_cast<char*>(_slipTimeFilename);
riseTimeFilename = const_cast<char*>(_riseTimeFilename);
fieldT = const_cast<double*>(_fieldT);
+ fieldIncr = const_cast<double*>(_fieldIncr);
+ jacobianLumped = const_cast<double*>(_jacobianLumped);
orientation = const_cast<double*>(_orientation);
area = const_cast<double*>(_area);
residual = const_cast<double*>(_residual);
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinSrcsDataTet4.hh
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinSrcsDataTet4.hh 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinSrcsDataTet4.hh 2011-10-17 22:23:48 UTC (rev 19086)
@@ -63,7 +63,9 @@
static const char* _matPropsFilename; ///< Name of db for bulk mat properties.
//@}
- static const double _fieldT[]; ///< Solution field at time t.
+ static const double _fieldT[]; ///< Field over domain at time t.
+ static const double _fieldIncr[]; ///< Solution increment field over domain at time t.
+ static const double _jacobianLumped[]; ///< Lumped Jacobian.
static const double _orientation[]; ///< Expected values for fault orientation.
static const double _area[]; ///< Expected values for fault area.
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinSrcsDataTri3.cc
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinSrcsDataTri3.cc 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinSrcsDataTri3.cc 2011-10-17 22:23:48 UTC (rev 19086)
@@ -72,24 +72,24 @@
const int pylith::faults::CohesiveKinSrcsDataTri3::_numBasis = 2;
-const int pylith::faults::CohesiveKinSrcsDataTri3::_numQuadPts = 1;
+const int pylith::faults::CohesiveKinSrcsDataTri3::_numQuadPts = 2;
const double pylith::faults::CohesiveKinSrcsDataTri3::_quadPts[] = {
- 0.0,
+ -1.0, 1.0,
};
const double pylith::faults::CohesiveKinSrcsDataTri3::_quadWts[] = {
- 2.0,
+ 1.0, 1.0
};
const double pylith::faults::CohesiveKinSrcsDataTri3::_basis[] = {
- 0.5,
- 0.5
+ 1.0, 0.0,
+ 0.0, 1.0,
};
const double pylith::faults::CohesiveKinSrcsDataTri3::_basisDeriv[] = {
- -0.5,
- 0.5
+ -0.5, 0.5,
+ -0.5, 0.5,
};
const double pylith::faults::CohesiveKinSrcsDataTri3::_verticesRef[] = {
@@ -120,7 +120,28 @@
8.8, 9.8, // 9
};
+const double pylith::faults::CohesiveKinSrcsDataTri3::_fieldIncr[] = {
+ 3.1, 4.1,
+ 3.2, 4.2, // 3
+ 3.3, 4.3, // 4
+ 3.4, 4.4,
+ 3.5, 4.5, // 6
+ 3.7, 4.7, // 7
+ 3.6, 4.6, // 8
+ 3.8, 4.8, // 9
+};
+const double pylith::faults::CohesiveKinSrcsDataTri3::_jacobianLumped[] = {
+ 1.1, 1.1,
+ 1.2, 1.2, // 3
+ 1.3, 1.3, // 4
+ 1.4, 1.4,
+ 1.5, 1.5, // 6
+ 1.7, 1.7, // 7
+ 1.0, 1.0, // 8
+ 1.0, 1.0, // 9
+};
+
const double pylith::faults::CohesiveKinSrcsDataTri3::_orientation[] = {
0.0, -1.0, -1.0, 0.0,
0.0, -1.0, -1.0, 0.0
@@ -156,24 +177,28 @@
const double pylith::faults::CohesiveKinSrcsDataTri3::_residual[] = {
0.0, 0.0,
- -9.6, -8.6, // 3
- -9.8, -8.8, // 4
+ +8.6, +9.6, // 3
+ +8.8, +9.8, // 4
0.0, 0.0,
- +9.6, +8.6, // 6
- +9.8, +8.8, // 7
- 0.3+1.89546413727+0.99414665414, 0.3+0.08241148423+0.04322376757, // 8
- 0.4+1.77538035254+0.68377062865, 0.4+0.14794836271+0.05698088572, // 9
+ -8.6, -9.6, // 6
+ -8.8, -9.8, // 7
+ -(8.5-8.2 + 0.08241148423 + 0.04322376757),
+ -(9.5-9.2 + 1.89546413727 + 0.99414665414), // 8
+ -(8.7-8.3 + 0.14794836271 + 0.05698088572),
+ -(9.7-9.3 + 1.77538035254 + 0.68377062865), // 9
};
const double pylith::faults::CohesiveKinSrcsDataTri3::_residualIncr[] = {
0.0, 0.0,
- -9.6, -8.6, // 3
- -9.8, -8.8, // 4
+ +8.6, +9.6, // 3
+ +8.8, +9.8, // 4
0.0, 0.0,
- +9.6, +8.6, // 6
- +9.8, +8.8, // 7
- 0.3+1.89546413727+0.99414665414, 0.3+0.08241148423+0.04322376757, // 8
- 0.4+1.77538035254+0.68377062865, 0.4+0.14794836271+0.05698088572, // 9
+ -8.6, -9.6, // 6
+ -8.8, -9.8, // 7
+ -(8.5-8.2 + 0.08241148423 + 0.04322376757),
+ -(9.5-9.2 + 1.89546413727 + 0.99414665414), // 8
+ -(8.7-8.3 + 0.14794836271 + 0.05698088572),
+ -(9.7-9.3 + 1.77538035254 + 0.68377062865), // 9
};
const double pylith::faults::CohesiveKinSrcsDataTri3::_jacobian[] = {
@@ -199,7 +224,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- 0.0,+1.0, // 8
+ -1.0, 0.0, // 8
0.0, 0.0,
0.0, 0.0, // 3y
0.0, 0.0,
@@ -207,7 +232,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- +1.0, 0.0, // 8
+ 0.0,-1.0, // 8
0.0, 0.0,
0.0, 0.0, // 4x
0.0, 0.0,
@@ -216,7 +241,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- 0.0,+1.0, // 9
+ -1.0, 0.0, // 9
0.0, 0.0, // 4y
0.0, 0.0,
0.0, 0.0,
@@ -224,7 +249,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- +1.0, 0.0, // 9
+ 0.0,-1.0, // 9
0.0, 0.0, // 5x
0.0, 0.0,
0.0, 0.0,
@@ -247,7 +272,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- 0.0,-1.0, // 8
+ +1.0, 0.0, // 8
0.0, 0.0,
0.0, 0.0, // 6y
0.0, 0.0,
@@ -255,7 +280,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- -1.0, 0.0, // 8
+ 0.0,+1.0, // 8
0.0, 0.0,
0.0, 0.0, // 7x
0.0, 0.0,
@@ -264,7 +289,7 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- 0.0,-1.0, // 9
+ +1.0, 0.0, // 9
0.0, 0.0, // 7y
0.0, 0.0,
0.0, 0.0,
@@ -272,39 +297,39 @@
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
- -1.0, 0.0, // 9
+ 0.0,+1.0, // 9
0.0, 0.0, // 8x
- 0.0,+1.0, // 3
+ -1.0, 0.0, // 3
0.0, 0.0,
0.0, 0.0,
- 0.0,-1.0, // 6
+ +1.0, 0.0, // 6
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
0.0, 0.0, // 8y
- +1.0, 0.0, // 3
+ 0.0,-1.0, // 3
0.0, 0.0,
0.0, 0.0,
- -1.0, 0.0, // 6
+ 0.0,+1.0, // 6
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
0.0, 0.0, // 9x
0.0, 0.0,
- 0.0,+1.0, // 4
+ -1.0, 0.0, // 4
0.0, 0.0,
0.0, 0.0,
- 0.0,-1.0, // 7
+ +1.0, 0.0, // 7
0.0, 0.0,
0.0, 0.0,
0.0, 0.0, // 9y
0.0, 0.0,
- +1.0, 0.0, // 4
+ 0.0,-1.0, // 4
0.0, 0.0,
0.0, 0.0,
- -1.0, 0.0, // 7
+ 0.0,+1.0, // 7
0.0, 0.0,
0.0, 0.0,
};
@@ -327,6 +352,8 @@
slipTimeFilename = const_cast<char*>(_slipTimeFilename);
riseTimeFilename = const_cast<char*>(_riseTimeFilename);
fieldT = const_cast<double*>(_fieldT);
+ fieldIncr = const_cast<double*>(_fieldIncr);
+ jacobianLumped = const_cast<double*>(_jacobianLumped);
orientation = const_cast<double*>(_orientation);
area = const_cast<double*>(_area);
residual = const_cast<double*>(_residual);
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinSrcsDataTri3.hh
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinSrcsDataTri3.hh 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/CohesiveKinSrcsDataTri3.hh 2011-10-17 22:23:48 UTC (rev 19086)
@@ -63,7 +63,9 @@
static const char* _matPropsFilename; ///< Name of db for bulk mat properties.
//@}
- static const double _fieldT[]; ///< Solution field at time t.
+ static const double _fieldT[]; ///< Field over domain at time t.
+ static const double _fieldIncr[]; ///< Solution increment field over domain at time t.
+ static const double _jacobianLumped[]; ///< Lumped Jacobian.
static const double _orientation[]; ///< Expected values for fault orientation.
static const double _area[]; ///< Expected values for fault area.
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/adjustsoln.py
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/adjustsoln.py 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/adjustsoln.py 2011-10-17 22:23:48 UTC (rev 19086)
@@ -3,358 +3,160 @@
# ----------------------------------------------------------------------
if test == "line2":
- C = 1.0
- dk = 1.89546413727; l = 1.5
- Ai = 2.2; ri = 7.5; ui = 7.2; dui = 1.2
- Aj = 2.4; rj = -7.5; uj = 7.4; duj = 1.4
+ jL = 1.0; rL = +1.69546413727;
+ jN = 2.2; duN = 1.2
+ jP = 2.4; duP = 1.4
- Si = (Ai * Aj) / (Ai + Aj)
- Aru = ri/Ai - rj/Aj + ui - uj
- Aruslip = -C*Aru - dk
- dlp = Si * Aruslip
+ Sinv = 1.0/(jL**2 * (1.0/jN + 1.0/jP))
+ duL = Sinv * (-rL + jL*(duP-duN));
- ddui = +C / Ai * dlp
- dduj = -C / Aj * dlp
+ dduN = jL / jN * duL
+ dduP = -jL / jP * duL
#print "Aru",Aru
#print "Aruslip",Aruslip
#print "Si",Si
#print "dlip",dlp
- print dui+ddui,duj+dduj,dlp
+ print duN+dduN,duP+dduP,duL
# ----------------------------------------------------------------------
elif test == "tri3" or test == "quad4":
if test == "tri3":
- Cpx = 0.0
- Cpy = -1.0
- Cqx = -1.0
- Cqy = 0.0
-
if vertex == 0:
- # Lagrange vertex 8, vertex i: 3, vertex j: 6
- dkp = 1.89546413727; lp = 3.6
- dkq = 0.08241148423; lq = 4.6
-
- # vertex i
- Aix = 1.2; Aiy = 1.2
- rix = -9.6; riy = -8.6
- uix = 8.2; uiy = 9.2
- duix = 3.2; duiy = 4.2
-
- # vertex j
- Ajx = 1.5; Ajy = 1.5
- rjx = +9.6; rjy = +8.6
- ujx = 8.5; ujy = 9.5
- dujx = 3.5; dujy = 4.5
-
+ # Lagrange vertex 8, vertex N: 3, vertex P: 6
+ jL = 1.0
+ rLx = -(8.5-8.2) - (0.08241148423)
+ rLy = -(9.5-9.2) - (1.89546413727)
+ jN = 1.2; duNx = 3.2; duNy = 4.2;
+ jP = 1.5; duPx = 3.5; duPy = 4.5;
+
elif vertex == 1:
- # Lagrange vertex 9, vertex i: 4, vertex j: 7
- dkp = 1.77538035254; lp = 3.8
- dkq = 0.14794836271; lq = 4.8
+ # Lagrange vertex 9, vertex N: 4, vertex P: 7
+ jL = 1.0
+ rLx = -(8.7-8.3) - (0.14794836271)
+ rLy = -(9.7-9.3) - (1.77538035254)
+ jN = 1.3; duNx = 3.3; duNy = 4.3;
+ jP = 1.7; duPx = 3.7; duPy = 4.7;
- # vertex i
- Aix = 1.3; Aiy = 1.3
- rix = -9.8; riy = -8.8
- uix = 8.3; uiy = 9.3
- duix = 3.3; duiy = 4.3
-
- # vertex j
- Ajx = 1.7; Ajy = 1.7
- rjx = +9.8; rjy = +8.8
- ujx = 8.7; ujy = 9.7
- dujx = 3.7; dujy = 4.7
-
elif test == "quad4":
- Cpx = 0.0
- Cpy = 1.0
- Cqx = 1.0
- Cqy = 0.0
-
if vertex == 0:
- # Lagrange vertex 10, vertex i: 4, vertex j: 8
- dkp = 1.77538035254; lp = 3.8
- dkq = 0.14794836271; lq = 4.8
+ # Lagrange vertex 10, vertex N: 4, vertex P: 8
+ jL = 1.0
+ rLx = -(8.7-8.3) + 0.14794836271
+ rLy = -(9.7-9.3) + 1.77538035254
+ jN = 1.3; duNx = 3.3; duNy = 4.3;
+ jP = 1.7; duPx = 3.7; duPy = 4.7;
- # vertex i: 4
- Aix = 1.3; Aiy = 1.3
- rix = +9.8; riy = +8.8
- uix = 8.3; uiy = 9.3
- duix = 3.3; duiy = 4.3
-
- # vertex j: 8
- Ajx = 1.7; Ajy = 1.7
- rjx = -9.8; rjy = -8.8
- ujx = 8.7; ujy = 9.7
- dujx = 3.7; dujy = 4.7
-
elif vertex == 1:
- # Lagrange vertex 11, vertex i: 5, vertex j: 9
- dkp = 1.89546413727; lp = 3.0
- dkq = 0.08241148423; lq = 4.0
-
- # vertex i: 5
- Aix = 1.4; Aiy = 1.4
- rix = +9.0; riy = +8.0
- uix = 8.4; uiy = 9.4
- duix = 3.4; duiy = 4.4
-
- # vertex j: 9
- Ajx = 1.9; Ajy = 1.9
- rjx = -9.0; rjy = -8.0
- ujx = 8.9; ujy = 9.9
- dujx = 3.9; dujy = 4.9
+ # Lagrange vertex 11, vertex N: 5, vertex P: 9
+ jL = 1.0
+ rLx = -(8.9-8.4) + 0.08241148423
+ rLy = -(9.9-9.4) + 1.89546413727
+ jN = 1.4; duNx = 3.4; duNy = 4.4;
+ jP = 1.9; duPx = 3.9; duPy = 4.9;
- Sppi = Aix*Ajx / (Aix + Ajx)
- Sqqi = Aix*Ajx / (Aix + Ajx)
+ Sinv = 1.0/(jL**2 * (1.0/jN + 1.0/jP))
+ duLx = Sinv * (-rLx + jL*(duPx - duNx))
+ duLy = Sinv * (-rLy + jL*(duPy - duNy))
- Arux = rix / Aix - rjx / Ajx + uix - ujx
- Aruy = riy / Aiy - rjy / Ajy + uiy - ujy
+ dduNx = jL / jN * duLx
+ dduNy = jL / jN * duLy
- Arup = Cpx*Arux + Cpy*Aruy
- Aruq = Cqx*Arux + Cqy*Aruy
- Arupslip = -Arup - dkp
- Aruqslip = -Aruq - dkq
+ dduPx = -jL / jP * duLx
+ dduPy = -jL / jP * duLy
+
+ print duNx+dduNx,duNy+dduNy
+ print duPx+dduPx,duPy+dduPy
+ print duLx,duLy
- dlp = Sppi * Arupslip
- dlq = Sqqi * Aruqslip
-
- dduix = +1.0/Aix * (Cpx*dlp + Cqx*dlq)
- dduiy = +1.0/Aiy * (Cpy*dlp + Cqy*dlq)
-
- ddujx = -1.0/Ajx * (Cpx*dlp + Cqx*dlq)
- ddujy = -1.0/Ajy * (Cpy*dlp + Cqy*dlq)
-
- print "Sppi",Sppi
- print "Sqqi",Sqqi
-
- print "Arup",Arup
- print "Aruq",Aruq
-
- print "Arupslip",Arupslip
- print "Aruqslip",Aruqslip
-
- print "dlp",dlp
- print "dlq",dlq
-
- print "dduix:",dduix
- print "dduiy:",dduiy
-
- print "ddujx:",ddujx
- print "ddujy:",ddujy
-
- print duix+dduix,duiy+dduiy
- print dujx+ddujx,dujy+ddujy
- print dlp,dlq
-
# ----------------------------------------------------------------------
elif test == "tet4" or test == "hex8":
if test == "tet4":
- Cpx = 0.0
- Cpy = 1.0
- Cpz = 0.0
- Cqx = 0.0
- Cqy = 0.0
- Cqz = 1.0
- Crx = 1.0
- Cry = 0.0
- Crz = 0.0
-
if vertex == 0:
- # Lagrange vertex 10, vertex i: 3, vertex j: 7
- dkp = 1.82575588523; lp = 3.7
- dkq = -0.55566483464; lq = 4.7
- dkr = 0.07938069066; lr = 5.7
-
- # vertex i: 3
- Aix = 1.2; Aiy = 1.2; Aiz = 1.2
- rix = +9.7; riy = +7.7; riz = +8.7
- uix = 7.2; uiy = 8.2; uiz = 9.2
- duix = 3.2; duiy = 4.2; duiz = 5.2
-
- # vertex j: 7
- Ajx = 1.6; Ajy = 1.6; Ajz = 1.6
- rjx = -9.7; rjy = -7.7; rjz = -8.7
- ujx = 7.6; ujy = 8.6; ujz = 9.6
- dujx = 3.6; dujy = 4.6; dujz = 5.6
-
+ # Lagrange vertex 10, vertex N: 3, vertex P: 7
+ jL = 1.0/3.0
+ rLx = -1.0/3.0*(7.6-7.2 + -0.07938069066)
+ rLy = -1.0/3.0*(8.6-8.2 + -1.82575588523)
+ rLz = -1.0/3.0*(9.6-9.2 + 0.55566483464)
+ jN = 1.2; duNx = 3.2; duNy = 4.2; duNz = 5.2;
+ jP = 1.6; duPx = 3.6; duPy = 4.6; duPz = 5.6;
+
elif vertex == 1:
- # Lagrange vertex 11, vertex i: 4, vertex j: 8
- dkp = 1.69682900001; lp = 3.9
- dkq = -0.56560966667; lq = 4.9
- dkr = 0.14140241667; lr = 5.9
+ # Lagrange vertex 11, vertex N: 4, vertex P: 8
+ jL = 1.0/3.0
+ rLx = -1.0/3.0*(7.8-7.3 + -0.14140241667)
+ rLy = -1.0/3.0*(8.8-8.3 + -1.69682900001)
+ rLz = -1.0/3.0*(9.8-9.3 + 0.56560966667)
+ jN = 1.3; duNx = 3.3; duNy = 4.3; duNz = 5.3;
+ jP = 1.8; duPx = 3.8; duPy = 4.8; duPz = 5.8;
- # vertex i: 4
- Aix = 1.3; Aiy = 1.3; Aiz = 1.3
- rix = +9.9; riy = +7.9; riz = +8.9
- uix = 7.3; uiy = 8.3; uiz = 9.3
- duix = 3.3; duiy = 4.3; duiz = 5.3
-
- # vertex j: 8
- Ajx = 1.8; Ajy = 1.8; Ajz = 1.8
- rjx = -9.9; rjy = -7.9; rjz = -8.9
- ujx = 7.8; ujy = 8.8; ujz = 9.8
- dujx = 3.8; dujy = 4.8; dujz = 5.8
-
elif vertex == 2:
- # Lagrange vertex 12, vertex i: 5, vertex j: 9
- dkp = 1.51709826228; lp = 3.1
- dkq = -0.54615537442; lq = 4.1
- dkr = 0.18205179147; lr = 5.1
+ # Lagrange vertex 12, vertex N: 5, vertex P: 9
+ jL = 1.0/3.0
+ rLx = -1.0/3.0*(7.0-7.4 + -0.18205179147)
+ rLy = -1.0/3.0*(8.0-8.4 + -1.51709826228)
+ rLz = -1.0/3.0*(9.0-9.4 + 0.54615537442)
+ jN = 1.4; duNx = 3.4; duNy = 4.4; duNz = 5.4;
+ jP = 1.0; duPx = 3.0; duPy = 4.0; duPz = 5.0;
- # vertex i: 5
- Aix = 1.4; Aiy = 1.4; Aiz = 1.4
- rix = +9.1; riy = +7.1; riz = +8.1
- uix = 7.4; uiy = 8.4; uiz = 9.4
- duix = 3.4; duiy = 4.4; duiz = 5.4
-
- # vertex j: 9
- Ajx = 1.0; Ajy = 1.0; Ajz = 1.0
- rjx = -9.1; rjy = -7.1; rjz = -8.1
- ujx = 7.0; ujy = 8.0; ujz = 9.0
- dujx = 3.0; dujy = 4.0; dujz = 5.0
-
elif test == "hex8":
- Cpx = 0.0
- Cpy = -1.0
- Cpz = 0.0
- Cqx = 0.0
- Cqy = 0.0
- Cqz = +1.0
- Crx = -1.0
- Cry = 0.0
- Crz = 0.0
-
if vertex == 0:
- # Lagrange vertex 18, vertex i: 6, vertex j: 14
- dkp = 1.82575588523; lp = 3.4
- dkq = -0.55566483464; lq = 4.4
- dkr = 0.07938069066; lr = 5.4
+ # Lagrange vertex 18, vertex N: 6, vertex P: 14
+ jL = 1.0
+ rLx = -(5.3-4.5+0.07938069066)
+ rLy = -(7.3-6.5+1.82575588523)
+ rLz = -(9.3-8.5+0.55566483464)
+ jN = 1.5; duNx = 3.5; duNy = 4.5; duNz = 5.5;
+ jP = 1.3; duPx = 3.3; duPy = 4.3; duPz = 5.3;
- # vertex i: 6
- Aix = 1.5; Aiy = 1.5; Aiz = 1.5
- rix = -9.4; riy = -5.4; riz = +7.4
- uix = 4.5; uiy = 6.5; uiz = 8.5
- duix = 3.5; duiy = 4.5; duiz = 5.5
-
- # vertex j: 14
- Ajx = 1.3; Ajy = 1.3; Ajz = 1.3
- rjx = +9.4; rjy = +5.4; rjz = -7.4
- ujx = 5.3; ujy = 7.3; ujz = 9.3
- dujx = 3.3; dujy = 4.3; dujz = 5.3
-
elif vertex == 1:
- # Lagrange vertex 19, vertex i: 7, vertex j: 15
- dkp = 1.69682900001; lp = 3.6
- dkq = -0.56560966667; lq = 4.6
- dkr = 0.14140241667; lr = 5.6
+ # Lagrange vertex 19, vertex N: 7, vertex P: 15
+ jL = 1.0
+ rLx = -(5.5-4.6+0.14140241667)
+ rLy = -(7.5-6.6+1.69682900001)
+ rLz = -(9.5-8.6+0.56560966667)
+ jN = 1.6; duNx = 3.6; duNy = 4.6; duNz = 5.6;
+ jP = 1.5; duPx = 3.5; duPy = 4.5; duPz = 5.5;
- # vertex i: 7
- Aix = 1.6; Aiy = 1.6; Aiz = 1.6
- rix = -9.6; riy = -5.6; riz = +7.6
- uix = 4.6; uiy = 6.6; uiz = 8.6
- duix = 3.6; duiy = 4.6; duiz = 5.6
-
- # vertex j: 15
- Ajx = 1.5; Ajy = 1.5; Ajz = 1.5
- rjx = +9.6; rjy = +5.6; rjz = -7.6
- ujx = 5.5; ujy = 7.5; ujz = 9.5
- dujx = 3.5; dujy = 4.5; dujz = 5.5
-
elif vertex == 2:
- # Lagrange vertex 20, vertex i: 8, vertex j: 16
- dkp = 1.51709826228; lp = 3.8
- dkq = -0.54615537442; lq = 4.8
- dkr = 0.18205179147; lr = 5.8
+ # Lagrange vertex 20, vertex N: 8, vertex P: 16
+ jL = 1.0
+ rLx = -(5.7-4.7+0.18205179147)
+ rLy = -(7.7-6.7+1.51709826228)
+ rLz = -(9.7-8.7+0.54615537442)
+ jN = 1.7; duNx = 3.7; duNy = 4.7; duNz = 5.7;
+ jP = 1.7; duPx = 3.7; duPy = 4.7; duPz = 5.7;
- # vertex i: 8
- Aix = 1.7; Aiy = 1.7; Aiz = 1.7
- rix = -9.8; riy = -5.8; riz = +7.8
- uix = 4.7; uiy = 6.7; uiz = 8.7
- duix = 3.7; duiy = 4.7; duiz = 5.7
-
- # vertex j: 16
- Ajx = 1.7; Ajy = 1.7; Ajz = 1.7
- rjx = +9.8; rjy = +5.8; rjz = -7.8
- ujx = 5.7; ujy = 7.7; ujz = 9.7
- dujx = 3.7; dujy = 4.7; dujz = 5.7
-
elif vertex == 3:
- # Lagrange vertex 21, vertex i: 9, vertex j: 17
- dkp = 1.29378670385; lp = 3.0
- dkq = -0.49761027071; lq = 4.0
- dkr = 0.19904410828; lr = 5.0
+ # Lagrange vertex 21, vertex N: 9, vertex P: 17
+ jL = 1.0
+ rLx = -(5.9-4.8+0.19904410828)
+ rLy = -(7.9-6.8+1.29378670385)
+ rLz = -(9.9-8.8+0.49761027071)
+ jN = 1.8; duNx = 3.8; duNy = 4.8; duNz = 5.8;
+ jP = 1.9; duPx = 3.9; duPy = 4.9; duPz = 5.9;
- # vertex i: 9
- Aix = 1.8; Aiy = 1.8; Aiz = 1.8
- rix = -9.0; riy = -5.0; riz = +7.0
- uix = 4.8; uiy = 6.8; uiz = 8.8
- duix = 3.8; duiy = 4.8; duiz = 5.8
-
- # vertex j: 17
- Ajx = 1.9; Ajy = 1.9; Ajz = 1.9
- rjx = +9.0; rjy = +5.0; rjz = -7.0
- ujx = 5.9; ujy = 7.9; ujz = 9.9
- dujx = 3.9; dujy = 4.9; dujz = 5.9
-
- Sppi = Aix*Ajx / (Aix + Ajx)
- Sqqi = Aiy*Ajy / (Aiy + Ajy)
- Srri = Aiz*Ajz / (Aiz + Ajz)
+ Sinv = 1.0/(jL**2 * (1.0/jN + 1.0/jP))
+ duLx = Sinv * (-rLx + jL*(duPx - duNx))
+ duLy = Sinv * (-rLy + jL*(duPy - duNy))
+ duLz = Sinv * (-rLz + jL*(duPz - duNz))
- Arux = rix / Aix - rjx / Ajx + uix - ujx
- Aruy = riy / Aiy - rjy / Ajy + uiy - ujy
- Aruz = riz / Aiz - rjz / Ajz + uiz - ujz
+ dduNx = jL / jN * duLx
+ dduNy = jL / jN * duLy
+ dduNz = jL / jN * duLz
- Arup = Cpx*Arux + Cpy*Aruy + Cpz*Aruz
- Aruq = Cqx*Arux + Cqy*Aruy + Cqz*Aruz
- Arur = Crx*Arux + Cry*Aruy + Crz*Aruz
- Arupslip = -Arup - dkp
- Aruqslip = -Aruq - dkq
- Arurslip = -Arur - dkr
+ dduPx = -jL / jP * duLx
+ dduPy = -jL / jP * duLy
+ dduPz = -jL / jP * duLz
+
+ print duNx+dduNx,duNy+dduNy, duNz+dduNz
+ print duPx+dduPx,duPy+dduPy, duPz+dduPz
+ print duLx,duLy, duLz
- dlp = Sppi * Arupslip
- dlq = Sqqi * Aruqslip
- dlr = Srri * Arurslip
-
- dduix = +1.0/Aix * (Cpx*dlp + Cqx*dlq + Crx*dlr)
- dduiy = +1.0/Aiy * (Cpy*dlp + Cqy*dlq + Cry*dlr)
- dduiz = +1.0/Aiy * (Cpz*dlp + Cqz*dlq + Crz*dlr)
-
- ddujx = -1.0/Ajx * (Cpx*dlp + Cqx*dlq + Crx*dlr)
- ddujy = -1.0/Ajy * (Cpy*dlp + Cqy*dlq + Cry*dlr)
- ddujz = -1.0/Ajz * (Cpz*dlp + Cqz*dlq + Crz*dlr)
-
-# print "Sppi",Sppi
-# print "Sqqi",Sqqi
-# print "Srri",Srri
-
-# print "Arup",Arup
-# print "Aruq",Aruq
-# print "Arur",Arur
-
-# print "Arupslip",Arupslip
-# print "Aruqslip",Aruqslip
-# print "Arurslip",Arurslip
-
-# print "dlp",dlp
-# print "dlq",dlq
-# print "dlr",dlr
-
-# print "dduix:",dduix
-# print "dduiy:",dduiy
-# print "dduiz:",dduiz
-
-# print "ddujx:",ddujx
-# print "ddujy:",ddujy
-# print "ddujz:",ddujz
-
- print duix+dduix,duiy+dduiy,duiz+dduiz
- print dujx+ddujx,dujy+ddujy,dujz+ddujz
- print dlp,dlq,dlr
-
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/cohesivedyn.py
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/cohesivedyn.py 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/cohesivedyn.py 2011-10-17 22:23:48 UTC (rev 19086)
@@ -1,6 +1,6 @@
cell = "hex8"
dim = "3d"
-testCase = "slip"
+testCase = "open"
import numpy
@@ -22,6 +22,28 @@
# ----------------------------------------------------------------------
+def globalToFault(v, R):
+ """
+ Convert vector from global coordinate system to fault coordinate system.
+ """
+ (m,ndof) = v.shape
+
+ vF = numpy.dot(C, v.reshape(m*ndof,1))
+ return vF.reshape((m, ndof))
+
+
+# ----------------------------------------------------------------------
+def faultToGlobal(v, R):
+ """
+ Convert vector from fault coordinate system to global coordinate system.
+ """
+ (m,ndof) = v.shape
+
+ vG = numpy.dot(C.transpose(), v.reshape(m*ndof,1))
+ return vG.reshape((m, ndof))
+
+
+# ----------------------------------------------------------------------
if dim == "2d":
if cell == "tri3":
dlagrange1 = numpy.zeros(2)
@@ -34,53 +56,56 @@
fieldT = numpy.array([[8.6, 9.6],
[8.8, 9.8]])
- fieldIncr = numpy.array([[9.6, -10.6],
- [9.8, -10.8]])
- area = numpy.array([1.0, 1.0])
+ fieldIncr = numpy.array([[1.6, 2.6],
+ [1.8, 2.8]])
+ L = numpy.array([[1.0, 0.0, 0.0, 0.0,],
+ [0.0, 1.0, 0.0, 0.0,],
+ [0.0, 0.0, 1.0, 0.0,],
+ [0.0, 0.0, 0.0, 1.0,],]);
C = numpy.array([[0.0, -1.0, 0.0, 0.0,],
[-1.0, 0.0, 0.0, 0.0,],
[0.0, 0.0, 0.0, -1.0,],
[0.0, 0.0, -1.0, 0.0,],]);
jacobianN = numpy.array(
- [[ 1.0, 5.2, 4.2, 5.3,],
- [ 6.2, 1.0, 6.3, 7.2,],
- [ 8.2, 9.2, 1.0, 9.3,],
- [ 10.2, 11.2, 10.3, 1.0,],])
+ [[ 4.0, -1.2, -2.2, -2.3,],
+ [ -1.2, 5.0, -1.3, -3.2,],
+ [ -2.2, -1.3, 4.1, -4.3,],
+ [ -2.3, -3.2, -4.3, 5.1,],])
jacobianP = numpy.array(
- [[ 1.0, 17.5, 16.5, 17.6,],
- [ 18.5, 1.0, 18.6, 19.5,],
- [ 20.5, 21.5, 1.0, 21.6,],
- [ 22.5, 23.5, 22.6, 1.0,],])
+ [[ 5.0, -1.2, -2.2, -2.3,],
+ [ -1.2, 4.0, -1.3, -3.2,],
+ [ -2.2, -1.3, 5.1, -4.3,],
+ [ -2.3, -3.2, -4.3, 4.1,],])
disp = numpy.array([[ 8.1, 9.1,],
[ 8.2, 9.2,],
[ 8.3, 9.3,],
[ 8.4, 9.4,],
- [ 8.5, 9.5,],
- [ 8.7, 9.7,],
+ [ 8.2, 9.2,],
+ [ 8.3, 9.3,],
[ 8.6, 9.6,],
[ 8.8, 9.8,],])
if testCase == "slip":
- dispIncr = numpy.array([[ 9.1, 10.1,],
- [ 9.2, 10.2,],
- [ 9.3, 10.3,],
- [ 9.4, 10.4,],
- [ 9.5, 10.5,],
- [ 9.7, 10.7,],
- [ 9.6, -10.6,],
- [ 9.8, -10.8,],])
+ dispIncr = numpy.array([[ 9.1, 7.1,],
+ [ 9.2, 7.2,],
+ [ 9.3, 7.3,],
+ [ 9.4, 7.4,],
+ [ 9.2, 7.2,],
+ [ 9.3, 7.3,],
+ [ 1.6, 2.6,],
+ [ 1.8, 2.8,],])
elif testCase == "open":
- dispIncr = numpy.array([[ 9.1, 10.1,],
- [ 9.2, 10.2,],
- [ 9.3, 10.3,],
- [ 9.4, 10.4,],
- [ 9.5, 10.5,],
- [ 9.7, 10.7,],
- [ 9.6, 10.6,],
- [ 9.8, 10.8,],])
+ dispIncr = numpy.array([[ 9.1, 7.1,],
+ [ 9.2, 7.2,],
+ [ 9.3, 7.3,],
+ [ 9.4, 7.4,],
+ [ 9.2, 7.2,],
+ [ 9.3, 7.3,],
+ [ -10.6, 2.6,],
+ [ -10.8, 2.8,],])
elif cell == "tri3d":
@@ -92,13 +117,20 @@
m = 6
DOF = 2
- fieldT = numpy.array([[6.8, 8.8],
- [6.0, 8.0],
- [7.2, 9.2]])
- fieldIncr = numpy.array([[9.8, -10.8],
- [9.0, -10.0],
- [9.2, -10.2]])
- area = numpy.array([2.0, 1.0, 1.0])
+ fieldT = numpy.array([[-3.8, 4.8],
+ [3.0, 4.0],
+ [3.2, 4.2]])
+ fieldIncr = numpy.array([[1.8, 0.8],
+ [1.0, 0.1],
+ [1.2, 0.2]])
+
+ L = numpy.array([[2.0, 0.0, 0.0, 0.0, 0.0, 0.0],
+ [0.0, 2.0, 0.0, 0.0, 0.0, 0.0],
+ [0.0, 0.0, 1.0, 0.0, 0.0, 0.0],
+ [0.0, 0.0, 0.0, 1.0, 0.0, 0.0],
+ [0.0, 0.0, 0.0, 0.0, 1.0, 0.0],
+ [0.0, 0.0, 0.0, 0.0, 0.0, 1.0]])
+
C = numpy.array([[+0.70710678118654757, -0.70710678118654757, 0.0, 0.0, 0.0, 0.0,],
[-0.70710678118654757, -0.70710678118654757, 0.0, 0.0, 0.0, 0.0,],
[0.0, 0.0, 0.0, -1.0, 0.0, 0.0,],
@@ -107,20 +139,20 @@
[0.0, 0.0, 0.0, 0.0, 0.0, -1.0,],])
jacobianN = numpy.array(
- [[6.0, 7.3, 6.9, 7.4, 6.7, 7.6],
- [3.1, 5.2, 3.2, 5.2, 3.4, 5.3],
- [3.9, 2.7, 3.8, 2.8, 0.0, 0.0],
- [4.1, 6.6, 4.2, 6.2, 0.0, 0.0],
- [7.9, 8.1, 0.0, 0.0, 7.4, 8.5],
- [6.4, 3.4, 0.0, 0.0, 6.1, 3.8]])
+ [[+6.0, -1.0, -1.1, -1.2, -1.3, -1.4],
+ [-1.0, +6.1, -0.9, -0.8, -0.7, -0.6],
+ [-1.1, -0.9, +6.2, -2.1, 0.0, 0.0],
+ [-1.2, -0.8, -2.1, +6.3, 0.0, 0.0],
+ [-1.3, -0.7, 0.0, 0.0, +6.4, -1.1],
+ [-1.4, -0.6, 0.0, 0.0, -1.1, +6.5]])
jacobianP = numpy.array(
- [[1.6, 4.1, 1.7, 4.2, 1.8, 4.3],
- [4.6, 4.8, 4.7, 4.4, 4.8, 4.2],
- [6.9, 5.3, 7.0, 5.9, 0.0, 0.0],
- [7.2, 6.6, 7.3, 6.5, 0.0, 0.0],
- [8.4, 7.8, 0.0, 0.0, 8.3, 7.1],
- [6.3, 8.6, 0.0, 0.0, 4.7, 8.7]])
+ [[+5.0, -1.0, -1.1, -1.2, -1.3, -1.4],
+ [-1.0, +5.1, -0.9, -0.8, -0.7, -0.6],
+ [-1.1, -0.9, +5.2, -2.1, 0.0, 0.0],
+ [-1.2, -0.8, -2.1, +5.3, 0.0, 0.0],
+ [-1.3, -0.7, 0.0, 0.0, +5.4, -1.1],
+ [-1.4, -0.6, 0.0, 0.0, -1.1, +5.5]])
disp = numpy.array([[ 6.1, 8.1,],
[ 6.2, 8.2,],
@@ -128,39 +160,39 @@
[ 6.4, 8.4,],
[ 6.5, 8.5,],
[ 6.6, 8.6,],
- [ 6.7, 8.7,],
- [ 6.9, 8.9,],
- [ 7.1, 9.1,],
- [ 6.8, 8.8,],
- [ 6.0, 8.0,],
- [ 7.2, 9.2,],])
+ [ 6.2, 8.2,],
+ [ 6.3, 8.3,],
+ [ 6.5, 8.5,],
+ [-3.8, 4.8,],
+ [ 3.0, 4.0,],
+ [ 3.2, 4.2,],])
if testCase == "slip":
- dispIncr = numpy.array([[ 9.1, 10.1,],
- [ 9.2, 10.2,],
- [ 9.3, 10.3,],
- [ 9.4, 10.4,],
- [ 9.5, 10.5,],
- [ 9.6, 10.6,],
- [ 9.7, 10.7,],
- [ 9.9, 10.9,],
- [ 9.1, 10.1,],
- [ 9.8, -10.8,],
- [ 9.0, -10.0,],
- [ 9.2, -10.2,],])
+ dispIncr = numpy.array([[ 1.1, 2.1,],
+ [ 1.2, 2.2,],
+ [ 1.3, 2.3,],
+ [ 1.4, 2.4,],
+ [ 1.5, 2.5,],
+ [ 1.6, 2.6,],
+ [ 1.2, 2.2,],
+ [ 1.3, 2.3,],
+ [ 1.5, 2.5,],
+ [ 1.8, 0.8,],
+ [ 1.0, 0.1,],
+ [ 1.2, 0.2,],])
elif testCase == "open":
- dispIncr = numpy.array([[ 9.1, 10.1,],
- [ 9.2, 10.2,],
- [ 9.3, 10.3,],
- [ 9.4, 10.4,],
- [ 9.5, 10.5,],
- [ 9.6, 10.6,],
- [ 9.7, 10.7,],
- [ 9.9, 10.9,],
- [ 9.1, 10.1,],
- [ 9.8, 10.8,],
- [ 9.0, 10.0,],
- [ 9.2, 10.2,],])
+ dispIncr = numpy.array([[ 1.1, 2.1,],
+ [ 1.2, 2.2,],
+ [ 1.3, 2.3,],
+ [ 1.4, 2.4,],
+ [ 1.5, 2.5,],
+ [ 1.6, 2.6,],
+ [ 1.2, 2.2,],
+ [ 1.3, 2.3,],
+ [ 1.5, 2.5,],
+ [-10.8, 0.8,],
+ [-10.0, 0.1,],
+ [ 1.2, -10.2,],])
elif cell == "quad4":
@@ -174,25 +206,28 @@
fieldT = numpy.array([[8.8, 9.8],
[8.0, 9.0]])
- fieldIncr = numpy.array([[-9.8, -10.8],
- [-9.0, -10.0]])
- area = numpy.array([1.0, 1.0])
+ fieldIncr = numpy.array([[1.8, 2.8],
+ [1.0, 2.0]])
+ L = numpy.array([[1.0, 0.0, 0.0, 0.0,],
+ [0.0, 1.0, 0.0, 0.0,],
+ [0.0, 0.0, 1.0, 0.0,],
+ [0.0, 0.0, 0.0, 1.0,],]);
C = numpy.array([[0.0, -1.0, 0.0, 0.0,],
[-1.0, 0.0, 0.0, 0.0,],
[0.0, 0.0, 0.0, -1.0,],
[0.0, 0.0, -1.0, 0.0,],]);
jacobianN = numpy.array(
- [[ 1.0, 8.1, 8.2, 8.3,],
- [ 9.9, 1.0, 10.0, 10.1,],
- [ 11.7, 11.8, 1.0, 11.9,],
- [ 13.5, 13.6, 13.7, 1.0,],])
+ [[ 4.0, -1.2, -2.2, -2.3,],
+ [ -1.2, 5.0, -1.3, -3.2,],
+ [ -2.2, -1.3, 4.1, -4.3,],
+ [ -2.3, -3.2, -4.3, 5.1,],])
jacobianP = numpy.array(
- [[ 1.0, 23.7, 23.8, 23.9,],
- [ 25.5, 1.0, 25.6, 25.7,],
- [ 27.3, 27.4, 1.0, 27.5,],
- [ 29.1, 29.2, 29.3, 1.0,],])
+ [[ 5.0, -1.2, -2.2, -2.3,],
+ [ -1.2, 4.0, -1.3, -3.2,],
+ [ -2.2, -1.3, 5.1, -4.3,],
+ [ -2.3, -3.2, -4.3, 4.1,],])
disp = numpy.array([[ 8.1, 9.1,],
[ 8.2, 9.2,],
@@ -200,41 +235,43 @@
[ 8.4, 9.4,],
[ 8.5, 9.5,],
[ 8.6, 9.6,],
- [ 8.7, 9.7,],
- [ 8.9, 9.9,],
+ [ 8.3, 9.3,],
+ [ 8.4, 9.4,],
[ 8.8, 9.8,],
[ 8.0, 9.0,],])
if testCase == "slip":
- dispIncr = numpy.array([[ 9.1, 10.1,],
- [ 9.2, 10.2,],
- [ 9.3, 10.3,],
- [ 9.4, 10.4,],
- [ 9.5, 10.5,],
- [ 9.6, 10.6,],
- [ 9.7, 10.7,],
- [ 9.9, 10.9,],
- [ -9.8, -10.8,],
- [ -9.0, -10.0,],])
-
+ dispIncr = numpy.array([[ 1.1, 2.1,],
+ [ 1.2, 2.2,],
+ [ 1.3, 2.3,],
+ [ 1.4, 2.4,],
+ [ 1.5, 2.5,],
+ [ 1.6, 2.6,],
+ [ 1.3, 2.3,],
+ [ 1.4, 2.4,],
+ [ 1.8, 2.8,],
+ [ 1.0, 2.0,],])
elif testCase == "open":
- dispIncr = numpy.array([[ 9.1, 10.1,],
- [ 9.2, 10.2,],
- [ 9.3, 10.3,],
- [ 9.4, 10.4,],
- [ 9.5, 10.5,],
- [ 9.6, 10.6,],
- [ 9.7, 10.7,],
- [ 9.9, 10.9,],
- [ 9.8, 10.8,],
- [ 9.0, 10.0,],])
+ dispIncr = numpy.array([[ 1.1, 2.1,],
+ [ 1.2, 2.2,],
+ [ 1.3, 2.3,],
+ [ 1.4, 2.4,],
+ [ 1.5, 2.5,],
+ [ 1.6, 2.6,],
+ [ 1.3, 2.3,],
+ [ 1.4, 2.4,],
+ [ -10.8, 2.8,],
+ [ -10.0, 2.0,],])
+
# ------------------------------------------------------------------
fieldTpdt = fieldT + fieldIncr
- tractionShear = abs(fieldTpdt[:,0]) / area
- tractionNormal = fieldTpdt[:,1] / area
+ fieldTpdt = globalToFault(fieldTpdt, C)
+ tractionShear = abs(fieldTpdt[:,0])
+ tractionNormal = fieldTpdt[:,1]
+
print "tractionShear",tractionShear
print "tractionNormal",tractionNormal
@@ -242,38 +279,38 @@
print "friction",friction
- lagrangeTpdt0 = friction * fieldTpdt[:,0] / tractionShear
-
- lagrangeIncr0 = lagrangeTpdt0 - fieldT[:,0]
-
- print "lagrangeIncr0",lagrangeIncr0
-
- dlagrange0 = (tractionShear - friction) * fieldTpdt[:,0] / tractionShear
-
+ dlagrange0 = (friction - tractionShear) * fieldTpdt[:,0] / tractionShear
+
print "dlagrange0",dlagrange0
if testCase == "slip":
dLagrange = numpy.vstack((dlagrange0, dlagrange1))
dLagrange = numpy.transpose(dLagrange)
- dLagrange = numpy.reshape(dLagrange, m)
+ dLagrange = faultToGlobal(dLagrange, C).reshape(m)
elif testCase == "open":
dLagrange = numpy.reshape(disp+dispIncr, n)
- dLagrange = dLagrange[indexL]
+ dLagrange = -dLagrange[indexL]
print "dLagrange \n", dLagrange
- RHS = numpy.dot(numpy.transpose(C),dLagrange)
- duN = -numpy.dot(inv(jacobianN),RHS)
- duP = numpy.dot(inv(jacobianP),RHS)
+ RHS = numpy.dot(numpy.transpose(L),dLagrange)
+ print "RHS",RHS
+ duN = numpy.dot(inv(jacobianN),RHS)
+ duP = -numpy.dot(inv(jacobianP),RHS)
dispRel = duP - duN
- slipVertex = numpy.dot(C,dispRel)
+ dispTpdt = disp + dispIncr
+ dispTpdt = numpy.reshape(dispTpdt, n)
+
+ slipVertex = dispRel + dispTpdt[indexP]-dispTpdt[indexN]
slipVertex = numpy.reshape(slipVertex, (m/DOF,DOF))
+ slipVertex = globalToFault(slipVertex, C)
if testCase == "slip":
slipVertex[:,1] = 0
mask = slipVertex[:,1] < 0.0
slipVertex[mask,1] = 0
+ slipVertex = faultToGlobal(slipVertex, C)
slipVertex = numpy.reshape(slipVertex, m)
print "duN \n", duN
@@ -281,15 +318,13 @@
dispIncrE = dispIncr
dispIncrE = numpy.reshape(dispIncrE, n)
+ dispIncrE[indexL] = dispIncrE[indexL] + dLagrange
+ dispIncrE[indexN] = dispIncrE[indexN] - 0.5*slipVertex
+ dispIncrE[indexP] = dispIncrE[indexP] + 0.5*slipVertex
+ dispIncrE = numpy.reshape(dispIncrE, (n/DOF,DOF))
- dispIncrE[indexL] = dispIncrE[indexL] - dLagrange
- dispIncrE[indexN] = dispIncrE[indexN] - \
- 0.5*numpy.dot(C.transpose(), slipVertex)
- dispIncrE[indexP] = dispIncrE[indexP] + \
- 0.5*numpy.dot(C.transpose(), slipVertex)
-
- dispIncrE = numpy.reshape(dispIncrE, (n/DOF,DOF))
slipVertex = numpy.reshape(slipVertex, (m/DOF,DOF))
+ slipVertex = globalToFault(slipVertex, C)
print "dispIncrE\n", printdata(dispIncrE)
print "slipVertexE\n", printdata(slipVertex)
@@ -310,69 +345,86 @@
fieldT = numpy.array([[7.7, 8.7, 9.7],
[7.9, 8.9, 9.9],
[7.1, 8.1, 9.1]])
- fieldIncr = numpy.array([[8.7, 9.7, -10.7],
- [8.9, 9.9, -10.9],
- [8.1, 9.1, -10.1]])
- area = numpy.array([1.0/3.0, 1.0/3.0, 1.0/3.0])
+ fieldIncr = numpy.array([[9.7, 2.7, 3.7],
+ [9.9, 2.9, 3.9],
+ [9.1, 2.1, 3.1]])
+ L = numpy.array([[1.0/3.0,0,0, 0.0,0,0, 0.0,0,0,],
+ [0,1.0/3.0,0, 0,0.0,0, 0,0.0,0,],
+ [0,0,1.0/3.0, 0,0,0.0, 0,0,0.0,],
+ [0.0,0,0, 1.0/3.0,0,0, 0.0,0,0,],
+ [0,0.0,0, 0,1.0/3.0,0, 0,0.0,0,],
+ [0,0,0.0, 0,0,1.0/3.0, 0,0,0.0,],
+ [0.0,0,0, 0.0,0,0, 1.0/3.0,0,0,],
+ [0,0.0,0, 0,0.0,0, 0,1.0/3.0,0,],
+ [0,0,0.0, 0,0,0.0, 0,0,1.0/3.0,]])
+
+ Cv = numpy.array([[ 0, -1, 0,],
+ [ 0, 0, +1,],
+ [ -1, 0, 0,],])
+ Zv = numpy.zeros([3,3])
+ C = numpy.vstack( (numpy.hstack((Cv, Zv, Zv)),
+ numpy.hstack((Zv, Cv, Zv)),
+ numpy.hstack((Zv, Zv, Cv)) ) )
+
jacobianN = numpy.array(
- [[1.0, 10.0, 10.1, 10.2, 10.3, 10.4, 10.5, 10.6, 10.7],
- [13.1, 1.0, 13.2, 13.3, 13.4, 13.5, 13.6, 13.7, 13.8],
- [16.2, 16.3, 1.0, 16.4, 16.5, 16.6, 16.7, 16.8, 16.9],
- [19.3, 19.4, 19.5, 1.0, 19.6, 19.7, 19.8, 19.9, 20.0],
- [22.4, 22.5, 22.6, 22.7, 1.0, 22.8, 22.9, 23.0, 23.1],
- [25.5, 25.6, 25.7, 25.8, 25.9, 1.0, 26.0, 26.1, 26.2],
- [28.6, 28.7, 28.8, 28.9, 29.0, 29.1, 1.0, 29.2, 29.3],
- [31.7, 31.8, 31.9, 32.0, 32.1, 32.2, 32.3, 1.0, 32.4],
- [34.8, 34.9, 35.0, 35.1, 35.2, 35.3, 35.4, 35.5, 1.0]])
+ [[ 4.0, -1.1, -1.2, -1.3, -1.4, -1.5, -1.6, -1.7, -1.8],
+ [-1.1, 4.1, -2.3, -2.4, -2.5, -2.6, -2.7, -2.8, -2.9],
+ [-1.2, -2.3, 4.2, -1.0, -1.1, -1.2, -1.3, -1.4, -1.5],
+ [-1.3, -2.4, -1.0, 4.3, -0.2, -0.3, -0.4, -0.5, -0.6],
+ [-1.4, -2.5, -1.1, -0.2, 4.4, -0.9, -0.8, -0.7, -0.5],
+ [-1.5, -2.6, -1.2, -0.3, -0.9, 4.5, -1.1, -1.2, -1.3],
+ [-1.6, -2.7, -1.3, -0.4, -0.8, -1.1, 4.6, -1.8, -1.5],
+ [-1.7, -2.8, -1.4, -0.5, -0.7, -1.2, -1.8, 4.7, -1.1],
+ [-1.8, -2.9, -1.5, -0.6, -0.5, -1.3, -1.5, -1.1, 4.8]])
jacobianP = numpy.array(
- [[ 1.0, 48.7, 48.8, 48.9, 49.0, 49.1, 49.2, 49.3, 49.4,],
- [ 51.8, 1.0, 51.9, 52.0, 52.1, 52.2, 52.3, 52.4, 52.5,],
- [ 54.9, 55.0, 1.0, 55.1, 55.2, 55.3, 55.4, 55.5, 55.6,],
- [ 58.0, 58.1, 58.2, 1.0, 58.3, 58.4, 58.5, 58.6, 58.7,],
- [ 61.1, 61.2, 61.3, 61.4, 1.0, 61.5, 61.6, 61.7, 61.8,],
- [ 64.2, 64.3, 64.4, 64.5, 64.6, 1.0, 64.7, 64.8, 64.9,],
- [ 67.3, 67.4, 67.5, 67.6, 67.7, 67.8, 1.0, 67.9, 68.0,],
- [ 70.4, 70.5, 70.6, 70.7, 70.8, 70.9, 71.0, 1.0, 71.1,],
- [ 73.5, 73.6, 73.7, 73.8, 73.9, 74.0, 74.1, 74.2, 1.0,],])
+ [[ 5.0, -1.1, -1.2, -1.3, -1.4, -1.5, -1.6, -1.7, -1.8],
+ [-1.1, 5.1, -2.3, -2.4, -2.5, -2.6, -2.7, -2.8, -2.9],
+ [-1.2, -2.3, 5.2, -1.0, -1.1, -1.2, -1.3, -1.4, -1.5],
+ [-1.3, -2.4, -1.0, 5.3, -0.2, -0.3, -0.4, -0.5, -0.6],
+ [-1.4, -2.5, -1.1, -0.2, 5.4, -0.9, -0.8, -0.7, -0.5],
+ [-1.5, -2.6, -1.2, -0.3, -0.9, 5.5, -1.1, -1.2, -1.3],
+ [-1.6, -2.7, -1.3, -0.4, -0.8, -1.1, 5.6, -1.8, -1.5],
+ [-1.7, -2.8, -1.4, -0.5, -0.7, -1.2, -1.8, 5.7, -1.1],
+ [-1.8, -2.9, -1.5, -0.6, -0.5, -1.3, -1.5, -1.1, 5.8]])
disp = numpy.array([[ 7.1, 8.1, 9.1,],
[ 7.2, 8.2, 9.2,],
[ 7.3, 8.3, 9.3,],
[ 7.4, 8.4, 9.4,],
[ 7.5, 8.5, 9.5,],
- [ 7.6, 8.6, 9.6,],
- [ 7.8, 8.8, 9.8,],
- [ 7.0, 8.0, 9.0,],
+ [ 7.2, 8.2, 9.2,],
+ [ 7.3, 8.3, 9.3,],
+ [ 7.4, 8.4, 9.4,],
[ 7.7, 8.7, 9.7,],
[ 7.9, 8.9, 9.9,],
[ 7.1, 8.1, 9.1,],])
if testCase == "slip":
- dispIncr = numpy.array([[ 8.1, 9.1, 10.1,],
- [ 8.2, 9.2, 10.2,],
- [ 8.3, 9.3, 10.3,],
- [ 8.4, 9.4, 10.4,],
- [ 8.5, 9.5, 10.5,],
- [ 8.6, 9.6, 10.6,],
- [ 8.8, 9.8, 10.8,],
- [ 8.0, 9.0, 10.0,],
- [ 8.7, 9.7, -10.7,],
- [ 8.9, 9.9, -10.9,],
- [ 8.1, 9.1, -10.1,],])
+ dispIncr = numpy.array([[ 1.1, 2.1, 3.1,],
+ [ 1.2, 2.2, 3.2,],
+ [ 1.3, 2.3, 3.3,],
+ [ 1.4, 2.4, 3.4,],
+ [ 1.5, 2.5, 3.5,],
+ [ 1.2, 2.2, 3.2,],
+ [ 1.3, 2.3, 3.3,],
+ [ 1.4, 2.4, 3.4,],
+ [ 9.7, 2.7, 3.7,],
+ [ 9.9, 2.9, 3.9,],
+ [ 9.1, 2.1, 3.1,],])
elif testCase == "open":
- dispIncr = numpy.array([[ 8.1, 9.1, 10.1,],
- [ 8.2, 9.2, 10.2,],
- [ 8.3, 9.3, 10.3,],
- [ 8.4, 9.4, 10.4,],
- [ 8.5, 9.5, 10.5,],
- [ 8.6, 9.6, 10.6,],
- [ 8.8, 9.8, 10.8,],
- [ 8.0, 9.0, 10.0,],
- [ 8.7, 9.7, 10.7,],
- [ 8.9, 9.9, 10.9,],
- [ 8.1, 9.1, 10.1,],])
+ dispIncr = numpy.array([[ 1.1, 2.1, 3.1,],
+ [ 1.2, 2.2, 3.2,],
+ [ 1.3, 2.3, 3.3,],
+ [ 1.4, 2.4, 3.4,],
+ [ 1.5, 2.5, 3.5,],
+ [ 1.2, 2.2, 3.2,],
+ [ 1.3, 2.3, 3.3,],
+ [ 1.4, 2.4, 3.4,],
+ [-20.7, 2.7, 3.7,],
+ [-20.9, 2.9, 3.9,],
+ [-20.1, 2.1, 3.1,],])
elif cell == "hex8":
@@ -384,115 +436,141 @@
m = 12
DOF = 3
- fieldT = numpy.array([[5.4, 7.4, 9.4],
- [5.6, 7.6, 9.6],
- [5.8, 7.8, 9.8],
- [5.0, 7.0, 9.0]])
- fieldIncr = numpy.array([[-6.4, -8.4, -10.4],
- [-6.6, -8.6, -10.6],
- [-6.8, -8.8, -10.8],
- [-6.0, -8.0, -10.0]])
- area = numpy.array([1.0, 1.0, 1.0, 1.0])
-
+ a0 = 1.0
+ a1 = 0.0
+ a2 = 0.0
+ L = numpy.array([[a0, 0, 0, a1, 0, 0, a1, 0, 0, a2, 0, 0],
+ [0, a0, 0, 0, a1, 0, 0, a1, 0, 0, a2, 0],
+ [0, 0, a0, 0, 0, a1, 0, 0, a1, 0, 0, a2],
+ [a1, 0, 0, a0, 0, 0, a2, 0, 0, a1, 0, 0],
+ [0, a1, 0, 0, a0, 0, 0, a2, 0, 0, a1, 0],
+ [0, 0, a1, 0, 0, a0, 0, 0, a2, 0, 0, a1],
+ [a1, 0, 0, a2, 0, 0, a0, 0, 0, a1, 0, 0],
+ [0, a1, 0, 0, a2, 0, 0, a0, 0, 0, a1, 0],
+ [0, 0, a1, 0, 0, a2, 0, 0, a0, 0, 0, a1],
+ [a2, 0, 0, a1, 0, 0, a1, 0, 0, a0, 0, 0],
+ [0, a2, 0, 0, a1, 0, 0, a1, 0, 0, a0, 0],
+ [0, 0, a2, 0, 0, a1, 0, 0, a1, 0, 0, a0]])
+
+ fieldT = numpy.array([[4.4, 2.4, 3.4],
+ [4.6, 2.6, 3.6],
+ [4.8, 2.8, 3.8],
+ [4.0, 2.0, 3.0]])
+ fieldIncr = numpy.array([[1.4, 2.4, 0.4],
+ [1.6, 2.6, 0.6],
+ [1.8, 2.8, 0.8],
+ [1.0, 2.0, 0.2]])
+
+ Cv = numpy.array([[ 0, -1, 0,],
+ [ 0, 0, +1,],
+ [ -1, 0, 0,],])
+ Zv = numpy.zeros([3,3])
+ C = numpy.vstack( (numpy.hstack((Cv, Zv, Zv, Zv)),
+ numpy.hstack((Zv, Cv, Zv, Zv)),
+ numpy.hstack((Zv, Zv, Cv, Zv)),
+ numpy.hstack((Zv, Zv, Zv, Cv)) ) )
+
jacobianN = numpy.array(
- [[ 1.0, 72.1, 72.2, 72.3, 72.4, 72.5, 72.6, 72.7, 72.8, 72.9, 73.0, 73.1,],
- [ 77.9, 1.0, 78.0, 78.1, 78.2, 78.3, 78.4, 78.5, 78.6, 78.7, 78.8, 78.9,],
- [ 83.7, 83.8, 1.0, 83.9, 84.0, 84.1, 84.2, 84.3, 84.4, 84.5, 84.6, 84.7,],
- [ 89.5, 89.6, 89.7, 1.0, 89.8, 89.9, 90.0, 90.1, 90.2, 90.3, 90.4, 90.5,],
- [ 95.3, 95.4, 95.5, 95.6, 1.0, 95.7, 95.8, 95.9, 96.0, 96.1, 96.2, 96.3,],
- [ 101.1, 101.2, 101.3, 101.4, 101.5, 1.0, 101.6, 101.7, 101.8, 101.9, 102.0, 102.1,],
- [ 106.9, 107.0, 107.1, 107.2, 107.3, 107.4, 1.0, 107.5, 107.6, 107.7, 107.8, 107.9,],
- [ 112.7, 112.8, 112.9, 113.0, 113.1, 113.2, 113.3, 1.0, 113.4, 113.5, 113.6, 113.7,],
- [ 118.5, 118.6, 118.7, 118.8, 118.9, 119.0, 119.1, 119.2, 1.0, 119.3, 119.4, 119.5,],
- [ 124.3, 124.4, 124.5, 124.6, 124.7, 124.8, 124.9, 125.0, 125.1, 1.0, 125.2, 125.3,],
- [ 130.1, 130.2, 130.3, 130.4, 130.5, 130.6, 130.7, 130.8, 130.9, 131.0, 1.0, 131.1,],
- [ 135.9, 136.0, 136.1, 136.2, 136.3, 136.4, 136.5, 136.6, 136.7, 136.8, 136.9, 1.0,],])
+ [[+6.0, -0.5, -0.6, -0.7, -0.8, -0.9, -1.0, -0.8, -0.7, -0.6, -0.5, -0.4,],
+ [-0.5, +6.1, -1.0, -1.1, -1.2, -1.3, -1.4, -1.3, -1.2, -1.1, -1.0, -0.9,],
+ [-0.6, -1.0, +6.2, -0.5, -0.6, -0.7, -0.8, -0.9, -0.8, -0.7, -0.6, -0.5,],
+ [-0.7, -1.1, -0.5, +6.3, -0.8, -0.7, -0.6, -0.5, -0.4, -0.3, -0.2, -0.1,],
+ [-0.8, -1.2, -0.6, -0.8, +6.4, -0.3, -0.4, -0.5, -0.6, -0.7, -0.8, -0.9,],
+ [-0.9, -1.3, -0.7, -0.7, -0.3, +6.5, -0.3, -0.8, -0.7, -0.6, -0.9, -0.7,],
+ [-1.0, -1.4, -0.8, -0.6, -0.4, -0.3, +6.6, -1.1, -0.8, -0.7, -0.6, -0.5,],
+ [-0.8, -1.3, -0.9, -0.5, -0.5, -0.8, -1.1, +6.7, -0.8, -0.9, -1.0, -1.1,],
+ [-0.7, -1.2, -0.8, -0.4, -0.6, -0.7, -0.8, -0.8, +6.8, -1.0, -1.1, -1.2,],
+ [-0.6, -1.1, -0.7, -0.3, -0.7, -0.6, -0.7, -0.9, -1.0, +6.9, -0.5, -0.4,],
+ [-0.5, -1.0, -0.6, -0.2, -0.8, -0.9, -0.6, -1.0, -1.1, -0.5, +6.0, -1.2,],
+ [-0.4, -0.9, -0.5, -0.1, -0.9, -0.7, -0.5, -1.1, -1.2, -0.4, -1.2, +6.1,],])
jacobianP = numpy.array(
- [[ 1.0, 214.9, 215.0, 215.1, 215.2, 215.3, 215.4, 215.5, 215.6, 215.7, 215.8, 215.9,],
- [ 220.7, 1.0, 220.8, 220.9, 221.0, 221.1, 221.2, 221.3, 221.4, 221.5, 221.6, 221.7,],
- [ 226.5, 226.6, 1.0, 226.7, 226.8, 226.9, 227.0, 227.1, 227.2, 227.3, 227.4, 227.5,],
- [ 232.3, 232.4, 232.5, 1.0, 232.6, 232.7, 232.8, 232.9, 233.0, 233.1, 233.2, 233.3,],
- [ 238.1, 238.2, 238.3, 238.4, 1.0, 238.5, 238.6, 238.7, 238.8, 238.9, 239.0, 239.1,],
- [ 243.9, 244.0, 244.1, 244.2, 244.3, 1.0, 244.4, 244.5, 244.6, 244.7, 244.8, 244.9,],
- [ 249.7, 249.8, 249.9, 250.0, 250.1, 250.2, 1.0, 250.3, 250.4, 250.5, 250.6, 250.7,],
- [ 255.5, 255.6, 255.7, 255.8, 255.9, 256.0, 256.1, 1.0, 256.2, 256.3, 256.4, 256.5,],
- [ 261.3, 261.4, 261.5, 261.6, 261.7, 261.8, 261.9, 262.0, 1.0, 262.1, 262.2, 262.3,],
- [ 267.1, 267.2, 267.3, 267.4, 267.5, 267.6, 267.7, 267.8, 267.9, 1.0, 268.0, 268.1,],
- [ 272.9, 273.0, 273.1, 273.2, 273.3, 273.4, 273.5, 273.6, 273.7, 273.8, 1.0, 273.9,],
- [ 278.7, 278.8, 278.9, 279.0, 279.1, 279.2, 279.3, 279.4, 279.5, 279.6, 279.7, 1.0,],])
+ [[+7.0, -0.5, -0.6, -0.7, -0.8, -0.9, -1.0, -0.8, -0.7, -0.6, -0.5, -0.4,],
+ [-0.5, +7.1, -1.0, -1.1, -1.2, -1.3, -1.4, -1.3, -1.2, -1.1, -1.0, -0.9,],
+ [-0.6, -1.0, +7.2, -0.5, -0.6, -0.7, -0.8, -0.9, -0.8, -0.7, -0.6, -0.5,],
+ [-0.7, -1.1, -0.5, +7.3, -0.8, -0.7, -0.6, -0.5, -0.4, -0.3, -0.2, -0.1,],
+ [-0.8, -1.2, -0.6, -0.8, +7.4, -0.3, -0.4, -0.5, -0.6, -0.7, -0.8, -0.9,],
+ [-0.9, -1.3, -0.7, -0.7, -0.3, +7.5, -0.3, -0.8, -0.7, -0.6, -0.9, -0.7,],
+ [-1.0, -1.4, -0.8, -0.6, -0.4, -0.3, +7.6, -1.1, -0.8, -0.7, -0.6, -0.5,],
+ [-0.8, -1.3, -0.9, -0.5, -0.5, -0.8, -1.1, +7.7, -0.8, -0.9, -1.0, -1.1,],
+ [-0.7, -1.2, -0.8, -0.4, -0.6, -0.7, -0.8, -0.8, +7.8, -1.0, -1.1, -1.2,],
+ [-0.6, -1.1, -0.7, -0.3, -0.7, -0.6, -0.7, -0.9, -1.0, +7.9, -0.5, -0.4,],
+ [-0.5, -1.0, -0.6, -0.2, -0.8, -0.9, -0.6, -1.0, -1.1, -0.5, +7.0, -1.2,],
+ [-0.4, -0.9, -0.5, -0.1, -0.9, -0.7, -0.5, -1.1, -1.2, -0.4, -1.2, +7.1,],])
- disp = numpy.array([[ 4.1, 6.1, 8.1,],
- [ 4.2, 6.2, 8.2,],
- [ 4.3, 6.3, 8.3,],
- [ 4.4, 6.4, 8.4,],
- [ 4.5, 6.5, 8.5,],
- [ 4.6, 6.6, 8.6,],
- [ 4.7, 6.7, 8.7,],
- [ 4.8, 6.8, 8.8,],
- [ 4.9, 6.9, 8.9,],
- [ 4.0, 6.0, 8.0,],
- [ 5.1, 7.1, 9.1,],
- [ 5.2, 7.2, 9.2,],
- [ 5.3, 7.3, 9.3,],
- [ 5.5, 7.5, 9.5,],
- [ 5.7, 7.7, 9.7,],
- [ 5.9, 7.9, 9.9,],
- [ 5.4, 7.4, 9.4,],
- [ 5.6, 7.6, 9.6,],
- [ 5.8, 7.8, 9.8,],
- [ 5.0, 7.0, 9.0,],])
+ disp = numpy.array([[ 4.1, 2.1, 3.1,],
+ [ 4.2, 2.2, 3.2,],
+ [ 4.3, 2.3, 3.3,],
+ [ 4.4, 2.4, 3.4,],
+ [ 4.5, 2.5, 3.5,],
+ [ 4.6, 2.6, 3.6,],
+ [ 4.7, 2.7, 3.7,],
+ [ 4.8, 2.8, 3.8,],
+ [ 4.9, 2.9, 3.9,],
+ [ 4.0, 2.0, 3.0,],
+ [ 4.1, 2.1, 3.1,],
+ [ 4.2, 2.2, 3.2,],
+ [ 4.5, 2.5, 3.5,],
+ [ 4.6, 2.6, 3.6,],
+ [ 4.7, 2.7, 3.7,],
+ [ 4.8, 2.8, 3.8,],
+ [ 4.4, 2.4, 3.4,],
+ [ 4.6, 2.6, 3.6,],
+ [ 4.8, 2.8, 3.8,],
+ [ 4.0, 2.0, 3.0,],])
if testCase == "slip":
- dispIncr = numpy.array([[ 5.1, 7.1, 9.1,],
- [ 5.2, 7.2, 9.2,],
- [ 5.3, 7.3, 9.3,],
- [ 5.4, 7.4, 9.4,],
- [ 5.5, 7.5, 9.5,],
- [ 5.6, 7.6, 9.6,],
- [ 5.7, 7.7, 9.7,],
- [ 5.8, 7.8, 9.8,],
- [ 5.9, 7.9, 9.9,],
- [ 5.0, 7.0, 9.0,],
- [ 6.1, 8.1, 10.1,],
- [ 6.2, 8.2, 10.2,],
- [ 6.3, 8.3, 10.3,],
- [ 6.5, 8.5, 10.5,],
- [ 6.7, 8.7, 10.7,],
- [ 6.9, 8.9, 10.9,],
- [ -6.4, -8.4, -10.4,],
- [ -6.6, -8.6, -10.6,],
- [ -6.8, -8.8, -10.8,],
- [ -6.0, -8.0, -10.0,],])
+ dispIncr = numpy.array([[ 1.1, 2.1, 0.1,],
+ [ 1.2, 2.2, 0.2,],
+ [ 1.3, 2.3, 0.3,],
+ [ 1.4, 2.4, 0.4,],
+ [ 1.5, 2.5, 0.5,],
+ [ 1.6, 2.6, 0.6,],
+ [ 1.7, 2.7, 0.7,],
+ [ 1.8, 2.8, 0.8,],
+ [ 1.9, 2.9, 0.9,],
+ [ 1.0, 2.0, 0.0,],
+ [ 1.1, 2.1, 0.1,],
+ [ 1.2, 2.2, 0.2,],
+ [ 1.5, 2.5, 0.5,],
+ [ 1.6, 2.6, 0.6,],
+ [ 1.7, 2.7, 0.7,],
+ [ 1.8, 2.8, 0.8,],
+ [ 1.4, 2.4, 0.4,],
+ [ 1.6, 2.6, 0.6,],
+ [ 1.8, 2.8, 0.8,],
+ [ 1.0, 2.0, 0.2,],])
elif testCase == "open":
- dispIncr = numpy.array([[ 5.1, 7.1, 9.1,],
- [ 5.2, 7.2, 9.2,],
- [ 5.3, 7.3, 9.3,],
- [ 5.4, 7.4, 9.4,],
- [ 5.5, 7.5, 9.5,],
- [ 5.6, 7.6, 9.6,],
- [ 5.7, 7.7, 9.7,],
- [ 5.8, 7.8, 9.8,],
- [ 5.9, 7.9, 9.9,],
- [ 5.0, 7.0, 9.0,],
- [ 6.1, 8.1, 10.1,],
- [ 6.2, 8.2, 10.2,],
- [ 6.3, 8.3, 10.3,],
- [ 6.5, 8.5, 10.5,],
- [ 6.7, 8.7, 10.7,],
- [ 6.9, 8.9, 10.9,],
- [ 6.4, 8.4, 10.4,],
- [ 6.6, 8.6, 10.6,],
- [ 6.8, 8.8, 10.8,],
- [ 6.0, 8.0, 10.0,],])
+ dispIncr = numpy.array([[ 1.1, 2.1, 0.1,],
+ [ 1.2, 2.2, 0.2,],
+ [ 1.3, 2.3, 0.3,],
+ [ 1.4, 2.4, 0.4,],
+ [ 1.5, 2.5, 0.5,],
+ [ 1.6, 2.6, 0.6,],
+ [ 1.7, 2.7, 0.7,],
+ [ 1.8, 2.8, 0.8,],
+ [ 1.9, 2.9, 0.9,],
+ [ 1.0, 2.0, 0.0,],
+ [ 1.1, 2.1, 0.1,],
+ [ 1.2, 2.2, 0.2,],
+ [ 1.5, 2.5, 0.5,],
+ [ 1.6, 2.6, 0.6,],
+ [ 1.7, 2.7, 0.7,],
+ [ 1.8, 2.8, 0.8,],
+ [-10.4, 2.4, 0.4,],
+ [-10.6, 2.6, 0.6,],
+ [-10.8, 2.8, 0.8,],
+ [-10.0, 2.0, 0.2,],])
# ------------------------------------------------------------------
fieldTpdt = fieldT + fieldIncr
- tractionShear = (fieldTpdt[:,0]**2 + fieldTpdt[:,1]**2)**0.5 / area
- tractionNormal = fieldTpdt[:,2] / area
+ fieldTpdt = globalToFault(fieldTpdt, C)
+ tractionShear = (fieldTpdt[:,0]**2 + fieldTpdt[:,1]**2)**0.5
+ tractionNormal = fieldTpdt[:,2]
+
print "tractionShear",tractionShear
print "tractionNormal",tractionNormal
@@ -500,61 +578,40 @@
print "friction",friction
- lagrangeTpdt0 = friction * fieldTpdt[:,0] / tractionShear
- lagrangeTpdt1 = friction * fieldTpdt[:,1] / tractionShear
-
- lagrangeIncr0 = lagrangeTpdt0 - fieldT[:,0]
- lagrangeIncr1 = lagrangeTpdt1 - fieldT[:,1]
-
- print "lagrangeIncr0",lagrangeIncr0
- print "lagrangeIncr1",lagrangeIncr1
-
- dlagrange0 = (tractionShear - friction) * fieldTpdt[:,0] / tractionShear
- dlagrange1 = (tractionShear - friction) * fieldTpdt[:,1] / tractionShear
-
+ dlagrange0 = (friction - tractionShear) * fieldTpdt[:,0] / tractionShear
+ dlagrange1 = (friction - tractionShear) * fieldTpdt[:,1] / tractionShear
+
print "dlagrange0",dlagrange0
print "dlagrange1",dlagrange1
- D = numpy.array([[ 0, -1, 0,],
- [ 0, 0, +1,],
- [ -1, 0, 0,],])
-
- Z = numpy.zeros([3,3])
-
- if cell == "tet4":
- C1 = numpy.hstack((D, Z, Z))
- C2 = numpy.hstack((Z, D, Z))
- C3 = numpy.hstack((Z, Z, D))
- C = numpy.vstack((C1, C2, C3))
- elif cell == "hex8":
- C1 = numpy.hstack((D, Z, Z, Z))
- C2 = numpy.hstack((Z, D, Z, Z))
- C3 = numpy.hstack((Z, Z, D, Z))
- C4 = numpy.hstack((Z, Z, Z, D))
- C = numpy.vstack((C1, C2, C3, C4))
-
if testCase == "slip":
dLagrange = numpy.vstack((dlagrange0, dlagrange1, dlagrange2))
dLagrange = numpy.transpose(dLagrange)
- dLagrange = numpy.reshape(dLagrange, m)
+ dLagrange = faultToGlobal(dLagrange, C).reshape(m)
elif testCase == "open":
dLagrange = numpy.reshape(disp+dispIncr, n)
- dLagrange = dLagrange[indexL]
+ dLagrange = -dLagrange[indexL]
print "dLagrange \n", dLagrange
- RHS = numpy.dot(numpy.transpose(C),dLagrange)
- duN = -numpy.dot(inv(jacobianN),RHS)
- duP = numpy.dot(inv(jacobianP),RHS)
+ RHS = numpy.dot(numpy.transpose(L),dLagrange)
+ print "RHS",RHS
+ duN = numpy.dot(inv(jacobianN),RHS)
+ duP = -numpy.dot(inv(jacobianP),RHS)
dispRel = duP - duN
- slipVertex = numpy.dot(C,dispRel)
+ dispTpdt = disp + dispIncr
+ dispTpdt = numpy.reshape(dispTpdt, n)
+
+ slipVertex = dispRel + dispTpdt[indexP]-dispTpdt[indexN]
slipVertex = numpy.reshape(slipVertex, (m/DOF,DOF))
+ slipVertex = globalToFault(slipVertex, C)
if testCase == "slip":
- slipVertex[:,2] = 0
+ slipVertex[:,2] = 0
mask = slipVertex[:,2] < 0.0
slipVertex[mask,2] = 0
+ slipVertex = faultToGlobal(slipVertex, C)
slipVertex = numpy.reshape(slipVertex, m)
print "duN \n", duN
@@ -563,15 +620,13 @@
dispIncrE = dispIncr
dispIncrE = numpy.reshape(dispIncrE, n)
- dispIncrE[indexL] = dispIncrE[indexL] - dLagrange
- dispIncrE[indexN] = dispIncrE[indexN] - \
- 0.5*numpy.dot(C.transpose(), slipVertex)
- dispIncrE[indexP] = dispIncrE[indexP] + \
- 0.5*numpy.dot(C.transpose(), slipVertex)
+ dispIncrE[indexL] = dispIncrE[indexL] + dLagrange
+ dispIncrE[indexN] = dispIncrE[indexN] - 0.5*slipVertex
+ dispIncrE[indexP] = dispIncrE[indexP] + 0.5*slipVertex
+ dispIncrE = numpy.reshape(dispIncrE, (n/DOF,DOF))
- dispIncrE = numpy.reshape(dispIncrE, (n/DOF,DOF))
slipVertex = numpy.reshape(slipVertex, (m/DOF,DOF))
+ slipVertex = globalToFault(slipVertex, C)
print "dispIncrE\n", printdata(dispIncrE)
print "slipVertexE\n", printdata(slipVertex)
-
Modified: short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/hex8_initialtract.spatialdb
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/hex8_initialtract.spatialdb 2011-10-17 21:11:17 UTC (rev 19085)
+++ short/3D/PyLith/branches/v1.6-stable/unittests/libtests/faults/data/hex8_initialtract.spatialdb 2011-10-17 22:23:48 UTC (rev 19086)
@@ -11,7 +11,7 @@
space-dim = 3
}
}
-0.0 -0.57735027 -0.57735027 1.0000 2.0000 -3.0000
-0.0 0.57735027 -0.57735027 1.1000 2.1000 -3.1000
-0.0 -0.57735027 0.57735027 1.2000 2.2000 -3.2000
-0.0 0.57735027 0.57735027 1.3000 2.3000 -3.3000
+0.0 -1.0 -1.0 1.0000 2.0000 -3.0000
+0.0 1.0 -1.0 1.1000 2.1000 -3.1000
+0.0 -1.0 1.0 1.2000 2.2000 -3.2000
+0.0 1.0 1.0 1.3000 2.3000 -3.3000
More information about the CIG-COMMITS
mailing list