[cig-commits] r6616 - in short/3D/PyLith/trunk: libsrc
libsrc/faults modulesrc/faults pylith pylith/faults
brad at geodynamics.org
brad at geodynamics.org
Thu Apr 19 20:24:09 PDT 2007
Author: brad
Date: 2007-04-19 20:24:08 -0700 (Thu, 19 Apr 2007)
New Revision: 6616
Added:
short/3D/PyLith/trunk/libsrc/faults/BruneSlipFn.cc
short/3D/PyLith/trunk/libsrc/faults/BruneSlipFn.hh
short/3D/PyLith/trunk/libsrc/faults/BruneSlipFn.icc
short/3D/PyLith/trunk/libsrc/faults/SlipTimeFn.cc
short/3D/PyLith/trunk/libsrc/faults/SlipTimeFn.hh
short/3D/PyLith/trunk/pylith/faults/BruneSlipFn.py
short/3D/PyLith/trunk/pylith/faults/SlipTimeFn.py
Modified:
short/3D/PyLith/trunk/libsrc/Makefile.am
short/3D/PyLith/trunk/libsrc/faults/Makefile.am
short/3D/PyLith/trunk/modulesrc/faults/faults.pyxe.src
short/3D/PyLith/trunk/pylith/Makefile.am
short/3D/PyLith/trunk/pylith/faults/Fault.py
short/3D/PyLith/trunk/pylith/faults/FaultCohesive.py
short/3D/PyLith/trunk/pylith/faults/FaultCohesiveKin.py
short/3D/PyLith/trunk/pylith/faults/__init__.py
Log:
Started work on implementing kinematic cohesive elements. Added spatial databases and slip time function to FaultCohesiveKin.
Modified: short/3D/PyLith/trunk/libsrc/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/libsrc/Makefile.am 2007-04-20 02:43:26 UTC (rev 6615)
+++ short/3D/PyLith/trunk/libsrc/Makefile.am 2007-04-20 03:24:08 UTC (rev 6616)
@@ -21,10 +21,12 @@
lib_LTLIBRARIES = libpylith.la
libpylith_la_SOURCES = \
+ faults/BruneSlipFn.cc \
faults/CohesiveTopology.cc \
faults/Fault.cc \
faults/FaultCohesive.cc \
faults/FaultCohesiveKin.cc \
+ faults/SlipTimeFn.cc \
feassemble/ExplicitElasticity.cc \
feassemble/Integrator.cc \
feassemble/IntegratorExplicit.cc \
Added: short/3D/PyLith/trunk/libsrc/faults/BruneSlipFn.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/BruneSlipFn.cc 2007-04-20 02:43:26 UTC (rev 6615)
+++ short/3D/PyLith/trunk/libsrc/faults/BruneSlipFn.cc 2007-04-20 03:24:08 UTC (rev 6616)
@@ -0,0 +1,37 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "BruneSlipFn.hh" // implementation of object methods
+
+// ----------------------------------------------------------------------
+// Default constructor.
+pylith::faults::BruneSlipFn::BruneSlipFn(void)
+{ // constructor
+} // constructor
+
+// ----------------------------------------------------------------------
+// Destructor.
+pylith::faults::BruneSlipFn::~BruneSlipFn(void)
+{ // destructor
+} // destructor
+
+// ----------------------------------------------------------------------
+// Copy constructor.
+pylith::faults::BruneSlipFn::BruneSlipFn(const BruneSlipFn& f) :
+ SlipTimeFn(f)
+{ // copy constructor
+} // copy constructor
+
+
+// End of file
Added: short/3D/PyLith/trunk/libsrc/faults/BruneSlipFn.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/BruneSlipFn.hh 2007-04-20 02:43:26 UTC (rev 6615)
+++ short/3D/PyLith/trunk/libsrc/faults/BruneSlipFn.hh 2007-04-20 03:24:08 UTC (rev 6616)
@@ -0,0 +1,92 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/** @file libsrc/faults/BruneSlipFn.hh
+ *
+ * @brief C++ implementation of Brune slip time function.
+ *
+ * Slip time function follows the integral of Brune's (1907) far-field
+ * time function.
+ *
+ * Normalize slip = 1 - exp(-t/tau)(1 + t/tau),
+ * where tau = finalSlip / (exp(1.0) * peakRate)
+ */
+
+#if !defined(pylith_faults_bruneslipfn_hh)
+#define pylith_faults_bruneslipfn_hh
+
+#include "SlipTimeFn.hh"
+
+/// Namespace for pylith package
+namespace pylith {
+ namespace faults {
+ class BruneSlipFn;
+ class TestBruneSlipFn; // unit testing
+ } // faults
+} // pylith
+
+/// C++ implementation of Brune slip time function.
+class pylith::faults::BruneSlipFn : public SlipTimeFn
+{ // class BruneSlipFn
+ friend class TestBruneSlipFn; // unit testing
+
+ // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+ /// Default constructor.
+ BruneSlipFn(void);
+
+ /// Destructor.
+ virtual
+ ~BruneSlipFn(void);
+
+ /** Create copy of fault.
+ *
+ * @returns Copy of fault.
+ */
+ SlipTimeFn* clone(void) const;
+
+ /** Compute slip using slip time function.
+ *
+ * @param t Time relative to slip starting time at point
+ * @param finalSlip Final slip at point
+ * @param peakRate Peak slip rate at point
+ *
+ * @returns Slip at point at time t
+ */
+ double compute(const double t,
+ const double finalSlip,
+ const double peakRate) const;
+
+ // PROTECTED METHODS //////////////////////////////////////////////////
+protected :
+
+ /** Copy constructor.
+ *
+ * @param f BruneSlipFn to copy
+ */
+ BruneSlipFn(const BruneSlipFn& m);
+
+ // NOT IMPLEMENTED ////////////////////////////////////////////////////
+private :
+
+ /// Not implemented
+ const BruneSlipFn& operator=(const BruneSlipFn& f);
+
+}; // class FaultCohesiveKin
+
+#include "BruneSlipFn.icc" // inline methods
+
+#endif // pylith_faults_bruneslipfn_hh
+
+
+// End of file
Added: short/3D/PyLith/trunk/libsrc/faults/BruneSlipFn.icc
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/BruneSlipFn.icc 2007-04-20 02:43:26 UTC (rev 6615)
+++ short/3D/PyLith/trunk/libsrc/faults/BruneSlipFn.icc 2007-04-20 03:24:08 UTC (rev 6616)
@@ -0,0 +1,45 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#if !defined(pylith_faults_bruneslipfn_hh)
+#error "BruneSlipFn.icc can only be included from BruneSlipFn.hh"
+#endif
+
+#include <math.h> // USES exp()
+#include <assert.h> // USES assert()
+
+// Create copy of fault.
+inline
+pylith::faults::SlipTimeFn*
+pylith::faults::BruneSlipFn::clone(void) const {
+ return new BruneSlipFn(*this);
+} // clone
+
+// Compute slip using slip time function.
+inline
+double
+pylith::faults::BruneSlipFn::compute(const double t,
+ const double finalSlip,
+ const double peakRate) const {
+ double slip = 0.0;
+ if (t > 0) {
+ assert(peakRate > 0.0);
+ const double tau =
+ // prevent 0 == tau when 0 == finalSlip
+ (finalSlip > 0.0) ? finalSlip / (exp(1.0) * peakRate) : 0.1;
+ slip = 1.0 - exp(-t/tau) * (1.0 + t/tau);
+ } // if
+ return slip;
+} // compute
+
+
+// End of file
Modified: short/3D/PyLith/trunk/libsrc/faults/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/Makefile.am 2007-04-20 02:43:26 UTC (rev 6615)
+++ short/3D/PyLith/trunk/libsrc/faults/Makefile.am 2007-04-20 03:24:08 UTC (rev 6616)
@@ -14,12 +14,15 @@
include $(top_srcdir)/subpackage.am
subpkginclude_HEADERS = \
+ BruneSlipFn.hh \
+ BruneSlipFn.icc \
CohesiveTopology.hh \
Fault.hh \
Fault.icc \
FaultCohesive.hh \
FaultCohesiveKin.hh \
- FaultCohesiveKin.icc
+ FaultCohesiveKin.icc \
+ SlipTimeFn.hh
noinst_HEADERS =
Added: short/3D/PyLith/trunk/libsrc/faults/SlipTimeFn.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/SlipTimeFn.cc 2007-04-20 02:43:26 UTC (rev 6615)
+++ short/3D/PyLith/trunk/libsrc/faults/SlipTimeFn.cc 2007-04-20 03:24:08 UTC (rev 6616)
@@ -0,0 +1,36 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "SlipTimeFn.hh" // implementation of object methods
+
+// ----------------------------------------------------------------------
+// Default constructor.
+pylith::faults::SlipTimeFn::SlipTimeFn(void)
+{ // constructor
+} // constructor
+
+// ----------------------------------------------------------------------
+// Destructor.
+pylith::faults::SlipTimeFn::~SlipTimeFn(void)
+{ // destructor
+} // destructor
+
+// ----------------------------------------------------------------------
+// Copy constructor.
+pylith::faults::SlipTimeFn::SlipTimeFn(const SlipTimeFn& f)
+{ // copy constructor
+} // copy constructor
+
+
+// End of file
Added: short/3D/PyLith/trunk/libsrc/faults/SlipTimeFn.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/SlipTimeFn.hh 2007-04-20 02:43:26 UTC (rev 6615)
+++ short/3D/PyLith/trunk/libsrc/faults/SlipTimeFn.hh 2007-04-20 03:24:08 UTC (rev 6616)
@@ -0,0 +1,86 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/** @file libsrc/faults/SlipTimeFn.hh
+ *
+ * @brief C++ abstract base class for kinematic slip time function.
+ *
+ * Interface definition for slip time function.
+ */
+
+#if !defined(pylith_faults_sliptimefn_hh)
+#define pylith_faults_sliptimefn_hh
+
+/// Namespace for pylith package
+namespace pylith {
+ namespace faults {
+ class SlipTimeFn;
+ class TestSlipTimeFn; // unit testing
+ } // faults
+} // pylith
+
+/// C++ abstract base class for Fault object.
+class pylith::faults::SlipTimeFn
+{ // class SlipTimeFn
+ friend class TestSlipTimeFn; // unit testing
+
+ // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+ /// Default constructor.
+ SlipTimeFn(void);
+
+ /// Destructor.
+ virtual
+ ~SlipTimeFn(void);
+
+ /** Create copy of fault.
+ *
+ * @returns Copy of fault.
+ */
+ virtual
+ SlipTimeFn* clone(void) const = 0;
+
+ /** Compute slip using slip time function.
+ *
+ * @param t Time relative to slip starting time at point
+ * @param finalSlip Final slip at point
+ * @param peakRate Peak slip rate at point
+ *
+ * @returns Slip at point at time t
+ */
+ virtual
+ double compute(const double t,
+ const double finalSlip,
+ const double peakRate) const = 0;
+
+ // PROTECTED METHODS //////////////////////////////////////////////////
+protected :
+
+ /** Copy constructor.
+ *
+ * @param f SlipTimeFn to copy
+ */
+ SlipTimeFn(const SlipTimeFn& f);
+
+ // NOT IMPLEMENTED ////////////////////////////////////////////////////
+private :
+
+ /// Not implemented
+ const SlipTimeFn& operator=(const SlipTimeFn& f);
+
+}; // class SlipTimeFn
+
+#endif // pylith_faults_sliptimefn_hh
+
+
+// End of file
Modified: short/3D/PyLith/trunk/modulesrc/faults/faults.pyxe.src
===================================================================
--- short/3D/PyLith/trunk/modulesrc/faults/faults.pyxe.src 2007-04-20 02:43:26 UTC (rev 6615)
+++ short/3D/PyLith/trunk/modulesrc/faults/faults.pyxe.src 2007-04-20 03:24:08 UTC (rev 6616)
@@ -14,6 +14,8 @@
#include "pylith/faults/Fault.hh"
#include "pylith/faults/FaultCohesive.hh"
#include "pylith/faults/FaultCohesiveKin.hh"
+#include "pylith/faults/SlipTimeFn.hh"
+#include "pylith/faults/BruneSlipFn.hh"
#include <assert.h>
#include <stdexcept>
@@ -46,7 +48,19 @@
Fault_destructor_cpp(obj)
return
+cdef void SlipTimeFn_destructor(void* obj):
+ """
+ Destroy SlipTimeFn object.
+ """
+ # create shim for destructor
+ #embed{ void SlipTimeFn_destructor_cpp(void* objVptr)
+ pylith::faults::SlipTimeFn* f = (pylith::faults::SlipTimeFn*) objVptr;
+ delete f;
+ #}embed
+ SlipTimeFn_destructor_cpp(obj)
+ return
+
# ----------------------------------------------------------------------
cdef class Fault:
@@ -196,4 +210,57 @@
return
+# ----------------------------------------------------------------------
+cdef class SlipTimeFn:
+
+ cdef void* thisptr # Pointer to C++ object
+ cdef readonly object handle # PyCObject holding pointer to C++ object
+ cdef readonly object name # Identifier for object base type
+
+ def __init__(self):
+ """
+ Constructor.
+ """
+ self.handle = None
+ self.thisptr = NULL
+ self.name = "pylith_faults_SlipTimeFn"
+ return
+
+
+ def _createHandle(self):
+ """
+ Wrap pointer to C++ object in PyCObject.
+ """
+ return PyCObject_FromVoidPtr(self.thisptr, SlipTimeFn_destructor)
+
+
+# ----------------------------------------------------------------------
+cdef class BruneSlipFn(SlipTimeFn):
+
+ def __init__(self):
+ """
+ Constructor.
+ """
+ # create shim for constructor
+ #embed{ void* BruneSlipFn_constructor()
+ void* result = 0;
+ try {
+ result = (void*)(new pylith::faults::BruneSlipFn);
+ assert(0 != result);
+ } catch (const std::exception& err) {
+ PyErr_SetString(PyExc_RuntimeError,
+ const_cast<char*>(err.what()));
+ } catch (...) {
+ PyErr_SetString(PyExc_RuntimeError,
+ "Caught unknown C++ exception.");
+ } // try/catch
+ return result;
+ #}embed
+
+ SlipTimeFn.__init__(self)
+ self.thisptr = BruneSlipFn_constructor()
+ self.handle = self._createHandle()
+ return
+
+
# End of file
Modified: short/3D/PyLith/trunk/pylith/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/pylith/Makefile.am 2007-04-20 02:43:26 UTC (rev 6615)
+++ short/3D/PyLith/trunk/pylith/Makefile.am 2007-04-20 03:24:08 UTC (rev 6616)
@@ -14,11 +14,13 @@
PyLithApp.py \
__init__.py \
faults/__init__.py \
+ faults/BruneSlipFn.py \
faults/FaultsBin.py \
faults/Fault.py \
faults/FaultCohesive.py \
faults/FaultCohesiveKin.py \
faults/SingleFault.py \
+ faults/SlipTimeFn.py \
feassemble/__init__.py \
feassemble/ExplicitElasticity.py \
feassemble/FIATCell.py \
Added: short/3D/PyLith/trunk/pylith/faults/BruneSlipFn.py
===================================================================
--- short/3D/PyLith/trunk/pylith/faults/BruneSlipFn.py 2007-04-20 02:43:26 UTC (rev 6615)
+++ short/3D/PyLith/trunk/pylith/faults/BruneSlipFn.py 2007-04-20 03:24:08 UTC (rev 6616)
@@ -0,0 +1,53 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+# Brad T. Aagaard
+# U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file pylith/faults/BruneSlipFn.py
+##
+## @brief Python object for slip time function that follows the
+## integral of Brune's (1970) far-field time function.
+##
+## Factory: slip_time_fn
+
+from SlipTimeFn import SlipTimeFn
+
+# BruneSlipFn class
+class BruneSlipFn(SlipTimeFn):
+ """
+ Python object for slip time function that follows the integral of
+ Brune's (1970) far-field time function.
+
+ Factory: slip_time_fn
+ """
+
+ # PUBLIC METHODS /////////////////////////////////////////////////////
+
+ def __init__(self, name="bruneslipfn"):
+ """
+ Constructor.
+ """
+ SlipTimeFn.__init__(self, name)
+ import pylith.faults.faults as bindings
+ self.cppHandle = bindings.BruneSlipFn()
+ return
+
+
+ # PRIVATE METHODS ////////////////////////////////////////////////////
+
+ def _configure(self):
+ """
+ Setup members using inventory.
+ """
+ SlipTimeFn._configure(self)
+ return
+
+
+# End of file
Modified: short/3D/PyLith/trunk/pylith/faults/Fault.py
===================================================================
--- short/3D/PyLith/trunk/pylith/faults/Fault.py 2007-04-20 02:43:26 UTC (rev 6615)
+++ short/3D/PyLith/trunk/pylith/faults/Fault.py 2007-04-20 03:24:08 UTC (rev 6616)
@@ -97,8 +97,8 @@
"Dimensions for quadrature: %d, dimensions for surface: 2" % \
self.quadrature.cell.cellDim
- #self.cppHandle.id = self.id
- #self.cppHandle.label = self.label
+ self.cppHandle.id = self.id
+ self.cppHandle.label = self.label
#self.cppHandle.initialize(mesh.cppHandle, mesh.coordsys.cppHandle,
# self.quadrature.cppHandle)
return
Modified: short/3D/PyLith/trunk/pylith/faults/FaultCohesive.py
===================================================================
--- short/3D/PyLith/trunk/pylith/faults/FaultCohesive.py 2007-04-20 02:43:26 UTC (rev 6615)
+++ short/3D/PyLith/trunk/pylith/faults/FaultCohesive.py 2007-04-20 03:24:08 UTC (rev 6616)
@@ -39,6 +39,14 @@
return
+ def initialize(self, mesh):
+ """
+ Initialize cohesive elements.
+ """
+ Fault.initialize(self, mesh)
+ return
+
+
# PRIVATE METHODS ////////////////////////////////////////////////////
def _configure(self):
Modified: short/3D/PyLith/trunk/pylith/faults/FaultCohesiveKin.py
===================================================================
--- short/3D/PyLith/trunk/pylith/faults/FaultCohesiveKin.py 2007-04-20 02:43:26 UTC (rev 6615)
+++ short/3D/PyLith/trunk/pylith/faults/FaultCohesiveKin.py 2007-04-20 03:24:08 UTC (rev 6616)
@@ -43,10 +43,35 @@
## @li None
##
## \b Facilities
- ## @li None
+ ## @li \b slip Spatial database of final slip
+ ## @li \b slip_rate Spatial database of peak slip rate
+ ## @li \b slip_time Spatial database of slip initiation time
+ ## @li \b slip_function Analytical form for slip time function
import pyre.inventory
+ from spatialdata.spatialdb.SimpleDB import SimpleDB
+
+ slip = pyre.inventory.facility("slip", family="spatial_database",
+ factory=SimpleDB, args=["slip"])
+ slip.meta['tip'] = "Spatial database of final slip."
+
+ slipRate = pyre.inventory.facility("slip_rate", family="spatial_database",
+ factory=SimpleDB,
+ args=["slip rate"])
+ slipRate.meta['tip'] = "Spatial database of peak slip rate."
+
+ slipTime = pyre.inventory.facility("slip_time", family="spatial_database",
+ factory=SimpleDB,
+ args=["slip time"])
+ slipTime.meta['tip'] = "Spatial database of slip initiation time."
+
+ from BruneSlipFn import BruneSlipFn
+ slipFn = pyre.inventory.facility("slip_function", family="slip_time_fn",
+ factory=BruneSlipFn)
+ slipFn.meta['tip'] = "Analytical form for slip time function."
+
+
# PUBLIC METHODS /////////////////////////////////////////////////////
def __init__(self, name="faultcohesivekin"):
@@ -59,6 +84,17 @@
return
+ def initialize(self, mesh):
+ """
+ Initialize cohesive elements.
+ """
+ FaultCohesive.initialize(self, mesh)
+ self.slip.initialize()
+ self.slipRate.initialize()
+ self.slipTime.initialize()
+ return
+
+
# PRIVATE METHODS ////////////////////////////////////////////////////
def _configure(self):
@@ -66,7 +102,20 @@
Setup members using inventory.
"""
FaultCohesive._configure(self)
+ slip = self.inventory.slip
+ slipRate = self.inventory.slipRate
+ slipTime = self.inventory.slipTime
+ slipFn = self.inventory.slipFn
return
+# FACTORIES ////////////////////////////////////////////////////////////
+
+def fault():
+ """
+ Factory associated with FaultCohesiveKin.
+ """
+ return FaultCohesiveKin()
+
+
# End of file
Added: short/3D/PyLith/trunk/pylith/faults/SlipTimeFn.py
===================================================================
--- short/3D/PyLith/trunk/pylith/faults/SlipTimeFn.py 2007-04-20 02:43:26 UTC (rev 6615)
+++ short/3D/PyLith/trunk/pylith/faults/SlipTimeFn.py 2007-04-20 03:24:08 UTC (rev 6616)
@@ -0,0 +1,51 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+# Brad T. Aagaard
+# U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file pylith/faults/SlipTimeFn.py
+##
+
+## @brief Python abstract base class for kinematic slip time function.
+##
+## Factory: slip_time_fn
+
+from pyre.components.Component import Component
+
+# SlipTimeFn class
+class SlipTimeFn(Component):
+ """
+ Python abstract base class for kinematic slip time function.
+
+ Factory: slip_time_fn
+ """
+
+ # PUBLIC METHODS /////////////////////////////////////////////////////
+
+ def __init__(self, name="sliptimefn"):
+ """
+ Constructor.
+ """
+ Component.__init__(self, name, facility="sliptimefn")
+ self.cppHandle = None
+ return
+
+
+ # PRIVATE METHODS ////////////////////////////////////////////////////
+
+ def _configure(self):
+ """
+ Setup members using inventory.
+ """
+ Component._configure(self)
+ return
+
+
+# End of file
Modified: short/3D/PyLith/trunk/pylith/faults/__init__.py
===================================================================
--- short/3D/PyLith/trunk/pylith/faults/__init__.py 2007-04-20 02:43:26 UTC (rev 6615)
+++ short/3D/PyLith/trunk/pylith/faults/__init__.py 2007-04-20 03:24:08 UTC (rev 6616)
@@ -17,7 +17,9 @@
__all__ = ['FaultsBin',
'Fault',
'FaultCohesive',
- 'FaultCohesiveKin']
+ 'FaultCohesiveKin',
+ 'SlipTimeFn',
+ 'BruneSlipFn']
# End of file
More information about the cig-commits
mailing list