Newer
Older
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2017-2021 OpenCFD Ltd.
-------------------------------------------------------------------------------
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 <http://www.gnu.org/licenses/>.
Class
Foam::Cloud
Description
SourceFiles
Cloud.C
CloudIO.C
\*---------------------------------------------------------------------------*/
#ifndef Cloud_H
#define Cloud_H
#include "cloud.H"
#include "IDLList.H"
#include "IOField.H"
mattijs
committed
#include "CompactIOField.H"
#include "polyMesh.H"
#include "bitSet.H"
#include "wordRes.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// Forward Declarations
template<class ParticleType> class Cloud;
template<class ParticleType> class IOPosition;
/*---------------------------------------------------------------------------*\
Class Cloud Declaration
\*---------------------------------------------------------------------------*/
template<class ParticleType>
class Cloud
:
public cloud,
public IDLList<ParticleType>
{
// Private data
//- Reference to the mesh database
const polyMesh& polyMesh_;
//- Temporary storage for addressing. Used in findTris.
mutable autoPtr<bitSet> cellWallFacesPtr_;
//- Temporary storage for the global particle positions
mutable autoPtr<vectorField> globalPositionsPtr_;
Mark Olesen
committed
// Private Member Functions
//- Check patches
void checkPatches() const;
//- Initialise cloud on IO constructor
void initCloud(const bool checkClass);
//- Find all cells which have wall faces
void calcCellWallFaces() const;
//- Read cloud properties dictionary
void readCloudUniformProperties();
//- Write cloud properties dictionary
void writeCloudUniformProperties() const;
Andrew Heather
committed
protected:
//- Geometry type
cloud::geometryType geometryType_;
Andrew Heather
committed
template<class ParticleT>
friend class IOPosition;
typedef ParticleType particleType;
//- Parcels are just particles
typedef ParticleType parcelType;
//- Runtime type information
TypeName("Cloud");
//- Name of cloud properties dictionary
static word cloudPropertiesName;
// Constructors
//- Construct from mesh and a list of particles
Cloud
(
const polyMesh& mesh,
const word& cloudName,
const IDLList<ParticleType>& particles
);
//- Construct from mesh by reading from file with given cloud instance
// Optionally disable checking of class name for post-processing
Cloud
(
const polyMesh& pMesh,
const word& cloudName,
const bool checkClass = true
);
// Member Functions
// Access
//- Return the polyMesh reference
const polyMesh& pMesh() const
{
return polyMesh_;
}
//- Return the number of particles in the cloud
using IDLList<ParticleType>::size;
//- Return the number of particles in the cloud
virtual label nParcels() const
{
return IDLList<ParticleType>::size();
};
//- Return temporary addressing
DynamicList<label>& labels() const
using typename IDLList<ParticleType>::iterator;
using typename IDLList<ParticleType>::const_iterator;
using IDLList<ParticleType>::begin;
using IDLList<ParticleType>::cbegin;
using IDLList<ParticleType>::end;
using IDLList<ParticleType>::cend;
//- Clear the particle list
using IDLList<ParticleType>::clear;
//- Transfer particle to cloud
void addParticle(ParticleType* pPtr);
//- Remove particle from cloud and delete
void deleteParticle(ParticleType& p);
//- Remove lost particles from cloud and delete
void deleteLostParticles();
//- Reset the particles
void cloudReset(const Cloud<ParticleType>& c);
template<class TrackCloudType>
void move
(
TrackCloudType& cloud,
typename ParticleType::trackingData& td,
const scalar trackTime
);
//- Remap the cells of particles corresponding to the
// mesh topology change
void autoMap(const mapPolyMesh&);
//- Helper to construct IOobject for field and current time.
IOobject fieldIOobject
(
const word& fieldName,
const IOobject::readOption r
) const;
//- Check lagrangian data field
template<class DataType>
void checkFieldIOobject
(
const Cloud<ParticleType>& c,
const IOField<DataType>& data
) const;
//- Check lagrangian data fieldfield
template<class DataType>
void checkFieldFieldIOobject
(
const Cloud<ParticleType>& c,
mattijs
committed
const CompactIOField<Field<DataType>, DataType>& data
//- Helper function to store a cloud field on its registry
template<class Type>
bool readStoreFile
(
const IOobject& io,
const IOobject& ioNew
) const;
//- Read from files into objectRegistry
void readFromFiles
(
objectRegistry& obr,
const wordRes& selectFields
) const;
//- Write the field data for the cloud of particles Dummy at
// this level.
virtual void writeFields() const;
//- Write using stream options.
// Only writes the cloud file if the Cloud isn't empty
virtual bool writeObject
(
IOstreamOption streamOpt,
const bool valid
//- Write positions to \<cloudName\>_positions.obj file
//- Call this before a topology change.
// Stores the particles global positions in the database
// for use during mapping.
void storeGlobalPositions() const;
template<class ParticleType>
Ostream& operator<<(Ostream& os, const Cloud<ParticleType>& c);
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#ifdef NoRepository
#include "Cloud.C"
#endif
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //