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

luis at geodynamics.org luis at geodynamics.org
Wed Mar 26 08:59:14 PDT 2008


Author: luis
Date: 2008-03-26 08:59:13 -0700 (Wed, 26 Mar 2008)
New Revision: 11588

Modified:
   cs/benchmark/cigma/trunk/src/CompareCmd.cpp
   cs/benchmark/cigma/trunk/src/CompareCmd.h
Log:
Copied compare(FE_Field*,FE_Field*) from local branch


Modified: cs/benchmark/cigma/trunk/src/CompareCmd.cpp
===================================================================
--- cs/benchmark/cigma/trunk/src/CompareCmd.cpp	2008-03-26 15:59:12 UTC (rev 11587)
+++ cs/benchmark/cigma/trunk/src/CompareCmd.cpp	2008-03-26 15:59:13 UTC (rev 11588)
@@ -214,6 +214,7 @@
 
     /* Load the fields */
 
+    firstReader.verbose = true;
     firstReader.load_field();
     field_a = firstReader.field;
     if (field_a == 0)
@@ -222,6 +223,7 @@
         exit(1);
     }
 
+    secondReader.verbose = true;
     secondReader.load_field();
     field_b = secondReader.field;
     if (field_b == 0)
@@ -281,6 +283,7 @@
         FE_Field *a = static_cast<FE_Field*>(field_a);
         a->fe = new FE();
         a->fe->set_mesh(a->meshPart);
+        a->fe->set_quadrature_points(quadrature);
 
         qr = a->fe; // XXX
     }
@@ -290,6 +293,7 @@
         FE_Field *b = static_cast<FE_Field*>(field_b);
         b->fe = new FE();
         b->fe->set_mesh(b->meshPart);
+        //b->fe->set_quadrature_points(quadrature);
     }
 
     /* this allocates residuals->epsilon[] array */
@@ -311,6 +315,15 @@
     }
 }
 
+void CompareCmd::update_timer(int e)
+{
+    if (verbose && ((e+1) % outputFrequency == 0))
+    {
+        timer.update(e+1);
+        cout << timer;
+    }
+}
+
 void CompareCmd::end_timer()
 {
     if (verbose)
@@ -340,9 +353,41 @@
     {
         cout << "Comparing FE_Field with FE_Field" << endl;
     }
-    assert(false);
+
+    Residuals *residuals = env->residuals;
+    QuadratureRule *qr = env->qr;
+    assert(qr != 0);
+    assert(qr->points != 0);
+
+    // dimensions
+    int nel = qr->meshPart->nel;
+    int nq = qr->points->n_points();
+    int valdim = field_a->n_rank();
+
+    // field values at quadrature points
+    Points phi_a, phi_b;
+    double *values_a = new double[nq * valdim];
+    double *values_b = new double[nq * valdim];
+    phi_a.set_data(values_a, nq, valdim);
+    phi_b.set_data(values_b, nq, valdim);
+
+    residuals->reset_accumulator();
     env->start_timer();
+    for (int e = 0; e < nel; e++)
+    {
+        qr->select_cell(e);
+        field_a->tabulate_element(e, phi_a.data);
+        field_b->Field::eval(*(qr->points), phi_b);
+        double err = qr->L2(phi_a, phi_b);
+        residuals->update(e, err);
+        env->update_timer(e);
+    }
     env->end_timer();
+
+    // clean up
+    delete [] values_a;
+    delete [] values_b;
+
 }
 
 void compare(CompareCmd *env, FE_Field *field_a, PointField *field_b)

Modified: cs/benchmark/cigma/trunk/src/CompareCmd.h
===================================================================
--- cs/benchmark/cigma/trunk/src/CompareCmd.h	2008-03-26 15:59:12 UTC (rev 11587)
+++ cs/benchmark/cigma/trunk/src/CompareCmd.h	2008-03-26 15:59:13 UTC (rev 11588)
@@ -38,6 +38,7 @@
 
 public:
     void start_timer();
+    void update_timer(int e);
     void end_timer();
 
 public:



More information about the cig-commits mailing list