[cig-commits] r6574 - in short/3D/PyLith/trunk: . libsrc libsrc/faults unittests/libtests/faults unittests/libtests/faults/data

brad at geodynamics.org brad at geodynamics.org
Sun Apr 15 18:08:58 PDT 2007


Author: brad
Date: 2007-04-15 18:08:57 -0700 (Sun, 15 Apr 2007)
New Revision: 6574

Added:
   short/3D/PyLith/trunk/libsrc/faults/CohesiveTopology.cc
   short/3D/PyLith/trunk/libsrc/faults/CohesiveTopology.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/data/
   short/3D/PyLith/trunk/unittests/libtests/faults/data/Makefile.am
   short/3D/PyLith/trunk/unittests/libtests/faults/data/meshLine_orig.txt
   short/3D/PyLith/trunk/unittests/libtests/faults/data/meshTet4A_orig.txt
   short/3D/PyLith/trunk/unittests/libtests/faults/data/meshTri3A_orig.txt
Modified:
   short/3D/PyLith/trunk/configure.ac
   short/3D/PyLith/trunk/libsrc/Makefile.am
   short/3D/PyLith/trunk/libsrc/faults/FaultCohesive.cc
   short/3D/PyLith/trunk/libsrc/faults/Makefile.am
   short/3D/PyLith/trunk/unittests/libtests/faults/Makefile.am
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesive.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesive.hh
Log:
Started work on testing creation of cohesive elements.

Modified: short/3D/PyLith/trunk/configure.ac
===================================================================
--- short/3D/PyLith/trunk/configure.ac	2007-04-15 01:36:53 UTC (rev 6573)
+++ short/3D/PyLith/trunk/configure.ac	2007-04-16 01:08:57 UTC (rev 6574)
@@ -162,6 +162,7 @@
 		unittests/Makefile
 		unittests/libtests/Makefile
 		unittests/libtests/faults/Makefile
+		unittests/libtests/faults/data/Makefile
 		unittests/libtests/feassemble/Makefile
 		unittests/libtests/materials/Makefile
 		unittests/libtests/materials/data/Makefile

Modified: short/3D/PyLith/trunk/libsrc/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/libsrc/Makefile.am	2007-04-15 01:36:53 UTC (rev 6573)
+++ short/3D/PyLith/trunk/libsrc/Makefile.am	2007-04-16 01:08:57 UTC (rev 6574)
@@ -21,6 +21,7 @@
 lib_LTLIBRARIES = libpylith.la
 
 libpylith_la_SOURCES = \
+	faults/CohesiveTopology.cc \
 	faults/Fault.cc \
 	faults/FaultCohesive.cc \
 	faults/FaultCohesiveKin.cc \

