From 7c235371ff6e0ddabd746d48c27f15bf7ba5d432 Mon Sep 17 00:00:00 2001
From: Andrew Heather <>
Date: Mon, 12 Dec 2022 11:56:46 +0000
Subject: [PATCH] ENH: ConeNozzleInjection - added  option to include an
 angular velocity (rad/s)

Specified using the optional 'omega' entry (Function1 type), e.g. for a constant
value:

      omega           12.56;

Note that the swirl contribution is applied in addition to the velocity set by
the 'flowType' option. For example, for the 'constantVelocity' option, parcels
are initially set the velocity according to the UMag and direction/cone angle;
the swirl velocity is then added.
---
 .../ConeNozzleInjection/ConeNozzleInjection.C | 28 +++++++++++++++++++
 .../ConeNozzleInjection/ConeNozzleInjection.H |  3 ++
 2 files changed, 31 insertions(+)

diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeNozzleInjection/ConeNozzleInjection.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeNozzleInjection/ConeNozzleInjection.C
index 3b468bbd063..951bb484edf 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeNozzleInjection/ConeNozzleInjection.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeNozzleInjection/ConeNozzleInjection.C
@@ -186,6 +186,7 @@ Foam::ConeNozzleInjection<CloudType>::ConeNozzleInjection
     tetPti_(-1),
     directionVsTime_(nullptr),
     direction_(Zero),
+    omegaPtr_(nullptr),
     parcelsPerSecond_(this->coeffDict().getScalar("parcelsPerSecond")),
     flowRateProfile_
     (
@@ -246,6 +247,19 @@ Foam::ConeNozzleInjection<CloudType>::ConeNozzleInjection
     thetaInner_->userTimeToTime(time);
     thetaOuter_->userTimeToTime(time);
 
+    if (this->coeffDict().found("omega"))
+    {
+        omegaPtr_ =
+            Function1<scalar>::New
+            (
+                "omega",
+                this->coeffDict(),
+                &owner.mesh()
+            );
+
+        omegaPtr_->userTimeToTime(time);
+    }
+
     setInjectionGeometry();
 
     setFlowType();
@@ -277,6 +291,7 @@ Foam::ConeNozzleInjection<CloudType>::ConeNozzleInjection
     tetPti_(im.tetPti_),
     directionVsTime_(im.directionVsTime_.clone()),
     direction_(im.direction_),
+    omegaPtr_(im.omegaPtr_.clone()),
     parcelsPerSecond_(im.parcelsPerSecond_),
     flowRateProfile_(im.flowRateProfile_.clone()),
     thetaInner_(im.thetaInner_.clone()),
@@ -505,6 +520,19 @@ void Foam::ConeNozzleInjection<CloudType>::setProperties
         }
     }
 
+    if (omegaPtr_)
+    {
+        const scalar omega = omegaPtr_->value(t);
+
+        const vector p0(parcel.position() - positionVsTime_->value(t));
+        const vector r(p0 - (p0 & direction_)*direction_);
+        const scalar rMag = mag(r);
+
+        const vector d = normalised(normal_ ^ dirVec);
+
+        parcel.U() += omega*rMag*d;
+    }
+
     // Set particle diameter
     parcel.d() = sizeDistribution_->sample();
 }
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeNozzleInjection/ConeNozzleInjection.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeNozzleInjection/ConeNozzleInjection.H
index 606a9e5a6b4..bd03d0771e0 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeNozzleInjection/ConeNozzleInjection.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeNozzleInjection/ConeNozzleInjection.H
@@ -153,6 +153,9 @@ private:
         //- Cached direction vector
         vector direction_;
 
+        //- Swirl velocity (optional)
+        autoPtr<Function1<scalar>> omegaPtr_;
+
         //- Number of parcels to introduce per second []
         const label parcelsPerSecond_;
 
-- 
GitLab