[cig-commits] r15961 - in short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble: . data

brad at geodynamics.org brad at geodynamics.org
Wed Nov 11 23:17:42 PST 2009


Author: brad
Date: 2009-11-11 23:17:42 -0800 (Wed, 11 Nov 2009)
New Revision: 15961

Added:
   short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityImplicitLgDeform.cc
   short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityImplicitLgDeform.hh
   short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityImplicitLgDeform1DLinear.cc
   short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityImplicitLgDeform1DLinear.hh
   short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DLinear.cc
   short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DLinear.hh
Modified:
   short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/Makefile.am
Log:
Started adding C++ unit test data for implicit integration for large deformations.

Modified: short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/Makefile.am	2009-11-12 05:13:32 UTC (rev 15960)
+++ short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/Makefile.am	2009-11-12 07:17:42 UTC (rev 15961)
@@ -67,6 +67,8 @@
 	TestElasticityImplicitGrav3DLinear.cc \
 	TestElasticityImplicitGrav3DQuadratic.cc \
 	TestIntegratorElasticityLgDeform.cc \
+	TestElasticityImplicitLgDeform.cc \
+	TestElasticityImplicitLgDeform1DLinear.cc \
 	test_feassemble.cc
 
 
@@ -93,6 +95,8 @@
 	TestElasticityImplicitGrav2DQuadratic.hh \
 	TestElasticityImplicitGrav3DLinear.hh \
 	TestElasticityImplicitGrav3DQuadratic.hh \
+	TestElasticityImplicitLgDeform.hh \
+	TestElasticityImplicitLgDeform1DLinear.hh \
 	TestGeometryPoint1D.hh \
 	TestGeometryPoint2D.hh \
 	TestGeometryPoint3D.hh \
@@ -152,6 +156,7 @@
 	data/ElasticityImplicitGravData2DQuadratic.cc \
 	data/ElasticityImplicitGravData3DLinear.cc \
 	data/ElasticityImplicitGravData3DQuadratic.cc \
+	data/ElasticityImplicitLgDeformData1DLinear.cc \
 	data/QuadratureData.cc \
 	data/QuadratureData1DLinear.cc \
 	data/QuadratureData1DQuadratic.cc \
@@ -202,6 +207,7 @@
 	data/ElasticityImplicitGravData2DQuadratic.hh \
 	data/ElasticityImplicitGravData3DLinear.hh \
 	data/ElasticityImplicitGravData3DQuadratic.hh \
+	data/ElasticityImplicitLgDeformData1DLinear.hh \
 	data/QuadratureData.hh \
 	data/QuadratureData1DLinear.hh \
 	data/QuadratureData1DQuadratic.hh \

