From 2cd6071c9b128e383c81b603e5b7aab1d4876fc2 Mon Sep 17 00:00:00 2001
From: Kutalmis Bercin <kutalmis.bercin@esi-group.com>
Date: Mon, 7 Jun 2021 15:51:11 +0100
Subject: [PATCH] ENH: enable custom input of U for devRhoReff and devReff

---
 .../DPMIncompressibleTurbulenceModel.C        | 24 +++++++++++++++++++
 .../DPMIncompressibleTurbulenceModel.H        | 12 ++++++++++
 .../compressibleTurbulenceModel.H             |  7 ++++++
 .../IncompressibleTurbulenceModel.C           | 24 +++++++++++++++++++
 .../IncompressibleTurbulenceModel.H           | 12 ++++++++++
 .../incompressibleRhoTurbulenceModel.H        |  7 ++++++
 .../incompressibleTurbulenceModel.H           |  7 ++++++
 .../PhaseIncompressibleTurbulenceModel.C      | 24 +++++++++++++++++++
 .../PhaseIncompressibleTurbulenceModel.H      | 12 ++++++++++
 .../ReynoldsStress/ReynoldsStress.C           | 13 +++++++++-
 .../ReynoldsStress/ReynoldsStress.H           |  6 +++++
 .../laminar/Maxwell/Maxwell.C                 | 12 +++++++++-
 .../laminar/Maxwell/Maxwell.H                 |  6 +++++
 .../linearViscousStress/linearViscousStress.C | 13 +++++++++-
 .../linearViscousStress/linearViscousStress.H |  6 +++++
 .../nonlinearEddyViscosity.C                  | 14 ++++++++++-
 .../nonlinearEddyViscosity.H                  |  6 +++++
 .../adjointLaminar/adjointLaminar.C           | 11 ++++++++-
 .../adjointLaminar/adjointLaminar.H           |  6 +++++
 .../adjointRASModel/adjointRASModel.H         |  6 +++++
 .../adjointSpalartAllmaras.C                  | 14 +++++++++--
 .../adjointSpalartAllmaras.H                  |  2 ++
 .../adjointTurbulenceModel.H                  |  6 +++++
 .../kineticTheoryModel/kineticTheoryModel.C   | 14 +++++++++--
 .../kineticTheoryModel/kineticTheoryModel.H   |  6 +++++
 .../phasePressureModel/phasePressureModel.C   | 12 +++++++++-
 .../phasePressureModel/phasePressureModel.H   |  6 +++++
 .../kineticTheoryModel/kineticTheoryModel.C   | 14 +++++++++--
 .../kineticTheoryModel/kineticTheoryModel.H   |  6 +++++
 .../phasePressureModel/phasePressureModel.C   | 12 +++++++++-
 .../phasePressureModel/phasePressureModel.H   |  6 +++++
 31 files changed, 313 insertions(+), 13 deletions(-)

diff --git a/applications/solvers/lagrangian/DPMFoam/DPMTurbulenceModels/DPMIncompressibleTurbulenceModel.C b/applications/solvers/lagrangian/DPMFoam/DPMTurbulenceModels/DPMIncompressibleTurbulenceModel.C
index b8313c57253..a85edb145c3 100644
--- a/applications/solvers/lagrangian/DPMFoam/DPMTurbulenceModels/DPMIncompressibleTurbulenceModel.C
+++ b/applications/solvers/lagrangian/DPMFoam/DPMTurbulenceModels/DPMIncompressibleTurbulenceModel.C
@@ -149,6 +149,17 @@ Foam::DPMIncompressibleTurbulenceModel<TransportModel>::devReff() const
 }
 
 
+template<class TransportModel>
+Foam::tmp<Foam::volSymmTensorField>
+Foam::DPMIncompressibleTurbulenceModel<TransportModel>::devReff
+(
+    const volVectorField& U
+) const
+{
+    return devRhoReff(U);
+}
+
+
 template<class TransportModel>
 Foam::tmp<Foam::fvVectorMatrix>
 Foam::DPMIncompressibleTurbulenceModel<TransportModel>::divDevReff
@@ -170,6 +181,19 @@ Foam::DPMIncompressibleTurbulenceModel<TransportModel>::devRhoReff() const
 }
 
 
+template<class TransportModel>
+Foam::tmp<Foam::volSymmTensorField>
+Foam::DPMIncompressibleTurbulenceModel<TransportModel>::devRhoReff
+(
+    const volVectorField& U
+) const
+{
+    NotImplemented;
+
+    return devReff(U);
+}
+
+
 template<class TransportModel>
 Foam::tmp<Foam::fvVectorMatrix>
 Foam::DPMIncompressibleTurbulenceModel<TransportModel>::divDevRhoReff
diff --git a/applications/solvers/lagrangian/DPMFoam/DPMTurbulenceModels/DPMIncompressibleTurbulenceModel.H b/applications/solvers/lagrangian/DPMFoam/DPMTurbulenceModels/DPMIncompressibleTurbulenceModel.H
index 914c93d72ff..14d36e9f2f7 100644
--- a/applications/solvers/lagrangian/DPMFoam/DPMTurbulenceModels/DPMIncompressibleTurbulenceModel.H
+++ b/applications/solvers/lagrangian/DPMFoam/DPMTurbulenceModels/DPMIncompressibleTurbulenceModel.H
@@ -116,12 +116,24 @@ public:
         //- Return the effective stress tensor
         virtual tmp<volSymmTensorField> devReff() const;
 
