[cig-commits] r20039 - short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/faults

brad at geodynamics.org brad at geodynamics.org
Thu May 3 17:46:29 PDT 2012


Author: brad
Date: 2012-05-03 17:46:29 -0700 (Thu, 03 May 2012)
New Revision: 20039

Added:
   short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/faults/Nucleator.cc
   short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/faults/Nucleator.hh
   short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/faults/StaticPerturbation.cc
   short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/faults/StaticPerturbation.hh
   short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/faults/StaticPerturbation.icc
   short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/faults/TractPerturbation.cc
   short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/faults/TractPerturbation.hh
Log:
Started work on modular nucleation for spontaneous ruptures.

Added: short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/faults/Nucleator.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/faults/Nucleator.cc	                        (rev 0)
+++ short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/faults/Nucleator.cc	2012-05-04 00:46:29 UTC (rev 20039)
@@ -0,0 +1,110 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// Brad T. Aagaard, U.S. Geological Survey
+// Charles A. Williams, GNS Science
+// Matthew G. Knepley, University of Chicago
+//
+// This code was developed as part of the Computational Infrastructure
+// for Geodynamics (http://geodynamics.org).
+//
+// Copyright (c) 2010-2012 University of California, Davis
+//
+// See COPYING for license information.
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "Nucleator.hh" // implementation of object methods
+
+#include "TractPerturbation.hh" // USES SlipTimeFn
+
+#include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
+
+#include <cassert> // USES assert()
+
+// ----------------------------------------------------------------------
+// Default constructor.
+pylith::faults::Nucleator::Nucleator(void) :
+  _originTime(0.0),
+  _tractfn(0)
+{ // constructor
+} // constructor
+
+// ----------------------------------------------------------------------
+// Destructor.
+pylith::faults::Nucleator::~Nucleator(void)
+{ // destructor
+  deallocate();
+} // destructor
+
+// ----------------------------------------------------------------------
+// Deallocate PETSc and local data structures.
+void 
+pylith::faults::Nucleator::deallocate(void)
+{ // deallocate
+  _tractfn = 0; // :TODO: Use shared pointer.
+} // deallocate
+  
+// ----------------------------------------------------------------------
+// Set origin time for earthquake source.
+void
+pylith::faults::Nucleator::originTime(const PylithScalar value)
+{ // originTime
+  _originTime = value;
+} // originTime
+
+// ----------------------------------------------------------------------
+// Get origin time for earthquake source.
+PylithScalar
+pylith::faults::Nucleator::originTime(void) const
+{ // originTime
+  return _originTime;
+} // originTime
+
+// ----------------------------------------------------------------------
+// Set slip time function.
+void
+pylith::faults::Nucleator::perturbationFn(TractPerturbation* tractfn)
+{ // perturbationFn
+  _tractfn = tractfn; // :TODO: Use shared pointer.
+} // perturbationFn
+
+// ----------------------------------------------------------------------
+// Initialize slip time function.
+void
+pylith::faults::Nucleator::initialize(
+			   const topology::SubMesh& faultMesh,
+			   const spatialdata::units::Nondimensional& normalizer)
+{ // initialize
+  // :TODO: Normalize origin time in Python?
+  normalizer.nondimensionalize(&_originTime, 1, normalizer.timeScale());
+  assert(_tractfn);
+  _tractfn->initialize(faultMesh, normalizer);
+} // initialize
+
+// ----------------------------------------------------------------------
+// Get slip on fault surface at time t.
+void
+pylith::faults::Nucleator::traction(
+			   topology::Field<topology::SubMesh>* const tractionField,
+			   const PylithScalar t)
+{ // slip
+  assert(_tractfn);
+  _tractfn->traction(tractionField, t-_originTime);
+} // slip
+
+// ----------------------------------------------------------------------
+// Get amplitude of spatial variation of traction.
+const pylith::topology::Field<pylith::topology::SubMesh>&
+pylith::faults::Nucleator::tractionAmp(void) const
+{ // finalSlip
+  assert(_tractfn);
+  return _tractfn->amplitude();
+} // tractionAmp
+
+
+// End of file 

Added: short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/faults/Nucleator.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/faults/Nucleator.hh	                        (rev 0)
+++ short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/faults/Nucleator.hh	2012-05-04 00:46:29 UTC (rev 20039)
@@ -0,0 +1,115 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// Brad T. Aagaard, U.S. Geological Survey
+// Charles A. Williams, GNS Science
+// Matthew G. Knepley, University of Chicago
+//
+// This code was developed as part of the Computational Infrastructure
+// for Geodynamics (http://geodynamics.org).
+//
+// Copyright (c) 2010-2012 University of California, Davis
+//
+// See COPYING for license information.
+//
+// ----------------------------------------------------------------------
+//
+
+/** @file libsrc/faults/Nucleator.hh
+ *
+ * @brief C++ object for managing traction perturbations on faults
+ * with spontaneous rupture.
+ */
+
+#if !defined(pylith_faults_nucleator_hh)
+#define pylith_faults_nucleator_hh
+
+// Include directives ---------------------------------------------------
+#include "faultsfwd.hh" // forward declarations
+
+#include "pylith/topology/topologyfwd.hh" // USES Field<SubMesh>
+
+#include "spatialdata/units/unitsfwd.hh" // USES Nondimensional
+
+// Nucleator -------------------------------------------------------------
+/** @brief Traction perturbations on faults with spontaneous rupture.
+ *
+ * Nucleator is responsible for providing perturbations in the
+ * traction field over a fault surface at time t.
+ */
+class pylith::faults::Nucleator
+{ // class Nucleator
+  friend class TestNucleator; // unit testing
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Default constructor.
+  Nucleator(void);
+
+  /// Destructor.
+  ~Nucleator(void);
+
+  /// Deallocate PETSc and local data structures.
+  virtual
+  void deallocate(void);
+  
+  /** Set origin time for perturbation.
+   *
+   * @param value Origin time for perturbation.
+   */
+  void originTime(const PylithScalar value);
+
+  /** Get origin time for perturbation.
+   *
+   * @returns Origin time for perturbation.
+   */
+  PylithScalar originTime(void) const;
+
+  /** Set traction perturbation.
+   *
+   * @param tractfn Traction perturbation function.
+   */
+  void perturbationFn(TractPerturbation* tractfn);
+
+  /** Initialize traction perturbation function.
+   *
+   * @param faultMesh Finite-element mesh of fault.
+   * @param normalizer Nondimensionalization of scales.
+   */
+  void initialize(const topology::SubMesh& faultMesh,
+		  const spatialdata::units::Nondimensional& normalizer);
+
+  /** Get traction perturbation on fault surface at time t.
+   *
+   * @param tractionField Traction field over fault mesh.
+   * @param t Time t.
+   */
+  void traction(topology::Field<topology::SubMesh>* const tractionField,
+		const PylithScalar t);
+
+  /** Get amplitude of spatial variation of traction.
+   *
+   * @returns Spatial variation of traction amplitude.
+   */
+  const topology::Field<topology::SubMesh>& tractionAmp(void) const;
+
+  // NOT IMPLEMENTED ////////////////////////////////////////////////////
+private :
+
+  Nucleator(const Nucleator&); ///< Not implemented
+  const Nucleator& operator=(const Nucleator&); ///< Not implemented
+
+  // PRIVATE MEMBERS ////////////////////////////////////////////////////
+private :
+
+  PylithScalar _originTime; ///< Origin time for traction perturbation.
+  TractPerturbation* _tractfn; ///< Traction perturbation function.
+
+}; // class Nucleator
+
+#endif // pylith_faults_nucleator_hh
+
+
+// End of file 

