$treeview $search $mathjax
Palabos  Version 1.1
$projectbrief
$projectbrief
$searchbox

plb::TriangleFlowShape3D< T, SurfaceData > Class Template Reference

#include <triangleBoundary3D.h>

Inheritance diagram for plb::TriangleFlowShape3D< T, SurfaceData >:
Collaboration diagram for plb::TriangleFlowShape3D< T, SurfaceData >:

List of all members.

Public Member Functions

 TriangleFlowShape3D (TriangleBoundary3D< T > const &boundary_, BoundaryProfiles3D< T, SurfaceData > const &profiles_)
virtual bool isInside (Dot3D const &location) const
 Decide whether a given discrete lattice node is inside the solid shape.
virtual bool pointOnSurface (Array< T, 3 > const &fromPoint, Array< T, 3 > const &direction, Array< T, 3 > &locatedPoint, T &distance, Array< T, 3 > &wallNormal, SurfaceData &surfaceData, OffBoundary::Type &bdType, plint &id) const
virtual Array< T, 3 > computeContinuousNormal (Array< T, 3 > const &p, plint id, bool isAreaWeighted=false) const
virtual bool intersectsSurface (Array< T, 3 > const &p1, Array< T, 3 > const &p2, plint &id) const
 Say if a given segment intersects the surface.
virtual plint getTag (plint id) const
virtual bool distanceToSurface (Array< T, 3 > const &point, T &distance, bool &isBehind) const
virtual TriangleFlowShape3D< T,
SurfaceData > * 
clone () const
 Plain clone function.
virtual TriangleFlowShape3D< T,
SurfaceData > * 
clone (std::vector< AtomicBlock3D * > args) const
 Use this clone function to provide the meshed data to this object.

template<typename T, class SurfaceData>
class plb::TriangleFlowShape3D< T, SurfaceData >


Constructor & Destructor Documentation

template<typename T , class SurfaceData >
plb::TriangleFlowShape3D< T, SurfaceData >::TriangleFlowShape3D ( TriangleBoundary3D< T > const &  boundary_,
BoundaryProfiles3D< T, SurfaceData > const &  profiles_ 
) [inline]

Member Function Documentation

template<typename T , class SurfaceData >
TriangleFlowShape3D< T, SurfaceData > * plb::TriangleFlowShape3D< T, SurfaceData >::clone ( std::vector< AtomicBlock3D * >  args  )  const [inline, virtual]

Use this clone function to provide the meshed data to this object.

The arguments are: 0: The voxel flags (ScalarField3D<T>), 1: The hash container (AtomicContainerBlock3D), 2: The boundary argument: an additional argument needed by BoundaryProfiles in order to compute the boundary condition. In dynamic walls this is for example often a MultiParticleField, used to determined the wall velocity.

Reimplemented from plb::BoundaryShape3D< T, SurfaceData >.

References PLB_ASSERT, and PLB_PRECONDITION.

template<typename T , class SurfaceData >
TriangleFlowShape3D< T, SurfaceData > * plb::TriangleFlowShape3D< T, SurfaceData >::clone (  )  const [inline, virtual]

Plain clone function.

Implements plb::BoundaryShape3D< T, SurfaceData >.

template<typename T , class SurfaceData >
Array< T, 3 > plb::TriangleFlowShape3D< T, SurfaceData >::computeContinuousNormal ( Array< T, 3 > const &  p,
plint  id,
bool  isAreaWeighted = false 
) const [inline, virtual]

Given a point p on the surface of the shape, determine its "continuous normal". If the shape is for example piecewise linear, the normal is adjusted to vary continuously over the surface.

Implements plb::BoundaryShape3D< T, SurfaceData >.

template<typename T , class SurfaceData >
bool plb::TriangleFlowShape3D< T, SurfaceData >::distanceToSurface ( Array< T, 3 > const &  point,
T &  distance,
bool &  isBehind 
) const [inline, virtual]

Get the shortest distance to the wall. Returns true in case of success. The flag isBehind indicates if the point is "behind" the wall, i.e. in the direction opposite to the wall normal.

Implements plb::BoundaryShape3D< T, SurfaceData >.

References plb::TriangleHash< T >::getTriangles(), and PLB_PRECONDITION.

template<typename T , class SurfaceData >
plint plb::TriangleFlowShape3D< T, SurfaceData >::getTag ( plint  id  )  const [inline, virtual]

Return the tag (id of boundary-portion with specific boundary, condition); the id is the one returned by pointOnSurface.

Implements plb::BoundaryShape3D< T, SurfaceData >.

template<typename T , class SurfaceData >
bool plb::TriangleFlowShape3D< T, SurfaceData >::intersectsSurface ( Array< T, 3 > const &  p1,
Array< T, 3 > const &  p2,
plint id 
) const [inline, virtual]
template<typename T , class SurfaceData >
bool plb::TriangleFlowShape3D< T, SurfaceData >::isInside ( Dot3D const &  location  )  const [inline, virtual]

Decide whether a given discrete lattice node is inside the solid shape.

The reason why there is an isInside function instead of a isOutside one is that while there exists only one voxelFlag::inside flag, there are several flags which count as outside: undetermined, outside, and borderline. This is particularly important for the undetermined flag, because the outer envelopes in a multi-block structure have no special meaning and are default-initialized to undetermined.

Implements plb::BoundaryShape3D< T, SurfaceData >.

References plb::ScalarField3D< T >::get(), plb::AtomicBlock3D::getLocation(), plb::voxelFlag::insideFlag(), PLB_PRECONDITION, plb::Dot3D::x, plb::Dot3D::y, and plb::Dot3D::z.

template<typename T , class SurfaceData >
bool plb::TriangleFlowShape3D< T, SurfaceData >::pointOnSurface ( Array< T, 3 > const &  fromPoint,
Array< T, 3 > const &  direction,
Array< T, 3 > &  locatedPoint,
T &  distance,
Array< T, 3 > &  wallNormal,
SurfaceData &  surfaceData,
OffBoundary::Type bdType,
plint id 
) const [inline, virtual]

Get the distance to the wall, and the velocity value on the wall, from a given real-valued position (in lattice units), and along a given direction. Returns true if there exists an intersection along the indicated direction. ATTENTION: The id is an in-and-out value. If you know the right id of the surface intersection (e.g. the triangle ID in case of a triangular mesh) you can provide it to speed up the calculation. However, if you don't know it, you MUST provide the value -1, because otherwise the result might be wrong.

Implements plb::BoundaryShape3D< T, SurfaceData >.

References plb::TriangleHash< T >::getTriangles(), and PLB_PRECONDITION.

Referenced by plb::TriangleFlowShape3D< T, SurfaceData >::intersectsSurface().


The documentation for this class was generated from the following files: