Foam::tracking Namespace Reference

Functions for tracking locations through a mesh. More...

Functions

void stationaryTetReverseTransform (const polyMesh &mesh, const label celli, const label facei, const label faceTrii, vector &centre, scalar &detA, barycentricTensor &T)
 Get the reverse transform associated with the current tet. The. More...
 
void movingTetReverseTransform (const polyMesh &mesh, const label celli, const label facei, const label faceTrii, const scalar startStepFraction, const scalar endStepFraction, Pair< vector > &centre, FixedList< scalar, 4 > &detA, FixedList< barycentricTensor, 3 > &T)
 Get the reverse transformation associated with the current,. More...
 
Tuple2< label, scalar > toStationaryTri (const polyMesh &mesh, const vector &displacement, const scalar fraction, barycentric &coordinates, label &celli, label &facei, label &faceTrii, scalar &stepFraction, scalar &stepFractionBehind, label &nTracksBehind, const string &debugPrefix=NullObjectRef< string >())
 See toTri. For a stationary mesh. More...
 
Tuple2< label, scalar > toStationaryTri (const polyMesh &mesh, const Pair< vector > &displacement, const scalar fraction, barycentric &coordinates, label &celli, label &facei, label &faceTrii, scalar &stepFraction, scalar &stepFractionBehind, label &nTracksBehind, const string &debugPrefix=NullObjectRef< string >())
 See toTri. Second order. For a stationary mesh. More...
 
Tuple2< label, scalar > toMovingTri (const polyMesh &mesh, const vector &displacement, const scalar fraction, barycentric &coordinates, label &celli, label &facei, label &faceTrii, scalar &stepFraction, scalar &stepFractionBehind, label &nTracksBehind, const string &debugPrefix=NullObjectRef< string >())
 See toTri. For a moving mesh. More...
 
Tuple2< label, scalar > toMovingTri (const polyMesh &mesh, const Pair< vector > &displacement, const scalar fraction, barycentric &coordinates, label &celli, label &facei, label &faceTrii, scalar &stepFraction, scalar &stepFractionBehind, label &nTracksBehind, const string &debugPrefix=NullObjectRef< string >())
 See toTri. Second order. For a moving mesh. Not implemented. More...
 
template<class Displacement >
Tuple2< label, scalar > toTri (const polyMesh &mesh, const Displacement &displacement, const scalar fraction, barycentric &coordinates, label &celli, label &facei, label &faceTrii, scalar &stepFraction, scalar &stepFractionBehind, label &nTracksBehind, const string &debugPrefix=NullObjectRef< string >())
 Track along the displacement for a given fraction of the overall. More...
 
Pair< vectoroperator* (const scalar f, const Pair< vector > &displacement)
 Scale a second-order displacement. More...
 
void reflect (barycentric &coordinates)
 Reflection transform. Corrects the coordinates when the track moves. More...
 
void rotate (const bool reverse, barycentric &coordinates)
 Rotation transform. Corrects the coordinates when the track moves. More...
 
void changeFaceTri (const polyMesh &mesh, const label tetTrii, barycentric &coordinates, const label celli, label &facei, label &faceTrii)
 Change face-triangle within a cell. Called after a tet-triangle is hit. More...
 
void changeFace (const polyMesh &mesh, const label tetTrii, barycentric &coordinates, const label celli, label &facei, label &faceTrii)
 Change face within a cell. Called (if necessary) by changeFaceTri. More...
 
point position (const polyMesh &mesh, const barycentric &coordinates, const label celli, const label facei, const label faceTrii, const scalar stepFraction)
 Return the position given the coordinates and tet topology. More...
 
barycentric coordinates (const polyMesh &mesh, const point &position, const label celli, const label facei, const label faceTrii, const scalar stepFraction)
 Return the coordinates given the position and tet topology. More...
 
Pair< vectorfaceNormalAndDisplacement (const polyMesh &mesh, const barycentric &coordinates, const label celli, const label facei, const label faceTrii, const scalar stepFraction)
 Return the normal of the corresponding point on the associated face and. More...
 
