[cig-commits] r12021 - in short/3D/PyLith/trunk: libsrc/faults modulesrc/faults pylith/faults unittests/libtests/faults unittests/pytests/faults

brad at geodynamics.org brad at geodynamics.org
Sat May 24 22:01:45 PDT 2008


Author: brad
Date: 2008-05-24 22:01:45 -0700 (Sat, 24 May 2008)
New Revision: 12021

Modified:
   short/3D/PyLith/trunk/libsrc/faults/BruneSlipFn.cc
   short/3D/PyLith/trunk/libsrc/faults/BruneSlipFn.hh
   short/3D/PyLith/trunk/libsrc/faults/EqKinSrc.cc
   short/3D/PyLith/trunk/libsrc/faults/EqKinSrc.hh
   short/3D/PyLith/trunk/libsrc/faults/SlipTimeFn.hh
   short/3D/PyLith/trunk/modulesrc/faults/faults.pyxe.src
   short/3D/PyLith/trunk/pylith/faults/EqKinSrc.py
   short/3D/PyLith/trunk/unittests/libtests/faults/TestBruneSlipFn.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/TestEqKinSrc.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/TestEqKinSrc.hh
   short/3D/PyLith/trunk/unittests/pytests/faults/TestEqKinSrc.py
Log:
Added origin time to earthquake source.

Modified: short/3D/PyLith/trunk/libsrc/faults/BruneSlipFn.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/BruneSlipFn.cc	2008-05-25 02:03:20 UTC (rev 12020)
+++ short/3D/PyLith/trunk/libsrc/faults/BruneSlipFn.cc	2008-05-25 05:01:45 UTC (rev 12021)
@@ -57,7 +57,8 @@
 void
 pylith::faults::BruneSlipFn::initialize(
 				 const ALE::Obj<Mesh>& faultMesh,
-				 const spatialdata::geocoords::CoordSys* cs)
+				 const spatialdata::geocoords::CoordSys* cs,
+				 const double originTime)
 { // initialize
   assert(!faultMesh.isNull());
   assert(0 != cs);
@@ -168,6 +169,8 @@
       msg << ") using spatial database " << _dbSlipTime->label() << ".";
       throw std::runtime_error(msg.str());
     } // if
+    // add origin time to rupture time
+    paramsVertex[indexSlipTime] += originTime;
 
     _parameters->updatePoint(*v_iter, &paramsVertex[0]);
   } // for

Modified: short/3D/PyLith/trunk/libsrc/faults/BruneSlipFn.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/BruneSlipFn.hh	2008-05-25 02:03:20 UTC (rev 12020)
+++ short/3D/PyLith/trunk/libsrc/faults/BruneSlipFn.hh	2008-05-25 05:01:45 UTC (rev 12021)
@@ -77,10 +77,12 @@
   /** Initialize slip time function.
    *
    * @param faultMesh Finite-element mesh of fault.
-   * @param cs Coordinate system for mesh
+   * @param cs Coordinate system for mesh.
+   * @param originTime Origin time for earthquake source.
    */
   void initialize(const ALE::Obj<Mesh>& faultMesh,
-		  const spatialdata::geocoords::CoordSys* cs);
+		  const spatialdata::geocoords::CoordSys* cs,
+		  const double originTime =0.0);
 
   /** Get slip on fault surface at time t.
    *

Modified: short/3D/PyLith/trunk/libsrc/faults/EqKinSrc.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/EqKinSrc.cc	2008-05-25 02:03:20 UTC (rev 12020)
+++ short/3D/PyLith/trunk/libsrc/faults/EqKinSrc.cc	2008-05-25 05:01:45 UTC (rev 12021)
@@ -21,6 +21,7 @@
 // ----------------------------------------------------------------------
 // Default constructor.
 pylith::faults::EqKinSrc::EqKinSrc(void) :
+  _originTime(0.0),
   _slipfn(0)
 { // constructor
 } // constructor
@@ -33,6 +34,22 @@
 } // destructor
 
 // ----------------------------------------------------------------------
+// Set origin time for earthquake source.
+void
+pylith::faults::EqKinSrc::originTime(const double value)
+{ // originTime
+  _originTime = value;
+} // originTime
+
+// ----------------------------------------------------------------------
+// Get origin time for earthquake source.
+double
+pylith::faults::EqKinSrc::originTime(void) const
+{ // originTime
+  return _originTime;
+} // originTime
+
+// ----------------------------------------------------------------------
 // Set slip time function.
 void
 pylith::faults::EqKinSrc::slipfn(SlipTimeFn* slipfn)
@@ -48,7 +65,7 @@
 				  const spatialdata::geocoords::CoordSys* cs)
 { // initialize
   assert(0 != _slipfn);
-  _slipfn->initialize(faultMesh, cs);
+  _slipfn->initialize(faultMesh, cs, _originTime);
 } // initialize
 
 // ----------------------------------------------------------------------

Modified: short/3D/PyLith/trunk/libsrc/faults/EqKinSrc.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/EqKinSrc.hh	2008-05-25 02:03:20 UTC (rev 12020)
+++ short/3D/PyLith/trunk/libsrc/faults/EqKinSrc.hh	2008-05-25 05:01:45 UTC (rev 12021)
@@ -60,6 +60,18 @@
   virtual
   ~EqKinSrc(void);
 
+  /** Set origin time for earthquake source.
+   *
+   * @param value Origin time for earthquake source.
+   */
+  void originTime(const double value);
+
+  /** Get origin time for earthquake source.
+   *
+   * @returns Origin time for earthquake source.
+   */
+  double originTime(void) const;
+
   /** Set slip time function.
    *
    * @param slipfn Slip time function.
@@ -121,6 +133,7 @@
   // PRIVATE MEMBERS ////////////////////////////////////////////////////
 private :
 
+  double _originTime; ///< Origin time for earthquake source
   SlipTimeFn* _slipfn; ///< Slip time function
 
 }; // class EqKinSrc

Modified: short/3D/PyLith/trunk/libsrc/faults/SlipTimeFn.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/SlipTimeFn.hh	2008-05-25 02:03:20 UTC (rev 12020)
+++ short/3D/PyLith/trunk/libsrc/faults/SlipTimeFn.hh	2008-05-25 05:01:45 UTC (rev 12021)
@@ -56,10 +56,12 @@
    *
    * @param faultMesh Finite-element mesh of fault.
    * @param cs Coordinate system for mesh
+   * @param originTime Origin time for earthquake source.
    */
   virtual
   void initialize(const ALE::Obj<Mesh>& faultMesh,
-		  const spatialdata::geocoords::CoordSys* cs) = 0;
+		  const spatialdata::geocoords::CoordSys* cs,
+		  const double originTime =0.0) = 0;
 
   /** Get slip on fault surface at time t.
    *

Modified: short/3D/PyLith/trunk/modulesrc/faults/faults.pyxe.src
===================================================================
--- short/3D/PyLith/trunk/modulesrc/faults/faults.pyxe.src	2008-05-25 02:03:20 UTC (rev 12020)
+++ short/3D/PyLith/trunk/modulesrc/faults/faults.pyxe.src	2008-05-25 05:01:45 UTC (rev 12021)
@@ -788,6 +788,30 @@
     return PyCObject_FromVoidPtr(self.thisptr, EqKinSrc_destructor)
 
 
+  property originTime:
+    def __set__(self, value):
+      """
+      Set origin time for earthquake rupture.
+      """
+      # create shim for method 'originTime'
+      #embed{ void EqKinSrc_originTime_set(void* objVptr, double value)
+      try {
+        assert(0 != objVptr);
+        ((pylith::faults::EqKinSrc*) objVptr)->originTime(value);
+      } catch (const std::exception& err) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        const_cast<char*>(err.what()));
+      } catch (const ALE::Exception& err) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        const_cast<char*>(err.msg().c_str()));
+      } catch (...) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        "Caught unknown C++ exception.");
+      } // try/catch
+      #}embed
+      EqKinSrc_originTime_set(self.thisptr, value)
+
+
   property slipfn:
     def __set__(self, value):
       """

Modified: short/3D/PyLith/trunk/pylith/faults/EqKinSrc.py
===================================================================
--- short/3D/PyLith/trunk/pylith/faults/EqKinSrc.py	2008-05-25 02:03:20 UTC (rev 12020)
+++ short/3D/PyLith/trunk/pylith/faults/EqKinSrc.py	2008-05-25 05:01:45 UTC (rev 12021)
@@ -42,13 +42,17 @@
     ## Python object for managing EqKinSrc facilities and properties.
     ##
     ## \b Properties
-    ## @li None
+    ## @li \b origin_time Origin time for earthquake rupture.
     ##
     ## \b Facilities
     ## @li \b slip_function Slip time history function.
 
     import pyre.inventory
 
+    from pyre.units.time import second
+    originTime = pyre.inventory.dimensional("origin_time", default=0.0*second)
+    originTime.meta['tip'] = "Origin time for earthquake rupture."
+
     from BruneSlipFn import BruneSlipFn
     slipfn = pyre.inventory.facility("slip_function", family="slip_time_fn",
                                      factory=BruneSlipFn)
@@ -73,6 +77,7 @@
     """
     self._setupLogging()
     self._createCppHandle()
+    self.cppHandle.originTime = self.originTime.value
     self.slipfn.preinitialize()
     self.cppHandle.slipfn = self.slipfn.cppHandle
     return
@@ -111,6 +116,7 @@
     Setup members using inventory.
     """
     Component._configure(self)
+    self.originTime = self.inventory.originTime
     self.slipfn = self.inventory.slipfn
     return
 

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestBruneSlipFn.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestBruneSlipFn.cc	2008-05-25 02:03:20 UTC (rev 12020)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestBruneSlipFn.cc	2008-05-25 05:01:45 UTC (rev 12021)
@@ -215,15 +215,16 @@
 				0.0, 0.0};
   const double slipTimeE[] = { 1.2, 1.3 };
   const double peakRateE[] = { 1.4, 1.5 };
+  const double originTime = 5.064;
 
   ALE::Obj<Mesh> faultMesh;
   BruneSlipFn slipfn;
-  _initialize(&faultMesh, &slipfn);
+  _initialize(&faultMesh, &slipfn, originTime);
   
   const int spaceDim = faultMesh->getDimension() + 1;
 
   const double t = 2.134;
-  const ALE::Obj<real_section_type>& slip = slipfn.slip(t, faultMesh);
+  const ALE::Obj<real_section_type>& slip = slipfn.slip(originTime+t, faultMesh);
   CPPUNIT_ASSERT(!slip.isNull());
 
   const double tolerance = 1.0e-06;
@@ -266,16 +267,18 @@
 				0.0, 0.0};
   const double slipTimeE[] = { 1.2, 1.3 };
   const double peakRateE[] = { 1.4, 1.5 };
+  const double originTime = 1.064;
 
   ALE::Obj<Mesh> faultMesh;
   BruneSlipFn slipfn;
-  _initialize(&faultMesh, &slipfn);
+  _initialize(&faultMesh, &slipfn, originTime);
 
   const int spaceDim = faultMesh->getDimension() + 1;
 
   const double t0 = 1.234;
   const double t1 = 3.635;
-  const ALE::Obj<real_section_type>& slip = slipfn.slipIncr(t0, t1, faultMesh);
+  const ALE::Obj<real_section_type>& slip = 
+    slipfn.slipIncr(originTime+t0, originTime+t1, faultMesh);
   CPPUNIT_ASSERT(!slip.isNull());
 
   const double tolerance = 1.0e-06;
@@ -342,7 +345,8 @@
 // Initialize BruneSlipFn.
 void
 pylith::faults::TestBruneSlipFn::_initialize(ALE::Obj<Mesh>* faultMesh,
-					     BruneSlipFn* slipfn)
+					     BruneSlipFn* slipfn,
+					     const double originTime)
 { // _initialize
   assert(0 != slipfn);
 
@@ -396,7 +400,7 @@
   slipfn->dbSlipTime(&dbSlipTime);
   slipfn->dbPeakRate(&dbPeakRate);
   
-  slipfn->initialize(*faultMesh, &cs);
+  slipfn->initialize(*faultMesh, &cs, originTime);
 } // _initialize
 
 // ----------------------------------------------------------------------
@@ -452,7 +456,9 @@
   slipfn.dbSlipTime(&dbSlipTime);
   slipfn.dbPeakRate(&dbPeakRate);
   
-  slipfn.initialize(faultMesh, &cs);
+  const double originTime = 5.353;
+  
+  slipfn.initialize(faultMesh, &cs, originTime);
 
   const double tolerance = 1.0e-06;
 
@@ -480,7 +486,8 @@
     const double slipTime = vals[spaceDim+1];
 
     CPPUNIT_ASSERT_DOUBLES_EQUAL(data.peakRateE[iPoint], peakRate, tolerance);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(data.slipTimeE[iPoint], slipTime, tolerance);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(data.slipTimeE[iPoint]+originTime,
+				 slipTime, tolerance);
   } // for
 } // _testInitialize
 

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestEqKinSrc.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestEqKinSrc.cc	2008-05-25 02:03:20 UTC (rev 12020)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestEqKinSrc.cc	2008-05-25 05:01:45 UTC (rev 12021)
@@ -57,7 +57,8 @@
   ALE::Obj<Mesh> faultMesh;
   EqKinSrc eqsrc;
   BruneSlipFn slipfn;
-  _initialize(&faultMesh, &eqsrc, &slipfn);
+  const double originTime = 2.45;
+  _initialize(&faultMesh, &eqsrc, &slipfn, originTime);
   
   // Don't have access to details of slip time function, so we can't
   // check parameters. Have to rely on test of slip() for verification
@@ -73,16 +74,17 @@
 				2.4, 0.2};
   const double slipTimeE[] = { 1.2, 1.3 };
   const double peakRateE[] = { 1.4, 1.5 };
+  const double originTime = 2.42;
 
   ALE::Obj<Mesh> faultMesh;
   EqKinSrc eqsrc;
   BruneSlipFn slipfn;
-  _initialize(&faultMesh, &eqsrc, &slipfn);
+  _initialize(&faultMesh, &eqsrc, &slipfn, originTime);
   
   const int spaceDim = faultMesh->getDimension() + 1;
 
   const double t = 2.134;
-  const ALE::Obj<real_section_type>& slip = eqsrc.slip(t, faultMesh);
+  const ALE::Obj<real_section_type>& slip = eqsrc.slip(originTime+t, faultMesh);
   CPPUNIT_ASSERT(!slip.isNull());
 
   const double tolerance = 1.0e-06;
@@ -125,18 +127,19 @@
 				2.4, 0.2};
   const double slipTimeE[] = { 1.2, 1.3 };
   const double peakRateE[] = { 1.4, 1.5 };
+  const double originTime = -4.29;
 
   ALE::Obj<Mesh> faultMesh;
   EqKinSrc eqsrc;
   BruneSlipFn slipfn;
-  _initialize(&faultMesh, &eqsrc, &slipfn);
+  _initialize(&faultMesh, &eqsrc, &slipfn, originTime);
   
   const int spaceDim = faultMesh->getDimension() + 1;
 
   const double t0 = 1.234;
   const double t1 = 2.525;
   const ALE::Obj<real_section_type>& slip = 
-    eqsrc.slipIncr(t0, t1, faultMesh);
+    eqsrc.slipIncr(originTime+t0, originTime+t1, faultMesh);
   CPPUNIT_ASSERT(!slip.isNull());
 
   const double tolerance = 1.0e-06;
@@ -179,7 +182,8 @@
 void
 pylith::faults::TestEqKinSrc::_initialize(ALE::Obj<Mesh>* faultMesh,
 					  EqKinSrc* eqsrc,
-					  BruneSlipFn* slipfn)
+					  BruneSlipFn* slipfn,
+					  const double originTime)
 { // _initialize
   const char* meshFilename = "data/tri3.mesh";
   const char* faultLabel = "fault";
@@ -231,6 +235,7 @@
   slipfn->dbSlipTime(&dbSlipTime);
   slipfn->dbPeakRate(&dbPeakRate);
   
+  eqsrc->originTime(originTime);
   eqsrc->slipfn(slipfn);
   eqsrc->initialize(*faultMesh, &cs);
 } // _initialize

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestEqKinSrc.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestEqKinSrc.hh	2008-05-25 02:03:20 UTC (rev 12020)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestEqKinSrc.hh	2008-05-25 05:01:45 UTC (rev 12021)
@@ -82,11 +82,13 @@
    * @param faultMesh Fault mesh.
    * @param eqsrc Earthquake source.
    * @param slipfn Slip time function.
+   * @param originTime Origin time for earthquake rupture.
    */
   static
   void _initialize(ALE::Obj<Mesh>* faultMesh,
 		   EqKinSrc* eqsrc,
-		   BruneSlipFn* slipfn);
+		   BruneSlipFn* slipfn,
+		   const double originTime);
 
 }; // class TestEqKinSrc
 

Modified: short/3D/PyLith/trunk/unittests/pytests/faults/TestEqKinSrc.py
===================================================================
--- short/3D/PyLith/trunk/unittests/pytests/faults/TestEqKinSrc.py	2008-05-25 02:03:20 UTC (rev 12020)
+++ short/3D/PyLith/trunk/unittests/pytests/faults/TestEqKinSrc.py	2008-05-25 05:01:45 UTC (rev 12021)
@@ -40,6 +40,7 @@
     """
     from spatialdata.spatialdb.SimpleDB import SimpleDB
     from spatialdata.spatialdb.SimpleIOAscii import SimpleIOAscii
+    from pyre.units.time import second
 
     ioFinalSlip = SimpleIOAscii()
     ioFinalSlip.filename = "finalslip.spatialdb"
@@ -66,6 +67,7 @@
     slipfn.slipRate = dbPeakRate
 
     eqsrc = EqKinSrc()
+    eqsrc.originTime = 5.3*second
     eqsrc.slipfn = slipfn
     eqsrc.preinitialize()
     eqsrc.initialize()



More information about the cig-commits mailing list