[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