This class provides some common primitives used by various propagation algorithms. More...
#include <Propagation_3.h>
Public Member Functions | |
Propagation_3 () | |
virtual | ~Propagation_3 () |
Propagation_3 (Manifold *wm, COM::Window *buf) | |
Construct an object from a window manifold. More... | |
virtual double | time_stepping (const COM::Attribute *spd, double dt, COM::Attribute *disps, int *smoothed=NULL)=0 |
Main entry for invoking a surface propagation algorithm. More... | |
virtual void | set_constraints (const COM::Attribute *cnstr_types) |
Set the types and directions of nodal constraints. More... | |
void | set_bounds (const COM::Attribute *bnd) |
Set the bounds. More... | |
void | bound_facial_speed (COM::Attribute *fa) |
virtual void | enforce_nodal_constraints (COM::Attribute *du) |
Enforces the nodal constraints by projecting motion onto given direction. More... | |
virtual void | bound_nodal_motion (COM::Attribute *disps) |
void | set_verbose (bool b) |
Set the verbose level. More... | |
Protected Member Functions | |
void | convert_constraints (const COM::Attribute *ctypes_faces, COM::Attribute *ctypes_nodes) |
Convert facial constraints to nodal constraints. More... | |
void | determine_constraint_boundary (const COM::Attribute *ctypes_faces, COM::Attribute *ctypes_bndry_edges, COM::Attribute *ctypes_bndry_nodes) |
Convert facial or panel constraints to nodal constraints. More... | |
Static Protected Member Functions | |
static void | get_constraint_directions (int type, int &ndirs, Vector_3 dirs[2]) |
Get orthonormals of the constraints. More... | |
static void | enforce_nodal_constraint (int type, Vector_3 &du) |
Enforce constraint for a specific vector. More... | |
static void | bound_nodal_motion (const Point_3 &pnt, const double *bnd, Vector_3 &du, double eps=0) |
static bool | check_spherical_bound (const Point_3 &pnt, const Point_3 &org, const double rad_min, const double rad_max, double eps=0) |
static void | bound_spherical_disp (const Point_3 &pnt, const Point_3 &org, const double rad_min, const double rad_max, Vector_3 &disp, double eps=0) |
static bool | check_radial_bound (const double x, const double y, const double bnd_min, const double bnd_max, double eps=0) |
static void | bound_radial_disp (const double x, const double y, const double bnd_min, const double bnd_max, double &dx, double &dy, double eps=0) |
static bool | check_axial_bound (const double x, const double bnd_min, const double bnd_max, double eps=0) |
static void | bound_axial_disp (const double x, const double bnd_min, const double bnd_max, double &dx, double eps=0) |
static bool | reached_nodal_bound (const Point_3 &pnt, const double *bnd, double eps=0) |
static bool | in_bounding_box (const Point_3 &pnt, const Point_3 &lb, const Point_3 &ub) |
static double | square (double x) |
Protected Attributes | |
Manifold * | _surf |
SURF::Access_Mode | _mode |
COM::Window * | _buf |
int | _rank |
bool | _verb |
bool | _cnstr_set |
bool | _bnd_set |
COM::Attribute * | _cnstr_nodes |
COM::Attribute * | _cnstr_faces |
COM::Attribute * | _cnstr_bndry_edges |
COM::Attribute * | _cnstr_bndry_nodes |
COM::Attribute * | _cnstr_bound |
std::vector< COM::Pane * > | _panes |
This class provides some common primitives used by various propagation algorithms.
It is a pure virtual class.
Definition at line 40 of file Propagation_3.h.
|
inline |
Definition at line 42 of file Propagation_3.h.
|
inlinevirtual |
Definition at line 47 of file Propagation_3.h.
PROP_BEGIN_NAMESPACE Propagation_3 | ( | Manifold * | wm, |
COM::Window * | buf | ||
) |
Construct an object from a window manifold.
Definition at line 31 of file Propagation_3.C.
References _buf, _cnstr_bndry_edges, _cnstr_bndry_nodes, _cnstr_bound, _cnstr_faces, _cnstr_nodes, _mode, _panes, _rank, ACROSS_PANE, BOUND_LEN, COM_CHAR, COM_DOUBLE, COM_INT, COMMPI_Comm_rank(), COMMPI_Initialized(), and WHOLE_PANE.
|
staticprotected |
Definition at line 377 of file Propagation_3.C.
References dx, max(), min(), and x.
Referenced by bound_nodal_motion().
void bound_facial_speed | ( | COM::Attribute * | fa | ) |
Definition at line 550 of file Propagation_3.C.
References _bnd_set, _buf, _cnstr_bound, _panes, BOUND_LEN, COM_assertion, COM_assertion_msg, COM_compatible_types(), COM_DOUBLE, COM_NC, i, iend, j, k, min(), Element_node_enumerator::next(), nj, reached_nodal_bound(), and Element_node_enumerator::size_of_edges().
|
virtual |
Definition at line 518 of file Propagation_3.C.
References _bnd_set, _cnstr_bound, _panes, BOUND_LEN, COM_NC, i, iend, min(), and n.
Referenced by FaceOffset_3::time_stepping().
|
staticprotected |
Definition at line 393 of file Propagation_3.C.
References bound_axial_disp(), bound_radial_disp(), bound_spherical_disp(), COM_assertion_msg, and in_bounding_box().
|
staticprotected |
Definition at line 343 of file Propagation_3.C.
References max(), min(), sqrt(), square(), x, and y.
Referenced by bound_nodal_motion().
|
staticprotected |
Definition at line 305 of file Propagation_3.C.
References Vector_3< Type >::is_null(), max(), min(), square(), and Vector_3< Type >::squared_norm().
Referenced by bound_nodal_motion().
|
staticprotected |
Definition at line 372 of file Propagation_3.C.
Referenced by reached_nodal_bound().
|
staticprotected |
Definition at line 333 of file Propagation_3.C.
References square().
Referenced by reached_nodal_bound().
|
staticprotected |
Definition at line 295 of file Propagation_3.C.
References square().
Referenced by reached_nodal_bound().
|
protected |
Convert facial constraints to nodal constraints.
Definition at line 118 of file Propagation_3.C.
References _panes, _surf, NTS::abs(), COM_assertion, COM_assertion_msg, COM_NC, Rocblas::copy_scalar(), Vector_3< Type >::cross_product(), iend, j, k, matchall(), matchany(), Element_node_enumerator::next(), nj, Vector_3< Type >::normalize(), Element_node_enumerator::size_of_edges(), and Element_node_enumerator::size_of_nodes().
Referenced by set_constraints().
|
protected |
Convert facial or panel constraints to nodal constraints.
Definition at line 253 of file Propagation_3.C.
References _panes, _surf, Rocblas::copy_scalar(), iend, j, k, Element_node_enumerator::next(), nj, and Element_node_enumerator::size_of_edges().
Referenced by set_constraints().
|
staticprotected |
Enforce constraint for a specific vector.
Definition at line 441 of file Propagation_3.C.
References COM_assertion_msg.
Referenced by enforce_nodal_constraints().
|
virtual |
Enforces the nodal constraints by projecting motion onto given direction.
Definition at line 497 of file Propagation_3.C.
References _cnstr_nodes, _cnstr_set, _panes, enforce_nodal_constraint(), i, iend, and n.
|
staticprotected |
Get orthonormals of the constraints.
If nnrms is 0, then not constrained. If nnrms is 3, then the point is fixed. Otherwise, the point is constrained either in a plane or a line.
Definition at line 456 of file Propagation_3.C.
References COM_assertion_msg.
Referenced by FaceOffset_3::obtain_constrained_directions().
|
inlinestaticprotected |
Definition at line 147 of file Propagation_3.h.
Referenced by bound_nodal_motion(), and reached_nodal_bound().
|
staticprotected |
Definition at line 418 of file Propagation_3.C.
References check_axial_bound(), check_radial_bound(), check_spherical_bound(), COM_assertion_msg, and in_bounding_box().
Referenced by bound_facial_speed().
void set_bounds | ( | const COM::Attribute * | bnd | ) |
Set the bounds.
Definition at line 58 of file Propagation_3.C.
References _bnd_set, _buf, BOUND_LEN, COM_assertion_msg, COM_compatible_types(), and COM_DOUBLE.
|
virtual |
Set the types and directions of nodal constraints.
cnstr_types | is an integer-type attribute. If it is a nodal attribute, then the value for each node is one of the following: 0: No constraint. 1: Move along the direction to be given in the displacement vector when calling |
If the attribute is facial, panel, or windowed, then its value cannot be 1 or -1 but can be any other value as above. These constraints will be converted into nodal constraints by
Definition at line 81 of file Propagation_3.C.
References _buf, _cnstr_bndry_edges, _cnstr_bndry_nodes, _cnstr_faces, _cnstr_nodes, _cnstr_set, COM_assertion_msg, convert_constraints(), Rocblas::copy(), and determine_constraint_boundary().
|
inline |
|
inlinestaticprotected |
Definition at line 155 of file Propagation_3.h.
References x.
Referenced by bound_radial_disp(), bound_spherical_disp(), check_radial_bound(), check_spherical_bound(), FaceOffset_3::reset_default_parameters(), and FaceOffset_3::set_fangle_weak().
|
pure virtual |
Main entry for invoking a surface propagation algorithm.
Note that disps serves as both input and output. At input, it contains the (normalized) constrained nodal direction for the vertices with a customized directional or planar constraint (
spd | nodal or facial speed function |
dt | time step |
disps | nodal constraints at input and nodal displacements at output |
Implemented in FaceOffset_3, and MarkerParticles_3.
|
protected |
Definition at line 164 of file Propagation_3.h.
Referenced by bound_facial_speed(), bound_nodal_motion(), set_bounds(), and FaceOffset_3::time_stepping().
|
protected |
Definition at line 159 of file Propagation_3.h.
Referenced by FaceOffset_3::balance_mass(), bound_facial_speed(), FaceOffset_3::compute_quadrics(), FaceOffset_3::FaceOffset_3(), FaceOffset_3::filter_and_identify_ridge_edges(), FaceOffset_3::insert_boundary_edges(), Propagation_3(), FaceOffset_3::reclassify_ridge_vertices(), FaceOffset_3::rescale_displacements(), set_bounds(), set_constraints(), FaceOffset_3::time_stepping(), and FaceOffset_3::update_vertex_centers().
|
protected |
Definition at line 167 of file Propagation_3.h.
Referenced by FaceOffset_3::insert_boundary_edges(), Propagation_3(), and set_constraints().
|
protected |
Definition at line 168 of file Propagation_3.h.
Referenced by FaceOffset_3::obtain_constrained_directions(), Propagation_3(), set_constraints(), and FaceOffset_3::update_vertex_centers().
|
protected |
Definition at line 169 of file Propagation_3.h.
Referenced by bound_facial_speed(), bound_nodal_motion(), and Propagation_3().
|
protected |
Definition at line 166 of file Propagation_3.h.
Referenced by Propagation_3(), and set_constraints().
|
protected |
Definition at line 165 of file Propagation_3.h.
Referenced by FaceOffset_3::denoise_surface(), enforce_nodal_constraints(), FaceOffset_3::obtain_constrained_directions(), Propagation_3(), set_constraints(), and FaceOffset_3::time_stepping().
|
protected |
Definition at line 163 of file Propagation_3.h.
Referenced by enforce_nodal_constraints(), set_constraints(), and FaceOffset_3::time_stepping().
|
protected |
Definition at line 157 of file Propagation_3.h.
Referenced by Propagation_3().
|
protected |
Definition at line 171 of file Propagation_3.h.
Referenced by FaceOffset_3::balance_mass(), bound_facial_speed(), bound_nodal_motion(), FaceOffset_3::build_ridge_neighbor_list(), FaceOffset_3::compute_anisotropic_vertex_centers(), FaceOffset_3::compute_directions(), FaceOffset_3::compute_quadrics(), convert_constraints(), FaceOffset_3::denoise_surface(), determine_constraint_boundary(), FaceOffset_3::distribute_volume_e2n(), enforce_nodal_constraints(), FaceOffset_3::FaceOffset_3(), FaceOffset_3::filter_and_identify_ridge_edges(), FaceOffset_3::filter_obscended_ridge(), FaceOffset_3::insert_boundary_edges(), FaceOffset_3::mark_weak_vertices(), FaceOffset_3::nulaplacian_smooth(), FaceOffset_3::obtain_constrained_directions(), Propagation_3(), FaceOffset_3::reclassify_ridge_vertices(), FaceOffset_3::remove_obscure_curves(), FaceOffset_3::rescale_displacements(), and FaceOffset_3::update_vertex_centers().
|
protected |
Definition at line 161 of file Propagation_3.h.
Referenced by Propagation_3(), and FaceOffset_3::time_stepping().
|
protected |
Definition at line 156 of file Propagation_3.h.
Referenced by FaceOffset_3::balance_mass(), FaceOffset_3::build_ridge_neighbor_list(), FaceOffset_3::compute_anisotropic_vertex_centers(), FaceOffset_3::compute_quadrics(), convert_constraints(), FaceOffset_3::denoise_surface(), determine_constraint_boundary(), FaceOffset_3::distribute_volume_e2n(), FaceOffset_3::filter_and_identify_ridge_edges(), FaceOffset_3::filter_obscended_ridge(), FaceOffset_3::insert_boundary_edges(), FaceOffset_3::mark_weak_vertices(), MarkerParticles_3::multiply_nodal_normals(), FaceOffset_3::nulaplacian_smooth(), FaceOffset_3::obtain_constrained_directions(), FaceOffset_3::reclassify_ridge_vertices(), FaceOffset_3::remove_obscure_curves(), FaceOffset_3::rescale_displacements(), FaceOffset_3::time_stepping(), and FaceOffset_3::update_vertex_centers().
|
protected |
Definition at line 162 of file Propagation_3.h.
Referenced by set_verbose(), and FaceOffset_3::time_stepping().