Added: short/3D/PyLith/trunk/libsrc/faults/CohesiveTopology.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/CohesiveTopology.cc	2007-04-15 01:36:53 UTC (rev 6573)
+++ short/3D/PyLith/trunk/libsrc/faults/CohesiveTopology.cc	2007-04-16 01:08:57 UTC (rev 6574)
@@ -0,0 +1,247 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "CohesiveTopology.hh" // implementation of object methods
+
+#include "pylith/utils/sievetypes.hh" // USES PETSc Mesh
+
+// ----------------------------------------------------------------------
+void
+pylith::faults::CohesiveTopology::create(const ALE::Obj<Mesh>& mesh,
+			      const std::set<Mesh::point_type>& faultVertices)
+{ // create
+  typedef std::vector<Mesh::point_type> PointArray;
+
+  const ALE::Obj<sieve_type>& sieve = mesh->getSieve();
+  const ALE::Obj<Mesh> fault = new Mesh(mesh->comm(), mesh->debug());
+  const ALE::Obj<sieve_type> faultSieve = new sieve_type(sieve->comm(), 
+						    sieve->debug());
+  const std::set<Mesh::point_type>::const_iterator fvBegin = 
+    faultVertices.begin();
+  const std::set<Mesh::point_type>::const_iterator fvEnd = 
+    faultVertices.end();
+
+  // There should be logic here to determine this
+  int f = 0;
+  int debug = mesh->debug();
+  ALE::Obj<PointArray> face = new PointArray();
+  std::set<Mesh::point_type> faultCells;
+  
+  // Create a sieve which captures the fault
+  for(std::set<int>::const_iterator fv_iter = fvBegin;
+      fv_iter != fvEnd;
+      ++fv_iter) {
+    const ALE::Obj<sieve_type::traits::supportSequence>& cells =
+      sieve->support(*fv_iter);
+    const sieve_type::traits::supportSequence::iterator cBegin =
+      cells->begin();
+    const sieve_type::traits::supportSequence::iterator cEnd =
+      cells->end();
+    
+    if (debug)
+      std::cout << "Checking fault vertex " << *fv_iter << std::endl;
+    for(sieve_type::traits::supportSequence::iterator c_iter = cBegin;
+	c_iter != cEnd;
+	++c_iter) {
+      const unsigned int faceSize = 3; //_numFaceVertices(*c_iter, mesh);
+
+      if (debug)
+	std::cout << "  Checking cell " << *c_iter << std::endl;
+      if (faultCells.find(*c_iter) != faultCells.end())
+	continue;
+      const ALE::Obj<sieve_type::traits::coneSequence>& cone =
+	sieve->cone(*c_iter);
+      const sieve_type::traits::coneSequence::iterator  vBegin = cone->begin();
+      const sieve_type::traits::coneSequence::iterator  vEnd = cone->end();
+      
+      face->clear();
+      for(sieve_type::traits::coneSequence::iterator v_iter = vBegin;
+	  v_iter != vEnd;
+	  ++v_iter) {
+	if (faultVertices.find(*v_iter) != fvEnd) {
+	  if (debug)
+	    std::cout << "    contains fault vertex " << *v_iter << std::endl;
+	  face->insert(face->end(), *v_iter);
+	} // if
+      } // for
+      if (face->size() > faceSize)
+	throw ALE::Exception("Invalid fault mesh: Too many vertices of an "
+			     "element on the fault");
+      if (face->size() == faceSize) {
+	if (debug)
+	  std::cout << "  Contains a face on the fault" << std::endl;
+	const ALE::Obj<sieve_type::supportSet> preFace = 
+	  faultSieve->nJoin1(face);
+	
+	if (preFace->size() > 1)
+	  throw ALE::Exception("Invalid fault sieve: Multiple faces from "
+			       "vertex set");
+	else if (preFace->size() == 1)
+	  faultSieve->addArrow(*preFace->begin(), *c_iter);
+	else if (preFace->size() == 0) {
+	  if (debug)
+	    std::cout << "  Adding face " << f << std::endl;
+	  int color = 0;
+	  for(PointArray::const_iterator f_iter = face->begin();
+	      f_iter != face->end();
+	      ++f_iter) {
+	    if (debug)
+	      std::cout << "    vertex " << *f_iter << std::endl;
+	    faultSieve->addArrow(*f_iter, f, color++);
+	  } // for
+	  faultSieve->addArrow(f, *c_iter);
+	  f++;
+	} // if/else
+	faultCells.insert(*c_iter);
+      } // if
+    } // for
+  } // for
+  fault->setSieve(faultSieve);
+  fault->stratify();
+  faultCells.clear();
+  if (debug)
+    fault->view("Fault mesh");
+
+  // Add new shadow vertices
+  const ALE::Obj<Mesh::label_sequence>& fVertices = fault->depthStratum(0);
+  const ALE::Obj<Mesh::label_sequence>& vertices = mesh->depthStratum(0);
+  Mesh::point_type newVertex = *vertices->begin() + vertices->size();
+  std::map<int,int> vertexRenumber;
+  
+  for(Mesh::label_sequence::iterator v_iter = fVertices->begin();
+      v_iter != fVertices->end();
+      ++v_iter) {
+    if (debug) 
+      std::cout << "Duplicating " << *v_iter << " to "
+		<< vertexRenumber[*v_iter] << std::endl;
+    vertexRenumber[*v_iter] = newVertex++;
+  } // for
+
+  // Split the mesh along the fault sieve and create cohesive elements
+  const ALE::Obj<Mesh::label_sequence>& faces = fault->depthStratum(1);
+  PointArray newVertices;
+  
+  for(Mesh::label_sequence::iterator f_iter = faces->begin();
+      f_iter != faces->end();
+      ++f_iter) {
+    if (debug)
+      std::cout << "Considering fault face " << *f_iter << std::endl;
+    const ALE::Obj<sieve_type::traits::supportSequence>& cells =
+      faultSieve->support(*f_iter);
+    Mesh::point_type cell = std::max(*cells->begin(), *(++cells->begin()));
+    const ALE::Obj<sieve_type::traits::coneSequence>& cone = sieve->cone(cell);
+    
+    if (debug)
+      std::cout << "  Replacing cell " << cell << std::endl;
+    newVertices.clear();
+    for(sieve_type::traits::coneSequence::iterator v_iter = cone->begin();
+	v_iter != cone->end();
+	++v_iter) {
+      if (vertexRenumber.find(*v_iter) != vertexRenumber.end()) {
+	if (debug)
+	  std::cout << "    vertex " << vertexRenumber[*v_iter] << std::endl;
+	newVertices.insert(newVertices.end(), vertexRenumber[*v_iter]);
+      } else {
+	if (debug)
+	  std::cout << "    vertex " << *v_iter << std::endl;
+	newVertices.insert(newVertices.end(), *v_iter);
+      } // if/else
+    } // for
+    sieve->clearCone(cell);
+    int color = 0;
+    for(PointArray::const_iterator v_iter = newVertices.begin();
+	v_iter != newVertices.end();
+	++v_iter) {
+      sieve->addArrow(*v_iter, cell, color++);
+    } // for
+  } // for
+
+  // Fix coordinates
+  const ALE::Obj<real_section_type>& coordinates = 
+    mesh->getRealSection("coordinates");
+  const ALE::Obj<Mesh::label_sequence>& fVertices2 = fault->depthStratum(0);
+
+  for(Mesh::label_sequence::iterator v_iter = fVertices2->begin();
+      v_iter != fVertices2->end();
+      ++v_iter) {
+    coordinates->addPoint(vertexRenumber[*v_iter],
+			  coordinates->getFiberDimension(*v_iter));
+  } // for
+  mesh->reallocate(coordinates);
+  for(Mesh::label_sequence::iterator v_iter = fVertices2->begin();
+      v_iter != fVertices2->end();
+      ++v_iter)
+    coordinates->updatePoint(vertexRenumber[*v_iter], 
+			     coordinates->restrictPoint(*v_iter));
+
+} // createCohesiveCells
+
+// ----------------------------------------------------------------------
+unsigned int
+pylith::faults::CohesiveTopology::_numFaceVertices(const Mesh::point_type& cell,
+						   const ALE::Obj<Mesh>& mesh)
+{ // _numFaceVertices
+
+  /** :QUESTION:
+   *
+   * If mesh is interpolated is there a simple way to get the number
+   * of vertices on the face (3-D), edge (2-D), end (1-D) of a cell?
+   */
+  const int cellDim = mesh->getDimension();
+
+  const ALE::Obj<sieve_type>& sieve = mesh->getSieve();
+  unsigned int numCorners = sieve->nCone(cell, mesh->depth())->size();
+
+  unsigned int numFaceVertices = 0;
+  switch (cellDim)
+    { // switch
+    case 1 :
+      numFaceVertices = 1;
+      break;
+    case 2:
+      switch (numCorners)
+	{ // switch
+	case 3 : // tri3
+	  numFaceVertices = 2; // Edge has 2 vertices
+	  break;
+	case 4 : // quad4
+	  numFaceVertices = 2; // Edge has 2 vertices
+	  break;
+	default :
+	  std::cerr << "numCorners: " << numCorners << std::endl;
+	  assert(0);
+	} // switch
+      break;
+    case 3:
+      switch (numCorners)
+	{ // switch
+	case 4 : // tet4
+	  numFaceVertices = 3; // Face has 3 vertices
+	  break;
+	case 8 : // hex8
+	  numFaceVertices = 4; // Face has 4 vertices
+	  break;
+	default :
+	  std::cerr << "numCorners: " << numCorners << std::endl;
+	  assert(0);
+	} // switch
+      break;
+    default:
+      assert(0);
+    } // swtich
+  return numFaceVertices;
+} // _numFaceVertices
+
+
+// End of file