template<class Displacement >
Tuple2< bool, scalar > toFace (const polyMesh &mesh, const Displacement &displacement, const scalar fraction, barycentric &coordinates, label &celli, label &facei, label &faceTrii, scalar &stepFraction, scalar &stepFractionBehind, label &nTracksBehind, const string &debugPrefix=NullObjectRef< string >())
 Track along the displacement for a given fraction of the overall. More...
 
template<class Displacement >
Tuple2< bool, scalar > toCell (const polyMesh &mesh, const Displacement &displacement, const scalar fraction, barycentric &coordinates, label &celli, label &facei, label &faceTrii, scalar &stepFraction, scalar &stepFractionBehind, label &nTracksBehind, const string &debugPrefix=NullObjectRef< string >())
 As toFace, except that if the track ends on an internal face then this. More...
 
template<class Displacement >
Tuple2< bool, scalar > toBoundary (const polyMesh &mesh, const Displacement &displacement, const scalar fraction, barycentric &coordinates, label &celli, label &facei, label &faceTrii, scalar &stepFraction, scalar &stepFractionBehind, label &nTracksBehind, const string &debugPrefix=NullObjectRef< string >())
 As toFace, except that the track continues across multiple cells until. More...
 
bool locate (const polyMesh &mesh, const point &position, barycentric &coordinates, label &celli, label &facei, label &faceTrii, const scalar stepFraction, const string &debugPrefix=NullObjectRef< string >())
 Initialise the location at the given position. Returns whether or not a. More...
 
void crossInternalFace (const polyMesh &mesh, barycentric &coordinates, label &celli, label &facei, label &faceTrii)
 Cross an internal face. More...
 
void crossWedge (const wedgePolyPatch &inPatch, barycentric &coordinates, label &celli, label &facei, label &faceTrii, const scalar stepFraction)
 Cross a wedge patch. More...
 
void crossCyclic (const cyclicPolyPatch &inPatch, barycentric &coordinates, label &celli, label &facei, label &faceTrii)
 Cross a cyclic patch. More...
 
void inProcessor (const processorPolyPatch &inPatch, label &celli, label &facei)
 Initialise crossing of a processor patch. Breaks the topology in order. More...
 
void outProcessor (const processorPolyPatch &outPatch, barycentric &coordinates, label &celli, label &facei, label &faceTrii)
 Complete crossing of a processor patch. Restore the topology. More...
 
void stationaryTetGeometry (const polyMesh &mesh, const label celli, const label facei, const label faceTrii, vector &centre, vector &base, vector &vertex1, vector &vertex2)
 Get the vertices of the current tet. More...
 
barycentricTensor stationaryTetTransform (const polyMesh &mesh, const label celli, const label facei, const label faceTrii)
 Get the transformation associated with the current tet. This. More...
 
void movingTetGeometry (const polyMesh &mesh, const label celli, const label facei, const label faceTrii, const scalar startStepFraction, const scalar endStepFraction, Pair< vector > &centre, Pair< vector > &base, Pair< vector > &vertex1, Pair< vector > &vertex2)
 Get the vertices of the current moving tet. Two values are. More...
 
Pair< barycentricTensormovingTetTransform (const polyMesh &mesh, const label celli, const label facei, const label faceTrii, const scalar startStepFraction, const scalar endStepFraction)
 Get the transformation associated with the current, moving, tet. More...
 

Variables

static const label maxNTracksBehind = 48
 The counter nTracksBehind is the number of tracks carried out that. More...
 

Detailed Description

Functions for tracking locations through a mesh.

Source files

Function Documentation

◆ stationaryTetReverseTransform()

void stationaryTetReverseTransform ( const polyMesh mesh,
const label  celli,
const label  facei,
const label  faceTrii,
vector centre,
scalar &  detA,
barycentricTensor T 
)

Get the reverse transform associated with the current tet. The.

conversion is detA*y = (x - centre) & T. The variables x, y and centre have the same meaning as for the forward transform. T is the transposed inverse of the forward transform tensor, A, multiplied by its determinant, detA. This separation allows the barycentric tracking algorithm to function on inverted or degenerate tetrahedra.

