KratosMultiphysics
KRATOS Multiphysics (Kratos) is a framework for building parallel, multi-disciplinary simulation software, aiming at modularity, extensibility, and high performance. Kratos is written in C++, and counts with an extensive Python interface.
|
Applies ray casting to distinguish the color (like in/out) of each node in modelpart. More...
#include <apply_ray_casting_process.h>
Public Member Functions | |
Life Cycle | |
ApplyRayCastingProcess (ModelPart &rVolumePart, ModelPart &rSkinPart, Parameters ThisParameters=Parameters()) | |
Construct a new ApplyRayCastingProcess object using volume and skin model parts Constructor without user defined extra rays epsilon, used to generate the extra rays when voting is required for coloring. More... | |
ApplyRayCastingProcess (ModelPart &rVolumePart, ModelPart &rSkinPart, const double RelativeTolerance) | |
Construct a new ApplyRayCastingProcess object using volume and skin model parts. More... | |
ApplyRayCastingProcess (FindIntersectedGeometricalObjectsProcess &TheFindIntersectedObjectsProcess, Parameters ThisParameters=Parameters()) | |
Construct a new Apply Ray Casting Process object using an already created search strucutre. More... | |
ApplyRayCastingProcess (FindIntersectedGeometricalObjectsProcess &TheFindIntersectedObjectsProcess, const double RelativeTolerance, const Variable< double > *pDistanceVariable, const DistanceDatabase &rDistanceDatabase) | |
Construct a new Apply Ray Casting Process object using an already created search strucutre. More... | |
~ApplyRayCastingProcess () override | |
Destructor. More... | |
Deleted | |
ApplyRayCastingProcess () | |
Default constructor, needed for registry. More... | |
ApplyRayCastingProcess (ApplyRayCastingProcess const &rOther)=delete | |
Copy constructor. More... | |
ApplyRayCastingProcess & | operator= (ApplyRayCastingProcess const &rOther)=delete |
Assignment operator. More... | |
Operations | |
const Parameters | GetDefaultParameters () const override |
This method provides the defaults parameters to avoid conflicts between the different constructors. More... | |
virtual double | DistancePositionInSpace (const Node &rNode) |
Computes the raycasting distance for a node This method computes the raycasting distance for a given node. It casts a ray in the x and y (as well as z in 3D) directions and computes the distance from the ray origin point (the node of interest) to each one of the intersecting objects. More... | |
virtual void | GetRayIntersections (const double *ray, const unsigned int direction, std::vector< std::pair< double, Element::GeometryType * > > &rIntersections) |
Get the ray intersecting objects and its distance For a given ray and direction, this method search for all the intersecting entities to this ray. This operation is performed using the binary octree in the discontinuous distance base class to check each one of the cells crossed by the ray. More... | |
virtual int | GetCellIntersections (OctreeType::cell_type *cell, const double *ray, OctreeType::key_type *ray_key, const unsigned int direction, std::vector< std::pair< double, Element::GeometryType * > > &rIntersections) |
Get the intersecting objects contained in the current cell. More... | |
void | Execute () override |
Executes the ApplyRayCastingProcess This method automatically does all the calls required to compute the signed distance function. More... | |
Input and output | |
std::string | Info () const override |
Turn back information as a string. More... | |
void | PrintInfo (std::ostream &rOStream) const override |
Print information about this object. More... | |
void | PrintData (std::ostream &rOStream) const override |
Print object's data. More... | |
Public Member Functions inherited from Kratos::Process | |
KRATOS_CLASS_POINTER_DEFINITION (Process) | |
Pointer definition of Process. More... | |
Process () | |
Default constructor. More... | |
Process (const Flags options) | |
~Process () override | |
Destructor. More... | |
void | operator() () |
This operator is provided to call the process as a function and simply calls the Execute method. More... | |
virtual Process::Pointer | Create (Model &rModel, Parameters ThisParameters) |
This method creates an pointer of the process. More... | |
virtual void | ExecuteInitialize () |
This function is designed for being called at the beginning of the computations right after reading the model and the groups. More... | |
virtual void | ExecuteBeforeSolutionLoop () |
This function is designed for being execute once before the solution loop but after all of the solvers where built. More... | |
virtual void | ExecuteInitializeSolutionStep () |
This function will be executed at every time step BEFORE performing the solve phase. More... | |
virtual void | ExecuteFinalizeSolutionStep () |
This function will be executed at every time step AFTER performing the solve phase. More... | |
virtual void | ExecuteBeforeOutputStep () |
This function will be executed at every time step BEFORE writing the output. More... | |
virtual void | ExecuteAfterOutputStep () |
This function will be executed at every time step AFTER writing the output. More... | |
virtual void | ExecuteFinalize () |
This function is designed for being called at the end of the computations. More... | |
virtual int | Check () |
This function is designed for being called after ExecuteInitialize ONCE to verify that the input is correct. More... | |
virtual void | Clear () |
This method clears the assignation of the conditions. More... | |
std::string | Info () const override |
Turn back information as a string. More... | |
void | PrintInfo (std::ostream &rOStream) const override |
Print information about this object. More... | |
void | PrintData (std::ostream &rOStream) const override |
Print object's data. More... | |
Public Member Functions inherited from Kratos::Flags | |
Flags & | operator= (Flags const &rOther) |
Assignment operator. More... | |
operator bool () const | |
Flags | operator~ () const |
bool | operator! () const |
void | AssignFlags (Flags const &rOther) |
void | Set (const Flags ThisFlag) |
void | Set (const Flags ThisFlag, bool Value) |
void | Reset (const Flags ThisFlag) |
void | Flip (const Flags ThisFlag) |
void | SetPosition (IndexType Position, bool Value=true) |
bool | GetPosition (IndexType Position) const |
void | FlipPosition (IndexType Position) |
void | ClearPosition (IndexType Position) |
void | Clear () |
Flags | AsFalse () const |
bool | Is (Flags const &rOther) const |
bool | IsDefined (Flags const &rOther) const |
bool | IsNot (Flags const &rOther) const |
bool | IsNotDefined (Flags const &rOther) const |
KRATOS_CLASS_POINTER_DEFINITION (Flags) | |
Pointer definition of Flags. More... | |
const Flags & | operator|= (const Flags &Other) |
const Flags & | operator&= (const Flags &Other) |
Flags () | |
Default constructor. More... | |
Flags (Flags const &rOther) | |
Copy constructor. More... | |
virtual | ~Flags () |
Destructor. More... | |
Protected Member Functions | |
void | GetExtraRayOrigins (const array_1d< double, 3 > &rCoords, array_1d< array_1d< double, 3 >, 5 > &rExtraRayOrigs) |
void | GetExtraRayOrigins (const array_1d< double, 3 > &rCoords, array_1d< array_1d< double, 3 >, 9 > &rExtraRayOrigs) |
int | ComputeRayIntersection (Element::GeometryType &rGeometry, const double *pRayPoint1, const double *pRayPoint2, double *pIntersectionPoint) |
int | ComputeRayIntersection (Element::GeometryType &rGeometry, const double *pRayPoint1, const double *pRayPoint2, double *pIntersectionPoint) |
Private Operations | |
int | ComputeRayIntersection (Element::GeometryType &rGeometry, const double *pRayPoint1, const double *pRayPoint2, double *pIntersectionPoint) |
Checks if a ray intersects an intersecting geometry candidate For a given intersecting geometry, it checks if the ray intersects it. More... | |
void | GetExtraRayOrigins (const array_1d< double, 3 > &rCoords, array_1d< array_1d< double, 3 >,(TDim==3) ? 9 :5 > &rExtraRayOrigs) |
Creates the start point in space for new extra rays around current ray This method is used to create extra rays when the original one hits border of a goemetry. More... | |
void | CorrectExtraRayOrigin (double *ExtraRayCoords) |
Trims the extra rays to bounding box. More... | |
void | ComputeExtraRayColors (const array_1d< double, 3 > &rCoords, array_1d< double, TDim > &rDistances) |
Creates extra rays around the current one and determine the color by voting When a ray hits border of a geometry this method is called to determine if the ray is penetrating the object or not. The idea is to lunch several rays around the original one and check the pentration by voting between them. More... | |
void | CalculateCharacteristicLength () |
Calculate the mCharacterisiticLength variable using bounding box of the domain to be used in scaling the epsilons The actual version calcuates the bonding box and takes the distance between max and min points as characteristic length. More... | |
void | SetRayCastingTolerances () |
Set the Ray Casting Tolerances values This method sets the ray casting tolerances values according to the domain bounding box size. More... | |
NodeScalarGetFunctionType | CreateDistanceGetterFunctor () const |
This method returns the function to get the distance from a node. More... | |
virtual ApplyNodalFunctorType | CreateApplyNodalFunction () const |
This method returns the function that will be applied to nodes depending on ray distance. More... | |
Protected Attributes | |
Member Variables | |
Parameters | mSettings |
double | mEpsilon |
double | mExtraRayOffset |
double | mRelativeTolerance |
FindIntersectedGeometricalObjectsProcess * | mpFindIntersectedObjectsProcess |
bool | mIsSearchStructureAllocated |
double | mCharacteristicLength |
const Variable< double > * | mpDistanceVariable = nullptr |
NodeScalarGetFunctionType | mDistanceGetterFunctor |
Type Definitions | |
enum class | DistanceDatabase { NodeHistorical , NodeNonHistorical } |
Nodal databases auxiliary enum. More... | |
using | ConfigurationType = Internals::DistanceSpatialContainersConfigure |
using | CellType = OctreeBinaryCell< ConfigurationType > |
using | OctreeType = OctreeBinary< CellType > |
using | CellNodeDataType = ConfigurationType::cell_node_data_type |
typedef Element::GeometryType | IntersectionGeometryType |
typedef std::vector< std::pair< double, IntersectionGeometryType * > > | IntersectionsContainerType |
using | NodeType = ModelPart::NodeType |
using | NodeScalarGetFunctionType = std::function< double &(NodeType &rNode, const Variable< double > &rDistanceVariable)> |
using | ApplyNodalFunctorType = std::function< void(NodeType &, const double)> |
KRATOS_CLASS_POINTER_DEFINITION (ApplyRayCastingProcess) | |
Pointer definition of ApplyRayCastingProcess. More... | |
Additional Inherited Members | |
Public Types inherited from Kratos::Flags | |
enum | FlagsList { Flag0 = BlockType(1) , Flag1 = BlockType(1) << 1 , Flag2 = BlockType(1) << 2 , Flag3 = BlockType(1) << 3 , Flag4 = BlockType(1) << 4 , Flag5 = BlockType(1) << 5 , Flag6 = BlockType(1) << 6 , Flag7 = BlockType(1) << 7 , Flag8 = BlockType(1) << 8 , Flag9 = BlockType(1) << 9 , Flag10 = BlockType(1) << 10 , Flag11 = BlockType(1) << 11 , Flag12 = BlockType(1) << 12 , Flag13 = BlockType(1) << 13 , Flag14 = BlockType(1) << 14 , Flag15 = BlockType(1) << 15 , Flag16 = BlockType(1) << 16 , Flag17 = BlockType(1) << 17 , Flag18 = BlockType(1) << 18 , Flag19 = BlockType(1) << 19 , Flag20 = BlockType(1) << 20 , Flag21 = BlockType(1) << 21 , Flag22 = BlockType(1) << 22 , Flag23 = BlockType(1) << 23 , Flag24 = BlockType(1) << 24 , Flag25 = BlockType(1) << 25 , Flag26 = BlockType(1) << 26 , Flag27 = BlockType(1) << 27 , Flag28 = BlockType(1) << 28 , Flag29 = BlockType(1) << 29 , Flag30 = BlockType(1) << 30 } |
typedef int64_t | BlockType |
typedef int64_t | FlagType |
typedef std::size_t | IndexType |
Static Public Member Functions inherited from Kratos::Flags | |
static const Flags | AllDefined () |
static const Flags | AllTrue () |
static Flags | Create (IndexType ThisPosition, bool Value=true) |
Applies ray casting to distinguish the color (like in/out) of each node in modelpart.
This class is used to define the which nodes are inside or outside of certain volume described by its contour
using Kratos::ApplyRayCastingProcess< TDim >::ApplyNodalFunctorType = std::function<void(NodeType&, const double)> |
using Kratos::ApplyRayCastingProcess< TDim >::CellNodeDataType = ConfigurationType::cell_node_data_type |
using Kratos::ApplyRayCastingProcess< TDim >::CellType = OctreeBinaryCell<ConfigurationType> |
using Kratos::ApplyRayCastingProcess< TDim >::ConfigurationType = Internals::DistanceSpatialContainersConfigure |
typedef Element::GeometryType Kratos::ApplyRayCastingProcess< TDim >::IntersectionGeometryType |
typedef std::vector<std::pair<double, IntersectionGeometryType*> > Kratos::ApplyRayCastingProcess< TDim >::IntersectionsContainerType |
using Kratos::ApplyRayCastingProcess< TDim >::NodeScalarGetFunctionType = std::function<double&(NodeType& rNode, const Variable<double>& rDistanceVariable)> |
using Kratos::ApplyRayCastingProcess< TDim >::NodeType = ModelPart::NodeType |
using Kratos::ApplyRayCastingProcess< TDim >::OctreeType = OctreeBinary<CellType> |
|
strong |
Kratos::ApplyRayCastingProcess< TDim >::ApplyRayCastingProcess | ( | ModelPart & | rVolumePart, |
ModelPart & | rSkinPart, | ||
Parameters | ThisParameters = Parameters() |
||
) |
Construct a new ApplyRayCastingProcess object using volume and skin model parts Constructor without user defined extra rays epsilon, used to generate the extra rays when voting is required for coloring.
rVolumePart | model part containing the volume elements |
rSkinPart | model part containing the skin to compute the distance to as conditions |
Kratos::ApplyRayCastingProcess< TDim >::ApplyRayCastingProcess | ( | ModelPart & | rVolumePart, |
ModelPart & | rSkinPart, | ||
const double | RelativeTolerance | ||
) |
Construct a new ApplyRayCastingProcess object using volume and skin model parts.
rVolumePart | model part containing the volume elements |
rSkinPart | model part containing the skin to compute the distance to as conditions |
RelativeTolerance | user-defined relative tolerance to be multiplied by the domain bounding box size |
Kratos::ApplyRayCastingProcess< TDim >::ApplyRayCastingProcess | ( | FindIntersectedGeometricalObjectsProcess & | TheFindIntersectedObjectsProcess, |
Parameters | ThisParameters = Parameters() |
||
) |
Construct a new Apply Ray Casting Process object using an already created search strucutre.
TheFindIntersectedObjectsProcess | reference to the already created search structure |
RelativeTolerance | user-defined relative tolerance to be multiplied by the domain bounding box size |
Kratos::ApplyRayCastingProcess< TDim >::ApplyRayCastingProcess | ( | FindIntersectedGeometricalObjectsProcess & | TheFindIntersectedObjectsProcess, |
const double | RelativeTolerance, | ||
const Variable< double > * | pDistanceVariable, | ||
const DistanceDatabase & | rDistanceDatabase | ||
) |
Construct a new Apply Ray Casting Process object using an already created search strucutre.
TheFindIntersectedObjectsProcess | reference to the already created search structure |
RelativeTolerance | user-defined relative tolerance to be multiplied by the domain bounding box size |
pDistanceVariable | user-defined variabe to be used to read and store the distance to the skin |
rDistanceDatabase | enum value specifying the database from which the distance variable is retrieved (see DistanceDatabase) |
|
override |
Destructor.
|
inline |
Default constructor, needed for registry.
|
delete |
Copy constructor.
|
protected |
Calculate the mCharacterisiticLength variable using bounding box of the domain to be used in scaling the epsilons The actual version calcuates the bonding box and takes the distance between max and min points as characteristic length.
|
protected |
Creates extra rays around the current one and determine the color by voting When a ray hits border of a geometry this method is called to determine if the ray is penetrating the object or not. The idea is to lunch several rays around the original one and check the pentration by voting between them.
rCoords | coordinate of the original ray |
rDistances | obtain distances in different directions using extra rays |
|
protected |
|
protected |
|
protected |
Checks if a ray intersects an intersecting geometry candidate For a given intersecting geometry, it checks if the ray intersects it.
rGeometry | reference to the candidate intersecting object |
pRayPoint1 | ray origin point |
pRayPoint2 | ray end point |
pIntersectionPoint | obtained intersecting point |
|
protected |
Trims the extra rays to bounding box.
|
protectedvirtual |
This method returns the function that will be applied to nodes depending on ray distance.
Reimplemented in Kratos::ApplyRayCastingInterfaceRecognitionProcess< TDim >.
|
protected |
This method returns the function to get the distance from a node.
|
virtual |
Computes the raycasting distance for a node This method computes the raycasting distance for a given node. It casts a ray in the x and y (as well as z in 3D) directions and computes the distance from the ray origin point (the node of interest) to each one of the intersecting objects.
rNode | reference to the node of interest |
|
overridevirtual |
Executes the ApplyRayCastingProcess This method automatically does all the calls required to compute the signed distance function.
Reimplemented from Kratos::Process.
|
virtual |
Get the intersecting objects contained in the current cell.
cell | current cell |
ray | casted ray coordinates |
ray_key | binary octree ray key |
direction | direction of the casted ray (0 for x, 1 for y and 2 for z) |
rIntersections | array containing a pair for each intersection found. The first value of the pair contains the ray distance to the intersection entity while the second one contains a pointer to the intersection entity geometry |
|
overridevirtual |
This method provides the defaults parameters to avoid conflicts between the different constructors.
Reimplemented from Kratos::Process.
|
protected |
|
protected |
|
protected |
Creates the start point in space for new extra rays around current ray This method is used to create extra rays when the original one hits border of a goemetry.
RayEpsilon | Distance between this original ray and extra one around it |
rCoords | coordinate of the original ray |
rExtraRayOrigs | obtained extra rays |
|
virtual |
Get the ray intersecting objects and its distance For a given ray and direction, this method search for all the intersecting entities to this ray. This operation is performed using the binary octree in the discontinuous distance base class to check each one of the cells crossed by the ray.
ray | casted ray coordinates |
direction | direction of the casted ray (0 for x, 1 for y and 2 for z) |
rIntersections | array containing a pair for each intersection found. The first value of the pair contains the ray distance to the intersection entity while the second one contains a pointer to the intersection entity geometry |
|
overridevirtual |
Turn back information as a string.
Reimplemented from Kratos::Flags.
Kratos::ApplyRayCastingProcess< TDim >::KRATOS_CLASS_POINTER_DEFINITION | ( | ApplyRayCastingProcess< TDim > | ) |
Pointer definition of ApplyRayCastingProcess.
|
delete |
Assignment operator.
|
overridevirtual |
Print object's data.
Reimplemented from Kratos::Flags.
|
overridevirtual |
Print information about this object.
Reimplemented from Kratos::Flags.
|
protected |
Set the Ray Casting Tolerances values This method sets the ray casting tolerances values according to the domain bounding box size.
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |