[cig-commits] r7224 - in short/3D/PyLith/trunk: libsrc/faults
libsrc/feassemble unittests/libtests/feassemble
unittests/pytests/feassemble
brad at geodynamics.org
brad at geodynamics.org
Wed Jun 13 21:09:17 PDT 2007
Author: brad
Date: 2007-06-13 21:09:16 -0700 (Wed, 13 Jun 2007)
New Revision: 7224
Modified:
short/3D/PyLith/trunk/libsrc/faults/FaultCohesive.cc
short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.cc
short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.hh
short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.icc
short/3D/PyLith/trunk/libsrc/feassemble/Quadrature0D.cc
short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1D.cc
short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din2D.cc
short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din3D.cc
short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.cc
short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2Din3D.cc
short/3D/PyLith/trunk/libsrc/feassemble/Quadrature3D.cc
short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature.cc
short/3D/PyLith/trunk/unittests/pytests/feassemble/TestQuadrature.icc
Log:
Isolated bug in computing derivatives of basis functions. Need to use inverse of Jacobian to get derivatives with respect to global coordinates. Fix implemented but need to verify fix before turning it on in code (currently commented out with defines).
Modified: short/3D/PyLith/trunk/libsrc/faults/FaultCohesive.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/FaultCohesive.cc 2007-06-14 01:38:16 UTC (rev 7223)
+++ short/3D/PyLith/trunk/libsrc/faults/FaultCohesive.cc 2007-06-14 04:09:16 UTC (rev 7224)
@@ -16,8 +16,6 @@
#include "CohesiveTopology.hh" // USES CohesiveTopology::create()
-#include "pylith/feassemble/Quadrature.hh" // USES Quadrature
-
#include "pylith/utils/sievetypes.hh" // USES PETSc Mesh
#include "pylith/utils/array.hh" // USES double_array
Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.cc 2007-06-14 01:38:16 UTC (rev 7223)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.cc 2007-06-14 04:09:16 UTC (rev 7224)
@@ -49,7 +49,10 @@
_quadPts(q._quadPts),
_quadWts(q._quadWts),
_basis(q._basis),
+ _basisDerivRef(q._basisDerivRef),
+#if 0
_basisDeriv(q._basisDeriv),
+#endif
_jacobian(q._jacobian),
_jacobianInv(q._jacobianInv),
_jacobianDet(q._jacobianDet),
@@ -69,7 +72,7 @@
void
pylith::feassemble::Quadrature::initialize(const double* vertices,
const double* basis,
- const double* basisDeriv,
+ const double* basisDerivRef,
const double* quadPtsRef,
const double* quadWts,
const int cellDim,
@@ -79,7 +82,7 @@
{ // initialize
if (0 == vertices ||
0 == basis ||
- 0 == basisDeriv ||
+ 0 == basisDerivRef ||
0 == quadPtsRef ||
0 == quadWts ||
cellDim < 0 || cellDim > 3 ||
@@ -93,7 +96,7 @@
<< "Values:\n"
<< " vertices pointer: " << vertices << "\n"
<< " basis pointer: " << basis << "\n"
- << " basis derivatites pointer: " << basisDeriv << "\n"
+ << " basis derivatites pointer: " << basisDerivRef << "\n"
<< " quadrature points pointer: " << quadPtsRef << "\n"
<< " quadrature weights pointer: " << quadWts << "\n"
<< " space dimension: " << spaceDim << "\n"
@@ -115,9 +118,9 @@
_basis[i] = basis[i];
size = numBasis * numQuadPts * cellDim;
- _basisDeriv.resize(size);
+ _basisDerivRef.resize(size);
for (int i=0; i < size; ++i)
- _basisDeriv[i] = basisDeriv[i];
+ _basisDerivRef[i] = basisDerivRef[i];
size = numQuadPts * cellDim;
_quadPtsRef.resize(size);
@@ -143,6 +146,12 @@
size = numQuadPts;
_jacobianDet.resize(size);
+#if 0
+ // Allocate for basis derivatives (in global coordinates)
+ size = numBasis * numQuadPts * spaceDim;
+ _basisDeriv.resize(size);
+#endif
+
// Allocate for quad pts
size = numQuadPts*spaceDim;
_quadPts.resize(size);
@@ -172,9 +181,9 @@
_basis[i] = basis[i];
size = 1;
- _basisDeriv.resize(size);
+ _basisDerivRef.resize(size);
for (int i=0; i < size; ++i)
- _basisDeriv[i] = basisDeriv[i];
+ _basisDerivRef[i] = basisDerivRef[i];
size = 1;
_quadPtsRef.resize(size);
@@ -200,6 +209,12 @@
size = 1;
_jacobianDet.resize(size);
+#if 0
+ // Allocate for basis derivatives (in global coordinates)
+ size = numBasis * numQuadPts * spaceDim;
+ _basisDeriv.resize(size);
+#endif
+
// Allocate for quad pts
size = spaceDim;
_quadPts.resize(size);
Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.hh 2007-06-14 01:38:16 UTC (rev 7223)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.hh 2007-06-14 04:09:16 UTC (rev 7224)
@@ -79,18 +79,19 @@
* size = numQuadPts * numBasis
* index = iQuadPt*numBasis + iBasis
*
- * @param basisDeriv Array of basis function derivaties evaluated
- * at quadrature pts
- * N0xQp0, N0yQp0, N0zQp0, N1xQp0, N1yQp0, N1zQp0, ...
- * N0xQp1, N0yQp1, N0zQp1, N1xQp1, N1yQp1, N1zQp1, ...
+ * @param basisDerivRef Array of basis function derivaties evaluated at
+ * quadrature pts, where derivatives are with respect to cell's
+ * local coordinates.
+ * N0pQp0, N0qQp0, N0rQp0, N1pQp0, N1qQp0, N1rQp0, ...
+ * N0pQp1, N0qQp1, N0rQp1, N1pQp1, N1qQp1, N1rQp1, ...
* ...
* size = numQuadPts * numBasis * cellDim
* index = iQuadPt*numBasis*cellDim + iBasis*cellDim + iDim
*
* @param quadPts Array of coordinates of quadrature points in
* reference cell
- * Qp0x, Qp0y, Qp0z
- * Qp1x, Qp1y, Qp1z
+ * Qp0p, Qp0q, Qp0r
+ * Qp1p, Qp1q, Qp1r
* size = numQuadPts * numDims
* index = iQuadPt*numDims + iDim
*
@@ -105,7 +106,7 @@
*/
void initialize(const double* vertices,
const double* basis,
- const double* basisDeriv,
+ const double* basisDerivRef,
const double* quadPtsRef,
const double* quadWts,
const int cellDim,
@@ -270,7 +271,7 @@
*/
double_array _quadPtsRef;
- /** Array of coordinates of quadrature points in cell (NOT reference cell).
+ /** Array of coordinates of quadrature points in cell (global coordinates).
*
* Qp0x, Qp0y, Qp0z
* Qp1x, Qp1y, Qp1z
@@ -298,15 +299,28 @@
*/
double_array _basis;
- /** Array of basis function derivatives evaluated at the quadrature points.
+ /** Array of basis function derivatives evaluated at the quadrature
+ * points, where derivatives are with respect to cell's local
+ * coordinates.
*
+ * N0pQp0, N0qQp0, N0rQp0, N1pQp0, N1qQp0, N1rQp0, ...
+ * N0pQp1, N0qQp1, N0rQp1, N1pQp1, N1qQp1, N1rQp1, ...
+ *
+ * size = numQuadPts * numBasis * spaceDim
+ * index = iQuadPt*numBasis*cellDim + iBasis*spaceDim + iDim
+ */
+ double_array _basisDerivRef;
+
+ /** Array of basis function derivatives evaluated at the quadrature
+ * points, where derivatives are with respect to global coordinates.
+ *
* N0xQp0, N0yQp0, N0zQp0, N1xQp0, N1yQp0, N1zQp0, ...
* N0xQp1, N0yQp1, N0zQp1, N1xQp1, N1yQp1, N1zQp1, ...
*
* size = numQuadPts * numBasis * cellDim
* index = iQuadPt*numBasis*cellDim + iBasis*cellDim + iDim
*/
- double_array _basisDeriv;
+ //double_array _basisDeriv;
/** Array of Jacobians evaluated at quadrature points.
*
Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.icc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.icc 2007-06-14 01:38:16 UTC (rev 7223)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.icc 2007-06-14 04:09:16 UTC (rev 7224)
@@ -60,7 +60,7 @@
inline
const pylith::double_array&
pylith::feassemble::Quadrature::basisDeriv(void) const {
- return _basisDeriv;
+ return _basisDerivRef;
}
// Get Jacobians evaluated at quadrature points.
Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature0D.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature0D.cc 2007-06-14 01:38:16 UTC (rev 7223)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature0D.cc 2007-06-14 04:09:16 UTC (rev 7224)
@@ -62,6 +62,9 @@
_jacobian[0] = 1.0;
_jacobianDet[0] = 1.0;
_jacobianInv[0] = 1.0;
+#if 0
+ _basisDeriv[0] = _basisDerivRef[0];
+#endif
} // computeGeometry
Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1D.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1D.cc 2007-06-14 01:38:16 UTC (rev 7223)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1D.cc 2007-06-14 04:09:16 UTC (rev 7224)
@@ -68,7 +68,7 @@
// J = dx/dp = sum[i=0,n-1] (dNi/dp * xi)
for (int iBasis=0; iBasis < _numBasis; ++iBasis)
_jacobian[iQuadPt] +=
- _basisDeriv[iQuadPt*_numBasis+iBasis] * vertCoords[iBasis];
+ _basisDerivRef[iQuadPt*_numBasis+iBasis] * vertCoords[iBasis];
// Compute determinant of Jacobian at quadrature point
// |J| = j00
@@ -79,6 +79,17 @@
// Compute inverse of Jacobian at quadrature point
// Jinv = 1/j00
_jacobianInv[iQuadPt] = 1.0/_jacobianDet[iQuadPt];
+
+#if 0
+ // Compute derivatives of basis functions with respect to global
+ // coordinates
+ // dNi/dx = dNi/dp dp/dx + dNi/dq dq/dx + dNi/dr dr/dx
+ for (int iBasis=0; iBasis < _numBasis; ++iBasis)
+ for (int iDim=0; iDim < _spaceDim; ++iDim)
+ _basisDeriv[iQuadPt*_numBasis*_spaceDim+iBasis*_spaceDim+iDim] +=
+ _basisDerivRef[iQuadPt*_numBasis*+iBasis] *
+ _jacobianInv[iQuadPt*_spaceDim+iDim];
+#endif
} // for
} // computeGeometry
Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din2D.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din2D.cc 2007-06-14 01:38:16 UTC (rev 7223)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din2D.cc 2007-06-14 04:09:16 UTC (rev 7224)
@@ -72,7 +72,7 @@
// dx/dp = sum[i=0,n-1] (dNi/dp * xi)
// dy/dp = sum[i=0,n-1] (dNi/dp * yi)
for (int iBasis=0; iBasis < _numBasis; ++iBasis) {
- const double deriv = _basisDeriv[iQuadPt*_numBasis+iBasis];
+ const double deriv = _basisDerivRef[iQuadPt*_numBasis+iBasis];
for (int iDim=0; iDim < _spaceDim; ++iDim)
_jacobian[iQuadPt*_spaceDim+iDim] +=
deriv * vertCoords[iBasis*_spaceDim+iDim];
@@ -93,6 +93,18 @@
for (int iDim=0; iDim < _spaceDim; ++iDim)
_jacobianInv[iQuadPt*_spaceDim+iDim] =
1.0 / _jacobian[iQuadPt*_spaceDim+iDim];
+
+#if 0
+ // Compute derivatives of basis functions with respect to global
+ // coordinates
+ // dNi/dx = dNi/dp dp/dx + dNi/dq dq/dx + dNi/dr dr/dx
+ for (int iBasis=0; iBasis < _numBasis; ++iBasis)
+ for (int iDim=0; iDim < _spaceDim; ++iDim)
+ for (int jDim=0; jDim < _cellDim; ++jDim)
+ _basisDeriv[iQuadPt*_numBasis*_spaceDim+iBasis*_spaceDim+iDim] +=
+ _basisDerivRef[iQuadPt*_numBasis*_cellDim+iBasis*_cellDim+jDim] *
+ _jacobianInv[iQuadPt*_cellDim*_spaceDim+jDim*_spaceDim+iDim];
+#endif
} // for
} // computeGeometry
Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din3D.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din3D.cc 2007-06-14 01:38:16 UTC (rev 7223)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din3D.cc 2007-06-14 04:09:16 UTC (rev 7224)
@@ -75,7 +75,7 @@
// dy/dp = sum[i=0,n-1] (dNi/dp * yi)
// dz/dp = sum[i=0,n-1] (dNi/dp * zi)
for (int iBasis=0; iBasis < _numBasis; ++iBasis) {
- const double deriv = _basisDeriv[iQuadPt*_numBasis+iBasis];
+ const double deriv = _basisDerivRef[iQuadPt*_numBasis+iBasis];
for (int iDim=0; iDim < _spaceDim; ++iDim)
_jacobian[iQuadPt*_spaceDim+iDim] +=
deriv * vertCoords[iBasis*_spaceDim+iDim];
@@ -96,6 +96,18 @@
for (int iDim=0; iDim < _spaceDim; ++iDim)
_jacobianInv[iQuadPt*_spaceDim+iDim] =
1.0 / _jacobian[iQuadPt*_spaceDim+iDim];
+
+#if 0
+ // Compute derivatives of basis functions with respect to global
+ // coordinates
+ // dNi/dx = dNi/dp dp/dx + dNi/dq dq/dx + dNi/dr dr/dx
+ for (int iBasis=0; iBasis < _numBasis; ++iBasis)
+ for (int iDim=0; iDim < _spaceDim; ++iDim)
+ for (int jDim=0; jDim < _cellDim; ++jDim)
+ _basisDeriv[iQuadPt*_numBasis*_spaceDim+iBasis*_spaceDim+iDim] +=
+ _basisDerivRef[iQuadPt*_numBasis*_cellDim+iBasis*_cellDim+jDim] *
+ _jacobianInv[iQuadPt*_cellDim*_spaceDim+jDim*_spaceDim+iDim];
+#endif
} // for
} // computeGeometry
Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.cc 2007-06-14 01:38:16 UTC (rev 7223)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.cc 2007-06-14 04:09:16 UTC (rev 7224)
@@ -76,7 +76,7 @@
for (int iBasis=0; iBasis < _numBasis; ++iBasis)
for (int iCol=0; iCol < _cellDim; ++iCol) {
const double deriv =
- _basisDeriv[iQuadPt*_numBasis*_spaceDim+iBasis*_cellDim+iCol];
+ _basisDerivRef[iQuadPt*_numBasis*_spaceDim+iBasis*_cellDim+iCol];
for (int iRow=0; iRow < _spaceDim; ++iRow)
_jacobian[iQuadPt*_cellDim*_spaceDim+iRow*_cellDim+iCol] +=
deriv * vertCoords[iBasis*_spaceDim+iRow];
@@ -102,6 +102,18 @@
_jacobianInv[i01] = -_jacobian[i01] / det;
_jacobianInv[i10] = -_jacobian[i10] / det;
_jacobianInv[i11] = _jacobian[i00] / det;
+
+#if 0
+ // Compute derivatives of basis functions with respect to global
+ // coordinates
+ // dNi/dx = dNi/dp dp/dx + dNi/dq dq/dx + dNi/dr dr/dx
+ for (int iBasis=0; iBasis < _numBasis; ++iBasis)
+ for (int iDim=0; iDim < _spaceDim; ++iDim)
+ for (int jDim=0; jDim < _cellDim; ++jDim)
+ _basisDeriv[iQuadPt*_numBasis*_spaceDim+iBasis*_spaceDim+iDim] +=
+ _basisDerivRef[iQuadPt*_numBasis*_cellDim+iBasis*_cellDim+jDim] *
+ _jacobianInv[iQuadPt*_cellDim*_spaceDim+jDim*_spaceDim+iDim];
+#endif
} // for
} // computeGeometry
Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2Din3D.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2Din3D.cc 2007-06-14 01:38:16 UTC (rev 7223)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2Din3D.cc 2007-06-14 04:09:16 UTC (rev 7224)
@@ -83,7 +83,7 @@
for (int iBasis=0; iBasis < _numBasis; ++iBasis)
for (int iCol=0; iCol < _cellDim; ++iCol) {
const double deriv =
- _basisDeriv[iQuadPt*_numBasis*_cellDim+iBasis*_cellDim+iCol];
+ _basisDerivRef[iQuadPt*_numBasis*_cellDim+iBasis*_cellDim+iCol];
for (int iRow=0; iRow < _spaceDim; ++iRow)
_jacobian[iQuadPt*_cellDim*_spaceDim+iRow*_cellDim+iCol] +=
deriv * vertCoords[iBasis*+_spaceDim+iRow];
@@ -181,6 +181,18 @@
_jacobianInv[iJ+5] = _jacobian[i10] / d12; // Jinv12
} else
throw std::runtime_error("Could not invert Jacobian.");
+
+#if 0
+ // Compute derivatives of basis functions with respect to global
+ // coordinates
+ // dNi/dx = dNi/dp dp/dx + dNi/dq dq/dx + dNi/dr dr/dx
+ for (int iBasis=0; iBasis < _numBasis; ++iBasis)
+ for (int iDim=0; iDim < _spaceDim; ++iDim)
+ for (int jDim=0; jDim < _cellDim; ++jDim)
+ _basisDeriv[iQuadPt*_numBasis*_spaceDim+iBasis*_spaceDim+iDim] +=
+ _basisDerivRef[iQuadPt*_numBasis*_cellDim + iBasis*_cellDim+jDim] *
+ _jacobianInv[iQuadPt*_cellDim*_spaceDim+jDim*_spaceDim+iDim];
+#endif
} // for
} // computeGeometry
Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature3D.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature3D.cc 2007-06-14 01:38:16 UTC (rev 7223)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature3D.cc 2007-06-14 04:09:16 UTC (rev 7224)
@@ -83,7 +83,7 @@
for (int iBasis=0; iBasis < _numBasis; ++iBasis)
for (int iCol=0; iCol < _cellDim; ++iCol) {
const double deriv =
- _basisDeriv[iQuadPt*_numBasis*_spaceDim+iBasis*_cellDim+iCol];
+ _basisDerivRef[iQuadPt*_numBasis*_spaceDim+iBasis*_cellDim+iCol];
for (int iRow=0; iRow < _spaceDim; ++iRow)
_jacobian[iQuadPt*_cellDim*_spaceDim+iRow*_cellDim+iCol] +=
deriv * vertCoords[iBasis*_spaceDim+iRow];
@@ -132,6 +132,18 @@
_jacobian[i00]*_jacobian[i21]) / det;
_jacobianInv[i22] = (_jacobian[i00]*_jacobian[i11] -
_jacobian[i01]*_jacobian[i10]) / det;
+
+#if 0
+ // Compute derivatives of basis functions with respect to global
+ // coordinates
+ // dNi/dx = dNi/dp dp/dx + dNi/dq dq/dx + dNi/dr dr/dx
+ for (int iBasis=0; iBasis < _numBasis; ++iBasis)
+ for (int iDim=0; iDim < _spaceDim; ++iDim)
+ for (int jDim=0; jDim < _cellDim; ++jDim)
+ _basisDeriv[iQuadPt*_numBasis*_spaceDim+iBasis*_spaceDim+iDim] +=
+ _basisDerivRef[iQuadPt*_numBasis*_cellDim+iBasis*_cellDim+jDim] *
+ _jacobianInv[iQuadPt*_cellDim*_spaceDim+jDim*_spaceDim+iDim];
+#endif
} // for
} // computeGeometry
Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature.cc 2007-06-14 01:38:16 UTC (rev 7223)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature.cc 2007-06-14 04:09:16 UTC (rev 7224)
@@ -61,8 +61,8 @@
memcpy(&qOrig._basis[0], basisE, size*sizeof(double));
size = 2;
- qOrig._basisDeriv.resize(size);
- memcpy(&qOrig._basisDeriv[0], basisDerivE, size*sizeof(double));
+ qOrig._basisDerivRef.resize(size);
+ memcpy(&qOrig._basisDerivRef[0], basisDerivE, size*sizeof(double));
size = 1;
qOrig._quadPtsRef.resize(size);
@@ -226,7 +226,7 @@
size = numBasis * numQuadPts * spaceDim;
for (int i=0; i < size; ++i)
- CPPUNIT_ASSERT_EQUAL(basisDeriv[i], q._basisDeriv[i]);
+ CPPUNIT_ASSERT_EQUAL(basisDeriv[i], q._basisDerivRef[i]);
size = numQuadPts * cellDim;
for (int i=0; i < size; ++i)
Modified: short/3D/PyLith/trunk/unittests/pytests/feassemble/TestQuadrature.icc
===================================================================
--- short/3D/PyLith/trunk/unittests/pytests/feassemble/TestQuadrature.icc 2007-06-14 01:38:16 UTC (rev 7223)
+++ short/3D/PyLith/trunk/unittests/pytests/feassemble/TestQuadrature.icc 2007-06-14 04:09:16 UTC (rev 7224)
@@ -60,7 +60,7 @@
inline
const double*
pylith::feassemble::TestQuadrature::basisDeriv(const Quadrature& q) {
- return &q._basisDeriv[0];
+ return &q._basisDerivRef[0];
}
// Get coordinates of quadrature points
More information about the cig-commits
mailing list