[cig-commits] r7241 - short/3D/PyLith/trunk/libsrc/bc
brad at geodynamics.org
brad at geodynamics.org
Thu Jun 14 13:28:50 PDT 2007
Author: brad
Date: 2007-06-14 13:28:50 -0700 (Thu, 14 Jun 2007)
New Revision: 7241
Modified:
short/3D/PyLith/trunk/libsrc/bc/Dirichlet.cc
Log:
Added check to make sure DOF don't get overconstrained with multiple Dirichlet BC.
Modified: short/3D/PyLith/trunk/libsrc/bc/Dirichlet.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/bc/Dirichlet.cc 2007-06-14 18:46:02 UTC (rev 7240)
+++ short/3D/PyLith/trunk/libsrc/bc/Dirichlet.cc 2007-06-14 20:28:50 UTC (rev 7241)
@@ -122,7 +122,17 @@
const int numPoints = _points.size();
_offsetLocal.resize(numPoints);
for (int iPoint=0; iPoint < numPoints; ++iPoint) {
- _offsetLocal[iPoint] = field->getConstraintDimension(_points[iPoint]);
+ const int fiberDim = field->getFiberDimension(_points[iPoint]);
+ const int curNumConstraints = field->getConstraintDimension(_points[iPoint]);
+ if (curNumConstraints + numFixedDOF > fiberDim) {
+ std::ostringstream msg;
+ msg << "Found overly constrained point while setting up constraints for Dirichlet "
+ << "boundary condition '" << _label << "'.\n" << "Number of DOF at point "
+ << _points[iPoint] << " is " << fiberDim << " and number of attempted constraints is "
+ << curNumConstraints+numFixedDOF << ".";
+ throw std::runtime_error(msg.str());
+ } // if
+ _offsetLocal[iPoint] = curNumConstraints;
field->addConstraintDimension(_points[iPoint], numFixedDOF);
} // for
} // setConstraintSizes
More information about the cig-commits
mailing list