From a870be6511ad9c66881d4deb643be30548f4f392 Mon Sep 17 00:00:00 2001
From: Kutalmis Bercin <kutalmis.bercin@esi-group.com>
Date: Mon, 7 Jun 2021 13:37:25 +0100
Subject: [PATCH] BUG: forces: ensure UName entry can be used (fixes #2093)

Previously, for basic incompressible and compressible simulations,
the "force" function object has not been using the user-specified "UName"
for the "devRhoReff" computation (affecting the tangential component),
but using the "U" of the latest available step. In contrast,
the user-specified "pName" has always been being used correctly.

This has been causing issues for users when they wish to use a specific
"UMean" field in various force and forceCoeff function object computations.
---
 src/functionObjects/forces/forces/forces.C | 12 ++++--------
 1 file changed, 4 insertions(+), 8 deletions(-)

diff --git a/src/functionObjects/forces/forces/forces.C b/src/functionObjects/forces/forces/forces.C
index e3dbc07f1f9..70a34aba187 100644
--- a/src/functionObjects/forces/forces/forces.C
+++ b/src/functionObjects/forces/forces/forces.C
@@ -350,27 +350,27 @@ Foam::functionObjects::forces::devRhoReff() const
     typedef compressible::turbulenceModel cmpTurbModel;
     typedef incompressible::turbulenceModel icoTurbModel;
 
+    const auto& U = lookupObject<volVectorField>(UName_);
+
     if (foundObject<cmpTurbModel>(cmpTurbModel::propertiesName))
     {
         const cmpTurbModel& turb =
             lookupObject<cmpTurbModel>(cmpTurbModel::propertiesName);
 
-        return turb.devRhoReff();
+        return turb.devRhoReff(U);
     }
     else if (foundObject<icoTurbModel>(icoTurbModel::propertiesName))
     {
         const incompressible::turbulenceModel& turb =
             lookupObject<icoTurbModel>(icoTurbModel::propertiesName);
 
-        return rho()*turb.devReff();
+        return rho()*turb.devReff(U);
     }
     else if (foundObject<fluidThermo>(fluidThermo::dictName))
     {
         const fluidThermo& thermo =
             lookupObject<fluidThermo>(fluidThermo::dictName);
 
-        const volVectorField& U = lookupObject<volVectorField>(UName_);
-
         return -thermo.mu()*dev(twoSymm(fvc::grad(U)));
     }
     else if (foundObject<transportModel>("transportProperties"))
@@ -378,8 +378,6 @@ Foam::functionObjects::forces::devRhoReff() const
         const transportModel& laminarT =
             lookupObject<transportModel>("transportProperties");
 
-        const volVectorField& U = lookupObject<volVectorField>(UName_);
-
         return -rho()*laminarT.nu()*dev(twoSymm(fvc::grad(U)));
     }
     else if (foundObject<dictionary>("transportProperties"))
@@ -389,8 +387,6 @@ Foam::functionObjects::forces::devRhoReff() const
 
         dimensionedScalar nu("nu", dimViscosity, transportProperties);
 
-        const volVectorField& U = lookupObject<volVectorField>(UName_);
-
         return -rho()*nu*dev(twoSymm(fvc::grad(U)));
     }
     else
-- 
GitLab