[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