AXOM
Axom provides a robust, flexible software infrastructure for the development of multi-physics applications and computational tools.
axom::quest::NURBSPatchGWNQuery< ExecSpace, ORDER > Class Template Reference

Preprocesses NURBSPatch geometry for GWN evaluation, and performs the calculation on the DOFs of an input MFEM mesh. More...

#include </home/docs/checkouts/readthedocs.org/user_builds/axom/checkouts/develop/src/axom/quest/GWNMethods.hpp>

Public Types

using BoxType = axom::primal::BoundingBox< double, 3 >
 
using GWNMoments = axom::quest::GWNMomentData< double, 3, ORDER >
 
using PatchType = axom::primal::NURBSPatch< double, 3 >
 
using PatchArrayType = axom::Array< PatchType >
 
using NURBSCacheManager = typename axom::primal::nurbs_cache_3d_traits< ExecSpace >::type
 

Public Member Functions

 NURBSPatchGWNQuery ()=default
 
void preprocess (const PatchArrayType &input_patches, bool use_direct_eval=false, bool use_memoization=true)
 Process input patches, optionally building a BVH. More...
 
void query (mfem::DataCollection &dc, const primal::WindingTolerances &tol, const double slice_z=0.0)
 Evaluate the GWN for a query grid at the DOFs of the dc query mesh. More...
 
Setters for misc algorithm parameters
void setSubdivisionBboxThreshold (double subdivision_bbox_threshold)
 
void setSubdivisionMaxPasses (int subdivision_max_passes)
 
void setSubdivisionMaxNumPatches (int subdivision_max_patches)
 

Detailed Description

template<typename ExecSpace, int ORDER = 2>
class axom::quest::NURBSPatchGWNQuery< ExecSpace, ORDER >

Preprocesses NURBSPatch geometry for GWN evaluation, and performs the calculation on the DOFs of an input MFEM mesh.

Template Parameters
ExecSpaceThe execution space for the algorithm.
ORDERIf agglomeration is used, this is the order of the Taylor expansion.

Possible evaluation modes are use_direct_eval : If true, evaluation is done patch-by-patch. If false, evaluation is sped up with agglomeration via Taylor-expansion use_memoization : Caches and re-uses trimming curve quadrature data for patch evaluation

Member Typedef Documentation

◆ BoxType

template<typename ExecSpace , int ORDER = 2>
using axom::quest::NURBSPatchGWNQuery< ExecSpace, ORDER >::BoxType = axom::primal::BoundingBox<double, 3>

◆ GWNMoments

template<typename ExecSpace , int ORDER = 2>
using axom::quest::NURBSPatchGWNQuery< ExecSpace, ORDER >::GWNMoments = axom::quest::GWNMomentData<double, 3, ORDER>

◆ PatchType

template<typename ExecSpace , int ORDER = 2>
using axom::quest::NURBSPatchGWNQuery< ExecSpace, ORDER >::PatchType = axom::primal::NURBSPatch<double, 3>

◆ PatchArrayType

template<typename ExecSpace , int ORDER = 2>
using axom::quest::NURBSPatchGWNQuery< ExecSpace, ORDER >::PatchArrayType = axom::Array<PatchType>

◆ NURBSCacheManager

template<typename ExecSpace , int ORDER = 2>
using axom::quest::NURBSPatchGWNQuery< ExecSpace, ORDER >::NURBSCacheManager = typename axom::primal::nurbs_cache_3d_traits<ExecSpace>::type

Constructor & Destructor Documentation

◆ NURBSPatchGWNQuery()

template<typename ExecSpace , int ORDER = 2>
axom::quest::NURBSPatchGWNQuery< ExecSpace, ORDER >::NURBSPatchGWNQuery ( )
default

Member Function Documentation

◆ setSubdivisionBboxThreshold()

template<typename ExecSpace , int ORDER = 2>
void axom::quest::NURBSPatchGWNQuery< ExecSpace, ORDER >::setSubdivisionBboxThreshold ( double  subdivision_bbox_threshold)
inline

◆ setSubdivisionMaxPasses()

template<typename ExecSpace , int ORDER = 2>
void axom::quest::NURBSPatchGWNQuery< ExecSpace, ORDER >::setSubdivisionMaxPasses ( int  subdivision_max_passes)
inline

◆ setSubdivisionMaxNumPatches()

template<typename ExecSpace , int ORDER = 2>
void axom::quest::NURBSPatchGWNQuery< ExecSpace, ORDER >::setSubdivisionMaxNumPatches ( int  subdivision_max_patches)
inline

◆ preprocess()

template<typename ExecSpace , int ORDER = 2>
void axom::quest::NURBSPatchGWNQuery< ExecSpace, ORDER >::preprocess ( const PatchArrayType input_patches,
bool  use_direct_eval = false,
bool  use_memoization = true 
)
inline

Process input patches, optionally building a BVH.

Processing involves "cleaning" input surfaces for more robust GWN evaluation by

  • Normalizing the parameter space of each surface according to the number of knot spans
  • Ensuring each input is represented as a trimmed surface
  • Clipping the parameter space of each surface to the visible (i.e. trimmed) portion
Parameters
[in]input_patchesA view to the input trimmed NURBS surfaces
[in]use_direct_evalIf false, use accelerated agglomeration algorithm via BVH
[in]use_memoizationIf true, allocate a per-thread cache for each patch

References AXOM_ANNOTATE_SCOPE, AXOM_LAMBDA, axom::spin::BVH< NDIMS, ExecSpace, FloatType, BVHImpl >::getTraverser(), axom::spin::BVH< NDIMS, ExecSpace, FloatType, BVHImpl >::initialize(), SLIC_WARNING, axom::quest::subdivide_patches(), and axom::Array< T, DIM, SPACE, StoragePolicy >::view().

◆ query()

template<typename ExecSpace , int ORDER = 2>
void axom::quest::NURBSPatchGWNQuery< ExecSpace, ORDER >::query ( mfem::DataCollection &  dc,
const primal::WindingTolerances tol,
const double  slice_z = 0.0 
)
inline

Evaluate the GWN for a query grid at the DOFs of the dc query mesh.

Parameters
[in]dcA query grid to be evaluated at the DOFs
[in]tolA collection of possible tolerances for GWN evaluation
[in]slice_zIf the dc mesh is 2D, the GWN will be evaluated on a slice parallel to the x-y plane with this offset on the z-axis

References AXOM_ANNOTATE_SCOPE, axom::primal::WindingTolerances::disk_size, axom::primal::WindingTolerances::edge_tol, axom::primal::WindingTolerances::EPS, axom::quest::fast_approximate_winding_number(), axom::spin::BVH< NDIMS, ExecSpace, FloatType, BVHImpl >::getTraverser(), axom::spin::BVH< NDIMS, ExecSpace, FloatType, BVHImpl >::isInitialized(), axom::primal::WindingTolerances::ls_tol, axom::primal::WindingTolerances::quad_tol, SLIC_WARNING, and axom::primal::winding_number().


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