Definition at line 243 of file tracking.C.

References Foam::saturationModels::A, mesh, stationaryTetTransform(), and Foam::T().

Referenced by coordinates(), and toStationaryTri().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ movingTetReverseTransform()

void movingTetReverseTransform ( const polyMesh mesh,
const label  celli,
const label  facei,
const label  faceTrii,
const scalar  startStepFraction,
const scalar  endStepFraction,
Pair< vector > &  centre,
FixedList< scalar, 4 > &  detA,
FixedList< barycentricTensor, 3 > &  T 
)

Get the reverse transformation associated with the current,.

moving, tet. This is of the same form as for the static case. As with the moving geometry, a function of the tracking fraction is returned for each component. The functions are higher order than for the forward transform; the determinant is cubic, and the tensor is quadratic.

Definition at line 276 of file tracking.C.

References Foam::saturationModels::A, b, Foam::constant::universal::c, mesh, movingTetTransform(), and Foam::T().

Referenced by coordinates(), and toMovingTri().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ toStationaryTri() [1/2]

Foam::Tuple2< Foam::label, Foam::scalar > toStationaryTri ( const polyMesh mesh,
const vector displacement,
const scalar  fraction,
barycentric coordinates,
label celli,
label facei,
label faceTrii,
scalar &  stepFraction,
scalar &  stepFractionBehind,
label nTracksBehind,
const string debugPrefix = NullObjectRef<string>() 
)

◆ toStationaryTri() [2/2]

Foam::Tuple2< Foam::label, Foam::scalar > toStationaryTri ( const polyMesh mesh,
const Pair< vector > &  displacement,
const scalar  fraction,
barycentric coordinates,
label celli,
label facei,
label faceTrii,
scalar &  stepFraction,
scalar &  stepFractionBehind,
label nTracksBehind,
const string debugPrefix = NullObjectRef<string>() 
)

◆ toMovingTri() [1/2]

Foam::Tuple2< Foam::label, Foam::scalar > toMovingTri ( const polyMesh mesh,
const vector displacement,
const scalar  fraction,
barycentric coordinates,
label celli,
label facei,
label faceTrii,
scalar &  stepFraction,
scalar &  stepFractionBehind,
label nTracksBehind,
const string debugPrefix = NullObjectRef<string>() 
)

◆ toMovingTri() [2/2]

Foam::Tuple2< Foam::label, Foam::scalar > toMovingTri ( const polyMesh mesh,
const Pair< vector > &  displacement,
const scalar  fraction,
barycentric coordinates,
label celli,
label facei,
label faceTrii,
scalar &  stepFraction,
scalar &  stepFractionBehind,
label nTracksBehind,
const string debugPrefix = NullObjectRef<string>() 
)

See toTri. Second order. For a moving mesh. Not implemented.

Definition at line 955 of file tracking.C.

References Foam::exit(), Foam::FatalError, and FatalErrorInFunction.

Here is the call graph for this function:

◆ toTri()

Tuple2<label, scalar> Foam::tracking::toTri ( const polyMesh mesh,
const Displacement &  displacement,
const scalar  fraction,
barycentric coordinates,
label celli,
label facei,
label faceTrii,
scalar &  stepFraction,
scalar &  stepFractionBehind,
label nTracksBehind,
const string debugPrefix = NullObjectRefstring >() 
)

Track along the displacement for a given fraction of the overall.

time-step. End when the track is complete or when a tet triangle is hit. Return the index of the tet triangle that was hit, or -1 if the end position was reached. Also return the proportion of the displacement still to be completed.

Referenced by locate().

Here is the caller graph for this function:

◆ operator*()

Foam::Pair< Foam::vector > operator* ( const scalar  f,
const Pair< vector > &  displacement 
)

Scale a second-order displacement.

Definition at line 1013 of file tracking.C.

References f().

Here is the call graph for this function:

◆ reflect()

void reflect ( barycentric coordinates)

Reflection transform. Corrects the coordinates when the track moves.