Added: short/3D/PyLith/trunk/libsrc/faults/CohesiveTopology.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/CohesiveTopology.hh	2007-04-15 01:36:53 UTC (rev 6573)
+++ short/3D/PyLith/trunk/libsrc/faults/CohesiveTopology.hh	2007-04-16 01:08:57 UTC (rev 6574)
@@ -0,0 +1,66 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/** @file libsrc/faults/CohesiveTopology.hh
+ *
+ * @brief C++ object to manage creation of cohesive cells.
+ */
+
+#if !defined(pylith_faults_cohesivetopology_hh)
+#define pylith_faults_cohesivetopology_hh
+
+#include "pylith/utils/sievetypes.hh" // USES PETSc Mesh
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace faults {
+    class CohesiveTopology;
+  } // faults
+} // pylith
+
+/// C++ object to manage creation of cohesive cells.
+class pylith::faults::CohesiveTopology
+{ // class Fault
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /** Create cohesive cells.
+   *
+   * @param mesh Finite-element mesh
+   * @param faultVertices Vertices assocated with faces of cells defining 
+   *   fault surface
+   */
+  static
+  void create(const ALE::Obj<Mesh>& mesh,
+	      const std::set<Mesh::point_type>& faultVertices);
+
+  // PRIVATE METHODS ////////////////////////////////////////////////////
+private :
+
+  /** Get number of vertices on face.
+   *
+   * @param cell Finite-element cell
+   * @param mesh Finite-element mesh
+   *
+   * @returns Number of vertices on cell face
+   */
+  static
+  unsigned int _numFaceVertices(const Mesh::point_type& cell,
+		       const ALE::Obj<Mesh>& mesh);
+
+}; // class CohesiveTopology
+
+#endif // pylith_faults_cohesivetopology_hh
+
+
+// End of file 