Added: short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityImplicitLgDeform.cc
===================================================================
--- short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityImplicitLgDeform.cc	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityImplicitLgDeform.cc	2009-11-12 07:17:42 UTC (rev 15961)
@@ -0,0 +1,387 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestElasticityImplicitLgDeform.hh" // Implementation of class methods
+
+#include "pylith/feassemble/ElasticityImplicitLgDeform.hh" // USES ElasticityImplicitLgDeform
+#include "data/IntegratorData.hh" // USES IntegratorData
+
+#include "pylith/utils/constdefs.h" // USES MAXDOUBLE
+#include "pylith/materials/ElasticIsotropic3D.hh" // USES ElasticIsotropic3D
+#include "pylith/feassemble/Quadrature.hh" // USES Quadrature
+#include "pylith/topology/Mesh.hh" // USES Mesh
+#include "pylith/topology/SolutionFields.hh" // USES SolutionFields
+#include "pylith/topology/Jacobian.hh" // USES Jacobian
+
+#include "spatialdata/geocoords/CSCart.hh" // USES CSCart
+#include "spatialdata/spatialdb/SimpleDB.hh" // USES SimpleDB
+#include "spatialdata/spatialdb/SimpleIOAscii.hh" // USES SimpleIOAscii
+#include "spatialdata/spatialdb/GravityField.hh" // USES GravityField
+#include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
+
+#include <math.h> // USES fabs()
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::feassemble::TestElasticityImplicitLgDeform );
+
+// ----------------------------------------------------------------------
+typedef pylith::topology::Mesh::SieveMesh SieveMesh;
+typedef pylith::topology::Mesh::RealSection RealSection;
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::feassemble::TestElasticityImplicitLgDeform::setUp(void)
+{ // setUp
+  _quadrature = new Quadrature<topology::Mesh>();
+  _data = 0;
+  _material = 0;
+  _gravityField = 0;
+} // setUp
+
+// ----------------------------------------------------------------------
+// Tear down testing data.
+void
+pylith::feassemble::TestElasticityImplicitLgDeform::tearDown(void)
+{ // tearDown
+  delete _data; _data = 0;
+  delete _quadrature; _quadrature = 0;
+  delete _material; _material = 0;
+  delete _gravityField; _gravityField = 0;
+} // tearDown
+
+// ----------------------------------------------------------------------
+// Test constructor.
+void
+pylith::feassemble::TestElasticityImplicitLgDeform::testConstructor(void)
+{ // testConstructor
+  ElasticityImplicitLgDeform integrator;
+} // testConstructor
+
+// ----------------------------------------------------------------------
+// Test timeStep().
+void
+pylith::feassemble::TestElasticityImplicitLgDeform::testTimeStep(void)
+{ // testTimeStep
+  ElasticityImplicitLgDeform integrator;
+
+  const double dt1 = 2.0;
+  integrator.timeStep(dt1);
+  CPPUNIT_ASSERT_EQUAL(dt1, integrator._dt);
+  integrator.timeStep(dt1);
+  CPPUNIT_ASSERT_EQUAL(dt1, integrator._dtm1);
+  CPPUNIT_ASSERT_EQUAL(dt1, integrator._dt);
+} // testTimeStep
+
+// ----------------------------------------------------------------------
+// Test material().
+void
+pylith::feassemble::TestElasticityImplicitLgDeform::testMaterial(void)
+{ // testMaterial
+  ElasticityImplicitLgDeform integrator;
+
+  materials::ElasticIsotropic3D material;
+  const int id = 3;
+  const std::string label("my material");
+  material.id(id);
+  material.label(label.c_str());
+  integrator.material(&material);
+  CPPUNIT_ASSERT_EQUAL(id, integrator._material->id());
+  CPPUNIT_ASSERT_EQUAL(label, std::string(integrator._material->label()));
+  CPPUNIT_ASSERT_EQUAL(integrator._dt, integrator._material->timeStep());
+  const double dt = 2.0;
+  integrator.timeStep(dt);
+  CPPUNIT_ASSERT_EQUAL(dt, integrator._material->timeStep());
+} // testMaterial
+
+// ----------------------------------------------------------------------
+// Test needNewJacobian().
+void
+pylith::feassemble::TestElasticityImplicitLgDeform::testNeedNewJacobian(void)
+{ // testNeedNewJacobian
+  ElasticityImplicitLgDeform integrator;
+
+  materials::ElasticIsotropic3D material;
+  integrator.material(&material);
+  CPPUNIT_ASSERT_EQUAL(true, integrator.needNewJacobian());
+  integrator._needNewJacobian = false;
+  CPPUNIT_ASSERT_EQUAL(false, integrator.needNewJacobian());  
+} // testNeedNewJacobian
+
+// ----------------------------------------------------------------------
+// Test useSolnIncr().
+void
+pylith::feassemble::TestElasticityImplicitLgDeform::testUseSolnIncr(void)
+{ // testUseSolnIncr
+  ElasticityImplicitLgDeform integrator;
+
+  materials::ElasticIsotropic3D material;
+  integrator.material(&material);
+  CPPUNIT_ASSERT_EQUAL(false, integrator._useSolnIncr);
+  integrator.useSolnIncr(true);
+  CPPUNIT_ASSERT_EQUAL(true, integrator._useSolnIncr);  
+} // testUseSolnIncr
+
+// ----------------------------------------------------------------------
+// Test initialize().
+void 
+pylith::feassemble::TestElasticityImplicitLgDeform::testInitialize(void)
+{ // testInitialize
+  CPPUNIT_ASSERT(0 != _data);
+
+  topology::Mesh mesh;
+  ElasticityImplicitLgDeform integrator;
+  topology::SolutionFields fields(mesh);
+  _initialize(&mesh, &integrator, &fields);
+
+} // testInitialize
+
+// ----------------------------------------------------------------------
+// Test integrateResidual().
+void
+pylith::feassemble::TestElasticityImplicitLgDeform::testIntegrateResidual(void)
+{ // testIntegrateResidual
+  CPPUNIT_ASSERT(0 != _data);
+
+  topology::Mesh mesh;
+  ElasticityImplicitLgDeform integrator;
+  topology::SolutionFields fields(mesh);
+  _initialize(&mesh, &integrator, &fields);
+
+  topology::Field<topology::Mesh>& residual = fields.get("residual");
+  const double t = 1.0;
+  integrator.integrateResidual(residual, t, &fields);
+
+  const double* valsE = _data->valsResidual;
+  const int sizeE = _data->spaceDim * _data->numVertices;
+
+  const ALE::Obj<RealSection>& residualSection = residual.section();
+  CPPUNIT_ASSERT(!residualSection.isNull());
+  const double* vals = residualSection->restrictSpace();
+  const int size = residualSection->sizeWithBC();
+  CPPUNIT_ASSERT_EQUAL(sizeE, size);
+
+  const double tolerance = 1.0e-06;
+  for (int i=0; i < size; ++i)
+    if (fabs(valsE[i]) > 1.0)
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vals[i]/valsE[i], tolerance);
+    else
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(valsE[i], vals[i], tolerance);
+} // testIntegrateResidual
+
+// ----------------------------------------------------------------------
+// Test integrateJacobian().
+void
+pylith::feassemble::TestElasticityImplicitLgDeform::testIntegrateJacobian(void)
+{ // testIntegrateJacobian
+  CPPUNIT_ASSERT(0 != _data);
+
+  topology::Mesh mesh;
+  ElasticityImplicitLgDeform integrator;
+  topology::SolutionFields fields(mesh);
+  _initialize(&mesh, &integrator, &fields);
+  integrator._needNewJacobian = true;
+
+  topology::Jacobian jacobian(fields);
+
+  const double t = 1.0;
+  //mesh->getSieve()->setDebug(10);
+  integrator.integrateJacobian(&jacobian, t, &fields);
+  CPPUNIT_ASSERT_EQUAL(false, integrator.needNewJacobian());
+  //mesh->getSieve()->setDebug(0);
+  jacobian.assemble("final_assembly");
+
+  const double* valsE = _data->valsJacobian;
+  const int nrowsE = _data->numVertices * _data->spaceDim;
+  const int ncolsE = _data->numVertices * _data->spaceDim;
+
+  const PetscMat jacobianMat = jacobian.matrix();
+
+  int nrows = 0;
+  int ncols = 0;
+  MatGetSize(jacobianMat, &nrows, &ncols);
+  CPPUNIT_ASSERT_EQUAL(nrowsE, nrows);
+  CPPUNIT_ASSERT_EQUAL(ncolsE, ncols);
+
+  PetscMat jDense;
+  PetscMat jSparseAIJ;
+  MatConvert(jacobianMat, MATSEQAIJ, MAT_INITIAL_MATRIX, &jSparseAIJ);
+  MatConvert(jSparseAIJ, MATSEQDENSE, MAT_INITIAL_MATRIX, &jDense);
+
+  double_array vals(nrows*ncols);
+  int_array rows(nrows);
+  int_array cols(ncols);
+  for (int iRow=0; iRow < nrows; ++iRow)
+    rows[iRow] = iRow;
+  for (int iCol=0; iCol < ncols; ++iCol)
+    cols[iCol] = iCol;
+  MatGetValues(jDense, nrows, &rows[0], ncols, &cols[0], &vals[0]);
+  const double tolerance = 1.0e-06;
+  for (int iRow=0; iRow < nrows; ++iRow)
+    for (int iCol=0; iCol < ncols; ++iCol) {
+      const int index = ncols*iRow+iCol;
+      if (fabs(valsE[index]) > 1.0)
+	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vals[index]/valsE[index], tolerance);
+      else
+	CPPUNIT_ASSERT_DOUBLES_EQUAL(valsE[index], vals[index], tolerance);
+    } // for
+  MatDestroy(jDense);
+  MatDestroy(jSparseAIJ);
+} // testIntegrateJacobian
+
+// ----------------------------------------------------------------------
+// Test updateStateVars().
+void 
+pylith::feassemble::TestElasticityImplicitLgDeform::testUpdateStateVars(void)
+{ // testUpdateStateVars
+  CPPUNIT_ASSERT(0 != _data);
+
+  topology::Mesh mesh;
+  ElasticityImplicitLgDeform integrator;
+  topology::SolutionFields fields(mesh);
+  _initialize(&mesh, &integrator, &fields);
+
+  const double t = 1.0;
+  integrator.updateStateVars(t, &fields);
+} // testUpdateStateVars
+
+// ----------------------------------------------------------------------
+// Test StableTimeStep().
+void
+pylith::feassemble::TestElasticityImplicitLgDeform::testStableTimeStep(void)
+{ // testStableTimeStep
+
+  topology::Mesh mesh;
+  ElasticityImplicitLgDeform integrator;
+  topology::SolutionFields fields(mesh);
+  _initialize(&mesh, &integrator, &fields);
+
+  const double stableTimeStep = integrator.stableTimeStep(mesh);
+  CPPUNIT_ASSERT_EQUAL(pylith::PYLITH_MAXDOUBLE, stableTimeStep);
+} // testStableTimeStep
+
+// ----------------------------------------------------------------------
+// Initialize elasticity integrator.
+void
+pylith::feassemble::TestElasticityImplicitLgDeform::_initialize(
+					 topology::Mesh* mesh,
+					 ElasticityImplicitLgDeform* const integrator,
+					 topology::SolutionFields* fields)
+{ // _initialize
+  CPPUNIT_ASSERT(0 != mesh);
+  CPPUNIT_ASSERT(0 != integrator);
+  CPPUNIT_ASSERT(0 != _data);
+  CPPUNIT_ASSERT(0 != _quadrature);
+  CPPUNIT_ASSERT(0 != _material);
+
+  // Setup mesh
+  spatialdata::geocoords::CSCart cs;
+  cs.setSpaceDim(_data->spaceDim);
+  cs.initialize();
+  mesh->coordsys(&cs);
+  mesh->createSieveMesh(_data->cellDim);
+  const ALE::Obj<SieveMesh>& sieveMesh = mesh->sieveMesh();
+  CPPUNIT_ASSERT(!sieveMesh.isNull());
+  ALE::Obj<SieveMesh::sieve_type> sieve = 
+    new SieveMesh::sieve_type(mesh->comm());
+  CPPUNIT_ASSERT(!sieve.isNull());
+
+  // Cells and vertices
+  const bool interpolate = false;
+  ALE::Obj<ALE::Mesh::sieve_type> s = 
+    new ALE::Mesh::sieve_type(sieve->comm(), sieve->debug());
+  
+  ALE::SieveBuilder<ALE::Mesh>::buildTopology(s, 
+					      _data->cellDim, _data->numCells,
+                                              const_cast<int*>(_data->cells), 
+					      _data->numVertices,
+                                              interpolate, _data->numBasis);
+  std::map<ALE::Mesh::point_type,ALE::Mesh::point_type> renumbering;
+  ALE::ISieveConverter::convertSieve(*s, *sieve, renumbering);
+  sieveMesh->setSieve(sieve);
+  sieveMesh->stratify();
+  ALE::SieveBuilder<SieveMesh>::buildCoordinates(sieveMesh, _data->spaceDim, 
+						 _data->vertices);
+
+  // Material ids
+  const ALE::Obj<SieveMesh::label_sequence>& cells = 
+    sieveMesh->heightStratum(0);
+  CPPUNIT_ASSERT(!cells.isNull());
+  const ALE::Obj<SieveMesh::label_type>& labelMaterials = 
+    sieveMesh->createLabel("material-id");
+  CPPUNIT_ASSERT(!labelMaterials.isNull());
+  int i = 0;
+  for(SieveMesh::label_sequence::iterator e_iter=cells->begin(); 
+      e_iter != cells->end();
+      ++e_iter)
+    sieveMesh->setValue(labelMaterials, *e_iter, _data->matId);
+
+  // Setup quadrature
+  _quadrature->initialize(_data->basis, _data->numQuadPts, _data->numBasis,
+			  _data->basisDerivRef, _data->numQuadPts,
+			  _data->numBasis, _data->cellDim,
+			  _data->quadPts, _data->numQuadPts, _data->cellDim,
+			  _data->quadWts, _data->numQuadPts,
+			  _data->spaceDim);
+
+  // Setup material
+  spatialdata::spatialdb::SimpleIOAscii iohandler;
+  iohandler.filename(_data->matDBFilename);
+  spatialdata::spatialdb::SimpleDB dbProperties;
+  dbProperties.ioHandler(&iohandler);
+  
+  spatialdata::units::Nondimensional normalizer;
+
+  _material->id(_data->matId);
+  _material->label(_data->matLabel);
+  _material->dbProperties(&dbProperties);
+  _material->normalizer(normalizer);
+
+  integrator->quadrature(_quadrature);
+  integrator->gravityField(_gravityField);
+  integrator->timeStep(_data->dt);
+  integrator->material(_material);
+  integrator->initialize(*mesh);
+
+  // Setup fields
+  CPPUNIT_ASSERT(0 != fields);
+  fields->add("residual", "residual");
+  fields->add("disp(t)", "displacement");
+  fields->add("dispIncr(t->t+dt)", "displacement_increment");
+  fields->solutionName("dispIncr(t->t+dt)");
+  
+  topology::Field<topology::Mesh>& residual = fields->get("residual");
+  residual.newSection(topology::FieldBase::VERTICES_FIELD, _data->spaceDim);
+  residual.allocate();
+  residual.zero();
+  fields->copyLayout("residual");
+
+  const int fieldSize = _data->spaceDim * _data->numVertices;
+  topology::Field<topology::Mesh>& dispT = fields->get("disp(t)");
+  const ALE::Obj<RealSection>& dispTSection = dispT.section();
+  CPPUNIT_ASSERT(!dispTSection.isNull());
+  topology::Field<topology::Mesh>& dispTIncr = fields->get("dispIncr(t->t+dt)");
+  const ALE::Obj<RealSection>& dispTIncrSection = dispTIncr.section();
+  CPPUNIT_ASSERT(!dispTIncrSection.isNull());
+  const int offset = _data->numCells;
+  for (int iVertex=0; iVertex < _data->numVertices; ++iVertex) {
+    dispTSection->updatePoint(iVertex+offset, 
+			      &_data->fieldT[iVertex*_data->spaceDim]);
+    dispTIncrSection->updatePoint(iVertex+offset, 
+				  &_data->fieldTIncr[iVertex*_data->spaceDim]);
+  } // for
+} // _initialize
+
+
+// End of file 

