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

luis at geodynamics.org luis at geodynamics.org
Wed Oct 29 15:11:45 PDT 2008


Author: luis
Date: 2008-10-29 15:11:45 -0700 (Wed, 29 Oct 2008)
New Revision: 13173

Modified:
   cs/cigma/trunk/src/Residuals.cpp
   cs/cigma/trunk/src/Residuals.h
Log:
Take cigma::Residuals class from cigma-0.9 branch

Modified: cs/cigma/trunk/src/Residuals.cpp
===================================================================
--- cs/cigma/trunk/src/Residuals.cpp	2008-10-29 22:11:42 UTC (rev 13172)
+++ cs/cigma/trunk/src/Residuals.cpp	2008-10-29 22:11:45 UTC (rev 13173)
@@ -1,19 +1,84 @@
+#include <iostream>
+#include <cassert>
 #include "Residuals.h"
 
+using namespace std;
 using namespace cigma;
+using boost::shared_ptr;
 
+
 // ----------------------------------------------------------------------------
 
-Residuals::Residuals()
+Residuals::Residuals(shared_ptr<MeshPart> meshPart) : meshPart(meshPart)
 {
+    nel = 0;
+    epsilon = 0;
+    if (meshPart)
+    {
+        nel = meshPart->n_cells();
+        epsilon = new double[nel];
+    }
 }
 
 Residuals::~Residuals()
 {
+    if (epsilon != 0)
+    {
+        delete [] epsilon;
+        epsilon = 0;
+        nel = 0;
+    }
 }
 
 // ----------------------------------------------------------------------------
 
+void Residuals::resetAccumulator()
+{
+    assert(nel > 0);
+    assert(epsilon != 0);
+    assert(meshPart);
 
+    global_error = 0.0;
+    max_residual = 0.0;
+    total_volume = 0.0;
 
+    for (int e = 0; e < nel; e++)
+    {
+        epsilon[e] = 0.0;
+    }
+}
+
+void Residuals::update(int e, double cell_residual, double cell_volume)
+{
+    assert(cell_residual >= 0);
+    assert(cell_volume > 0);
+
+    // remember residual on this cell
+    epsilon[e] = cell_residual;
+
+    // keep track of domain volume
+    total_volume += cell_volume;
+
+    // keep track of max residual
+    if (cell_residual > max_residual)
+    {
+        max_residual = cell_residual;
+    }
+
+    // XXX: generalize to global_error = norm_sum(global_error, cell_residual)
+    global_error += cell_residual * cell_residual;
+}
+
+
+double Residuals::L2()
+{
+    assert(total_volume > 0);
+    return sqrt(global_error);  // XXX: generalizes to norm_pow(global_error)
+}
+
+double Residuals::max()
+{
+    return max_residual;
+}
+
 // ----------------------------------------------------------------------------

Modified: cs/cigma/trunk/src/Residuals.h
===================================================================
--- cs/cigma/trunk/src/Residuals.h	2008-10-29 22:11:42 UTC (rev 13172)
+++ cs/cigma/trunk/src/Residuals.h	2008-10-29 22:11:45 UTC (rev 13173)
@@ -2,7 +2,7 @@
 #define __CIGMA_RESIDUALS_H__
 
 #include <boost/noncopyable.hpp>
-#include <boost/smart_ptr.hpp>
+#include <boost/shared_ptr.hpp>
 
 namespace cigma
 {
@@ -12,11 +12,10 @@
 class cigma::Residuals : private boost::noncopyable
 {
 public:
-    Residuals();
+    Residuals(boost::shared_ptr<MeshPart> meshPart);
     ~Residuals();
 
-    void set_mesh(MeshPart *meshPart);
-    void reset_accumulator();
+    void resetAccumulator();
     void update(int e, double cell_residual, double cell_volume);
 
     double L2();



More information about the CIG-COMMITS mailing list