Modified: short/3D/PyLith/trunk/libsrc/faults/FaultCohesive.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/FaultCohesive.cc	2007-04-15 01:36:53 UTC (rev 6573)
+++ short/3D/PyLith/trunk/libsrc/faults/FaultCohesive.cc	2007-04-16 01:08:57 UTC (rev 6574)
@@ -14,8 +14,9 @@
 
 #include "FaultCohesive.hh" // implementation of object methods
 
+#include "CohesiveTopology.hh" // USES CohesiveTopology::create()
+
 #include "pylith/utils/sievetypes.hh" // USES PETSc Mesh
-#include "src/dm/mesh/meshpylith.h" // USES ALE::PyLith::Builder
 
 #include <assert.h> // USES assert()
 #include <sstream> // USES std::ostringstream
@@ -72,7 +73,7 @@
     assert(!numbering.isNull());
     points.insert(numbering->getIndex(*c_iter)+numCells);
   } // for
-  ALE::PyLith::Builder::createCohesiveElements(*mesh, points);
+  CohesiveTopology::create(*mesh, points);
 } // adjustTopology
 
 

Modified: short/3D/PyLith/trunk/libsrc/faults/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/Makefile.am	2007-04-15 01:36:53 UTC (rev 6573)
+++ short/3D/PyLith/trunk/libsrc/faults/Makefile.am	2007-04-16 01:08:57 UTC (rev 6574)
@@ -14,6 +14,7 @@
 include $(top_srcdir)/subpackage.am
 
 subpkginclude_HEADERS = \
