[cig-commits] r14168 - in short/3D/PyLith/branches/pylith-swig: . libsrc/feassemble libsrc/materials

brad at geodynamics.org brad at geodynamics.org
Fri Feb 27 07:51:57 PST 2009


Author: brad
Date: 2009-02-27 07:51:57 -0800 (Fri, 27 Feb 2009)
New Revision: 14168

Modified:
   short/3D/PyLith/branches/pylith-swig/TODO
   short/3D/PyLith/branches/pylith-swig/libsrc/feassemble/IntegratorElasticity.cc
   short/3D/PyLith/branches/pylith-swig/libsrc/feassemble/IntegratorElasticity.hh
   short/3D/PyLith/branches/pylith-swig/libsrc/materials/Material.hh
   short/3D/PyLith/branches/pylith-swig/libsrc/materials/Material.icc
Log:
Started working on elasticity integrators.

Modified: short/3D/PyLith/branches/pylith-swig/TODO
===================================================================
--- short/3D/PyLith/branches/pylith-swig/TODO	2009-02-27 13:21:40 UTC (rev 14167)
+++ short/3D/PyLith/branches/pylith-swig/TODO	2009-02-27 15:51:57 UTC (rev 14168)
@@ -3,6 +3,9 @@
 ======================================================================
 
 0. SWIG conversion
+
+  TestMaterial::testTensorSize()
+
   TestMesh.test_view()
   TestMesh.test_checkMaterialIds()
   
@@ -12,9 +15,6 @@
   DirichletPoints (Python) - rate == None -> dbRate == 0
   DirichletBoundary (Python) - rate == None -> dbRate == 0
 
-  materials::Metadata
-    Need array of names of properties and state variables?
-
 1. Reduce memory use (new labels) [Matt]
 
 2. Nondimensionalize [Brad]
@@ -28,25 +28,26 @@
       FieldOps::copyValues (obsolete?)
       MeshIO::normalizer()
       Material::normalizer()
-      Material::_nondimProperties()
-      Material::_dimProperties()
       Constraint::normalizer()
       Integrator::normalizer()
       DataWriter::normalizer()
 
-3. Clean-up interface for materials [Brad]
+3. Power-law nonlinear rheology [Charles]
 
-4. Power-law nonlinear rheology [Charles]
+4. Savage-Presscott benchmark [Charles]
 
-5. Savage-Presscott benchmark [Charles]
+5. Interface with PETSc nonlinear solvers [Brad and Matt]
 
-6. Interface with PETSc nonlinear solvers [Brad and Matt]
+6. Modularize output? [Matt]
 
-7. Modularize output? [Matt]
+7. Update manual for version 1.4
 
+  * Reduce memory use with ordering elements by material
+  * Nondimensionalization
+
 -- Release (v1.4) --
 
-8. Fault friction
+7. Fault friction
 
 Other
 

Modified: short/3D/PyLith/branches/pylith-swig/libsrc/feassemble/IntegratorElasticity.cc
===================================================================
--- short/3D/PyLith/branches/pylith-swig/libsrc/feassemble/IntegratorElasticity.cc	2009-02-27 13:21:40 UTC (rev 14167)
+++ short/3D/PyLith/branches/pylith-swig/libsrc/feassemble/IntegratorElasticity.cc	2009-02-27 15:51:57 UTC (rev 14168)
@@ -18,7 +18,8 @@
 #include "CellGeometry.hh" // USES CellGeometry
 
 #include "pylith/materials/ElasticMaterial.hh" // USES ElasticMaterial
-#include "pylith/topology/FieldsManager.hh" // USES FieldsManager
+#include "pylith/topology/Field.hh" // USES Field
+#include "pylith/topology/SolutionFields.hh" // USES SolutionFields
 
 #include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
 
@@ -30,9 +31,14 @@
 #include <stdexcept> // USES std::runtime_error
 
 // ----------------------------------------------------------------------
+typedef pylith::topology::Mesh::SieveMesh SieveMesh;
+typedef pylith::topology::Mesh::RealSection RealSection;
+
+// ----------------------------------------------------------------------
 // Constructor
 pylith::feassemble::IntegratorElasticity::IntegratorElasticity(void) :