Added: short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityImplicitLgDeform.hh
===================================================================
--- short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityImplicitLgDeform.hh	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityImplicitLgDeform.hh	2009-11-12 07:17:42 UTC (rev 15961)
@@ -0,0 +1,124 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/feassemble/TestElasticityImplicitLgDeform.hh
+ *
+ * @brief C++ TestElasticityImplicitLgDeform object
+ *
+ * C++ unit testing for ElasticityImplicitLgDeform.
+ */
+
+#if !defined(pylith_feassemble_testelasticityimplicitlgdeform_hh)
+#define pylith_feassemble_testelasticityimplicitlgdeform_hh
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include "pylith/feassemble/feassemblefwd.hh" // forward declarations
+#include "pylith/topology/topologyfwd.hh" // USES Mesh, SolutionFields
+#include "pylith/materials/materialsfwd.hh" // USES ElasticMaterial
+
+#include "spatialdata/spatialdb/spatialdbfwd.hh" // USES GravityField
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace feassemble {
+    class TestElasticityImplicitLgDeform;
+    class IntegratorData;
+  } // feassemble
+} // pylith
+
+/// C++ unit testing for ElasticityImplicitLgDeform
+class pylith::feassemble::TestElasticityImplicitLgDeform : public CppUnit::TestFixture
+{ // class TestElasticityImplicitLgDeform
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestElasticityImplicitLgDeform );
+
+  CPPUNIT_TEST( testConstructor );
+  CPPUNIT_TEST( testTimeStep );
+  CPPUNIT_TEST( testMaterial );
+  CPPUNIT_TEST( testNeedNewJacobian );
+  CPPUNIT_TEST( testUseSolnIncr );
+
+  // Testing of initialize(), integrateResidual(),
+  // integrateJacobian(), and updateStateVars() handled by derived
+  // classes.
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+  /// Tear down testing data.
+  void tearDown(void);
+
+  /// Test constructor.
+  void testConstructor(void);
+
+  /// Test timeStep().
+  void testTimeStep(void);
+
+  /// Test StableTimeStep().
+  void testStableTimeStep(void);
+
+  /// Test material().
+  void testMaterial(void);
+
+  /// Test needNewJacobian().
+  void testNeedNewJacobian(void);
+
+  /// Test useSolnIncr().
+  void testUseSolnIncr(void);
+
+  /// Test initialize().
+  void testInitialize(void);
+
+  /// Test integrateResidual().
+  void testIntegrateResidual(void);
+
+  /// Test integrateJacobian().
+  void testIntegrateJacobian(void);
+
+  /// Test updateStateVars().
+  void testUpdateStateVars(void);
+
+  // PROTECTED MEMBERS //////////////////////////////////////////////////
+protected :
+
+  IntegratorData* _data; ///< Data for testing.
+  materials::ElasticMaterial* _material; ///< Elastic material.
+  Quadrature<topology::Mesh>* _quadrature; ///< Quadrature information.
+  spatialdata::spatialdb::GravityField* _gravityField; ///< Gravity field.
+
+  // PRIVATE METHODS ////////////////////////////////////////////////////
+private :
+
+  /** Initialize elasticity integrator.
+   *
+   * @param mesh Finite-element mesh to initialize.
+   * @param integrator ElasticityIntegrator to initialize.
+   * @param fields Solution fields.
+   */
+  void _initialize(topology::Mesh* mesh,
+		   ElasticityImplicitLgDeform* const integrator,
+		   topology::SolutionFields* const fields);
+
+}; // class TestElasticityImplicitLgDeform
+
+#endif // pylith_feassemble_testelasticityimplicitlgdeform_hh
+
+
+// End of file 