+	CohesiveTopology.hh \
 	Fault.hh \
 	Fault.icc \
 	FaultCohesive.hh \

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/Makefile.am	2007-04-15 01:36:53 UTC (rev 6573)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/Makefile.am	2007-04-16 01:08:57 UTC (rev 6574)
@@ -13,7 +13,7 @@
 subpackage = faults
 include $(top_srcdir)/subpackage.am
 
-#SUBDIRS = data
+SUBDIRS = data
 
 TESTS = testfaults
 

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesive.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesive.cc	2007-04-15 01:36:53 UTC (rev 6573)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesive.cc	2007-04-16 01:08:57 UTC (rev 6574)
@@ -19,7 +19,10 @@
 #include "pylith/faults/FaultCohesiveKin.hh" // USES FaultsCohesiveKin
 
 #include "pylith/utils/sievetypes.hh" // USES PETSc Mesh
+#include "pylith/meshio/MeshIOAscii.hh" // USES MeshIOAscii
 
+#include <stdexcept> // TEMPORARY
+
 // ----------------------------------------------------------------------
 CPPUNIT_TEST_SUITE_REGISTRATION( pylith::faults::TestFaultCohesive );
 
@@ -28,29 +31,30 @@
 void
 pylith::faults::TestFaultCohesive::testAdjustTopologyLine(void)
 { // testAdjustTopologyLine
-  //FaultDataLine data;
-  //_testAdjustTopologyLine(data);
+  const char* filename = "data/meshTet4A_orig.txt";
+  _testAdjustTopology(filename);
 } // testAdjustTopologyLine
 
 // ----------------------------------------------------------------------
 // Test adjustTopology().
 void
-pylith::faults::TestFaultCohesive::_testAdjustTopologyLine(
-						      const FaultData& data)
-{ // _testAdjustTopologyLine
-  //ALE::Obj<ALE::Mesh> mesh(new ALE::Mesh);
-  //_createMesh(&mesh, data);
+pylith::faults::TestFaultCohesive::_testAdjustTopology(const char* filename)
+{ // _testAdjustTopology
+  ALE::Obj<ALE::Mesh> mesh;
+  meshio::MeshIOAscii iohandler;
+  iohandler.filename(filename);
+  iohandler.debug(true);
+  iohandler.interpolate(true);
+  iohandler.read(&mesh);
 
   FaultCohesiveKin fault;
-} // _testAdjustTopologyLine
+  fault.id(0);
+  fault.label("fault");
+  fault.adjustTopology(&mesh);
 
-// ----------------------------------------------------------------------
-// Create mesh.
-void
-pylith::faults::TestFaultCohesive::_createMesh(ALE::Obj<ALE::Mesh>* mesh,
-					       const FaultData& data)
-{ // _createMesh
-} // _createMesh
+  mesh->view("Mesh");
 
+  throw std::logic_error("Unit test not fully implemented.");
+} // _testAdjustTopology
 
 // End of file 

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesive.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesive.hh	2007-04-15 01:36:53 UTC (rev 6573)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesive.hh	2007-04-16 01:08:57 UTC (rev 6574)
@@ -53,12 +53,8 @@
 public :
 
   /// Test adjustTopology().
-  void _testAdjustTopologyLine(const FaultData& data);
+  void _testAdjustTopology(const char* filename);
 
-  /// Create mesh.
-  void _createMesh(ALE::Obj<ALE::Mesh>* mesh,
-		   const FaultData& data);
-
 }; // class TestFaultCohesive
 
 #endif // pylith_faults_testfaultcohesive_hh

