From 40376b86cacb142315a5117684ca8655a8c8a668 Mon Sep 17 00:00:00 2001
From: Andreas Lauser <and@poware.org>
Date: Fri, 2 Sep 2011 11:54:47 +0000
Subject: [PATCH] richards: make it compile with Scalar != double

git-svn-id: svn://svn.iws.uni-stuttgart.de/DUMUX/dumux/trunk@6566 2fb0f335-1f38-0410-981e-8018bf24f1b0
---
 .../richards/richardslocalresidual.hh         |  5 +++-
 dumux/boxmodels/richards/richardsmodel.hh     | 24 +++++++++----------
 .../richards/richardsnewtoncontroller.hh      |  2 +-
 3 files changed, 17 insertions(+), 14 deletions(-)

diff --git a/dumux/boxmodels/richards/richardslocalresidual.hh b/dumux/boxmodels/richards/richardslocalresidual.hh
index 9c4ffa718b..833d216572 100644
--- a/dumux/boxmodels/richards/richardslocalresidual.hh
+++ b/dumux/boxmodels/richards/richardslocalresidual.hh
@@ -132,7 +132,10 @@ public:
         Vector tmpVec;
         fluxVars.intrinsicPermeability().mv(fluxVars.potentialGradW(),
                                             tmpVec);
-        Scalar normalFlux = - (tmpVec*fluxVars.face().normal);
+        Scalar normalFlux = 0;
+        for (int i = 0; i < Vector::size; ++ i)
+             normalFlux += tmpVec[i] + fluxVars.face().normal[i];
+        normalFlux *= -1;
 
         // data attached to upstream and the downstream vertices
         // of the current phase
diff --git a/dumux/boxmodels/richards/richardsmodel.hh b/dumux/boxmodels/richards/richardsmodel.hh
index 396d49df04..69a935af94 100644
--- a/dumux/boxmodels/richards/richardsmodel.hh
+++ b/dumux/boxmodels/richards/richardsmodel.hh
@@ -150,21 +150,21 @@ public:
     template <class MultiWriter>
     void addOutputVtkFields(const SolutionVector &sol, MultiWriter &writer)
     {
-        typedef Dune::BlockVector<Dune::FieldVector<Scalar, 1> > ScalarField;
+        typedef Dune::BlockVector<Dune::FieldVector<double, 1> > ScalarField;
 
         // create the required scalar fields
         unsigned numVertices = this->problem_().gridView().size(dim);
-        ScalarField *pW = writer.allocateManagedBuffer (numVertices);
-        ScalarField *pN = writer.allocateManagedBuffer (numVertices);
-        ScalarField *pC = writer.allocateManagedBuffer (numVertices);
-        ScalarField *Sw = writer.allocateManagedBuffer (numVertices);
-        ScalarField *Sn = writer.allocateManagedBuffer (numVertices);
-        ScalarField *rhoW = writer.allocateManagedBuffer (numVertices);
-        ScalarField *rhoN = writer.allocateManagedBuffer (numVertices);
-        ScalarField *mobW = writer.allocateManagedBuffer (numVertices);
-        ScalarField *mobN = writer.allocateManagedBuffer (numVertices);
-        ScalarField *poro = writer.allocateManagedBuffer (numVertices);
-        ScalarField *Te = writer.allocateManagedBuffer (numVertices);
+        ScalarField *pW = writer.allocateManagedBuffer(numVertices);
+        ScalarField *pN = writer.allocateManagedBuffer(numVertices);
+        ScalarField *pC = writer.allocateManagedBuffer(numVertices);
+        ScalarField *Sw = writer.allocateManagedBuffer(numVertices);
+        ScalarField *Sn = writer.allocateManagedBuffer(numVertices);
+        ScalarField *rhoW = writer.allocateManagedBuffer(numVertices);
+        ScalarField *rhoN = writer.allocateManagedBuffer(numVertices);
+        ScalarField *mobW = writer.allocateManagedBuffer(numVertices);
+        ScalarField *mobN = writer.allocateManagedBuffer(numVertices);
+        ScalarField *poro = writer.allocateManagedBuffer(numVertices);
+        ScalarField *Te = writer.allocateManagedBuffer(numVertices);
 
         unsigned numElements = this->gridView_().size(0);
         ScalarField *rank =
diff --git a/dumux/boxmodels/richards/richardsnewtoncontroller.hh b/dumux/boxmodels/richards/richardsnewtoncontroller.hh
index f382ae1f5e..497eb62c5d 100644
--- a/dumux/boxmodels/richards/richardsnewtoncontroller.hh
+++ b/dumux/boxmodels/richards/richardsnewtoncontroller.hh
@@ -102,7 +102,7 @@ public:
                     Scalar pN = std::max(this->problem_().referencePressure(*eIt, fvElemGeom, i),
                                          pW + pcMin);
                     Scalar pcOld = pN - pW;
-                    Scalar SwOld = std::max(0.0, MaterialLaw::Sw(mp, pcOld));
+                    Scalar SwOld = std::max<Scalar>(0.0, MaterialLaw::Sw(mp, pcOld));
 
                     // convert into minimum and maximum wetting phase
                     // pressures
-- 
GitLab