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

luis at geodynamics.org luis at geodynamics.org
Wed Feb 13 01:51:16 PST 2008


Author: luis
Date: 2008-02-13 01:51:16 -0800 (Wed, 13 Feb 2008)
New Revision: 9295

Added:
   cs/benchmark/cigma/trunk/src/QuadratureIO.cpp
   cs/benchmark/cigma/trunk/src/QuadratureIO.h
Log:
Moved QuadratureIO out of Misc.{h,cpp}


Added: cs/benchmark/cigma/trunk/src/QuadratureIO.cpp
===================================================================
--- cs/benchmark/cigma/trunk/src/QuadratureIO.cpp	                        (rev 0)
+++ cs/benchmark/cigma/trunk/src/QuadratureIO.cpp	2008-02-13 09:51:16 UTC (rev 9295)
@@ -0,0 +1,216 @@
+#include <iostream>
+#include "QuadratureIO.h"
+#include "StringUtils.h"
+
+using namespace std;
+using namespace cigma;
+
+// ---------------------------------------------------------------------------
+
+void configure_quadrature(AnyOption *opt, QuadratureIO *quadratureIO, const char *opt_prefix)
+{
+    assert(opt != 0);
+    assert(quadratureIO != 0);
+
+    char *in;
+
+    in = opt->getValue("rule-order");
+    if (in != 0)
+    {
+        quadratureIO->quadrature_order = in;
+    }
+
+    in = opt->getValue("rule");
+    if (in != 0)
+    {
+        quadratureIO->quadrature_path = in;
+    }
+
+    in = opt->getValue("rule-points");
+    if (in != 0)
+    {
+        quadratureIO->points_path = in;
+    }
+
+    in = opt->getValue("rule-weights");
+    if (in != 0)
+    {
+        quadratureIO->weights_path = in;
+    }
+}
+
+
+// ---------------------------------------------------------------------------
+
+QuadratureIO::QuadratureIO()
+{
+    quadrature = 0;
+}
+
+QuadratureIO::~QuadratureIO()
+{
+    if (quadrature != 0)
+    {
+        delete quadrature;
+    }
+}
+
+
+// ---------------------------------------------------------------------------
+
+void QuadratureIO::load(cigma::Cell *cell)
+{
+    cout << "Calling QuadratureIO::load()" << endl;
+
+    assert(cell != 0);
+
+    // XXX: change *_nsd to *_celldim since we are
+    // talking about quadrature points in the appropriate
+    // reference domain
+
+    const int tri_nno = 1;
+    const int tri_nsd = 3;
+    double tri_qpts[tri_nno * tri_nsd] = {
+        0.0, 0.0, 0.0
+    };
+    double tri_qwts[tri_nno] = {
+        0.0
+    };
+
+    const int quad_nno = 1;
+    const int quad_nsd = 3;
+    double quad_qpts[quad_nno * quad_nsd] = {
+        0.0, 0.0, 0.0
+    };
+    double quad_qwts[quad_nno] = {
+        0.0
+    };
+
+    const int tet_nno = 8;
+    const int tet_nsd = 3;
+    double tet_qpts[tet_nno * tet_nsd] = {
+        -0.68663473, -0.72789005, -0.75497035,
+        -0.83720867, -0.85864055,  0.08830369,
+        -0.86832263,  0.13186633, -0.75497035,
+        -0.93159441, -0.4120024 ,  0.08830369,
+         0.16949513, -0.72789005, -0.75497035,
+        -0.39245447, -0.85864055,  0.08830369,
+        -0.50857335,  0.13186633, -0.75497035,
+        -0.74470688, -0.4120024 ,  0.08830369 };
+    double tet_qwts[tet_nno] = {
+        0.29583885,  0.12821632,  0.16925605,  0.07335544,  0.29583885,
+        0.12821632,  0.16925605,  0.07335544 };
+    for (int i = 0; i < tet_nno; i++)
+    {
+        for (int j = 0; j < tet_nsd; j++)
+        {
+            int n = tet_nsd * i + j;
+            tet_qpts[n] += 1;
+            tet_qpts[n] *= 0.5;
+        }
+    }
+
+    const int hex_nno = 8;
+    const int hex_nsd = 3;
+    double hex_qpts[8*3] = {
+        -0.57735027, -0.57735027, -0.57735027,
+         0.57735027, -0.57735027, -0.57735027,
+         0.57735027,  0.57735027, -0.57735027,
+        -0.57735027,  0.57735027, -0.57735027,
+        -0.57735027, -0.57735027,  0.57735027,
+         0.57735027, -0.57735027,  0.57735027,
+         0.57735027,  0.57735027,  0.57735027,
+        -0.57735027,  0.57735027,  0.57735027 };
+    double hex_qwts[8*3] = { 1.,  1.,  1.,  1.,  1.,  1.,  1.,  1. };
+
+
+    int nq,nd;
+    double *qx, *qw;
+
+    nq = 0;
+    nd = 0;
+    qx = 0;
+    qw = 0;
+
+    if (quadrature_path != "")
+    {
+        string quadrature_loc, quadrature_file, quadrature_ext;
+        parse_dataset_path(quadrature_path, quadrature_loc, quadrature_file, quadrature_ext);
+        new_reader(&reader, quadrature_ext);
+
+        if (reader->getType() == Reader::HDF_READER)
+        {
+            // Load quadrature from HDF5 file
+        }
+        else if (reader->getType() == Reader::TXT_READER)
+        {
+            // Load quadrature from 
+        }
+        else if (reader->getType() == Reader::VTK_READER)
+        {
+            // XXX: not supported!
+            assert(false);
+        }
+    }
+    else if (quadrature_order != "")
+    {
+        int order;
+        string_to_int(quadrature_order, order);
+
+        if (order > 0)
+        {
+            /* 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
+    {
+        // assign reasonable defaults
+        switch (cell->geometry())
+        {
+        case Cell::TRIANGLE:
+            quadrature = new Quadrature();
+            quadrature->set_quadrature(tri_qpts, tri_qwts, tri_nno, tri_nsd);
+            quadrature->set_globaldim(tri_nsd);
+            break;
+        case Cell::QUADRANGLE:
+            quadrature = new Quadrature();
+            quadrature->set_quadrature(quad_qpts, quad_qwts, quad_nno, quad_nsd);
+            quadrature->set_globaldim(quad_nsd);
+            break;
+        case Cell::TETRAHEDRON:
+            quadrature = new Quadrature();
+            quadrature->set_quadrature(tet_qpts, tet_qwts, tet_nno, tet_nsd);
+            quadrature->set_globaldim(tet_nsd);
+            break;
+        case Cell::HEXAHEDRON:
+            quadrature = new Quadrature();
+            quadrature->set_quadrature(hex_qpts, hex_qwts, hex_nno, hex_nsd);
+            quadrature->set_globaldim(hex_nsd);
+            break;
+        default:
+            break;
+        }
+    }
+
+    if ((qx != 0) && (qw != 0))
+    {
+        quadrature = new Quadrature();
+        quadrature->set_quadrature(qx, qw, nq, nd);
+        quadrature->set_globaldim(3); // XXX: how to treat 2D case?
+    }
+
+    assert(quadrature != 0);
+    assert(quadrature->n_points() > 0);
+    assert(quadrature->n_refdim() > 0);
+    assert(quadrature->n_globaldim() > 0);
+}
+
+// ---------------------------------------------------------------------------

Added: cs/benchmark/cigma/trunk/src/QuadratureIO.h
===================================================================
--- cs/benchmark/cigma/trunk/src/QuadratureIO.h	                        (rev 0)
+++ cs/benchmark/cigma/trunk/src/QuadratureIO.h	2008-02-13 09:51:16 UTC (rev 9295)
@@ -0,0 +1,35 @@
+#ifndef __QUADRATURE_IO_H__
+#define __QUADRATURE_IO_H__
+
+#include <string>
+#include "AnyOption.h"
+#include "Reader.h"
+#include "Writer.h"
+#include "Quadrature.h"
+#include "Cell.h"
+
+class QuadratureIO
+{
+public:
+    cigma::Reader *reader;
+    cigma::Writer *writer;
+
+public:
+    std::string quadrature_order;
+    std::string quadrature_path;
+    std::string points_path;
+    std::string weights_path;
+    cigma::Quadrature *quadrature;
+
+public:
+    QuadratureIO();
+    ~QuadratureIO();
+    void load(cigma::Cell *cell);
+    void save();
+};
+
+
+void configure_quadrature(AnyOption *opt, QuadratureIO *quadratureIO, const char *opt_prefix);
+
+
+#endif



More information about the cig-commits mailing list