[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