diff --git a/src/transportModels/incompressible/Make/files b/src/transportModels/incompressible/Make/files
index 40eea6a11f..b181820bd8 100644
--- a/src/transportModels/incompressible/Make/files
+++ b/src/transportModels/incompressible/Make/files
@@ -6,6 +6,7 @@ viscosityModels/CrossPowerLaw/CrossPowerLaw.C
viscosityModels/BirdCarreau/BirdCarreau.C
viscosityModels/HerschelBulkley/HerschelBulkley.C
viscosityModels/Casson/Casson.C
+viscosityModels/strainRateFunction/strainRateFunction.C
transportModel/transportModel.C
singlePhaseTransportModel/singlePhaseTransportModel.C
diff --git a/src/transportModels/incompressible/viscosityModels/strainRateFunction/strainRateFunction.C b/src/transportModels/incompressible/viscosityModels/strainRateFunction/strainRateFunction.C
new file mode 100644
index 0000000000..6c218d710a
--- /dev/null
+++ b/src/transportModels/incompressible/viscosityModels/strainRateFunction/strainRateFunction.C
@@ -0,0 +1,138 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+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 .
+
+\*---------------------------------------------------------------------------*/
+
+#include "strainRateFunction.H"
+#include "addToRunTimeSelectionTable.H"
+#include "surfaceFields.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+namespace viscosityModels
+{
+ defineTypeNameAndDebug(strainRateFunction, 0);
+
+ addToRunTimeSelectionTable
+ (
+ viscosityModel,
+ strainRateFunction,
+ dictionary
+ );
+}
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
+
+Foam::viscosityModels::strainRateFunction::strainRateFunction
+(
+ const word& name,
+ const dictionary& viscosityProperties,
+ const volVectorField& U,
+ const surfaceScalarField& phi
+)
+:
+ viscosityModel(name, viscosityProperties, U, phi),
+ strainRateFunctionCoeffs_(viscosityProperties.subDict(typeName + "Coeffs")),
+ strainRateFunction_
+ (
+ Function1::New("function", strainRateFunctionCoeffs_)
+ ),
+ nu_
+ (
+ IOobject
+ (
+ name,
+ U_.time().timeName(),
+ U_.db(),
+ IOobject::NO_READ,
+ IOobject::AUTO_WRITE
+ ),
+ U_.mesh(),
+ dimensionedScalar(name, dimViscosity, 0)
+ )
+{
+ correct();
+}
+
+
+// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
+
+Foam::tmp
+Foam::viscosityModels::strainRateFunction::nu() const
+{
+ return nu_;
+}
+
+
+Foam::tmp
+Foam::viscosityModels::strainRateFunction::nu(const label patchi) const
+{
+ return nu_.boundaryField()[patchi];
+}
+
+
+void Foam::viscosityModels::strainRateFunction::correct()
+{
+ tmp tsigma = strainRate();
+ const volScalarField& sigma = tsigma();
+
+ nu_.primitiveFieldRef() = strainRateFunction_->value(sigma());
+
+ volScalarField::Boundary& nuBf = nu_.boundaryFieldRef();
+ const volScalarField::Boundary& sigmaBf = sigma.boundaryField();
+
+ forAll(nuBf, patchi)
+ {
+ nuBf[patchi] = strainRateFunction_->value(sigmaBf[patchi]);
+ }
+}
+
+
+bool Foam::viscosityModels::strainRateFunction::read
+(
+ const dictionary& viscosityProperties
+)
+{
+ viscosityModel::read(viscosityProperties);
+
+ strainRateFunctionCoeffs_ = viscosityProperties.subDict
+ (
+ typeName + "Coeffs"
+ );
+
+ strainRateFunction_.clear();
+ strainRateFunction_ = Function1::New
+ (
+ "function",
+ strainRateFunctionCoeffs_
+ );
+
+ return true;
+}
+
+
+// ************************************************************************* //
diff --git a/src/transportModels/incompressible/viscosityModels/strainRateFunction/strainRateFunction.H b/src/transportModels/incompressible/viscosityModels/strainRateFunction/strainRateFunction.H
new file mode 100644
index 0000000000..90c102e322
--- /dev/null
+++ b/src/transportModels/incompressible/viscosityModels/strainRateFunction/strainRateFunction.H
@@ -0,0 +1,131 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+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 .
+
+Class
+ Foam::viscosityModels::strainRateFunction
+
+Description
+ Run-time selected strain-rate function non-Newtonian viscosity model.
+
+ Example linear function of strain-rate:
+ \verbatim
+ transportModel strainRateFunction;
+
+ strainRateFunctionCoeffs
+ {
+ function polynomial ((0 0.1) (1 1.3));
+ }
+ \endverbatim
+
+See also
+ Foam::viscosityModel
+ Foam::Function1
+
+SourceFiles
+ strainRateFunction.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef strainRateFunction_H
+#define strainRateFunction_H
+
+#include "viscosityModel.H"
+#include "volFields.H"
+#include "Function1.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+namespace viscosityModels
+{
+
+/*---------------------------------------------------------------------------*\
+ Class strainRateFunction Declaration
+\*---------------------------------------------------------------------------*/
+
+class strainRateFunction
+:
+ public viscosityModel
+{
+ // Private data
+
+ //- Coefficients dictionary
+ dictionary strainRateFunctionCoeffs_;
+
+ //- Strain-rate function
+ autoPtr> strainRateFunction_;
+
+ //- Current viscosity field
+ volScalarField nu_;
+
+
+public:
+
+ //- Runtime type information
+ TypeName("strainRateFunction");
+
+
+ // Constructors
+
+ //- Construct from components
+ strainRateFunction
+ (
+ const word& name,
+ const dictionary& viscosityProperties,
+ const volVectorField& U,
+ const surfaceScalarField& phi
+ );
+
+
+ //- Destructor
+ virtual ~strainRateFunction()
+ {}
+
+
+ // Member Functions
+
+ //- Return the laminar viscosity
+ virtual tmp nu() const;
+
+ //- Return the laminar viscosity for patch
+ virtual tmp nu(const label patchi) const;
+
+ //- Correct the laminar viscosity
+ virtual void correct();
+
+ //- Read transportProperties dictionary
+ virtual bool read(const dictionary& viscosityProperties);
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace viscosityModels
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //