[cig-commits] r9183 - cs/benchmark/cigma/trunk/src

luis at geodynamics.org luis at geodynamics.org
Tue Jan 29 11:47:54 PST 2008


Author: luis
Date: 2008-01-29 11:47:52 -0800 (Tue, 29 Jan 2008)
New Revision: 9183

Modified:
   cs/benchmark/cigma/trunk/src/Misc.cpp
   cs/benchmark/cigma/trunk/src/Misc.h
Log:
Generic loaders for Field and Quadrature objects.

Determine the appropriate initialization procedure based on the value
of reader->getType(). These methods are meant to be reused across
the various Commands.

Modified: cs/benchmark/cigma/trunk/src/Misc.cpp
===================================================================
--- cs/benchmark/cigma/trunk/src/Misc.cpp	2008-01-29 19:47:50 UTC (rev 9182)
+++ cs/benchmark/cigma/trunk/src/Misc.cpp	2008-01-29 19:47:52 UTC (rev 9183)
@@ -5,8 +5,16 @@
 
 #include "Misc.h"
 #include "AnnLocator.h"
+#include "StringUtils.h"
 
+#include "HdfReader.h"
+#include "TextReader.h"
+#include "VtkReader.h"
 
+#include "HdfWriter.h"
+#include "TextWriter.h"
+#include "VtkWriter.h"
+
 using namespace std;
 using namespace cigma;
 
@@ -32,8 +40,59 @@
 
 // ---------------------------------------------------------------------------
 
-void load_quadrature(Cell *cell, Quadrature *quadrature)
+void load_reader(Reader **reader, string ext)
 {
+    if (ext == ".h5")
+    {
+        *reader = new HdfReader();
+        return;
+    }
+
+    if (ext == ".txt")
+    {
+        *reader == new TextReader();
+        return;
+    }
+
+    if (ext == ".vtk")
+    {
+        *reader == new VtkReader();
+        return;
+    }
+
+}
+
+void load_writer(Writer **writer, string ext)
+{
+    if (ext == ".h5")
+    {
+        writer = new HdfWriter();
+        return;
+    }
+
+    if (ext == ".txt")
+    {
+        writer = new TextWriter();
+        return;
+    }
+
+    if (ext == ".vtk")
+    {
+        writer = new VtkWriter();
+        return;
+    }
+
+}
+
+void load_quadrature(Quadrature *quadrature,
+                     Cell *cell,
+                     Reader *reader,
+                     string arg_quadrature_path,
+                     string arg_points_loc,
+                     string arg_weights_loc,
+                     string arg_order)
+{
+    assert(quadrature != 0);
     assert(cell != 0);
 
     // XXX: change *_nsd to *_celldim since we are
@@ -96,40 +155,96 @@
     double hex_qwts[8*3] = { 1.,  1.,  1.,  1.,  1.,  1.,  1.,  1. };
 
 
-    switch (cell->geometry())
+    if (reader == 0)
     {
-    case Cell::TRIANGLE:
-        quadrature->set_quadrature(tri_qpts, tri_qwts, tri_nno, tri_nsd);
-        quadrature->set_globaldim(tri_nsd);
-        break;
-    case Cell::QUADRANGLE:
-        quadrature->set_quadrature(quad_qpts, quad_qwts, quad_nno, quad_nsd);
-        quadrature->set_globaldim(quad_nsd);
-        break;
-    case Cell::TETRAHEDRON:
-        quadrature->set_quadrature(tet_qpts, tet_qwts, tet_nno, tet_nsd);
-        quadrature->set_globaldim(tet_nsd);
-        break;
-    case Cell::HEXAHEDRON:
-        quadrature->set_quadrature(hex_qpts, hex_qwts, hex_nno, hex_nsd);
-        quadrature->set_globaldim(hex_nsd);
-        break;
+        assert(cell != 0);
+
+        if (order < 0)
+        {
+            // assign defaults
+            switch (cell->geometry())
+            {
+            case Cell::TRIANGLE:
+                quadrature->set_quadrature(tri_qpts, tri_qwts, tri_nno, tri_nsd);
+                quadrature->set_globaldim(tri_nsd);
+                break;
+            case Cell::QUADRANGLE:
+                quadrature->set_quadrature(quad_qpts, quad_qwts, quad_nno, quad_nsd);
+                quadrature->set_globaldim(quad_nsd);
+                break;
+            case Cell::TETRAHEDRON:
+                quadrature->set_quadrature(tet_qpts, tet_qwts, tet_nno, tet_nsd);
+                quadrature->set_globaldim(tet_nsd);
+                break;
+            case Cell::HEXAHEDRON:
+                quadrature->set_quadrature(hex_qpts, hex_qwts, hex_nno, hex_nsd);
+                quadrature->set_globaldim(hex_nsd);
+                break;
+            }
+        }
+        else
+        {
+            /* call FiatProxy
+            //fiat->set(quadrature);
+                int npts,dim;
+                double *qx,*qw;
+                fiat->quadrature(geometry, order, &qx, &qw, &npts, &dim);
+                quadrature->set_quadrature(qx, qw, nno, nsd);
+                delete [] qx;
+                delete [] qw;
+            // */
+        }
     }
+    else
+    {
+        switch (reader->getType())
+        {
+        case Reader::HDF_READER:
+            assert(quadrature_path != "");
+            break;
 
+        case Reader::TXT_READER:
+            assert(points_loc != "");
+            assert(weights_loc != "");
+            break;
+        }
+    }
+
+    assert(quadrature->n_points() > 0);
+    assert(quadrature->n_refdim() > 0);
+    assert(quadrature->n_globaldim() > 0);
 }
 
