[cig-commits] r21538 - short/3D/PyLith/trunk/libsrc/pylith/friction
brad at geodynamics.org
brad at geodynamics.org
Thu Mar 14 12:21:56 PDT 2013
Author: brad
Date: 2013-03-14 12:21:55 -0700 (Thu, 14 Mar 2013)
New Revision: 21538
Modified:
short/3D/PyLith/trunk/libsrc/pylith/friction/FrictionModel.cc
Log:
Updated to use visitor.
Modified: short/3D/PyLith/trunk/libsrc/pylith/friction/FrictionModel.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/pylith/friction/FrictionModel.cc 2013-03-14 18:57:54 UTC (rev 21537)
+++ short/3D/PyLith/trunk/libsrc/pylith/friction/FrictionModel.cc 2013-03-14 19:21:55 UTC (rev 21538)
@@ -22,6 +22,9 @@
#include "pylith/topology/SubMesh.hh" // USES Mesh
#include "pylith/topology/Field.hh" // USES Field
+#include "pylith/topology/Stratum.hh" // USES Stratum
+#include "pylith/topology/CoordsVisitor.hh" // USES CoordsVisitor
+#include "pylith/topology/VisitorMesh.hh" // USES VisitorMesh
#include "pylith/feassemble/Quadrature.hh" // USES Quadrature
#include "pylith/utils/array.hh" // USES scalar_array, std::vector
@@ -77,7 +80,7 @@
void
pylith::friction::FrictionModel::normalizer(const spatialdata::units::Nondimensional& dim)
{ // normalizer
- if (0 == _normalizer)
+ if (!_normalizer)
_normalizer = new spatialdata::units::Nondimensional(dim);
else
*_normalizer = dim;
@@ -86,19 +89,18 @@
// ----------------------------------------------------------------------
// Get physical property parameters and initial state (if used) from database.
void
-pylith::friction::FrictionModel::initialize(
- const topology::SubMesh& faultMesh,
- feassemble::Quadrature<topology::SubMesh>* quadrature)
+pylith::friction::FrictionModel::initialize(const topology::SubMesh& faultMesh,
+ feassemble::Quadrature<topology::SubMesh>* quadrature)
{ // initialize
- assert(0 != _dbProperties);
- PetscErrorCode err;
+ assert(_dbProperties);
ALE::MemoryLogger& logger = ALE::MemoryLogger::singleton();
//logger.stagePush("Friction");
// Get vertices associated with friction interface
PetscDM faultDMMesh = faultMesh.dmMesh();assert(faultDMMesh);
- PetscInt vStart, vEnd;
- err = DMPlexGetDepthStratum(faultDMMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
+ topology::Stratum depthStratum(faultDMMesh, topology::Stratum::DEPTH, 0);
+ const PetscInt vStart = depthStratum.begin();
+ const PetscInt vEnd = depthStratum.end();
const spatialdata::geocoords::CoordSys* cs = faultMesh.coordsys();
assert(cs);
@@ -108,11 +110,8 @@
const PylithScalar lengthScale = _normalizer->lengthScale();
scalar_array coordsVertexGlobal(spaceDim);
- PetscSection coordSection = NULL;
- PetscVec coordVec = NULL;
- PetscScalar* coordArray = NULL;
- err = DMPlexGetCoordinateSection(faultDMMesh, &coordSection);CHECK_PETSC_ERROR(err);
- err = DMGetCoordinatesLocal(faultDMMesh, &coordVec);CHECK_PETSC_ERROR(err);
+ topology::CoordsVisitor coordsVisitor(faultDMMesh);
+ PetscScalar* coordArray = coordsVisitor.localArray();
// Query database for properties
@@ -133,15 +132,10 @@
_dbProperties->queryVals(_metadata.dbProperties(),
_metadata.numDBProperties());
- err = VecGetArray(coordVec, &coordArray);CHECK_PETSC_ERROR(err);
for(PetscInt v = vStart; v < vEnd; ++v) {
- PetscInt coff;
- PetscInt cdof;
- err = PetscSectionGetDof(coordSection, v, &cdof);CHECK_PETSC_ERROR(err);
- err = PetscSectionGetOffset(coordSection, v, &coff);CHECK_PETSC_ERROR(err);
- assert(spaceDim == cdof);
-
- for (PetscInt d = 0; d < cdof; ++d) {
+ const PetscInt coff = coordsVisitor.sectionOffset(v);
+ assert(spaceDim == coordsVisitor.sectionDof(v));
+ for (PetscInt d = 0; d < spaceDim; ++d) {
coordsVertexGlobal[d] = coordArray[coff+d];
} // for
_normalizer->dimensionalize(&coordsVertexGlobal[0], coordsVertexGlobal.size(), lengthScale);
@@ -165,17 +159,16 @@
PetscInt iOff = 0;
for (int i=0; i < _metadata.numProperties(); ++i) {
- const materials::Metadata::ParamDescription& property =
- _metadata.getProperty(i);
+ const materials::Metadata::ParamDescription& property = _metadata.getProperty(i);
// TODO This needs to be an integer instead of a string
topology::Field<topology::SubMesh>& propertyField = _fieldsPropsStateVars->get(property.name.c_str());
- PetscScalar* propertyArray = propertyField.getLocalArray();
- const PetscInt off = propertyField.sectionOffset(v);
- const PetscInt dof = propertyField.sectionDof(v);
+ topology::VecVisitorMesh propertyVisitor(propertyField);
+ PetscScalar* propertyArray = propertyVisitor.localArray();
+ const PetscInt off = propertyVisitor.sectionOffset(v);
+ const PetscInt dof = propertyVisitor.sectionDof(v);
for(PetscInt d = 0; d < dof; ++d, ++iOff) {
propertyArray[off+d] += propertiesVertex[iOff];
} // for
- propertyField.restoreLocalArray(&propertyArray);
} // for
} // for
// Close properties database
@@ -196,13 +189,9 @@
_metadata.numDBStateVars());
for(PetscInt v = vStart; v < vEnd; ++v) {
- PetscInt coff;
- PetscInt cdof;
- err = PetscSectionGetDof(coordSection, v, &cdof);CHECK_PETSC_ERROR(err);
- err = PetscSectionGetOffset(coordSection, v, &coff);CHECK_PETSC_ERROR(err);
- assert(spaceDim == cdof);
-
- for (PetscInt d = 0; d < cdof; ++d) {
+ const PetscInt coff = coordsVisitor.sectionOffset(v);
+ assert(spaceDim == coordsVisitor.sectionDof(v));
+ for (PetscInt d = 0; d < spaceDim; ++d) {
coordsVertexGlobal[d] = coordArray[coff+d];
} // for
_normalizer->dimensionalize(&coordsVertexGlobal[0], coordsVertexGlobal.size(), lengthScale);
@@ -226,15 +215,14 @@
const materials::Metadata::ParamDescription& stateVar = _metadata.getStateVar(i);
// TODO This needs to be an integer instead of a string
topology::Field<topology::SubMesh>& stateVarField = _fieldsPropsStateVars->get(stateVar.name.c_str());
-
- PetscScalar* stateVarArray = stateVarField.getLocalArray();
- const PetscInt off = stateVarField.sectionOffset(v);
- const PetscInt dof = stateVarField.sectionDof(v);
+ topology::VecVisitorMesh stateVarVisitor(stateVarField);
+ PetscScalar* stateVarArray = stateVarVisitor.localArray();
+ const PetscInt off = stateVarVisitor.sectionOffset(v);
+ const PetscInt dof = stateVarVisitor.sectionDof(v);
assert(stateVarsVertex.size() == dof);
for(PetscInt d = 0; d < dof; ++d, ++iOff) {
stateVarArray[off+d] += stateVarsVertex[iOff];
} // for
- stateVarField.restoreLocalArray(&stateVarArray);
} // for
} // for
// Close database
@@ -243,8 +231,6 @@
std::cerr << "WARNING: No initial state given for friction model '" << label() << "'. Using default value of zero." << std::endl;
} // if/else
- err = VecRestoreArray(coordVec, &coordArray);CHECK_PETSC_ERROR(err);
-
// Setup buffers for restrict/update of properties and state variables.
_propsStateVarsVertex.resize(_propsFiberDim+_varsFiberDim);
@@ -307,34 +293,31 @@
pylith::friction::FrictionModel::retrievePropsStateVars(const int point)
{ // retrievePropsStateVars
assert(_fieldsPropsStateVars);
- PetscErrorCode err;
PetscInt iOff = 0;
for (int i=0; i < _metadata.numProperties(); ++i) {
const materials::Metadata::ParamDescription& property = _metadata.getProperty(i);
// TODO This needs to be an integer instead of a string
topology::Field<topology::SubMesh>& propertyField = _fieldsPropsStateVars->get(property.name.c_str());
-
- PetscScalar* propertyArray = propertyField.getLocalArray();
- const PetscInt off = propertyField.sectionOffset(point);
- const PetscInt dof = propertyField.sectionDof(point);
+ topology::VecVisitorMesh propertyVisitor(propertyField);
+ PetscScalar* propertyArray = propertyVisitor.localArray();
+ const PetscInt off = propertyVisitor.sectionOffset(point);
+ const PetscInt dof = propertyVisitor.sectionDof(point);
for(PetscInt d = 0; d < dof; ++d, ++iOff) {
_propsStateVarsVertex[iOff] = propertyArray[off+d];
} // for
- propertyField.restoreLocalArray(&propertyArray);
} // for
for (int i=0; i < _metadata.numStateVars(); ++i) {
const materials::Metadata::ParamDescription& stateVar = _metadata.getStateVar(i);
// TODO This needs to be an integer instead of a string
topology::Field<topology::SubMesh>& stateVarField = _fieldsPropsStateVars->get(stateVar.name.c_str());
-
- PetscScalar* stateVarArray = stateVarField.getLocalArray();
- const PetscInt off = stateVarField.sectionOffset(point);
- const PetscInt dof = stateVarField.sectionDof(point);
+ topology::VecVisitorMesh stateVarVisitor(stateVarField);
+ PetscScalar* stateVarArray = stateVarVisitor.localArray();
+ const PetscInt off = stateVarVisitor.sectionOffset(point);
+ const PetscInt dof = stateVarVisitor.sectionDof(point);
for(PetscInt d = 0; d < dof; ++d, ++iOff) {
_propsStateVarsVertex[iOff] = stateVarArray[off+d];
} // for
- stateVarField.restoreLocalArray(&stateVarArray);
} // for
assert(_propsStateVarsVertex.size() == iOff);
} // retrievePropsStateVars
@@ -371,7 +354,6 @@
const int vertex)
{ // updateStateVars
assert(_fieldsPropsStateVars);
- PetscErrorCode err;
if (0 == _varsFiberDim)
return;
@@ -388,27 +370,25 @@
const materials::Metadata::ParamDescription& property = _metadata.getProperty(i);
// TODO This needs to be an integer instead of a string
topology::Field<topology::SubMesh>& propertyField = _fieldsPropsStateVars->get(property.name.c_str());
-
- PetscScalar* propertyArray = propertyField.getLocalArray();
- const PetscInt off = propertyField.sectionOffset(vertex);
- const PetscInt dof = propertyField.sectionDof(vertex);
+ topology::VecVisitorMesh propertyVisitor(propertyField);
+ PetscScalar* propertyArray = propertyVisitor.localArray();
+ const PetscInt off = propertyVisitor.sectionOffset(vertex);
+ const PetscInt dof = propertyVisitor.sectionDof(vertex);
for(PetscInt d = 0; d < dof; ++d, ++iOff) {
propertyArray[off+d] = _propsStateVarsVertex[iOff];
} // for
- propertyField.restoreLocalArray(&propertyArray);
} // for
for (int i=0; i < _metadata.numStateVars(); ++i) {
const materials::Metadata::ParamDescription& stateVar = _metadata.getStateVar(i);
// TODO This needs to be an integer instead of a string
topology::Field<topology::SubMesh>& stateVarField = _fieldsPropsStateVars->get(stateVar.name.c_str());
-
- PetscScalar* stateVarArray = stateVarField.getLocalArray();
- const PetscInt off = stateVarField.sectionOffset(vertex);
- const PetscInt dof = stateVarField.sectionDof(vertex);
+ topology::VecVisitorMesh stateVarVisitor(stateVarField);
+ PetscScalar* stateVarArray = stateVarVisitor.localArray();
+ const PetscInt off = stateVarVisitor.sectionOffset(vertex);
+ const PetscInt dof = stateVarVisitor.sectionDof(vertex);
for(PetscInt d = 0; d < dof; ++d, ++iOff) {
stateVarArray[off+d] = _propsStateVarsVertex[iOff];
} // for
- stateVarField.restoreLocalArray(&stateVarArray);
} // for
assert(_propsStateVarsVertex.size() == iOff);
} // updateStateVars
More information about the CIG-COMMITS
mailing list