[cig-commits] r14067 - short/3D/PyLith/branches/pylith-swig/libsrc/materials
brad at geodynamics.org
brad at geodynamics.org
Tue Feb 17 21:44:44 PST 2009
Author: brad
Date: 2009-02-17 21:44:44 -0800 (Tue, 17 Feb 2009)
New Revision: 14067
Modified:
short/3D/PyLith/branches/pylith-swig/libsrc/materials/ElasticMaterial.cc
short/3D/PyLith/branches/pylith-swig/libsrc/materials/ElasticMaterial.hh
short/3D/PyLith/branches/pylith-swig/libsrc/materials/ElasticMaterial.icc
short/3D/PyLith/branches/pylith-swig/libsrc/materials/Material.cc
short/3D/PyLith/branches/pylith-swig/libsrc/materials/Material.hh
Log:
More work on materials.
Modified: short/3D/PyLith/branches/pylith-swig/libsrc/materials/ElasticMaterial.cc
===================================================================
--- short/3D/PyLith/branches/pylith-swig/libsrc/materials/ElasticMaterial.cc 2009-02-18 00:02:02 UTC (rev 14066)
+++ short/3D/PyLith/branches/pylith-swig/libsrc/materials/ElasticMaterial.cc 2009-02-18 05:44:44 UTC (rev 14067)
@@ -14,23 +14,31 @@
#include "ElasticMaterial.hh" // implementation of object methods
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/topology/Mesh.hh" // USES Mesh
+#include "pylith/feassemble/Quadrature.hh" // USES Quadrature
+#include "pylith/utils/array.hh" // USES double_array, std::vector
#include "pylith/utils/constdefs.h" // USES MAXDOUBLE
-#include "pylith/utils/sievetypes.hh" // USES Mesh
+#include "spatialdata/spatialdb/SpatialDB.hh" // USES SpatialDB
+#include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
+
#include <cstring> // USES memcpy()
+#include <strings.h> // USES strcasecmp()
#include <cassert> // USES assert()
+#include <stdexcept> // USES std::runtime_error
+#include <sstream> // USES std::ostringstream
// ----------------------------------------------------------------------
// Default constructor.
-pylith::materials::ElasticMaterial::ElasticMaterial(const int tensorSize,
+pylith::materials::ElasticMaterial::ElasticMaterial(const int dimension,
+ const int tensorSize,
const int numElasticConsts,
- const char** dbValues,
- const char** initialStateDBValues,
- const int numDBValues,
- const PropMetaData* properties,
- const int numProperties) :
- Material(tensorSize, dbValues, initialStateDBValues, numDBValues, properties, numProperties),
+ const Metadata& metadata) :
+ Material(dimension, tensorSize, metadata),
+ _dbInitialStress(0),
+ _dbInitialStrain(0),
+ _initialStress(0),
+ _initialStrain(0),
_numQuadPts(0),
_numElasticConsts(numElasticConsts)
{ // constructor
@@ -40,9 +48,166 @@
// Destructor.
pylith::materials::ElasticMaterial::~ElasticMaterial(void)
{ // destructor
+ delete _initialStress; _initialStress = 0;
+ delete _initialStrain; _initialStrain = 0;
+
+ // Python db object owns databases, so just set point to null
+ // :KLUDGE: Should use shared pointer
+ _dbInitialStress = 0;
+ _dbInitialStrain = 0;
} // destructor
// ----------------------------------------------------------------------
+// Initialize material by getting physical property parameters from
+// database.
+void
+initialize(const topology::Mesh& mesh,
+ feassemble::Quadrature<topology::Mesh>* quadrature)
+{ // initialize
+ Material::initialize(mesh, quadrature);
+
+ delete _initialStress; _initialStress = 0;
+ delete _initialStrain; _initialStrain = 0;
+
+ if (0 != _dbInitialStress)
+ _initializeInitialStress(mesh, quadrature);
+
+ if (0 != _dbInitialStrain)
+ _initializeInitialStrain(mesh, quadrature);
+} // initialize
+
+ // Get quadrature information
+ const int numQuadPts = quadrature->numQuadPts();
+ const int spaceDim = quadrature->spaceDim();
+
+ // Create arrays for querying
+ const int tensorSize = tensorSize();
+ double_array quadPtsGlobal(numQuadPts*spaceDim);
+ double_array valuesQuery(tensorSize);
+ double_array valuesCell(numQuadPts*tensorSize);
+
+ // Get cells associated with material
+ const ALE::Obj<SieveMesh>& sieveMesh = mesh.sieveMesh();
+ assert(!sieveMesh.isNull());
+ const ALE::Obj<SieveMesh::label_sequence>& cells =
+ sieveMesh->getLabelStratum("material-id", id());
+ assert(!cells.isNull());
+ const SieveMesh::label_sequence::iterator cellsEnd = cells->end();
+ const spatialdata::geocoords::CoordSys* cs = mesh.coordsys();
+
+ // Create field to hold initial stress state.
+ delete _initialStress; _initialStress = 0;
+ if (0 != _dbInitialStress) {
+ _initialStress = new topology::Field<topology::Mesh>(mesh);
+ assert(0 != _initialStress);
+ fiberDim = numQuadPts * tensorSize;
+ _initialStress->newSection(cells, fiberDim);
+ _initialStress->allocate();
+ _initialStress->zero();
+ } // if
+ const ALE::Obj<RealSection>& initialStressSection =
+ (0 != _initialStress) ? _initialStress->section() : 0;
+
+ // Create field to hold initial strain state.
+ delete _initialStrain; _initialStrain = 0;
+ if (0 != _dbInitialStrain) {
+ _initialStrain = new topology::Field<topology::Mesh>(mesh);
+ assert(0 != _initialStrain);
+ fiberDim = numQuadPts * tensorSize;
+ if (0 == _initialStress)
+ _initialStrain->newSection(cells, fiberDim);
+ else { // reuse chart from inital stress
+ const ALE::Obj<RealSection::chart_type>& chart =
+ initialStressSection->getChart();
+ assert(!chart.isNull());
+ _initialStrain->newSection(*chart, fiberDim);
+ } // else
+ _initialStrain->allocate();
+ _initialStrain->zero();
+ } // if
+ const ALE::Obj<RealSection>& initialStrainSection =
+ (0 != _initialStrain) ? _initialStrain->section() : 0;
+
+ // Setup databases as necessary.
+ if (0 != _dbInitialStress) {
+ _dbInitialStress->open();
+ _dbInitialStress->queryVals(stressDBValues, tensorSize);
+ } // if
+ if (0 != _dbInitialStrain) {
+ _dbInitialStrain->open();
+ _dbInitialStrain->queryVals(strainDBValues, tensorSize);
+ } // if
+
+ assert(0 != _normalizer);
+ const double pressureScale = _normalizer->pressureScale();
+ const double lengthScale = _normalizer->pressureScale();
+
+ for (Mesh::label_sequence::iterator c_iter=cells->begin();
+ c_iter != cellsEnd;
+ ++c_iter) {
+ // Compute geometry information for current cell
+ quadrature->retrieveGeometry(*c_iter);
+
+ const double_array& quadPtsNonDim = quadrature->quadPts();
+ quadPtsGlobal = quadPtsNonDim;
+ _normalizer->dimensionalize(&quadPtsGlobal[0], quadPtsGlobal.size(),
+ lengthScale);
+
+ // Loop over quadrature points in cell and query database
+ for (int iQuadPt=0, index=0;
+ iQuadPt < numQuadPts;
+ ++iQuadPt, index+=spaceDim) {
+ int err = _dbInitalStress->query(&valuesQuery[0], tensorSize,
+ &quadPtsGlobal[index], spaceDim, cs);
+ if (err) {
+ std::ostringstream msg;
+ msg << "Could not find initial stress state at \n"
+ << "(";
+ for (int i=0; i < spaceDim; ++i)
+ msg << " " << quadPtsGlobal[index+i];
+ msg << ") in material " << _label << "\n"
+ << "using spatial database '" << _dbInitialStress->label() << "'.";
+ throw std::runtime_error(msg.str());
+ } // if
+ _dbToProperties(&propertiesCell[iQuadPt*_numPropsQuadPt],
+ propertiesQuery);
+ _nondimProperties(&propertiesCell[iQuadPt*_numPropsQuadPt],
+ _numPropsQuadPt);
+
+ if (0 != _dbInitialState) {
+ err = _dbInitialState->query(&stateVarsQuery[0], numDBStateVars,
+ &quadPtsGlobal[index], spaceDim, cs);
+ if (err) {
+ std::ostringstream msg;
+ msg << "Could not find initial state values at \n" << "(";
+ for (int i=0; i < spaceDim; ++i)
+ msg << " " << quadPtsGlobal[index+i];
+ msg << ") in material " << _label << "\n"
+ << "using spatial database '" << _dbInitialState->label()
+ << "'.";
+ throw std::runtime_error(msg.str());
+ } // if
+ _dbToStateVars(&stateVarsCell[iQuadPt*_numVarsQuadPt],
+ stateVarsQuery);
+ _nondimStateVars(&stateVarsCell[iQuadPt*_numVarsQuadPt],
+ _numVarsQuadPt);
+ } // if
+
+ } // for
+ // Insert cell contribution into fields
+ propertiesSection->updatePoint(*c_iter, &propertiesCell[0]);
+ if (0 != _dbInitialState)
+ stateVarsSection->updatePoint(*c_iter, &stateVarsCell[0]);
+ } // for
+
+ // Close databases
+ _dbProperties->close();
+ if (0 != _dbInitialState)
+ _dbInitialState->close();
+
+} // initialize
+
+// ----------------------------------------------------------------------
// Compute density for cell at quadrature points.
const pylith::double_array&
pylith::materials::ElasticMaterial::calcDensity(void)
Modified: short/3D/PyLith/branches/pylith-swig/libsrc/materials/ElasticMaterial.hh
===================================================================
--- short/3D/PyLith/branches/pylith-swig/libsrc/materials/ElasticMaterial.hh 2009-02-18 00:02:02 UTC (rev 14066)
+++ short/3D/PyLith/branches/pylith-swig/libsrc/materials/ElasticMaterial.hh 2009-02-18 05:44:44 UTC (rev 14067)
@@ -20,18 +20,10 @@
#if !defined(pylith_materials_elasticmaterial_hh)
#define pylith_materials_elasticmaterial_hh
+// Include directives ---------------------------------------------------
#include "Material.hh" // ISA Material
-/// Namespace for pylith package
-namespace pylith {
- namespace materials {
- class ElasticMaterial;
-
- class TestElasticMaterial; // unit testing
- } // materials
-} // pylith
-
-/// C++ object for material constitutive model.
+// ElasticMaterial ------------------------------------------------------
class pylith::materials::ElasticMaterial : public Material
{ // class ElasticMaterial
friend class TestElasticMaterial; ///< unit testing
@@ -41,34 +33,42 @@
/** Default constructor.
*
- * @param tensorSize Number of entries in stress tensor.
+ * @param dimension Spatial dimension associated with material.
+ * @param tensorSize Array of names of database values for material.
* @param numElasticConsts Number of elastic constants.
- * @param dbValues Array of names of database values for material.
- * @param InitialStateDBValues Names of initial state database values for material.
- * @param numDBValues Number of database values.
- * @param properties Array of physical property meta data.
- * @param numProperties Number of physical properties for material.
+ * @param metadata Metadata for physical properties and state variables.
*/
- ElasticMaterial(const int tensorSize,
- const int numElasticConsts,
- const char** dbValues,
- const char** initialStateDBValues,
- const int numDBValues,
- const PropMetaData* properties,
- const int numProperties);
+ Material(const int dimension,
+ const int tensorSize,
+ const int numElasticConsts,
+ const Metadata& metadata);
/// Destructor.
virtual
~ElasticMaterial(void);
- /** Get cell's property information from material's section.
+ /** Set database for initial stress state.
*
- * @param cell Finite element cell
- * @param numQuadPts Number of quadrature points
+ * @param db Spatial database.
*/
- void getPropertiesCell(const Mesh::point_type& cell,
- const int numQuadPts);
+ void dbInitialStress(const spatialdata::spatialdb::SpatialDB* db);
+ /** Set database for initial strain state.
+ *
+ * @param db Spatial database.
+ */
+ void dbInitialStrain(const spatialdata::spatialdb::SpatialDB* db);
+
+ /** Initialize material by getting physical property parameters from
+ * database.
+ *
+ * @param mesh Finite-element mesh.
+ * @param quadrature Quadrature for finite-element integration
+ */
+ virtual
+ void initialize(const topology::Mesh& mesh,
+ feassemble::Quadrature<topology::Mesh>* quadrature);
+
/** Compute density for cell at quadrature points.
*
* @returns Array of density values at cell's quadrature points.
@@ -163,6 +163,12 @@
// PROTECTED METHODS //////////////////////////////////////////////////
protected :
+ /** Allocate cell arrays.
+ *
+ * @param numQuadPts Number of quadrature points.
+ */
+ void _allocateCellArrays(void);
+
/** Compute density from properties.
*
* @param density Array for density.
@@ -172,32 +178,43 @@
virtual
void _calcDensity(double* const density,
const double* properties,
- const int numProperties) = 0;
+ const int numProperties,
+ const double* stateVars,
+ const int numStateVars) = 0;
- /** Compute stress tensor from properties. If the state variables
- * are from the previous time step, then the computeStateVars flag
- * should be set to true so that the state variables are updated
- * (but not stored) when computing the stresses.
+ /** Compute stress tensor from properties and state variables. If
+ * the state variables are from the previous time step, then the
+ * computeStateVars flag should be set to true so that the state
+ * variables are updated (but not stored) when computing the
+ * stresses.
*
* @param stress Array for stress tensor.
* @param stressSize Size of stress tensor.
* @param properties Properties at location.
* @param numProperties Number of properties.
+ * @param stateVars State variables at location.
+ * @param numStateVars Number of state variables.
* @param totalStrain Total strain at location.
* @param strainSize Size of strain tensor.
- * @param initialState Initial state variable values.
- * @param initialStateSize Size of initial state array.
- * @param computeStateVars Flag indicating to compute updated state vars.
+ * @param initialStress Initial stress tensor at location.
+ * @param initialStressSize Size of initial stress array.
+ * @param initialStrain Initial strain tensor at location.
+ * @param initialStrainSize Size of initial strain array.
+ * @param computeStateVars Flag indicating to compute updated state variables.
*/
virtual
void _calcStress(double* const stress,
const int stressSize,
const double* properties,
const int numProperties,
+ const double* stateVars,
+ const int numStateVars,
const double* totalStrain,
const int strainSize,
- const double* initialState,
- const int initialStateSize,
+ const double* initialStress,
+ const int initialStressSize,
+ const double* initialStrain,
+ const int initialStrainSize,
const bool computeStateVars) = 0;
/** Compute derivatives of elasticity matrix from properties.
@@ -206,55 +223,69 @@
* @param numElasticConsts Number of elastic constants.
* @param properties Properties at location.
* @param numProperties Number of properties.
+ * @param stateVars State variables at location.
+ * @param numStateVars Number of state variables.
* @param totalStrain Total strain at location.
* @param strainSize Size of strain tensor.
- * @param initialState Initial state variable values.
- * @param initialStateSize Size of initial state array.
+ * @param initialStress Initial stress tensor at location.
+ * @param initialStressSize Size of initial stress array.
+ * @param initialStrain Initial strain tensor at location.
+ * @param initialStrainSize Size of initial strain array.
*/
virtual
void _calcElasticConsts(double* const elasticConsts,
const int numElasticConsts,
const double* properties,
const int numProperties,
+ const double* stateVars,
+ const int numStateVars,
const double* totalStrain,
const int strainSize,
- const double* initialState,
- const int initialStateSize) = 0;
+ const double* initialStress,
+ const int initialStressSize,
+ const double* initialStrain,
+ const int initialStrainSize) = 0;
/** Get stable time step for implicit time integration.
*
+ * @param properties Properties at location.
+ * @param numProperties Number of properties.
+ * @param stateVars State variables at location.
+ * @param numStateVars Number of state variables.
+ *
* @returns Time step
*/
virtual
double _stableTimeStepImplicit(const double* properties,
- const int numProperties) const = 0;
+ const int numProperties,
+ const double* stateVars,
+ const int numStateVars) const = 0;
- /** Update properties (for next time step).
+ /** Update state variables (for next time step).
*
+ * @param stateVars State variables at location.
+ * @param numStateVars Number of state variables.
* @param properties Properties at location.
* @param numProperties Number of properties.
* @param totalStrain Total strain at location.
* @param strainSize Size of strain tensor.
- * @param initialState Initial state variable values.
- * @param initialStateSize Size of initial state array.
+ * @param initialStress Initial stress tensor at location.
+ * @param initialStressSize Size of initial stress array.
+ * @param initialStrain Initial strain tensor at location.
+ * @param initialStrainSize Size of initial strain array.
*/
virtual
- void _updateProperties(double* const properties,
+ void _updateProperties(double* const stateVars,
+ const int numStateVars,
+ double* const properties,
const int numProperties,
const double* totalStrain,
const int strainSize,
- const double* initialState,
- const int initialStateSize);
+ const double* initialStress,
+ const int initialStressSize,
+ const double* initialStrain,
+ const int initialStrainSize);
- // NOT IMPLEMENTED ////////////////////////////////////////////////////
-private :
-
- /// Not implemented
- ElasticMaterial(const ElasticMaterial& m);
-
- /// Not implemented
- const ElasticMaterial& operator=(const ElasticMaterial& m);
-
// PRIVATE METHODS ////////////////////////////////////////////////////
private :
@@ -267,23 +298,46 @@
// PRIVATE MEMBERS ////////////////////////////////////////////////////
private :
- int _numQuadPts; ///< Number of quadrature points
- int _numElasticConsts; ///< Number of elastic constants.
+ /// Database for initial stress tensor;
+ spatialdata::spatialdb:SpatialDB* _dbInitialStress;
+ /// Database for initial strain tensor;
+ spatialdata::spatialdb:SpatialDB* _dbInitialStrain;
+
+ /// Initial stress field.
+ topology::Field<topology::Mesh>* _initialStress;
+
+ /// Initial strain field.
+ topology::Field<topology::Mesh>* _initialStrain;
+
/** Properties at quadrature points for current cell.
*
- * size = numQuadPts*numPropsQuadPt
- * index = iQuadPt*iParam*iValue
+ * size = numQuadPts * numPropsQuadPt
+ * index = iQuadPt * numPropsQuadPt + iPropQuadPt
*/
double_array _propertiesCell;
- /** Initial state values at quadrature points for current cell.
+ /** State variables at quadrature points for current cell.
*
- * size = numQuadPts*initialStateSize
- * index = iQuadPt*iValue
+ * size = numQuadPts * numVarsQuadPt
+ * index = iQuadPt * numVarsQuadPt + iStateVar
*/
- double_array _initialStateCell;
+ double_array _stateVarsCell;
+ /** Initial stress state for current cell.
+ *
+ * size = numQuadPts * tensorSize
+ * index = iQuadPt * tensorSize + iComponent
+ */
+ double_array _initialStressCell;
+
+ /** Initial strain state for current cell.
+ *
+ * size = numQuadPts * tensorSize
+ * index = iQuadPt * tensorSize + iComponent
+ */
+ double_array _initialStrainCell;
+
/** Density value at quadrature points for current cell.
*
* size = numQuadPts
@@ -293,18 +347,27 @@
/** Stress tensor at quadrature points for current cell.
*
- * size = numQuadPts*tensorSize
- * index = *iQuadPt*tensorSize + iStress
+ * size = numQuadPts * tensorSize
+ * index = iQuadPt * tensorSize + iStress
*/
double_array _stress;
/** Elasticity matrix at quadrature points for current cell.
*
- * size = numQuadPts*numElasticConsts
- * index = iQuadPt*numElasticConsts+iConstant
+ * size = numQuadPts * numElasticConsts
+ * index = iQuadPt * numElasticConsts + iConstant
*/
double_array _elasticConsts;
+ int _numQuadPts; ///< Number of quadrature points
+ int _numElasticConsts; ///< Number of elastic constants.
+
+ // NOT IMPLEMENTED ////////////////////////////////////////////////////
+private :
+
+ ElasticMaterial(const ElasticMaterial&); ///< Not implemented.
+ const ElasticMaterial& operator=(const ElasticMaterial&); ///< Not implemented
+
}; // class ElasticMaterial
#include "ElasticMaterial.icc" // inline methods
Modified: short/3D/PyLith/branches/pylith-swig/libsrc/materials/ElasticMaterial.icc
===================================================================
--- short/3D/PyLith/branches/pylith-swig/libsrc/materials/ElasticMaterial.icc 2009-02-18 00:02:02 UTC (rev 14066)
+++ short/3D/PyLith/branches/pylith-swig/libsrc/materials/ElasticMaterial.icc 2009-02-18 05:44:44 UTC (rev 14067)
@@ -14,6 +14,20 @@
#error "ElasticMaterial.icc can only be included from ElasticMaterial.hh"
#endif
+// Set database for initial stress state.
+inline
+void
+pylith::materials::ElasticMaterial::dbInitialStress(const spatialdata::spatialdb::SpatialDB* db) {
+ _dbInitialStress = db;
+}
+
+// Set database for initial strain state.
+inline
+void
+pylith::materials::ElasticMaterial::dbInitialStrain(const spatialdata::spatialdb::SpatialDB* db) {
+ _dbInitialStrain = db;
+}
+
// Set whether elastic or inelastic constitutive relations are used.
inline
void
Modified: short/3D/PyLith/branches/pylith-swig/libsrc/materials/Material.cc
===================================================================
--- short/3D/PyLith/branches/pylith-swig/libsrc/materials/Material.cc 2009-02-18 00:02:02 UTC (rev 14066)
+++ short/3D/PyLith/branches/pylith-swig/libsrc/materials/Material.cc 2009-02-18 05:44:44 UTC (rev 14067)
@@ -21,8 +21,6 @@
#include "spatialdata/spatialdb/SpatialDB.hh" // USES SpatialDB
#include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
-#include "pylith/utils/sievetypes.hh" // USES Mesh
-
#include <cstring> // USES memcpy()
#include <strings.h> // USES strcasecmp()
#include <cassert> // USES assert()
@@ -114,16 +112,17 @@
const SieveMesh::label_sequence::iterator cellsEnd = cells->end();
const spatialdata::geocoords::CoordSys* cs = mesh.coordsys();
- // Create sections to hold physical properties
+ // Create field to hold physical properties.
delete _properties; _properties = new topology::Field<topology::Mesh>(mesh);
assert(0 != _properties);
int fiberDim = numQuadPts * _numPropsQuadPt;
_properties->newSection(cells, fiberDim);
_properties->allocate();
+ _properties->zero();
const ALE::Obj<RealSection>& propertiesSection = _properties->section();
assert(!propertiesSection.isNull());
- // Create arrays for querying
+ // Create arrays for querying.
const int numDBProperties = _metadata.numDBProperties();
double_array quadPtsGlobal(numQuadPts*spaceDim);
double_array propertiesQuery(numDBProperties);
@@ -134,25 +133,29 @@
_dbProperties->queryVals(_metadata.dbProperties(),
_metadata.numDBProperties());
- // Create sections to hold state variables
+ // Create field to hold state variables. We create the field even
+ // if there is no initial state, because this we will use this field
+ // to hold the state variables.
delete _stateVars; _stateVars = new topology::Field<topology::Mesh>(mesh);
- assert(0 != _stateVars);
fiberDim = numQuadPts * _numVarsQuadPt;
if (fiberDim > 0) {
+ assert(0 != _stateVars);
const ALE::Obj<RealSection::chart_type>& chart =
propertiesSection->getChart();
assert(!chart.isNull());
_stateVars->newSection(*chart, fiberDim);
_stateVars->allocate();
+ _stateVars->zero();
} // if
- const ALE::Obj<RealSection>& stateVarsSection = _stateVars->section();
- assert(!stateVarsSection.isNull());
+ const ALE::Obj<RealSection>& stateVarsSection =
+ (fiberDim > 0) ? _stateVars->section() : 0;
// Create arrays for querying
const int numDBStateVars = _metadata.numDBStateVars();
double_array stateVarsQuery;
double_array stateVarsCell;
if (0 != _dbInitialState) {
+ assert(!stateVarsSection.isNull());
assert(numDBStateVars > 0);
assert(_numVarsQuadPt > 0);
stateVarsQuery.resize(numDBStateVars);
Modified: short/3D/PyLith/branches/pylith-swig/libsrc/materials/Material.hh
===================================================================
--- short/3D/PyLith/branches/pylith-swig/libsrc/materials/Material.hh 2009-02-18 00:02:02 UTC (rev 14066)
+++ short/3D/PyLith/branches/pylith-swig/libsrc/materials/Material.hh 2009-02-18 05:44:44 UTC (rev 14067)
@@ -123,6 +123,7 @@
* @param mesh Finite-element mesh.
* @param quadrature Quadrature for finite-element integration
*/
+ virtual
void initialize(const topology::Mesh& mesh,
feassemble::Quadrature<topology::Mesh>* quadrature);
More information about the CIG-COMMITS
mailing list