[cig-commits] r21551 - short/3D/PyLith/trunk/libsrc/pylith/materials
brad at geodynamics.org
brad at geodynamics.org
Fri Mar 15 16:43:47 PDT 2013
Author: brad
Date: 2013-03-15 16:43:47 -0700 (Fri, 15 Mar 2013)
New Revision: 21551
Modified:
short/3D/PyLith/trunk/libsrc/pylith/materials/ElasticMaterial.cc
Log:
Updated ElasticMaterial for visitors (more).
Modified: short/3D/PyLith/trunk/libsrc/pylith/materials/ElasticMaterial.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/pylith/materials/ElasticMaterial.cc 2013-03-15 23:16:38 UTC (rev 21550)
+++ short/3D/PyLith/trunk/libsrc/pylith/materials/ElasticMaterial.cc 2013-03-15 23:43:47 UTC (rev 21551)
@@ -544,7 +544,7 @@
pylith::materials::ElasticMaterial::_initializeInitialStress(const topology::Mesh& mesh,
feassemble::Quadrature<topology::Mesh>* quadrature)
{ // _initializeInitialStress
- if (0 == _dbInitialStress)
+ if (!_dbInitialStress)
return;
ALE::MemoryLogger& logger = ALE::MemoryLogger::singleton();
@@ -552,8 +552,7 @@
assert(_initialFields);
_initialFields->add("initial stress", "initial_stress");
- topology::Field<topology::Mesh>& initialStress =
- _initialFields->get("initial stress");
+ topology::Field<topology::Mesh>& initialStress = _initialFields->get("initial stress");
assert(_dbInitialStress);
assert(quadrature);
@@ -563,26 +562,18 @@
const int spaceDim = quadrature->spaceDim();
const int numBasis = quadrature->numBasis();
+ const spatialdata::geocoords::CoordSys* cs = mesh.coordsys();assert(cs);
+
// Get cells associated with material
- const spatialdata::geocoords::CoordSys* cs = mesh.coordsys();
- PetscDM dmMesh = mesh.dmMesh();
- PetscIS cellIS;
- const PetscInt *cells;
- PetscInt numCells;
- PetscErrorCode err = 0;
+ PetscDM dmMesh = mesh.dmMesh();assert(dmMesh);
+ topology::StratumIS materialIS(dmMesh, "material-id", id());
+ const PetscInt* cells = materialIS.points();
+ const PetscInt numCells = materialIS.size();
- assert(dmMesh);
- err = DMPlexGetStratumIS(dmMesh, "material-id", id(), &cellIS);CHECK_PETSC_ERROR(err);
- err = ISGetSize(cellIS, &numCells);CHECK_PETSC_ERROR(err);
- err = ISGetIndices(cellIS, &cells);CHECK_PETSC_ERROR(err);
-
#if !defined(PRECOMPUTE_GEOMETRY)
- scalar_array coordinatesCell(numBasis*spaceDim);
- PetscSection coordSection;
- PetscVec coordVec;
- err = DMPlexGetCoordinateSection(dmMesh, &coordSection);CHECK_PETSC_ERROR(err);
- err = DMGetCoordinatesLocal(dmMesh, &coordVec);CHECK_PETSC_ERROR(err);
- assert(coordSection);assert(coordVec);
+ topology::CoordsVisitor coordsVisitor(dmMesh);
+ PetscScalar *coordsArray = NULL;
+ PetscInt coordsSize = 0;
#endif
// Create arrays for querying
@@ -597,8 +588,7 @@
initialStress.newSection(cellsTmp, fiberDim);
initialStress.allocate();
initialStress.zero();
- PetscSection initialStressSection = initialStress.petscSection();
- PetscVec initialStressVec = initialStress.localVector();
+ topology::VecVisitorMesh stressVisitor(initialStress);
// Setup databases for querying
_dbInitialStress->open();
@@ -646,12 +636,9 @@
#if defined(PRECOMPUTE_GEOMETRY)
quadrature->retrieveGeometry(*c_iter);
#else
- PetscScalar *coords;
- PetscInt coordsSize;
- err = DMPlexVecGetClosure(dmMesh, coordSection, coordVec, cell, &coordsSize, &coords);CHECK_PETSC_ERROR(err);
- for(PetscInt i = 0; i < coordsSize; ++i) {coordinatesCell[i] = coords[i];}
- quadrature->computeGeometry(coordinatesCell, cell);
- err = DMPlexVecRestoreClosure(dmMesh, coordSection, coordVec, cell, &coordsSize, &coords);CHECK_PETSC_ERROR(err);
+ coordsVisitor.getClosure(&coordsArray, &coordsSize, cell);
+ quadrature->computeGeometry(coordsArray, coordsSize, cell);
+ coordsVisitor.restoreClosure(&coordsArray, &coordsSize, cell);
#endif
// Dimensionalize coordinates for querying
@@ -681,7 +668,7 @@
_normalizer->nondimensionalize(&stressCell[0], stressCell.size(),
pressureScale);
- err = DMPlexVecSetClosure(dmMesh, initialStressSection, initialStressVec, cell, &stressCell[0], ADD_VALUES);CHECK_PETSC_ERROR(err);
+ stressVisitor.setClosure(&stressCell[0], stressCell.size(), cell, ADD_VALUES);
} // for
// Close databases
@@ -693,11 +680,10 @@
// ----------------------------------------------------------------------
// Initialize initial strain field.
void
-pylith::materials::ElasticMaterial::_initializeInitialStrain(
- const topology::Mesh& mesh,
- feassemble::Quadrature<topology::Mesh>* quadrature)
+pylith::materials::ElasticMaterial::_initializeInitialStrain(const topology::Mesh& mesh,
+ feassemble::Quadrature<topology::Mesh>* quadrature)
{ // _initializeInitialStrain
- if (0 == _dbInitialStrain)
+ if (!_dbInitialStrain)
return;
ALE::MemoryLogger& logger = ALE::MemoryLogger::singleton();
@@ -705,8 +691,7 @@
assert(_initialFields);
_initialFields->add("initial strain", "initial_strain");
- topology::Field<topology::Mesh>& initialStrain =
- _initialFields->get("initial strain");
+ topology::Field<topology::Mesh>& initialStrain = _initialFields->get("initial strain");
assert(_dbInitialStrain);
assert(quadrature);
@@ -716,26 +701,18 @@
const int spaceDim = quadrature->spaceDim();
const int numBasis = quadrature->numBasis();
+ const spatialdata::geocoords::CoordSys* cs = mesh.coordsys();assert(cs);
+
// Get cells associated with material
- const spatialdata::geocoords::CoordSys* cs = mesh.coordsys();
- PetscDM dmMesh = mesh.dmMesh();
- PetscIS cellIS;
- const PetscInt *cells;
- PetscInt numCells;
- PetscErrorCode err = 0;
+ PetscDM dmMesh = mesh.dmMesh();assert(dmMesh);
+ topology::StratumIS materialIS(dmMesh, "material-id", id());
+ const PetscInt* cells = materialIS.points();
+ const PetscInt numCells = materialIS.size();
- assert(dmMesh);
- err = DMPlexGetStratumIS(dmMesh, "material-id", id(), &cellIS);CHECK_PETSC_ERROR(err);
- err = ISGetSize(cellIS, &numCells);CHECK_PETSC_ERROR(err);
- err = ISGetIndices(cellIS, &cells);CHECK_PETSC_ERROR(err);
-
#if !defined(PRECOMPUTE_GEOMETRY)
- scalar_array coordinatesCell(numBasis*spaceDim);
- PetscSection coordSection;
- PetscVec coordVec;
- err = DMPlexGetCoordinateSection(dmMesh, &coordSection);CHECK_PETSC_ERROR(err);
- err = DMGetCoordinatesLocal(dmMesh, &coordVec);CHECK_PETSC_ERROR(err);
- assert(coordSection);assert(coordVec);
+ topology::CoordsVisitor coordsVisitor(dmMesh);
+ PetscScalar* coordsArray = NULL;
+ PetscInt coordsSize = 0;
#endif
// Create arrays for querying
@@ -750,8 +727,7 @@
initialStrain.newSection(cellsTmp, fiberDim);
initialStrain.allocate();
initialStrain.zero();
- PetscSection initialStrainSection = initialStrain.petscSection();
- PetscVec initialStrainVec = initialStrain.localVector();
+ topology::VecVisitorMesh strainVisitor(initialStrain);
// Setup databases for querying
_dbInitialStrain->open();
@@ -799,19 +775,15 @@
#if defined(PRECOMPUTE_GEOMETRY)
quadrature->retrieveGeometry(*c_iter);
#else
- PetscScalar *coords;
- PetscInt coordsSize;
- err = DMPlexVecGetClosure(dmMesh, coordSection, coordVec, cell, &coordsSize, &coords);CHECK_PETSC_ERROR(err);
- for(PetscInt i = 0; i < coordsSize; ++i) {coordinatesCell[i] = coords[i];}
- quadrature->computeGeometry(coordinatesCell, cell);
- err = DMPlexVecRestoreClosure(dmMesh, coordSection, coordVec, cell, &coordsSize, &coords);CHECK_PETSC_ERROR(err);
+ coordsVisitor.getClosure(&coordsArray, &coordsSize, cell);
+ quadrature->computeGeometry(coordsArray, coordsSize, cell);
+ coordsVisitor.restoreClosure(&coordsArray, &coordsSize, cell);
#endif
// Dimensionalize coordinates for querying
const scalar_array& quadPtsNonDim = quadrature->quadPts();
quadPtsGlobal = quadPtsNonDim;
- _normalizer->dimensionalize(&quadPtsGlobal[0], quadPtsGlobal.size(),
- lengthScale);
+ _normalizer->dimensionalize(&quadPtsGlobal[0], quadPtsGlobal.size(), lengthScale);
// Loop over quadrature points in cell and query database
for (int iQuadPt=0, iCoord=0, iStrain=0;
@@ -830,7 +802,7 @@
} // if
} // for
- err = DMPlexVecSetClosure(dmMesh, initialStrainSection, initialStrainVec, cell, &strainCell[0], ADD_VALUES);CHECK_PETSC_ERROR(err);
+ strainVisitor.setClosure(&strainCell[0], strainCell.size(), cell, ADD_VALUES);
} // for
// Close databases
@@ -842,17 +814,16 @@
// ----------------------------------------------------------------------
// Update stateVars (for next time step).
void
-pylith::materials::ElasticMaterial::_updateStateVars(
- PylithScalar* const stateVars,
- const int numStateVars,
- const PylithScalar* properties,
- const int numProperties,
- const PylithScalar* totalStrain,
- const int strainSize,
- const PylithScalar* initialStress,
- const int initialStressSize,
- const PylithScalar* initialStrain,
- const int initialStrainSize)
+pylith::materials::ElasticMaterial::_updateStateVars(PylithScalar* const stateVars,
+ const int numStateVars,
+ const PylithScalar* properties,
+ const int numProperties,
+ const PylithScalar* totalStrain,
+ const int strainSize,
+ const PylithScalar* initialStress,
+ const int initialStressSize,
+ const PylithScalar* initialStrain,
+ const int initialStrainSize)
{ // _updateStateVars
} // _updateStateVars
More information about the CIG-COMMITS
mailing list