+        //- Return the effective stress tensor based on a given velocity field
+        virtual tmp<volSymmTensorField> devReff
+        (
+            const volVectorField& U
+        ) const;
+
         //- Return the source term for the momentum equation
         virtual tmp<fvVectorMatrix> divDevReff(volVectorField& U) const;
 
         //- Return the effective stress tensor
         virtual tmp<volSymmTensorField> devRhoReff() const;
 
+        //- Return the effective stress tensor based on a given velocity field
+        virtual tmp<volSymmTensorField> devRhoReff
+        (
+            const volVectorField& U
+        ) const;
+
         //- Return the source term for the momentum equation
         virtual tmp<fvVectorMatrix> divDevRhoReff(volVectorField& U) const;
 };
diff --git a/src/TurbulenceModels/compressible/compressibleTurbulenceModel.H b/src/TurbulenceModels/compressible/compressibleTurbulenceModel.H
index 07de20a43d8..abed13fee96 100644
--- a/src/TurbulenceModels/compressible/compressibleTurbulenceModel.H
+++ b/src/TurbulenceModels/compressible/compressibleTurbulenceModel.H
@@ -123,6 +123,13 @@ public:
         //- Return the effective stress tensor including the laminar stress
         virtual tmp<volSymmTensorField> devRhoReff() const = 0;
 
+        //- Return the effective stress tensor including
+        //- the laminar stress based on a given velocity field
+        virtual tmp<volSymmTensorField> devRhoReff
+        (
+            const volVectorField& U
+        ) const = 0;
+
         //- Return the source term for the momentum equation
         virtual tmp<fvVectorMatrix> divDevRhoReff(volVectorField& U) const = 0;
 
diff --git a/src/TurbulenceModels/incompressible/IncompressibleTurbulenceModel/IncompressibleTurbulenceModel.C b/src/TurbulenceModels/incompressible/IncompressibleTurbulenceModel/IncompressibleTurbulenceModel.C
index 56c7381703f..c5f860ef496 100644
--- a/src/TurbulenceModels/incompressible/IncompressibleTurbulenceModel/IncompressibleTurbulenceModel.C
+++ b/src/TurbulenceModels/incompressible/IncompressibleTurbulenceModel/IncompressibleTurbulenceModel.C
@@ -107,6 +107,17 @@ Foam::IncompressibleTurbulenceModel<TransportModel>::devReff() const
 }
 
 
+template<class TransportModel>
+Foam::tmp<Foam::volSymmTensorField>
+Foam::IncompressibleTurbulenceModel<TransportModel>::devReff
+(
+    const volVectorField& U
+) const
+{
+    return devRhoReff(U);
+}
+
+
 template<class TransportModel>
 Foam::tmp<Foam::fvVectorMatrix>
 Foam::IncompressibleTurbulenceModel<TransportModel>::divDevReff
@@ -128,6 +139,19 @@ Foam::IncompressibleTurbulenceModel<TransportModel>::devRhoReff() const
 }
 
 
+template<class TransportModel>
+Foam::tmp<Foam::volSymmTensorField>
+Foam::IncompressibleTurbulenceModel<TransportModel>::devRhoReff
+(
+    const volVectorField& U
+) const
+{
+    NotImplemented;
+
+    return devReff(U);
+}
+
+
 template<class TransportModel>
 Foam::tmp<Foam::fvVectorMatrix>
 Foam::IncompressibleTurbulenceModel<TransportModel>::divDevRhoReff
diff --git a/src/TurbulenceModels/incompressible/IncompressibleTurbulenceModel/IncompressibleTurbulenceModel.H b/src/TurbulenceModels/incompressible/IncompressibleTurbulenceModel/IncompressibleTurbulenceModel.H
index 9734d732b09..291fc37eb8c 100644
--- a/src/TurbulenceModels/incompressible/IncompressibleTurbulenceModel/IncompressibleTurbulenceModel.H
+++ b/src/TurbulenceModels/incompressible/IncompressibleTurbulenceModel/IncompressibleTurbulenceModel.H
@@ -108,12 +108,24 @@ public:
         //- Return the effective stress tensor
         virtual tmp<volSymmTensorField> devReff() const;
 
+        //- Return the effective stress tensor based on a given velocity field
+        virtual tmp<volSymmTensorField> devReff
+        (
+            const volVectorField& U
+        ) const;
+
         //- Return the source term for the momentum equation
         virtual tmp<fvVectorMatrix> divDevReff(volVectorField& U) const;
 
         //- Return the effective stress tensor
         virtual tmp<volSymmTensorField> devRhoReff() const;
 
+        //- Return the effective stress tensor based on a given velocity field
+        virtual tmp<volSymmTensorField> devRhoReff
+        (
+            const volVectorField& U
+        ) const;
+
         //- Return the source term for the momentum equation
         virtual tmp<fvVectorMatrix> divDevRhoReff(volVectorField& U) const;
 
diff --git a/src/TurbulenceModels/incompressible/incompressibleRhoTurbulenceModel.H b/src/TurbulenceModels/incompressible/incompressibleRhoTurbulenceModel.H
index 14715b344ee..b3dee1ed3bd 100644
--- a/src/TurbulenceModels/incompressible/incompressibleRhoTurbulenceModel.H
+++ b/src/TurbulenceModels/incompressible/incompressibleRhoTurbulenceModel.H
@@ -139,6 +139,13 @@ public:
         //- Return the effective stress tensor including the laminar stress
         virtual tmp<volSymmTensorField> devReff() const = 0;
 
