From 0f230ba35b973419788bbe5154bf79457fd8dedd Mon Sep 17 00:00:00 2001
From: Gabriel Barajas <gabriel.barajas@unican.es>
Date: Fri, 2 Jun 2017 09:47:31 +0100
Subject: [PATCH] ENH: Added new Grimshaw and McCowan wave models - initial
 commit for integration

---
 src/waveModels/Make/files                     |   2 +
 .../derived/Grimshaw/GrimshawWaveModel.C      | 282 ++++++++++++
 .../derived/Grimshaw/GrimshawWaveModel.H      | 154 +++++++
 .../derived/McCowan/McCowanWaveModel.C        | 408 ++++++++++++++++++
 .../derived/McCowan/McCowanWaveModel.H        | 170 ++++++++
 .../waveExampleSolitaryGrimshaw/0.orig/U      |  53 +++
 .../0.orig/alpha.water                        |  52 +++
 .../waveExampleSolitaryGrimshaw/0.orig/p_rgh  |  60 +++
 .../waveExampleSolitaryGrimshaw/Allclean      |  10 +
 .../waveExampleSolitaryGrimshaw/Allrun        |  15 +
 .../waveExampleSolitaryGrimshaw/constant/g    |  22 +
 .../constant/transportProperties              |  37 ++
 .../constant/turbulenceProperties             |  20 +
 .../constant/waveProperties                   |  43 ++
 .../system/blockMeshDict                      |  89 ++++
 .../system/controlDict                        | 143 ++++++
 .../system/decomposeParDict                   |  29 ++
 .../system/fvSchemes                          |  54 +++
 .../system/fvSolution                         |  78 ++++
 .../system/setFieldsDict                      |  37 ++
 .../waveExampleSolitaryMcCowan/0.orig/U       |  53 +++
 .../0.orig/alpha.water                        |  52 +++
 .../waveExampleSolitaryMcCowan/0.orig/p_rgh   |  60 +++
 .../waveExampleSolitaryMcCowan/Allclean       |  10 +
 .../laminar/waveExampleSolitaryMcCowan/Allrun |  15 +
 .../waveExampleSolitaryMcCowan/constant/g     |  22 +
 .../constant/transportProperties              |  37 ++
 .../constant/turbulenceProperties             |  20 +
 .../constant/waveProperties                   |  43 ++
 .../system/blockMeshDict                      |  89 ++++
 .../system/controlDict                        | 143 ++++++
 .../system/decomposeParDict                   |  29 ++
 .../system/fvSchemes                          |  54 +++
 .../system/fvSolution                         |  78 ++++
 .../system/setFieldsDict                      |  37 ++
 35 files changed, 2500 insertions(+)
 create mode 100644 src/waveModels/waveGenerationModels/derived/Grimshaw/GrimshawWaveModel.C
 create mode 100644 src/waveModels/waveGenerationModels/derived/Grimshaw/GrimshawWaveModel.H
 create mode 100644 src/waveModels/waveGenerationModels/derived/McCowan/McCowanWaveModel.C
 create mode 100644 src/waveModels/waveGenerationModels/derived/McCowan/McCowanWaveModel.H
 create mode 100644 tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/0.orig/U
 create mode 100644 tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/0.orig/alpha.water
 create mode 100644 tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/0.orig/p_rgh
 create mode 100755 tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/Allclean
 create mode 100755 tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/Allrun
 create mode 100644 tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/constant/g
 create mode 100644 tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/constant/transportProperties
 create mode 100644 tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/constant/turbulenceProperties
 create mode 100644 tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/constant/waveProperties
 create mode 100644 tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/system/blockMeshDict
 create mode 100644 tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/system/controlDict
 create mode 100644 tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/system/decomposeParDict
 create mode 100644 tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/system/fvSchemes
 create mode 100644 tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/system/fvSolution
 create mode 100644 tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/system/setFieldsDict
 create mode 100644 tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/0.orig/U
 create mode 100644 tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/0.orig/alpha.water
 create mode 100644 tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/0.orig/p_rgh
 create mode 100755 tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/Allclean
 create mode 100755 tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/Allrun
 create mode 100644 tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/constant/g
 create mode 100644 tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/constant/transportProperties
 create mode 100644 tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/constant/turbulenceProperties
 create mode 100644 tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/constant/waveProperties
 create mode 100644 tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/system/blockMeshDict
 create mode 100644 tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/system/controlDict
 create mode 100644 tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/system/decomposeParDict
 create mode 100644 tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/system/fvSchemes
 create mode 100644 tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/system/fvSolution
 create mode 100644 tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/system/setFieldsDict

diff --git a/src/waveModels/Make/files b/src/waveModels/Make/files
index 67333fa8212..44b6ad45c1a 100644
--- a/src/waveModels/Make/files
+++ b/src/waveModels/Make/files
@@ -6,6 +6,8 @@ waveGenerationModels/base/regularWaveModel/regularWaveModel.C
 waveGenerationModels/base/solitaryWaveModel/solitaryWaveModel.C
 waveGenerationModels/derived/Boussinesq/BoussinesqWaveModel.C
 waveGenerationModels/derived/cnoidal/cnoidalWaveModel.C
+waveGenerationModels/derived/Grimshaw/GrimshawWaveModel.C
+waveGenerationModels/derived/McCowan/McCowanWaveModel.C
 waveGenerationModels/derived/StokesII/StokesIIWaveModel.C
 waveGenerationModels/derived/StokesI/StokesIWaveModel.C
 waveGenerationModels/derived/StokesV/StokesVWaveModel.C