Added: short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/faults/StaticPerturbation.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/faults/StaticPerturbation.cc	                        (rev 0)
+++ short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/faults/StaticPerturbation.cc	2012-05-04 00:46:29 UTC (rev 20039)
@@ -0,0 +1,222 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// Brad T. Aagaard, U.S. Geological Survey
+// Charles A. Williams, GNS Science
+// Matthew G. Knepley, University of Chicago
+//
+// This code was developed as part of the Computational Infrastructure
+// for Geodynamics (http://geodynamics.org).
+//
+// Copyright (c) 2010-2012 University of California, Davis
+//
+// See COPYING for license information.
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "StaticPerturbation.hh" // implementation of object methods
+
+#include "pylith/topology/SubMesh.hh" // USES SubMesh
+#include "pylith/topology/Fields.hh" // USES Fields
+#include "pylith/topology/Field.hh" // USES Field
+
+#include "spatialdata/spatialdb/SpatialDB.hh" // USES SpatialDB
+#include "spatialdata/geocoords/CoordSys.hh" // USES CoordSys
+#include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
+
+#include <cassert> // USES assert()
+#include <sstream> // USES std::ostringstream
+#include <stdexcept> // USES std::runtime_error
+
+// ----------------------------------------------------------------------
+typedef pylith::topology::SubMesh::SieveMesh SieveMesh;
+typedef pylith::topology::SubMesh::SieveMesh::label_sequence label_sequence;
+typedef pylith::topology::SubMesh::RealSection RealSection;
+
+// ----------------------------------------------------------------------
+// Default constructor.
+pylith::faults::StaticPerturbation::StaticPerturbation(void) :
+  _dbAmplitude(0)
+{ // constructor
+} // constructor
+
+// ----------------------------------------------------------------------
+// Destructor.
+pylith::faults::StaticPerturbation::~StaticPerturbation(void)
+{ // destructor
+  deallocate();
+} // destructor
+
+// ----------------------------------------------------------------------
+// Deallocate PETSc and local data structures.
+void 
+pylith::faults::StaticPerturbation::deallocate(void)
+{ // deallocate
+  TractPerturbation::deallocate();
+
+  _dbAmplitude = 0; // :TODO: Use shared pointer
+} // deallocate
+  
+// ----------------------------------------------------------------------
+// Set spatial database for amplitude of traction.
+void
+pylith::faults::StaticPerturbation::dbAmplitude(spatialdata::spatialdb::SpatialDB* const db) {
+  _dbAmplitude = db;
+} // dbAmplitude
+
+// ----------------------------------------------------------------------
+// Initialize traction perturbation function.
+void
+pylith::faults::StaticPerturbation::initialize(
+			    const topology::SubMesh& faultMesh,
+			    const spatialdata::units::Nondimensional& normalizer)
+{ // initialize
+  assert(_dbAmplitude);
+
+  const spatialdata::geocoords::CoordSys* cs = faultMesh.coordsys();
+  assert(cs);
+  const int spaceDim = cs->spaceDim();
+
+  const PylithScalar lengthScale = normalizer.lengthScale();
+  const PylithScalar timeScale = normalizer.timeScale();
+  const PylithScalar pressureScale = normalizer.pressureScale();
+
+  // Memory logging
+  ALE::MemoryLogger& logger = ALE::MemoryLogger::singleton();
+  logger.stagePush("Fault");
+
+  // Get vertices in fault mesh
+  const ALE::Obj<SieveMesh>& sieveMesh = faultMesh.sieveMesh();
+  assert(!sieveMesh.isNull());
+  const ALE::Obj<label_sequence>& vertices = sieveMesh->depthStratum(0);
+  assert(!vertices.isNull());
+  const label_sequence::iterator verticesBegin = vertices->begin();
+  const label_sequence::iterator verticesEnd = vertices->end();
+
+  delete _parameters; _parameters = new topology::Fields<topology::Field<topology::SubMesh> >(faultMesh);
+  assert(_parameters);
+  _parameters->add("amplitude", "amplitude");
+
+  topology::Field<topology::SubMesh>& amplitude = _parameters->get("amplitude");
+  amplitude.newSection(vertices, spaceDim);
+  amplitude.allocate();
+  amplitude.scale(pressureScale);
+  amplitude.vectorFieldType(topology::FieldBase::VECTOR);
+  const ALE::Obj<RealSection>& amplitudeSection = amplitude.section();
+  assert(!amplitudeSection.isNull());  
+
+  logger.stagePop();
+
+  // Open databases and set query values
+  _dbAmplitude->open();
+  switch (spaceDim)
+    { // switch
+    case 1 : {
+      const char* tractionValues[1] = {"traction-normal"};
+      _dbAmplitude->queryVals(tractionValues, 1);
+      break;
+    } // case 1
+    case 2 : {
+      const char* tractionValues[2] = {"traction-shear", "traction-normal"};
+      _dbAmplitude->queryVals(tractionValues, 2);
+      break;
+    } // case 2
+    case 3 : {
+      const char* tractionValues[3] = {"traction-shear-leftlateral", 
+				   "traction-shear-updip",
+				   "traction-normal"};
+      _dbAmplitude->queryVals(tractionValues, 3);
+      break;
+    } // case 3
+    default :
+      std::cerr << "Bad spatial dimension '" << spaceDim << "'." << std::endl;
+      assert(0);
+      throw std::logic_error("Bad spatial dimension in StaticPerturbation.");
+    } // switch
+
+  // Get coordinates of vertices
+  const ALE::Obj<RealSection>& coordinates = sieveMesh->getRealSection("coordinates");
+  assert(!coordinates.isNull());
+
+  scalar_array tractionVertex(spaceDim);
+  scalar_array vCoordsGlobal(spaceDim);  
+  for (label_sequence::iterator v_iter=verticesBegin;
+       v_iter != verticesEnd;
+       ++v_iter) {
+    coordinates->restrictPoint(*v_iter, &vCoordsGlobal[0], vCoordsGlobal.size());
+    normalizer.dimensionalize(&vCoordsGlobal[0], vCoordsGlobal.size(), lengthScale);
+        
+    int err = _dbAmplitude->query(&tractionVertex[0], tractionVertex.size(), 
+				  &vCoordsGlobal[0], vCoordsGlobal.size(), cs);
+    if (err) {
+      std::ostringstream msg;
+      msg << "Could not find traction at (";
+      for (int i=0; i < spaceDim; ++i)
+	msg << "  " << vCoordsGlobal[i];
+      msg << ") using spatial database " << _dbAmplitude->label() << ".";
+      throw std::runtime_error(msg.str());
+    } // if
+    normalizer.nondimensionalize(&tractionVertex[0], tractionVertex.size(), pressureScale);
+
+    assert(spaceDim == amplitudeSection->getFiberDimension(*v_iter));
+    amplitudeSection->updatePoint(*v_iter, &tractionVertex[0]);
+  } // for
+
+  // Close databases
+  _dbAmplitude->close();
+} // initialize
+
+// ----------------------------------------------------------------------
+// Get traction on fault surface at time t.
+void
+pylith::faults::StaticPerturbation::traction(topology::Field<topology::SubMesh>* tractionField,
+				 const PylithScalar t)
+{ // traction
+  assert(tractionField);
+  assert(_parameters);
+
+  const spatialdata::geocoords::CoordSys* cs = tractionField->mesh().coordsys();
+  assert(cs);
+  const int spaceDim = cs->spaceDim();
+
+  // Get vertices in fault mesh
+  const ALE::Obj<SieveMesh>& sieveMesh = tractionField->mesh().sieveMesh();
+  assert(!sieveMesh.isNull());
+  const ALE::Obj<label_sequence>& vertices = sieveMesh->depthStratum(0);
+  assert(!vertices.isNull());
+  const label_sequence::iterator verticesBegin = vertices->begin();
+  const label_sequence::iterator verticesEnd = vertices->end();
+
+  // Get sections
+  const ALE::Obj<RealSection>& amplitudeSection = _parameters->get("amplitude").section();
+  assert(!amplitudeSection.isNull());
+  const ALE::Obj<RealSection>& tractionSection = tractionField->section();
+  assert(!tractionSection.isNull());
+
+  for (label_sequence::iterator v_iter=verticesBegin;
+       v_iter != verticesEnd;
+       ++v_iter) {
+    assert(spaceDim == amplitudeSection->getFiberDimension(*v_iter));
+    const PylithScalar* amplitudeVertex = amplitudeSection->restrictPoint(*v_iter);
+
+    // Update field
+    assert(spaceDim == tractionSection->getFiberDimension(*v_iter));
+    tractionSection->updateAddPoint(*v_iter, &amplitudeVertex[0]);
+  } // for
+
+} // traction
+
+// ----------------------------------------------------------------------
+// Get traction amplitude..
+const pylith::topology::Field<pylith::topology::SubMesh>&
+pylith::faults::StaticPerturbation::amplitude(void)
+{ // amplitude
+  return _parameters->get("amplitude");
+} // amplitude
+
+
+// End of file 

