From 0d2fd7886484f7cc471972f6279944ac0f092abb Mon Sep 17 00:00:00 2001 From: Will Bainbridge Date: Thu, 11 May 2023 14:28:33 +0100 Subject: [PATCH] lagrangian: InjectionModel: New uniformParcelSize control Lagrangian injections now have a 'uniformParcelSize' control, which specifies what size of the parcels is kept uniform during a given time step. This control can be set to 'nParticles', 'surfaceArea' or 'volume'. The particle sizes, by contrast, are specified by the size distribution. For example, if 'uniformParcelSize nParticles;' is specified then all parcels introduced at a given time will have the same number of particles. Every particle in a parcel has the same properties, including diameter. So, in this configuration, the larger diameter parcels contain a much larger fraction of the total particulate volume than the smaller diameter ones. This may be undesirable as the effect of a parcel on the simulation might be more in proportion with its volume than with the number of particles it represents. It might be preferable to create a greater proportion of large diameter parcels so that their more significant effect is represented by a finer Lagrangian discretisation. This can be achieved by setting 'uniformParcelSize volume;'. A setting of 'uniformParcelSize surfaceArea;' might be appropriate if the limiting effect of a Lagrangian element scales with its surface area; interfacial evaporation, for example. Previously, this control was provided by 'parcelBasisType'. However, this control also effectively specified the size exponent of the supplied distribution. This interdependence was not documented and was problematic in that it coupled physical and numerical controls. 'parcelBasisType' has been removed, and the size exponent of the distribution is now specified independently of the new 'uniformParcelSize' control along with the rest of the distribution coefficients or data. See the previous commit for details. It is still possible to specify a fixed number of particles per parcel using the 'nParticle' control. The presence of this control is used to determine whether or not the number of particles per parcel is fixed, so a 'fixed' basis type is no longer needed. A number of bugs have been fixed with regards to lack of interoperability between the various settings in the injection models. 'uniformParcelSize' can be changed freely and the number of parcels and amount of mass that an injector introduces will not change (this was not true of 'parcelBasisType'). Redundant settings are no longer read by the injection models; e.g., mass is not read if the number of particles per parcel is fixed, duration is not specified for steady tracking, etc... The 'inflationInjection' model has been removed as there are no examples of its usage, its purpose was not clearly documented, and it was not obvious how it should be updated as a result of these changes. --- .../modules/isothermalFilm/Make/options | 1 - src/Allwmake | 1 - src/lagrangian/Allwmake | 1 - src/lagrangian/distributionModels/Make/files | 13 - .../distributionModels/Make/options | 1 - .../RosinRammler/RosinRammler.C | 104 --- .../RosinRammler/RosinRammler.H | 128 --- .../distributionModel/distributionModel.C | 97 --- .../distributionModel/distributionModel.H | 160 ---- .../exponential/exponential.C | 101 --- .../exponential/exponential.H | 119 --- .../fixedValue/fixedValue.C | 94 --- .../distributionModels/general/general.C | 228 ------ .../distributionModels/general/general.H | 139 ---- .../massRosinRammler/massRosinRammler.C | 115 --- .../massRosinRammler/massRosinRammler.H | 141 ---- .../multiNormal/multiNormal.C | 162 ---- .../multiNormal/multiNormal.H | 129 --- .../distributionModels/normal/normal.C | 129 --- .../distributionModels/normal/normal.H | 131 --- .../distributionModels/uniform/uniform.C | 97 --- .../distributionModels/uniform/uniform.H | 114 --- src/lagrangian/parcel/Make/files | 3 + src/lagrangian/parcel/Make/options | 2 - .../Templates/MomentumCloud/MomentumCloud.C | 2 +- .../Templates/MomentumCloud/MomentumCloud.H | 4 +- .../Templates/ReactingCloud/ReactingCloud.C | 11 +- .../Templates/ReactingCloud/ReactingCloud.H | 4 +- .../ReactingMultiphaseCloud.C | 10 +- .../ReactingMultiphaseCloud.H | 4 +- .../clouds/Templates/SprayCloud/SprayCloud.C | 12 +- .../clouds/Templates/SprayCloud/SprayCloud.H | 5 +- .../Templates/ThermoCloud/ThermoCloud.C | 6 +- .../Templates/ThermoCloud/ThermoCloud.H | 7 +- .../ReactingMultiphaseParcel.C | 5 +- .../ReactingMultiphaseParcel.H | 14 +- .../ReactingMultiphaseParcelI.H | 20 +- .../ReactingMultiphaseParcelIO.C | 47 +- .../Templates/ReactingParcel/ReactingParcel.C | 3 +- .../Templates/ReactingParcel/ReactingParcel.H | 14 +- .../ReactingParcel/ReactingParcelI.H | 20 +- .../ReactingParcel/ReactingParcelIO.C | 46 +- .../Templates/SprayParcel/SprayParcel.C | 17 +- .../Templates/SprayParcel/SprayParcel.H | 31 +- .../Templates/SprayParcel/SprayParcelI.H | 40 +- .../Templates/SprayParcel/SprayParcelIO.C | 38 +- .../include/makeParcelInjectionModels.H | 4 +- ...eReactingMultiphaseParcelInjectionModels.H | 3 +- .../makeReactingParcelInjectionModels.H | 3 +- .../include/makeSprayParcelInjectionModels.H | 4 +- .../include/makeThermoParcelInjectionModels.H | 3 +- .../CellZoneInjection/CellZoneInjection.C | 33 +- .../CellZoneInjection/CellZoneInjection.H | 21 +- .../ConeInjection/ConeInjection.C | 44 +- .../ConeInjection/ConeInjection.H | 25 +- .../FieldActivatedInjection.C | 66 +- .../FieldActivatedInjection.H | 24 +- .../InflationInjection/InflationInjection.C | 488 ----------- .../InflationInjection/InflationInjection.H | 209 ----- .../InjectionModel/InjectionModel.C | 755 +++++++++++------- .../InjectionModel/InjectionModel.H | 101 +-- .../InjectionModel/InjectionModelI.H | 16 +- .../InjectionModel/InjectionModelList.C | 35 +- .../InjectionModel/InjectionModelList.H | 8 +- .../InjectionModel/injectionModel.C} | 39 +- .../InjectionModel/injectionModel.H} | 72 +- .../ManualInjection/ManualInjection.C | 32 +- .../ManualInjection/ManualInjection.H | 21 +- .../MomentumLookupTableInjection.C | 39 +- .../MomentumLookupTableInjection.H | 16 +- .../InjectionModel/NoInjection/NoInjection.C | 19 +- .../InjectionModel/NoInjection/NoInjection.H | 14 +- .../PatchFlowRateInjection.C | 50 +- .../PatchFlowRateInjection.H | 26 +- .../PatchInjection/PatchInjection.C | 49 +- .../PatchInjection/PatchInjection.H | 24 +- .../SurfaceFilmModel/SurfaceFilmModel.C | 2 +- .../ReactingLookupTableInjection.C | 36 +- .../ReactingLookupTableInjection.H | 15 +- .../ReactingMultiphaseLookupTableInjection.C | 39 +- .../ReactingMultiphaseLookupTableInjection.H | 14 +- .../LISAAtomisation/LISAAtomisation.C | 4 +- .../LISAAtomisation/LISAAtomisation.H | 3 +- .../BreakupModel/BreakupModel/BreakupModel.H | 3 +- .../submodels/Spray/BreakupModel/ETAB/ETAB.C | 3 +- .../submodels/Spray/BreakupModel/ETAB/ETAB.H | 3 +- .../Spray/BreakupModel/NoBreakup/NoBreakup.C | 3 +- .../Spray/BreakupModel/NoBreakup/NoBreakup.H | 3 +- .../BreakupModel/PilchErdman/PilchErdman.C | 3 +- .../BreakupModel/PilchErdman/PilchErdman.H | 3 +- .../BreakupModel/ReitzDiwakar/ReitzDiwakar.C | 3 +- .../BreakupModel/ReitzDiwakar/ReitzDiwakar.H | 3 +- .../Spray/BreakupModel/ReitzKHRT/ReitzKHRT.C | 12 +- .../Spray/BreakupModel/ReitzKHRT/ReitzKHRT.H | 3 +- .../submodels/Spray/BreakupModel/SHF/SHF.C | 3 +- .../submodels/Spray/BreakupModel/SHF/SHF.H | 3 +- .../submodels/Spray/BreakupModel/TAB/TAB.C | 3 +- .../submodels/Spray/BreakupModel/TAB/TAB.H | 3 +- .../ThermoLookupTableInjection.C | 36 +- .../ThermoLookupTableInjection.H | 15 +- src/lagrangian/parcelTurbulence/Make/options | 2 - src/surfaceFilmModels/Make/options | 2 - .../drippingEjection/drippingEjection.C | 7 +- .../drippingEjection/drippingEjection.H | 7 +- .../distributionContactAngleForce.C | 7 +- .../distributionContactAngleForce.H | 8 +- ...bedTemperatureDependentContactAngleForce.C | 7 +- ...bedTemperatureDependentContactAngleForce.H | 11 +- .../Goldschmidt/constant/cloudProperties | 9 +- .../GoldschmidtMPPIC/constant/cloudProperties | 9 +- .../column/constant/cloudProperties | 9 +- .../cyclone/constant/cloudProperties | 16 +- .../injectionChannel/constant/cloudProperties | 51 +- .../TJunction/constant/cloudProperties | 9 +- .../constant/cloudProperties | 9 +- .../constant/cloudProperties | 9 +- .../cylinder/constant/fluid/cloudProperties | 2 +- .../cylinderVoF/constant/VoF/cloudProperties | 2 +- .../constant/fluid/cloudProperties | 2 +- .../aachenBomb/constant/cloudProperties | 17 +- .../filter/constant/cloudProperties | 2 +- .../hotBoxes/constant/cloudProperties | 16 +- .../hotBoxes/constant/surfaceFilmProperties | 26 +- .../parcelInBox/constant/cloudProperties | 10 +- .../constant/coalCloudProperties | 16 +- .../constant/limestoneCloudProperties | 16 +- .../verticalChannel/constant/cloudProperties | 48 +- .../constant/cloudProperties | 49 +- .../constant/cloudProperties | 49 +- 129 files changed, 1179 insertions(+), 4279 deletions(-) delete mode 100644 src/lagrangian/distributionModels/Make/files delete mode 100644 src/lagrangian/distributionModels/Make/options delete mode 100644 src/lagrangian/distributionModels/RosinRammler/RosinRammler.C delete mode 100644 src/lagrangian/distributionModels/RosinRammler/RosinRammler.H delete mode 100644 src/lagrangian/distributionModels/distributionModel/distributionModel.C delete mode 100644 src/lagrangian/distributionModels/distributionModel/distributionModel.H delete mode 100644 src/lagrangian/distributionModels/exponential/exponential.C delete mode 100644 src/lagrangian/distributionModels/exponential/exponential.H delete mode 100644 src/lagrangian/distributionModels/fixedValue/fixedValue.C delete mode 100644 src/lagrangian/distributionModels/general/general.C delete mode 100644 src/lagrangian/distributionModels/general/general.H delete mode 100644 src/lagrangian/distributionModels/massRosinRammler/massRosinRammler.C delete mode 100644 src/lagrangian/distributionModels/massRosinRammler/massRosinRammler.H delete mode 100644 src/lagrangian/distributionModels/multiNormal/multiNormal.C delete mode 100644 src/lagrangian/distributionModels/multiNormal/multiNormal.H delete mode 100644 src/lagrangian/distributionModels/normal/normal.C delete mode 100644 src/lagrangian/distributionModels/normal/normal.H delete mode 100644 src/lagrangian/distributionModels/uniform/uniform.C delete mode 100644 src/lagrangian/distributionModels/uniform/uniform.H delete mode 100644 src/lagrangian/parcel/submodels/Momentum/InjectionModel/InflationInjection/InflationInjection.C delete mode 100644 src/lagrangian/parcel/submodels/Momentum/InjectionModel/InflationInjection/InflationInjection.H rename src/lagrangian/{distributionModels/distributionModel/distributionModelNew.C => parcel/submodels/Momentum/InjectionModel/InjectionModel/injectionModel.C} (57%) rename src/lagrangian/{distributionModels/fixedValue/fixedValue.H => parcel/submodels/Momentum/InjectionModel/InjectionModel/injectionModel.H} (57%) diff --git a/applications/solvers/modules/isothermalFilm/Make/options b/applications/solvers/modules/isothermalFilm/Make/options index a6e885b01c..0ba500e5a0 100644 --- a/applications/solvers/modules/isothermalFilm/Make/options +++ b/applications/solvers/modules/isothermalFilm/Make/options @@ -13,7 +13,6 @@ LIB_LIBS = \ -lmomentumTransportModels \ -lfilmCompressibleMomentumTransportModels \ -linterfaceProperties \ - -ldistributionModels \ -lfiniteVolume \ -lmeshTools \ -lsampling \ diff --git a/src/Allwmake b/src/Allwmake index edc53ccb82..300af5b91c 100755 --- a/src/Allwmake +++ b/src/Allwmake @@ -38,7 +38,6 @@ dummyThirdParty/Allwmake $targetType $* wmake $targetType finiteVolume wmake $targetType lagrangian/basic -wmake $targetType lagrangian/distributionModels wmake $targetType genericPatchFields wmake $targetType mesh/extrudeModel diff --git a/src/lagrangian/Allwmake b/src/lagrangian/Allwmake index 259c828900..a3d696d9b9 100755 --- a/src/lagrangian/Allwmake +++ b/src/lagrangian/Allwmake @@ -4,7 +4,6 @@ cd ${0%/*} || exit 1 # Run from this directory # Parse arguments for library compilation . $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments -wmake $targetType distributionModels wmake $targetType basic wmake $targetType solidParticle wmake $targetType parcel diff --git a/src/lagrangian/distributionModels/Make/files b/src/lagrangian/distributionModels/Make/files deleted file mode 100644 index aee429b06c..0000000000 --- a/src/lagrangian/distributionModels/Make/files +++ /dev/null @@ -1,13 +0,0 @@ -distributionModel/distributionModel.C -distributionModel/distributionModelNew.C - -exponential/exponential.C -fixedValue/fixedValue.C -general/general.C -multiNormal/multiNormal.C -normal/normal.C -RosinRammler/RosinRammler.C -massRosinRammler/massRosinRammler.C -uniform/uniform.C - -LIB = $(FOAM_LIBBIN)/libdistributionModels diff --git a/src/lagrangian/distributionModels/Make/options b/src/lagrangian/distributionModels/Make/options deleted file mode 100644 index 41306609f2..0000000000 --- a/src/lagrangian/distributionModels/Make/options +++ /dev/null @@ -1 +0,0 @@ -EXE_INC = diff --git a/src/lagrangian/distributionModels/RosinRammler/RosinRammler.C b/src/lagrangian/distributionModels/RosinRammler/RosinRammler.C deleted file mode 100644 index 5b004da62a..0000000000 --- a/src/lagrangian/distributionModels/RosinRammler/RosinRammler.C +++ /dev/null @@ -1,104 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2011-2020 OpenFOAM Foundation - \\/ 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 3 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, see . - -\*---------------------------------------------------------------------------*/ - -#include "RosinRammler.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -namespace Foam -{ -namespace distributionModels -{ - defineTypeNameAndDebug(RosinRammler, 0); - addToRunTimeSelectionTable(distributionModel, RosinRammler, dictionary); -} -} - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -Foam::distributionModels::RosinRammler::RosinRammler -( - const dictionary& dict, - Random& rndGen -) -: - distributionModel(typeName, dict, rndGen), - minValue_(distributionModelDict_.template lookup("minValue")), - maxValue_(distributionModelDict_.template lookup("maxValue")), - d_(distributionModelDict_.template lookup("d")), - n_(distributionModelDict_.template lookup("n")) -{ - check(); - info(); -} - - -Foam::distributionModels::RosinRammler::RosinRammler(const RosinRammler& p) -: - distributionModel(p), - minValue_(p.minValue_), - maxValue_(p.maxValue_), - d_(p.d_), - n_(p.n_) -{} - - -// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // - -Foam::distributionModels::RosinRammler::~RosinRammler() -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -Foam::scalar Foam::distributionModels::RosinRammler::sample() const -{ - const scalar minValueByDPowN = pow(minValue_/d_, n_); - const scalar K = 1 - exp(- pow(maxValue_/d_, n_) + minValueByDPowN); - const scalar y = rndGen_.sample01(); - return d_*pow(minValueByDPowN - log(1 - K*y), 1/n_); -} - - -Foam::scalar Foam::distributionModels::RosinRammler::minValue() const -{ - return minValue_; -} - - -Foam::scalar Foam::distributionModels::RosinRammler::maxValue() const -{ - return maxValue_; -} - - -Foam::scalar Foam::distributionModels::RosinRammler::meanValue() const -{ - return d_; -} - - -// ************************************************************************* // diff --git a/src/lagrangian/distributionModels/RosinRammler/RosinRammler.H b/src/lagrangian/distributionModels/RosinRammler/RosinRammler.H deleted file mode 100644 index e306a15b75..0000000000 --- a/src/lagrangian/distributionModels/RosinRammler/RosinRammler.H +++ /dev/null @@ -1,128 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2011-2020 OpenFOAM Foundation - \\/ 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 3 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, see . - -Class - Foam::distributionModels::RosinRammler - -Description - Rosin-Rammler distributionModel - - \f[ - CDF(x) = - (1 - exp(-(x/d)^n + (d_0/d)^n) - /(1 - exp(-(d_1/d)^n + (d_0/d)^n) - \f] - -SourceFiles - RosinRammler.C - -\*---------------------------------------------------------------------------*/ - -#ifndef RosinRammler_H -#define RosinRammler_H - -#include "distributionModel.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace distributionModels -{ - -/*---------------------------------------------------------------------------*\ - Class RosinRammler Declaration -\*---------------------------------------------------------------------------*/ - -class RosinRammler -: - public distributionModel -{ - // Private Data - - //- Distribution minimum - scalar minValue_; - - //- Distribution maximum - scalar maxValue_; - - // Model coefficients - - //- Scale parameter - scalar d_; - - //- Shape parameter - scalar n_; - - -public: - - //- Runtime type information - TypeName("RosinRammler"); - - - // Constructors - - //- Construct from components - RosinRammler(const dictionary& dict, Random& rndGen); - - //- Construct copy - RosinRammler(const RosinRammler& p); - - //- Construct and return a clone - virtual autoPtr clone() const - { - return autoPtr(new RosinRammler(*this)); - } - - - //- Destructor - virtual ~RosinRammler(); - - - // Member Functions - - //- Sample the distributionModel - virtual scalar sample() const; - - //- Return the minimum value - virtual scalar minValue() const; - - //- Return the maximum value - virtual scalar maxValue() const; - - //- Return the mean value - virtual scalar meanValue() const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace distributionModels -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/lagrangian/distributionModels/distributionModel/distributionModel.C b/src/lagrangian/distributionModels/distributionModel/distributionModel.C deleted file mode 100644 index 6367725c1d..0000000000 --- a/src/lagrangian/distributionModels/distributionModel/distributionModel.C +++ /dev/null @@ -1,97 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2011-2019 OpenFOAM Foundation - \\/ 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 3 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, see . - -\*---------------------------------------------------------------------------*/ - -#include "distributionModel.H" - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -namespace Foam -{ - defineTypeNameAndDebug(distributionModel, 0); - defineRunTimeSelectionTable(distributionModel, dictionary); -} - - -// * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * // - -void Foam::distributionModel::check() const -{ - if (minValue() < 0) - { - FatalErrorInFunction - << type() << "distribution: Minimum value must be greater than " - << "zero." << nl << "Supplied minValue = " << minValue() - << abort(FatalError); - } - - if (maxValue() < minValue()) - { - FatalErrorInFunction - << type() << "distribution: Maximum value is smaller than the " - << "minimum value:" << nl << " maxValue = " << maxValue() - << ", minValue = " << minValue() - << abort(FatalError); - } -} - - -void Foam::distributionModel::info() const -{ - Info<< " Distribution min: " << minValue() << " max: " << maxValue() - << " mean: " << meanValue() << endl; -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -Foam::distributionModel::distributionModel -( - const word& name, - const dictionary& dict, - Random& rndGen -) -: - distributionModelDict_(dict.subDict(name + "Distribution")), - rndGen_(rndGen) -{} - - -Foam::distributionModel::distributionModel -( - const distributionModel& p -) -: - distributionModelDict_(p.distributionModelDict_), - rndGen_(p.rndGen_) -{} - - -// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // - -Foam::distributionModel::~distributionModel() -{} - - -// ************************************************************************* // diff --git a/src/lagrangian/distributionModels/distributionModel/distributionModel.H b/src/lagrangian/distributionModels/distributionModel/distributionModel.H deleted file mode 100644 index d2431f2e51..0000000000 --- a/src/lagrangian/distributionModels/distributionModel/distributionModel.H +++ /dev/null @@ -1,160 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2011-2020 OpenFOAM Foundation - \\/ 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 3 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, see . - -Class - Foam::distributionModel - -Description - A library of runtime-selectable distribution models. - - Returns a sampled value given the expectation (nu) and variance (sigma^2) - - Current distribution models include: - - exponential - - fixedValue - - general - - multi-normal - - normal - - Rosin-Rammler - - Mass-based Rosin-Rammler - - uniform - -SourceFiles - distributionModel.C - distributionModelNew.C - -\*---------------------------------------------------------------------------*/ - -#ifndef distributionModel_H -#define distributionModel_H - -#include "IOdictionary.H" -#include "autoPtr.H" -#include "Random.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -/*---------------------------------------------------------------------------*\ - Class distributionModel Declaration -\*---------------------------------------------------------------------------*/ - -class distributionModel -{ - -protected: - - // Protected data - - //- Coefficients dictionary - const dictionary distributionModelDict_; - - //- Reference to the random number generator - Random& rndGen_; - - - // Protected Member Functions - - //- Check that the distribution model is valid - virtual void check() const; - - //- Print information about the distribution - void info() const; - - -public: - - //-Runtime type information - TypeName("distributionModel"); - - - //- Declare runtime constructor selection table - declareRunTimeSelectionTable - ( - autoPtr, - distributionModel, - dictionary, - ( - const dictionary& dict, - Random& rndGen - ), - (dict, rndGen) - ); - - - // Constructors - - //- Construct from dictionary - distributionModel - ( - const word& name, - const dictionary& dict, - Random& rndGen - ); - - //- Construct copy - distributionModel(const distributionModel& p); - - //- Construct and return a clone - virtual autoPtr clone() const = 0; - - - //- Selector - static autoPtr New - ( - const dictionary& dict, - Random& rndGen - ); - - - //- Destructor - virtual ~distributionModel(); - - - // Member Functions - - //- Sample the distributionModel - virtual scalar sample() const = 0; - - //- Return the minimum value - virtual scalar minValue() const = 0; - - //- Return the maximum value - virtual scalar maxValue() const = 0; - - //- Return the mean value - virtual scalar meanValue() const = 0; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/lagrangian/distributionModels/exponential/exponential.C b/src/lagrangian/distributionModels/exponential/exponential.C deleted file mode 100644 index 6b6efc0aba..0000000000 --- a/src/lagrangian/distributionModels/exponential/exponential.C +++ /dev/null @@ -1,101 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2011-2019 OpenFOAM Foundation - \\/ 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 3 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, see . - -\*---------------------------------------------------------------------------*/ - -#include "exponential.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -namespace Foam -{ -namespace distributionModels -{ - defineTypeNameAndDebug(exponential, 0); - addToRunTimeSelectionTable(distributionModel, exponential, dictionary); -} -} - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -Foam::distributionModels::exponential::exponential -( - const dictionary& dict, - Random& rndGen -) -: - distributionModel(typeName, dict, rndGen), - minValue_(distributionModelDict_.template lookup("minValue")), - maxValue_(distributionModelDict_.template lookup("maxValue")), - lambda_(distributionModelDict_.template lookup("lambda")) -{ - check(); - info(); -} - - -Foam::distributionModels::exponential::exponential(const exponential& p) -: - distributionModel(p), - minValue_(p.minValue_), - maxValue_(p.maxValue_), - lambda_(p.lambda_) -{} - - -// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // - -Foam::distributionModels::exponential::~exponential() -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -Foam::scalar Foam::distributionModels::exponential::sample() const -{ - scalar y = rndGen_.sample01(); - scalar K = exp(-lambda_*maxValue_) - exp(-lambda_*minValue_); - return -(1.0/lambda_)*log(exp(-lambda_*minValue_) + y*K); -} - - -Foam::scalar Foam::distributionModels::exponential::minValue() const -{ - return minValue_; -} - - -Foam::scalar Foam::distributionModels::exponential::maxValue() const -{ - return maxValue_; -} - - -Foam::scalar Foam::distributionModels::exponential::meanValue() const -{ - return 1.0/lambda_; -} - - -// ************************************************************************* // diff --git a/src/lagrangian/distributionModels/exponential/exponential.H b/src/lagrangian/distributionModels/exponential/exponential.H deleted file mode 100644 index 78acd2db83..0000000000 --- a/src/lagrangian/distributionModels/exponential/exponential.H +++ /dev/null @@ -1,119 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2011-2020 OpenFOAM Foundation - \\/ 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 3 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, see . - -Class - Foam::distributionModels::exponential - -Description - exponential distribution model - -SourceFiles - exponential.C - -\*---------------------------------------------------------------------------*/ - -#ifndef exponential_H -#define exponential_H - -#include "distributionModel.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace distributionModels -{ - -/*---------------------------------------------------------------------------*\ - Class exponential Declaration -\*---------------------------------------------------------------------------*/ - -class exponential -: - public distributionModel -{ - // Private Data - - //- Distribution minimum - scalar minValue_; - - //- Distribution maximum - scalar maxValue_; - - - // Model coefficients - - scalar lambda_; - - -public: - - //- Runtime type information - TypeName("exponential"); - - - // Constructors - - //- Construct from components - exponential(const dictionary& dict, Random& rndGen); - - //- Construct copy - exponential(const exponential& p); - - //- Construct and return a clone - virtual autoPtr clone() const - { - return autoPtr(new exponential(*this)); - } - - - //- Destructor - virtual ~exponential(); - - - // Member Functions - - //- Sample the distributionModel - virtual scalar sample() const; - - //- Return the minimum value - virtual scalar minValue() const; - - //- Return the maximum value - virtual scalar maxValue() const; - - //- Return the mean value - virtual scalar meanValue() const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace distributionModels -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/lagrangian/distributionModels/fixedValue/fixedValue.C b/src/lagrangian/distributionModels/fixedValue/fixedValue.C deleted file mode 100644 index 17e63631b9..0000000000 --- a/src/lagrangian/distributionModels/fixedValue/fixedValue.C +++ /dev/null @@ -1,94 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2011-2019 OpenFOAM Foundation - \\/ 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 3 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, see . - -\*---------------------------------------------------------------------------*/ - -#include "fixedValue.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -namespace Foam -{ -namespace distributionModels -{ - defineTypeNameAndDebug(fixedValue, 0); - addToRunTimeSelectionTable(distributionModel, fixedValue, dictionary); -} -} - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -Foam::distributionModels::fixedValue::fixedValue -( - const dictionary& dict, - Random& rndGen -) -: - distributionModel(typeName, dict, rndGen), - value_(distributionModelDict_.template lookup("value")) -{ - info(); -} - - -Foam::distributionModels::fixedValue::fixedValue(const fixedValue& p) -: - distributionModel(p), - value_(p.value_) -{} - - -// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // - -Foam::distributionModels::fixedValue::~fixedValue() -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -Foam::scalar Foam::distributionModels::fixedValue::fixedValue::sample() const -{ - return value_; -} - - -Foam::scalar Foam::distributionModels::fixedValue::fixedValue::minValue() const -{ - return value_; -} - - -Foam::scalar Foam::distributionModels::fixedValue::fixedValue::maxValue() const -{ - return value_; -} - - -Foam::scalar Foam::distributionModels::fixedValue::fixedValue::meanValue() const -{ - return value_; -} - - -// ************************************************************************* // diff --git a/src/lagrangian/distributionModels/general/general.C b/src/lagrangian/distributionModels/general/general.C deleted file mode 100644 index febe85ea8b..0000000000 --- a/src/lagrangian/distributionModels/general/general.C +++ /dev/null @@ -1,228 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2011-2021 OpenFOAM Foundation - \\/ 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 3 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, see . - -\*---------------------------------------------------------------------------*/ - -#include "general.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -namespace Foam -{ -namespace distributionModels -{ - defineTypeNameAndDebug(general, 0); - addToRunTimeSelectionTable(distributionModel, general, dictionary); -} -} - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -Foam::distributionModels::general::general -( - const dictionary& dict, - Random& rndGen -) -: - distributionModel(typeName, dict, rndGen), - xy_(distributionModelDict_.lookup("distribution")), - nEntries_(xy_.size()), - minValue_(xy_[0][0]), - maxValue_(xy_[nEntries_-1][0]), - meanValue_(0.0), - integral_(nEntries_), - cumulative_(distributionModelDict_.lookupOrDefault("cumulative", false)) -{ - check(); - - // Additional sanity checks - if (cumulative_ && xy_[0][1] != 0) - { - FatalErrorInFunction - << type() << "distribution: " - << "The cumulative distribution must start from zero." - << abort(FatalError); - } - - for (label i=0; i 0 && xy_[i][0] <= xy_[i-1][0]) - { - FatalErrorInFunction - << type() << "distribution: " - << "The points must be specified in ascending order." - << abort(FatalError); - } - - if (xy_[i][1] < 0) - { - FatalErrorInFunction - << type() << "distribution: " - << "The distribution can't be negative." - << abort(FatalError); - } - - if (i > 0 && cumulative_ && xy_[i][1] < xy_[i-1][1]) - { - FatalErrorInFunction - << type() << "distribution: " - << "Cumulative distribution must be non-decreasing." - << abort(FatalError); - } - } - - // Fill out the integral table (x, P(x<=0)) and calculate mean - // For density function: P(x<=0) = int f(x) and mean = int x*f(x) - // For cumulative function: mean = int 1-P(x<=0) = maxValue_ - int P(x<=0) - integral_[0] = 0.0; - for (label i=1; i(); - - // find the interval where y is in the table - label n=1; - while (integral_[n] <= y) - { - n++; - } - - scalar k = (xy_[n][1] - xy_[n-1][1])/(xy_[n][0] - xy_[n-1][0]); - scalar d = xy_[n-1][1] - k*xy_[n-1][0]; - - if (cumulative_) - { - return (y - d)/k; - } - - scalar alpha = y + xy_[n-1][0]*(0.5*k*xy_[n-1][0] + d) - integral_[n-1]; - scalar x = 0.0; - - // if k is small it is a linear equation, otherwise it is of second order - if (mag(k) > small) - { - scalar p = 2.0*d/k; - scalar q = -2.0*alpha/k; - scalar sqrtEr = sqrt(0.25*p*p - q); - - scalar x1 = -0.5*p + sqrtEr; - scalar x2 = -0.5*p - sqrtEr; - if ((x1 >= xy_[n-1][0]) && (x1 <= xy_[n][0])) - { - x = x1; - } - else - { - x = x2; - } - } - else - { - x = alpha/d; - } - - return x; -} - - -Foam::scalar Foam::distributionModels::general::minValue() const -{ - return minValue_; -} - - -Foam::scalar Foam::distributionModels::general::maxValue() const -{ - return maxValue_; -} - - -Foam::scalar Foam::distributionModels::general::meanValue() const -{ - return meanValue_; -} - - -// ************************************************************************* // diff --git a/src/lagrangian/distributionModels/general/general.H b/src/lagrangian/distributionModels/general/general.H deleted file mode 100644 index 4c3019d339..0000000000 --- a/src/lagrangian/distributionModels/general/general.H +++ /dev/null @@ -1,139 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2011-2021 OpenFOAM Foundation - \\/ 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 3 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, see . - -Class - Foam::distributionModels::general - -Description - A general distribution model where the distribution is specified as - (point, value) pairs. By default the values are assumed to represent - a probability density function, but the model also supports specifying a - cumulative distribution function. In both cases it is assumed that the - function is linear between the specified points. - - In both modes of operation the values are automatically normalised. - -SourceFiles - general.C - -\*---------------------------------------------------------------------------*/ - -#ifndef general_H -#define general_H - -#include "distributionModel.H" -#include "Vector.H" -#include "VectorSpace.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace distributionModels -{ - -/*---------------------------------------------------------------------------*\ - Class general Declaration -\*---------------------------------------------------------------------------*/ - -class general -: - public distributionModel -{ - // Private Data - - typedef VectorSpace, scalar, 2> pair; - - //- List of (x, y=f(x)) pairs - List xy_; - - //- Amount of entries in the xy_ list - label nEntries_; - - //- Distribution minimum - scalar minValue_; - - //- Distribution maximum - scalar maxValue_; - - //- Distribution mean - scalar meanValue_; - - //- Values of cumulative distribution function - List integral_; - - //- Is the distribution specified as cumulative or as density - Switch cumulative_; - - -public: - - //- Runtime type information - TypeName("general"); - - - // Constructors - - //- Construct from components - general(const dictionary& dict, Random& rndGen); - - //- Construct copy - general(const general& p); - - //- Construct and return a clone - virtual autoPtr clone() const - { - return autoPtr(new general(*this)); - } - - - //- Destructor - virtual ~general(); - - - // Member Functions - - //- Sample the distributionModel - virtual scalar sample() const; - - //- Return the minimum value - virtual scalar minValue() const; - - //- Return the maximum value - virtual scalar maxValue() const; - - //- Return the mean value - virtual scalar meanValue() const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace distributionModels -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/lagrangian/distributionModels/massRosinRammler/massRosinRammler.C b/src/lagrangian/distributionModels/massRosinRammler/massRosinRammler.C deleted file mode 100644 index 7b73151b60..0000000000 --- a/src/lagrangian/distributionModels/massRosinRammler/massRosinRammler.C +++ /dev/null @@ -1,115 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2016-2023 OpenFOAM Foundation - \\/ 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 3 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, see . - -\*---------------------------------------------------------------------------*/ - -#include "massRosinRammler.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -namespace Foam -{ -namespace distributionModels -{ - defineTypeNameAndDebug(massRosinRammler, 0); - addToRunTimeSelectionTable(distributionModel, massRosinRammler, dictionary); -} -} - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -Foam::distributionModels::massRosinRammler::massRosinRammler -( - const dictionary& dict, - Random& rndGen -) -: - distributionModel(typeName, dict, rndGen), - minValue_(distributionModelDict_.template lookup("minValue")), - maxValue_(distributionModelDict_.template lookup("maxValue")), - d_(distributionModelDict_.template lookup("d")), - n_(distributionModelDict_.template lookup("n")) -{ - check(); - info(); -} - - -Foam::distributionModels::massRosinRammler::massRosinRammler -( - const massRosinRammler& p -) -: - distributionModel(p), - minValue_(p.minValue_), - maxValue_(p.maxValue_), - d_(p.d_), - n_(p.n_) -{} - - -// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // - -Foam::distributionModels::massRosinRammler::~massRosinRammler() -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -Foam::scalar Foam::distributionModels::massRosinRammler::sample() const -{ - scalar d; - - // Re-sample if the calculated d is out of the physical range - do - { - const scalar a = 3/n_ + 1; - const scalar P = rndGen_.sample01(); - const scalar x = invIncGammaRatio_P(a, P); - d = d_*pow(x, 1/n_); - } while (d < minValue_ || d > maxValue_); - - return d; -} - - -Foam::scalar Foam::distributionModels::massRosinRammler::minValue() const -{ - return minValue_; -} - - -Foam::scalar Foam::distributionModels::massRosinRammler::maxValue() const -{ - return maxValue_; -} - - -Foam::scalar Foam::distributionModels::massRosinRammler::meanValue() const -{ - return d_; -} - - -// ************************************************************************* // diff --git a/src/lagrangian/distributionModels/massRosinRammler/massRosinRammler.H b/src/lagrangian/distributionModels/massRosinRammler/massRosinRammler.H deleted file mode 100644 index b04ab511af..0000000000 --- a/src/lagrangian/distributionModels/massRosinRammler/massRosinRammler.H +++ /dev/null @@ -1,141 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2016-2023 OpenFOAM Foundation - \\/ 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 3 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, see . - -Class - Foam::distributionModels::massRosinRammler - -Description - Corrected form of the Rosin-Rammler distribution which applies - coefficients relating to a number (q0) distribution of particle - diameters to parcels of fixed mass. - - Parcels of fixed mass are specified by the following setting: - \verbatim - parcelBasisType mass; - \endverbatim - - If coefficients for a mass/volume (q3) distribution are given - instead, then the standard Rosin-Rammler distribution can be applied - to parcels of fixed mass. - - See equation 10 in reference: - \verbatim - Yoon, S. S., Hewson, J. C., DesJardin, P. E., Glaze, D. J., - Black, A. R., & Skaggs, R. R. (2004). - Numerical modeling and experimental measurements of a high speed - solid-cone water spray for use in fire suppression applications. - International Journal of Multiphase Flow, 30(11), 1369-1388. - \endverbatim - -SourceFiles - massRosinRammler.C - -\*---------------------------------------------------------------------------*/ - -#ifndef massRosinRammler_H -#define massRosinRammler_H - -#include "distributionModel.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace distributionModels -{ - -/*---------------------------------------------------------------------------*\ - Class massRosinRammler Declaration -\*---------------------------------------------------------------------------*/ - -class massRosinRammler -: - public distributionModel -{ - // Private Data - - //- Distribution minimum - scalar minValue_; - - //- Distribution maximum - scalar maxValue_; - - //- Characteristic droplet size - scalar d_; - - //- Empirical dimensionless constant to specify the distribution width, - // sometimes referred to as the dispersion coefficient - scalar n_; - - -public: - - //- Runtime type information - TypeName("massRosinRammler"); - - - // Constructors - - //- Construct from components - massRosinRammler(const dictionary& dict, Random& rndGen); - - //- Construct copy - massRosinRammler(const massRosinRammler& p); - - //- Construct and return a clone - virtual autoPtr clone() const - { - return autoPtr(new massRosinRammler(*this)); - } - - - //- Destructor - virtual ~massRosinRammler(); - - - // Member Functions - - //- Sample the distributionModel - virtual scalar sample() const; - - //- Return the minimum value - virtual scalar minValue() const; - - //- Return the maximum value - virtual scalar maxValue() const; - - //- Return the mean value - virtual scalar meanValue() const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace distributionModels -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/lagrangian/distributionModels/multiNormal/multiNormal.C b/src/lagrangian/distributionModels/multiNormal/multiNormal.C deleted file mode 100644 index e65254d228..0000000000 --- a/src/lagrangian/distributionModels/multiNormal/multiNormal.C +++ /dev/null @@ -1,162 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2011-2019 OpenFOAM Foundation - \\/ 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 3 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, see . - -\*---------------------------------------------------------------------------*/ - -#include "multiNormal.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -namespace Foam -{ -namespace distributionModels -{ - defineTypeNameAndDebug(multiNormal, 0); - addToRunTimeSelectionTable(distributionModel, multiNormal, dictionary); -} -} - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -Foam::distributionModels::multiNormal::multiNormal -( - const dictionary& dict, - Random& rndGen -) -: - distributionModel(typeName, dict, rndGen), - minValue_(distributionModelDict_.template lookup("minValue")), - maxValue_(distributionModelDict_.template lookup("maxValue")), - range_(maxValue_ - minValue_), - expectation_(distributionModelDict_.lookup("expectation")), - variance_(distributionModelDict_.lookup("variance")), - strength_(distributionModelDict_.lookup("strength")) -{ - check(); - - scalar sMax = 0; - label n = strength_.size(); - for (label i=0; i(); - y = rndGen_.sample01(); - scalar p = 0.0; - - for (label i=0; i. - -Class - Foam::distributionModels::multiNormal - -Description - A multiNormal distribution model - - \verbatim - model = sum_i strength_i * exp(-0.5*((x - expectation_i)/variance_i)^2 ) - \endverbatim - - -SourceFiles - multiNormal.C - -\*---------------------------------------------------------------------------*/ - -#ifndef multiNormal_H -#define multiNormal_H - -#include "distributionModel.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace distributionModels -{ - -/*---------------------------------------------------------------------------*\ - Class multiNormal Declaration -\*---------------------------------------------------------------------------*/ - -class multiNormal -: - public distributionModel -{ - // Private Data - - //- Distribution minimum - scalar minValue_; - - //- Distribution maximum - scalar maxValue_; - - //- Distribution range - scalar range_; - - - // Model coefficients - - List expectation_; - List variance_; - List strength_; - - -public: - - //- Runtime type information - TypeName("multiNormal"); - - - // Constructors - - //- Construct from components - multiNormal(const dictionary& dict, Random& rndGen); - - //- Construct copy - multiNormal(const multiNormal& p); - - //- Construct and return a clone - virtual autoPtr clone() const - { - return autoPtr(new multiNormal(*this)); - } - - - //- Destructor - virtual ~multiNormal(); - - - // Member Functions - - //- Sample the distributionModel - virtual scalar sample() const; - - //- Return the minimum value - virtual scalar minValue() const; - - //- Return the maximum value - virtual scalar maxValue() const; - - //- Return the mean value - virtual scalar meanValue() const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace distributionModels -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/lagrangian/distributionModels/normal/normal.C b/src/lagrangian/distributionModels/normal/normal.C deleted file mode 100644 index a9d0294acb..0000000000 --- a/src/lagrangian/distributionModels/normal/normal.C +++ /dev/null @@ -1,129 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2011-2019 OpenFOAM Foundation - \\/ 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 3 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, see . - -\*---------------------------------------------------------------------------*/ - -#include "normal.H" -#include "addToRunTimeSelectionTable.H" -#include "mathematicalConstants.H" - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -namespace Foam -{ -namespace distributionModels -{ - defineTypeNameAndDebug(normal, 0); - addToRunTimeSelectionTable(distributionModel, normal, dictionary); -} -} - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -Foam::distributionModels::normal::normal -( - const dictionary& dict, - Random& rndGen -) -: - distributionModel(typeName, dict, rndGen), - minValue_(distributionModelDict_.template lookup("minValue")), - maxValue_(distributionModelDict_.template lookup("maxValue")), - expectation_(distributionModelDict_.template lookup("expectation")), - variance_(distributionModelDict_.template lookup("variance")), - a_(0.147) -{ - check(); - info(); -} - - -Foam::distributionModels::normal::normal(const normal& p) -: - distributionModel(p), - minValue_(p.minValue_), - maxValue_(p.maxValue_), - expectation_(p.expectation_), - variance_(p.variance_), - a_(p.a_) -{} - - -// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // - -Foam::distributionModels::normal::~normal() -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -Foam::scalar Foam::distributionModels::normal::sample() const -{ - - scalar a = erf((minValue_ - expectation_)/variance_); - scalar b = erf((maxValue_ - expectation_)/variance_); - - scalar y = rndGen_.sample01(); - scalar x = erfInv(y*(b - a) + a)*variance_ + expectation_; - - // Note: numerical approximation of the inverse function yields slight - // inaccuracies - - x = min(max(x, minValue_), maxValue_); - - return x; -} - - -Foam::scalar Foam::distributionModels::normal::minValue() const -{ - return minValue_; -} - - -Foam::scalar Foam::distributionModels::normal::maxValue() const -{ - return maxValue_; -} - - -Foam::scalar Foam::distributionModels::normal::meanValue() const -{ - return expectation_; -} - - -Foam::scalar Foam::distributionModels::normal::erfInv(const scalar y) const -{ - scalar k = 2.0/(constant::mathematical::pi*a_) + 0.5*log(1.0 - y*y); - scalar h = log(1.0 - y*y)/a_; - scalar x = sqrt(-k + sqrt(k*k - h)); - if (y < 0.0) - { - x *= -1.0; - } - return x; -} - - -// ************************************************************************* // diff --git a/src/lagrangian/distributionModels/normal/normal.H b/src/lagrangian/distributionModels/normal/normal.H deleted file mode 100644 index a9ceb0262b..0000000000 --- a/src/lagrangian/distributionModels/normal/normal.H +++ /dev/null @@ -1,131 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2011-2019 OpenFOAM Foundation - \\/ 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 3 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, see . - -Class - Foam::distributionModels::normal - -Description - A normal distribution model - - \verbatim - model = strength * exp(-0.5*((x - expectation)/variance)^2 ) - \endverbatim - - strength only has meaning if there's more than one distribution model - -SourceFiles - normal.C - -\*---------------------------------------------------------------------------*/ - -#ifndef normal_H -#define normal_H - -#include "distributionModel.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace distributionModels -{ - -/*---------------------------------------------------------------------------*\ - Class normal Declaration -\*---------------------------------------------------------------------------*/ - -class normal -: - public distributionModel -{ - // Private Data - - - //- Distribution minimum - scalar minValue_; - - //- Distribution maximum - scalar maxValue_; - - - // Model coefficients - - scalar expectation_; - scalar variance_; - - scalar a_; - - -public: - - //- Runtime type information - TypeName("normal"); - - - // Constructors - - //- Construct from components - normal(const dictionary& dict, Random& rndGen); - - //- Construct copy - normal(const normal& p); - - //- Construct and return a clone - virtual autoPtr clone() const - { - return autoPtr(new normal(*this)); - } - - - //- Destructor - virtual ~normal(); - - - // Member Functions - - //- Sample the distributionModel - virtual scalar sample() const; - - //- Return the minimum value - virtual scalar minValue() const; - - //- Return the maximum value - virtual scalar maxValue() const; - - //- Return the mean value - virtual scalar meanValue() const; - - virtual scalar erfInv(const scalar y) const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace distributionModels -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/lagrangian/distributionModels/uniform/uniform.C b/src/lagrangian/distributionModels/uniform/uniform.C deleted file mode 100644 index c7276058a2..0000000000 --- a/src/lagrangian/distributionModels/uniform/uniform.C +++ /dev/null @@ -1,97 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2011-2019 OpenFOAM Foundation - \\/ 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 3 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, see . - -\*---------------------------------------------------------------------------*/ - -#include "uniform.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -namespace Foam -{ -namespace distributionModels -{ - defineTypeNameAndDebug(uniform, 0); - addToRunTimeSelectionTable(distributionModel, uniform, dictionary); -} -} - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -Foam::distributionModels::uniform::uniform -( - const dictionary& dict, - Random& rndGen -) -: - distributionModel(typeName, dict, rndGen), - minValue_(distributionModelDict_.template lookup("minValue")), - maxValue_(distributionModelDict_.template lookup("maxValue")) -{ - check(); - info(); -} - - -Foam::distributionModels::uniform::uniform(const uniform& p) -: - distributionModel(p), - minValue_(p.minValue_), - maxValue_(p.maxValue_) -{} - - -// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // - -Foam::distributionModels::uniform::~uniform() -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -Foam::scalar Foam::distributionModels::uniform::sample() const -{ - return rndGen_.scalarAB(minValue_, maxValue_); -} - - -Foam::scalar Foam::distributionModels::uniform::minValue() const -{ - return minValue_; -} - - -Foam::scalar Foam::distributionModels::uniform::maxValue() const -{ - return maxValue_; -} - - -Foam::scalar Foam::distributionModels::uniform::meanValue() const -{ - return 0.5*(minValue_ + maxValue_); -} - - -// ************************************************************************* // diff --git a/src/lagrangian/distributionModels/uniform/uniform.H b/src/lagrangian/distributionModels/uniform/uniform.H deleted file mode 100644 index daf715980d..0000000000 --- a/src/lagrangian/distributionModels/uniform/uniform.H +++ /dev/null @@ -1,114 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2011-2019 OpenFOAM Foundation - \\/ 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 3 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, see . - -Class - Foam::distributionModels::uniform - -Description - Uniform/equally-weighted distribution model - -SourceFiles - uniform.C - -\*---------------------------------------------------------------------------*/ - -#ifndef uniform_H -#define uniform_H - -#include "distributionModel.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace distributionModels -{ - -/*---------------------------------------------------------------------------*\ - Class uniform Declaration -\*---------------------------------------------------------------------------*/ - -class uniform -: - public distributionModel -{ - // Private Data - - //- Distribution minimum - scalar minValue_; - - //- Distribution maximum - scalar maxValue_; - - -public: - - //- Runtime type information - TypeName("uniform"); - - - // Constructors - - //- Construct from components - uniform(const dictionary& dict, Random& rndGen); - - //- Construct copy - uniform(const uniform& p); - - //- Construct and return a clone - virtual autoPtr clone() const - { - return autoPtr(new uniform(*this)); - } - - - //- Destructor - virtual ~uniform(); - - - // Member Functions - - //- Sample the distributionModel - virtual scalar sample() const; - - //- Return the minimum value - virtual scalar minValue() const; - - //- Return the maximum value - virtual scalar maxValue() const; - - //- Return the mean value - virtual scalar meanValue() const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace distributionModels -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/lagrangian/parcel/Make/files b/src/lagrangian/parcel/Make/files index 1488e4ff53..3cae66b253 100644 --- a/src/lagrangian/parcel/Make/files +++ b/src/lagrangian/parcel/Make/files @@ -96,6 +96,9 @@ $(MPPICTIMESCALE)/equilibrium/equilibrium.C $(MPPICTIMESCALE)/nonEquilibrium/nonEquilibrium.C $(MPPICTIMESCALE)/isotropic/isotropic.C +# injection model +submodels/Momentum/InjectionModel/InjectionModel/injectionModel.C + # integration schemes integrationScheme/integrationScheme/integrationScheme.C integrationScheme/integrationScheme/integrationSchemeNew.C diff --git a/src/lagrangian/parcel/Make/options b/src/lagrangian/parcel/Make/options index d92ca22f5f..69084cc5d7 100644 --- a/src/lagrangian/parcel/Make/options +++ b/src/lagrangian/parcel/Make/options @@ -1,6 +1,5 @@ EXE_INC = \ -I$(LIB_SRC)/lagrangian/basic/lnInclude \ - -I$(LIB_SRC)/lagrangian/distributionModels/lnInclude \ -I$(LIB_SRC)/physicalProperties/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ @@ -13,7 +12,6 @@ EXE_INC = \ LIB_LIBS = \ -llagrangian \ - -ldistributionModels \ -lspecie \ -lfluidThermophysicalModels \ -lthermophysicalProperties \ diff --git a/src/lagrangian/parcel/clouds/Templates/MomentumCloud/MomentumCloud.C b/src/lagrangian/parcel/clouds/Templates/MomentumCloud/MomentumCloud.C index 93425dd830..90bb34bae0 100644 --- a/src/lagrangian/parcel/clouds/Templates/MomentumCloud/MomentumCloud.C +++ b/src/lagrangian/parcel/clouds/Templates/MomentumCloud/MomentumCloud.C @@ -545,7 +545,7 @@ template void Foam::MomentumCloud::checkParcelProperties ( parcelType& parcel, - const bool fullyDescribed + const label injectori ) { if (parcel.typeId() == -1) diff --git a/src/lagrangian/parcel/clouds/Templates/MomentumCloud/MomentumCloud.H b/src/lagrangian/parcel/clouds/Templates/MomentumCloud/MomentumCloud.H index 1f1488379a..3e2e2a00c5 100644 --- a/src/lagrangian/parcel/clouds/Templates/MomentumCloud/MomentumCloud.H +++ b/src/lagrangian/parcel/clouds/Templates/MomentumCloud/MomentumCloud.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2023 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -539,7 +539,7 @@ public: void checkParcelProperties ( parcelType& parcel, - const bool fullyDescribed + const label injectori ); //- Store the current cloud state diff --git a/src/lagrangian/parcel/clouds/Templates/ReactingCloud/ReactingCloud.C b/src/lagrangian/parcel/clouds/Templates/ReactingCloud/ReactingCloud.C index 6caa681f71..12ed85665b 100644 --- a/src/lagrangian/parcel/clouds/Templates/ReactingCloud/ReactingCloud.C +++ b/src/lagrangian/parcel/clouds/Templates/ReactingCloud/ReactingCloud.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2023 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -208,12 +208,12 @@ template void Foam::ReactingCloud::checkParcelProperties ( parcelType& parcel, - const bool fullyDescribed + const label injectori ) { - CloudType::checkParcelProperties(parcel, fullyDescribed); + CloudType::checkParcelProperties(parcel, injectori); - if (fullyDescribed) + if (injectori != -1 && this->injectors()[injectori].fullyDescribed()) { checkSuppliedComposition ( @@ -222,9 +222,6 @@ void Foam::ReactingCloud::checkParcelProperties "YMixture" ); } - - // derived information - store initial mass - parcel.mass0() = parcel.mass(); } diff --git a/src/lagrangian/parcel/clouds/Templates/ReactingCloud/ReactingCloud.H b/src/lagrangian/parcel/clouds/Templates/ReactingCloud/ReactingCloud.H index 8bc4e6e584..d117215c7a 100644 --- a/src/lagrangian/parcel/clouds/Templates/ReactingCloud/ReactingCloud.H +++ b/src/lagrangian/parcel/clouds/Templates/ReactingCloud/ReactingCloud.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2023 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -265,7 +265,7 @@ public: void checkParcelProperties ( parcelType& parcel, - const bool fullyDescribed + const label injectori ); //- Store the current cloud state diff --git a/src/lagrangian/parcel/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.C b/src/lagrangian/parcel/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.C index e05c5e0bfb..478311db90 100644 --- a/src/lagrangian/parcel/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.C +++ b/src/lagrangian/parcel/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2023 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -171,12 +171,14 @@ template void Foam::ReactingMultiphaseCloud::checkParcelProperties ( parcelType& parcel, - const bool fullyDescribed + const label injectori ) { - CloudType::checkParcelProperties(parcel, fullyDescribed); + CloudType::checkParcelProperties(parcel, injectori); - if (fullyDescribed) + parcel.mass0() = parcel.mass(); + + if (injectori != -1 && this->injectors()[injectori].fullyDescribed()) { label idGas = this->composition().idGas(); label idLiquid = this->composition().idLiquid(); diff --git a/src/lagrangian/parcel/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.H b/src/lagrangian/parcel/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.H index 4a7336b9d8..5b9808587e 100644 --- a/src/lagrangian/parcel/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.H +++ b/src/lagrangian/parcel/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2023 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -261,7 +261,7 @@ public: void checkParcelProperties ( parcelType& parcel, - const bool fullyDescribed + const label injectori ); //- Store the current cloud state diff --git a/src/lagrangian/parcel/clouds/Templates/SprayCloud/SprayCloud.C b/src/lagrangian/parcel/clouds/Templates/SprayCloud/SprayCloud.C index b68ae6c891..fd9c1f50e3 100644 --- a/src/lagrangian/parcel/clouds/Templates/SprayCloud/SprayCloud.C +++ b/src/lagrangian/parcel/clouds/Templates/SprayCloud/SprayCloud.C @@ -26,6 +26,7 @@ License #include "SprayCloud.H" #include "AtomisationModel.H" #include "BreakupModel.H" +#include "ConeInjection.H" #include "parcelThermo.H" // * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * // @@ -163,19 +164,22 @@ template void Foam::SprayCloud::checkParcelProperties ( parcelType& parcel, - const bool fullyDescribed + const label injectori ) { - CloudType::checkParcelProperties(parcel, fullyDescribed); + CloudType::checkParcelProperties(parcel, injectori); - // store the injection position and initial drop size - parcel.position0() = parcel.position(this->mesh()); + // store the initial size and position parcel.d0() = parcel.d(); + parcel.mass0() = parcel.mass(); + parcel.position0() = parcel.position(this->mesh()); parcel.y() = breakup().y0(); parcel.yDot() = breakup().yDot0(); parcel.liquidCore() = atomisation().initLiquidCore(); + + parcel.injector() = injectori; } diff --git a/src/lagrangian/parcel/clouds/Templates/SprayCloud/SprayCloud.H b/src/lagrangian/parcel/clouds/Templates/SprayCloud/SprayCloud.H index 7dd93961fb..b5a7e88937 100644 --- a/src/lagrangian/parcel/clouds/Templates/SprayCloud/SprayCloud.H +++ b/src/lagrangian/parcel/clouds/Templates/SprayCloud/SprayCloud.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2023 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -50,6 +50,7 @@ namespace Foam { // Forward declaration of classes + template class AtomisationModel; @@ -215,7 +216,7 @@ public: void checkParcelProperties ( parcelType& parcel, - const bool fullyDescribed + const label injectori ); //- Store the current cloud state diff --git a/src/lagrangian/parcel/clouds/Templates/ThermoCloud/ThermoCloud.C b/src/lagrangian/parcel/clouds/Templates/ThermoCloud/ThermoCloud.C index 63aab27d5b..cb5a487fdb 100644 --- a/src/lagrangian/parcel/clouds/Templates/ThermoCloud/ThermoCloud.C +++ b/src/lagrangian/parcel/clouds/Templates/ThermoCloud/ThermoCloud.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2023 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -373,10 +373,10 @@ template void Foam::ThermoCloud::checkParcelProperties ( parcelType& parcel, - const bool fullyDescribed + const label injectori ) { - CloudType::checkParcelProperties(parcel, fullyDescribed); + CloudType::checkParcelProperties(parcel, injectori); } diff --git a/src/lagrangian/parcel/clouds/Templates/ThermoCloud/ThermoCloud.H b/src/lagrangian/parcel/clouds/Templates/ThermoCloud/ThermoCloud.H index 403225d1a2..0649f4a653 100644 --- a/src/lagrangian/parcel/clouds/Templates/ThermoCloud/ThermoCloud.H +++ b/src/lagrangian/parcel/clouds/Templates/ThermoCloud/ThermoCloud.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2023 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -55,6 +55,9 @@ namespace Foam class integrationScheme; +template +class InjectionModel; + template class HeatTransferModel; @@ -354,7 +357,7 @@ public: void checkParcelProperties ( parcelType& parcel, - const bool fullyDescribed + const label injectori ); //- Store the current cloud state diff --git a/src/lagrangian/parcel/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.C b/src/lagrangian/parcel/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.C index 3dc7405715..23d8bb664f 100644 --- a/src/lagrangian/parcel/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.C +++ b/src/lagrangian/parcel/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2023 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -278,7 +278,7 @@ void Foam::ReactingMultiphaseParcel::calc d0, T0, mass0, - this->mass0_, + mass0_, YMix[GAS]*YGas_, YMix[LIQ]*YLiquid_, YMix[SLD]*YSolid_, @@ -716,6 +716,7 @@ Foam::ReactingMultiphaseParcel::ReactingMultiphaseParcel ) : ParcelType(p), + mass0_(p.mass0_), YGas_(p.YGas_), YLiquid_(p.YLiquid_), YSolid_(p.YSolid_), diff --git a/src/lagrangian/parcel/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.H b/src/lagrangian/parcel/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.H index 83ac2cdd6c..231dc98698 100644 --- a/src/lagrangian/parcel/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.H +++ b/src/lagrangian/parcel/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2023 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -198,6 +198,9 @@ protected: // Parcel properties + //- Initial mass [kg] + scalar mass0_; + //- Mass fractions of gases [] scalarField YGas_; @@ -274,7 +277,8 @@ public: AddToPropertyList ( ParcelType, - " nGas(Y1..YN)" + " mass0" + + " nGas(Y1..YN)" + " nLiquid(Y1..YN)" + " nSolid(Y1..YN)" ); @@ -330,6 +334,9 @@ public: // Access + //- Return const access to initial mass [kg] + inline scalar mass0() const; + //- Return const access to mass fractions of gases inline const scalarField& YGas() const; @@ -345,6 +352,9 @@ public: // Edit + //- Return access to initial mass [kg] + inline scalar& mass0(); + //- Return access to mass fractions of gases inline scalarField& YGas(); diff --git a/src/lagrangian/parcel/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcelI.H b/src/lagrangian/parcel/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcelI.H index f4b936b893..fa71ff31f0 100644 --- a/src/lagrangian/parcel/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcelI.H +++ b/src/lagrangian/parcel/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcelI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2023 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -78,6 +78,7 @@ inline Foam::ReactingMultiphaseParcel::ReactingMultiphaseParcel ) : ParcelType(mesh, coordinates, celli, tetFacei, tetPti, facei), + mass0_(0), YGas_(0), YLiquid_(0), YSolid_(0), @@ -94,6 +95,7 @@ inline Foam::ReactingMultiphaseParcel::ReactingMultiphaseParcel ) : ParcelType(mesh, position, celli), + mass0_(0), YGas_(0), YLiquid_(0), YSolid_(0), @@ -137,7 +139,14 @@ hRetentionCoeff() const } -// * * * * * * * * * * ThermoParcel Member Functions * * * * * * * * * * * * // +// * * * * * * * * ReactingMultiphaseParcel Member Functions * * * * * * * * // + +template +inline Foam::scalar Foam::ReactingMultiphaseParcel::mass0() const +{ + return mass0_; +} + template inline const Foam::scalarField& Foam::ReactingMultiphaseParcel:: @@ -171,6 +180,13 @@ Foam::ReactingMultiphaseParcel::canCombust() const } +template +inline Foam::scalar& Foam::ReactingMultiphaseParcel::mass0() +{ + return mass0_; +} + + template inline Foam::scalarField& Foam::ReactingMultiphaseParcel::YGas() { diff --git a/src/lagrangian/parcel/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcelIO.C b/src/lagrangian/parcel/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcelIO.C index 82e805e43d..ada650d56b 100644 --- a/src/lagrangian/parcel/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcelIO.C +++ b/src/lagrangian/parcel/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcelIO.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2023 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -35,7 +35,7 @@ Foam::string Foam::ReactingMultiphaseParcel::propertyList_ = template const std::size_t Foam::ReactingMultiphaseParcel::sizeofFields_ ( - 0 + sizeof(scalar) ); @@ -49,6 +49,7 @@ Foam::ReactingMultiphaseParcel::ReactingMultiphaseParcel ) : ParcelType(is, readFields), + mass0_(0.0), YGas_(0), YLiquid_(0), YSolid_(0), @@ -60,7 +61,15 @@ Foam::ReactingMultiphaseParcel::ReactingMultiphaseParcel DynamicList Yl; DynamicList Ys; - is >> Yg >> Yl >> Ys; + if (is.format() == IOstream::ASCII) + { + is >> mass0_ >> Yg >> Yl >> Ys; + } + else + { + is.read(reinterpret_cast(&mass0_), sizeofFields_); + is >> Yg >> Yl >> Ys; + } YGas_.transfer(Yg); YLiquid_.transfer(Yl); @@ -106,6 +115,20 @@ void Foam::ReactingMultiphaseParcel::readFields ParcelType::readFields(c, compModel); + IOField mass0 + ( + c.fieldIOobject("mass0", IOobject::MUST_READ), + valid + ); + c.checkFieldIOobject(c, mass0); + + label i = 0; + forAllIter(typename CloudType, c, iter) + { + ReactingMultiphaseParcel& p = iter(); + p.mass0_ = mass0[i++]; + } + // Get names and sizes for each Y... const label idGas = compModel.idGas(); const wordList& gasNames = compModel.componentNames(idGas); @@ -207,8 +230,18 @@ void Foam::ReactingMultiphaseParcel::writeFields label np = c.size(); - // Write the composition fractions { + IOField mass0(c.fieldIOobject("mass0", IOobject::NO_READ), np); + + label i = 0; + forAllConstIter(typename CloudType, c, iter) + { + const ReactingMultiphaseParcel& p = iter(); + mass0[i++] = p.mass0_; + } + mass0.write(np > 0); + + // Write the composition fractions const wordList& stateLabels = compModel.stateLabels(); const label idGas = compModel.idGas(); @@ -301,6 +334,7 @@ Foam::Ostream& Foam::operator<< if (os.format() == IOstream::ASCII) { os << static_cast(p) + << token::SPACE << p.mass0() << token::SPACE << YGasLoc << token::SPACE << YLiquidLoc << token::SPACE << YSolidLoc; @@ -308,6 +342,11 @@ Foam::Ostream& Foam::operator<< else { os << static_cast(p); + os.write + ( + reinterpret_cast(&p.mass0_), + ReactingMultiphaseParcel::sizeofFields_ + ); os << YGasLoc << YLiquidLoc << YSolidLoc; } diff --git a/src/lagrangian/parcel/parcels/Templates/ReactingParcel/ReactingParcel.C b/src/lagrangian/parcel/parcels/Templates/ReactingParcel/ReactingParcel.C index 40bc1a59eb..cb53759792 100644 --- a/src/lagrangian/parcel/parcels/Templates/ReactingParcel/ReactingParcel.C +++ b/src/lagrangian/parcel/parcels/Templates/ReactingParcel/ReactingParcel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2023 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -184,7 +184,6 @@ Foam::ReactingParcel::ReactingParcel ) : ParcelType(p), - mass0_(p.mass0_), Y_(p.Y_) {} diff --git a/src/lagrangian/parcel/parcels/Templates/ReactingParcel/ReactingParcel.H b/src/lagrangian/parcel/parcels/Templates/ReactingParcel/ReactingParcel.H index f7b02d2d32..7dfac5c877 100644 --- a/src/lagrangian/parcel/parcels/Templates/ReactingParcel/ReactingParcel.H +++ b/src/lagrangian/parcel/parcels/Templates/ReactingParcel/ReactingParcel.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2023 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -132,9 +132,6 @@ protected: // Parcel properties - //- Initial mass [kg] - scalar mass0_; - //- Mass fractions of mixture [] scalarField Y_; @@ -182,8 +179,7 @@ public: AddToPropertyList ( ParcelType, - " mass0" - + " nPhases(Y1..YN)" + " nPhases(Y1..YN)" ); @@ -233,18 +229,12 @@ public: // Access - //- Return const access to initial mass [kg] - inline scalar mass0() const; - //- Return const access to mass fractions of mixture [] inline const scalarField& Y() const; // Edit - //- Return access to initial mass [kg] - inline scalar& mass0(); - //- Return access to mass fractions of mixture [] inline scalarField& Y(); diff --git a/src/lagrangian/parcel/parcels/Templates/ReactingParcel/ReactingParcelI.H b/src/lagrangian/parcel/parcels/Templates/ReactingParcel/ReactingParcelI.H index b82b063afe..a4eece04dc 100644 --- a/src/lagrangian/parcel/parcels/Templates/ReactingParcel/ReactingParcelI.H +++ b/src/lagrangian/parcel/parcels/Templates/ReactingParcel/ReactingParcelI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2023 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -73,7 +73,6 @@ inline Foam::ReactingParcel::ReactingParcel ) : ParcelType(mesh, coordinates, celli, tetFacei, tetPti, facei), - mass0_(0.0), Y_(0) {} @@ -87,7 +86,6 @@ inline Foam::ReactingParcel::ReactingParcel ) : ParcelType(mesh, position, celli), - mass0_(0.0), Y_(0) {} @@ -110,14 +108,7 @@ Foam::ReactingParcel::constantProperties::constantVolume() const } -// * * * * * * * * * * ThermoParcel Member Functions * * * * * * * * * * * * // - -template -inline Foam::scalar Foam::ReactingParcel::mass0() const -{ - return mass0_; -} - +// * * * * * * * * * * ReactingParcel Member Functions * * * * * * * * * * * // template inline const Foam::scalarField& Foam::ReactingParcel::Y() const @@ -126,13 +117,6 @@ inline const Foam::scalarField& Foam::ReactingParcel::Y() const } -template -inline Foam::scalar& Foam::ReactingParcel::mass0() -{ - return mass0_; -} - - template inline Foam::scalarField& Foam::ReactingParcel::Y() { diff --git a/src/lagrangian/parcel/parcels/Templates/ReactingParcel/ReactingParcelIO.C b/src/lagrangian/parcel/parcels/Templates/ReactingParcel/ReactingParcelIO.C index 11245a0fdb..3d97805cfd 100644 --- a/src/lagrangian/parcel/parcels/Templates/ReactingParcel/ReactingParcelIO.C +++ b/src/lagrangian/parcel/parcels/Templates/ReactingParcel/ReactingParcelIO.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2023 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -35,7 +35,7 @@ Foam::string Foam::ReactingParcel::propertyList_ = template const std::size_t Foam::ReactingParcel::sizeofFields_ ( - sizeof(scalar) + 0 ); @@ -45,22 +45,13 @@ template Foam::ReactingParcel::ReactingParcel(Istream& is, bool readFields) : ParcelType(is, readFields), - mass0_(0.0), Y_(0) { if (readFields) { DynamicList Ymix; - if (is.format() == IOstream::ASCII) - { - is >> mass0_ >> Ymix; - } - else - { - is.read(reinterpret_cast(&mass0_), sizeofFields_); - is >> Ymix; - } + is >> Ymix; Y_.transfer(Ymix); } @@ -98,20 +89,6 @@ void Foam::ReactingParcel::readFields ParcelType::readFields(c); - IOField mass0 - ( - c.fieldIOobject("mass0", IOobject::MUST_READ), - valid - ); - c.checkFieldIOobject(c, mass0); - - label i = 0; - forAllIter(typename CloudType, c, iter) - { - ReactingParcel& p = iter(); - p.mass0_ = mass0[i++]; - } - // Get names and sizes for each Y... const wordList& phaseTypes = compModel.phaseTypes(); const label nPhases = phaseTypes.size(); @@ -121,7 +98,6 @@ void Foam::ReactingParcel::readFields stateLabels = compModel.stateLabels()[0]; } - // Set storage for each Y... for each parcel forAllIter(typename CloudType, c, iter) { @@ -173,16 +149,6 @@ void Foam::ReactingParcel::writeFields const label np = c.size(); { - IOField mass0(c.fieldIOobject("mass0", IOobject::NO_READ), np); - - label i = 0; - forAllConstIter(typename CloudType, c, iter) - { - const ReactingParcel& p = iter(); - mass0[i++] = p.mass0_; - } - mass0.write(np > 0); - // Write the composition fractions const wordList& phaseTypes = compModel.phaseTypes(); wordList stateLabels(phaseTypes.size(), ""); @@ -227,17 +193,11 @@ Foam::Ostream& Foam::operator<< if (os.format() == IOstream::ASCII) { os << static_cast(p) - << token::SPACE << p.mass0() << token::SPACE << p.Y(); } else { os << static_cast(p); - os.write - ( - reinterpret_cast(&p.mass0_), - ReactingParcel::sizeofFields_ - ); os << p.Y(); } diff --git a/src/lagrangian/parcel/parcels/Templates/SprayParcel/SprayParcel.C b/src/lagrangian/parcel/parcels/Templates/SprayParcel/SprayParcel.C index 8cfc7626dd..e543be3242 100644 --- a/src/lagrangian/parcel/parcels/Templates/SprayParcel/SprayParcel.C +++ b/src/lagrangian/parcel/parcels/Templates/SprayParcel/SprayParcel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2023 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -153,6 +153,8 @@ void Foam::SprayParcel::calcAtomisation const scalar dt ) { + if (injector_ == -1) return; + typedef typename TrackCloudType::thermoCloudType thermoCloudType; const CompositionModel& composition = cloud.composition(); @@ -169,7 +171,7 @@ void Foam::SprayParcel::calcAtomisation // Calculate average gas density based on average temperature scalar rhoAv = td.pc()/(R*Tav); - scalar soi = cloud.injectors().timeStart(); + scalar soi = cloud.injectors()[injector_].timeStart(); scalar currentTime = cloud.db().time().value(); const vector& pos = this->position(td.mesh); const vector& injectionPos = this->position0(); @@ -179,10 +181,12 @@ void Foam::SprayParcel::calcAtomisation scalar Urel = mag(this->U()); scalar t0 = max(0.0, currentTime - this->age() - soi); - scalar t1 = min(t0 + dt, cloud.injectors().timeEnd() - soi); + scalar t1 = min(t0 + dt, cloud.injectors()[injector_].timeEnd() - soi); + + scalar rho0 = mass0_/this->volume(d0_); // This should be the vol flow rate from when the parcel was injected - scalar volFlowRate = cloud.injectors().volumeToInject(t0, t1)/dt; + scalar volFlowRate = cloud.injectors()[injector_].massToInject(t0, t1)/rho0; scalar chi = 0.0; if (atomisation.calcChi()) @@ -276,6 +280,7 @@ void Foam::SprayParcel::calcBreakup Urel, Urmag, this->tMom(), + injector_, dChild, parcelMassChild ) @@ -306,7 +311,6 @@ void Foam::SprayParcel::calcBreakup child->ms() = -great; child->injector() = this->injector(); child->tMom() = massChild/(Fcp.Sp() + Fncp.Sp()); - child->user() = 0.0; child->calcDispersion(cloud, td, dt); cloud.addParticle(child); @@ -426,8 +430,7 @@ Foam::SprayParcel::SprayParcel(const SprayParcel& p) tc_(p.tc_), ms_(p.ms_), injector_(p.injector_), - tMom_(p.tMom_), - user_(p.user_) + tMom_(p.tMom_) {} diff --git a/src/lagrangian/parcel/parcels/Templates/SprayParcel/SprayParcel.H b/src/lagrangian/parcel/parcels/Templates/SprayParcel/SprayParcel.H index bf96160e01..2669a93304 100644 --- a/src/lagrangian/parcel/parcels/Templates/SprayParcel/SprayParcel.H +++ b/src/lagrangian/parcel/parcels/Templates/SprayParcel/SprayParcel.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2023 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -146,9 +146,12 @@ protected: // Spray parcel properties - //- Initial droplet diameter + //- Initial droplet diameter [m] scalar d0_; + //- Initial mass [kg] + scalar mass0_; + //- Injection position vector position0_; @@ -176,16 +179,12 @@ protected: //- Stripped parcel mass due to breakup scalar ms_; - //- Injected from injector (needed e.g. for calculating distance - // from injector) - scalar injector_; + //- Injector id + label injector_; //- Momentum relaxation time (needed for calculating parcel acc.) scalar tMom_; - //- Passive scalar (extra variable to be defined by user) - scalar user_; - public: @@ -238,6 +237,9 @@ public: //- Return const access to initial droplet diameter inline scalar d0() const; + //- Return const access to initial mass [kg] + inline scalar mass0() const; + //- Return const access to initial droplet position inline const vector& position0() const; @@ -266,20 +268,20 @@ public: inline scalar ms() const; //- Return const access to injector id - inline scalar injector() const; + inline label injector() const; //- Return const access to momentum relaxation time inline scalar tMom() const; - //- Return const access to passive user scalar - inline scalar user() const; - // Edit //- Return access to initial droplet diameter inline scalar& d0(); + //- Return access to initial mass [kg] + inline scalar& mass0(); + //- Return access to initial droplet position inline vector& position0(); @@ -308,14 +310,11 @@ public: inline scalar& ms(); //- Return access to injector id - inline scalar& injector(); + inline label& injector(); //- Return access to momentum relaxation time inline scalar& tMom(); - //- Return access to passive user scalar - inline scalar& user(); - // Main calculation loop diff --git a/src/lagrangian/parcel/parcels/Templates/SprayParcel/SprayParcelI.H b/src/lagrangian/parcel/parcels/Templates/SprayParcel/SprayParcelI.H index cfbc1432c2..2185e80da0 100644 --- a/src/lagrangian/parcel/parcels/Templates/SprayParcel/SprayParcelI.H +++ b/src/lagrangian/parcel/parcels/Templates/SprayParcel/SprayParcelI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2023 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -118,6 +118,7 @@ inline Foam::SprayParcel::SprayParcel : ParcelType(mesh, coordinates, celli, tetFacei, tetPti, facei), d0_(this->d()), + mass0_(this->mass()), position0_(this->position(mesh)), sigma_(0.0), mu_(0.0), @@ -127,9 +128,8 @@ inline Foam::SprayParcel::SprayParcel yDot_(0.0), tc_(0.0), ms_(0.0), - injector_(1.0), - tMom_(great), - user_(0.0) + injector_(-1), + tMom_(great) {} @@ -143,6 +143,7 @@ inline Foam::SprayParcel::SprayParcel : ParcelType(mesh, position, celli), d0_(this->d()), + mass0_(this->mass()), position0_(this->position(mesh)), sigma_(0.0), mu_(0.0), @@ -152,9 +153,8 @@ inline Foam::SprayParcel::SprayParcel yDot_(0.0), tc_(0.0), ms_(0.0), - injector_(1.0), - tMom_(great), - user_(0.0) + injector_(-1), + tMom_(great) {} @@ -185,6 +185,13 @@ inline Foam::scalar Foam::SprayParcel::d0() const } +template +inline Foam::scalar Foam::SprayParcel::mass0() const +{ + return mass0_; +} + + template inline const Foam::vector& Foam::SprayParcel::position0() const { @@ -249,7 +256,7 @@ inline Foam::scalar Foam::SprayParcel::ms() const template -inline Foam::scalar Foam::SprayParcel::injector() const +inline Foam::label Foam::SprayParcel::injector() const { return injector_; } @@ -263,16 +270,16 @@ inline Foam::scalar Foam::SprayParcel::tMom() const template -inline Foam::scalar Foam::SprayParcel::user() const +inline Foam::scalar& Foam::SprayParcel::d0() { - return user_; + return d0_; } template -inline Foam::scalar& Foam::SprayParcel::d0() +inline Foam::scalar& Foam::SprayParcel::mass0() { - return d0_; + return mass0_; } @@ -340,7 +347,7 @@ inline Foam::scalar& Foam::SprayParcel::ms() template -inline Foam::scalar& Foam::SprayParcel::injector() +inline Foam::label& Foam::SprayParcel::injector() { return injector_; } @@ -353,11 +360,4 @@ inline Foam::scalar& Foam::SprayParcel::tMom() } -template -inline Foam::scalar& Foam::SprayParcel::user() -{ - return user_; -} - - // ************************************************************************* // diff --git a/src/lagrangian/parcel/parcels/Templates/SprayParcel/SprayParcelIO.C b/src/lagrangian/parcel/parcels/Templates/SprayParcel/SprayParcelIO.C index 4e09951e5c..7781a2c470 100644 --- a/src/lagrangian/parcel/parcels/Templates/SprayParcel/SprayParcelIO.C +++ b/src/lagrangian/parcel/parcels/Templates/SprayParcel/SprayParcelIO.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2023 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -42,6 +42,7 @@ Foam::SprayParcel::SprayParcel(Istream& is, bool readFields) : ParcelType(is, readFields), d0_(0.0), + mass0_(0.0), position0_(Zero), sigma_(0.0), mu_(0.0), @@ -51,15 +52,15 @@ Foam::SprayParcel::SprayParcel(Istream& is, bool readFields) yDot_(0.0), tc_(0.0), ms_(0.0), - injector_(1.0), - tMom_(great), - user_(0.0) + injector_(-1), + tMom_(great) { if (readFields) { if (is.format() == IOstream::ASCII) { d0_ = readScalar(is); + mass0_ = readScalar(is); is >> position0_; sigma_ = readScalar(is); mu_ = readScalar(is); @@ -69,9 +70,8 @@ Foam::SprayParcel::SprayParcel(Istream& is, bool readFields) yDot_ = readScalar(is); tc_ = readScalar(is); ms_ = readScalar(is); - injector_ = readScalar(is); + injector_ = readLabel(is); tMom_ = readScalar(is); - user_ = readScalar(is); } else { @@ -115,6 +115,9 @@ void Foam::SprayParcel::readFields IOField d0(c.fieldIOobject("d0", IOobject::MUST_READ), write); c.checkFieldIOobject(c, d0); + IOField mass0(c.fieldIOobject("mass0", IOobject::MUST_READ), write); + c.checkFieldIOobject(c, mass0); + IOField position0 ( c.fieldIOobject("position0", IOobject::MUST_READ), @@ -170,7 +173,7 @@ void Foam::SprayParcel::readFields ); c.checkFieldIOobject(c, ms); - IOField injector + IOField