Added: short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityImplicitLgDeform1DLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityImplicitLgDeform1DLinear.cc	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityImplicitLgDeform1DLinear.cc	2009-11-12 07:17:42 UTC (rev 15961)
@@ -0,0 +1,47 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestElasticityImplicitLgDeform1DLinear.hh" // Implementation of class methods
+
+#include "data/ElasticityImplicitLgDeformData1DLinear.hh"
+
+#include "pylith/topology/Mesh.hh" // USES Quadrature<Mesh>
+#include "pylith/feassemble/Quadrature.hh" // USES Quadrature
+#include "pylith/feassemble/GeometryLine1D.hh" // USES GeometryLine1D
+#include "pylith/materials/ElasticStrain1D.hh" // USES ElasticStrain1D
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::feassemble::TestElasticityImplicitLgDeform1DLinear );
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::feassemble::TestElasticityImplicitLgDeform1DLinear::setUp(void)
+{ // setUp
+  TestElasticityImplicitLgDeform::setUp();
+
+  _data = new ElasticityImplicitLgDeformData1DLinear();
+  _gravityField = 0;
+  GeometryLine1D geometry;
+  CPPUNIT_ASSERT(0 != _quadrature);
+  _quadrature->refGeometry(&geometry);
+  _material = new materials::ElasticStrain1D;
+
+  CPPUNIT_ASSERT(0 != _data);
+  CPPUNIT_ASSERT_EQUAL(std::string("ElasticStrain1D"),
+		       std::string(_data->matType));
+} // setUp
+
+
+// End of file 

Added: short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityImplicitLgDeform1DLinear.hh
===================================================================
--- short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityImplicitLgDeform1DLinear.hh	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityImplicitLgDeform1DLinear.hh	2009-11-12 07:17:42 UTC (rev 15961)
@@ -0,0 +1,60 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/feassemble/TestElasticityImplicitLgDeform1DLinear.hh
+ *
+ * @brief C++ TestElasticityImplicitLgDeform object
+ *
+ * C++ unit testing for ElasticityImplicitLgDeform with 1-D linear cells.
+ */
+
+#if !defined(pylith_feassemble_testelasticityimplicit1dlinear_hh)
+#define pylith_feassemble_testelasticityimplicit1dlinear_hh
+
+#include "TestElasticityImplicitLgDeform.hh" // ISA TestElasticityImplicitLgDeform
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace feassemble {
+    class TestElasticityImplicitLgDeform1DLinear;
+  } // feassemble
+} // pylith
+
+/// C++ unit testing for ElasticityImplicitLgDeform
+class pylith::feassemble::TestElasticityImplicitLgDeform1DLinear :
+  public TestElasticityImplicitLgDeform
+{ // class TestElasticityImplicitLgDeform1DLinear
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestElasticityImplicitLgDeform1DLinear );
+
+  CPPUNIT_TEST( testInitialize );
+  CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testUpdateStateVars );
+  CPPUNIT_TEST( testStableTimeStep );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+}; // class TestElasticityImplicitLgDeform1DLinear
+
+#endif // pylith_feassemble_testelasticityimplicit1dlinear_hh
+
+
+// End of file 