Added: short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/faults/StaticPerturbation.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/faults/StaticPerturbation.hh	                        (rev 0)
+++ short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/faults/StaticPerturbation.hh	2012-05-04 00:46:29 UTC (rev 20039)
@@ -0,0 +1,102 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// Brad T. Aagaard, U.S. Geological Survey
+// Charles A. Williams, GNS Science
+// Matthew G. Knepley, University of Chicago
+//
+// This code was developed as part of the Computational Infrastructure
+// for Geodynamics (http://geodynamics.org).
+//
+// Copyright (c) 2010-2012 University of California, Davis
+//
+// See COPYING for license information.
+//
+// ----------------------------------------------------------------------
+//
+
+/** @file libsrc/faults/StaticPerturbation.hh
+ *
+ * @brief C++ implementation of a static perturbation in tractions.
+ */
+
+#if !defined(pylith_faults_staticperturbation_hh)
+#define pylith_faults_staticperturbation_hh
+
+// Include directives ---------------------------------------------------
+#include "TractPerturbation.hh"
+
+#include "pylith/utils/array.hh" // HASA scalar_array
+
+#include "spatialdata/spatialdb/spatialdbfwd.hh"
+
+// StaticPerturbation -----------------------------------------------------------
+/**
+ * @brief C++ implementation of a static perturbation in tractions.
+ *
+ * T = F(x)
+*/
+class pylith::faults::StaticPerturbation : public TractPerturbation
+{ // class StaticPerturbation
+  friend class TestStaticPerturbation; // unit testing
+
+// PUBLIC METHODS ///////////////////////////////////////////////////////
+public :
+
+  /// Default constructor.
+  StaticPerturbation(void);
+
+  /// Destructor.
+  ~StaticPerturbation(void);
+
+  /// Deallocate PETSc and local data structures.
+  virtual
+  void deallocate(void);
+  
+  /** Set spatial database for traction amplitude.
+   *
+   * @param db Spatial database
+   */
+  void dbAmplitude(spatialdata::spatialdb::SpatialDB* const db);
+  
+  /** Initialize static perturbation.
+   *
+   * @param faultMesh Finite-element mesh of fault.
+   * @param normalizer Nondimensionalization of scales.
+   */
+  void initialize(const topology::SubMesh& faultMesh,
+		  const spatialdata::units::Nondimensional& normalizer);
+  
+  /** Get traction on fault surface at time t.
+   *
+   * @param tractionField Traction field over fault surface.
+   * @param t Time t.
+   */
+  void traction(topology::Field<topology::SubMesh>* const tractionField,
+		const PylithScalar t);
+  
+  /** Get amplitude of traction perturbation.
+   *
+   * @returns Final slip.
+   */
+  const topology::Field<topology::SubMesh>& amplitude(void);
+
+// NOT IMPLEMENTED //////////////////////////////////////////////////////
+private :
+
+  StaticPerturbation(const StaticPerturbation&); ///< Not implemented.
+  const StaticPerturbation& operator=(const StaticPerturbation&); ///< Not implemented
+
+// PRIVATE MEMBERS //////////////////////////////////////////////////////
+private :
+
+  /// Spatial database for traction perturbation.
+  spatialdata::spatialdb::SpatialDB* _dbAmplitude;
+
+}; // class StaticPerturbation
+
+#endif // pylith_faults_staticperturbation_hh
+
+
+// End of file 

