From 4e6ec7d20d743139f3e940a0a86f8711e16e6f09 Mon Sep 17 00:00:00 2001
From: Henry Weller <http://cfd.direct>
Date: Thu, 11 Aug 2016 15:15:45 +0100
Subject: [PATCH] functionObjects::specieReactionRates: Added volRegion support

Now the specie reaction rates may be averaged over the entire domain or
a specified cellZone.
---
 .../specieReactionRates/specieReactionRates.C | 27 ++++++++++++++++---
 .../specieReactionRates/specieReactionRates.H |  3 +++
 2 files changed, 26 insertions(+), 4 deletions(-)

diff --git a/src/thermophysicalModels/chemistryModel/functionObjects/specieReactionRates/specieReactionRates.C b/src/thermophysicalModels/chemistryModel/functionObjects/specieReactionRates/specieReactionRates.C
index 5c141767714..b1d5ea6699c 100644
--- a/src/thermophysicalModels/chemistryModel/functionObjects/specieReactionRates/specieReactionRates.C
+++ b/src/thermophysicalModels/chemistryModel/functionObjects/specieReactionRates/specieReactionRates.C
@@ -37,6 +37,7 @@ writeFileHeader
 )
 {
     writeHeader(file(), "Specie reaction rates");
+    volRegion::writeFileHeader(*this, file());
     writeHeaderValue(file(), "nSpecie", chemistryModel_.nSpecie());
     writeHeaderValue(file(), "nReaction", chemistryModel_.nReaction());
 
@@ -67,10 +68,14 @@ specieReactionRates
 )
 :
     fvMeshFunctionObject(name, runTime, dict),
+    volRegion(fvMeshFunctionObject::mesh_, dict),
     logFiles(obr_, name),
     chemistryModel_
     (
-        mesh_.lookupObject<ChemistryModelType>("chemistryProperties")
+        fvMeshFunctionObject::mesh_.lookupObject<ChemistryModelType>
+        (
+            "chemistryProperties"
+        )
     )
 {
     resetName("specieReactionRates");
@@ -114,8 +119,8 @@ bool Foam::functionObjects::specieReactionRates<ChemistryModelType>::write()
     const label nSpecie = chemistryModel_.nSpecie();
     const label nReaction = chemistryModel_.nReaction();
 
-    // Domain volume
-    const scalar V = gSum(mesh_.V());
+    // Region volume
+    const scalar V = this->V();
 
     for (label ri=0; ri<nReaction; ri++)
     {
@@ -132,9 +137,23 @@ bool Foam::functionObjects::specieReactionRates<ChemistryModelType>::write()
                 chemistryModel_.calculateRR(ri, si)
             );
 
+            scalar sumVRRi = 0;
+
+            if (isNull(cellIDs()))
+            {
+                sumVRRi = fvc::domainIntegrate(RR).value();
+            }
+            else
+            {
+                sumVRRi = gSum
+                (
+                    scalarField(fvMeshFunctionObject::mesh_.V()*RR, cellIDs())
+                );
+            }
+
             if (Pstream::master())
             {
-                file() << token::TAB << fvc::domainIntegrate(RR).value()/V;
+                file() << token::TAB << sumVRRi/V;
             }
         }
 
diff --git a/src/thermophysicalModels/chemistryModel/functionObjects/specieReactionRates/specieReactionRates.H b/src/thermophysicalModels/chemistryModel/functionObjects/specieReactionRates/specieReactionRates.H
index 65bd9645535..176c6be18b9 100644
--- a/src/thermophysicalModels/chemistryModel/functionObjects/specieReactionRates/specieReactionRates.H
+++ b/src/thermophysicalModels/chemistryModel/functionObjects/specieReactionRates/specieReactionRates.H
@@ -33,6 +33,7 @@ Description
 
 See also
     Foam::functionObjects::fvMeshFunctionObject
+    Foam::functionObjects::volRegion
     Foam::functionObjects::logFiles
 
 SourceFiles
@@ -44,6 +45,7 @@ SourceFiles
 #define functionObjects_specieReactionRates_H
 
 #include "fvMeshFunctionObject.H"
+#include "volRegion.H"
 #include "logFiles.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -61,6 +63,7 @@ template<class ChemistryModelType>
 class specieReactionRates
 :
     public fvMeshFunctionObject,
+    public volRegion,
     public logFiles
 {
     // Private Member Data
-- 
GitLab