This reference represents unnecessary storage. The mesh can be obtained from tracking data or passed to the particle evolution functions by argument. In addition, removing the mesh reference makes it possible to construct as particle from an Istream without the need for an iNew class. This simplifies stream-based transfer, and makes it possible for particles to be communicated by a polyDistributionMap.
243 lines
6.4 KiB
C++
243 lines
6.4 KiB
C++
/*---------------------------------------------------------------------------*\
|
|
========= |
|
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
\\ / O peration | Website: https://openfoam.org
|
|
\\ / A nd | Copyright (C) 2013-2022 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 <http://www.gnu.org/licenses/>.
|
|
|
|
Class
|
|
Foam::findCellParticle
|
|
|
|
Description
|
|
Particle class that finds cells by tracking
|
|
|
|
SourceFiles
|
|
findCellParticle.C
|
|
|
|
\*---------------------------------------------------------------------------*/
|
|
|
|
#ifndef findCellParticle_H
|
|
#define findCellParticle_H
|
|
|
|
#include "particle.H"
|
|
#include "Cloud.H"
|
|
#include "autoPtr.H"
|
|
|
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
|
|
namespace Foam
|
|
{
|
|
|
|
class findCellParticleCloud;
|
|
|
|
|
|
// Forward declaration of friend functions and operators
|
|
|
|
class findCellParticle;
|
|
|
|
Ostream& operator<<(Ostream&, const findCellParticle&);
|
|
|
|
|
|
/*---------------------------------------------------------------------------*\
|
|
Class findCellParticle Declaration
|
|
\*---------------------------------------------------------------------------*/
|
|
|
|
class findCellParticle
|
|
:
|
|
public particle
|
|
{
|
|
// Private Data
|
|
|
|
//- Displacement over which to track
|
|
vector displacement_;
|
|
|
|
//- Passive data
|
|
label data_;
|
|
|
|
|
|
public:
|
|
|
|
friend class Cloud<findCellParticle>;
|
|
|
|
//- Class used to pass tracking data to the trackToFace function
|
|
class trackingData
|
|
:
|
|
public particle::trackingData
|
|
{
|
|
labelListList& cellToData_;
|
|
List<List<point>>& cellToEnd_;
|
|
|
|
public:
|
|
|
|
// Constructors
|
|
|
|
trackingData
|
|
(
|
|
Cloud<findCellParticle>& cloud,
|
|
labelListList& cellToData,
|
|
List<List<point>>& cellToEnd
|
|
)
|
|
:
|
|
particle::trackingData(cloud),
|
|
cellToData_(cellToData),
|
|
cellToEnd_(cellToEnd)
|
|
{}
|
|
|
|
|
|
// Member Functions
|
|
|
|
labelListList& cellToData()
|
|
{
|
|
return cellToData_;
|
|
}
|
|
|
|
List<List<point>>& cellToEnd()
|
|
{
|
|
return cellToEnd_;
|
|
}
|
|
};
|
|
|
|
|
|
// Constructors
|
|
|
|
//- Construct from components
|
|
findCellParticle
|
|
(
|
|
const polyMesh& mesh,
|
|
const barycentric& coordinates,
|
|
const label celli,
|
|
const label tetFacei,
|
|
const label tetPtI,
|
|
const vector& displacement,
|
|
const label data
|
|
);
|
|
|
|
//- Construct from a position and a cell, searching for the rest of the
|
|
// required topology
|
|
findCellParticle
|
|
(
|
|
const polyMesh& mesh,
|
|
const vector& position,
|
|
const label celli,
|
|
const vector& displacement,
|
|
const label data
|
|
);
|
|
|
|
//- Construct from Istream
|
|
findCellParticle(Istream& is, bool readFields = true);
|
|
|
|
//- Construct and return a clone
|
|
autoPtr<particle> clone() const
|
|
{
|
|
return autoPtr<particle>(new findCellParticle(*this));
|
|
}
|
|
|
|
//- Construct from Istream and return
|
|
static autoPtr<findCellParticle> New(Istream& is)
|
|
{
|
|
return autoPtr<findCellParticle>(new findCellParticle(is));
|
|
}
|
|
|
|
|
|
// Member Functions
|
|
|
|
//- Displacement over which to track
|
|
const vector& displacement() const
|
|
{
|
|
return displacement_;
|
|
}
|
|
|
|
//- Displacement over which to track
|
|
vector& displacement()
|
|
{
|
|
return displacement_;
|
|
}
|
|
|
|
//- Transported label
|
|
label data() const
|
|
{
|
|
return data_;
|
|
}
|
|
|
|
//- Transported label
|
|
label& data()
|
|
{
|
|
return data_;
|
|
}
|
|
|
|
|
|
// Tracking
|
|
|
|
//- Track all particles to their end point
|
|
bool move(Cloud<findCellParticle>&, trackingData&, const scalar);
|
|
|
|
//- Overridable function to handle the particle hitting a wedge
|
|
void hitWedgePatch(Cloud<findCellParticle>&, trackingData&);
|
|
|
|
//- Overridable function to handle the particle hitting a
|
|
// symmetry plane
|
|
void hitSymmetryPlanePatch(Cloud<findCellParticle>&, trackingData&);
|
|
|
|
//- Overridable function to handle the particle hitting a
|
|
// symmetry patch
|
|
void hitSymmetryPatch(Cloud<findCellParticle>&, trackingData&);
|
|
|
|
//- Overridable function to handle the particle hitting a cyclic
|
|
void hitCyclicPatch(Cloud<findCellParticle>&, trackingData&);
|
|
|
|
//- Overridable function to handle the particle hitting a cyclicAMI
|
|
void hitCyclicAMIPatch
|
|
(
|
|
const vector&,
|
|
const scalar,
|
|
Cloud<findCellParticle>&,
|
|
trackingData&
|
|
);
|
|
|
|
//- Overridable function to handle the particle hitting a
|
|
//- processorPatch
|
|
void hitProcessorPatch(Cloud<findCellParticle>&, trackingData&);
|
|
|
|
//- Overridable function to handle the particle hitting a wallPatch
|
|
void hitWallPatch(Cloud<findCellParticle>&, trackingData&);
|
|
|
|
|
|
// Ostream Operator
|
|
|
|
friend Ostream& operator<<(Ostream&, const findCellParticle&);
|
|
};
|
|
|
|
|
|
template<>
|
|
inline bool contiguous<findCellParticle>()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
|
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
|
|
} // End namespace Foam
|
|
|
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
|
|
#endif
|
|
|
|
// ************************************************************************* //
|