between two tets which share a base vertex, but for which the other two non cell-centre vertices are reversed. All hits which retain the same face behave this way, as do face hits.

Definition at line 1028 of file tracking.C.

References Barycentric< Cmpt >::c(), coordinates(), Barycentric< Cmpt >::d(), and Foam::Swap().

Referenced by changeFace(), changeFaceTri(), LRR< BasicMomentumTransportModel >::correct(), crossCyclic(), crossInternalFace(), and outProcessor().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rotate()

void rotate ( const bool  reverse,
barycentric coordinates 
)

Rotation transform. Corrects the coordinates when the track moves.

between two tets with different base vertices, but are otherwise similarly oriented. Hits which change the face within the cell make use of both this and the reflect transform.

Definition at line 1034 of file tracking.C.

References Barycentric< Cmpt >::b(), Barycentric< Cmpt >::c(), coordinates(), Barycentric< Cmpt >::d(), and Foam::reverse().

Referenced by changeFace(), CrankNicolson::solve(), Newmark::solve(), and symplectic::solve().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ changeFaceTri()

void changeFaceTri ( const polyMesh mesh,
const label  tetTrii,
barycentric coordinates,
const label  celli,
label facei,
label faceTrii 
)

Change face-triangle within a cell. Called after a tet-triangle is hit.

Definition at line 1053 of file tracking.C.

References changeFace(), coordinates(), Foam::exit(), polyMesh::faceOwner(), polyMesh::faces(), Foam::FatalError, FatalErrorInFunction, mesh, reflect(), and List< T >::size().

Here is the call graph for this function:

◆ changeFace()

void changeFace ( const polyMesh mesh,
const label  tetTrii,
barycentric coordinates,
const label  celli,
label facei,
label faceTrii 
)

Change face within a cell. Called (if necessary) by changeFaceTri.

Definition at line 1136 of file tracking.C.

References primitiveMesh::cells(), coordinates(), Foam::exit(), face::faceEdge(), polyMesh::faceOwner(), polyMesh::faces(), Foam::FatalError, FatalErrorInFunction, forAll, Foam::max(), mesh, Foam::min(), edge::otherVertex(), reflect(), rotate(), List< T >::size(), and polyMesh::tetBasePtIs().

Referenced by changeFaceTri().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ position()

Foam::point position ( const polyMesh mesh,
const barycentric coordinates,
const label  celli,
const label  facei,
const label  faceTrii,
const scalar  stepFraction 
)
inline

Return the position given the coordinates and tet topology.

Definition at line 223 of file trackingI.H.

References coordinates(), mesh, polyMesh::moving(), movingTetTransform(), and stationaryTetTransform().

Referenced by DSMCCloud< ParcelType >::addNewParcel(), SprayParcel< ParcelType >::calcAtomisation(), cellPointWeight::cellPointWeight(), multiValveEngine::pistonObject::clearance(), coordinates(), random::decompose(), particle::deviationFromMeshCentre(), multiValveEngine::pistonObject::displacement(), nonConformalCyclicLagrangianPatch::evaluate(), nonConformalProcessorCyclicLagrangianPatch::evaluate(), InjectionModel< CloudType >::findCellAtPosition(), cellPointWeight::findTetrahedron(), cellPointWeight::findTriangle(), particle::hitNonConformalCyclicPatch(), MomentumParcel< ParcelType >::hitWallPatch(), interpolationCellPoint< Type >::interpolate(), interpolationCellPointFace< Type >::interpolate(), interpolationPointMVC< Type >::interpolate(), interpolation< Foam::Vector >::interpolation(), locate(), particle::locate(), findCellParticle::move(), streamlinesParticle::move(), pointMVCWeight::pointMVCWeight(), multiValveEngine::pistonObject::position(), LagrangianMesh::position(), particle::position(), polyLine::position(), blockEdge::position(), particle::prepareForInteractionListReferral(), springRenumber::renumber(), probes::sample(), sampledSets::sampleLocalType(), molecule::setSitePositions(), sampledSetParticle::store(), sampledSetParticle::storeCell(), toMovingTri(), ConeInjection< CloudType >::topoChange(), toStationaryTri(), LagrangianMesh::track(), multiValveEngine::pistonObject::updatePoints(), and multiValveEngine::valveObject::updatePoints().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ coordinates()

Foam::barycentric coordinates ( const polyMesh mesh,
const point position,
const label  celli,
const label  facei,
const label  faceTrii,
const scalar  stepFraction 
)

Return the coordinates given the position and tet topology.

Definition at line 1258 of file tracking.C.

References mesh, polyMesh::moving(), movingTetReverseTransform(), position(), stationaryTetReverseTransform(), and Foam::T().

Referenced by cellPointLagrangianAccumulator::accumulate(), Dual< Type >::add(), triSurface::boundingSpheres(), ThermoParcel< ParcelType >::calcHeatTransfer(), ThermoParcel< ParcelType >::calcSurfaceValues(), changeFace(), changeFaceTri(), collection::coordinates(), particle::correctAfterInteractionListReferral(), crossCyclic(), crossInternalFace(), crossWedge(), faceNormalAndDisplacement(), LagrangianInjection::filter(), InjectionModel< CloudType >::findCellAtPosition(), Foam::tracking::toCell< Foam::Pair< Foam::vector > >(), Foam::tracking::toFace< Foam::Pair< Foam::vector > >(), LagrangianMesh::inject(), InjectionModel< CloudType >::inject(), InjectionModel< CloudType >::injectSteadyState(), Dual< Type >::interpolate(), interpolation< Foam::Vector >::interpolate(), interpolationCellPoint< Type >::interpolate(), fieldInterpolation< Type, InterpolationType >::interpolate(), locate(), diskInjection::modify(), manualInjection::modify(), pointInjection::modify(), interpolation< Foam::Vector >::New(), LagrangianSubMesh::nf(), outProcessor(), position(), reflect(), rotate(), MomentumParcel< ParcelType >::setCellValues(), ReactingParcel< ParcelType >::setCellValues(), ThermoParcel< ParcelType >::setCellValues(), patchInjectionBase::setPositionAndCell(), CellZoneInjection< CloudType >::setPositionAndCell(), ConeInjection< CloudType >::setPositionAndCell(), FieldActivatedInjection< CloudType >::setPositionAndCell(), ManualInjection< CloudType >::setPositionAndCell(), MomentumLookupTableInjection< CloudType >::setPositionAndCell(), PatchFlowRateInjection< CloudType >::setPositionAndCell(), PatchInjection< CloudType >::setPositionAndCell(), ReactingLookupTableInjection< CloudType >::setPositionAndCell(), ReactingMultiphaseLookupTableInjection< CloudType >::setPositionAndCell(), ThermoLookupTableInjection< CloudType >::setPositionAndCell(), LagrangianMesh::size(), toMovingTri(), toStationaryTri(), LagrangianSubMesh::Uf(), and RelativeVelocity< CloudType >::write().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ faceNormalAndDisplacement()

Foam::Pair< Foam::vector > faceNormalAndDisplacement ( const polyMesh mesh,
const barycentric coordinates,
const label  celli,
const label  facei,
const label  faceTrii,
const scalar  stepFraction 
)

Return the normal of the corresponding point on the associated face and.

the displacement of that point over the time-step

Definition at line 1301 of file tracking.C.

References Barycentric< Cmpt >::b(), Barycentric< Cmpt >::c(), coordinates(), Barycentric< Cmpt >::d(), mesh, polyMesh::moving(), movingTetGeometry(), stationaryTetGeometry(), and Foam::Zero.

Referenced by LagrangianSubMesh::nf(), particle::patchData(), LagrangianMesh::track(), and LagrangianSubMesh::Uf().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ toFace()

Tuple2<bool, scalar> Foam::tracking::toFace ( const polyMesh mesh,
const Displacement &  displacement,
const scalar  fraction,
barycentric coordinates,
label celli,
label facei,
label faceTrii,
scalar &  stepFraction,
scalar &  stepFractionBehind,
label nTracksBehind,
const string debugPrefix = NullObjectRefstring >() 
)