-  _material(0)
+  _material(0),
+  _bufferFieldTensor(0)
 { // constructor
 } // constructor
 
@@ -41,6 +47,7 @@
 pylith::feassemble::IntegratorElasticity::~IntegratorElasticity(void)
 { // destructor
   _material = 0; // Don't manage memory for material
+  delete _bufferFieldTensor; _bufferFieldTensor = 0;
 } // destructor
   
 // ----------------------------------------------------------------------
@@ -78,82 +85,79 @@
 // ----------------------------------------------------------------------
 // Update state variables as needed.
 void
-pylith::feassemble::IntegratorElasticity::updateState(
-					    const double t,
-					    topology::Solution* const fields)
+pylith::feassemble::IntegratorElasticity::updateStateVars(
+				      const double t,
+				      topology::SolutionFields* const fields)
 { // updateState
   assert(0 != _quadrature);
   assert(0 != _material);
   assert(0 != fields);
 
-  // No need to update state if using elastic behavior
-  if (!_material->usesUpdateProperties())
+  // No need to update state vars if material doesn't have any.
+  if (!_material->hasStateVars())
     return;
 
-  // Set variables dependent on dimension of cell
+  // Get cell information that doesn't depend on particular cell
   const int cellDim = _quadrature->cellDim();
-  int tensorSize = 0;
+  const int numQuadPts = _quadrature->numQuadPts();
+  const int numBasis = _quadrature->numBasis();
+  const int spaceDim = _quadrature->spaceDim();
+  const int tensorSize = _material->tensorSize();
   totalStrain_fn_type calcTotalStrainFn;
   if (1 == cellDim) {
-    tensorSize = 1;
     calcTotalStrainFn = 
       &pylith::feassemble::IntegratorElasticity::_calcTotalStrain1D;
   } else if (2 == cellDim) {
-    tensorSize = 3;
     calcTotalStrainFn = 
       &pylith::feassemble::IntegratorElasticity::_calcTotalStrain2D;
   } else if (3 == cellDim) {
-    tensorSize = 6;
     calcTotalStrainFn = 
       &pylith::feassemble::IntegratorElasticity::_calcTotalStrain3D;
   } else
     assert(0);
 
+  // Allocate arrays for cell data.
+  double_array dispCell(numBasis*spaceDim);
+  double_array strainCell(numQuadPts*tensorSize);
+  strainCell = 0.0;
+
   // Get cell information
+  const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
+  assert(!sieveMesh.isNull());
   const int materialId = _material->id();
   const ALE::Obj<SieveMesh::label_sequence>& cells = 
-    mesh->getLabelStratum("material-id", materialId);
+    sieveMesh->getLabelStratum("material-id", materialId);
   assert(!cells.isNull());
-  const Mesh::label_sequence::iterator cellsEnd = cells->end();
+  const SieveMesh::label_sequence::iterator cellsEnd = cells->end();
 
-  // Get sections
-  const ALE::Obj<real_section_type>& coordinates = 
-    mesh->getRealSection("coordinates");
-  assert(!coordinates.isNull());
+  // Get fields
+  const topology::Field<topology::Mesh>* solution = fields->solution();
+  assert(0 != solution);
+  const ALE::Obj<RealSection>& disp = solution->section();
+  assert(!disp.isNull());
+  topology::Mesh::RestrictVisitor dispVisitor(*disp, 
+					      dispCell.size(), &dispCell[0]);
 
-  // Get cell geometry information that doesn't depend on cell
-  const int numQuadPts = _quadrature->numQuadPts();
-  const int numBasis = _quadrature->numBasis();
-  const int spaceDim = _quadrature->spaceDim();
-
-  const int cellVecSize = numBasis*spaceDim;
-  double_array dispCell(cellVecSize);
-
-  // Allocate vector for total strain
-  double_array totalStrain(numQuadPts*tensorSize);
-  totalStrain = 0.0;
-
-  const ALE::Obj<real_section_type>& disp = fields->getSolution();
-  
   // Loop over cells
-  int c_index = 0;
   for (Mesh::label_sequence::iterator c_iter=cells->begin();
        c_iter != cellsEnd;
-       ++c_iter, ++c_index) {
-    // Compute geometry information for current cell
+       ++c_iter) {
+    // Retrieve geometry information for current cell
     _quadrature->retrieveGeometry(*c_iter);
 
     // Restrict input fields to cell
-    mesh->restrictClosure(disp, *c_iter, &dispCell[0], cellVecSize);
+    dispVisitor.clear();
+    sieveMesh->restrictClosure(*c_iter, dispVisitor);
 
     // Get cell geometry information that depends on cell
     const double_array& basisDeriv = _quadrature->basisDeriv();
   
     // Compute strains
-    calcTotalStrainFn(&totalStrain, basisDeriv, dispCell, numBasis, numQuadPts);
+    calcTotalStrainFn(&strainCell, basisDeriv, dispCell, 
+		      numBasis, numQuadPts);
 
     // Update material state
-    _material->updateProperties(totalStrain, *c_iter);
+    _material->updateStateVars(strainCell, *c_iter);
   } // for
 } // updateState
 
@@ -166,7 +170,7 @@
   assert(0 != _quadrature);
   assert(0 != _material);
 
-  const int dimension = mesh->getDimension();
+  const int dimension = mesh.dimension();
 
   // check compatibility of mesh and material
   if (_material->dimension() != dimension) {
@@ -190,14 +194,17 @@
     throw std::runtime_error(msg.str());
   } // if
   const int numCorners = _quadrature->refGeometry().numCorners();
-  const ALE::Obj<Mesh::label_sequence>& cells = 
-    mesh->getLabelStratum("material-id", _material->id());
+
+  const ALE::ObjSieveMesh>& sieveMesh = mesh.sieveMesh();
+  assert(!sievemesh.isNull());
+  const ALE::Obj<SieveMesh::label_sequence>& cells = 
+    sieveMesh->getLabelStratum("material-id", _material->id());
   assert(!cells.isNull());
-  const Mesh::label_sequence::iterator cellsEnd = cells->end();
-  for (Mesh::label_sequence::iterator c_iter=cells->begin();
+  const SieveMesh::label_sequence::iterator cellsEnd = cells->end();
+  for (SieveMesh::label_sequence::iterator c_iter=cells->begin();
        c_iter != cellsEnd;
        ++c_iter) {
-    const int cellNumCorners = mesh->getNumCellCorners(*c_iter);
+    const int cellNumCorners = sieveMesh->getNumCellCorners(*c_iter);
     if (numCorners != cellNumCorners) {
       std::ostringstream msg;
       msg << "Quadrature is incompatible with cell in material '"
@@ -212,160 +219,157 @@
 
 // ----------------------------------------------------------------------
 // Get cell field associated with integrator.
-const ALE::Obj<pylith::real_section_type>&
+const pylith::topology::Field<pylith::topology::Mesh>&
 pylith::feassemble::IntegratorElasticity::cellField(
-				 VectorFieldEnum* fieldType,
-				 const char* name,
-				 const ALE::Obj<Mesh>& mesh,
-				 topology::FieldsManager* const fields)
+					   const char* name,
+					   topology::SolutionFields* fields)
 { // cellField
   assert(0 != _material);
 
   // We assume the material stores the total-strain field if
-  // usesUpdateProperties() is TRUE.
+  // hasStateVars() is TRUE.
 
   const int numQuadPts = _quadrature->numQuadPts();
 
-  if (!_material->usesUpdateProperties() &&
+  if (!_material->hasStateVars() &&
       (0 == strcasecmp(name, "total_strain") ||
-       0 == strcasecmp(name, "stress")) ) {
+       0 == strcasecmp(name, "stress") )) {
     assert(0 != fields);
-    _calcStrainStressField(&_bufferCellOther, name, mesh, fields);
-    return _bufferCellOther;
-
+    _allocateTensorField(fields->mesh());
+    _calcStrainStressField(&_bufferFieldTensor, name, fields);
+    return _bufferFieldTensor;
   } else if (0 == strcasecmp(name, "stress")) {
-    _material->propertyField(&_bufferCellOther,
-			     "total_strain", mesh, numQuadPts);
-    _calcStressFromStrain(&_bufferCellOther, mesh);
-    return _bufferCellOther;
+    assert(0 != fields);
+    _allocateTensorField(fields->mesh());
+    _calcStressFromStrain(&_bufferFieldTensor, name);
+    return _bufferFieldTensor;
+  } else
+    return _material->getField(name);
+  
+  // Return tensor section to satisfy member function definition. Code
+  // should never get here.
+  return _bufferTensorField;
+} // cellField
 
-  } else {
-    const VectorFieldEnum fieldType = _material->propertyFieldType(name);
-    switch (fieldType)
-      { // switch
-      case SCALAR_FIELD :
-	_material->propertyField(&_bufferCellScalar, name, mesh, numQuadPts);
-	return _bufferCellScalar;
-	break;
-      case VECTOR_FIELD :
-	_material->propertyField(&_bufferCellVector, name, mesh, numQuadPts);
-	return _bufferCellVector;
-	break;
-      case TENSOR_FIELD :
-	_material->propertyField(&_bufferCellTensor, name, mesh, numQuadPts);
-	return _bufferCellTensor;
-	break;
-      case OTHER_FIELD :
-	_material->propertyField(&_bufferCellOther, name, mesh, numQuadPts);
-	return _bufferCellOther;
-	break;
-      default:
-	assert(0);
-      } // switch
-  } // else
+// ----------------------------------------------------------------------
+// Allocate buffer for tensor field at quadrature points.
+void
+pylith::feassemble::IntegratorElasticity::_allocateTensorField(
+						 const topology::Mesh& mesh)
+{ // _allocateTensorField
+  assert(0 != _quadrature);
+  assert(0 != _material);
 
-  // Return scalar section to satisfy member function definition.
-  return _bufferCellScalar;
-} // cellField
+  const ALE::Obj<SieveMesh>& sieveMesh = mesh.sieveMesh();
+  assert(!sieveMesh.isNull());
+  const int materialId = _material->id();
+  const ALE::Obj<SieveMesh::label_sequence>& cells = 
+    sieveMesh->getLabelStratum("material-id", materialId);
+  assert(!cells.isNull());
 
+  const int numQuadPts = _quadrature->numQuadPts();
+  const int numBasis = _quadrature->numBasis();
+  const int spaceDim = _quadrature->spaceDim();
+  const int tensorSize = _material->tensorSize();
+  
+  if (0 == _bufferTensorField) {
+    _bufferTensorField = new topology::Field<topology::Mesh>(mesh);
+    assert(0 != _bufferTensorField);
+    _bufferTensorField.vectorFieldType(topology::FieldBase::MULTI_TENSOR);
+    _bufferTensorField.newSection(cells, numQuadPts*tensorSize);
+    _bufferTensorField.allocate();
+  } // if
+} // _allocateTensorField
+
 // ----------------------------------------------------------------------
 void
 pylith::feassemble::IntegratorElasticity::_calcStrainStressField(
-				 ALE::Obj<real_section_type>* field,
+				 topology::Field<topology::Mesh>* field,
 				 const char* name,
-				 const ALE::Obj<Mesh>& mesh,
-				 topology::FieldsManager* const fields)
+				 topology::SolutionFields* const fields)
 { // _calcStrainStressField
+  assert(0 != field);
   assert(0 != _quadrature);
   assert(0 != _material);
 
   const bool calcStress = (0 == strcasecmp(name, "stress")) ? true : false;
     
+  // Get cell information that doesn't depend on particular cell
   const int cellDim = _quadrature->cellDim();
-  int tensorSize = 0;
+  const int numQuadPts = _quadrature->numQuadPts();
+  const int numBasis = _quadrature->numBasis();
+  const int spaceDim = _quadrature->spaceDim();
+  const int tensorSize = _material->tensorSize();
   totalStrain_fn_type calcTotalStrainFn;
   if (1 == cellDim) {
-    tensorSize = 1;
     calcTotalStrainFn = 
       &pylith::feassemble::IntegratorElasticity::_calcTotalStrain1D;
   } else if (2 == cellDim) {
-    tensorSize = 3;
     calcTotalStrainFn = 
       &pylith::feassemble::IntegratorElasticity::_calcTotalStrain2D;
   } else if (3 == cellDim) {
-    tensorSize = 6;
     calcTotalStrainFn = 
       &pylith::feassemble::IntegratorElasticity::_calcTotalStrain3D;
   } else
     assert(0);
   
+  // Allocate arrays for cell data.
+  double_array dispCell(numBasis*spaceDim);
+  double_array strainCell(numQuadPts*tensorSize);
+  strainCell = 0.0;
+  double_array stressCell(numQuadPts*tensorSize);
+  stressCell = 0.0;
+
+  // Get normalizer
+  assert(0 != _normalizer);
+  const double pressureScale = _normalizer->pressureScale();
+  
   // Get cell information
+  const ALE::Obj<SieveMesh>& sieveMesh = field->mesh().sieveMesh();
+  assert(!sieveMesh.isNull());
   const int materialId = _material->id();
-  const ALE::Obj<Mesh::label_sequence>& cells = 
-    mesh->getLabelStratum("material-id", materialId);
+  const ALE::Obj<SieveMesh::label_sequence>& cells = 
+    sieveMesh->getLabelStratum("material-id", materialId);
   assert(!cells.isNull());
-  const Mesh::label_sequence::iterator cellsEnd = cells->end();
-  
-  // Get sections
-  const ALE::Obj<real_section_type>& coordinates = 
-    mesh->getRealSection("coordinates");
-  assert(!coordinates.isNull());
-  const ALE::Obj<real_section_type>& disp = fields->getSolution();
-  
-  // Get cell geometry information that doesn't depend on cell
-  const int numQuadPts = _quadrature->numQuadPts();
-  const int numBasis = _quadrature->numBasis();
-  const int spaceDim = _quadrature->spaceDim();
-  
-  const int cellVecSize = numBasis*spaceDim;
-  double_array dispCell(cellVecSize);
-  
-  // Allocate array for total strain
-  const int totalFiberDim = numQuadPts * tensorSize;
-  double_array totalStrain(totalFiberDim);
-  totalStrain = 0.0;
-  double_array stress(totalFiberDim);
+  const SieveMesh::label_sequence::iterator cellsEnd = cells->end();
 
-  assert(0 != _normalizer);
-  const double pressureScale = _normalizer->pressureScale();
-  
-  // Allocate buffer for property field.
-  if (field->isNull() || 
-      totalFiberDim != (*field)->getFiberDimension(*cells->begin())) {
-    *field = new real_section_type(mesh->comm(), mesh->debug());
-    (*field)->setChart(real_section_type::chart_type(*std::min_element(cells->begin(), cells->end()),
-                                                     *std::max_element(cells->begin(), cells->end())+1));
-    (*field)->setFiberDimension(cells, totalFiberDim);
-    mesh->allocate(*field);
-  } // if
-  
-  
+  // Get field
+  const topology::Field<topology::Mesh>* solution = fields->solution();
+  assert(0 != solution);
+  const ALE::Obj<RealSection>& disp = solution->section();
+  assert(!disp.isNull());
+  topology::Mesh::RestrictVisitor dispVisitor(*disp, 
+					      dispCell.size(), &dispCell[0]);
+    
+  const ALE::Obj<RealSection>& fieldSection = field->section();
+  assert(!fieldSection.isNull());
+
   // Loop over cells
-  int c_index = 0;
-  for (Mesh::label_sequence::iterator c_iter=cells->begin();
+  for (SieveMesh::label_sequence::iterator c_iter=cells->begin();
        c_iter != cellsEnd;
-       ++c_iter, ++c_index) {
-    // Compute geometry information for current cell
-    _quadrature->retrieveGeometry(mesh, coordinates, *c_iter, c_index);
-    
+       ++c_iter) {
+    // Retrieve geometry information for current cell
+    _quadrature->retrieveGeometry(*c_iter);
+
     // Restrict input fields to cell
-    mesh->restrictClosure(disp, *c_iter, &dispCell[0], cellVecSize);
-    
+    dispVisitor.clear();
+    sieveMesh->restrictClosure(*c_iter, dispVisitor);
+
     // Get cell geometry information that depends on cell
     const double_array& basisDeriv = _quadrature->basisDeriv();
     
     // Compute strains
-    calcTotalStrainFn(&totalStrain, basisDeriv, dispCell, numBasis, 
-		      numQuadPts);
+    calcTotalStrainFn(&totalStrain, basisDeriv, dispCell, 
+		      numBasis, numQuadPts);
     
-    if (!calcStress) {
-      (*field)->updatePoint(*c_iter, &totalStrain[0]);
-    } else {
-      _material->getPropertiesCell(*c_iter, numQuadPts);
-      stress = _material->calcStress(totalStrain);
-      _normalizer->dimensionalize(&stress[0], stress.size(),
+    if (!calcStress) 
+      fieldSection->updatePoint(*c_iter, &strainCell[0]);
+    else {
+      _material->retrievePropsAndVars(*c_iter);
+      stressCell = _material->calcStress(strainCell);
+      _normalizer->dimensionalize(&stressCell[0], stressCell.size(),
 				  pressureScale);
-      (*field)->updatePoint(*c_iter, &stress[0]);	
+      fieldSection->updatePoint(*c_iter, &stressCell[0]);
     } // else
   } // for
 } // _calcStrainStressField

Modified: short/3D/PyLith/branches/pylith-swig/libsrc/feassemble/IntegratorElasticity.hh
===================================================================
--- short/3D/PyLith/branches/pylith-swig/libsrc/feassemble/IntegratorElasticity.hh	2009-02-27 13:21:40 UTC (rev 14167)
+++ short/3D/PyLith/branches/pylith-swig/libsrc/feassemble/IntegratorElasticity.hh	2009-02-27 15:51:57 UTC (rev 14168)
@@ -20,18 +20,20 @@
 #if !defined(pylith_feassemble_integratorelasticity_hh)
 #define pylith_feassemble_integratorelasticity_hh
 
-#include "Integrator.hh" // ISA Integrator
-#include "pylith/topology/Mesh.hh" // ISA Integrator<Mesh>
+// Include directives ---------------------------------------------------
+#include "feassemblefwd.hh" // forward declarations
 
-#include "pylith/utils/array.hh" // USES std::vector, double_array
+#include "pylith/topology/topologyfwd.hh" // HOLDSA Field
+#include "pylith/materials/materialsfwd.hh" // HOLDSA Material
 
-namespace pylith {
-  namespace materials {
-    class ElasticMaterial;
-  } // feassemble
-} // pylith
+#include "pylith/topology/Mesh.hh" // ISA Integrator<Mesh>
+#include "Integrator.hh" // ISA Integrator
 
-class pylith::feassemble::IntegratorElasticity : public Integrator<topology::Mesh>
+#include "pylith/utils/arrayfwd.hh" // USES std::vector, double_array
+
+// IntegratorElasticity -------------------------------------------------
+class pylith::feassemble::IntegratorElasticity :
+  public Integrator<topology::Mesh>
 { // IntegratorElasticity
   friend class TestIntegratorElasticity; // unit testing
 
@@ -79,8 +81,8 @@
    * @param fields Solution fields
    * @param mesh Finite-element mesh
    */
-  void updateState(const double t,
-		   topology::SolutionFields* const fields);
+  void updateStateVars(const double t,
+		       topology::SolutionFields* const fields);
 
   /** Verify configuration is acceptable.
    *
@@ -100,7 +102,6 @@
   cellField(const char* name,
 	    topology::SolutionFields* const fields);
 
-
 // PROTECTED METHODS ////////////////////////////////////////////////////
 protected :
 
@@ -108,22 +109,18 @@
    *
    * @param field Field in which to store stress or strain.
    * @param name Name of field to compute ('total-strain' or 'stress')
-   * @param mesh PETSc mesh for problem.
-   * @param fields Fields manager with solution.
+   * @param fields Manager for solution fields.
    */
-  void _calcStrainStressField(ALE::Obj<real_section_type>* field,
+  void _calcStrainStressField(topology::Field<topology::Mesh>* field,
 			      const char* name,
-			      const ALE::Obj<Mesh>& mesh,
-			      topology::FieldsManager* const fields);
+			      topology::SolutionFields* const fields);
 
   /** Calculate stress field from total strain field. Stress field
    * replaces strain field in section.
    *
    * @param field Field in which to store stress.
-   * @param mesh PETSc mesh for problem.
    */
-  void _calcStressFromStrain(ALE::Obj<real_section_type>* field,
-			     const ALE::Obj<Mesh>& mesh);
+  void _calcStressFromStrain(topology::Field<topology::Mesh>* field);
 			      
 
   /** Integrate elasticity term in residual for 1-D cells.
@@ -208,15 +205,6 @@
 			  const int numBasis,
 			  const int numQuadPts);
 
-// NOT IMPLEMENTED //////////////////////////////////////////////////////
-private :
-
-  /// Not implemented.
-  IntegratorElasticity(const IntegratorElasticity& i);
-
-  /// Not implemented
-  const IntegratorElasticity& operator=(const IntegratorElasticity&);
-
 // PROTECTED MEMBERS ////////////////////////////////////////////////////
 protected :
 
@@ -224,17 +212,26 @@
   materials::ElasticMaterial* _material;
 
   /// Buffer for storing scalar cell field.
-  Field<topology::Mesh>* _bufferCellScalar;
+  topology::Field<topology::Mesh>* _bufferCellScalar;
 
   /// Buffer for storing vector cell field.
-  Field<topology::Mesh>* _bufferCellVector;
+  topology::Field<topology::Mesh>* _bufferCellVector;
 
   /// Buffer for storing cell tensor field.
-  Field<topology::Mesh>* _bufferCellTensor;
+  topology::Field<topology::Mesh>* _bufferCellTensor;
 
   /// Buffer for storing other cell fields.
-  Field<topology::Mesh>* _bufferCellOther;
+  topology::Field<topology::Mesh>* _bufferCellOther;
 
+// NOT IMPLEMENTED //////////////////////////////////////////////////////
+private :
+
+  /// Not implemented.
+  IntegratorElasticity(const IntegratorElasticity&);
+
+  /// Not implemented
+  const IntegratorElasticity& operator=(const IntegratorElasticity&);
+
 }; // IntegratorElasticity
 
 #endif // pylith_feassemble_integratorelasticity_hh

Modified: short/3D/PyLith/branches/pylith-swig/libsrc/materials/Material.hh
===================================================================
--- short/3D/PyLith/branches/pylith-swig/libsrc/materials/Material.hh	2009-02-27 13:21:40 UTC (rev 14167)
+++ short/3D/PyLith/branches/pylith-swig/libsrc/materials/Material.hh	2009-02-27 15:51:57 UTC (rev 14168)
@@ -130,6 +130,12 @@
   void initialize(const topology::Mesh& mesh,
 		  feassemble::Quadrature<topology::Mesh>* quadrature);
   
+  /** Get size of stress/strain tensor associated with material.
+   *
+   * @returns Size of array holding stress/strain tensor.
+   */
+  int tensorSize(void) const;
+
   /** Get flag indicating whether Jacobian matrix must be reformed for
    * current state.
    *
@@ -147,13 +153,9 @@
    *
    * @param field Proeprty field.
    * @param name Name of physical property.
-   * @param mesh Finite-element mesh.
-   * @param numQuadPoints Number of quadrature points.
    */
   void propertyField(ALE::Obj<real_section_type>* field,
-		     const char* name,
-		     const topology::Mesh& mesh,
-		     const int numQuadPts) const;
+		     const char* name) const;
 #endif
 
   // PROTECTED METHODS //////////////////////////////////////////////////

Modified: short/3D/PyLith/branches/pylith-swig/libsrc/materials/Material.icc
===================================================================
--- short/3D/PyLith/branches/pylith-swig/libsrc/materials/Material.icc	2009-02-27 13:21:40 UTC (rev 14167)
+++ short/3D/PyLith/branches/pylith-swig/libsrc/materials/Material.icc	2009-02-27 15:51:57 UTC (rev 14168)
@@ -77,6 +77,13 @@
   return _dt;
 } // timeStep
 
+// Get size of stress/strain tensor associated with material.
+inline
+int
+pylith::materials::Material::tensorSize(void) const {
+  return _tensorSize;
+}
+
 // Get flag indicating whether Jacobian matrix must be reformed for
 // current state.
 inline



More information about the CIG-COMMITS mailing list