From 7c3d2ec15eaf88998cbf61ac014617029f8f0018 Mon Sep 17 00:00:00 2001
From: andy <andy>
Date: Fri, 23 Aug 2013 14:19:32 +0100
Subject: [PATCH] ENH: Updated R utility to include compressible cases

---
 .../postProcessing/turbulence/R/Make/options  |  18 ++-
 .../utilities/postProcessing/turbulence/R/R.C | 137 ++++++++++++++++--
 .../turbulence/R/createFields.H               |  22 ---
 3 files changed, 133 insertions(+), 44 deletions(-)
 delete mode 100644 applications/utilities/postProcessing/turbulence/R/createFields.H

diff --git a/applications/utilities/postProcessing/turbulence/R/Make/options b/applications/utilities/postProcessing/turbulence/R/Make/options
index a136b166617..27b70cae0a7 100644
--- a/applications/utilities/postProcessing/turbulence/R/Make/options
+++ b/applications/utilities/postProcessing/turbulence/R/Make/options
@@ -1,13 +1,19 @@
 EXE_INC = \
-    -I$(LIB_SRC)/postProcessing/postCalc \
-    -I$(LIB_SRC)/turbulenceModels \
-    -I$(LIB_SRC)/turbulenceModels/incompressible/RAS/RASModel \
+    -I$(LIB_SRC)/meshTools/lnInclude \
     -I$(LIB_SRC)/transportModels \
+    -I$(LIB_SRC)/turbulenceModels \
+    -I$(LIB_SRC)/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions \
+    -I$(LIB_SRC)/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions \
+    -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
     -I$(LIB_SRC)/finiteVolume/lnInclude
 
 EXE_LIBS = \
-    $(FOAM_LIBBIN)/postCalc.o \
-    -lincompressibleRASModels \
     -lincompressibleTransportModels \
+    -lincompressibleRASModels \
+    -lfluidThermophysicalModels \
+    -lspecie \
+    -lcompressibleRASModels \
     -lfiniteVolume \
-    -lgenericPatchFields
+    -lgenericPatchFields \
+    -lmeshTools \
+    -lsampling
diff --git a/applications/utilities/postProcessing/turbulence/R/R.C b/applications/utilities/postProcessing/turbulence/R/R.C
index b96bb03947c..708cda72141 100644
--- a/applications/utilities/postProcessing/turbulence/R/R.C
+++ b/applications/utilities/postProcessing/turbulence/R/R.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -29,35 +29,140 @@ Description
 
 \*---------------------------------------------------------------------------*/
 
-#include "calc.H"
 #include "fvCFD.H"
 #include "incompressible/singlePhaseTransportModel/singlePhaseTransportModel.H"
-#include "RASModel.H"
+#include "incompressible/turbulenceModel/turbulenceModel.H"
+
+#include "fluidThermo.H"
+#include "compressible/turbulenceModel/turbulenceModel.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
-void Foam::calc(const argList& args, const Time& runTime, const fvMesh& mesh)
+void calcIncompressibleR
+(
+    const fvMesh& mesh,
+    const Time& runTime,
+    const volVectorField& U
+)
+{
+    #include "createPhi.H"
+
+    singlePhaseTransportModel laminarTransport(U, phi);
+
+    autoPtr<incompressible::turbulenceModel> model
+    (
+        incompressible::turbulenceModel::New(U, phi, laminarTransport)
+    );
+
+    Info<< "Writing R field" << nl << endl;
+
+    model->R()().write();
+}
+
+
+void calcCompressibleR
+(
+    const fvMesh& mesh,
+    const Time& runTime,
+    const volVectorField& U
+)
 {
-    #include "createFields.H"
+    IOobject rhoHeader
+    (
+        "rho",
+        runTime.timeName(),
+        mesh,
+        IOobject::MUST_READ,
+        IOobject::NO_WRITE
+    );
+
+    if (!rhoHeader.headerOk())
+    {
+        Info<< "    no " << rhoHeader.name() <<" field" << endl;
+        return;
+    }
 
-    Info<< "\nCalculating the Reynolds Stress R\n" << endl;
+    Info<< "Reading field rho\n" << endl;
+    volScalarField rho(rhoHeader, mesh);
 
-    volSymmTensorField R
+    #include "compressibleCreatePhi.H"
+
+    autoPtr<fluidThermo> pThermo(fluidThermo::New(mesh));
+    fluidThermo& thermo = pThermo();
+
+    autoPtr<compressible::turbulenceModel> model
     (
-        IOobject
+        compressible::turbulenceModel::New
         (
-            "R",
+            rho,
+            U,
+            phi,
+            thermo
+        )
+    );
+
+    Info<< "Writing R field" << nl << endl;
+
+    model->R()().write();
+}
+
+
+int main(int argc, char *argv[])
+{
+    timeSelector::addOptions();
+
+    #include "addRegionOption.H"
+
+    argList::addBoolOption
+    (
+        "compressible",
+        "calculate compressible R"
+    );
+
+    #include "setRootCase.H"
+    #include "createTime.H"
+    instantList timeDirs = timeSelector::select0(runTime, args);
+    #include "createNamedMesh.H"
+
+    const bool compressible = args.optionFound("compressible");
+
+    forAll(timeDirs, timeI)
+    {
+        runTime.setTime(timeDirs[timeI], timeI);
+        Info<< "Time = " << runTime.timeName() << endl;
+
+        IOobject UHeader
+        (
+            "U",
             runTime.timeName(),
             mesh,
-            IOobject::NO_READ,
-            IOobject::AUTO_WRITE
-        ),
-        RASModel->R()
-    );
+            IOobject::MUST_READ,
+            IOobject::NO_WRITE
+        );
+
+        if (UHeader.headerOk())
+        {
+            Info<< "Reading field " << UHeader.name() << nl << endl;
+            volVectorField U(UHeader, mesh);
+
+            if (compressible)
+            {
+                calcCompressibleR(mesh, runTime, U);
+            }
+            else
+            {
+                calcIncompressibleR(mesh, runTime, U);
+            }
+        }
+        else
+        {
+            Info<< "    no " << UHeader.name() << " field" << endl;
+        }
+    }
 
-    R.write();
+    Info<< "End\n" << endl;
 
-    Info<< "End" << endl;
+    return 0;
 }
 
 
diff --git a/applications/utilities/postProcessing/turbulence/R/createFields.H b/applications/utilities/postProcessing/turbulence/R/createFields.H
deleted file mode 100644
index 7c07f44f8bf..00000000000
--- a/applications/utilities/postProcessing/turbulence/R/createFields.H
+++ /dev/null
@@ -1,22 +0,0 @@
-    Info<< "Reading field U\n" << endl;
-    volVectorField U
-    (
-        IOobject
-        (
-            "U",
-            runTime.timeName(),
-            mesh,
-            IOobject::MUST_READ,
-            IOobject::AUTO_WRITE
-        ),
-        mesh
-    );
-
-    #include "createPhi.H"
-
-    singlePhaseTransportModel laminarTransport(U, phi);
-
-    autoPtr<incompressible::RASModel> RASModel
-    (
-        incompressible::RASModel::New(U, phi, laminarTransport)
-    );
-- 
GitLab