Track along the displacement for a given fraction of the overall.

time-step. End when the track is complete or when a face is hit. Return whether or not a face was hit (true) or the track completed (false) and the proportion of the displacement still to be completed. Displacement can be a single vector, d, in which case the path is linear and equal to x0 + lambda*d, where x0 is the starting position and lambda is the local coordinate along the path. Or, displacement can be a pair of vectors, d1 and d2, in which case the path is parabolic and equal to x0 + lambda*d1 + lambda*lambda*d2.

Referenced by Foam::tracking::toCell< Foam::Pair< Foam::vector > >(), Foam::tracking::toFace< Foam::Pair< Foam::vector > >(), LagrangianMesh::track(), and particle::trackToFace().

Here is the caller graph for this function:

◆ toCell()

Tuple2<bool, scalar> Foam::tracking::toCell ( const polyMesh mesh,
const Displacement &  displacement,
const scalar  fraction,
barycentric coordinates,
label celli,
label facei,
label faceTrii,
scalar &  stepFraction,
scalar &  stepFractionBehind,
label nTracksBehind,
const string debugPrefix = NullObjectRefstring >() 
)

As toFace, except that if the track ends on an internal face then this.

face will be crossed

Referenced by particle::trackToCell().

Here is the caller graph for this function:

◆ toBoundary()

Tuple2<bool, scalar> Foam::tracking::toBoundary ( const polyMesh mesh,
const Displacement &  displacement,
const scalar  fraction,
barycentric coordinates,
label celli,
label facei,
label faceTrii,
scalar &  stepFraction,
scalar &  stepFractionBehind,
label nTracksBehind,
const string debugPrefix = NullObjectRefstring >() 
)

As toFace, except that the track continues across multiple cells until.

it ends or until a boundary face is hit

Referenced by crossWedge(), locate(), and particle::track().

Here is the caller graph for this function:

◆ locate()

bool locate ( const polyMesh mesh,
const point position,
barycentric coordinates,
label celli,
label facei,
label faceTrii,
const scalar  stepFraction,
const string debugPrefix = NullObjectRef<string>() 
)

◆ crossInternalFace()

void crossInternalFace ( const polyMesh mesh,
barycentric coordinates,
label celli,
label facei,
label faceTrii 
)

Cross an internal face.

Definition at line 1680 of file tracking.C.

References coordinates(), polyMesh::faceNeighbour(), polyMesh::faceOwner(), mesh, and reflect().

Referenced by LagrangianMesh::crossFaces(), Foam::tracking::toCell< Foam::Pair< Foam::vector > >(), Foam::tracking::toFace< Foam::Pair< Foam::vector > >(), and particle::hitFace().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ crossWedge()

void crossWedge ( const wedgePolyPatch inPatch,
barycentric coordinates,
label celli,
label facei,
label faceTrii,
const scalar  stepFraction 
)

Cross a wedge patch.

Definition at line 1699 of file tracking.C.

References polyPatch::boundaryMesh(), polyMesh::bounds(), wedgePolyPatch::centreNormal(), coordinates(), boundBox::mag(), polyBoundaryMesh::mesh(), mesh, and toBoundary().

Referenced by wedgeLagrangianPatch::evaluate().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ crossCyclic()

void crossCyclic ( const cyclicPolyPatch inPatch,
barycentric coordinates,
label celli,
label facei,
label faceTrii 
)

Cross a cyclic patch.

Definition at line 1735 of file tracking.C.

References polyPatch::boundaryMesh(), coordinates(), polyMesh::faceOwner(), polyMesh::faces(), polyBoundaryMesh::mesh(), mesh, cyclicPolyPatch::nbrPatch(), reflect(), List< T >::size(), and polyPatch::start().

Referenced by cyclicLagrangianPatch::evaluate(), and particle::hitCyclicPatch().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ inProcessor()

void inProcessor ( const processorPolyPatch inPatch,
label celli,
label facei 
)

Initialise crossing of a processor patch. Breaks the topology in order.

to store the destination patch face in advance of communication.

Definition at line 1761 of file tracking.C.

References polyPatch::start().

Referenced by processorLagrangianPatch::initEvaluate(), and particle::prepareForProcessorTransfer().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ outProcessor()

void outProcessor ( const processorPolyPatch outPatch,
barycentric coordinates,
label celli,
label facei,
label faceTrii 
)

Complete crossing of a processor patch. Restore the topology.

Definition at line 1776 of file tracking.C.

References polyPatch::boundaryMesh(), coordinates(), polyPatch::faceCells(), polyMesh::faces(), polyBoundaryMesh::mesh(), mesh, reflect(), List< T >::size(), and polyPatch::start().

Referenced by particle::correctAfterProcessorTransfer(), and processorLagrangianPatch::evaluate().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ stationaryTetGeometry()

void stationaryTetGeometry ( const polyMesh mesh,
const label  celli,
const label  facei,
const label  faceTrii,
vector centre,
vector base,
vector vertex1,
vector vertex2 
)
inline

Get the vertices of the current tet.

Definition at line 105 of file trackingI.H.

References primitiveMesh::cellCentres(), mesh, and polyMesh::points().

Referenced by faceNormalAndDisplacement(), stationaryTetTransform(), and toStationaryTri().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ stationaryTetTransform()

Foam::barycentricTensor stationaryTetTransform ( const polyMesh mesh,
const label  celli,
const label  facei,
const label  faceTrii 
)
inline

Get the transformation associated with the current tet. This.

will convert a barycentric position within the tet to a cartesian position in the global coordinate system. The conversion is x = A & y, where x is the cartesian position, y is the barycentric position and A is the transformation tensor.

Definition at line 128 of file trackingI.H.

References mesh, and stationaryTetGeometry().

Referenced by position(), and stationaryTetReverseTransform().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ movingTetGeometry()

void movingTetGeometry ( const polyMesh mesh,
const label  celli,
const label  facei,
const label  faceTrii,
const scalar  startStepFraction,
const scalar  endStepFraction,
Pair< vector > &  centre,
Pair< vector > &  base,
Pair< vector > &  vertex1,
Pair< vector > &  vertex2 
)
inline

Get the vertices of the current moving tet. Two values are.

returned for each vertex. The first is a constant, and the second is a linear coefficient of the track fraction.

Definition at line 153 of file trackingI.H.

References primitiveMesh::cellCentres(), mesh, polyMesh::oldCellCentres(), polyMesh::oldPoints(), and polyMesh::points().

Referenced by faceNormalAndDisplacement(), movingTetTransform(), and toMovingTri().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ movingTetTransform()

Foam::Pair< Foam::barycentricTensor > movingTetTransform ( const polyMesh mesh,
const label  celli,
const label  facei,
const label  faceTrii,
const scalar  startStepFraction,
const scalar  endStepFraction 
)
inline

Get the transformation associated with the current, moving, tet.

This is of the same form as for the static case. As with the moving geometry, a linear function of the tracking fraction is returned for each component.

Definition at line 187 of file trackingI.H.

References mesh, and movingTetGeometry().

Referenced by movingTetReverseTransform(), and position().

Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ maxNTracksBehind

const label maxNTracksBehind = 48
static

The counter nTracksBehind is the number of tracks carried out that.

ended in a step fraction less than the maximum reached so far. Once this reaches maxNTracksBehind, tracking is abandoned for the current step.

This is needed because when tetrahedra are inverted a straight trajectory can form a closed loop through regions of overlapping positive and negative space. Without this break clause, such loops can result in a valid track which never ends.

Because the test is susceptible to round off error, a track of zero length will also increment the counter. As such, it is important that maxNTracksBehind is set large enough so that valid small tracks do not result in the track being abandoned. The largest number of valid small tracks that are likely to be performed sequentially is equal to the number of tetrahedra that can meet at a point. An estimate of this number is therefore used to set maxNTracksBehind.

Definition at line 106 of file tracking.C.