-void load_mesh()
+void load_mesh(MeshPart *meshPart,
+               Reader *reader,
+               string mesh_path,
+               string coords_loc,
+               string connect_loc)
 {
-}
+    assert(meshPart != 0);
 
-void load_field()
-{
+    switch (reader->getType())
+    {
+    case Reader::HDF_READER:
+        break;
+
+    case Reader::TXT_READER:
+        break;
+
+    case Reader::VTK_READER:
+        break;
+    }
 }
 
-void load_field(std::string inputfile,
-                std::string location,
-                cigma::VtkUgReader &reader,
-                cigma::FE_Field *field)
+
+void load_field(FE_Field *field,
+                MeshPart *meshPart,
+                Reader *fieldReader,
+                Reader *meshReader,
+                string field_path,
+                string mesh_path,
+                string coords_path,
+                string connect_path)
 {
 
     int nno, nsd;
@@ -140,6 +255,11 @@
     int dofs_nno, dofs_valdim;
     double *dofs;
 
+
+    // XXX: parse field_path here
+
+
+
     /* XXX: For the following two cases, I need a static initializer on
      * Reader class that instantiates the right subclass based on the
      * detected filetype,
@@ -155,20 +275,29 @@
      * For detecting the filetype, one could rely only on the extension,
      * or possibly check for a magic number at the beginning of the file.
      */
-    //* VtkUgReader case...
-    reader.open(inputfile);
-    reader.get_coordinates(&coords, &nno, &nsd);
-    reader.get_connectivity(&connect, &nel, &ndofs);
-    //reader.get_dofs(location.c_str(), &dofs, &dofs_nno, &dofs_valdim);
-    //reader.get_vector_point_data(location.c_str(), &dofs, &dofs_nno, &dofs_valdim);
-    reader.get_scalar_point_data(location.c_str(), &dofs, &dofs_nno, &dofs_valdim);
-    //reader.get_point_data(location.c_str(), &dofs, &dofs_nno, &dofs_valdim);
-    // */
+    switch (reader->getType())
+    {
+    case Reader::HDF_READER:
+        //XXX: cast to HdfReader
+        break;
 
-    //* HdfReader case...
-    // */
+    case Reader::TXT_READER:
+        break;
 
+    case Reader::VTK_READER:
+        //XXX: cast to VtkReader
+        //reader.open(inputfile);
+        reader->get_coordinates(&coords, &nno, &nsd);
+        reader->get_connectivity(&connect, &nel, &ndofs);
+        //reader->get_dofs(location.c_str(), &dofs, &dofs_nno, &dofs_valdim);
+        //reader->get_vector_point_data(location.c_str(), &dofs, &dofs_nno, &dofs_valdim);
+        reader->get_scalar_point_data(location.c_str(), &dofs, &dofs_nno, &dofs_valdim);
+        //reader->get_point_data(location.c_str(), &dofs, &dofs_nno, &dofs_valdim);
+        break;
+    }
 
+
+
     field->dim = nsd;
     field->rank = dofs_valdim;
     //field->meshPart = new cigma::VtkUgMeshPart();
@@ -177,10 +306,9 @@
     field->meshPart->set_connectivity(connect, nel, ndofs);
 
 
+    // move to set_mesh()
     field->meshPart->set_cell();
     assert(field->meshPart->cell != 0);
-
-
     //* // XXX: Create locator only when necessary
     cigma::AnnLocator *locator = new cigma::AnnLocator();
     field->meshPart->set_locator(locator);
@@ -251,6 +379,7 @@
     field->fe->cell = field->meshPart->cell;
     // */
 
+    //XXX: move to field->set_quadrature(...)
     Quadrature *Q = new cigma::Quadrature();
     load_quadrature(field->meshPart->cell, Q);
 

Modified: cs/benchmark/cigma/trunk/src/Misc.h
===================================================================
--- cs/benchmark/cigma/trunk/src/Misc.h	2008-01-29 19:47:50 UTC (rev 9182)
+++ cs/benchmark/cigma/trunk/src/Misc.h	2008-01-29 19:47:52 UTC (rev 9183)
@@ -12,8 +12,10 @@
 
 #include "Cell.h"
 #include "Quadrature.h"
+#include "MeshPart.h"
 #include "FE_Field.h"
-#include "VtkUgReader.h"
+#include "Reader.h"
+#include "Writer.h"
 
 
 double pick_from_interval(double a, double b);
@@ -24,11 +26,14 @@
 void load_quadrature();
 void load_field();
 
+void load_reader(cigma::Reader **reader, std::string ext);
+void load_writer(cigma::Writer **writer, std::string ext);
+
 void load_quadrature(cigma::Cell *cell,
                      cigma::Quadrature *quadrature);
 
-void load_field(std::string inputfile,
-                std::string location,
-                cigma::VtkUgReader &reader,
-                cigma::FE_Field *field);
+void load_field(cigma::Reader *reader,
+                cigma::FE_Field *field,
+                std::string field_location);
+
 #endif



More information about the cig-commits mailing list