Added: short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/faults/StaticPerturbation.icc
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/faults/StaticPerturbation.icc	                        (rev 0)
+++ short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/faults/StaticPerturbation.icc	2012-05-04 00:46:29 UTC (rev 20039)
@@ -0,0 +1,38 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// Brad T. Aagaard, U.S. Geological Survey
+// Charles A. Williams, GNS Science
+// Matthew G. Knepley, University of Chicago
+//
+// This code was developed as part of the Computational Infrastructure
+// for Geodynamics (http://geodynamics.org).
+//
+// Copyright (c) 2010-2011 University of California, Davis
+//
+// See COPYING for license information.
+//
+// ----------------------------------------------------------------------
+//
+
+#if !defined(pylith_faults_stepslipfn_hh)
+#error "StepSlipFn.icc can only be included from StepSlipFn.hh"
+#endif
+
+// Set spatial database for final slip.
+inline
+void
+pylith::faults::StepSlipFn::dbFinalSlip(spatialdata::spatialdb::SpatialDB* const db) {
+  _dbFinalSlip = db;
+} // dbFinalSlip
+
+// Set spatial database for slip initiation time.
+inline
+void
+pylith::faults::StepSlipFn::dbSlipTime(spatialdata::spatialdb::SpatialDB* const db) {
+  _dbSlipTime = db;
+} // dbSlipTime
+
+
+// End of file 