Added: short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DLinear.cc	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DLinear.cc	2009-11-12 07:17:42 UTC (rev 15961)
@@ -0,0 +1,135 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#include "ElasticityImplicitLgDeformData1DLinear.hh"
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_spaceDim = 1;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_cellDim = 1;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_numVertices = 2;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_numCells = 1;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_numBasis = 2;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_numQuadPts = 1;
+
+const char* pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_matType = "ElasticStrain1D";
+
+const char* pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_matDBFilename = "data/elasticstrain1d.spatialdb";
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_matId = 0;
+
+const char* pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_matLabel = "elastic strain 1-D";
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_dt =   1.00000000e-02;
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_gravityVec[] = {
+ -1.00000000e+08,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_vertices[] = {
+ -2.50000000e-01,
+  2.00000000e+00,
+};
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_cells[] = {
+0,1,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_verticesRef[] = {
+ -1.00000000e+00,
+  1.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_quadPts[] = {
+  0.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_quadWts[] = {
+  2.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_basis[] = {
+  5.00000000e-01,
+  5.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_basisDerivRef[] = {
+ -5.00000000e-01,
+  5.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_fieldTIncr[] = {
+  1.20000000e+00,
+  1.70000000e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_fieldT[] = {
+  1.10000000e+00,
+  1.50000000e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_fieldTmdt[] = {
+  1.00000000e+00,
+  1.30000000e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_valsResidual[] = {
+  6.19200000e+10,
+ -6.19200000e+10,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_valsJacobian[] = {
+  6.88000000e+10,
+ -6.88000000e+10,
+ -6.88000000e+10,
+  6.88000000e+10,
+};
+
+pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::ElasticityImplicitLgDeformData1DLinear(void)
+{ // constructor
+  spaceDim = _spaceDim;
+  cellDim = _cellDim;
+  numVertices = _numVertices;
+  numCells = _numCells;
+  numBasis = _numBasis;
+  numQuadPts = _numQuadPts;
+  matType = const_cast<char*>(_matType);
+  matDBFilename = const_cast<char*>(_matDBFilename);
+  matId = _matId;
+  matLabel = const_cast<char*>(_matLabel);
+  dt = _dt;
+  gravityVec = const_cast<double*>(_gravityVec);
+  vertices = const_cast<double*>(_vertices);
+  cells = const_cast<int*>(_cells);
+  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<double*>(_quadPts);
+  quadWts = const_cast<double*>(_quadWts);
+  basis = const_cast<double*>(_basis);
+  basisDerivRef = const_cast<double*>(_basisDerivRef);
+  fieldTIncr = const_cast<double*>(_fieldTIncr);
+  fieldT = const_cast<double*>(_fieldT);
+  fieldTmdt = const_cast<double*>(_fieldTmdt);
+  valsResidual = const_cast<double*>(_valsResidual);
+  valsJacobian = const_cast<double*>(_valsJacobian);
+} // constructor
+
+pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::~ElasticityImplicitLgDeformData1DLinear(void)
+{}
+
+
+// End of file

Added: short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DLinear.hh
===================================================================
--- short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DLinear.hh	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DLinear.hh	2009-11-12 07:17:42 UTC (rev 15961)
@@ -0,0 +1,92 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#if !defined(pylith_feassemble_elasticityimplicitlgdeformdata1dlinear_hh)
+#define pylith_feassemble_elasticityimplicitlgdeformdata1dlinear_hh
+
+#include "IntegratorData.hh"
+
+namespace pylith {
+  namespace feassemble {
+     class ElasticityImplicitLgDeformData1DLinear;
+  } // pylith
+} // feassemble
+
+class pylith::feassemble::ElasticityImplicitLgDeformData1DLinear : public IntegratorData
+{
+
+public: 
+
+  /// Constructor
+  ElasticityImplicitLgDeformData1DLinear(void);
+
+  /// Destructor
+  ~ElasticityImplicitLgDeformData1DLinear(void);
+
+private:
+
+  static const int _spaceDim;
+
+  static const int _cellDim;
+
+  static const int _numVertices;
+
+  static const int _numCells;
+
+  static const int _numBasis;
+
+  static const int _numQuadPts;
+
+  static const char* _matType;
+
+  static const char* _matDBFilename;
+
+  static const int _matId;
+
+  static const char* _matLabel;
+
+  static const double _dt;
+
+  static const double _gravityVec[];
+
+  static const double _vertices[];
+
+  static const int _cells[];
+
+  static const double _verticesRef[];
+
+  static const double _quadPts[];
+
+  static const double _quadWts[];
+
+  static const double _basis[];
+
+  static const double _basisDerivRef[];
+
+  static const double _fieldTIncr[];
+
+  static const double _fieldT[];
+
+  static const double _fieldTmdt[];
+
+  static const double _valsResidual[];
+
+  static const double _valsJacobian[];
+
+};
+
+#endif // pylith_feassemble_elasticityimplicitlgdeformdata1dlinear_hh
+
+// End of file



More information about the CIG-COMMITS mailing list