From 34888963d3b389f1d2d809575f7bed3a78b125fe Mon Sep 17 00:00:00 2001 From: andy Date: Fri, 25 Feb 2011 11:23:22 +0000 Subject: [PATCH] ENH: Abstracted out collisions for parcels and clouds and restructured --- src/lagrangian/intermediate/Make/files | 4 + .../Templates/CollidingCloud/CollidingCloud.C | 209 ++++++++++++++ .../Templates/CollidingCloud/CollidingCloud.H | 232 ++++++++++++++++ .../CollidingCloud/CollidingCloudI.H | 59 ++++ .../Templates/KinematicCloud/KinematicCloud.C | 85 +----- .../Templates/KinematicCloud/KinematicCloud.H | 34 +-- .../KinematicCloud/KinematicCloudI.H | 23 -- .../basicKinematicCollidingCloud.H | 60 ++++ .../CollidingParcel/CollidingParcel.C | 171 ++++++++++++ .../CollidingParcel/CollidingParcel.H | 234 ++++++++++++++++ .../CollidingParcel/CollidingParcelI.H | 102 +++++++ .../CollidingParcel/CollidingParcelIO.C | 261 ++++++++++++++++++ .../CollisionRecordList/CollisionRecordList.C | 2 +- .../CollisionRecordList/CollisionRecordList.H | 2 +- .../CollisionRecordListI.H | 2 +- .../PairCollisionRecord/PairCollisionRecord.C | 2 +- .../PairCollisionRecord/PairCollisionRecord.H | 2 +- .../PairCollisionRecordI.H | 2 +- .../PairCollisionRecordIO.C | 2 +- .../WallCollisionRecord/WallCollisionRecord.C | 2 +- .../WallCollisionRecord/WallCollisionRecord.H | 2 +- .../WallCollisionRecordI.H | 2 +- .../WallCollisionRecordIO.C | 2 +- .../KinematicParcel/KinematicParcel.C | 115 +++----- .../KinematicParcel/KinematicParcel.H | 19 -- .../KinematicParcel/KinematicParcelI.H | 18 -- .../KinematicParcel/KinematicParcelIO.C | 133 +-------- .../basicKinematicCollidingParcel.H | 61 ++++ .../defineBasicKinematicCollidingParcel.C | 38 +++ ...keBasicKinematicCollidingParcelSubmodels.C | 55 ++++ 30 files changed, 1556 insertions(+), 379 deletions(-) create mode 100644 src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloud.C create mode 100644 src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloud.H create mode 100644 src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloudI.H create mode 100644 src/lagrangian/intermediate/clouds/derived/basicKinematicCollidingCloud/basicKinematicCollidingCloud.H create mode 100644 src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcel.C create mode 100644 src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcel.H create mode 100644 src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcelI.H create mode 100644 src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcelIO.C rename src/lagrangian/intermediate/parcels/Templates/{KinematicParcel => CollidingParcel}/CollisionRecordList/CollisionRecordList.C (99%) rename src/lagrangian/intermediate/parcels/Templates/{KinematicParcel => CollidingParcel}/CollisionRecordList/CollisionRecordList.H (99%) rename src/lagrangian/intermediate/parcels/Templates/{KinematicParcel => CollidingParcel}/CollisionRecordList/CollisionRecordListI.H (96%) rename src/lagrangian/intermediate/parcels/Templates/{KinematicParcel => CollidingParcel}/CollisionRecordList/PairCollisionRecord/PairCollisionRecord.C (97%) rename src/lagrangian/intermediate/parcels/Templates/{KinematicParcel => CollidingParcel}/CollisionRecordList/PairCollisionRecord/PairCollisionRecord.H (98%) rename src/lagrangian/intermediate/parcels/Templates/{KinematicParcel => CollidingParcel}/CollisionRecordList/PairCollisionRecord/PairCollisionRecordI.H (97%) rename src/lagrangian/intermediate/parcels/Templates/{KinematicParcel => CollidingParcel}/CollisionRecordList/PairCollisionRecord/PairCollisionRecordIO.C (97%) rename src/lagrangian/intermediate/parcels/Templates/{KinematicParcel => CollidingParcel}/CollisionRecordList/WallCollisionRecord/WallCollisionRecord.C (97%) rename src/lagrangian/intermediate/parcels/Templates/{KinematicParcel => CollidingParcel}/CollisionRecordList/WallCollisionRecord/WallCollisionRecord.H (98%) rename src/lagrangian/intermediate/parcels/Templates/{KinematicParcel => CollidingParcel}/CollisionRecordList/WallCollisionRecord/WallCollisionRecordI.H (98%) rename src/lagrangian/intermediate/parcels/Templates/{KinematicParcel => CollidingParcel}/CollisionRecordList/WallCollisionRecord/WallCollisionRecordIO.C (97%) create mode 100644 src/lagrangian/intermediate/parcels/derived/basicKinematicCollidingParcel/basicKinematicCollidingParcel.H create mode 100644 src/lagrangian/intermediate/parcels/derived/basicKinematicCollidingParcel/defineBasicKinematicCollidingParcel.C create mode 100644 src/lagrangian/intermediate/parcels/derived/basicKinematicCollidingParcel/makeBasicKinematicCollidingParcelSubmodels.C diff --git a/src/lagrangian/intermediate/Make/files b/src/lagrangian/intermediate/Make/files index a9577d66cf..7cbe15fe5c 100644 --- a/src/lagrangian/intermediate/Make/files +++ b/src/lagrangian/intermediate/Make/files @@ -19,6 +19,10 @@ KINEMATICPARCEL=$(DERIVEDPARCELS)/basicKinematicParcel $(KINEMATICPARCEL)/defineBasicKinematicParcel.C $(KINEMATICPARCEL)/makeBasicKinematicParcelSubmodels.C +KINEMATICCOLLIDINGPARCEL=$(DERIVEDPARCELS)/basicKinematicCollidingParcel +$(KINEMATICCOLLIDINGPARCEL)/defineBasicKinematicCollidingParcel.C +$(KINEMATICCOLLIDINGPARCEL)/makeBasicKinematicCollidingParcelSubmodels.C + /* thermo parcel sub-models */ THERMOPARCEL=$(DERIVEDPARCELS)/basicThermoParcel diff --git a/src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloud.C b/src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloud.C new file mode 100644 index 0000000000..d6b6c9b0ca --- /dev/null +++ b/src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloud.C @@ -0,0 +1,209 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2011-2011 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 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 "CollidingCloud.H" +#include "CollisionModel.H" + +// * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * // + +template +void Foam::CollidingCloud::setModels() +{ + collisionModel_.reset + ( + CollisionModel >::New + ( + this->subModelProperties(), + *this + ).ptr() + ); +} + + +template +template +void Foam::CollidingCloud::moveCollide(TrackData& td) +{ + td.part() = TrackData::tpVelocityHalfStep; + CloudType::move(td, this->solution().deltaT()); + + td.part() = TrackData::tpLinearTrack; + CloudType::move(td, this->solution().deltaT()); + + // td.part() = TrackData::tpRotationalTrack; + // CloudType::move(td); + + this->updateCellOccupancy(); + + this->collision().collide(); + + td.part() = TrackData::tpVelocityHalfStep; + CloudType::move(td, this->solution().deltaT()); +} + + + +template +void Foam::CollidingCloud::cloudReset(CollidingCloud& c) +{ + CloudType::cloudReset(c); + + collisionModel_.reset(c.collisionModel_.ptr()); +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template +Foam::CollidingCloud::CollidingCloud +( + const word& cloudName, + const volScalarField& rho, + const volVectorField& U, + const volScalarField& mu, + const dimensionedVector& g, + bool readFields +) +: + CloudType(cloudName, rho, U, mu, g, false), + collisionModel_(NULL) +{ + if (this->solution().active()) + { + setModels(); + } + + if (readFields) + { + parcelType::readFields(*this); + } +} + + +template +Foam::CollidingCloud::CollidingCloud +( + CollidingCloud& c, + const word& name +) +: + CloudType(c, name), + collisionModel_(c.collisionModel_->clone()) +{} + + +template +Foam::CollidingCloud::CollidingCloud +( + const fvMesh& mesh, + const word& name, + const CollidingCloud& c +) +: + CloudType(mesh, name, c), + collisionModel_(NULL) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template +Foam::CollidingCloud::~CollidingCloud() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template +void Foam::CollidingCloud::storeState() +{ + cloudCopyPtr_.reset + ( + static_cast*> + ( + clone(this->name() + "Copy").ptr() + ) + ); +} + + +template +void Foam::CollidingCloud::restoreState() +{ + cloudReset(cloudCopyPtr_()); + cloudCopyPtr_.clear(); +} + + +template +void Foam::CollidingCloud::evolve() +{ + if (this->solution().canEvolve()) + { + typename parcelType::template + TrackingData > td(*this); + + this->solve(td); + } +} + + +template +template +void Foam::CollidingCloud::motion(TrackData& td) +{ + // Sympletic leapfrog integration of particle forces: + // + apply half deltaV with stored force + // + move positions with new velocity + // + calculate forces in new position + // + apply half deltaV with new force + + label nSubCycles = collision().nSubCycles(); + + if (nSubCycles > 1) + { + Info<< " " << nSubCycles << " move-collide subCycles" << endl; + + subCycleTime moveCollideSubCycle + ( + const_cast(this->db().time()), + nSubCycles + ); + + while(!(++moveCollideSubCycle).end()) + { + moveCollide(td); + } + + moveCollideSubCycle.endSubCycle(); + } + else + { + moveCollide(td); + } +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloud.H b/src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloud.H new file mode 100644 index 0000000000..9ca29cfd56 --- /dev/null +++ b/src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloud.H @@ -0,0 +1,232 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2011-2011 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 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::CollidingCloud + +Description + Adds coolisions to kinematic clouds + +SourceFiles + CollidingCloudI.H + CollidingCloud.C + +\*---------------------------------------------------------------------------*/ + +#ifndef CollidingCloud_H +#define CollidingCloud_H + +#include "particle.H" +#include "Cloud.H" +#include "IOdictionary.H" +#include "autoPtr.H" +#include "fvMesh.H" +#include "volFields.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// Forward declaration of classes + +template +class CollisionModel; + +/*---------------------------------------------------------------------------*\ + Class CollidingCloud Declaration +\*---------------------------------------------------------------------------*/ + +template +class CollidingCloud +: + public CloudType +{ +public: + + // Public typedefs + + //- Redefine particle type as parcel type + typedef typename CloudType::particleType parcelType; + + +private: + + // Private data + + //- Cloud copy pointer + autoPtr > cloudCopyPtr_; + + + // Private Member Functions + + //- Disallow default bitwise copy construct + CollidingCloud(const CollidingCloud&); + + //- Disallow default bitwise assignment + void operator=(const CollidingCloud&); + + +protected: + + // Protected data + + // References to the cloud sub-models + + //- Collision model + autoPtr > > + collisionModel_; + + + // Initialisation + + //- Set cloud sub-models + void setModels(); + + + // Cloud evolution functions + + //- Move-collide particles + template + void moveCollide(TrackData& td); + + //- Reset state of cloud + void cloudReset(CollidingCloud& c); + + +public: + + typedef CloudType cloudType; + + // Constructors + + //- Construct given carrier gas fields + CollidingCloud + ( + const word& cloudName, + const volScalarField& rho, + const volVectorField& U, + const volScalarField& mu, + const dimensionedVector& g, + bool readFields = true + ); + + //- Copy constructor with new name + CollidingCloud + ( + CollidingCloud& c, + const word& name + ); + + //- Copy constructor with new name - creates bare cloud + CollidingCloud + ( + const fvMesh& mesh, + const word& name, + const CollidingCloud& c + ); + + //- Construct and return clone based on (this) with new name + virtual autoPtr > clone(const word& name) + { + return autoPtr > + ( + new CollidingCloud(*this, name) + ); + } + + //- Construct and return bare clone based on (this) with new name + virtual autoPtr > cloneBare(const word& name) const + { + return autoPtr > + ( + new CollidingCloud(this->mesh(), name, *this) + ); + } + + + //- Destructor + virtual ~CollidingCloud(); + + + // Member Functions + + // Access + + //- Return a reference to the cloud copy + inline const CollidingCloud& cloudCopy() const; + + //- If the collision model controls the wall interaction, + // then the wall impact distance should be zero. + // Otherwise, it should be allowed to be the value from + // the Parcel. + inline bool hasWallImpactDistance() const; + + + // Sub-models + + //- Return const access to the collision model + inline const CollisionModel >& + collision() const; + + //- Return reference to the collision model + inline CollisionModel >& + collision(); + + + // Evolution + + //- Store the current cloud state + void storeState(); + + //- Reset the current cloud to the previously stored state + void restoreState(); + + //- Evolve the cloud + void evolve(); + + //- Particle motion + template + void motion(TrackData& td); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "CollidingCloudI.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "CollidingCloud.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloudI.H b/src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloudI.H new file mode 100644 index 0000000000..fb473bc0b3 --- /dev/null +++ b/src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloudI.H @@ -0,0 +1,59 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2011 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 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 . + +\*---------------------------------------------------------------------------*/ + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template +inline const Foam::CollidingCloud& +Foam::CollidingCloud::cloudCopy() const +{ + return cloudCopyPtr_(); +} + + +template +inline bool Foam::CollidingCloud::hasWallImpactDistance() const +{ + return !collision().controlsWallInteraction(); +} + + +template +inline const Foam::CollisionModel >& +Foam::CollidingCloud::collision() const +{ + return collisionModel_(); +} + + +template +inline Foam::CollisionModel >& +Foam::CollidingCloud::collision() +{ + return collisionModel_(); +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C index 5f30469b49..da0ee829bb 100644 --- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C +++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C @@ -28,7 +28,6 @@ License #include "interpolation.H" #include "subCycleTime.H" -#include "CollisionModel.H" #include "DispersionModel.H" #include "InjectionModel.H" #include "PatchInteractionModel.H" @@ -190,15 +189,6 @@ bool Foam::KinematicCloud::cloudSolution::output() const template void Foam::KinematicCloud::setModels() { - collisionModel_.reset - ( - CollisionModel >::New - ( - subModelProperties_, - *this - ).ptr() - ); - dispersionModel_.reset ( DispersionModel >::New @@ -372,7 +362,7 @@ void Foam::KinematicCloud::evolveCloud(TrackData& td) // Assume that motion will update the cellOccupancy as necessary // before it is required. - motion(td); + td.cloud().motion(td); } else { @@ -386,64 +376,6 @@ void Foam::KinematicCloud::evolveCloud(TrackData& td) } -template -template -void Foam::KinematicCloud::motion(TrackData& td) -{ - // Sympletic leapfrog integration of particle forces: - // + apply half deltaV with stored force - // + move positions with new velocity - // + calculate forces in new position - // + apply half deltaV with new force - - label nSubCycles = collision().nSubCycles(); - - if (nSubCycles > 1) - { - Info<< " " << nSubCycles << " move-collide subCycles" << endl; - - subCycleTime moveCollideSubCycle - ( - const_cast(this->db().time()), - nSubCycles - ); - - while(!(++moveCollideSubCycle).end()) - { - moveCollide(td); - } - - moveCollideSubCycle.endSubCycle(); - } - else - { - moveCollide(td); - } -} - - -template -template -void Foam::KinematicCloud::moveCollide(TrackData& td) -{ - td.part() = TrackData::tpVelocityHalfStep; - CloudType::move(td, solution_.deltaT()); - - td.part() = TrackData::tpLinearTrack; - CloudType::move(td, solution_.deltaT()); - - // td.part() = TrackData::tpRotationalTrack; - // CloudType::move(td); - - updateCellOccupancy(); - - this->collision().collide(); - - td.part() = TrackData::tpVelocityHalfStep; - CloudType::move(td, solution_.deltaT()); -} - - template void Foam::KinematicCloud::postEvolve() { @@ -472,7 +404,6 @@ void Foam::KinematicCloud::cloudReset(KinematicCloud& c) forces_.transfer(c.forces_); - collisionModel_.reset(c.collisionModel_.ptr()); dispersionModel_.reset(c.dispersionModel_.ptr()); injectionModel_.reset(c.injectionModel_.ptr()); patchInteractionModel_.reset(c.patchInteractionModel_.ptr()); @@ -537,7 +468,6 @@ Foam::KinematicCloud::KinematicCloud ), solution_.active() ), - collisionModel_(NULL), dispersionModel_(NULL), injectionModel_(NULL), patchInteractionModel_(NULL), @@ -616,7 +546,6 @@ Foam::KinematicCloud::KinematicCloud mu_(c.mu_), g_(c.g_), forces_(c.forces_), - collisionModel_(c.collisionModel_->clone()), dispersionModel_(c.dispersionModel_->clone()), injectionModel_(c.injectionModel_->clone()), patchInteractionModel_(c.patchInteractionModel_->clone()), @@ -692,7 +621,6 @@ Foam::KinematicCloud::KinematicCloud mu_(c.mu_), g_(c.g_), forces_(*this, mesh), - collisionModel_(NULL), dispersionModel_(NULL), injectionModel_(NULL), patchInteractionModel_(NULL), @@ -799,6 +727,17 @@ void Foam::KinematicCloud::evolve() } +template +template +void Foam::KinematicCloud::motion(TrackData& td) +{ + td.part() = TrackData::tpLinearTrack; + CloudType::move(td, solution_.deltaT()); + + updateCellOccupancy(); +} + + template void Foam::KinematicCloud::info() const { diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H index e003469aed..5ae19c02a6 100644 --- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H +++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H @@ -35,7 +35,6 @@ Description - pressure gradient - sub-models: - - Collision model - Dispersion model - Injection model - Patch interaction model @@ -73,9 +72,6 @@ namespace Foam // Forward declaration of classes -template -class CollisionModel; - template class DispersionModel; @@ -338,10 +334,6 @@ protected: // References to the cloud sub-models - //- Collision model - autoPtr > > - collisionModel_; - //- Dispersion model autoPtr > > dispersionModel_; @@ -404,14 +396,6 @@ protected: template void evolveCloud(TrackData& td); - //- Particle motion - template - void motion(TrackData& td); - - //- Move-collide particles - template - void moveCollide(TrackData& td); - //- Post-evolve void postEvolve(); @@ -481,12 +465,6 @@ public: //- Return a reference to the cloud copy inline const KinematicCloud& cloudCopy() const; - //- If the collision model controls the wall interaction, - // then the wall impact distance should be zero. - // Otherwise, it should be allowed to be the value from - // the Parcel. - inline bool hasWallImpactDistance() const; - // References to the mesh and databases @@ -547,14 +525,6 @@ public: // Sub-models - //- Return const access to the collision model - inline const CollisionModel >& - collision() const; - - //- Return reference to the collision model - inline CollisionModel >& - collision(); - //- Return const-access to the dispersion model inline const DispersionModel >& dispersion() const; @@ -687,6 +657,10 @@ public: //- Evolve the cloud void evolve(); + //- Particle motion + template + void motion(TrackData& td); + //- Print cloud information void info() const; }; diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H index 87a7e9b534..86f5b99a5e 100644 --- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H +++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H @@ -172,13 +172,6 @@ Foam::KinematicCloud::cloudCopy() const } -template -inline bool Foam::KinematicCloud::hasWallImpactDistance() const -{ - return !collision().controlsWallInteraction(); -} - - template inline const Foam::fvMesh& Foam::KinematicCloud::mesh() const { @@ -263,22 +256,6 @@ Foam::KinematicCloud::forces() const } -template -inline const Foam::CollisionModel >& -Foam::KinematicCloud::collision() const -{ - return collisionModel_(); -} - - -template -inline Foam::CollisionModel >& -Foam::KinematicCloud::collision() -{ - return collisionModel_(); -} - - template inline const Foam::DispersionModel >& Foam::KinematicCloud::dispersion() const diff --git a/src/lagrangian/intermediate/clouds/derived/basicKinematicCollidingCloud/basicKinematicCollidingCloud.H b/src/lagrangian/intermediate/clouds/derived/basicKinematicCollidingCloud/basicKinematicCollidingCloud.H new file mode 100644 index 0000000000..a0cb27757b --- /dev/null +++ b/src/lagrangian/intermediate/clouds/derived/basicKinematicCollidingCloud/basicKinematicCollidingCloud.H @@ -0,0 +1,60 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2011-2011 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 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::basicKinematicCollidingCloud + +Description + Cloud class to introduce kinematic colliding parcels + +\*---------------------------------------------------------------------------*/ + +#ifndef basicKinematicCollidingCloud_H +#define basicKinematicCollidingCloud_H + +#include "Cloud.H" +#include "KinematicCloud.H" +#include "CollidingCloud.H" +#include "basicKinematicCollidingParcel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + typedef CollidingCloud + < + KinematicCloud + < + Cloud + < + basicKinematicCollidingParcel + > + > + > basicKinematicCollidingCloud; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcel.C b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcel.C new file mode 100644 index 0000000000..0d10e5fb6c --- /dev/null +++ b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcel.C @@ -0,0 +1,171 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2011 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 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 "CollidingParcel.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template +Foam::CollidingParcel::CollidingParcel +( + const CollidingParcel& p +) +: + ParcelType(p), + collisionRecords_(p.collisionRecords_) +{} + + +template +Foam::CollidingParcel::CollidingParcel +( + const CollidingParcel& p, + const polyMesh& mesh +) +: + ParcelType(p, mesh), + collisionRecords_(p.collisionRecords_) +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template +template +bool Foam::CollidingParcel::move +( + TrackData& td, + const scalar trackTime +) +{ + typename TrackData::cloudType::parcelType& p = + static_cast(*this); + + td.switchProcessor = false; + td.keepParticle = true; + + const polyMesh& mesh = td.cloud().pMesh(); + const polyBoundaryMesh& pbMesh = mesh.boundaryMesh(); + const scalarField& V = mesh.cellVolumes(); + + switch (td.part()) + { + case TrackData::tpVelocityHalfStep: + { + // First and last leapfrog velocity adjust part, required + // before and after tracking and force calculation + + p.U() += 0.5*trackTime*p.f()/p.mass(); + + p.angularMomentum() += 0.5*trackTime*p.torque(); + + break; + } + + case TrackData::tpLinearTrack: + { + scalar tEnd = (1.0 - p.stepFraction())*trackTime; + const scalar dtMax = tEnd; + + while (td.keepParticle && !td.switchProcessor && tEnd > ROOTVSMALL) + { + // Apply correction to position for reduced-D cases + meshTools::constrainToMeshCentre(mesh, p.position()); + + // Set the Lagrangian time-step + scalar dt = min(dtMax, tEnd); + + // Remember which cell the parcel is in since this + // will change if a face is hit + const label cellI = p.cell(); + + const scalar magU = mag(p.U()); + if (p.active() && magU > ROOTVSMALL) + { + const scalar d = dt*magU; + const scalar maxCo = td.cloud().solution().maxCo(); + const scalar dCorr = min(d, maxCo*cbrt(V[cellI])); + dt *= + dCorr/d + *p.trackToFace(p.position() + dCorr*p.U()/magU, td); + } + + tEnd -= dt; + p.stepFraction() = 1.0 - tEnd/trackTime; + + // Avoid problems with extremely small timesteps + if (dt > ROOTVSMALL) + { + // Update cell based properties + p.setCellValues(td, dt, cellI); + + if (td.cloud().solution().cellValueSourceCorrection()) + { + p.cellValueSourceCorrection(td, dt, cellI); + } + + p.calc(td, dt, cellI); + } + + if (p.onBoundary() && td.keepParticle) + { + if (isA(pbMesh[p.patch(p.face())])) + { + td.switchProcessor = true; + } + } + + p.age() += dt; + } + + break; + } + + case TrackData::tpRotationalTrack: + { + notImplemented("TrackData::tpRotationalTrack"); + + break; + } + + default: + { + FatalErrorIn + ( + "CollidingParcel::move(TrackData&, const scalar)" + ) << td.part() << " is an invalid part of the tracking method." + << abort(FatalError); + } + } + + return td.keepParticle; +} + + +// * * * * * * * * * * * * * * IOStream operators * * * * * * * * * * * * * // + +#include "CollidingParcelIO.C" + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcel.H b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcel.H new file mode 100644 index 0000000000..75de5f1cde --- /dev/null +++ b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcel.H @@ -0,0 +1,234 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2011-2011 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 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::CollidingParcel + +Description + Wrapper around kinematic parcel types to add collision modelling + +SourceFiles + CollidingParcelI.H + CollidingParcel.C + CollidingParcelIO.C + +\*---------------------------------------------------------------------------*/ + +#ifndef CollidingParcel_H +#define CollidingParcel_H + +#include "particle.H" + +#include "CollisionRecordList.H" +#include "labelFieldIOField.H" +#include "vectorFieldIOField.H" + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +typedef CollisionRecordList collisionRecordList; +typedef vectorFieldCompactIOField pairDataFieldCompactIOField; +typedef vectorFieldCompactIOField wallDataFieldCompactIOField; + +template +class CollidingParcel; + +// Forward declaration of friend functions + +template +Ostream& operator<< +( + Ostream&, + const CollidingParcel& +); + +/*---------------------------------------------------------------------------*\ + Class CollidingParcel Declaration +\*---------------------------------------------------------------------------*/ + +template +class CollidingParcel +: + public ParcelType +{ +protected: + + // Protected data + + //- Particle collision records + collisionRecordList collisionRecords_; + + +public: + + // Static data members + + //- String representation of properties + static string propHeader; + + //- Runtime type information + TypeName("CollidingParcel"); + + + // Constructors + + //- Construct from owner, position, and cloud owner + // Other properties initialised as null + inline CollidingParcel + ( + const polyMesh& mesh, + const vector& position, + const label cellI, + const label tetFaceI, + const label tetPtI + ); + + //- Construct from components + inline CollidingParcel + ( + const polyMesh& mesh, + const vector& position, + const label cellI, + const label tetFaceI, + const label tetPtI, + const label typeId, + const scalar nParticle0, + const scalar d0, + const scalar dTarget0, + const vector& U0, + const vector& f0, + const vector& angularMomentum0, + const vector& torque0, + const typename ParcelType::constantProperties& constProps + ); + + //- Construct from Istream + CollidingParcel + ( + const polyMesh& mesh, + Istream& is, + bool readFields = true + ); + + //- Construct as a copy + CollidingParcel(const CollidingParcel& p); + + //- Construct as a copy + CollidingParcel(const CollidingParcel& p, const polyMesh& mesh); + + //- Construct and return a (basic particle) clone + virtual autoPtr clone() const + { + return autoPtr(new CollidingParcel(*this)); + } + + //- Construct and return a (basic particle) clone + virtual autoPtr clone(const polyMesh& mesh) const + { + return autoPtr(new CollidingParcel(*this, mesh)); + } + + //- Factory class to read-construct particles used for + // parallel transfer + class iNew + { + const polyMesh& mesh_; + + public: + + iNew(const polyMesh& mesh) + : + mesh_(mesh) + {} + + autoPtr > operator()(Istream& is) const + { + return autoPtr > + ( + new CollidingParcel(mesh_, is, true) + ); + } + }; + + + // Member Functions + + // Access + + //- Return const access to the collision records + inline const collisionRecordList& collisionRecords() const; + + //- Return access to collision records + inline collisionRecordList& collisionRecords(); + + + // Tracking + + //- Move the parcel + template + bool move(TrackData& td, const scalar trackTime); + + + // I-O + + //- Read + template + static void readFields(CloudType& c); + + //- Write + template + static void writeFields(const CloudType& c); + + + // Ostream Operator + + friend Ostream& operator<< + ( + Ostream&, + const CollidingParcel& + ); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "CollidingParcelI.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository + #include "CollidingParcel.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcelI.H b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcelI.H new file mode 100644 index 0000000000..3b8a1f8fd0 --- /dev/null +++ b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcelI.H @@ -0,0 +1,102 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2011-2011 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 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 . + +\*---------------------------------------------------------------------------*/ + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template +inline Foam::CollidingParcel::CollidingParcel +( + const polyMesh& owner, + const vector& position, + const label cellI, + const label tetFaceI, + const label tetPtI +) +: + ParcelType(owner, position, cellI, tetFaceI, tetPtI), + collisionRecords_() +{} + + +template +inline Foam::CollidingParcel::CollidingParcel +( + const polyMesh& owner, + const vector& position, + const label cellI, + const label tetFaceI, + const label tetPtI, + const label typeId, + const scalar nParticle0, + const scalar d0, + const scalar dTarget0, + const vector& U0, + const vector& f0, + const vector& angularMomentum0, + const vector& torque0, + const typename ParcelType::constantProperties& constProps +) +: + ParcelType + ( + owner, + position, + cellI, + tetFaceI, + tetPtI, + typeId, + nParticle0, + d0, + dTarget0, + U0, + f0, + angularMomentum0, + torque0, + constProps + ), + collisionRecords_() +{} + + +// * * * * * * * CollidingParcel Member Functions * * * * * * * // + + +template +inline const Foam::collisionRecordList& +Foam::CollidingParcel::collisionRecords() const +{ + return collisionRecords_; +} + + +template +inline Foam::collisionRecordList& +Foam::CollidingParcel::collisionRecords() +{ + return collisionRecords_; +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcelIO.C b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcelIO.C new file mode 100644 index 0000000000..61f7e66e43 --- /dev/null +++ b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcelIO.C @@ -0,0 +1,261 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2011-2011 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 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 "CollidingParcel.H" +#include "IOstreams.H" +#include "IOField.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +template +Foam::string Foam::CollidingParcel::propHeader = + ParcelType::propHeader + + " collisionRecordsPairAccessed" + + " collisionRecordsPairOrigProcOfOther" + + " collisionRecordsPairOrigIdOfOther" + + " (collisionRecordsPairData)" + + " collisionRecordsWallAccessed" + + " collisionRecordsWallPRel" + + " (collisionRecordsWallData)"; + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template +Foam::CollidingParcel::CollidingParcel +( + const polyMesh& mesh, + Istream& is, + bool readFields +) +: + ParcelType(mesh, is, readFields), + collisionRecords_() +{ + if (readFields) + { + is >> collisionRecords_; + } + + // Check state of Istream + is.check + ( + "CollidingParcel::Collisions" + "(const polyMesh&, Istream&, bool)" + ); +} + + +template +template +void Foam::CollidingParcel::readFields(CloudType& c) +{ + if (!c.size()) + { + return; + } + + ParcelType::readFields(c); + + labelFieldCompactIOField collisionRecordsPairAccessed + ( + c.fieldIOobject("collisionRecordsPairAccessed", IOobject::MUST_READ) + ); + c.checkFieldFieldIOobject(c, collisionRecordsPairAccessed); + + labelFieldCompactIOField collisionRecordsPairOrigProcOfOther + ( + c.fieldIOobject + ( + "collisionRecordsPairOrigProcOfOther", + IOobject::MUST_READ + ) + ); + c.checkFieldFieldIOobject(c, collisionRecordsPairOrigProcOfOther); + + labelFieldCompactIOField collisionRecordsPairOrigIdOfOther + ( + c.fieldIOobject + ( + "collisionRecordsPairOrigIdOfOther", + IOobject::MUST_READ + ) + ); + c.checkFieldFieldIOobject(c, collisionRecordsPairOrigProcOfOther); + + pairDataFieldCompactIOField collisionRecordsPairData + ( + c.fieldIOobject("collisionRecordsPairData", IOobject::MUST_READ) + ); + c.checkFieldFieldIOobject(c, collisionRecordsPairData); + + labelFieldCompactIOField collisionRecordsWallAccessed + ( + c.fieldIOobject("collisionRecordsWallAccessed", IOobject::MUST_READ) + ); + c.checkFieldFieldIOobject(c, collisionRecordsWallAccessed); + + vectorFieldCompactIOField collisionRecordsWallPRel + ( + c.fieldIOobject("collisionRecordsWallPRel", IOobject::MUST_READ) + ); + c.checkFieldFieldIOobject(c, collisionRecordsWallPRel); + + wallDataFieldCompactIOField collisionRecordsWallData + ( + c.fieldIOobject("collisionRecordsWallData", IOobject::MUST_READ) + ); + c.checkFieldFieldIOobject(c, collisionRecordsWallData); + + label i = 0; + + forAllIter(typename CloudType, c, iter) + { + CollidingParcel& p = iter(); + + p.collisionRecords_ = collisionRecordList + ( + collisionRecordsPairAccessed[i], + collisionRecordsPairOrigProcOfOther[i], + collisionRecordsPairOrigIdOfOther[i], + collisionRecordsPairData[i], + collisionRecordsWallAccessed[i], + collisionRecordsWallPRel[i], + collisionRecordsWallData[i] + ); + + i++; + } +} + + +template +template +void Foam::CollidingParcel::writeFields(const CloudType& c) +{ + ParcelType::writeFields(c); + + label np = c.size(); + + labelFieldCompactIOField collisionRecordsPairAccessed + ( + c.fieldIOobject("collisionRecordsPairAccessed", IOobject::NO_READ), + np + ); + labelFieldCompactIOField collisionRecordsPairOrigProcOfOther + ( + c.fieldIOobject + ( + "collisionRecordsPairOrigProcOfOther", + IOobject::NO_READ + ), + np + ); + labelFieldCompactIOField collisionRecordsPairOrigIdOfOther + ( + c.fieldIOobject("collisionRecordsPairOrigIdOfOther", IOobject::NO_READ), + np + ); + pairDataFieldCompactIOField collisionRecordsPairData + ( + c.fieldIOobject("collisionRecordsPairData", IOobject::NO_READ), + np + ); + labelFieldCompactIOField collisionRecordsWallAccessed + ( + c.fieldIOobject("collisionRecordsWallAccessed", IOobject::NO_READ), + np + ); + vectorFieldCompactIOField collisionRecordsWallPRel + ( + c.fieldIOobject("collisionRecordsWallPRel", IOobject::NO_READ), + np + ); + wallDataFieldCompactIOField collisionRecordsWallData + ( + c.fieldIOobject("collisionRecordsWallData", IOobject::NO_READ), + np + ); + + label i = 0; + + forAllConstIter(typename CloudType, c, iter) + { + const CollidingParcel& p = iter(); + + collisionRecordsPairAccessed[i] = p.collisionRecords().pairAccessed(); + collisionRecordsPairOrigProcOfOther[i] = + p.collisionRecords().pairOrigProcOfOther(); + collisionRecordsPairOrigIdOfOther[i] = + p.collisionRecords().pairOrigIdOfOther(); + collisionRecordsPairData[i] = p.collisionRecords().pairData(); + collisionRecordsWallAccessed[i] = p.collisionRecords().wallAccessed(); + collisionRecordsWallPRel[i] = p.collisionRecords().wallPRel(); + collisionRecordsWallData[i] = p.collisionRecords().wallData(); + + i++; + } + + collisionRecordsPairAccessed.write(); + collisionRecordsPairOrigProcOfOther.write(); + collisionRecordsPairOrigIdOfOther.write(); + collisionRecordsPairData.write(); + collisionRecordsWallAccessed.write(); + collisionRecordsWallPRel.write(); + collisionRecordsWallData.write(); +} + + +// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * // + +template +Foam::Ostream& Foam::operator<< +( + Ostream& os, + const CollidingParcel& p +) +{ + if (os.format() == IOstream::ASCII) + { + os << static_cast(p) + << token::SPACE << p.collisionRecords(); + } + else + { + os << static_cast(p) + << p.collisionRecords(); + } + + // Check state of Ostream + os.check + ( + "Ostream& operator<<(Ostream&, const CollidingParcel&)" + ); + + return os; +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/CollisionRecordList.C b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollisionRecordList/CollisionRecordList.C similarity index 99% rename from src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/CollisionRecordList.C rename to src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollisionRecordList/CollisionRecordList.C index 4e80d16d6f..ca10133408 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/CollisionRecordList.C +++ b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollisionRecordList/CollisionRecordList.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2009-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/CollisionRecordList.H b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollisionRecordList/CollisionRecordList.H similarity index 99% rename from src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/CollisionRecordList.H rename to src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollisionRecordList/CollisionRecordList.H index a933b35ca0..7df2d31f00 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/CollisionRecordList.H +++ b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollisionRecordList/CollisionRecordList.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2009-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/CollisionRecordListI.H b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollisionRecordList/CollisionRecordListI.H similarity index 96% rename from src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/CollisionRecordListI.H rename to src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollisionRecordList/CollisionRecordListI.H index 0880662a40..ba8fa7f6a7 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/CollisionRecordListI.H +++ b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollisionRecordList/CollisionRecordListI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2010-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2010-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/PairCollisionRecord/PairCollisionRecord.C b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollisionRecordList/PairCollisionRecord/PairCollisionRecord.C similarity index 97% rename from src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/PairCollisionRecord/PairCollisionRecord.C rename to src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollisionRecordList/PairCollisionRecord/PairCollisionRecord.C index e20e58c433..dd2ac1adce 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/PairCollisionRecord/PairCollisionRecord.C +++ b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollisionRecordList/PairCollisionRecord/PairCollisionRecord.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2009-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/PairCollisionRecord/PairCollisionRecord.H b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollisionRecordList/PairCollisionRecord/PairCollisionRecord.H similarity index 98% rename from src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/PairCollisionRecord/PairCollisionRecord.H rename to src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollisionRecordList/PairCollisionRecord/PairCollisionRecord.H index 5604efd549..c1ff069eb9 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/PairCollisionRecord/PairCollisionRecord.H +++ b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollisionRecordList/PairCollisionRecord/PairCollisionRecord.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2009-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/PairCollisionRecord/PairCollisionRecordI.H b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollisionRecordList/PairCollisionRecord/PairCollisionRecordI.H similarity index 97% rename from src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/PairCollisionRecord/PairCollisionRecordI.H rename to src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollisionRecordList/PairCollisionRecord/PairCollisionRecordI.H index 4c0d3abc87..7d747246bb 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/PairCollisionRecord/PairCollisionRecordI.H +++ b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollisionRecordList/PairCollisionRecord/PairCollisionRecordI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2009-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/PairCollisionRecord/PairCollisionRecordIO.C b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollisionRecordList/PairCollisionRecord/PairCollisionRecordIO.C similarity index 97% rename from src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/PairCollisionRecord/PairCollisionRecordIO.C rename to src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollisionRecordList/PairCollisionRecord/PairCollisionRecordIO.C index 4c1de522f7..a8025b9e73 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/PairCollisionRecord/PairCollisionRecordIO.C +++ b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollisionRecordList/PairCollisionRecord/PairCollisionRecordIO.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2009-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/WallCollisionRecord/WallCollisionRecord.C b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollisionRecordList/WallCollisionRecord/WallCollisionRecord.C similarity index 97% rename from src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/WallCollisionRecord/WallCollisionRecord.C rename to src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollisionRecordList/WallCollisionRecord/WallCollisionRecord.C index 04125ee7b3..ad555109c5 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/WallCollisionRecord/WallCollisionRecord.C +++ b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollisionRecordList/WallCollisionRecord/WallCollisionRecord.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2009-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/WallCollisionRecord/WallCollisionRecord.H b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollisionRecordList/WallCollisionRecord/WallCollisionRecord.H similarity index 98% rename from src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/WallCollisionRecord/WallCollisionRecord.H rename to src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollisionRecordList/WallCollisionRecord/WallCollisionRecord.H index 7383ba6485..eb010f5b04 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/WallCollisionRecord/WallCollisionRecord.H +++ b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollisionRecordList/WallCollisionRecord/WallCollisionRecord.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2009-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/WallCollisionRecord/WallCollisionRecordI.H b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollisionRecordList/WallCollisionRecord/WallCollisionRecordI.H similarity index 98% rename from src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/WallCollisionRecord/WallCollisionRecordI.H rename to src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollisionRecordList/WallCollisionRecord/WallCollisionRecordI.H index 5928714412..ef5a79acad 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/WallCollisionRecord/WallCollisionRecordI.H +++ b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollisionRecordList/WallCollisionRecord/WallCollisionRecordI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2009-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/WallCollisionRecord/WallCollisionRecordIO.C b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollisionRecordList/WallCollisionRecord/WallCollisionRecordIO.C similarity index 97% rename from src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/WallCollisionRecord/WallCollisionRecordIO.C rename to src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollisionRecordList/WallCollisionRecord/WallCollisionRecordIO.C index afc35b5b09..c1c51e72e9 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/CollisionRecordList/WallCollisionRecord/WallCollisionRecordIO.C +++ b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollisionRecordList/WallCollisionRecord/WallCollisionRecordIO.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2009-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C index 608a2d3df7..b3f170c450 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C +++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C @@ -24,6 +24,9 @@ License \*---------------------------------------------------------------------------*/ #include "KinematicParcel.H" +#include "forceSuSp.H" +#include "IntegrationScheme.H" +#include "meshTools.H" // * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * * // @@ -239,7 +242,6 @@ Foam::KinematicParcel::KinematicParcel age_(p.age_), tTurb_(p.tTurb_), UTurb_(p.UTurb_), - collisionRecords_(p.collisionRecords_), rhoc_(p.rhoc_), Uc_(p.Uc_), muc_(p.muc_) @@ -267,7 +269,6 @@ Foam::KinematicParcel::KinematicParcel age_(p.age_), tTurb_(p.tTurb_), UTurb_(p.UTurb_), - collisionRecords_(p.collisionRecords_), rhoc_(p.rhoc_), Uc_(p.Uc_), muc_(p.muc_) @@ -294,92 +295,58 @@ bool Foam::KinematicParcel::move const polyBoundaryMesh& pbMesh = mesh.boundaryMesh(); const scalarField& V = mesh.cellVolumes(); - switch (td.part()) + scalar tEnd = (1.0 - p.stepFraction())*trackTime; + const scalar dtMax = tEnd; + + while (td.keepParticle && !td.switchProcessor && tEnd > ROOTVSMALL) { - case TrackData::tpVelocityHalfStep: + // Apply correction to position for reduced-D cases + meshTools::constrainToMeshCentre(mesh, p.position()); + + // Set the Lagrangian time-step + scalar dt = min(dtMax, tEnd); + + // Remember which cell the parcel is in since this will change if + // a face is hit + const label cellI = p.cell(); + + const scalar magU = mag(U_); + if (p.active() && magU > ROOTVSMALL) { - // First and last leapfrog velocity adjust part, required - // before and after tracking and force calculation - - p.U() += 0.5*trackTime*p.f()/p.mass(); - - angularMomentum_ += 0.5*trackTime*torque_; - - break; + const scalar d = dt*magU; + const scalar maxCo = td.cloud().solution().maxCo(); + const scalar dCorr = min(d, maxCo*cbrt(V[cellI])); + dt *= + dCorr/d + *p.trackToFace(p.position() + dCorr*U_/magU, td); } - case TrackData::tpLinearTrack: + tEnd -= dt; + p.stepFraction() = 1.0 - tEnd/trackTime; + + // Avoid problems with extremely small timesteps + if (dt > ROOTVSMALL) { - scalar tEnd = (1.0 - p.stepFraction())*trackTime; - const scalar dtMax = tEnd; + // Update cell based properties + p.setCellValues(td, dt, cellI); - while (td.keepParticle && !td.switchProcessor && tEnd > ROOTVSMALL) + if (td.cloud().solution().cellValueSourceCorrection()) { - // Apply correction to position for reduced-D cases - meshTools::constrainToMeshCentre(mesh, p.position()); - - // Set the Lagrangian time-step - scalar dt = min(dtMax, tEnd); - - // Remember which cell the parcel is in since this - // will change if a face is hit - const label cellI = p.cell(); - - const scalar magU = mag(U_); - if (p.active() && magU > ROOTVSMALL) - { - const scalar d = dt*magU; - const scalar maxCo = td.cloud().solution().maxCo(); - const scalar dCorr = min(d, maxCo*cbrt(V[cellI])); - dt *= - dCorr/d - *p.trackToFace(p.position() + dCorr*U_/magU, td); - } - - tEnd -= dt; - p.stepFraction() = 1.0 - tEnd/trackTime; - - // Avoid problems with extremely small timesteps - if (dt > ROOTVSMALL) - { - // Update cell based properties - p.setCellValues(td, dt, cellI); - - if (td.cloud().solution().cellValueSourceCorrection()) - { - p.cellValueSourceCorrection(td, dt, cellI); - } - - p.calc(td, dt, cellI); - } - - if (p.onBoundary() && td.keepParticle) - { - if (isA(pbMesh[p.patch(p.face())])) - { - td.switchProcessor = true; - } - } - - p.age() += dt; + p.cellValueSourceCorrection(td, dt, cellI); } - break; + p.calc(td, dt, cellI); } - case TrackData::tpRotationalTrack: + if (p.onBoundary() && td.keepParticle) { - notImplemented("TrackData::tpRotationalTrack"); - - break; + if (isA(pbMesh[p.patch(p.face())])) + { + td.switchProcessor = true; + } } - default: - { - FatalErrorIn("KinematicParcel::move(TrackData& td)") - << td.part() << " is an invalid part of the tracking method." - << abort(FatalError); - } + p.age() += dt; } return td.keepParticle; diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H index 29d8bdf69a..7ad384c73e 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H +++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H @@ -33,7 +33,6 @@ Description - drag - turbulent dispersion - wall interactions - - many-body collisions, including memory of data from previous collision SourceFiles KinematicParcelI.H @@ -50,11 +49,6 @@ SourceFiles #include "autoPtr.H" #include "interpolation.H" -#include "KinematicCloud.H" -#include "CollisionRecordList.H" -#include "labelFieldIOField.H" -#include "vectorFieldIOField.H" - // #include "ParticleForceList.H" // TODO // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -62,10 +56,6 @@ SourceFiles namespace Foam { -typedef CollisionRecordList collisionRecordList; -typedef vectorFieldCompactIOField pairDataFieldCompactIOField; -typedef vectorFieldCompactIOField wallDataFieldCompactIOField; - template class KinematicParcel; @@ -283,9 +273,6 @@ protected: //- Turbulent velocity fluctuation [m/s] vector UTurb_; - //- Particle collision records - collisionRecordList collisionRecords_; - // Cell-based quantities @@ -464,9 +451,6 @@ public: //- Return const access to carrier viscosity [Pa.s] inline scalar muc() const; - //- Return const access to the collision records - inline const collisionRecordList& collisionRecords() const; - // Edit @@ -509,9 +493,6 @@ public: //- Return access to turbulent velocity fluctuation inline vector& UTurb(); - //- Return access to collision records - inline collisionRecordList& collisionRecords(); - // Helper functions diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelI.H b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelI.H index c67238a680..74ae8492d3 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelI.H +++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelI.H @@ -110,7 +110,6 @@ inline Foam::KinematicParcel::KinematicParcel age_(0.0), tTurb_(0.0), UTurb_(vector::zero), - collisionRecords_(), rhoc_(0.0), Uc_(vector::zero), muc_(0.0) @@ -150,7 +149,6 @@ inline Foam::KinematicParcel::KinematicParcel age_(0.0), tTurb_(0.0), UTurb_(vector::zero), - collisionRecords_(), rhoc_(0.0), Uc_(vector::zero), muc_(0.0) @@ -339,14 +337,6 @@ inline bool& Foam::KinematicParcel::active() } -template -inline const Foam::collisionRecordList& -Foam::KinematicParcel::collisionRecords() const -{ - return collisionRecords_; -} - - template inline Foam::label& Foam::KinematicParcel::typeId() { @@ -431,14 +421,6 @@ inline Foam::vector& Foam::KinematicParcel::UTurb() } -template -inline Foam::collisionRecordList& -Foam::KinematicParcel::collisionRecords() -{ - return collisionRecords_; -} - - template inline Foam::scalar Foam::KinematicParcel::wallImpactDistance ( diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelIO.C b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelIO.C index 9fcf07610b..e3ca39aee1 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelIO.C +++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelIO.C @@ -45,15 +45,7 @@ Foam::string Foam::KinematicParcel::propHeader = + " rho" + " age" + " tTurb" - + " (UTurbx UTurby UTurbz)" - + " collisionRecordsPairAccessed" - + " collisionRecordsPairOrigProcOfOther" - + " collisionRecordsPairOrigIdOfOther" - + " (collisionRecordsPairData)" - + " collisionRecordsWallAccessed" - + " collisionRecordsWallPRel" - + " (collisionRecordsWallData)"; - + + " (UTurbx UTurby UTurbz)"; // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -79,7 +71,6 @@ Foam::KinematicParcel::KinematicParcel age_(0.0), tTurb_(0.0), UTurb_(vector::zero), - collisionRecords_(), rhoc_(0.0), Uc_(vector::zero), muc_(0.0) @@ -101,7 +92,6 @@ Foam::KinematicParcel::KinematicParcel age_ = readScalar(is); tTurb_ = readScalar(is); is >> UTurb_; - is >> collisionRecords_; } else { @@ -122,7 +112,6 @@ Foam::KinematicParcel::KinematicParcel + sizeof(tTurb_) + sizeof(UTurb_) ); - is >> collisionRecords_; } } @@ -189,56 +178,6 @@ void Foam::KinematicParcel::readFields(CloudType& c) IOField UTurb(c.fieldIOobject("UTurb", IOobject::MUST_READ)); c.checkFieldIOobject(c, UTurb); - labelFieldCompactIOField collisionRecordsPairAccessed - ( - c.fieldIOobject("collisionRecordsPairAccessed", IOobject::MUST_READ) - ); - c.checkFieldFieldIOobject(c, collisionRecordsPairAccessed); - - labelFieldCompactIOField collisionRecordsPairOrigProcOfOther - ( - c.fieldIOobject - ( - "collisionRecordsPairOrigProcOfOther", - IOobject::MUST_READ - ) - ); - c.checkFieldFieldIOobject(c, collisionRecordsPairOrigProcOfOther); - - labelFieldCompactIOField collisionRecordsPairOrigIdOfOther - ( - c.fieldIOobject - ( - "collisionRecordsPairOrigIdOfOther", - IOobject::MUST_READ - ) - ); - c.checkFieldFieldIOobject(c, collisionRecordsPairOrigProcOfOther); - - pairDataFieldCompactIOField collisionRecordsPairData - ( - c.fieldIOobject("collisionRecordsPairData", IOobject::MUST_READ) - ); - c.checkFieldFieldIOobject(c, collisionRecordsPairData); - - labelFieldCompactIOField collisionRecordsWallAccessed - ( - c.fieldIOobject("collisionRecordsWallAccessed", IOobject::MUST_READ) - ); - c.checkFieldFieldIOobject(c, collisionRecordsWallAccessed); - - vectorFieldCompactIOField collisionRecordsWallPRel - ( - c.fieldIOobject("collisionRecordsWallPRel", IOobject::MUST_READ) - ); - c.checkFieldFieldIOobject(c, collisionRecordsWallPRel); - - wallDataFieldCompactIOField collisionRecordsWallData - ( - c.fieldIOobject("collisionRecordsWallData", IOobject::MUST_READ) - ); - c.checkFieldFieldIOobject(c, collisionRecordsWallData); - label i = 0; forAllIter(typename CloudType, c, iter) @@ -257,16 +196,6 @@ void Foam::KinematicParcel::readFields(CloudType& c) p.age_ = age[i]; p.tTurb_ = tTurb[i]; p.UTurb_ = UTurb[i]; - p.collisionRecords_ = collisionRecordList - ( - collisionRecordsPairAccessed[i], - collisionRecordsPairOrigProcOfOther[i], - collisionRecordsPairOrigIdOfOther[i], - collisionRecordsPairData[i], - collisionRecordsWallAccessed[i], - collisionRecordsWallPRel[i], - collisionRecordsWallData[i] - ); i++; } @@ -303,46 +232,6 @@ void Foam::KinematicParcel::writeFields(const CloudType& c) IOField tTurb(c.fieldIOobject("tTurb", IOobject::NO_READ), np); IOField UTurb(c.fieldIOobject("UTurb", IOobject::NO_READ), np); - labelFieldCompactIOField collisionRecordsPairAccessed - ( - c.fieldIOobject("collisionRecordsPairAccessed", IOobject::NO_READ), - np - ); - labelFieldCompactIOField collisionRecordsPairOrigProcOfOther - ( - c.fieldIOobject - ( - "collisionRecordsPairOrigProcOfOther", - IOobject::NO_READ - ), - np - ); - labelFieldCompactIOField collisionRecordsPairOrigIdOfOther - ( - c.fieldIOobject("collisionRecordsPairOrigIdOfOther", IOobject::NO_READ), - np - ); - pairDataFieldCompactIOField collisionRecordsPairData - ( - c.fieldIOobject("collisionRecordsPairData", IOobject::NO_READ), - np - ); - labelFieldCompactIOField collisionRecordsWallAccessed - ( - c.fieldIOobject("collisionRecordsWallAccessed", IOobject::NO_READ), - np - ); - vectorFieldCompactIOField collisionRecordsWallPRel - ( - c.fieldIOobject("collisionRecordsWallPRel", IOobject::NO_READ), - np - ); - wallDataFieldCompactIOField collisionRecordsWallData - ( - c.fieldIOobject("collisionRecordsWallData", IOobject::NO_READ), - np - ); - label i = 0; forAllConstIter(typename CloudType, c, iter) @@ -362,15 +251,6 @@ void Foam::KinematicParcel::writeFields(const CloudType& c) age[i] = p.age(); tTurb[i] = p.tTurb(); UTurb[i] = p.UTurb(); - collisionRecordsPairAccessed[i] = p.collisionRecords().pairAccessed(); - collisionRecordsPairOrigProcOfOther[i] = - p.collisionRecords().pairOrigProcOfOther(); - collisionRecordsPairOrigIdOfOther[i] = - p.collisionRecords().pairOrigIdOfOther(); - collisionRecordsPairData[i] = p.collisionRecords().pairData(); - collisionRecordsWallAccessed[i] = p.collisionRecords().wallAccessed(); - collisionRecordsWallPRel[i] = p.collisionRecords().wallPRel(); - collisionRecordsWallData[i] = p.collisionRecords().wallData(); i++; } @@ -388,13 +268,6 @@ void Foam::KinematicParcel::writeFields(const CloudType& c) age.write(); tTurb.write(); UTurb.write(); - collisionRecordsPairAccessed.write(); - collisionRecordsPairOrigProcOfOther.write(); - collisionRecordsPairOrigIdOfOther.write(); - collisionRecordsPairData.write(); - collisionRecordsWallAccessed.write(); - collisionRecordsWallPRel.write(); - collisionRecordsWallData.write(); } @@ -422,8 +295,7 @@ Foam::Ostream& Foam::operator<< << token::SPACE << p.rho() << token::SPACE << p.age() << token::SPACE << p.tTurb() - << token::SPACE << p.UTurb() - << token::SPACE << p.collisionRecords(); + << token::SPACE << p.UTurb(); } else { @@ -445,7 +317,6 @@ Foam::Ostream& Foam::operator<< + sizeof(p.tTurb()) + sizeof(p.UTurb()) ); - os << p.collisionRecords(); } // Check state of Ostream diff --git a/src/lagrangian/intermediate/parcels/derived/basicKinematicCollidingParcel/basicKinematicCollidingParcel.H b/src/lagrangian/intermediate/parcels/derived/basicKinematicCollidingParcel/basicKinematicCollidingParcel.H new file mode 100644 index 0000000000..989e1da010 --- /dev/null +++ b/src/lagrangian/intermediate/parcels/derived/basicKinematicCollidingParcel/basicKinematicCollidingParcel.H @@ -0,0 +1,61 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2011-2011 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 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::basicKinematicCollidingParcel + +Description + Definition of basic kinematic colliding parcel + +SourceFiles + basicKinematicParcel.H + +\*---------------------------------------------------------------------------*/ + +#ifndef basicKinematicCollidingParcel_H +#define basicKinematicCollidingParcel_H + +#include "contiguous.H" +#include "particle.H" +#include "KinematicParcel.H" +#include "CollidingParcel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + typedef CollidingParcel > + basicKinematicCollidingParcel; + + template<> + inline bool contiguous() + { + return true; + } +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/derived/basicKinematicCollidingParcel/defineBasicKinematicCollidingParcel.C b/src/lagrangian/intermediate/parcels/derived/basicKinematicCollidingParcel/defineBasicKinematicCollidingParcel.C new file mode 100644 index 0000000000..4dad7f8de3 --- /dev/null +++ b/src/lagrangian/intermediate/parcels/derived/basicKinematicCollidingParcel/defineBasicKinematicCollidingParcel.C @@ -0,0 +1,38 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2011 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 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 "basicKinematicCollidingParcel.H" +#include "Cloud.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + defineTemplateTypeNameAndDebug(basicKinematicCollidingParcel, 0); + defineTemplateTypeNameAndDebug(Cloud, 0); +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/derived/basicKinematicCollidingParcel/makeBasicKinematicCollidingParcelSubmodels.C b/src/lagrangian/intermediate/parcels/derived/basicKinematicCollidingParcel/makeBasicKinematicCollidingParcelSubmodels.C new file mode 100644 index 0000000000..22f4e33fba --- /dev/null +++ b/src/lagrangian/intermediate/parcels/derived/basicKinematicCollidingParcel/makeBasicKinematicCollidingParcelSubmodels.C @@ -0,0 +1,55 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2011-2011 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 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 "basicKinematicCollidingCloud.H" + +// Kinematic +#include "makeParcelForcesNew.H" +#include "makeParcelDispersionModelsNew.H" +#include "makeParcelInjectionModelsNew.H" +#include "makeParcelCollisionModels.H" +#include "makeParcelPatchInteractionModelsNew.H" +#include "makeParcelPostProcessingModelsNew.H" +#include "makeParcelSurfaceFilmModelsNew.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + // Kinematic sub-models + typedef basicKinematicCollidingCloud::cloudType + basicKinematicCollidingCloud_1; + + makeParcelForcesNew(basicKinematicCollidingCloud_1); + makeParcelDispersionModelsNew(basicKinematicCollidingCloud_1); + makeParcelInjectionModelsNew(basicKinematicCollidingCloud_1); + makeParcelCollisionModels(basicKinematicCollidingCloud); + makeParcelPatchInteractionModelsNew(basicKinematicCollidingCloud_1); + makeParcelPostProcessingModelsNew(basicKinematicCollidingCloud_1); + makeParcelSurfaceFilmModelsNew(basicKinematicCollidingCloud_1); +} + + +// ************************************************************************* //