diff --git a/src/finiteVolume/Make/files b/src/finiteVolume/Make/files
index dc325c1ddf..14aa39935e 100644
--- a/src/finiteVolume/Make/files
+++ b/src/finiteVolume/Make/files
@@ -287,6 +287,7 @@ $(ddtSchemes)/steadyStateDdtScheme/steadyStateDdtSchemes.C
$(ddtSchemes)/EulerDdtScheme/EulerDdtSchemes.C
$(ddtSchemes)/CoEulerDdtScheme/CoEulerDdtSchemes.C
$(ddtSchemes)/SLTSDdtScheme/SLTSDdtSchemes.C
+$(ddtSchemes)/localEulerDdtScheme/localEulerDdtSchemes.C
$(ddtSchemes)/backwardDdtScheme/backwardDdtSchemes.C
$(ddtSchemes)/boundedBackwardDdtScheme/boundedBackwardDdtScheme.C
$(ddtSchemes)/boundedBackwardDdtScheme/boundedBackwardDdtSchemes.C
diff --git a/src/finiteVolume/finiteVolume/ddtSchemes/localEulerDdtScheme/localEulerDdtScheme.C b/src/finiteVolume/finiteVolume/ddtSchemes/localEulerDdtScheme/localEulerDdtScheme.C
new file mode 100644
index 0000000000..b0e2f9bb11
--- /dev/null
+++ b/src/finiteVolume/finiteVolume/ddtSchemes/localEulerDdtScheme/localEulerDdtScheme.C
@@ -0,0 +1,584 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 1991-2010 OpenCFD Ltd.
+ \\/ 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 "localEulerDdtScheme.H"
+#include "surfaceInterpolate.H"
+#include "fvMatrices.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace fv
+{
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+template
+const volScalarField& localEulerDdtScheme::localRDeltaT() const
+{
+ return mesh().objectRegistry::lookupObject(rDeltaTName_);
+}
+
+
+template
+tmp >
+localEulerDdtScheme::fvcDdt
+(
+ const dimensioned& dt
+)
+{
+ const volScalarField& rDeltaT = localRDeltaT();
+
+ IOobject ddtIOobject
+ (
+ "ddt(" + dt.name() + ')',
+ mesh().time().timeName(),
+ mesh()
+ );
+
+ if (mesh().moving())
+ {
+ tmp > tdtdt
+ (
+ new GeometricField
+ (
+ ddtIOobject,
+ mesh(),
+ dimensioned
+ (
+ "0",
+ dt.dimensions()/dimTime,
+ pTraits::zero
+ )
+ )
+ );
+
+ tdtdt().internalField() =
+ rDeltaT.internalField()*dt.value()*(1.0 - mesh().V0()/mesh().V());
+
+ return tdtdt;
+ }
+ else
+ {
+ return tmp >
+ (
+ new GeometricField
+ (
+ ddtIOobject,
+ mesh(),
+ dimensioned
+ (
+ "0",
+ dt.dimensions()/dimTime,
+ pTraits::zero
+ ),
+ calculatedFvPatchField::typeName
+ )
+ );
+ }
+}
+
+
+template
+tmp >
+localEulerDdtScheme::fvcDdt
+(
+ const GeometricField& vf
+)
+{
+ const volScalarField& rDeltaT = localRDeltaT();
+
+ IOobject ddtIOobject
+ (
+ "ddt(" + vf.name() + ')',
+ mesh().time().timeName(),
+ mesh()
+ );
+
+ if (mesh().moving())
+ {
+ return tmp >
+ (
+ new GeometricField
+ (
+ ddtIOobject,
+ mesh(),
+ rDeltaT.dimensions()*vf.dimensions(),
+ rDeltaT.internalField()*
+ (
+ vf.internalField()
+ - vf.oldTime().internalField()*mesh().V0()/mesh().V()
+ ),
+ rDeltaT.boundaryField()*
+ (
+ vf.boundaryField() - vf.oldTime().boundaryField()
+ )
+ )
+ );
+ }
+ else
+ {
+ return tmp >
+ (
+ new GeometricField
+ (
+ ddtIOobject,
+ rDeltaT*(vf - vf.oldTime())
+ )
+ );
+ }
+}
+
+
+template
+tmp >
+localEulerDdtScheme::fvcDdt
+(
+ const dimensionedScalar& rho,
+ const GeometricField& vf
+)
+{
+ const volScalarField& rDeltaT = localRDeltaT();
+
+ IOobject ddtIOobject
+ (
+ "ddt(" + rho.name() + ',' + vf.name() + ')',
+ mesh().time().timeName(),
+ mesh()
+ );
+
+ if (mesh().moving())
+ {
+ return tmp >
+ (
+ new GeometricField
+ (
+ ddtIOobject,
+ mesh(),
+ rDeltaT.dimensions()*rho.dimensions()*vf.dimensions(),
+ rDeltaT.internalField()*rho.value()*
+ (
+ vf.internalField()
+ - vf.oldTime().internalField()*mesh().V0()/mesh().V()
+ ),
+ rDeltaT.boundaryField()*rho.value()*
+ (
+ vf.boundaryField() - vf.oldTime().boundaryField()
+ )
+ )
+ );
+ }
+ else
+ {
+ return tmp >
+ (
+ new GeometricField
+ (
+ ddtIOobject,
+ rDeltaT*rho*(vf - vf.oldTime())
+ )
+ );
+ }
+}
+
+
+template
+tmp >
+localEulerDdtScheme::fvcDdt
+(
+ const volScalarField& rho,
+ const GeometricField& vf
+)
+{
+ const volScalarField& rDeltaT = localRDeltaT();
+
+ IOobject ddtIOobject
+ (
+ "ddt(" + rho.name() + ',' + vf.name() + ')',
+ mesh().time().timeName(),
+ mesh()
+ );
+
+ if (mesh().moving())
+ {
+ return tmp >
+ (
+ new GeometricField
+ (
+ ddtIOobject,
+ mesh(),
+ rDeltaT.dimensions()*rho.dimensions()*vf.dimensions(),
+ rDeltaT.internalField()*
+ (
+ rho.internalField()*vf.internalField()
+ - rho.oldTime().internalField()
+ *vf.oldTime().internalField()*mesh().V0()/mesh().V()
+ ),
+ rDeltaT.boundaryField()*
+ (
+ rho.boundaryField()*vf.boundaryField()
+ - rho.oldTime().boundaryField()
+ *vf.oldTime().boundaryField()
+ )
+ )
+ );
+ }
+ else
+ {
+ return tmp >
+ (
+ new GeometricField
+ (
+ ddtIOobject,
+ rDeltaT*(rho*vf - rho.oldTime()*vf.oldTime())
+ )
+ );
+ }
+}
+
+
+template
+tmp >
+localEulerDdtScheme::fvmDdt
+(
+ const GeometricField& vf
+)
+{
+ tmp > tfvm
+ (
+ new fvMatrix
+ (
+ vf,
+ vf.dimensions()*dimVol/dimTime
+ )
+ );
+
+ fvMatrix& fvm = tfvm();
+
+ const scalarField& rDeltaT = localRDeltaT().internalField();
+
+ fvm.diag() = rDeltaT*mesh().V();
+
+ if (mesh().moving())
+ {
+ fvm.source() = rDeltaT*vf.oldTime().internalField()*mesh().V0();
+ }
+ else
+ {
+ fvm.source() = rDeltaT*vf.oldTime().internalField()*mesh().V();
+ }
+
+ return tfvm;
+}
+
+
+template
+tmp >
+localEulerDdtScheme::fvmDdt
+(
+ const dimensionedScalar& rho,
+ const GeometricField& vf
+)
+{
+ tmp > tfvm
+ (
+ new fvMatrix
+ (
+ vf,
+ rho.dimensions()*vf.dimensions()*dimVol/dimTime
+ )
+ );
+ fvMatrix& fvm = tfvm();
+
+ const scalarField& rDeltaT = localRDeltaT().internalField();
+
+ fvm.diag() = rDeltaT*rho.value()*mesh().V();
+
+ if (mesh().moving())
+ {
+ fvm.source() = rDeltaT
+ *rho.value()*vf.oldTime().internalField()*mesh().V0();
+ }
+ else
+ {
+ fvm.source() = rDeltaT
+ *rho.value()*vf.oldTime().internalField()*mesh().V();
+ }
+
+ return tfvm;
+}
+
+
+template
+tmp >
+localEulerDdtScheme::fvmDdt
+(
+ const volScalarField& rho,
+ const GeometricField& vf
+)
+{
+ tmp > tfvm
+ (
+ new fvMatrix
+ (
+ vf,
+ rho.dimensions()*vf.dimensions()*dimVol/dimTime
+ )
+ );
+ fvMatrix& fvm = tfvm();
+
+ const scalarField& rDeltaT = localRDeltaT().internalField();
+
+ fvm.diag() = rDeltaT*rho.internalField()*mesh().V();
+
+ if (mesh().moving())
+ {
+ fvm.source() = rDeltaT
+ *rho.oldTime().internalField()
+ *vf.oldTime().internalField()*mesh().V0();
+ }
+ else
+ {
+ fvm.source() = rDeltaT
+ *rho.oldTime().internalField()
+ *vf.oldTime().internalField()*mesh().V();
+ }
+
+ return tfvm;
+}
+
+
+template
+tmp::fluxFieldType>
+localEulerDdtScheme::fvcDdtPhiCorr
+(
+ const volScalarField& rA,
+ const GeometricField& U,
+ const fluxFieldType& phi
+)
+{
+ IOobject ddtIOobject
+ (
+ "ddtPhiCorr(" + rA.name() + ',' + U.name() + ',' + phi.name() + ')',
+ mesh().time().timeName(),
+ mesh()
+ );
+
+ if (mesh().moving())
+ {
+ return tmp
+ (
+ new fluxFieldType
+ (
+ ddtIOobject,
+ mesh(),
+ dimensioned::type>
+ (
+ "0",
+ rA.dimensions()*phi.dimensions()/dimTime,
+ pTraits::type>::zero
+ )
+ )
+ );
+ }
+ else
+ {
+ const volScalarField& rDeltaT = localRDeltaT();
+
+ return tmp
+ (
+ new fluxFieldType
+ (
+ ddtIOobject,
+ fvcDdtPhiCoeff(U.oldTime(), phi.oldTime())*
+ (
+ fvc::interpolate(rDeltaT*rA)*phi.oldTime()
+ - (fvc::interpolate(rDeltaT*rA*U.oldTime()) & mesh().Sf())
+ )
+ )
+ );
+ }
+}
+
+
+template
+tmp::fluxFieldType>
+localEulerDdtScheme::fvcDdtPhiCorr
+(
+ const volScalarField& rA,
+ const volScalarField& rho,
+ const GeometricField& U,
+ const fluxFieldType& phi
+)
+{
+ IOobject ddtIOobject
+ (
+ "ddtPhiCorr("
+ + rA.name() + ',' + rho.name() + ',' + U.name() + ',' + phi.name() + ')',
+ mesh().time().timeName(),
+ mesh()
+ );
+
+ if (mesh().moving())
+ {
+ return tmp
+ (
+ new fluxFieldType
+ (
+ ddtIOobject,
+ mesh(),
+ dimensioned::type>
+ (
+ "0",
+ rA.dimensions()*rho.dimensions()*phi.dimensions()/dimTime,
+ pTraits::type>::zero
+ )
+ )
+ );
+ }
+ else
+ {
+ const volScalarField& rDeltaT = localRDeltaT();
+
+ if
+ (
+ U.dimensions() == dimVelocity
+ && phi.dimensions() == dimVelocity*dimArea
+ )
+ {
+ return tmp
+ (
+ new fluxFieldType
+ (
+ ddtIOobject,
+ fvcDdtPhiCoeff(U.oldTime(), phi.oldTime())
+ *(
+ fvc::interpolate(rDeltaT*rA*rho.oldTime())*phi.oldTime()
+ - (fvc::interpolate(rDeltaT*rA*rho.oldTime()*U.oldTime())
+ & mesh().Sf())
+ )
+ )
+ );
+ }
+ else if
+ (
+ U.dimensions() == dimVelocity
+ && phi.dimensions() == dimDensity*dimVelocity*dimArea
+ )
+ {
+ return tmp
+ (
+ new fluxFieldType
+ (
+ ddtIOobject,
+ fvcDdtPhiCoeff
+ (
+ U.oldTime(),
+ phi.oldTime()/fvc::interpolate(rho.oldTime())
+ )
+ *(
+ fvc::interpolate(rDeltaT*rA*rho.oldTime())
+ *phi.oldTime()/fvc::interpolate(rho.oldTime())
+ - (
+ fvc::interpolate
+ (
+ rDeltaT*rA*rho.oldTime()*U.oldTime()
+ ) & mesh().Sf()
+ )
+ )
+ )
+ );
+ }
+ else if
+ (
+ U.dimensions() == dimDensity*dimVelocity
+ && phi.dimensions() == dimDensity*dimVelocity*dimArea
+ )
+ {
+ return tmp
+ (
+ new fluxFieldType
+ (
+ ddtIOobject,
+ fvcDdtPhiCoeff(rho.oldTime(), U.oldTime(), phi.oldTime())
+ *(
+ fvc::interpolate(rDeltaT*rA)*phi.oldTime()
+ - (
+ fvc::interpolate(rDeltaT*rA*U.oldTime())&mesh().Sf()
+ )
+ )
+ )
+ );
+ }
+ else
+ {
+ FatalErrorIn
+ (
+ "localEulerDdtScheme::fvcDdtPhiCorr"
+ ) << "dimensions of phi are not correct"
+ << abort(FatalError);
+
+ return fluxFieldType::null();
+ }
+ }
+}
+
+
+template
+tmp localEulerDdtScheme::meshPhi
+(
+ const GeometricField&
+)
+{
+ return tmp
+ (
+ new surfaceScalarField
+ (
+ IOobject
+ (
+ "meshPhi",
+ mesh().time().timeName(),
+ mesh()
+ ),
+ mesh(),
+ dimensionedScalar("0", dimVolume/dimTime, 0.0)
+ )
+ );
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace fv
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// ************************************************************************* //
diff --git a/src/finiteVolume/finiteVolume/ddtSchemes/localEulerDdtScheme/localEulerDdtScheme.H b/src/finiteVolume/finiteVolume/ddtSchemes/localEulerDdtScheme/localEulerDdtScheme.H
new file mode 100644
index 0000000000..bb3f2187fe
--- /dev/null
+++ b/src/finiteVolume/finiteVolume/ddtSchemes/localEulerDdtScheme/localEulerDdtScheme.H
@@ -0,0 +1,210 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 1991-2010 OpenCFD Ltd.
+ \\/ 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::fv::localEulerDdtScheme
+
+Description
+ Local time-step first-order Euler implicit/explicit ddt.
+ The reciprocal of the local time-step field is looked-up from the
+ database with the name provided.
+
+ This scheme should only be used for steady-state computations
+ using transient codes where local time-stepping is preferably to
+ under-relaxation for transport consistency reasons.
+
+ See also CoEulerDdtScheme.
+
+SourceFiles
+ localEulerDdtScheme.C
+ localEulerDdtSchemes.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef localEulerDdtScheme_H
+#define localEulerDdtScheme_H
+
+#include "ddtScheme.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace fv
+{
+
+/*---------------------------------------------------------------------------*\
+ Class localEulerDdtScheme Declaration
+\*---------------------------------------------------------------------------*/
+
+template
+class localEulerDdtScheme
+:
+ public fv::ddtScheme
+{
+ // Private Data
+
+ //- Name of the reciprocal local time-step field
+ word rDeltaTName_;
+
+
+ // Private Member Functions
+
+ //- Disallow default bitwise copy construct
+ localEulerDdtScheme(const localEulerDdtScheme&);
+
+ //- Disallow default bitwise assignment
+ void operator=(const localEulerDdtScheme&);
+
+ //- Return the reciprocal of the local time-step
+ const volScalarField& localRDeltaT() const;
+
+
+public:
+
+ //- Runtime type information
+ TypeName("localEuler");
+
+
+ // Constructors
+
+ //- Construct from mesh and Istream
+ localEulerDdtScheme(const fvMesh& mesh, Istream& is)
+ :
+ ddtScheme(mesh, is),
+ rDeltaTName_(is)
+ {}
+
+
+ // Member Functions
+
+ //- Return mesh reference
+ const fvMesh& mesh() const
+ {
+ return fv::ddtScheme::mesh();
+ }
+
+ tmp > fvcDdt
+ (
+ const dimensioned&
+ );
+
+ tmp > fvcDdt
+ (
+ const GeometricField&
+ );
+
+ tmp > fvcDdt
+ (
+ const dimensionedScalar&,
+ const GeometricField&
+ );
+
+ tmp > fvcDdt
+ (
+ const volScalarField&,
+ const GeometricField&
+ );
+
+ tmp > fvmDdt
+ (
+ const GeometricField&
+ );
+
+ tmp > fvmDdt
+ (
+ const dimensionedScalar&,
+ const GeometricField&
+ );
+
+ tmp > fvmDdt
+ (
+ const volScalarField&,
+ const GeometricField&
+ );
+
+ typedef typename ddtScheme::fluxFieldType fluxFieldType;
+
+ tmp fvcDdtPhiCorr
+ (
+ const volScalarField& rA,
+ const GeometricField& U,
+ const fluxFieldType& phi
+ );
+
+ tmp fvcDdtPhiCorr
+ (
+ const volScalarField& rA,
+ const volScalarField& rho,
+ const GeometricField& U,
+ const fluxFieldType& phi
+ );
+
+ tmp meshPhi
+ (
+ const GeometricField&
+ );
+};
+
+
+template<>
+tmp localEulerDdtScheme::fvcDdtPhiCorr
+(
+ const volScalarField& rA,
+ const volScalarField& U,
+ const surfaceScalarField& phi
+);
+
+
+template<>
+tmp localEulerDdtScheme::fvcDdtPhiCorr
+(
+ const volScalarField& rA,
+ const volScalarField& rho,
+ const volScalarField& U,
+ const surfaceScalarField& phi
+);
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace fv
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#ifdef NoRepository
+# include "localEulerDdtScheme.C"
+#endif
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/finiteVolume/finiteVolume/ddtSchemes/localEulerDdtScheme/localEulerDdtSchemes.C b/src/finiteVolume/finiteVolume/ddtSchemes/localEulerDdtScheme/localEulerDdtSchemes.C
new file mode 100644
index 0000000000..53f12e5b7e
--- /dev/null
+++ b/src/finiteVolume/finiteVolume/ddtSchemes/localEulerDdtScheme/localEulerDdtSchemes.C
@@ -0,0 +1,39 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 1991-2010 OpenCFD Ltd.
+ \\/ 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 "localEulerDdtScheme.H"
+#include "fvMesh.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+namespace fv
+{
+ makeFvDdtScheme(localEulerDdtScheme)
+}
+}
+
+// ************************************************************************* //