From 1d8010fc8cf581e2bef00d65ff5d19e03da2d206 Mon Sep 17 00:00:00 2001 From: andy Date: Wed, 27 May 2009 14:49:18 +0100 Subject: [PATCH] added new family of injection models --- .../makeBasicKinematicParcelInjectionModels.C | 7 + .../makeBasicReactingParcelInjectionModels.C | 7 + .../makeBasicThermoParcelInjectionModels.C | 7 + .../KinematicLookupTableInjection.C | 231 +++++++++++++++ .../KinematicLookupTableInjection.H | 194 +++++++++++++ .../ReactingLookupTableInjection.C | 263 ++++++++++++++++++ .../ReactingLookupTableInjection.H | 205 ++++++++++++++ .../ThermoLookupTableInjection.C | 243 ++++++++++++++++ .../ThermoLookupTableInjection.H | 202 ++++++++++++++ 9 files changed, 1359 insertions(+) create mode 100644 src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/KinematicLookupTableInjection/KinematicLookupTableInjection.C create mode 100644 src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/KinematicLookupTableInjection/KinematicLookupTableInjection.H create mode 100644 src/lagrangian/intermediate/submodels/Reacting/InjectionModel/ReactingLookupTableInjection/ReactingLookupTableInjection.C create mode 100644 src/lagrangian/intermediate/submodels/Reacting/InjectionModel/ReactingLookupTableInjection/ReactingLookupTableInjection.H create mode 100644 src/lagrangian/intermediate/submodels/Thermodynamic/InjectionModel/ThermoLookupTableInjection/ThermoLookupTableInjection.C create mode 100644 src/lagrangian/intermediate/submodels/Thermodynamic/InjectionModel/ThermoLookupTableInjection/ThermoLookupTableInjection.H diff --git a/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/submodels/makeBasicKinematicParcelInjectionModels.C b/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/submodels/makeBasicKinematicParcelInjectionModels.C index 272ea3e06d..9c406339f5 100644 --- a/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/submodels/makeBasicKinematicParcelInjectionModels.C +++ b/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/submodels/makeBasicKinematicParcelInjectionModels.C @@ -29,6 +29,7 @@ License #include "ConeInjection.H" #include "FieldActivatedInjection.H" +#include "KinematicLookupTableInjection.H" #include "ManualInjection.H" #include "NoInjection.H" @@ -52,6 +53,12 @@ namespace Foam basicKinematicParcel ); makeInjectionModelType + ( + KinematicLookupTableInjection, + KinematicCloud, + basicKinematicParcel + ); + makeInjectionModelType ( ManualInjection, KinematicCloud, diff --git a/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/submodels/makeBasicReactingParcelInjectionModels.C b/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/submodels/makeBasicReactingParcelInjectionModels.C index 4ed4e7894a..28355e9f67 100644 --- a/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/submodels/makeBasicReactingParcelInjectionModels.C +++ b/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/submodels/makeBasicReactingParcelInjectionModels.C @@ -31,6 +31,7 @@ License #include "FieldActivatedInjection.H" #include "ManualInjection.H" #include "NoInjection.H" +#include "ReactingLookupTableInjection.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -63,6 +64,12 @@ namespace Foam KinematicCloud, basicReactingParcel ); + makeInjectionModelType + ( + ReactingLookupTableInjection, + KinematicCloud, + basicReactingParcel + ); }; diff --git a/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/submodels/makeBasicThermoParcelInjectionModels.C b/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/submodels/makeBasicThermoParcelInjectionModels.C index 2bf6f2e1b3..2635b23937 100644 --- a/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/submodels/makeBasicThermoParcelInjectionModels.C +++ b/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/submodels/makeBasicThermoParcelInjectionModels.C @@ -31,6 +31,7 @@ License #include "FieldActivatedInjection.H" #include "ManualInjection.H" #include "NoInjection.H" +#include "ThermoLookupTableInjection.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -64,6 +65,12 @@ namespace Foam KinematicCloud, basicThermoParcel ); + makeInjectionModelType + ( + ThermoLookupTableInjection, + KinematicCloud, + basicThermoParcel + ); }; diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/KinematicLookupTableInjection/KinematicLookupTableInjection.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/KinematicLookupTableInjection/KinematicLookupTableInjection.C new file mode 100644 index 0000000000..7461225b51 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/KinematicLookupTableInjection/KinematicLookupTableInjection.C @@ -0,0 +1,231 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "KinematicLookupTableInjection.H" +#include "scalarIOList.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +template +Foam::label Foam::KinematicLookupTableInjection::INPUT_FILE_COLS = 9; + +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + +template +Foam::label Foam::KinematicLookupTableInjection::parcelsToInject +( + const scalar time0, + const scalar time1 +) const +{ + if ((time0 >= 0.0) && (time0 < duration_)) + { + return round(injectorCells_.size()*(time1 - time0)*nParcelsPerSecond_); + } + else + { + return 0; + } +} + + +template +Foam::scalar Foam::KinematicLookupTableInjection::volumeToInject +( + const scalar time0, + const scalar time1 +) const +{ + scalar volume = 0.0; + if ((time0 >= 0.0) && (time0 < duration_)) + { + forAll(mDot_, injectorI) + { + volume += mDot_[injectorI]/rho_[injectorI]*(time1 - time0); + } + } + + return volume; +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template +Foam::KinematicLookupTableInjection::KinematicLookupTableInjection +( + const dictionary& dict, + CloudType& owner +) +: + InjectionModel(dict, owner, typeName), + inputFileName_(this->coeffDict().lookup("inputFile")), + duration_(readScalar(this->coeffDict().lookup("duration"))), + nParcelsPerSecond_ + ( + readScalar(this->coeffDict().lookup("parcelsPerSecond")) + ), + x_(0), + U_(0), + d_(0), + rho_(0), + mDot_(0), + injectorCells_(0) +{ + scalarListIOList injectorData + ( + IOobject + ( + inputFileName_, + owner.db().time().constant(), + owner.db(), + IOobject::MUST_READ, + IOobject::NO_WRITE + ) + ); + + x_.setSize(injectorData.size()); + U_.setSize(injectorData.size()); + d_.setSize(injectorData.size()); + rho_.setSize(injectorData.size()); + mDot_.setSize(injectorData.size()); + + // Populate lists + forAll(injectorData, injectorI) + { + if (injectorData[injectorI].size() != INPUT_FILE_COLS) + { + FatalErrorIn + ( + "KinematicLookupTableInjection" + "(" + "const dictionary&," + "CloudType& owner" + ")" + ) << "Incorrect number of entries in injector specification " + << "- found " << injectorData[injectorI].size() + << ", expected " << INPUT_FILE_COLS << ":" << nl + << " x0 x1 x2 u0 u1 u2 d rho mDot " << nl + << exit(FatalError); + } + x_[injectorI].component(0) = injectorData[injectorI][0]; + x_[injectorI].component(1) = injectorData[injectorI][1]; + x_[injectorI].component(2) = injectorData[injectorI][2]; + U_[injectorI].component(0) = injectorData[injectorI][3]; + U_[injectorI].component(1) = injectorData[injectorI][4]; + U_[injectorI].component(2) = injectorData[injectorI][5]; + d_[injectorI] = injectorData[injectorI][6]; + rho_[injectorI] = injectorData[injectorI][7]; + mDot_[injectorI] = injectorData[injectorI][8]; + } + + // Set/cache the injector cells + injectorCells_.setSize(injectorData.size()); + forAll(x_, injectorI) + { + this->findCellAtPosition(injectorCells_[injectorI], x_[injectorI]); + } + + // Determine volume of particles to inject + this->volumeTotal_ = 0.0; + forAll(mDot_, injectorI) + { + this->volumeTotal_ += mDot_[injectorI]/rho_[injectorI]; + } + this->volumeTotal_ *= duration_; +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template +Foam::KinematicLookupTableInjection::~KinematicLookupTableInjection() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template +bool Foam::KinematicLookupTableInjection::active() const +{ + return true; +} + + +template +Foam::scalar Foam::KinematicLookupTableInjection::timeEnd() const +{ + return this->SOI_ + duration_; +} + + +template +void Foam::KinematicLookupTableInjection::setPositionAndCell +( + const label parcelI, + const label nParcels, + const scalar time, + vector& position, + label& cellOwner +) +{ + label injectorI = parcelI*injectorCells_.size()/nParcels; + + position = x_[injectorI]; + cellOwner = injectorCells_[injectorI]; +} + + +template +void Foam::KinematicLookupTableInjection::setProperties +( + const label parcelI, + const label nParcels, + const scalar, + typename CloudType::parcelType* pPtr +) +{ + label injectorI = parcelI*injectorCells_.size()/nParcels; + + // set particle velocity + pPtr->U() = U_[injectorI]; + + // set particle diameter + pPtr->d() = d_[injectorI]; + + // set particle density + pPtr->rho() = rho_[injectorI]; +} + + +template +bool Foam::KinematicLookupTableInjection::validInjection(const label) +{ + return true; +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/KinematicLookupTableInjection/KinematicLookupTableInjection.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/KinematicLookupTableInjection/KinematicLookupTableInjection.H new file mode 100644 index 0000000000..77aad11bc4 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/KinematicLookupTableInjection/KinematicLookupTableInjection.H @@ -0,0 +1,194 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::KinematicLookupTableInjection + +Description + Particle injection sources read from look-up table. Each row corresponds to + an injection site. + + ( + (x y z u v w d rho mDot) + ); + + where: + x, y, z = global cartesian co-ordinates [m] + u, v, w = global cartesian velocity components [m/s] + d = diameter [m] + rho = density [kg/m3] + mDot = mass flow rate [kg/m3] + +SourceFiles + KinematicLookupTableInjection.C + +\*---------------------------------------------------------------------------*/ + +#ifndef KinematicLookupTableInjection_H +#define KinematicLookupTableInjection_H + +#include "InjectionModel.H" +#include "pdf.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class KinematicLookupTableInjection Declaration +\*---------------------------------------------------------------------------*/ + +template +class KinematicLookupTableInjection +: + public InjectionModel +{ + // Private data + + //- Name of file containing injector/parcel data + const word inputFileName_; + + //- Injection duration - common to all injection sources + const scalar duration_; + + //- Number of parcels per injector - common to all injection sources + const label nParcelsPerSecond_; + + //- List of parcel position per injector / [m] + List x_; + + //- List of parcel velocity per injector / [m] + List U_; + + //- List of parcel diameter per injector / [m] + List d_; + + //- List of parcel fluid density pre injector / [kg/m3] + List rho_; + + //- List of parcel injection mass flow per injector / [kg/s] + List mDot_; + + //- List of injector cells per injector + List