From 970da5aa754d0188cb1dd021fe039063ccf5b7ed Mon Sep 17 00:00:00 2001
From: Andrew Heather <a.heather@opencfd.co.uk>
Date: Thu, 30 Mar 2017 14:57:36 +0100
Subject: [PATCH] BUG: waveModels - corrected reference water levels - thanks
 to Gabi Barajas

---
 src/waveModels/waveModel/waveModel.C | 28 +++++++++++++++++-----------
 src/waveModels/waveModel/waveModel.H |  3 +++
 2 files changed, 20 insertions(+), 11 deletions(-)

diff --git a/src/waveModels/waveModel/waveModel.C b/src/waveModels/waveModel/waveModel.C
index 1f86780e886..f0ab70fad28 100644
--- a/src/waveModels/waveModel/waveModel.C
+++ b/src/waveModels/waveModel/waveModel.C
@@ -111,6 +111,9 @@ void Foam::waveModel::initialiseGeometry()
         }
     }
 
+    // Set minimum z reference level
+    zMin0_ = gMin(zMin_);
+
     // Local paddle-to-face addressing
     faceToPaddle_.setSize(patch_.size(), -1);
     forAll(faceToPaddle_, facei)
@@ -162,18 +165,21 @@ void Foam::waveModel::setAlpha(const scalarField& level)
         const label paddlei = faceToPaddle_[facei];
         const scalar paddleCalc = level[paddlei];
 
-    	if (zMax_[facei] < paddleCalc)
+        const scalar zMin0 = zMin_[facei] - zMin0_;
+        const scalar zMax0 = zMax_[facei] - zMin0_;
+
+    	if (zMax0 < paddleCalc)
     	{
     	    alpha_[facei] = 1.0;
     	}
-    	else if (zMin_[facei] > paddleCalc)
+    	else if (zMin0 > paddleCalc)
     	{
     	    alpha_[facei] = 0.0;
     	}
     	else
     	{
-    	    scalar dz = paddleCalc - zMin_[facei];
-    	    alpha_[facei] = dz/zSpan_;
+    	    scalar dz = paddleCalc - zMin0;
+    	    alpha_[facei] = dz/(zMax0 - zMin0);
     	}
     }
 }
@@ -190,15 +196,15 @@ void Foam::waveModel::setPaddlePropeties
     const label paddlei = faceToPaddle_[facei];
     const scalar paddleCalc = level[paddlei];
     const scalar paddleHeight = min(paddleCalc, waterDepthRef_);
-    const scalar zMin = zMin_[facei];
-    const scalar zMax = zMax_[facei];
+    const scalar zMin = zMin_[facei] - zMin0_;
+    const scalar zMax = zMax_[facei] - zMin0_;
 
     fraction = 1;
     z = 0;
 
     if (zMax < paddleHeight)
     {
-        z = z_[facei];
+        z = z_[facei] - zMin0_;
     }
     else if (zMin > paddleCalc)
     {
@@ -211,8 +217,8 @@ void Foam::waveModel::setPaddlePropeties
             if ((zMax > paddleCalc) && (zMin < paddleCalc))
             {
                 scalar dz = paddleCalc - zMin;
-	            fraction = dz/zSpan_;
-                z = z_[facei];
+	            fraction = dz/(zMax - zMin);
+                z = z_[facei] - zMin0_;
             }
         }
 	    else
@@ -224,7 +230,7 @@ void Foam::waveModel::setPaddlePropeties
             else if ((zMax > paddleCalc) && (zMin < paddleCalc))
             {
                 scalar dz = paddleCalc - zMin;
-	            fraction = dz/zSpan_;
+	            fraction = dz/(zMax - zMin);
                 z = waterDepthRef_;
             }
         }
@@ -382,7 +388,7 @@ void Foam::waveModel::correct(const scalar t)
             {
                 const label paddlei = faceToPaddle_[facei];
 
-                if (zMin_[facei] < activeLevel[paddlei])
+                if (zMin_[facei] - zMin0_ < activeLevel[paddlei])
                 {
                     scalar UCorr =
                         (calculatedLevel[paddlei] - activeLevel[paddlei])
diff --git a/src/waveModels/waveModel/waveModel.H b/src/waveModels/waveModel/waveModel.H
index f7cea6c719d..36d48ddd8f7 100644
--- a/src/waveModels/waveModel/waveModel.H
+++ b/src/waveModels/waveModel/waveModel.H
@@ -106,6 +106,9 @@ protected:
         //- Maximum z (point) height per patch face / [m]
         scalarField zMax_;
 
+        //- Minimum z reference level / [m]
+        scalar zMin0_;
+
         //- Reference water depth / [m]
         scalar waterDepthRef_;
 
-- 
GitLab