[cig-commits] r8152 - in short/3D/PyLith/trunk: doc/userguide
doc/userguide/boundaryconditions libsrc/bc libsrc/materials
unittests/libtests/bc unittests/libtests/bc/data
brad at geodynamics.org
brad at geodynamics.org
Thu Oct 18 17:29:49 PDT 2007
Author: brad
Date: 2007-10-18 17:29:48 -0700 (Thu, 18 Oct 2007)
New Revision: 8152
Added:
short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersLine2.cc
short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersLine2.hh
short/3D/PyLith/trunk/unittests/libtests/bc/data/AbsorbingDampersDataLine2.cc
short/3D/PyLith/trunk/unittests/libtests/bc/data/AbsorbingDampersDataLine2.hh
short/3D/PyLith/trunk/unittests/libtests/bc/data/elasticstrain1d.spatialdb
Removed:
short/3D/PyLith/trunk/unittests/libtests/bc/data/AbsorbingDampersData1D.cc
short/3D/PyLith/trunk/unittests/libtests/bc/data/AbsorbingDampersData1D.hh
Modified:
short/3D/PyLith/trunk/doc/userguide/boundaryconditions/boundaryconditions.lyx
short/3D/PyLith/trunk/doc/userguide/userguide.lyx
short/3D/PyLith/trunk/libsrc/bc/AbsorbingDampers.cc
short/3D/PyLith/trunk/libsrc/bc/BoundaryCondition.hh
short/3D/PyLith/trunk/libsrc/materials/Material.cc
short/3D/PyLith/trunk/unittests/libtests/bc/Makefile.am
short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampers.cc
short/3D/PyLith/trunk/unittests/libtests/bc/data/AbsorbingDampersData.cc
short/3D/PyLith/trunk/unittests/libtests/bc/data/AbsorbingDampersData.hh
short/3D/PyLith/trunk/unittests/libtests/bc/data/Makefile.am
Log:
Worked on absorbing dampers implementation and documentation.
Modified: short/3D/PyLith/trunk/doc/userguide/boundaryconditions/boundaryconditions.lyx
===================================================================
--- short/3D/PyLith/trunk/doc/userguide/boundaryconditions/boundaryconditions.lyx 2007-10-19 00:28:55 UTC (rev 8151)
+++ short/3D/PyLith/trunk/doc/userguide/boundaryconditions/boundaryconditions.lyx 2007-10-19 00:29:48 UTC (rev 8152)
@@ -1,17 +1,25 @@
-#LyX 1.4.3 created this file. For more info see http://www.lyx.org/
-\lyxformat 245
+#LyX 1.5.2 created this file. For more info see http://www.lyx.org/
+\lyxformat 276
\begin_document
\begin_header
\textclass book
\language english
\inputencoding auto
-\fontscheme default
+\font_roman default
+\font_sans default
+\font_typewriter default
+\font_default_family default
+\font_sc false
+\font_osf false
+\font_sf_scale 100
+\font_tt_scale 100
\graphics default
\paperfontsize default
\spacing single
\papersize default
\use_geometry true
\use_amsmath 1
+\use_esint 0
\cite_engine basic
\use_bibtopic false
\paperorientation portrait
@@ -29,12 +37,14 @@
\paperpagestyle default
\tracking_changes false
\output_changes false
+\author ""
\end_header
\begin_body
\begin_layout Chapter
-\begin_inset LatexCommand \label{cha:boundary:interface:conditions}
+\begin_inset LatexCommand label
+name "cha:boundary:interface:conditions"
\end_inset
@@ -87,7 +97,8 @@
generator.
For meshes specified using the PyLith mesh ASCII format, the sets of vertices
are specified using groups (see Appendix
-\begin_inset LatexCommand \ref{sec:MeshIOAscii}
+\begin_inset LatexCommand ref
+reference "sec:MeshIOAscii"
\end_inset
@@ -115,7 +126,8 @@
container is not yet available.
However, we supply containers for one, two, four, and six boundary conditions.
Table
-\begin_inset LatexCommand \ref{tab:bc:containers}
+\begin_inset LatexCommand ref
+reference "tab:bc:containers"
\end_inset
@@ -333,9 +345,13 @@
\end_layout
-\begin_layout Caption
-\begin_inset LatexCommand \label{tab:bc:containers}
+\begin_layout Standard
+\begin_inset Caption
+\begin_layout Standard
+\begin_inset LatexCommand label
+name "tab:bc:containers"
+
\end_inset
Predefined boundary condition containers.
@@ -346,6 +362,11 @@
\end_layout
+\end_inset
+
+
+\end_layout
+
\begin_layout Section
Dirichlet Boundary Conditions
\end_layout
@@ -442,7 +463,8 @@
face A,'' the spatial database query should use the nearest point algorithm,
and motion in the z-direction is constrained.
See Appendix
-\begin_inset LatexCommand \ref{sec:Spatialdata:SimpleIOAscii}
+\begin_inset LatexCommand ref
+reference "sec:Spatialdata:SimpleIOAscii"
\end_inset
@@ -497,8 +519,11 @@
\begin_layout Standard
\series bold
-Value in
+Value in
+\series default
+
\family typewriter
+\series bold
fixed_dof
\end_layout
@@ -589,7 +614,10 @@
\end_layout
-\begin_layout Caption
+\begin_layout Standard
+\begin_inset Caption
+
+\begin_layout Standard
Values in spatial database used as parameters in the elastic material constituti
ve models.
\end_layout
@@ -599,6 +627,11 @@
\end_layout
+\end_inset
+
+
+\end_layout
+
\begin_layout Section
Neumann Boundary Conditions
\end_layout
@@ -617,8 +650,9 @@
of a boundary by placing simple dashpots on the boundary.
Normally incident dilatational and shear waves are perfectly absorbed.
Waves incident at other angles are only partially absorbed.
- This boundary condition is simpler than a perfectly matched layer boundary
- condition but does not perform quite as well, especially for surface waves.
+ This boundary condition is simpler than a perfectly matched layer (PML)
+ boundary condition but does not perform quite as well, especially for surface
+ waves.
If the waves arriving at the absorbing boundary are relatively small in
amplitude compared to the amplitudes of primary interest, this boundary
condition gives reasonable results.
@@ -668,11 +702,11 @@
\end_inset
is the direction normal to the boundary,
-\begin_inset Formula $s_{h}$
+\begin_inset Formula $\overrightarrow{s}_{h}$
\end_inset
is the horizontal direction tangent to the boundary, and
-\begin_inset Formula $s_{v}$
+\begin_inset Formula $\overrightarrow{s}_{v}$
\end_inset
is the vertical direction tangent to the boundary, the tractions on the
@@ -686,7 +720,7 @@
In the case of a horizontal boundary, we can define an auxilliary direction
in order to assign unique tangential directions.
- For a linear elastic material,
+ For a linear elastic isotropic material,
\begin_inset Formula $\sigma_{ij}=\lambda\epsilon_{kk}\delta_{ij}+2\mu\epsilon_{ij},$
\end_inset
@@ -716,9 +750,10 @@
\end_inset
-so that our expressions for the tractions becomes
+so that our expressions for the tractions become
\begin_inset Formula \begin{gather}
-T_{s_{h}}=-\frac{\mu}{c}\left(\frac{\partial u_{s_{h}}^{t}(t-\frac{\vec{x}}{c})}{\partial t}+\frac{\partial u_{n}^{t}(t-\frac{\vec{x}}{c})}{\partial t}\right).\end{gather}
+T_{s_{h}}=-\frac{\mu}{c}\left(\frac{\partial u_{s_{h}}^{t}(t-\frac{\vec{x}}{c})}{\partial t}+\frac{\partial u_{n}^{t}(t-\frac{\vec{x}}{c})}{\partial t}\right),\\
+T_{s_{v}}=-\frac{\mu}{c}\left(\frac{\partial u_{s_{v}}^{t}(t-\frac{\vec{x}}{c})}{\partial t}+\frac{\partial u_{n}^{t}(t-\frac{\vec{x}}{c})}{\partial t}\right).\end{gather}
\end_inset
@@ -749,14 +784,16 @@
\begin_inset Formula $u_{n}=u_{s_{h}}=0$
\end_inset
-, where
+, with
\begin_inset Formula $c=v_{s}$
\end_inset
in both cases.
This leads to the following expressions for the tractions:
\begin_inset Formula \begin{gather}
-T_{s_{h}}=-\rho v_{s}\frac{\partial u_{s_{h}}^{t}(t-\frac{\vec{x}}{c})}{\partial t}\end{gather}
+T_{s_{h}}=-\rho v_{s}\frac{\partial u_{s_{h}}^{t}(t-\frac{\vec{x}}{c})}{\partial t}\\
+T_{s_{v}}=-\rho v_{s}\frac{\partial u_{v}^{t}(t-\frac{\vec{x}}{c})}{\partial t}\\
+T_{n}=-\rho v_{p}\frac{\partial u_{n}^{t}(t-\frac{\vec{x}}{c})}{\partial t}\end{gather}
\end_inset
@@ -850,7 +887,7 @@
reverse-slip, and fault opening.
The current release of PyLith supports kinematic (prescribed) slip.
Support for fault constitutive models for frictional interface conditions
- will be supported in a future release (Fall 2007).
+ will be supported in a future release (Winter 2007).
\end_layout
\begin_layout Subsection
@@ -860,7 +897,8 @@
\begin_layout Standard
Slip corresponds to relative motion across a fault surface.
Figure
-\begin_inset LatexCommand \ref{fig:fault:orientation}
+\begin_inset LatexCommand ref
+reference "fig:fault:orientation"
\end_inset
@@ -871,7 +909,8 @@
angles over potentially complex, nonplanar fault surfaces.
Instead, the user specifies fault parameters in terms of lateral motion,
reverse motion, and fault opening as shown in Figure
-\begin_inset LatexCommand \ref{fig:fault:slip:motions}
+\begin_inset LatexCommand ref
+reference "fig:fault:slip:motions"
\end_inset
@@ -897,7 +936,10 @@
\end_layout
-\begin_layout Caption
+\begin_layout Standard
+\begin_inset Caption
+
+\begin_layout Standard
Orientation of a fault surface in 3D, where
\begin_inset Formula $\phi$
\end_inset
@@ -912,7 +954,8 @@
the rake angle.
-\begin_inset LatexCommand \label{fig:fault:orientation}
+\begin_inset LatexCommand label
+name "fig:fault:orientation"
\end_inset
@@ -924,6 +967,11 @@
\end_layout
+\end_inset
+
+
+\end_layout
+
\begin_layout Standard
\noindent
\align center
@@ -943,11 +991,15 @@
\end_layout
-\begin_layout Caption
+\begin_layout Standard
+\begin_inset Caption
+
+\begin_layout Standard
Sign conventions associated with fault slip.
Positive values are associated with left-lateral, reverse, and fault opening
motions.
-\begin_inset LatexCommand \label{fig:fault:slip:motions}
+\begin_inset LatexCommand label
+name "fig:fault:slip:motions"
\end_inset
@@ -959,6 +1011,11 @@
\end_layout
+\end_inset
+
+
+\end_layout
+
\begin_layout Subsection
Fault Surface Container
\end_layout
@@ -1087,9 +1144,13 @@
\end_layout
-\begin_layout Caption
-\begin_inset LatexCommand \label{tab:fault:containers}
+\begin_layout Standard
+\begin_inset Caption
+\begin_layout Standard
+\begin_inset LatexCommand label
+name "tab:fault:containers"
+
\end_inset
Predefined fault surface containers.
@@ -1100,6 +1161,11 @@
\end_layout
+\end_inset
+
+
+\end_layout
+
\begin_layout Subsection
Fault Implementation
\end_layout
@@ -1113,7 +1179,8 @@
on the two sides of the fault.
PyLith automatically adds cohesive cells for each fault surface.
Figure
-\begin_inset LatexCommand \ref{fig:fault:cohesive:quad4}
+\begin_inset LatexCommand ref
+reference "fig:fault:cohesive:quad4"
\end_inset
@@ -1140,12 +1207,16 @@
\end_layout
-\begin_layout Caption
+\begin_layout Standard
+\begin_inset Caption
+
+\begin_layout Standard
Example of cohesive cell inserted into a mesh of two quadrilateral cells.
The zero thickness cohesive cell (shown with dashed lines) controls slip
on the fault via the relative motion between vertices 3 and 7 and 2 and
6.
-\begin_inset LatexCommand \label{fig:fault:cohesive:quad4}
+\begin_inset LatexCommand label
+name "fig:fault:cohesive:quad4"
\end_inset
@@ -1157,6 +1228,11 @@
\end_layout
+\end_inset
+
+
+\end_layout
+
\begin_layout Subsection
Fault Parameters
\end_layout
@@ -1169,9 +1245,9 @@
id This is an integer identifier for the fault surface.
It is used to specify the
\family typewriter
-material-id
+material-id
\family default
-of the cohesive cells in the mesh.
+ of the cohesive cells in the mesh.
Material identifiers must be unique so this value cannot be the same as
any of the material models or any other fault.
\end_layout
@@ -1394,7 +1470,8 @@
each point where the parameters for the slip time function may vary over
the fault surface.
We use an integral of Brune's far-field time function
-\begin_inset LatexCommand \cite{Brune:1970}
+\begin_inset LatexCommand cite
+key "Brune:1970"
\end_inset
@@ -1723,7 +1800,10 @@
\end_layout
-\begin_layout Caption
+\begin_layout Standard
+\begin_inset Caption
+
+\begin_layout Standard
Values in spatial database used as parameters in the elastic material constituti
ve models.
\end_layout
@@ -1733,5 +1813,10 @@
\end_layout
+\end_inset
+
+
+\end_layout
+
\end_body
\end_document
Modified: short/3D/PyLith/trunk/doc/userguide/userguide.lyx
===================================================================
--- short/3D/PyLith/trunk/doc/userguide/userguide.lyx 2007-10-19 00:28:55 UTC (rev 8151)
+++ short/3D/PyLith/trunk/doc/userguide/userguide.lyx 2007-10-19 00:29:48 UTC (rev 8152)
@@ -1,4 +1,4 @@
-#LyX 1.5.1 created this file. For more info see http://www.lyx.org/
+#LyX 1.5.2 created this file. For more info see http://www.lyx.org/
\lyxformat 276
\begin_document
\begin_header
@@ -45,6 +45,7 @@
\tracking_changes false
\output_changes false
\author ""
+\author ""
\end_header
\begin_body
Modified: short/3D/PyLith/trunk/libsrc/bc/AbsorbingDampers.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/bc/AbsorbingDampers.cc 2007-10-19 00:28:55 UTC (rev 8151)
+++ short/3D/PyLith/trunk/libsrc/bc/AbsorbingDampers.cc 2007-10-19 00:29:48 UTC (rev 8152)
@@ -66,6 +66,8 @@
throw std::runtime_error(msg.str());
} // if
+ //_boundaryMesh->view("ABSORBING BOUNDARY MESH");
+
// check compatibility of quadrature and boundary mesh
if (_quadrature->cellDim() != _boundaryMesh->getDimension()) {
std::ostringstream msg;
@@ -78,18 +80,18 @@
} // if
const int numCorners = _quadrature->numBasis();
- // Get 'surface' cells (1 dimension lower than top-level cells)
const ALE::Obj<ALE::Mesh::label_sequence>& cells =
- _boundaryMesh->heightStratum(1);
+ _boundaryMesh->heightStratum(0);
assert(!cells.isNull());
const Mesh::label_sequence::iterator cellsBegin = cells->begin();
const Mesh::label_sequence::iterator cellsEnd = cells->end();
- const ALE::Obj<sieve_type>& sieve = mesh->getSieve();
+ const ALE::Obj<sieve_type>& sieve = _boundaryMesh->getSieve();
assert(!sieve.isNull());
for (Mesh::label_sequence::iterator c_iter=cellsBegin;
c_iter != cellsEnd;
++c_iter) {
- const int cellNumCorners = sieve->nCone(*c_iter, mesh->depth())->size();
+ const int cellNumCorners = sieve->nCone(*c_iter,
+ _boundaryMesh->depth())->size();
if (numCorners != cellNumCorners) {
std::ostringstream msg;
msg << "Quadrature is incompatible with cell for absorbing boundary "
@@ -108,10 +110,11 @@
const int numQuadPts = _quadrature->numQuadPts();
const int spaceDim = cs->spaceDim();
const int fiberDim = spaceDim * numQuadPts;
- _dampingConsts = new real_section_type(mesh->comm(), mesh->debug());
+ _dampingConsts = new real_section_type(_boundaryMesh->comm(),
+ _boundaryMesh->debug());
assert(!_dampingConsts.isNull());
_dampingConsts->setFiberDimension(cells, fiberDim);
- mesh->allocate(_dampingConsts);
+ _boundaryMesh->allocate(_dampingConsts);
// Containers for orientation information
const int orientationSize = spaceDim*spaceDim;
@@ -125,7 +128,7 @@
// open database with material property information
_db->open();
int numValues = 0;
- if (cellDim > 1) {
+ if (cellDim > 0) {
numValues = 3;
const char* valueNames[] = { "density", "vp", "vs" };
_db->queryVals(valueNames, numValues);
@@ -144,7 +147,7 @@
double_array dampingConstsGlobal(fiberDim);
const ALE::Obj<real_section_type>& coordinates =
- mesh->getRealSection("coordinates");
+ _boundaryMesh->getRealSection("coordinates");
for(Mesh::label_sequence::iterator c_iter = cells->begin();
c_iter != cells->end();
@@ -172,7 +175,7 @@
dampingConstsLocal[index+iDim] = queryData[0]*queryData[2];
// Compute normal/tangential orientation
- mesh->restrict(coordinates, *c_iter,
+ _boundaryMesh->restrict(coordinates, *c_iter,
&cellVertices[0], cellVertices.size());
memcpy(&quadPtRef[0], &quadPtsRef[index], spaceDim*sizeof(double));
cellGeometry.jacobian(&jacobian, &jacobianDet, cellVertices, quadPtRef);
@@ -184,7 +187,7 @@
dampingConstsGlobal[iDim] +=
dampingConstsLocal[jDim]*orientation[iDim*spaceDim+jDim];
} // for
- mesh->update(_dampingConsts, *c_iter, &dampingConstsGlobal[0]);
+ _dampingConsts->updatePoint(*c_iter, &dampingConstsGlobal[0]);
} // for
_db->close();
@@ -215,7 +218,7 @@
// Get sections
const ALE::Obj<real_section_type>& coordinates =
- mesh->getRealSection("coordinates");
+ _boundaryMesh->getRealSection("coordinates");
assert(!coordinates.isNull());
const ALE::Obj<real_section_type>& dispTpdt = fields->getHistoryItem(0);
const ALE::Obj<real_section_type>& dispTmdt = fields->getHistoryItem(2);
@@ -308,7 +311,7 @@
// Get sections
const ALE::Obj<real_section_type>& coordinates =
- mesh->getRealSection("coordinates");
+ _boundaryMesh->getRealSection("coordinates");
assert(!coordinates.isNull());
const ALE::Obj<real_section_type>& dispT = fields->getHistoryItem(1);
assert(!dispT.isNull());
Modified: short/3D/PyLith/trunk/libsrc/bc/BoundaryCondition.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/bc/BoundaryCondition.hh 2007-10-19 00:28:55 UTC (rev 8151)
+++ short/3D/PyLith/trunk/libsrc/bc/BoundaryCondition.hh 2007-10-19 00:29:48 UTC (rev 8152)
@@ -113,7 +113,7 @@
protected :
int _id; ///< BoundaryCondition identifier
- std::string _label; ///< Label of fault
+ std::string _label; ///< Label of boundary condition
spatialdata::spatialdb::SpatialDB* _db; ///< Spatial database w/parameters
}; // class BoundaryCondition
Modified: short/3D/PyLith/trunk/libsrc/materials/Material.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/Material.cc 2007-10-19 00:28:55 UTC (rev 8151)
+++ short/3D/PyLith/trunk/libsrc/materials/Material.cc 2007-10-19 00:29:48 UTC (rev 8152)
@@ -197,7 +197,6 @@
} // for
// Insert cell contribution into fields
for (int iParam=0; iParam < numParams; ++iParam)
- //mesh->update(paramSections[iParam], *cellIter, &cellData[iParam][0]);
paramSections[iParam]->updatePoint(*cellIter, &cellData[iParam][0]);
} // for
Modified: short/3D/PyLith/trunk/unittests/libtests/bc/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/Makefile.am 2007-10-19 00:28:55 UTC (rev 8151)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/Makefile.am 2007-10-19 00:29:48 UTC (rev 8152)
@@ -22,6 +22,7 @@
# Primary source files
testbc_SOURCES = \
TestAbsorbingDampers.cc \
+ TestAbsorbingDampersLine2.cc \
TestBoundaryCondition.cc \
TestDirichlet.cc \
TestDirichletLine2.cc \
@@ -38,6 +39,7 @@
noinst_HEADERS = \
TestAbsorbingDampers.hh \
+ TestAbsorbingDampersLine2.hh \
TestBoundaryCondition.hh \
TestDirichlet.hh \
TestDirichletLine2.hh \
@@ -54,7 +56,7 @@
# Source files associated with testing data
testbc_SOURCES += \
data/AbsorbingDampersData.cc \
- data/AbsorbingDampersData1D.cc \
+ data/AbsorbingDampersDataLine2.cc \
data/DirichletData.cc \
data/DirichletDataLine2.cc \
data/DirichletDataLine2b.cc \
@@ -69,7 +71,7 @@
noinst_HEADERS += \
data/AbsorbingDampersData.hh \
- data/AbsorbingDampersData1D.hh \
+ data/AbsorbingDampersDataLine2.hh \
data/DirichletData.hh \
data/DirichletDataLine2.hh \
data/DirichletDataLine2b.hh \
Modified: short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampers.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampers.cc 2007-10-19 00:28:55 UTC (rev 8151)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampers.cc 2007-10-19 00:29:48 UTC (rev 8152)
@@ -27,7 +27,7 @@
#include "spatialdata/spatialdb/SimpleDB.hh" // USES SimpleDB
#include "spatialdata/spatialdb/SimpleIOAscii.hh" // USES SimpleIOAscii
-#include <stdexcept> // TEMPORARY
+#include <stdexcept> // USES std::runtime_error
// ----------------------------------------------------------------------
CPPUNIT_TEST_SUITE_REGISTRATION( pylith::bc::TestAbsorbingDampers );
@@ -69,10 +69,51 @@
_initialize(&mesh, &bc, &fields);
CPPUNIT_ASSERT(0 != _data);
+
+ const ALE::Obj<Mesh>& boundaryMesh = bc._boundaryMesh;
- const int numCells = mesh->heightStratum(0)->size();
+ // Check boundary mesh
+ CPPUNIT_ASSERT(!boundaryMesh.isNull());
- // ADD STUFF HERE
+ const int cellDim = boundaryMesh->getDimension();
+ const ALE::Obj<sieve_type>& sieve = boundaryMesh->getSieve();
+ const ALE::Obj<Mesh::label_sequence>& cells = boundaryMesh->heightStratum(0);
+ const int numVertices = boundaryMesh->depthStratum(0)->size();
+ const int numCells = cells->size();
+
+ CPPUNIT_ASSERT_EQUAL(_data->cellDim, cellDim);
+ CPPUNIT_ASSERT_EQUAL(_data->numVertices, numVertices);
+ CPPUNIT_ASSERT_EQUAL(_data->numCells, numCells);
+
+ const int numCorners = sieve->nCone(*cells->begin(),
+ boundaryMesh->depth())->size();
+ CPPUNIT_ASSERT_EQUAL(_data->numCorners, numCorners);
+ int iCell = 0;
+ for(Mesh::label_sequence::iterator c_iter = cells->begin();
+ c_iter != cells->end();
+ ++c_iter) {
+ const ALE::Obj<sieve_type::traits::coneSequence>& cone =
+ sieve->cone(*c_iter);
+ for(sieve_type::traits::coneSequence::iterator v_iter = cone->begin();
+ v_iter != cone->end();
+ ++v_iter)
+ CPPUNIT_ASSERT_EQUAL(_data->cells[iCell++], *v_iter);
+ } // for
+
+ // Check damping constants
+ const int sizeE = _data->numCells * _data->numQuadPts * _data->spaceDim;
+ const double* valsE = _data->dampingConsts;
+
+ const int size = bc._dampingConsts->sizeWithBC();
+ const double* vals = bc._dampingConsts->restrict();
+
+ CPPUNIT_ASSERT_EQUAL(sizeE, size);
+ const double tolerance = 1.0e-06;
+ for (int i=0; i < size; ++i)
+ if (fabs(valsE[i]) > 1.0)
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vals[i]/valsE[i], tolerance);
+ else
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(valsE[i], vals[i], tolerance);
} // testInitialize
// ----------------------------------------------------------------------
@@ -92,8 +133,11 @@
const double t = 1.0;
bc.integrateResidual(residual, t, &fields, mesh);
+ residual->view("RESIDUAL");
+
const double* valsE = _data->valsResidual;
- const int sizeE = _data->spaceDim * _data->numVertices;
+ const int totalNumVertices = mesh->depthStratum(0)->size();
+ const int sizeE = _data->spaceDim * totalNumVertices;
const double* vals = residual->restrict();
const int size = residual->sizeWithBC();
@@ -138,8 +182,9 @@
CPPUNIT_ASSERT(0 == err);
const double* valsE = _data->valsJacobian;
- const int nrowsE = _data->numVertices * _data->spaceDim;
- const int ncolsE = _data->numVertices * _data->spaceDim;
+ const int totalNumVertices = mesh->depthStratum(0)->size();
+ const int nrowsE = totalNumVertices * _data->spaceDim;
+ const int ncolsE = totalNumVertices * _data->spaceDim;
int nrows = 0;
int ncols = 0;
Added: short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersLine2.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersLine2.cc 2007-10-19 00:28:55 UTC (rev 8151)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersLine2.cc 2007-10-19 00:29:48 UTC (rev 8152)
@@ -0,0 +1,38 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestAbsorbingDampersLine2.hh" // Implementation of class methods
+
+#include "data/AbsorbingDampersDataLine2.hh" // USES AbsorbingDampersDataLine2
+
+#include "pylith/feassemble/Quadrature0D.hh" // USES Quadrature1D
+#include "pylith/feassemble/GeometryPoint1D.hh" // USES GeometryPoint1D
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::bc::TestAbsorbingDampersLine2 );
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::bc::TestAbsorbingDampersLine2::setUp(void)
+{ // setUp
+ _data = new AbsorbingDampersDataLine2();
+ _quadrature = new feassemble::Quadrature0D();
+ CPPUNIT_ASSERT(0 != _quadrature);
+ feassemble::GeometryPoint1D geometry;
+ _quadrature->refGeometry(&geometry);
+} // setUp
+
+
+// End of file
Added: short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersLine2.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersLine2.hh 2007-10-19 00:28:55 UTC (rev 8151)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersLine2.hh 2007-10-19 00:29:48 UTC (rev 8152)
@@ -0,0 +1,55 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/bc/TestAbsorbingDampersLine2.hh
+ *
+ * @brief C++ TestAbsorbingDampers object.
+ *
+ * C++ unit testing for AbsorbingDampers for mesh with 1-D line cells.
+ */
+
+#if !defined(pylith_bc_testabsorbingdampersline2_hh)
+#define pylith_bc_testabsorbingdampersline2_hh
+
+#include "TestAbsorbingDampers.hh" // ISA TestAbsorbingDampers
+
+/// Namespace for pylith package
+namespace pylith {
+ namespace bc {
+ class TestAbsorbingDampersLine2;
+ } // bc
+} // pylith
+
+/// C++ unit testing for AbsorbingDampers for mesh with 1-D line cells.
+class pylith::bc::TestAbsorbingDampersLine2 : public TestAbsorbingDampers
+{ // class TestAbsorbingDampers
+
+ // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+ CPPUNIT_TEST_SUITE( TestAbsorbingDampersLine2 );
+ CPPUNIT_TEST( testInitialize );
+ CPPUNIT_TEST( testIntegrateResidual );
+ CPPUNIT_TEST( testIntegrateJacobian );
+ CPPUNIT_TEST_SUITE_END();
+
+ // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+ /// Setup testing data.
+ void setUp(void);
+
+}; // class TestAbsorbingDampersLine2
+
+#endif // pylith_bc_absorbingdampersline2_hh
+
+
+// End of file
Modified: short/3D/PyLith/trunk/unittests/libtests/bc/data/AbsorbingDampersData.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/data/AbsorbingDampersData.cc 2007-10-19 00:28:55 UTC (rev 8151)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/data/AbsorbingDampersData.cc 2007-10-19 00:29:48 UTC (rev 8152)
@@ -16,13 +16,6 @@
// Constructor
pylith::bc::AbsorbingDampersData::AbsorbingDampersData(void) :
meshFilename(0),
- spaceDim(0),
- cellDim(0),
- numVertices(0),
- numCells(0),
- vertices(0),
- cells(0),
- verticesRef(0),
numBasis(0),
numQuadPts(0),
quadPts(0),
@@ -30,10 +23,19 @@
basis(0),
basisDerivRef(0),
spatialDBFilename(0),
+ id(0),
+ label(""),
dt(0),
fieldTpdt(0),
fieldT(0),
fieldTmdt(0),
+ spaceDim(0),
+ cellDim(0),
+ numVertices(0),
+ numCells(0),
+ numCorners(0),
+ cells(0),
+ dampingConsts(0),
valsResidual(0),
valsJacobian(0)
{ // constructor
Modified: short/3D/PyLith/trunk/unittests/libtests/bc/data/AbsorbingDampersData.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/data/AbsorbingDampersData.hh 2007-10-19 00:28:55 UTC (rev 8151)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/data/AbsorbingDampersData.hh 2007-10-19 00:29:48 UTC (rev 8152)
@@ -36,20 +36,9 @@
char* meshFilename; ///< Name of file with input mesh
- /// @name Boundary mesh information
- //@{
- int spaceDim; ///< Number of dimensions in vertex coordinates
- int cellDim; ///< Number of dimensions associated with cell
- int numVertices; ///< Number of vertices
- int numCells; ///< Number of cells
- double* vertices; ///< Coordinates of vertices
- int* cells; ///< Indices of vertices in cells
- double* verticesRef; ///< Coordinates of vertices in ref cell (dual basis)
- //@}
-
/// @name Quadrature information
//@{
- int numBasis; ///< Number of vertices in cell
+ int numBasis; ///< Number of basis functions for cell
int numQuadPts; ///< Number of quadrature points
double* quadPts; ///< Coordinates of quad pts in ref cell
double* quadWts; ///< Weights of quadrature points
@@ -72,8 +61,19 @@
double* fieldTmdt; ///< Input field at time t-dt.
//@}
+ /// @name Boundary mesh information
+ //@{
+ int spaceDim; ///< Number of dimensions in vertex coordinates
+ int cellDim; ///< Number of dimensions associated with cell
+ int numVertices; ///< Number of vertices
+ int numCells; ///< Number of cells
+ int numCorners; ///< Number of vertices in cell
+ int* cells; ///< Indices of vertices in cells
+ //@}
+
/// @name Calculated values.
//@{
+ double* dampingConsts; ///< Expected values from initialization.
double* valsResidual; ///< Expected values from residual calculation.
double* valsJacobian; ///< Expected values from Jacobian calculation.
//@}
Deleted: short/3D/PyLith/trunk/unittests/libtests/bc/data/AbsorbingDampersData1D.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/data/AbsorbingDampersData1D.cc 2007-10-19 00:28:55 UTC (rev 8151)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/data/AbsorbingDampersData1D.cc 2007-10-19 00:29:48 UTC (rev 8152)
@@ -1,121 +0,0 @@
-// -*- C++ -*-
-//
-// ======================================================================
-//
-// Brad T. Aagaard
-// U.S. Geological Survey
-//
-// {LicenseText}
-//
-// ======================================================================
-//
-
-#include "AbsorbingDampersData1D.hh"
-
-const char* pylith::bc::AbsorbingDampersData1D::_meshFilename = "data/meshBC1D.txt";
-
-const int pylith::bc::AbsorbingDampersData1D::_spaceDim = 1;
-
-const int pylith::bc::AbsorbingDampersData1D::_cellDim = 0;
-
-const int pylith::bc::AbsorbingDampersData1D::_numVertices = 2;
-
-const int pylith::bc::AbsorbingDampersData1D::_numCells = 1;
-
-const int pylith::bc::AbsorbingDampersData1D::_numBasis = 2;
-
-const int pylith::bc::AbsorbingDampersData1D::_numQuadPts = 1;
-
-const char* pylith::bc::AbsorbingDampersData1D::_spatialDBFilename = "data/elasticstrain1d.spatialdb";
-
-const double pylith::bc::AbsorbingDampersData1D::_dt = 1.00000000e-02;
-
-const double pylith::bc::AbsorbingDampersData1D::_vertices[] = {
- -2.50000000e-01,
- 2.00000000e+00,
-};
-
-const int pylith::bc::AbsorbingDampersData1D::_cells[] = {
-0,1,
-};
-
-const double pylith::bc::AbsorbingDampersData1D::_verticesRef[] = {
- -1.00000000e+00,
- 1.00000000e+00,
-};
-
-const double pylith::bc::AbsorbingDampersData1D::_quadPts[] = {
- 0.00000000e+00,
-};
-
-const double pylith::bc::AbsorbingDampersData1D::_quadWts[] = {
- 2.00000000e+00,
-};
-
-const double pylith::bc::AbsorbingDampersData1D::_basis[] = {
- 5.00000000e-01,
- 5.00000000e-01,
-};
-
-const double pylith::bc::AbsorbingDampersData1D::_basisDerivRef[] = {
- -5.00000000e-01,
- 5.00000000e-01,
-};
-
-const double pylith::bc::AbsorbingDampersData1D::_fieldTpdt[] = {
- 1.20000000e+00,
- 1.70000000e+00,
-};
-
-const double pylith::bc::AbsorbingDampersData1D::_fieldT[] = {
- 1.10000000e+00,
- 1.50000000e+00,
-};
-
-const double pylith::bc::AbsorbingDampersData1D::_fieldTmdt[] = {
- 1.00000000e+00,
- 1.30000000e+00,
-};
-
-const double pylith::bc::AbsorbingDampersData1D::_valsResidual[] = {
- 1.60000000e+10,
- -1.60000000e+10,
-};
-
-const double pylith::bc::AbsorbingDampersData1D::_valsJacobian[] = {
- 1.40625000e+07,
- 1.40625000e+07,
- 1.40625000e+07,
- 1.40625000e+07,
-};
-
-pylith::bc::AbsorbingDampersData1D::AbsorbingDampersData1D(void)
-{ // constructor
- meshFilename = const_cast<char*>(_meshFilename);
- spaceDim = _spaceDim;
- cellDim = _cellDim;
- numVertices = _numVertices;
- numCells = _numCells;
- numBasis = _numBasis;
- numQuadPts = _numQuadPts;
- spatialDBFilename = const_cast<char*>(_spatialDBFilename);
- dt = _dt;
- vertices = const_cast<double*>(_vertices);
- cells = const_cast<int*>(_cells);
- verticesRef = const_cast<double*>(_verticesRef);
- quadPts = const_cast<double*>(_quadPts);
- quadWts = const_cast<double*>(_quadWts);
- basis = const_cast<double*>(_basis);
- basisDerivRef = const_cast<double*>(_basisDerivRef);
- fieldTpdt = const_cast<double*>(_fieldTpdt);
- fieldT = const_cast<double*>(_fieldT);
- fieldTmdt = const_cast<double*>(_fieldTmdt);
- valsResidual = const_cast<double*>(_valsResidual);
- valsJacobian = const_cast<double*>(_valsJacobian);
-} // constructor
-
-pylith::bc::AbsorbingDampersData1D::~AbsorbingDampersData1D(void)
-{}
-
-
-// End of file
Deleted: short/3D/PyLith/trunk/unittests/libtests/bc/data/AbsorbingDampersData1D.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/data/AbsorbingDampersData1D.hh 2007-10-19 00:28:55 UTC (rev 8151)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/data/AbsorbingDampersData1D.hh 2007-10-19 00:29:48 UTC (rev 8152)
@@ -1,83 +0,0 @@
-// -*- C++ -*-
-//
-// ======================================================================
-//
-// Brad T. Aagaard
-// U.S. Geological Survey
-//
-// {LicenseText}
-//
-// ======================================================================
-//
-
-#if !defined(pylith_bc_absorbingdampersdata1d_hh)
-#define pylith_bc_absorbingdampersdata1d_hh
-
-#include "AbsorbingDampersData.hh"
-
-namespace pylith {
- namespace bc {
- class AbsorbingDampersData1D;
- } // pylith
-} // bc
-
-class pylith::bc::AbsorbingDampersData1D : public AbsorbingDampersData
-{
-
-public:
-
- /// Constructor
- AbsorbingDampersData1D(void);
-
- /// Destructor
- ~AbsorbingDampersData1D(void);
-
-private:
-
- static const char* _meshFilename;
-
- static const int _spaceDim;
-
- static const int _cellDim;
-
- static const int _numVertices;
-
- static const int _numCells;
-
- static const int _numBasis;
-
- static const int _numQuadPts;
-
- static const char* _spatialDBFilename;
-
- static const double _dt;
-
- static const double _vertices[];
-
- static const int _cells[];
-
- static const double _verticesRef[];
-
- static const double _quadPts[];
-
- static const double _quadWts[];
-
- static const double _basis[];
-
- static const double _basisDerivRef[];
-
- static const double _fieldTpdt[];
-
- static const double _fieldT[];
-
- static const double _fieldTmdt[];
-
- static const double _valsResidual[];
-
- static const double _valsJacobian[];
-
-};
-
-#endif // pylith_bc_absorbingdampersdata1d_hh
-
-// End of file
Copied: short/3D/PyLith/trunk/unittests/libtests/bc/data/AbsorbingDampersDataLine2.cc (from rev 8141, short/3D/PyLith/trunk/unittests/libtests/bc/data/AbsorbingDampersData1D.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/data/AbsorbingDampersData1D.cc 2007-10-18 16:40:11 UTC (rev 8141)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/data/AbsorbingDampersDataLine2.cc 2007-10-19 00:29:48 UTC (rev 8152)
@@ -0,0 +1,116 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#include "AbsorbingDampersDataLine2.hh"
+
+const char* pylith::bc::AbsorbingDampersDataLine2::_meshFilename =
+ "data/line2.mesh";
+
+const int pylith::bc::AbsorbingDampersDataLine2::_numBasis = 1;
+const int pylith::bc::AbsorbingDampersDataLine2::_numQuadPts = 1;
+const double pylith::bc::AbsorbingDampersDataLine2::_quadPts[] = {
+ 0.0,
+};
+const double pylith::bc::AbsorbingDampersDataLine2::_quadWts[] = {
+ 1.0,
+};
+const double pylith::bc::AbsorbingDampersDataLine2::_basis[] = {
+ 1.0,
+};
+const double pylith::bc::AbsorbingDampersDataLine2::_basisDerivRef[] = {
+ 1.0,
+};
+
+const char* pylith::bc::AbsorbingDampersDataLine2::_spatialDBFilename = "data/elasticstrain1d.spatialdb";
+const int pylith::bc::AbsorbingDampersDataLine2::_id = 2;
+const char* pylith::bc::AbsorbingDampersDataLine2::_label = "bc0";
+
+const double pylith::bc::AbsorbingDampersDataLine2::_dt = 1.00000000e-02;
+const double pylith::bc::AbsorbingDampersDataLine2::_fieldTpdt[] = {
+ 1.20000000e+00,
+ 1.20000000e+00,
+ 1.70000000e+00,
+};
+const double pylith::bc::AbsorbingDampersDataLine2::_fieldT[] = {
+ 1.10000000e+00,
+ 1.10000000e+00,
+ 1.50000000e+00,
+};
+const double pylith::bc::AbsorbingDampersDataLine2::_fieldTmdt[] = {
+ 1.00000000e+00,
+ 1.00000000e+00,
+ 1.30000000e+00,
+};
+
+const int pylith::bc::AbsorbingDampersDataLine2::_spaceDim = 1;
+const int pylith::bc::AbsorbingDampersDataLine2::_cellDim = 0;
+const int pylith::bc::AbsorbingDampersDataLine2::_numVertices = 2;
+const int pylith::bc::AbsorbingDampersDataLine2::_numCells = 2;
+const int pylith::bc::AbsorbingDampersDataLine2::_numCorners = 1;
+const int pylith::bc::AbsorbingDampersDataLine2::_cells[] = {
+ 2,
+ 4,
+};
+
+
+const double pylith::bc::AbsorbingDampersDataLine2::_dampingConsts[] = {
+ 2500.0*6000.0,
+ 2500.0*6000.0,
+};
+const double pylith::bc::AbsorbingDampersDataLine2::_valsResidual[] = {
+ 0.0,
+ 0.0,
+ 0.0,
+};
+const double pylith::bc::AbsorbingDampersDataLine2::_valsJacobian[] = {
+ 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0,
+ 0.0, 0.0, 0.0,
+};
+
+pylith::bc::AbsorbingDampersDataLine2::AbsorbingDampersDataLine2(void)
+{ // constructor
+ meshFilename = const_cast<char*>(_meshFilename);
+
+ numBasis = _numBasis;
+ numQuadPts = _numQuadPts;
+ quadPts = const_cast<double*>(_quadPts);
+ quadWts = const_cast<double*>(_quadWts);
+ basis = const_cast<double*>(_basis);
+ basisDerivRef = const_cast<double*>(_basisDerivRef);
+
+ spatialDBFilename = const_cast<char*>(_spatialDBFilename);
+ id = _id;
+ label = const_cast<char*>(_label);
+
+ dt = _dt;
+ fieldTpdt = const_cast<double*>(_fieldTpdt);
+ fieldT = const_cast<double*>(_fieldT);
+ fieldTmdt = const_cast<double*>(_fieldTmdt);
+
+ spaceDim = _spaceDim;
+ cellDim = _cellDim;
+ numVertices = _numVertices;
+ numCells = _numCells;
+ numCorners = _numCorners;
+ cells = const_cast<int*>(_cells);
+
+ dampingConsts = const_cast<double*>(_dampingConsts);
+ valsResidual = const_cast<double*>(_valsResidual);
+ valsJacobian = const_cast<double*>(_valsJacobian);
+} // constructor
+
+pylith::bc::AbsorbingDampersDataLine2::~AbsorbingDampersDataLine2(void)
+{}
+
+
+// End of file
Copied: short/3D/PyLith/trunk/unittests/libtests/bc/data/AbsorbingDampersDataLine2.hh (from rev 8141, short/3D/PyLith/trunk/unittests/libtests/bc/data/AbsorbingDampersData1D.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/data/AbsorbingDampersData1D.hh 2007-10-18 16:40:11 UTC (rev 8141)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/data/AbsorbingDampersDataLine2.hh 2007-10-19 00:29:48 UTC (rev 8152)
@@ -0,0 +1,70 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#if !defined(pylith_bc_absorbingdampersdataline2_hh)
+#define pylith_bc_absorbingdampersdataline2_hh
+
+#include "AbsorbingDampersData.hh"
+
+namespace pylith {
+ namespace bc {
+ class AbsorbingDampersDataLine2;
+ } // pylith
+} // bc
+
+class pylith::bc::AbsorbingDampersDataLine2 : public AbsorbingDampersData
+{
+
+public:
+
+ /// Constructor
+ AbsorbingDampersDataLine2(void);
+
+ /// Destructor
+ ~AbsorbingDampersDataLine2(void);
+
+private:
+
+ static const char* _meshFilename;
+
+ static const int _numBasis;
+ static const int _numQuadPts;
+ static const double _quadPts[];
+ static const double _quadWts[];
+ static const double _basis[];
+ static const double _basisDerivRef[];
+
+ static const char* _spatialDBFilename;
+ static const int _id;
+ static const char* _label;
+
+ static const double _dt;
+ static const double _fieldTpdt[];
+ static const double _fieldT[];
+ static const double _fieldTmdt[];
+
+ static const int _spaceDim;
+ static const int _cellDim;
+ static const int _numVertices;
+ static const int _numCells;
+ static const int _numCorners;
+ static const int _cells[];
+
+ static const double _dampingConsts[];
+ static const double _valsResidual[];
+ static const double _valsJacobian[];
+
+};
+
+#endif // pylith_bc_absorbingdampersdata1d_hh
+
+// End of file
Modified: short/3D/PyLith/trunk/unittests/libtests/bc/data/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/data/Makefile.am 2007-10-19 00:28:55 UTC (rev 8151)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/data/Makefile.am 2007-10-19 00:29:48 UTC (rev 8152)
@@ -13,6 +13,7 @@
noinst_DATA = \
line2.mesh \
line2.spatialdb \
+ elasticstrain1d.spatialdb \
tri3.mesh \
tri3.spatialdb \
tri3_b.spatialdb \
Added: short/3D/PyLith/trunk/unittests/libtests/bc/data/elasticstrain1d.spatialdb
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/data/elasticstrain1d.spatialdb 2007-10-19 00:28:55 UTC (rev 8151)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/data/elasticstrain1d.spatialdb 2007-10-19 00:29:48 UTC (rev 8152)
@@ -0,0 +1,14 @@
+#SPATIAL.ascii 1
+SimpleDB {
+ num-values = 3
+ value-names = density vs vp
+ value-units = kg/m^3 m/s m/s
+ num-locs = 1
+ data-dim = 0
+ space-dim = 1
+ cs-data = cartesian {
+ to-meters = 1.0
+ space-dim = 1
+ }
+}
+0.0 2500.0 3464.1016151377544 6000.0
More information about the cig-commits
mailing list