[cig-commits] r14079 - cs/cigma/trunk/src

luis at geodynamics.org luis at geodynamics.org
Wed Feb 18 08:14:29 PST 2009


Author: luis
Date: 2009-02-18 08:14:28 -0800 (Wed, 18 Feb 2009)
New Revision: 14079

Modified:
   cs/cigma/trunk/src/FE.cpp
   cs/cigma/trunk/src/FE.h
Log:
Using valarrays in FE class.

Modified: cs/cigma/trunk/src/FE.cpp
===================================================================
--- cs/cigma/trunk/src/FE.cpp	2009-02-18 16:14:26 UTC (rev 14078)
+++ cs/cigma/trunk/src/FE.cpp	2009-02-18 16:14:28 UTC (rev 14079)
@@ -21,16 +21,16 @@
 
 FE::FE()
 {
-    this->jxw = 0;
-    this->basis_tab = 0;
-    this->basis_jet = 0;
+    //this->jxw = 0;
+    //this->basis_tab = 0;
+    //this->basis_jet = 0;
 }
 
 FE::FE(Cell::type celltype)
 {
-    this->jxw = 0;
-    this->basis_tab = 0;
-    this->basis_jet = 0;
+    //this->jxw = 0;
+    //this->basis_tab = 0;
+    //this->basis_jet = 0;
 
     if (celltype != Cell::NONE)
     {
@@ -47,9 +47,9 @@
 
 FE::~FE()
 {
-    if (jxw != 0)       { delete [] jxw; jxw = 0; }
-    if (basis_tab != 0) { delete [] basis_tab; basis_tab = 0; }
-    if (basis_jet != 0) { delete [] basis_jet; basis_jet = 0; }
+    //if (jxw != 0)       { delete [] jxw; jxw = 0; }
+    //if (basis_tab != 0) { delete [] basis_tab; basis_tab = 0; }
+    //if (basis_jet != 0) { delete [] basis_jet; basis_jet = 0; }
 }
 
 void FE::init(shared_ptr<Quadrature> Q)
@@ -69,25 +69,35 @@
     assert(cell);
     assert(quadrature);
     assert(cell->cell_type() != Cell::NONE);
+
     const int nq = quadrature->n_points();
     const int ndofs = cell->n_nodes();
-    if (jxw != 0) { delete [] jxw; }
-    if (basis_tab != 0) { delete [] basis_tab; }
-    jxw = new double[nq];
-    basis_tab = new double[nq * ndofs];
-    cell->shape(nq, quadrature->points, basis_tab);
+
+    //if (jxw != 0) { delete [] jxw; }
+    //if (basis_tab != 0) { delete [] basis_tab; }
+    //jxw = new double[nq];
+    //basis_tab = new double[nq * ndofs];
+
+    jxw.resize(nq);
+    basis_tab.resize(nq * ndofs);
+
+    cell->shape(nq, quadrature->points, &basis_tab[0]);
 }
 
 void FE::init_basis_jet()
 {
     assert(cell);
     assert(quadrature);
+
     const int nq = quadrature->n_points();
     const int ndofs = cell->n_nodes();
     const int ndim = quadrature->n_dim();
-    if (basis_jet != 0) { delete [] basis_jet; }
-    basis_jet = new double[nq * ndofs * ndim];
-    cell->grad_shape(nq, quadrature->points, basis_jet);
+    
+    //if (basis_jet != 0) { delete [] basis_jet; }
+    //basis_jet = new double[nq * ndofs * ndim];
+
+    basis_jet.resize(nq * ndofs * ndim);
+    cell->grad_shape(nq, quadrature->points, &basis_jet[0]);
 }
 
 void FE::update_jxw()
@@ -108,8 +118,8 @@
 {
     assert(cell);
     assert(quadrature);
-    assert(jxw != 0);
-    assert(basis_tab != 0);
+    assert(jxw.size() != 0);
+    assert(basis_tab.size() != 0);
 
     const int nq = quadrature->n_points();
     const int ndofs = cell->n_nodes();
@@ -167,11 +177,13 @@
                 throw cigma::Exception("FE::setBasisAtQuad", stream.str());
             }
 
-            if (jxw != 0) { delete [] jxw; }
-            if (basis_tab != 0) { delete [] basis_tab; }
+            //if (jxw != 0) { delete [] jxw; }
+            //if (basis_tab != 0) { delete [] basis_tab; }
+            //jxw = new double[nq];
+            //basis_tab = new double[nq * ndofs];
 
-            jxw = new double[nq];
-            basis_tab = new double[nq * ndofs];
+            jxw.resize(nq);
+            basis_tab.resize(nq * ndofs);
 
             this->set_basis_tab(b->_data);
         }

Modified: cs/cigma/trunk/src/FE.h
===================================================================
--- cs/cigma/trunk/src/FE.h	2009-02-18 16:14:26 UTC (rev 14078)
+++ cs/cigma/trunk/src/FE.h	2009-02-18 16:14:28 UTC (rev 14079)
@@ -1,7 +1,7 @@
 #ifndef __CIGMA_FE_H__
 #define __CIGMA_FE_H__
 
-//#include <valarray>
+#include <valarray>
 #include <boost/shared_ptr.hpp>
 
 #include "Cell.h"
@@ -40,8 +40,12 @@
     boost::shared_ptr<Cell> cell;
     boost::shared_ptr<Quadrature> quadrature;
 
-    double *jxw;        // XXX: use valarray?
-    double *basis_tab;
-    double *basis_jet;
+    //double *jxw;
+    //double *basis_tab;
+    //double *basis_jet;
+
+    std::valarray<double> jxw;
+    std::valarray<double> basis_tab;
+    std::valarray<double> basis_jet;
 };
 #endif



More information about the CIG-COMMITS mailing list