+        //- Return the effective stress tensor including
+        //- the laminar stress based on a given velocity field
+        virtual tmp<volSymmTensorField> devReff
+        (
+            const volVectorField& U
+        ) const = 0;
+
         //- Return the source term for the momentum equation
         virtual tmp<fvVectorMatrix> divDevReff(volVectorField& U) const = 0;
 };
diff --git a/src/TurbulenceModels/incompressible/incompressibleTurbulenceModel.H b/src/TurbulenceModels/incompressible/incompressibleTurbulenceModel.H
index adb8438702f..5578a510818 100644
--- a/src/TurbulenceModels/incompressible/incompressibleTurbulenceModel.H
+++ b/src/TurbulenceModels/incompressible/incompressibleTurbulenceModel.H
@@ -138,6 +138,13 @@ public:
         //- Return the effective stress tensor including the laminar stress
         virtual tmp<volSymmTensorField> devReff() const = 0;
 
+        //- Return the effective stress tensor including
+        //- the laminar stress based on a given velocity field
+        virtual tmp<volSymmTensorField> devReff
+        (
+            const volVectorField& U
+        ) const = 0;
+
         //- Return the source term for the momentum equation
         virtual tmp<fvVectorMatrix> divDevReff(volVectorField& U) const = 0;
 };
diff --git a/src/TurbulenceModels/phaseIncompressible/PhaseIncompressibleTurbulenceModel/PhaseIncompressibleTurbulenceModel.C b/src/TurbulenceModels/phaseIncompressible/PhaseIncompressibleTurbulenceModel/PhaseIncompressibleTurbulenceModel.C
index 137c92a0373..e6530a4f089 100644
--- a/src/TurbulenceModels/phaseIncompressible/PhaseIncompressibleTurbulenceModel/PhaseIncompressibleTurbulenceModel.C
+++ b/src/TurbulenceModels/phaseIncompressible/PhaseIncompressibleTurbulenceModel/PhaseIncompressibleTurbulenceModel.C
@@ -150,6 +150,17 @@ Foam::PhaseIncompressibleTurbulenceModel<TransportModel>::devReff() const
 }
 
 
+template<class TransportModel>
+Foam::tmp<Foam::volSymmTensorField>
+Foam::PhaseIncompressibleTurbulenceModel<TransportModel>::devReff
+(
+    const volVectorField& U
+) const
+{
+    return devRhoReff(U);
+}
+
+
 template<class TransportModel>
 Foam::tmp<Foam::fvVectorMatrix>
 Foam::PhaseIncompressibleTurbulenceModel<TransportModel>::divDevReff
@@ -171,6 +182,19 @@ Foam::PhaseIncompressibleTurbulenceModel<TransportModel>::devRhoReff() const
 }
 
 
+template<class TransportModel>
+Foam::tmp<Foam::volSymmTensorField>
+Foam::PhaseIncompressibleTurbulenceModel<TransportModel>::devRhoReff
+(
+    const volVectorField& U
+) const
+{
+    NotImplemented;
+
+    return devReff(U);
+}
+
+
 template<class TransportModel>
 Foam::tmp<Foam::fvVectorMatrix>
 Foam::PhaseIncompressibleTurbulenceModel<TransportModel>::divDevRhoReff
diff --git a/src/TurbulenceModels/phaseIncompressible/PhaseIncompressibleTurbulenceModel/PhaseIncompressibleTurbulenceModel.H b/src/TurbulenceModels/phaseIncompressible/PhaseIncompressibleTurbulenceModel/PhaseIncompressibleTurbulenceModel.H
index b25692493e1..cebba9df4fe 100644
--- a/src/TurbulenceModels/phaseIncompressible/PhaseIncompressibleTurbulenceModel/PhaseIncompressibleTurbulenceModel.H
+++ b/src/TurbulenceModels/phaseIncompressible/PhaseIncompressibleTurbulenceModel/PhaseIncompressibleTurbulenceModel.H
@@ -117,12 +117,24 @@ public:
         //- Return the effective stress tensor
         virtual tmp<volSymmTensorField> devReff() const;
 
+        //- Return the effective stress tensor based on a given velocity field
+        virtual tmp<volSymmTensorField> devReff
+        (
+            const volVectorField& U
+        ) const;
+
         //- Return the source term for the momentum equation
         virtual tmp<fvVectorMatrix> divDevReff(volVectorField& U) const;
 
         //- Return the effective stress tensor
         virtual tmp<volSymmTensorField> devRhoReff() const;
 
+        //- Return the effective stress tensor based on a given velocity field
+        virtual tmp<volSymmTensorField> devRhoReff
+        (
+            const volVectorField& U
+        ) const;
+
         //- Return the source term for the momentum equation
         virtual tmp<fvVectorMatrix> divDevRhoReff(volVectorField& U) const;
 };
diff --git a/src/TurbulenceModels/turbulenceModels/ReynoldsStress/ReynoldsStress.C b/src/TurbulenceModels/turbulenceModels/ReynoldsStress/ReynoldsStress.C
index dcf05d0a576..a3a7b42d622 100644
--- a/src/TurbulenceModels/turbulenceModels/ReynoldsStress/ReynoldsStress.C
+++ b/src/TurbulenceModels/turbulenceModels/ReynoldsStress/ReynoldsStress.C
@@ -208,6 +208,17 @@ Foam::ReynoldsStress<BasicTurbulenceModel>::k() const
 template<class BasicTurbulenceModel>
 Foam::tmp<Foam::volSymmTensorField>
 Foam::ReynoldsStress<BasicTurbulenceModel>::devRhoReff() const
+{
+    return devRhoReff(this->U_);
+}
+
+
+template<class BasicTurbulenceModel>
+Foam::tmp<Foam::volSymmTensorField>
+Foam::ReynoldsStress<BasicTurbulenceModel>::devRhoReff
+(
+    const volVectorField& U
+) const
 {
     return tmp<volSymmTensorField>
     (
@@ -223,7 +234,7 @@ Foam::ReynoldsStress<BasicTurbulenceModel>::devRhoReff() const
             ),
             this->alpha_*this->rho_*R_
           - (this->alpha_*this->rho_*this->nu())
-           *dev(twoSymm(fvc::grad(this->U_)))
+           *dev(twoSymm(fvc::grad(U)))
         )
     );
 }
diff --git a/src/TurbulenceModels/turbulenceModels/ReynoldsStress/ReynoldsStress.H b/src/TurbulenceModels/turbulenceModels/ReynoldsStress/ReynoldsStress.H
index 371d1ecb52c..612cc610474 100644
--- a/src/TurbulenceModels/turbulenceModels/ReynoldsStress/ReynoldsStress.H
+++ b/src/TurbulenceModels/turbulenceModels/ReynoldsStress/ReynoldsStress.H
@@ -140,6 +140,12 @@ public:
         //- Return the effective stress tensor
         virtual tmp<volSymmTensorField> devRhoReff() const;
 
+        //- Return the effective stress tensor based on a given velocity field
+        virtual tmp<volSymmTensorField> devRhoReff
+        (
+            const volVectorField& U
+        ) const;
+
         //- Return the source term for the momentum equation
         virtual tmp<fvVectorMatrix> divDevRhoReff(volVectorField& U) const;
 
diff --git a/src/TurbulenceModels/turbulenceModels/laminar/Maxwell/Maxwell.C b/src/TurbulenceModels/turbulenceModels/laminar/Maxwell/Maxwell.C
index ed314a944be..6c03e0eb008 100644
--- a/src/TurbulenceModels/turbulenceModels/laminar/Maxwell/Maxwell.C
+++ b/src/TurbulenceModels/turbulenceModels/laminar/Maxwell/Maxwell.C
@@ -104,6 +104,7 @@ bool Maxwell<BasicTurbulenceModel>::read()
     return false;
 }
 
+
 template<class BasicTurbulenceModel>
 tmp<Foam::volSymmTensorField>
 Maxwell<BasicTurbulenceModel>::R() const
@@ -111,9 +112,18 @@ Maxwell<BasicTurbulenceModel>::R() const
     return sigma_;
 }
 
+
 template<class BasicTurbulenceModel>
 tmp<Foam::volSymmTensorField>
 Maxwell<BasicTurbulenceModel>::devRhoReff() const
+{
+    return devRhoReff(this->U_);
+}
+
+
+template<class BasicTurbulenceModel>
+tmp<Foam::volSymmTensorField>
+Maxwell<BasicTurbulenceModel>::devRhoReff(const volVectorField& U) const
 {
     return tmp<volSymmTensorField>
     (
@@ -129,7 +139,7 @@ Maxwell<BasicTurbulenceModel>::devRhoReff() const
             ),
             this->alpha_*this->rho_*sigma_
           - (this->alpha_*this->rho_*this->nu())
-           *dev(twoSymm(fvc::grad(this->U_)))
+           *dev(twoSymm(fvc::grad(U)))
         )
     );
 }
diff --git a/src/TurbulenceModels/turbulenceModels/laminar/Maxwell/Maxwell.H b/src/TurbulenceModels/turbulenceModels/laminar/Maxwell/Maxwell.H
index 1f3ce3c6863..d446622fa41 100644
--- a/src/TurbulenceModels/turbulenceModels/laminar/Maxwell/Maxwell.H
+++ b/src/TurbulenceModels/turbulenceModels/laminar/Maxwell/Maxwell.H
@@ -143,6 +143,12 @@ public:
         //- Return the effective stress tensor
         virtual tmp<volSymmTensorField> devRhoReff() const;
 
+        //- Return the effective stress tensor based on a given velocity field
+        virtual tmp<volSymmTensorField> devRhoReff
+        (
+            const volVectorField& U
+        ) const;
+
         //- Return the source term for the momentum equation
         virtual tmp<fvVectorMatrix> divDevRhoReff(volVectorField& U) const;
 
diff --git a/src/TurbulenceModels/turbulenceModels/linearViscousStress/linearViscousStress.C b/src/TurbulenceModels/turbulenceModels/linearViscousStress/linearViscousStress.C
index e6515388ca1..b71797502ba 100644
--- a/src/TurbulenceModels/turbulenceModels/linearViscousStress/linearViscousStress.C
+++ b/src/TurbulenceModels/turbulenceModels/linearViscousStress/linearViscousStress.C
@@ -70,6 +70,17 @@ bool Foam::linearViscousStress<BasicTurbulenceModel>::read()
 template<class BasicTurbulenceModel>
 Foam::tmp<Foam::volSymmTensorField>
 Foam::linearViscousStress<BasicTurbulenceModel>::devRhoReff() const
+{
+    return devRhoReff(this->U_);
+}
+
+
+template<class BasicTurbulenceModel>
+Foam::tmp<Foam::volSymmTensorField>
+Foam::linearViscousStress<BasicTurbulenceModel>::devRhoReff
+(
+    const volVectorField& U
+) const
 {
     return tmp<volSymmTensorField>
     (
@@ -84,7 +95,7 @@ Foam::linearViscousStress<BasicTurbulenceModel>::devRhoReff() const
                 IOobject::NO_WRITE
             ),
             (-(this->alpha_*this->rho_*this->nuEff()))
-           *dev(twoSymm(fvc::grad(this->U_)))
+           *dev(twoSymm(fvc::grad(U)))
         )
     );
 }
diff --git a/src/TurbulenceModels/turbulenceModels/linearViscousStress/linearViscousStress.H b/src/TurbulenceModels/turbulenceModels/linearViscousStress/linearViscousStress.H
index 3c81b7227e8..c307c6268c4 100644
--- a/src/TurbulenceModels/turbulenceModels/linearViscousStress/linearViscousStress.H
+++ b/src/TurbulenceModels/turbulenceModels/linearViscousStress/linearViscousStress.H
@@ -91,6 +91,12 @@ public:
         //- Return the effective stress tensor
         virtual tmp<volSymmTensorField> devRhoReff() const;
 
+        //- Return the effective stress tensor based on a given velocity field
+        virtual tmp<volSymmTensorField> devRhoReff
+        (
+            const volVectorField& U
+        ) const;
+
         //- Return the source term for the momentum equation
         virtual tmp<fvVectorMatrix> divDevRhoReff(volVectorField& U) const;
 
diff --git a/src/TurbulenceModels/turbulenceModels/nonlinearEddyViscosity/nonlinearEddyViscosity.C b/src/TurbulenceModels/turbulenceModels/nonlinearEddyViscosity/nonlinearEddyViscosity.C
index d92488a662f..699fa25e7b8 100644
--- a/src/TurbulenceModels/turbulenceModels/nonlinearEddyViscosity/nonlinearEddyViscosity.C
+++ b/src/TurbulenceModels/turbulenceModels/nonlinearEddyViscosity/nonlinearEddyViscosity.C
@@ -88,12 +88,24 @@ Foam::nonlinearEddyViscosity<BasicTurbulenceModel>::R() const
 template<class BasicTurbulenceModel>
 Foam::tmp<Foam::volSymmTensorField>
 Foam::nonlinearEddyViscosity<BasicTurbulenceModel>::devRhoReff() const
+{
+    return devRhoReff(this->U_);
+}
+
+
+template<class BasicTurbulenceModel>
+Foam::tmp<Foam::volSymmTensorField>
+Foam::nonlinearEddyViscosity<BasicTurbulenceModel>::devRhoReff
+(
+    const volVectorField& U
+) const
 {
     tmp<volSymmTensorField> tdevRhoReff
     (
-        eddyViscosity<BasicTurbulenceModel>::devRhoReff()
+        eddyViscosity<BasicTurbulenceModel>::devRhoReff(U)
     );
     tdevRhoReff.ref() += this->rho_*nonlinearStress_;
+
     return tdevRhoReff;
 }
 
diff --git a/src/TurbulenceModels/turbulenceModels/nonlinearEddyViscosity/nonlinearEddyViscosity.H b/src/TurbulenceModels/turbulenceModels/nonlinearEddyViscosity/nonlinearEddyViscosity.H
index 2d97c5ba70b..be6f16c6f63 100644
--- a/src/TurbulenceModels/turbulenceModels/nonlinearEddyViscosity/nonlinearEddyViscosity.H
+++ b/src/TurbulenceModels/turbulenceModels/nonlinearEddyViscosity/nonlinearEddyViscosity.H
@@ -107,6 +107,12 @@ public:
         //- Return the effective stress tensor
         virtual tmp<volSymmTensorField> devRhoReff() const;
 
+        //- Return the effective stress tensor based on a given velocity field
+        virtual tmp<volSymmTensorField> devRhoReff
+        (
+            const volVectorField& U
+        ) const;
+
         //- Return the source term for the momentum equation
         virtual tmp<fvVectorMatrix> divDevRhoReff(volVectorField& U) const;
 
diff --git a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/adjointLaminar/adjointLaminar.C b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/adjointLaminar/adjointLaminar.C
index 7bed329b68c..d79320f848a 100644
--- a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/adjointLaminar/adjointLaminar.C
+++ b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/adjointLaminar/adjointLaminar.C
@@ -71,6 +71,15 @@ adjointLaminar::adjointLaminar
 tmp<volSymmTensorField> adjointLaminar::devReff() const
 {
     const volVectorField& Ua = adjointVars_.Ua();
+    return devReff(Ua);
+}
+
+
+tmp<volSymmTensorField> adjointLaminar::devReff
+(
+    const volVectorField& U
+) const
+{
     return tmp<volSymmTensorField>
     (
         new volSymmTensorField
@@ -83,7 +92,7 @@ tmp<volSymmTensorField> adjointLaminar::devReff() const
                 IOobject::NO_READ,
                 IOobject::NO_WRITE
             ),
-           -nu()*dev(twoSymm(fvc::grad(Ua)))
+           -nu()*dev(twoSymm(fvc::grad(U)))
         )
     );
 }
diff --git a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/adjointLaminar/adjointLaminar.H b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/adjointLaminar/adjointLaminar.H
index e0e155e5fd2..51a52df5d6f 100644
--- a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/adjointLaminar/adjointLaminar.H
+++ b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/adjointLaminar/adjointLaminar.H
@@ -100,6 +100,12 @@ public:
         //- Return the effective stress tensor, i.e. the adjointLaminar stress
         virtual tmp<volSymmTensorField> devReff() const;
 
+        //- Return the effective stress tensor based on a given velocity field
+        virtual tmp<volSymmTensorField> devReff
+        (
+            const volVectorField& U
+        ) const;
+
         //- Return the diffusion term for the momentum equation
         virtual tmp<fvVectorMatrix> divDevReff(volVectorField& U) const;
 
diff --git a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/adjointRASModel/adjointRASModel.H b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/adjointRASModel/adjointRASModel.H
index 4b654311ae3..6abd7931441 100644
--- a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/adjointRASModel/adjointRASModel.H
+++ b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/adjointRASModel/adjointRASModel.H
@@ -261,6 +261,12 @@ public:
         //- Return the effective stress tensor including the laminar stress
         virtual tmp<volSymmTensorField> devReff() const = 0;
 
+        //- Return the effective stress tensor based on a given velocity field
+        virtual tmp<volSymmTensorField> devReff
+        (
+            const volVectorField& U
+        ) const = 0;
+
         //- Return the diffusion term for the momentum equation
         virtual tmp<fvVectorMatrix> divDevReff(volVectorField& U) const = 0;
 
diff --git a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/adjointSpalartAllmaras/adjointSpalartAllmaras.C b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/adjointSpalartAllmaras/adjointSpalartAllmaras.C
index 073ea69ffde..78783498227 100644
--- a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/adjointSpalartAllmaras/adjointSpalartAllmaras.C
+++ b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/adjointSpalartAllmaras/adjointSpalartAllmaras.C
@@ -703,7 +703,17 @@ adjointSpalartAllmaras::adjointSpalartAllmaras
 tmp<volSymmTensorField> adjointSpalartAllmaras::devReff() const
 {
     const volVectorField& Ua = adjointVars_.UaInst();
-    return tmp<volSymmTensorField>::New
+    return devReff(Ua);
+}
+
+
+tmp<volSymmTensorField> adjointSpalartAllmaras::devReff
+(
+    const volVectorField& U
+) const
+{
+    return
+        tmp<volSymmTensorField>::New
         (
             IOobject
             (
@@ -713,7 +723,7 @@ tmp<volSymmTensorField> adjointSpalartAllmaras::devReff() const
                 IOobject::NO_READ,
                 IOobject::NO_WRITE
             ),
-           -nuEff()*dev(twoSymm(fvc::grad(Ua)))
+           -nuEff()*dev(twoSymm(fvc::grad(U)))
         );
 }
 
diff --git a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/adjointSpalartAllmaras/adjointSpalartAllmaras.H b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/adjointSpalartAllmaras/adjointSpalartAllmaras.H
index 6404c0169b0..91606032411 100644
--- a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/adjointSpalartAllmaras/adjointSpalartAllmaras.H
+++ b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/adjointSpalartAllmaras/adjointSpalartAllmaras.H
@@ -317,6 +317,8 @@ public:
 
         virtual tmp<volSymmTensorField> devReff() const;
 
+        virtual tmp<volSymmTensorField> devReff(const volVectorField& U) const;
+
         virtual tmp<fvVectorMatrix> divDevReff(volVectorField& U) const;
 
         virtual tmp<volVectorField> adjointMeanFlowSource();
diff --git a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointTurbulenceModel/adjointTurbulenceModel.H b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointTurbulenceModel/adjointTurbulenceModel.H
index 93d4b673eaa..e7039465e53 100644
--- a/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointTurbulenceModel/adjointTurbulenceModel.H
+++ b/src/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointTurbulenceModel/adjointTurbulenceModel.H
@@ -186,6 +186,12 @@ public:
         //- Return the effective stress tensor including the laminar stress
         virtual tmp<volSymmTensorField> devReff() const = 0;
 
+        //- Return the effective stress tensor based on a given velocity field
+        virtual tmp<volSymmTensorField> devReff
+        (
+            const volVectorField& U
+        ) const = 0;
+
         //- Return the diffusion term for the momentum equation
         virtual tmp<fvVectorMatrix> divDevReff(volVectorField& U) const = 0;
 
diff --git a/src/phaseSystemModels/reactingEuler/twoPhaseCompressibleTurbulenceModels/kineticTheoryModels/kineticTheoryModel/kineticTheoryModel.C b/src/phaseSystemModels/reactingEuler/twoPhaseCompressibleTurbulenceModels/kineticTheoryModels/kineticTheoryModel/kineticTheoryModel.C
index f2831ad3d88..25572bfb3c9 100644
--- a/src/phaseSystemModels/reactingEuler/twoPhaseCompressibleTurbulenceModels/kineticTheoryModels/kineticTheoryModel/kineticTheoryModel.C
+++ b/src/phaseSystemModels/reactingEuler/twoPhaseCompressibleTurbulenceModels/kineticTheoryModels/kineticTheoryModel/kineticTheoryModel.C
@@ -311,6 +311,16 @@ Foam::RASModels::kineticTheoryModel::pPrimef() const
 
 Foam::tmp<Foam::volSymmTensorField>
 Foam::RASModels::kineticTheoryModel::devRhoReff() const
+{
+    return devRhoReff(U_);
+}
+
+
+Foam::tmp<Foam::volSymmTensorField>
+Foam::RASModels::kineticTheoryModel::devRhoReff
+(
+    const volVectorField& U
+) const
 {
     return tmp<volSymmTensorField>
     (
@@ -318,14 +328,14 @@ Foam::RASModels::kineticTheoryModel::devRhoReff() const
         (
             IOobject
             (
-                IOobject::groupName("devRhoReff", U_.group()),
+                IOobject::groupName("devRhoReff", U.group()),
                 runTime_.timeName(),
                 mesh_,
                 IOobject::NO_READ,
                 IOobject::NO_WRITE
             ),
           - (rho_*nut_)
-           *dev(twoSymm(fvc::grad(U_)))
+           *dev(twoSymm(fvc::grad(U)))
           - ((rho_*lambda_)*fvc::div(phi_))*symmTensor::I
         )
     );
diff --git a/src/phaseSystemModels/reactingEuler/twoPhaseCompressibleTurbulenceModels/kineticTheoryModels/kineticTheoryModel/kineticTheoryModel.H b/src/phaseSystemModels/reactingEuler/twoPhaseCompressibleTurbulenceModels/kineticTheoryModels/kineticTheoryModel/kineticTheoryModel.H
index aa18a9c3903..6bec967ed79 100644
--- a/src/phaseSystemModels/reactingEuler/twoPhaseCompressibleTurbulenceModels/kineticTheoryModels/kineticTheoryModel/kineticTheoryModel.H
+++ b/src/phaseSystemModels/reactingEuler/twoPhaseCompressibleTurbulenceModels/kineticTheoryModels/kineticTheoryModel/kineticTheoryModel.H
@@ -223,6 +223,12 @@ public:
         //- Return the effective stress tensor
         virtual tmp<volSymmTensorField> devRhoReff() const;
 
+        //- Return the effective stress tensor based on a given velocity field
+        virtual tmp<volSymmTensorField> devRhoReff
+        (
+            const volVectorField& U
+        ) const;
+
         //- Return the source term for the momentum equation
         virtual tmp<fvVectorMatrix> divDevRhoReff(volVectorField& U) const;
 
diff --git a/src/phaseSystemModels/reactingEuler/twoPhaseCompressibleTurbulenceModels/phasePressureModel/phasePressureModel.C b/src/phaseSystemModels/reactingEuler/twoPhaseCompressibleTurbulenceModels/phasePressureModel/phasePressureModel.C
index 1b29db5e4d4..bf6fbd3316d 100644
--- a/src/phaseSystemModels/reactingEuler/twoPhaseCompressibleTurbulenceModels/phasePressureModel/phasePressureModel.C
+++ b/src/phaseSystemModels/reactingEuler/twoPhaseCompressibleTurbulenceModels/phasePressureModel/phasePressureModel.C
@@ -200,6 +200,16 @@ Foam::RASModels::phasePressureModel::pPrimef() const
 
 Foam::tmp<Foam::volSymmTensorField>
 Foam::RASModels::phasePressureModel::devRhoReff() const
+{
+    return devRhoReff(U_);
+}
+
+
+Foam::tmp<Foam::volSymmTensorField>
+Foam::RASModels::phasePressureModel::devRhoReff
+(
+    const volVectorField& U
+) const
 {
     return tmp<volSymmTensorField>
     (
@@ -207,7 +217,7 @@ Foam::RASModels::phasePressureModel::devRhoReff() const
         (
             IOobject
             (
-                IOobject::groupName("devRhoReff", U_.group()),
+                IOobject::groupName("devRhoReff", U.group()),
                 runTime_.timeName(),
                 mesh_,
                 IOobject::NO_READ,
diff --git a/src/phaseSystemModels/reactingEuler/twoPhaseCompressibleTurbulenceModels/phasePressureModel/phasePressureModel.H b/src/phaseSystemModels/reactingEuler/twoPhaseCompressibleTurbulenceModels/phasePressureModel/phasePressureModel.H
index d9c41e8f3df..5cde6bea3f5 100644
--- a/src/phaseSystemModels/reactingEuler/twoPhaseCompressibleTurbulenceModels/phasePressureModel/phasePressureModel.H
+++ b/src/phaseSystemModels/reactingEuler/twoPhaseCompressibleTurbulenceModels/phasePressureModel/phasePressureModel.H
@@ -174,6 +174,12 @@ public:
         //- Return the effective stress tensor
         virtual tmp<volSymmTensorField> devRhoReff() const;
 
+        //- Return the effective stress tensor based on a given velocity field
+        virtual tmp<volSymmTensorField> devRhoReff
+        (
+            const volVectorField& U
+        ) const;
+
         //- Return the source term for the momentum equation
         virtual tmp<fvVectorMatrix> divDevRhoReff(volVectorField& U) const;
 
diff --git a/src/phaseSystemModels/twoPhaseEuler/phaseCompressibleTurbulenceModels/kineticTheoryModels/kineticTheoryModel/kineticTheoryModel.C b/src/phaseSystemModels/twoPhaseEuler/phaseCompressibleTurbulenceModels/kineticTheoryModels/kineticTheoryModel/kineticTheoryModel.C
index 588a310b1ab..bca4b784428 100644
--- a/src/phaseSystemModels/twoPhaseEuler/phaseCompressibleTurbulenceModels/kineticTheoryModels/kineticTheoryModel/kineticTheoryModel.C
+++ b/src/phaseSystemModels/twoPhaseEuler/phaseCompressibleTurbulenceModels/kineticTheoryModels/kineticTheoryModel/kineticTheoryModel.C
@@ -311,6 +311,16 @@ Foam::RASModels::kineticTheoryModel::pPrimef() const
 
 Foam::tmp<Foam::volSymmTensorField>
 Foam::RASModels::kineticTheoryModel::devRhoReff() const
+{
+    return devRhoReff(U_);
+}
+
+
+Foam::tmp<Foam::volSymmTensorField>
+Foam::RASModels::kineticTheoryModel::devRhoReff
+(
+    const volVectorField& U
+) const
 {
     return tmp<volSymmTensorField>
     (
@@ -318,14 +328,14 @@ Foam::RASModels::kineticTheoryModel::devRhoReff() const
         (
             IOobject
             (
-                IOobject::groupName("devRhoReff", U_.group()),
+                IOobject::groupName("devRhoReff", U.group()),
                 runTime_.timeName(),
                 mesh_,
                 IOobject::NO_READ,
                 IOobject::NO_WRITE
             ),
           - (rho_*nut_)
-           *dev(twoSymm(fvc::grad(U_)))
+           *dev(twoSymm(fvc::grad(U)))
           - ((rho_*lambda_)*fvc::div(phi_))*symmTensor::I
         )
     );
diff --git a/src/phaseSystemModels/twoPhaseEuler/phaseCompressibleTurbulenceModels/kineticTheoryModels/kineticTheoryModel/kineticTheoryModel.H b/src/phaseSystemModels/twoPhaseEuler/phaseCompressibleTurbulenceModels/kineticTheoryModels/kineticTheoryModel/kineticTheoryModel.H
index a9180f6afd3..2d5b2c14022 100644
--- a/src/phaseSystemModels/twoPhaseEuler/phaseCompressibleTurbulenceModels/kineticTheoryModels/kineticTheoryModel/kineticTheoryModel.H
+++ b/src/phaseSystemModels/twoPhaseEuler/phaseCompressibleTurbulenceModels/kineticTheoryModels/kineticTheoryModel/kineticTheoryModel.H
@@ -223,6 +223,12 @@ public:
         //- Return the effective stress tensor
         virtual tmp<volSymmTensorField> devRhoReff() const;
 
+        //- Return the effective stress tensor based on a given velocity field
+        virtual tmp<volSymmTensorField> devRhoReff
+        (
+            const volVectorField& U
+        ) const;
+
         //- Return the source term for the momentum equation
         virtual tmp<fvVectorMatrix> divDevRhoReff(volVectorField& U) const;
 
diff --git a/src/phaseSystemModels/twoPhaseEuler/phaseCompressibleTurbulenceModels/phasePressureModel/phasePressureModel.C b/src/phaseSystemModels/twoPhaseEuler/phaseCompressibleTurbulenceModels/phasePressureModel/phasePressureModel.C
index f20ed8a6334..42fa6cfbac5 100644
--- a/src/phaseSystemModels/twoPhaseEuler/phaseCompressibleTurbulenceModels/phasePressureModel/phasePressureModel.C
+++ b/src/phaseSystemModels/twoPhaseEuler/phaseCompressibleTurbulenceModels/phasePressureModel/phasePressureModel.C
@@ -203,12 +203,22 @@ Foam::RASModels::phasePressureModel::pPrimef() const
 
 Foam::tmp<Foam::volSymmTensorField>
 Foam::RASModels::phasePressureModel::devRhoReff() const
+{
+    return devRhoReff(U_);
+}
+
+
+Foam::tmp<Foam::volSymmTensorField>
+Foam::RASModels::phasePressureModel::devRhoReff
+(
+    const volVectorField& U
+) const
 {
     return tmp<volSymmTensorField>::New
     (
         IOobject
         (
-            IOobject::groupName("devRhoReff", U_.group()),
+            IOobject::groupName("devRhoReff", U.group()),
             runTime_.timeName(),
             mesh_,
             IOobject::NO_READ,
diff --git a/src/phaseSystemModels/twoPhaseEuler/phaseCompressibleTurbulenceModels/phasePressureModel/phasePressureModel.H b/src/phaseSystemModels/twoPhaseEuler/phaseCompressibleTurbulenceModels/phasePressureModel/phasePressureModel.H
index fa54e84afe2..84c9502a7d8 100644
--- a/src/phaseSystemModels/twoPhaseEuler/phaseCompressibleTurbulenceModels/phasePressureModel/phasePressureModel.H
+++ b/src/phaseSystemModels/twoPhaseEuler/phaseCompressibleTurbulenceModels/phasePressureModel/phasePressureModel.H
@@ -178,6 +178,12 @@ public:
         //- Return the effective stress tensor
         virtual tmp<volSymmTensorField> devRhoReff() const;
 
+        //- Return the effective stress tensor based on a given velocity field
+        virtual tmp<volSymmTensorField> devRhoReff
+        (
+            const volVectorField& U
+        ) const;
+
         //- Return the source term for the momentum equation
         virtual tmp<fvVectorMatrix> divDevRhoReff(volVectorField& U) const;
 
-- 
GitLab