Added: short/3D/PyLith/trunk/unittests/libtests/faults/data/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/Makefile.am	2007-04-15 01:36:53 UTC (rev 6573)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/Makefile.am	2007-04-16 01:08:57 UTC (rev 6574)
@@ -0,0 +1,32 @@
+# -*- Makefile -*-
+#
+# ----------------------------------------------------------------------
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+noinst_DATA = \
+	meshLine_orig.txt \
+	meshTri3A_orig.txt \
+	meshTet4A_orig.txt
+
+noinst_TMP =
+
+# 'export' the input files by performing a mock install
+export_datadir = $(top_builddir)/unittests/libtests/faults/data
+export-data: $(noinst_DATA)
+	for f in $(noinst_DATA); do $(install_sh_DATA) $(srcdir)/$$f $(export_datadir); done
+
+BUILT_SOURCES = export-data
+
+CLEANFILES = \
+	$(export_datadir)/$(noinst_DATA) \
+	$(export_datadir)/$(noinst_TMP)
+
+
+# End of file 

Added: short/3D/PyLith/trunk/unittests/libtests/faults/data/meshLine_orig.txt
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/meshLine_orig.txt	2007-04-15 01:36:53 UTC (rev 6573)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/meshLine_orig.txt	2007-04-16 01:08:57 UTC (rev 6574)
@@ -0,0 +1,33 @@
+mesh = {
+  dimension = 1
+  use-index-zero = true
+  vertices = {
+    dimension = 1
+    count = 3
+    coordinates = {
+             0     -1.0
+             1      0.0
+             2      1.0
+    }
+  }
+  cells = {
+    count = 2
+    num-corners = 2
+    simplices = {
+             0       0       1
+             1       1       2
+    }
+    material-ids = {
+             0   0
+             1   0
+    }
+  }
+  group = {
+    name = fault
+    type = vertices
+    count = 1
+    indices = {
+      1
+    }
+  }
+}

Added: short/3D/PyLith/trunk/unittests/libtests/faults/data/meshTet4A_orig.txt
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/meshTet4A_orig.txt	2007-04-15 01:36:53 UTC (rev 6573)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/meshTet4A_orig.txt	2007-04-16 01:08:57 UTC (rev 6574)
@@ -0,0 +1,37 @@
+mesh = {
+  dimension = 3
+  use-index-zero = true
+  vertices = {
+    dimension = 3
+    count = 5
+    coordinates = {
+             0     -1.0  0.0  0.0
+             1      0.0 -1.0  0.0
+             2      0.0  0.0  1.0
+             3      0.0  1.0  0.0
+             4      1.0  0.0  0.0
+    }
+  }
+  cells = {
+    count = 2
+    num-corners = 4
+    simplices = {
+             0       1  2  3  0
+             1       1  3  2  4
+    }
+    material-ids = {
+             0   0
+             1   0
+    }
+  }
+  group = {
+    name = fault
+    type = vertices
+    count = 3
+    indices = {
+      1
+      2
+      3
+    }
+  }
+}

Added: short/3D/PyLith/trunk/unittests/libtests/faults/data/meshTri3A_orig.txt
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/meshTri3A_orig.txt	2007-04-15 01:36:53 UTC (rev 6573)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/meshTri3A_orig.txt	2007-04-16 01:08:57 UTC (rev 6574)
@@ -0,0 +1,35 @@
+mesh = {
+  dimension = 2
+  use-index-zero = true
+  vertices = {
+    dimension = 2
+    count = 4
+    coordinates = {
+             0     -1.0  0.0
+             1      0.0  1.0
+             2      0.0 -1.0
+             2      1.0  0.0
+    }
+  }
+  cells = {
+    count = 2
+    num-corners = 3
+    simplices = {
+             0       0  2  1
+             1       1  2  3
+    }
+    material-ids = {
+             0   0
+             1   0
+    }
+  }
+  group = {
+    name = fault
+    type = vertices
+    count = 2
+    indices = {
+      1
+      2
+    }
+  }
+}



More information about the cig-commits mailing list