diff --git a/src/waveModels/waveGenerationModels/derived/Grimshaw/GrimshawWaveModel.C b/src/waveModels/waveGenerationModels/derived/Grimshaw/GrimshawWaveModel.C
new file mode 100644
index 00000000000..caaf612c16a
--- /dev/null
+++ b/src/waveModels/waveGenerationModels/derived/Grimshaw/GrimshawWaveModel.C
@@ -0,0 +1,282 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2016 OpenCFD Ltd.
+     \\/     M anipulation  | Copyright (C) 2015 IH-Cantabria
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "GrimshawWaveModel.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+namespace waveModels
+{
+    defineTypeNameAndDebug(Grimshaw, 0);
+    addToRunTimeSelectionTable
+    (
+        waveModel,
+        Grimshaw,
+        patch
+    );
+}
+}
+
+
+// * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * * //
+
+Foam::scalar Foam::waveModels::Grimshaw::alfa
+(
+    const scalar H,
+    const scalar h
+) const
+{
+    scalar eps = H/h;
+    scalar alfa = sqrt(0.75*eps)*(1.0 - (5.0/8.0)*eps + (71.0/128.0)*eps*eps);
+
+    return alfa;
+}
+
+//- Wave height
+Foam::scalar Foam::waveModels::Grimshaw::eta
+(
+    const scalar H,
+    const scalar h,
+    const scalar x,
+    const scalar y,
+    const scalar theta,
+    const scalar t,
+    const scalar X0
+) const
+{
+    scalar eps = H/h;
+    scalar C = sqrt(mag(g_)*h)*sqrt(1.0+eps-(1.0/20.0)*eps*eps-(3.0/70.0)*eps*eps*eps);
+
+    scalar ts = 3.5*h/sqrt(H/h);
+    scalar xa = -C*t + ts - X0 + x*cos(theta) + y*sin(theta);
+
+    scalar alfa = this->alfa(H, h);
+
+    scalar s = (1.0)/(cosh(alfa*(xa/h)));
+    scalar q = tanh(alfa*(xa/h));
+
+    return h*(eps*s*s - 0.75*eps*eps*s*s*q*q + eps*eps*eps*((5.0/8.0)*s*s*q*q - (101.0/80.0)*s*s*s*s*q*q));
+}
+
+//- Wave velocity
+Foam::vector Foam::waveModels::Grimshaw::U
+(
+    const scalar H,
+    const scalar h,
+    const scalar x,
+    const scalar y,
+    const scalar theta,
+    const scalar t,
+    const scalar X0,
+    const scalar z
+) const
+{
+    scalar eps = H/h;
+    scalar C = sqrt(mag(g_)*h)*sqrt(1.0+eps-(1.0/20.0)*eps*eps-(3.0/70.0)*eps*eps*eps);
+    scalar ts = 3.5*h/sqrt(H/h);
+    scalar xa = -C*t + ts - X0 + x*cos(theta) + y*sin(theta);
+    scalar alfa = this->alfa(H, h);
+
+    scalar s = (1.0)/(cosh(alfa*(xa/h)));
+
+    scalar outa = eps*s*s - eps*eps*(-(1.0/4.0)*s*s + s*s*s*s + ((z/h)*(z/h))*((3.0/2.0)*s*s - (9.0/4.0)*s*s*s*s));
+    scalar outb = (19.0/40.0)*s*s + (1.0/5.0)*s*s*s*s - (6.0/5.0)*s*s*s*s*s*s;
+    scalar outc = ((z/h)*(z/h)) * ( -(3.0/2.0)*s*s - (15.0/4.0)*s*s*s*s + (15.0/2.0)*s*s*s*s*s*s);
+    scalar outd = ((z/h)*(z/h)*(z/h)*(z/h)) * ((-3.0/8.0)*s*s + (45.0/16.0)*s*s*s*s - (45.0/16.0)*s*s*s*s*s*s);
+
+    scalar u = sqrt(mag(g_)*h)*(outa - eps*eps*eps*(outb+outc+outd));
+
+    outa = eps*s*s - eps*eps*((3.0/8.0)*s*s + 2.0*s*s*s*s + ((z/h)*(z/h))*(0.5*s*s - (3.0/2.0)*s*s*s*s));
+    outb = (49.0/640.0)*s*s - (17.0/20.0)*s*s*s*s - (18.0/5.0)*s*s*s*s*s*s;
+    outc = ((z/h)*(z/h)) * ((-13.0/16.0)*s*s -(25.0/16.0)*s*s*s*s + (15.0/2.0)*s*s*s*s*s*s);
+    outd = ((z/h)*(z/h)*(z/h)*(z/h)) * ((-3.0/40.0)*s*s -(9.0/8.0)*s*s*s*s - (27.0/16.0)*s*s*s*s*s*s);
+
+    scalar w = sqrt(mag(g_)*h)*(outa - eps*eps*eps*(outb+outc+outd));
+
+    scalar v = u*sin(waveAngle_);
+    u *= cos(waveAngle_);
+
+    return vector(u, v, w);
+}
+
+void Foam::waveModels::Grimshaw::setLevel
+(
+    const scalar t,
+    const scalar tCoeff,
+    scalarField& level
+) const
+{
+    forAll(level, paddlei)
+    {
+        const scalar eta =
+            this->eta
+            (
+                waveHeight_,
+                waterDepthRef_,
+                xPaddle_[paddlei],
+                yPaddle_[paddlei],
+                waveAngle_,
+                t,
+                x0_
+            );
+
+        level[paddlei] = waterDepthRef_ + tCoeff*eta;
+    }
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::waveModels::Grimshaw::Grimshaw
+(
+    const dictionary& dict,
+    const fvMesh& mesh,
+    const polyPatch& patch,
+    const bool readFields
+)
+:
+    solitaryWaveModel(dict, mesh, patch, false)
+{
+    if (readFields)
+    {
+        read(dict);
+    }
+}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+Foam::waveModels::Grimshaw::~Grimshaw()
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+bool Foam::waveModels::Grimshaw::read(const dictionary& overrideDict)
+{
+    if (solitaryWaveModel::read(overrideDict))
+    {
+        return true;
+    }
+
+    return false;
+}
+
+void Foam::waveModels::Grimshaw::setVelocity
+(
+    const scalar t,
+    const scalar tCoeff,
+    const scalarField& level,
+    const scalar tg
+)
+{
+    forAll(U_, facei)
+    {
+        // Fraction of geometry represented by paddle - to be set
+        scalar fraction = 1;
+
+        // Height - to be set
+        scalar z = 0;
+
+        setPaddlePropeties(level, facei, fraction, z);
+
+        if (fraction > 0)
+        {
+
+	    if ( (tg<0) || (t >= tg) )
+	    {
+		    const label paddlei = faceToPaddle_[facei];
+
+		    const vector Uf = U
+			(
+		        waveHeight_,
+		        waterDepthRef_,
+		        xPaddle_[paddlei],
+		        yPaddle_[paddlei],
+		        waveAngle_,
+		        t,
+		        x0_,
+		        z
+		    );
+
+                U_[facei] = fraction*Uf*tCoeff + fraction*UCurrent_;
+
+	    }
+	    else if ( tg>=t )
+	    {
+	        U_[facei] = fraction*UCurrent_;	
+	    }
+        }
+    }
+}
+
+void Foam::waveModels::Grimshaw::setVelocityAbsorption
+(
+    const scalarField& calculatedLevel,
+    const scalarField& activeLevel
+) 
+{
+
+    forAll(U_, facei)
+    {
+	const label paddlei = faceToPaddle_[facei];
+
+	scalar activeLevelMBL=activeLevel[paddlei];
+
+	scalar zMin = zMin_[facei];
+
+//------ not needed anymore in new release
+	if (fabs(zMinGb_)>1.0e-3)
+    	{
+	      zMin = zMin - zMinGb_;
+    	}
+//------
+	
+	if (zMin < activeLevelMBL)
+
+	{
+	    scalar UCorr =
+	    	 (calculatedLevel[paddlei] - activeLevel[paddlei])
+	    	 *sqrt(mag(g_)/activeLevel[paddlei]);
+					
+	    U_[facei].x() += UCorr;
+	}
+	else
+	{
+	    U_[facei].x() = 0;
+	}
+    }
+}
+
+void Foam::waveModels::Grimshaw::info(Ostream& os) const
+{
+    solitaryWaveModel::info(os);
+}
+
+
+// ************************************************************************* //
diff --git a/src/waveModels/waveGenerationModels/derived/Grimshaw/GrimshawWaveModel.H b/src/waveModels/waveGenerationModels/derived/Grimshaw/GrimshawWaveModel.H
new file mode 100644
index 00000000000..cca90683d09
--- /dev/null
+++ b/src/waveModels/waveGenerationModels/derived/Grimshaw/GrimshawWaveModel.H
@@ -0,0 +1,154 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2016 OpenCFD Ltd.
+     \\/     M anipulation  | Copyright (C) 2015 IH-Cantabria
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::waveModels::Grimshaw
+
+Description
+    Grimshaw wave model
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef waveModels_Grimshaw_H
+#define waveModels_Grimshaw_H
+
+#include "solitaryWaveModel.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+namespace waveModels
+{
+
+/*---------------------------------------------------------------------------*\
+                         Class Grimshaw Declaration
+\*---------------------------------------------------------------------------*/
+
+class Grimshaw
+:
+    public solitaryWaveModel
+{
+protected:
+
+    // Protected Member Functions
+
+        //- Wave height
+        virtual scalar eta
+        (
+            const scalar H,
+            const scalar h,
+            const scalar x,
+            const scalar y,
+            const scalar theta,
+            const scalar t,
+            const scalar X0
+        ) const;
+
+        //-
+        virtual scalar alfa
+        (
+            const scalar H,
+            const scalar h
+        ) const;
+
+        //- Wave velocity
+        virtual vector U
+        (
+            const scalar H,
+            const scalar h,
+            const scalar x,
+            const scalar y,
+            const scalar theta,
+            const scalar t,
+            const scalar X0,
+            const scalar z
+        ) const;
+
+        //- Set the water level
+        virtual void setLevel
+        (
+            const scalar t,
+            const scalar tCoeff,
+            scalarField& level
+        ) const;
+
+        //- Calculate the wave model velocity
+        virtual void setVelocity
+        (
+            const scalar t,
+            const scalar tCoeff,
+            const scalarField& level,
+            const scalar tg
+        );
+
+	// Add current absorption to velocity
+        virtual void setCurrent
+        (
+            const scalarField& levelMBO
+        );
+
+        //- Calculate the wave model velocity absorption
+        virtual void setVelocityAbsorption
+        (
+    	    const scalarField& calculatedLevel,
+    	    const scalarField& activeLevel
+        );
+
+public:
+
+    //- Runtime type information
+    TypeName("Grimshaw");
+
+    //- Constructor
+    Grimshaw
+    (
+        const dictionary& dict,
+        const fvMesh& mesh,
+        const polyPatch& patch,
+        const bool readFields = true
+    );
+
+    //- Destructor
+    virtual ~Grimshaw();
+
+
+    // Public Member Functions
+
+        //- Read from dictionary
+        virtual bool read(const dictionary& overrideDict);
+
+        //- Info
+        virtual void info(Ostream& os) const;
+};
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace waveModels
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/waveModels/waveGenerationModels/derived/McCowan/McCowanWaveModel.C b/src/waveModels/waveGenerationModels/derived/McCowan/McCowanWaveModel.C
new file mode 100644
index 00000000000..b818d11e44b
--- /dev/null
+++ b/src/waveModels/waveGenerationModels/derived/McCowan/McCowanWaveModel.C
@@ -0,0 +1,408 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2016 OpenCFD Ltd.
+     \\/     M anipulation  | Copyright (C) 2015 IH-Cantabria
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "McCowanWaveModel.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+namespace waveModels
+{
+    defineTypeNameAndDebug(McCowan, 0);
+    addToRunTimeSelectionTable
+    (
+        waveModel,
+        McCowan,
+        patch
+    );
+}
+}
+
+
+// * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * * //
+
+Foam::scalar Foam::waveModels::McCowan::eta
+(
+    const scalar H,
+    const scalar h,
+    const scalar x,
+    const scalar y,
+    const scalar theta,
+    const scalar t,
+    const scalar X0
+) const
+{
+    vector vec = this->mn(H,h);
+    scalar mm = vec[0];
+    scalar nn = vec[1];
+
+    scalar C = sqrt(((mag(g_)*h)/mm)*tan(mm));
+    scalar ts = 3.5*h/sqrt(H/h);
+    scalar Xa = -C*t + ts - X0 + x*cos(theta) + y*sin(theta);
+
+    scalar xin = 0.5*H;
+    scalar etas = newtonRapsonF2(xin,H,h,Xa,mm,nn);
+    return etas;
+}
+
+Foam::vector Foam::waveModels::McCowan::mn
+(
+    const scalar H,
+    const scalar h
+) const
+{
+    //m
+    scalar xin = 1.0;
+    scalar m = newtonRapsonF1(xin,H,h);
+
+    //n
+    scalar c1=sin(m+(1.0+((2.0*H)/(3.0*h))));
+    scalar n = (2.0/3.0)*pow(c1,2);
+
+    scalar aux=n;
+
+    return vector(m, n, aux);
+}
+
+Foam::scalar Foam::waveModels::McCowan::newtonRapsonF1
+(
+    const scalar x0,
+    const scalar H,
+    const scalar h
+) const
+{
+    scalar N=10000; 
+    scalar eps=1.e-5; 
+    scalar maxval = 10000.0;     
+
+    scalar xn=0;
+    scalar x=0;
+    scalar c1=0;
+    scalar c2=0;
+    scalar c3=0;
+    scalar fx=0;
+    scalar fprime=0;
+    scalar fxn=0;
+    scalar fxx=0;
+
+    //define value for divergence
+    scalar xx=x0; 
+    while (N>0) 
+    {
+       //f
+       c1=sin(xx+(1.0+((2.0*H)/(3.0*h))));
+       fx = (2.0/3.0)*pow(c1,2) - (xx*H)/(h*tan(0.5*xx*(1.0+(H/h))));
+
+       //fprime
+       c2=1/tan(0.5*xx*(h/H + 1.0));
+       c3=1/sin(0.5*xx*(H/h + 1.0));
+       fprime=(4.0/3.0)*sin((2.0*H)/(3.0*h) + xx + 1.0)*cos((2.0*H)/(3.0*h) + xx + 1.0)-(h*c2)/H - (0.5*h*xx*(H/h + 1.0)*pow(c3,2))/h;
+       xn = xx-fx/fprime;
+
+       c1=sin(xn+(1.0+((2.0*H)/(3.0*h))));
+       fxn = (2.0/3.0)*pow(c1,2) - (xn*H)/(h*tan(0.5*xn*(1.0+(H/h)))); 
+       if (fabs(fxn)<eps)
+       {
+           x=xn; 
+           return x; 
+       }
+   
+       c1=sin(xx+(1.0+((2.0*H)/(3.0*h))));
+       fxx = (2.0/3.0)*pow(c1,2) - (xx*H)/(h*tan(0.5*xx*(1.0+(H/h))));
+       if (fabs(fxx)>maxval)
+       {
+          FatalIOErrorInFunction(*this)
+            << "fxx > maxval !!!"                    
+            << exit(FatalIOError); 
+       }
+
+       N = N - 1; 
+       xx = xn; 
+    }
+
+    return x;
+}
+
+Foam::scalar Foam::waveModels::McCowan::newtonRapsonF2
+(
+    const scalar x0,
+    const scalar H,
+    const scalar h,
+    const scalar xa,
+    const scalar m,
+    const scalar n
+) const
+{
+    scalar N=10000; 
+    scalar eps=1.e-5; 
+    scalar maxval = 10000.0;     
+
+    scalar xn=0;
+    scalar x=0;
+    scalar c2=0;
+    scalar c3=0;
+    scalar fx=0;
+    scalar fprime=0;
+    scalar fxn=0;
+    scalar fxx=0;
+
+    //define value for divergence
+    scalar xx=x0; 
+    while (N>0) 
+    {
+       //f
+       fx = xx-(h*(n/m)*((sin(m*(1.0+(xx/h))))/(cos(m*(1.0+(xx/h)))+cosh(m*(xa/h)))));
+
+       //fprime
+       c2=sin((m*(h + x))/h);
+       c3=cosh((xa*m)/h) + cos((m*(h + x))/h);
+       fprime =  1 - (n*cos((m*(h + x))/h))/(cosh((xa*m)/h) + cos((m*(h + x))/h)) - (n*pow(c2,2))/(pow(c3,2));
+
+       xn = xx-fx/fprime;
+
+       fxn = xn-(h*(n/m)*((sin(m*(1.0+(xn/h))))/(cos(m*(1.0+(xn/h)))+cosh(m*(xa/h)))));
+       if (fabs(fxn)<eps)
+       {
+           x=xn;
+           return x; 
+       }
+   
+       fxx = xx-(h*(n/m)*((sin(m*(1.0+(xx/h))))/(cos(m*(1.0+(xx/h)))+cosh(m*(xa/h)))));
+       if (fabs(fxx)>maxval)
+       {
+          FatalIOErrorInFunction(*this)
+            << "fxx > maxval !!!"                    
+            << exit(FatalIOError); 
+       }
+
+       N = N - 1; 
+       xx = xn; 
+    }
+
+    return x;
+}
+
+Foam::vector Foam::waveModels::McCowan::U
+(
+    const scalar H,
+    const scalar h,
+    const scalar x,
+    const scalar y,
+    const scalar theta,
+    const scalar t,
+    const scalar X0,
+    const scalar z
+) const
+{
+    vector vec = this->mn(H,h);
+    scalar mm = vec[0];
+    scalar nn = vec[1];
+
+    scalar C = sqrt(((mag(g_)*h)/mm)*tan(mm));
+    scalar ts = 3.5*h/sqrt(H/h);
+    scalar Xa = -C*t + ts - X0 + x*cos(theta) + y*sin(theta);
+    
+    scalar outa = C*nn*(1.0+cos(mm*(z/h))*cosh(mm*(Xa/h)));
+    scalar outb = (cos(mm*(z/h))+cosh(mm*(Xa/h))) * (cos(mm*(z/h))+cosh(mm*(Xa/h)));
+
+    scalar u = outa/outb;
+
+    outa = C*nn*(sin(mm*(z/h))*sinh(mm*(Xa/h)));
+    outb = (cos(mm*(z/h))+cosh(mm*(Xa/h))) * (cos(mm*(z/h))+cosh(mm*(Xa/h)));
+
+    scalar w = outa/outb;
+
+    scalar v = u*sin(waveAngle_);
+    u *= cos(waveAngle_);
+
+    return vector(u, v, w);
+}
+
+
+void Foam::waveModels::McCowan::setLevel
+(
+    const scalar t,
+    const scalar tCoeff,
+    scalarField& level
+) const
+{
+    forAll(level, paddlei)
+    {
+        const scalar eta =
+            this->eta
+            (
+                waveHeight_,
+                waterDepthRef_,
+                xPaddle_[paddlei],
+                yPaddle_[paddlei],
+                waveAngle_,
+                t,
+                x0_
+            );
+
+        level[paddlei] = waterDepthRef_ + tCoeff*eta;
+    }
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::waveModels::McCowan::McCowan
+(
+    const dictionary& dict,
+    const fvMesh& mesh,
+    const polyPatch& patch,
+    const bool readFields
+)
+:
+    solitaryWaveModel(dict, mesh, patch, false)
+{
+    if (readFields)
+    {
+        read(dict);
+    }
+}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+Foam::waveModels::McCowan::~McCowan()
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+bool Foam::waveModels::McCowan::read(const dictionary& overrideDict)
+{
+    if (solitaryWaveModel::read(overrideDict))
+    {
+        return true;
+    }
+
+    return false;
+}
+
+void Foam::waveModels::McCowan::setVelocity
+(
+    const scalar t,
+    const scalar tCoeff,
+    const scalarField& level,
+    const scalar tg
+)
+{
+    forAll(U_, facei)
+    {
+        // Fraction of geometry represented by paddle - to be set
+        scalar fraction = 1;
+
+        // Height - to be set
+        scalar z = 0;
+
+        setPaddlePropeties(level, facei, fraction, z);
+
+        if (fraction > 0)
+        {
+
+	    if ( (tg<0) || (t >= tg) )
+	    {
+		    const label paddlei = faceToPaddle_[facei];
+
+		    const vector Uf = U
+			(
+		        waveHeight_,
+		        waterDepthRef_,
+		        xPaddle_[paddlei],
+		        yPaddle_[paddlei],
+		        waveAngle_,
+		        t,
+		        x0_,
+		        z
+		    );
+
+                U_[facei] = fraction*Uf*tCoeff + fraction*UCurrent_;
+
+	    }
+	    else if ( tg>=t )
+	    {
+	        U_[facei] = fraction*UCurrent_;	
+	    }
+        }
+    }
+}
+
+void Foam::waveModels::McCowan::setVelocityAbsorption
+(
+    const scalarField& calculatedLevel,
+    const scalarField& activeLevel
+) 
+{
+
+    forAll(U_, facei)
+    {
+	const label paddlei = faceToPaddle_[facei];
+
+	scalar activeLevelMBL=activeLevel[paddlei];
+
+	scalar zMin = zMin_[facei];
+
+//------ not needed anymore in new release
+	if (fabs(zMinGb_)>1.0e-3)
+    	{
+	      zMin = zMin - zMinGb_;
+    	}
+//------
+	
+	if (zMin < activeLevelMBL)
+	{
+	    scalar UCorr =
+	    	 (calculatedLevel[paddlei] - activeLevel[paddlei])
+	    	 *sqrt(mag(g_)/activeLevel[paddlei]);
+					
+	    U_[facei].x() += UCorr;
+	}
+	else
+	{
+	    U_[facei].x() = 0;
+	}
+    }
+}
+
+void Foam::waveModels::McCowan::setCurrent
+(
+    const scalarField& levelMBO
+)
+{
+    //No needed for generation
+}
+
+void Foam::waveModels::McCowan::info(Ostream& os) const
+{
+    solitaryWaveModel::info(os);
+}
+
+
+// ************************************************************************* //
diff --git a/src/waveModels/waveGenerationModels/derived/McCowan/McCowanWaveModel.H b/src/waveModels/waveGenerationModels/derived/McCowan/McCowanWaveModel.H
new file mode 100644
index 00000000000..880684b0438
--- /dev/null
+++ b/src/waveModels/waveGenerationModels/derived/McCowan/McCowanWaveModel.H
@@ -0,0 +1,170 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2016 OpenCFD Ltd.
+     \\/     M anipulation  | Copyright (C) 2015 IH-Cantabria
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::waveModels::McCowan
+
+Description
+    McCowan wave model
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef waveModels_McCowan_H
+#define waveModels_McCowan_H
+
+#include "solitaryWaveModel.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+namespace waveModels
+{
+
+/*---------------------------------------------------------------------------*\
+                         Class McCowan Declaration
+\*---------------------------------------------------------------------------*/
+
+class McCowan
+:
+    public solitaryWaveModel
+{
+protected:
+
+    // Protected Member Functions
+
+        //- Wave height
+        virtual scalar eta
+        (
+            const scalar H,
+            const scalar h,
+            const scalar x,
+            const scalar y,
+            const scalar theta,
+            const scalar t,
+            const scalar X0
+        ) const;
+
+        virtual vector mn
+        (
+            const scalar H,
+            const scalar h
+        ) const;
+
+        virtual scalar newtonRapsonF1
+        (
+            const scalar x0,
+    	    const scalar H,
+            const scalar h
+        ) const;
+
+        virtual scalar newtonRapsonF2
+        (
+            const scalar x0,
+    	    const scalar H,
+            const scalar h,
+            const scalar xa,
+            const scalar m,
+            const scalar n
+        ) const;
+
+        //- Wave velocity
+        virtual vector U
+        (
+            const scalar H,
+            const scalar h,
+            const scalar x,
+            const scalar y,
+            const scalar theta,
+            const scalar t,
+            const scalar X0,
+            const scalar z
+        ) const;
+
+        //- Set the water level
+        virtual void setLevel
+        (
+            const scalar t,
+            const scalar tCoeff,
+            scalarField& level
+        ) const;
+
+        //- Calculate the wave model velocity
+        virtual void setVelocity
+        (
+            const scalar t,
+            const scalar tCoeff,
+            const scalarField& level,
+            const scalar tg
+        );
+
+	// Add current absorption to velocity
+        virtual void setCurrent
+        (
+            const scalarField& levelMBO
+        );
+
+        //- Calculate the wave model velocity absorption
+        virtual void setVelocityAbsorption
+        (
+    	    const scalarField& calculatedLevel,
+    	    const scalarField& activeLevel
+        );
+
+public:
+
+    //- Runtime type information
+    TypeName("McCowan");
+
+    //- Constructor
+    McCowan
+    (
+        const dictionary& dict,
+        const fvMesh& mesh,
+        const polyPatch& patch,
+        const bool readFields = true
+    );
+
+    //- Destructor
+    virtual ~McCowan();
+
+
+    // Public Member Functions
+
+        //- Read from dictionary
+        virtual bool read(const dictionary& overrideDict);
+
+        //- Info
+        virtual void info(Ostream& os) const;
+};
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace waveModels
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/0.orig/U b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/0.orig/U
new file mode 100644
index 00000000000..e0c42a3ef50
--- /dev/null
+++ b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/0.orig/U
@@ -0,0 +1,53 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  1.7.x                                 |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volVectorField;
+    location    "0";
+    object      U;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [0 1 -1 0 0 0 0];
+
+internalField   uniform (0 0 0);
+
+boundaryField
+{
+    left
+    {
+        type            waveVelocity;
+        value           uniform (0 0 0);
+    }
+
+    right
+    {
+        type            waveVelocity;
+        value           uniform (0 0 0);
+    }
+
+    sides
+    {
+        type            slip;
+    }
+
+    ground
+    {
+        type            noSlip;
+    }
+
+    top
+    {
+        type            pressureInletOutletVelocity;
+        value           uniform (0 0 0);
+    }
+}
+
+// ************************************************************************* //
diff --git a/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/0.orig/alpha.water b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/0.orig/alpha.water
new file mode 100644
index 00000000000..3562fc0b2f8
--- /dev/null
+++ b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/0.orig/alpha.water
@@ -0,0 +1,52 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  1.5-dev                               |
+|   \\  /    A nd           | Web:      http://www.OpenFOAM.org               |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    object      alpha.water;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [0 0 0 0 0 0 0];
+
+internalField   uniform 0;
+
+boundaryField
+{
+    left
+    {
+        type            waveAlpha;
+        value           uniform 0;
+    }
+
+    right
+    {
+        type            zeroGradient;
+    }
+
+    ground
+    {
+        type            zeroGradient;
+    }
+    
+    sides
+    {
+        type            zeroGradient;
+    }
+
+    top
+    {
+        type            inletOutlet;
+        inletValue      uniform 0;
+        value           uniform 0;
+    }
+}
+
+// ************************************************************************* //
diff --git a/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/0.orig/p_rgh b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/0.orig/p_rgh
new file mode 100644
index 00000000000..a19dce973ee
--- /dev/null
+++ b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/0.orig/p_rgh
@@ -0,0 +1,60 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  1.5-dev                               |
+|   \\  /    A nd           | Web:      http://www.OpenFOAM.org               |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    object      p_rgh;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [1 -1 -2 0 0 0 0];
+
+internalField   uniform 0;
+
+boundaryField
+{
+    left 
+    {
+        type            fixedFluxPressure;
+        value           uniform 0;
+    }
+
+    right
+    {
+        type            fixedFluxPressure;
+        value           uniform 0;
+    }
+
+    ground
+    {
+        type            fixedFluxPressure;
+        value           uniform 0;
+    }
+
+    sides
+    {
+        type            slip;
+    }
+
+    top
+    {
+        type            totalPressure;
+        U               U;
+        phi             rhoPhi;
+        rho             rho;
+        psi             none;
+        gamma           1;
+        p0              uniform 0;
+        value           uniform 0;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/Allclean b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/Allclean
new file mode 100755
index 00000000000..705f91474c4
--- /dev/null
+++ b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/Allclean
@@ -0,0 +1,10 @@
+#!/bin/sh
+cd ${0%/*} || exit 1    # run from this directory
+
+# Source tutorial run functions
+. $WM_PROJECT_DIR/bin/tools/CleanFunctions
+
+rm -rf 0
+
+cleanCase
+
diff --git a/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/Allrun b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/Allrun
new file mode 100755
index 00000000000..9f0c668029a
--- /dev/null
+++ b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/Allrun
@@ -0,0 +1,15 @@
+#!/bin/sh
+cd ${0%/*} || exit 1    # run from this directory
+
+# Source tutorial run functions
+. $WM_PROJECT_DIR/bin/tools/RunFunctions
+
+restore0Dir
+
+runApplication blockMesh
+
+runApplication decomposePar
+
+runParallel setFields
+
+runParallel $(getApplication)
diff --git a/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/constant/g b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/constant/g
new file mode 100644
index 00000000000..317bdd50def
--- /dev/null
+++ b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/constant/g
@@ -0,0 +1,22 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  1.6                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       uniformDimensionedVectorField;
+    location    "constant";
+    object      g;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [0 1 -2 0 0 0 0];
+value           ( 0 0 -9.81 );
+
+
+// ************************************************************************* //
diff --git a/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/constant/transportProperties b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/constant/transportProperties
new file mode 100644
index 00000000000..3633e43efb9
--- /dev/null
+++ b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/constant/transportProperties
@@ -0,0 +1,37 @@
+/*---------------------------------------------------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  1.3                                   |
+|   \\  /    A nd           | Web:      http://www.openfoam.org               |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "constant";
+    object      transportProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+phases (water air);
+
+water
+{
+    transportModel  Newtonian;
+    nu              [0 2 -1 0 0 0 0] 1e-06;
+    rho             [1 -3 0 0 0 0 0] 1000;
+}
+
+air
+{
+    transportModel  Newtonian;
+    nu              [0 2 -1 0 0 0 0] 1.48e-05;
+    rho             [1 -3 0 0 0 0 0] 1;
+}
+
+sigma           [1 0 -2 0 0 0 0] 0.07;
+
+
+// ************************************************************************* //
diff --git a/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/constant/turbulenceProperties b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/constant/turbulenceProperties
new file mode 100644
index 00000000000..22f11ecab7a
--- /dev/null
+++ b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/constant/turbulenceProperties
@@ -0,0 +1,20 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  1.6                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "constant";
+    object      turbulenceProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+simulationType  laminar;
+
+// ************************************************************************* //
diff --git a/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/constant/waveProperties b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/constant/waveProperties
new file mode 100644
index 00000000000..7247a17696e
--- /dev/null
+++ b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/constant/waveProperties
@@ -0,0 +1,43 @@
+/*---------------------------------------------------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  plus                                  |
+|   \\  /    A nd           | Web:      http://www.openfoam.com               |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "constant";
+    object      wavesProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+left
+{
+    alpha           alpha.water;
+
+    waveModel       Grimshaw;
+
+    nPaddle         1;
+
+    waveHeight      0.05;
+
+    waveAngle       0.0;
+
+    activeAbsorption no;
+}
+
+right
+{
+    alpha           alpha.water;
+
+    waveModel       shallowWaterAbsorption;
+
+    nPaddle         1;
+}
+
+// ************************************************************************* //
+
diff --git a/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/system/blockMeshDict b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/system/blockMeshDict
new file mode 100644
index 00000000000..f7d292e0231
--- /dev/null
+++ b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/system/blockMeshDict
@@ -0,0 +1,89 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  2.1.0                                 |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version         2.0;
+    format          ascii;
+    class           dictionary;
+    object          blockMeshDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+convertToMeters 1;
+
+vertices
+(
+    ( 0.0 0.0 0.0)
+    ( 7.0 0.0 0.0)
+    ( 7.0 0.55 0.0)
+    ( 0.0 0.55 0.0)
+    ( 0.0 0.0 0.5)
+    ( 7.0 0.0 0.5)
+    ( 7.0 0.55 0.5)
+    ( 0.0 0.55 0.5)
+
+);
+
+blocks
+(
+    hex (0 1 2 3 4 5 6 7) (350 28 42) simpleGrading (1 1 1)
+);
+edges
+(
+);
+
+boundary
+(
+    left
+    {
+        type patch;
+        faces
+        (
+            (0 4 7 3)
+        );
+    }    
+    right
+    {
+        type patch;
+        faces
+        (
+            (1 5 6 2)
+        );
+    }
+    ground
+    {
+        type wall;
+        faces
+        (
+            (0 1 2 3)
+        );
+    }
+    top
+    {
+        type patch;
+        faces
+        (
+            (4 5 6 7)
+        );
+    }
+    sides
+    {
+        type patch;
+        faces
+        (
+            (0 1 5 4)
+            (3 2 6 7)
+        );
+    }
+);
+
+mergePatchPairs
+(
+);
+
+// ************************************************************************* //
diff --git a/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/system/controlDict b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/system/controlDict
new file mode 100644
index 00000000000..5e5bd614380
--- /dev/null
+++ b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/system/controlDict
@@ -0,0 +1,143 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  2.1.0                                 |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "system";
+    object      controlDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+application     interFoam;
+
+startFrom       latestTime;
+
+startTime       0;
+
+stopAt          endTime;
+
+endTime         7.0;
+
+deltaT          0.1;
+
+writeControl    adjustableRunTime;
+
+writeInterval   0.1;
+
+purgeWrite      0;
+
+writeFormat     ascii;
+
+writePrecision  6;
+
+writeCompression uncompressed;
+
+timeFormat      general;
+
+timePrecision   6;
+
+runTimeModifiable yes;
+
+adjustTimeStep  on;
+
+maxCo           0.4;
+maxAlphaCo      0.4;
+
+maxDeltaT       0.01; 
+
+functions
+{
+    //Sensores VOF
+    line
+    {
+        type            sets;
+        functionObjectLibs ("libsampling.so");
+        enabled         true;
+        outputControl   writeTime;
+        outputInterval  1;
+
+	interpolationScheme cellPoint;
+	setFormat       raw;
+	sets
+	(
+	    s1
+            {
+
+	      type uniform;
+	      axis distance;
+	      start   ( 0.865 0.275 0.0 );
+              end     ( 0.865 0.275 0.5 );
+	      nPoints 101;
+	    }
+	    s2
+            {
+
+	      type uniform;
+	      axis distance;
+	      start   ( 1.065 0.275 0.0 );
+              end     ( 1.065 0.275 0.5 );
+	      nPoints 101;
+	    }
+	    s3
+            {
+
+	      type uniform;
+	      axis distance;
+	      start   ( 4.1 0.275 0.0 );
+              end     ( 4.1 0.275 0.5 );
+	      nPoints 101;
+	    }
+	    s4
+            {
+
+	      type uniform;
+	      axis distance;
+	      start   ( 4.645 0.275 0.0 );
+              end     ( 4.645 0.275 0.5 );
+	      nPoints 101;
+	    }	    
+	    s5
+            {
+
+	      type uniform;
+	      axis distance;
+	      start   ( 5.2 0.275 0.0 );
+              end     ( 5.2 0.275 0.5 );
+	      nPoints 101;
+	    }	  
+	    s6
+            {
+
+	      type uniform;
+	      axis distance;
+	      start   ( 5.85 0.275 0.0 );
+              end     ( 5.85 0.275 0.5 );
+	      nPoints 101;
+	    }
+	    s7
+            {
+
+	      type uniform;
+	      axis distance;
+	      start   ( 6.15 0.275 0.0 );
+              end     ( 6.15 0.275 0.5 );
+	      nPoints 101;
+	    }  
+	);
+        fixedLocations  false;
+        fields
+        (
+            alpha.water
+        );
+    }
+
+} 
+
+// ************************************************************************* //
diff --git a/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/system/decomposeParDict b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/system/decomposeParDict
new file mode 100644
index 00000000000..a4e660116ce
--- /dev/null
+++ b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/system/decomposeParDict
@@ -0,0 +1,29 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  2.1.0                                 |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      decomposeParDict;
+}
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+numberOfSubdomains 2;
+
+method          hierarchical;
+
+hierarchicalCoeffs
+{
+    n           (2 1 1);
+    delta       0.001;
+    order       xyz;
+}
+
+// ************************************************************************* //
diff --git a/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/system/fvSchemes b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/system/fvSchemes
new file mode 100644
index 00000000000..eeff89271fb
--- /dev/null
+++ b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/system/fvSchemes
@@ -0,0 +1,54 @@
+
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  plus                                  |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "system";
+    object      fvSchemes;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+ddtSchemes
+{
+    default         Euler;
+}
+
+gradSchemes
+{
+    default         Gauss linear;
+}
+
+divSchemes
+{
+    div(rhoPhi,U)   Gauss linearUpwind grad(U);
+    div(phi,alpha)  Gauss vanLeer;
+    div(phirb,alpha) Gauss linear;
+    div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear;
+}
+
+laplacianSchemes
+{
+    default         Gauss linear orthogonal;
+}
+
+interpolationSchemes
+{
+    default         linear;
+}
+
+snGradSchemes
+{
+    default         orthogonal;
+}
+
+
+// ************************************************************************* //
+
diff --git a/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/system/fvSolution b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/system/fvSolution
new file mode 100644
index 00000000000..859308b6fab
--- /dev/null
+++ b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/system/fvSolution
@@ -0,0 +1,78 @@
+
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  plus                                  |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "system";
+    object      fvSolution;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+solvers
+{
+    "alpha.water.*"
+    {
+        nAlphaCorr      1;
+        nAlphaSubCycles 3;
+        cAlpha          1;
+    }
+
+    pcorr
+    {
+        solver          PCG;
+        preconditioner  DIC;
+        tolerance       1e-6;
+        relTol          0;
+    }
+
+    p_rgh
+    {
+        solver          PCG;
+        preconditioner  DIC;
+        tolerance       1e-6;
+        relTol          0.1;
+    }
+
+    p_rghFinal
+    {
+        solver          GAMG;
+        smoother        DIC;
+        tolerance       1e-7;
+        relTol          0;
+    }
+
+    U
+    {
+        solver          PBiCG;
+        preconditioner  DILU;
+        tolerance       1e-6;
+        relTol          0.1;
+    }
+
+    UFinal
+    {
+        solver          PBiCG;
+        preconditioner  DILU;
+        tolerance       1e-6;
+        relTol          0;
+    }
+}
+
+PIMPLE
+{
+    momentumPredictor no;
+    nCorrectors     2;
+    nNonOrthogonalCorrectors 0;
+}
+
+
+// ************************************************************************* //
+
diff --git a/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/system/setFieldsDict b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/system/setFieldsDict
new file mode 100644
index 00000000000..5873ea0e3d1
--- /dev/null
+++ b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryGrimshaw/system/setFieldsDict
@@ -0,0 +1,37 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  2.1.0                                 |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "system";
+    object      setFieldsDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+defaultFieldValues
+(
+    volScalarFieldValue alpha.water 0
+    volVectorFieldValue U (0 0 0)
+);
+
+regions
+(
+    boxToCell
+    {
+        box (-10 -10 -10) (100 100 0.15);
+        fieldValues
+        (
+            volScalarFieldValue alpha.water 1
+        );
+    }
+);
+
+
+// ************************************************************************* //
diff --git a/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/0.orig/U b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/0.orig/U
new file mode 100644
index 00000000000..e0c42a3ef50
--- /dev/null
+++ b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/0.orig/U
@@ -0,0 +1,53 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  1.7.x                                 |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volVectorField;
+    location    "0";
+    object      U;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [0 1 -1 0 0 0 0];
+
+internalField   uniform (0 0 0);
+
+boundaryField
+{
+    left
+    {
+        type            waveVelocity;
+        value           uniform (0 0 0);
+    }
+
+    right
+    {
+        type            waveVelocity;
+        value           uniform (0 0 0);
+    }
+
+    sides
+    {
+        type            slip;
+    }
+
+    ground
+    {
+        type            noSlip;
+    }
+
+    top
+    {
+        type            pressureInletOutletVelocity;
+        value           uniform (0 0 0);
+    }
+}
+
+// ************************************************************************* //
diff --git a/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/0.orig/alpha.water b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/0.orig/alpha.water
new file mode 100644
index 00000000000..3562fc0b2f8
--- /dev/null
+++ b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/0.orig/alpha.water
@@ -0,0 +1,52 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  1.5-dev                               |
+|   \\  /    A nd           | Web:      http://www.OpenFOAM.org               |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    object      alpha.water;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [0 0 0 0 0 0 0];
+
+internalField   uniform 0;
+
+boundaryField
+{
+    left
+    {
+        type            waveAlpha;
+        value           uniform 0;
+    }
+
+    right
+    {
+        type            zeroGradient;
+    }
+
+    ground
+    {
+        type            zeroGradient;
+    }
+    
+    sides
+    {
+        type            zeroGradient;
+    }
+
+    top
+    {
+        type            inletOutlet;
+        inletValue      uniform 0;
+        value           uniform 0;
+    }
+}
+
+// ************************************************************************* //
diff --git a/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/0.orig/p_rgh b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/0.orig/p_rgh
new file mode 100644
index 00000000000..a19dce973ee
--- /dev/null
+++ b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/0.orig/p_rgh
@@ -0,0 +1,60 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  1.5-dev                               |
+|   \\  /    A nd           | Web:      http://www.OpenFOAM.org               |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    object      p_rgh;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [1 -1 -2 0 0 0 0];
+
+internalField   uniform 0;
+
+boundaryField
+{
+    left 
+    {
+        type            fixedFluxPressure;
+        value           uniform 0;
+    }
+
+    right
+    {
+        type            fixedFluxPressure;
+        value           uniform 0;
+    }
+
+    ground
+    {
+        type            fixedFluxPressure;
+        value           uniform 0;
+    }
+
+    sides
+    {
+        type            slip;
+    }
+
+    top
+    {
+        type            totalPressure;
+        U               U;
+        phi             rhoPhi;
+        rho             rho;
+        psi             none;
+        gamma           1;
+        p0              uniform 0;
+        value           uniform 0;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/Allclean b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/Allclean
new file mode 100755
index 00000000000..705f91474c4
--- /dev/null
+++ b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/Allclean
@@ -0,0 +1,10 @@
+#!/bin/sh
+cd ${0%/*} || exit 1    # run from this directory
+
+# Source tutorial run functions
+. $WM_PROJECT_DIR/bin/tools/CleanFunctions
+
+rm -rf 0
+
+cleanCase
+
diff --git a/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/Allrun b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/Allrun
new file mode 100755
index 00000000000..9f0c668029a
--- /dev/null
+++ b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/Allrun
@@ -0,0 +1,15 @@
+#!/bin/sh
+cd ${0%/*} || exit 1    # run from this directory
+
+# Source tutorial run functions
+. $WM_PROJECT_DIR/bin/tools/RunFunctions
+
+restore0Dir
+
+runApplication blockMesh
+
+runApplication decomposePar
+
+runParallel setFields
+
+runParallel $(getApplication)
diff --git a/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/constant/g b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/constant/g
new file mode 100644
index 00000000000..317bdd50def
--- /dev/null
+++ b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/constant/g
@@ -0,0 +1,22 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  1.6                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       uniformDimensionedVectorField;
+    location    "constant";
+    object      g;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [0 1 -2 0 0 0 0];
+value           ( 0 0 -9.81 );
+
+
+// ************************************************************************* //
diff --git a/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/constant/transportProperties b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/constant/transportProperties
new file mode 100644
index 00000000000..3633e43efb9
--- /dev/null
+++ b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/constant/transportProperties
@@ -0,0 +1,37 @@
+/*---------------------------------------------------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  1.3                                   |
+|   \\  /    A nd           | Web:      http://www.openfoam.org               |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "constant";
+    object      transportProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+phases (water air);
+
+water
+{
+    transportModel  Newtonian;
+    nu              [0 2 -1 0 0 0 0] 1e-06;
+    rho             [1 -3 0 0 0 0 0] 1000;
+}
+
+air
+{
+    transportModel  Newtonian;
+    nu              [0 2 -1 0 0 0 0] 1.48e-05;
+    rho             [1 -3 0 0 0 0 0] 1;
+}
+
+sigma           [1 0 -2 0 0 0 0] 0.07;
+
+
+// ************************************************************************* //
diff --git a/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/constant/turbulenceProperties b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/constant/turbulenceProperties
new file mode 100644
index 00000000000..22f11ecab7a
--- /dev/null
+++ b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/constant/turbulenceProperties
@@ -0,0 +1,20 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  1.6                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "constant";
+    object      turbulenceProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+simulationType  laminar;
+
+// ************************************************************************* //
diff --git a/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/constant/waveProperties b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/constant/waveProperties
new file mode 100644
index 00000000000..3ec89ee67e8
--- /dev/null
+++ b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/constant/waveProperties
@@ -0,0 +1,43 @@
+/*---------------------------------------------------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  plus                                  |
+|   \\  /    A nd           | Web:      http://www.openfoam.com               |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "constant";
+    object      wavesProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+left
+{
+    alpha           alpha.water;
+
+    waveModel       McCowan;
+
+    nPaddle         1;
+
+    waveHeight      0.05;
+
+    waveAngle       0.0;
+
+    activeAbsorption yes;
+}
+
+right
+{
+    alpha           alpha.water;
+
+    waveModel       shallowWaterAbsorption;
+
+    nPaddle         1;
+}
+
+// ************************************************************************* //
+
diff --git a/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/system/blockMeshDict b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/system/blockMeshDict
new file mode 100644
index 00000000000..f7d292e0231
--- /dev/null
+++ b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/system/blockMeshDict
@@ -0,0 +1,89 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  2.1.0                                 |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version         2.0;
+    format          ascii;
+    class           dictionary;
+    object          blockMeshDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+convertToMeters 1;
+
+vertices
+(
+    ( 0.0 0.0 0.0)
+    ( 7.0 0.0 0.0)
+    ( 7.0 0.55 0.0)
+    ( 0.0 0.55 0.0)
+    ( 0.0 0.0 0.5)
+    ( 7.0 0.0 0.5)
+    ( 7.0 0.55 0.5)
+    ( 0.0 0.55 0.5)
+
+);
+
+blocks
+(
+    hex (0 1 2 3 4 5 6 7) (350 28 42) simpleGrading (1 1 1)
+);
+edges
+(
+);
+
+boundary
+(
+    left
+    {
+        type patch;
+        faces
+        (
+            (0 4 7 3)
+        );
+    }    
+    right
+    {
+        type patch;
+        faces
+        (
+            (1 5 6 2)
+        );
+    }
+    ground
+    {
+        type wall;
+        faces
+        (
+            (0 1 2 3)
+        );
+    }
+    top
+    {
+        type patch;
+        faces
+        (
+            (4 5 6 7)
+        );
+    }
+    sides
+    {
+        type patch;
+        faces
+        (
+            (0 1 5 4)
+            (3 2 6 7)
+        );
+    }
+);
+
+mergePatchPairs
+(
+);
+
+// ************************************************************************* //
diff --git a/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/system/controlDict b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/system/controlDict
new file mode 100644
index 00000000000..5e5bd614380
--- /dev/null
+++ b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/system/controlDict
@@ -0,0 +1,143 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  2.1.0                                 |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "system";
+    object      controlDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+application     interFoam;
+
+startFrom       latestTime;
+
+startTime       0;
+
+stopAt          endTime;
+
+endTime         7.0;
+
+deltaT          0.1;
+
+writeControl    adjustableRunTime;
+
+writeInterval   0.1;
+
+purgeWrite      0;
+
+writeFormat     ascii;
+
+writePrecision  6;
+
+writeCompression uncompressed;
+
+timeFormat      general;
+
+timePrecision   6;
+
+runTimeModifiable yes;
+
+adjustTimeStep  on;
+
+maxCo           0.4;
+maxAlphaCo      0.4;
+
+maxDeltaT       0.01; 
+
+functions
+{
+    //Sensores VOF
+    line
+    {
+        type            sets;
+        functionObjectLibs ("libsampling.so");
+        enabled         true;
+        outputControl   writeTime;
+        outputInterval  1;
+
+	interpolationScheme cellPoint;
+	setFormat       raw;
+	sets
+	(
+	    s1
+            {
+
+	      type uniform;
+	      axis distance;
+	      start   ( 0.865 0.275 0.0 );
+              end     ( 0.865 0.275 0.5 );
+	      nPoints 101;
+	    }
+	    s2
+            {
+
+	      type uniform;
+	      axis distance;
+	      start   ( 1.065 0.275 0.0 );
+              end     ( 1.065 0.275 0.5 );
+	      nPoints 101;
+	    }
+	    s3
+            {
+
+	      type uniform;
+	      axis distance;
+	      start   ( 4.1 0.275 0.0 );
+              end     ( 4.1 0.275 0.5 );
+	      nPoints 101;
+	    }
+	    s4
+            {
+
+	      type uniform;
+	      axis distance;
+	      start   ( 4.645 0.275 0.0 );
+              end     ( 4.645 0.275 0.5 );
+	      nPoints 101;
+	    }	    
+	    s5
+            {
+
+	      type uniform;
+	      axis distance;
+	      start   ( 5.2 0.275 0.0 );
+              end     ( 5.2 0.275 0.5 );
+	      nPoints 101;
+	    }	  
+	    s6
+            {
+
+	      type uniform;
+	      axis distance;
+	      start   ( 5.85 0.275 0.0 );
+              end     ( 5.85 0.275 0.5 );
+	      nPoints 101;
+	    }
+	    s7
+            {
+
+	      type uniform;
+	      axis distance;
+	      start   ( 6.15 0.275 0.0 );
+              end     ( 6.15 0.275 0.5 );
+	      nPoints 101;
+	    }  
+	);
+        fixedLocations  false;
+        fields
+        (
+            alpha.water
+        );
+    }
+
+} 
+
+// ************************************************************************* //
diff --git a/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/system/decomposeParDict b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/system/decomposeParDict
new file mode 100644
index 00000000000..a4e660116ce
--- /dev/null
+++ b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/system/decomposeParDict
@@ -0,0 +1,29 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  2.1.0                                 |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      decomposeParDict;
+}
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+numberOfSubdomains 2;
+
+method          hierarchical;
+
+hierarchicalCoeffs
+{
+    n           (2 1 1);
+    delta       0.001;
+    order       xyz;
+}
+
+// ************************************************************************* //
diff --git a/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/system/fvSchemes b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/system/fvSchemes
new file mode 100644
index 00000000000..eeff89271fb
--- /dev/null
+++ b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/system/fvSchemes
@@ -0,0 +1,54 @@
+
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  plus                                  |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "system";
+    object      fvSchemes;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+ddtSchemes
+{
+    default         Euler;
+}
+
+gradSchemes
+{
+    default         Gauss linear;
+}
+
+divSchemes
+{
+    div(rhoPhi,U)   Gauss linearUpwind grad(U);
+    div(phi,alpha)  Gauss vanLeer;
+    div(phirb,alpha) Gauss linear;
+    div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear;
+}
+
+laplacianSchemes
+{
+    default         Gauss linear orthogonal;
+}
+
+interpolationSchemes
+{
+    default         linear;
+}
+
+snGradSchemes
+{
+    default         orthogonal;
+}
+
+
+// ************************************************************************* //
+
diff --git a/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/system/fvSolution b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/system/fvSolution
new file mode 100644
index 00000000000..859308b6fab
--- /dev/null
+++ b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/system/fvSolution
@@ -0,0 +1,78 @@
+
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  plus                                  |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "system";
+    object      fvSolution;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+solvers
+{
+    "alpha.water.*"
+    {
+        nAlphaCorr      1;
+        nAlphaSubCycles 3;
+        cAlpha          1;
+    }
+
+    pcorr
+    {
+        solver          PCG;
+        preconditioner  DIC;
+        tolerance       1e-6;
+        relTol          0;
+    }
+
+    p_rgh
+    {
+        solver          PCG;
+        preconditioner  DIC;
+        tolerance       1e-6;
+        relTol          0.1;
+    }
+
+    p_rghFinal
+    {
+        solver          GAMG;
+        smoother        DIC;
+        tolerance       1e-7;
+        relTol          0;
+    }
+
+    U
+    {
+        solver          PBiCG;
+        preconditioner  DILU;
+        tolerance       1e-6;
+        relTol          0.1;
+    }
+
+    UFinal
+    {
+        solver          PBiCG;
+        preconditioner  DILU;
+        tolerance       1e-6;
+        relTol          0;
+    }
+}
+
+PIMPLE
+{
+    momentumPredictor no;
+    nCorrectors     2;
+    nNonOrthogonalCorrectors 0;
+}
+
+
+// ************************************************************************* //
+
diff --git a/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/system/setFieldsDict b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/system/setFieldsDict
new file mode 100644
index 00000000000..5873ea0e3d1
--- /dev/null
+++ b/tutorials/multiphase/interFoam/laminar/waveExampleSolitaryMcCowan/system/setFieldsDict
@@ -0,0 +1,37 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  2.1.0                                 |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "system";
+    object      setFieldsDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+defaultFieldValues
+(
+    volScalarFieldValue alpha.water 0
+    volVectorFieldValue U (0 0 0)
+);
+
+regions
+(
+    boxToCell
+    {
+        box (-10 -10 -10) (100 100 0.15);
+        fieldValues
+        (
+            volScalarFieldValue alpha.water 1
+        );
+    }
+);
+
+
+// ************************************************************************* //
-- 
GitLab