Added: short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/faults/TractPerturbation.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/faults/TractPerturbation.cc	                        (rev 0)
+++ short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/faults/TractPerturbation.cc	2012-05-04 00:46:29 UTC (rev 20039)
@@ -0,0 +1,58 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// Brad T. Aagaard, U.S. Geological Survey
+// Charles A. Williams, GNS Science
+// Matthew G. Knepley, University of Chicago
+//
+// This code was developed as part of the Computational Infrastructure
+// for Geodynamics (http://geodynamics.org).
+//
+// Copyright (c) 2010-2012 University of California, Davis
+//
+// See COPYING for license information.
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TractPerturbation.hh" // implementation of object methods
+
+#include "pylith/topology/SubMesh.hh" // USES SubMesh
+#include "pylith/topology/Fields.hh" // USES Fields
+#include "pylith/topology/Field.hh" // USES Field
+
+// ----------------------------------------------------------------------
+// Default constructor.
+pylith::faults::TractPerturbation::TractPerturbation(void) :
+  _parameters(0)
+{ // constructor
+} // constructor
+
+// ----------------------------------------------------------------------
+// Destructor.
+pylith::faults::TractPerturbation::~TractPerturbation(void)
+{ // destructor
+  deallocate();
+} // destructor
+
+// ----------------------------------------------------------------------
+// Deallocate PETSc and local data structures.
+void 
+pylith::faults::TractPerturbation::deallocate(void)
+{ // deallocate
+  delete _parameters; _parameters = 0;
+} // deallocate
+  
+// ----------------------------------------------------------------------
+// Get parameter fields.
+const pylith::topology::Fields<pylith::topology::Field<pylith::topology::SubMesh> >*
+pylith::faults::TractPerturbation::parameterFields(void) const
+{ // parameterFields
+  return _parameters;
+} // parameterFields
+
+
+// End of file 

Added: short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/faults/TractPerturbation.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/faults/TractPerturbation.hh	                        (rev 0)
+++ short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/faults/TractPerturbation.hh	2012-05-04 00:46:29 UTC (rev 20039)
@@ -0,0 +1,109 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// Brad T. Aagaard, U.S. Geological Survey
+// Charles A. Williams, GNS Science
+// Matthew G. Knepley, University of Chicago
+//
+// This code was developed as part of the Computational Infrastructure
+// for Geodynamics (http://geodynamics.org).
+//
+// Copyright (c) 2010-2012 University of California, Davis
+//
+// See COPYING for license information.
+//
+// ----------------------------------------------------------------------
+//
+
+/** @file libsrc/faults/TractPerturbation.hh
+ *
+ * @brief C++ abstract base class for traction perturbation function.
+ */
+
+#if !defined(pylith_faults_tractperturbation_hh)
+#define pylith_faults_tractperturbation_hh
+
+// Include directives ---------------------------------------------------
+#include "faultsfwd.hh" // forward declarations
+
+#include "pylith/topology/topologyfwd.hh" // USES Fields<SubMesh>
+
+#include "spatialdata/units/unitsfwd.hh" // USES Nondimensional
+
+// TractPerturbation -----------------------------------------------------------
+/**
+ * @brief Abstract base class for traction perturbation function.
+ *
+ * Interface definition for traction perturbation function.
+ */
+class pylith::faults::TractPerturbation
+{ // class TractPerturbation
+  friend class TestTractPerturbation; // unit testing
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Default constructor.
+  TractPerturbation(void);
+
+  /// Destructor.
+  virtual
+  ~TractPerturbation(void);
+
+  /// Deallocate PETSc and local data structures.
+  virtual
+  void deallocate(void);
+  
+  /** Initialize slip time function.
+   *
+   * @param faultMesh Finite-element mesh of fault.
+   * @param cs Coordinate system for mesh
+   * @param normalizer Nondimensionalization of scales.
+   * @param originTime Origin time for earthquake source.
+   */
+  virtual
+  void initialize(const topology::SubMesh& faultMesh,
+		  const spatialdata::units::Nondimensional& normalizer) = 0;
+
+  /** Get traction perturbation on fault surface at time t.
+   *
+   * @param tractionField Traction field over fault surface.
+   * @param t Time t.
+   */
+  virtual
+  void traction(topology::Field<topology::SubMesh>* const tractionField,
+		const PylithScalar t) = 0;
+  
+  /** Get amplitude of traction perturbation.
+   *
+   * @returns Traction field.
+   */
+  virtual
+  const topology::Field<topology::SubMesh>& amplitude(void) = 0;
+
+  /** Get parameter fields.
+   *
+   * @returns Parameter fields.
+   */
+  const topology::Fields<topology::Field<topology::SubMesh> >*
+  parameterFields(void) const;
+
+// PROTECTED MEMBERS ////////////////////////////////////////////////////
+protected :
+
+  /// Parameters for slip time function.
+  topology::Fields<topology::Field<topology::SubMesh> >* _parameters;
+
+  // NOT IMPLEMENTED ////////////////////////////////////////////////////
+private :
+
+  TractPerturbation(const TractPerturbation&); ///< Not implemented
+  const TractPerturbation& operator=(const TractPerturbation&); ///< Not implemented
+
+}; // class TractPerturbation
+
+#endif // pylith_faults_tractperturbation_hh
+
+
+// End of file 



More information about the CIG-COMMITS mailing list