BELFEM 0.9.3
Berkeley Lab Finite Element Framework
Loading...
Searching...
No Matches
belfem::mesh::CutFactory Class Reference

Main orchestrator for automatic cut generation on multiply-connected domains. More...

#include <cl_CutFactory.hpp>

Public Member Functions

 CutFactory (Mesh *aMesh, Topology *aTopology, Cell< Protoshell * > &aProtoshells, const CutAlgorithm aAlgorithm, const bool aUseEnrichment)
 ~CutFactory ()
void set_terminals (const Cell< Cell< id_t > > &aTerminals, const Cell< id_t > &aThinShellIndices)
void set_periodicity (PeriodicityFactory *aPeriodicFactory)
void run ()
Cell< Node * > & abstract_nodes ()
Cell< Node * > & orphaned_nodes ()
Cell< SideSet * > & cuts ()
bool create_thin_shell_cuts ()
void duplicate_nodes_on_face_sidesets ()
void relink_slave_elements_with_duplicate_nodes ()
void duplicate_and_relink_facets ()
void relink_non_thinshell_facets ()
void close_terminal_loops ()
void orient_terminal_curves ()
void orient_terminal_curves_sub (SideSet *aSideSet, Vector< real > &aWorkA, Vector< real > &aWorkB, Vector< real > &aN)
void orient_terminal_curves_2D ()
 Gives every 2-D terminal curve the counter-clockwise sense about +z around its tape.
void save_curve_debug_meshes ()
Vector< id_t > & thin_shell_boundaries ()
Cell< Facet * > & thin_shell_facets (const id_t aID)
Cell< Node * > & thin_shell_master_nodes ()
Cell< Node * > & thin_shell_slave_nodes ()

Static Public Member Functions

static void refuse_closed_side_curve_sharing_nodes (Mesh *aMesh, Cell< Protoshell * > &aShells, const index_t aNumMeshCurves)
 Refuses a geometrically closed side curve of any shell in aShells that shares a node with a terminal curve of any shell, or with a side curve of another shell.
static void close_terminal_loop (Curve *aCurve, const Cell< Node * > &aDuplicates, id_t &aMaxID)
 Closes one terminal curve into a loop.

Detailed Description

Main orchestrator for automatic cut generation on multiply-connected domains.

See also
Homology Module Usage Guide

Constructor & Destructor Documentation

◆ CutFactory()

belfem::mesh::CutFactory::CutFactory ( Mesh * aMesh,
Topology * aTopology,
Cell< Protoshell * > & aProtoshells,
const CutAlgorithm aAlgorithm,
const bool aUseEnrichment )

◆ ~CutFactory()

belfem::mesh::CutFactory::~CutFactory ( )

Member Function Documentation

◆ abstract_nodes()

Cell< Node * > & belfem::mesh::CutFactory::abstract_nodes ( )

◆ close_terminal_loop()

void belfem::mesh::CutFactory::close_terminal_loop ( Curve * aCurve,
const Cell< Node * > & aDuplicates,
id_t & aMaxID )
static

Closes one terminal curve into a loop.

Every segment is duplicated in reverse, its nodes replaced by aDuplicates( index ) where the node carries an index ( a node at gNoIndex is kept ), the arclength vector is extended by the return pass, the node list is rebuilt and the closed flag set. aMaxID is advanced by one per new segment element. LINE2 and LINE3 only: corners swap and a LINE3 midside stays node 2 of the reversed segment, as in Curve::reverse. The arclength of the return pass follows the reversed segment order. Preconditions, checked with BELFEM_ERROR before anything is allocated: every indexed node has a non-null entry in aDuplicates, and aCurve->arclength() holds one sample per node of the open curve ( n+1 for LINE2, 2n+1 for LINE3 ), as CurveFactory::compute_coordinates writes it. A curve without segments is left untouched.

◆ close_terminal_loops()

void belfem::mesh::CutFactory::close_terminal_loops ( )

◆ create_thin_shell_cuts()

bool belfem::mesh::CutFactory::create_thin_shell_cuts ( )

◆ cuts()

Cell< SideSet * > & belfem::mesh::CutFactory::cuts ( )

◆ duplicate_and_relink_facets()

void belfem::mesh::CutFactory::duplicate_and_relink_facets ( )

◆ duplicate_nodes_on_face_sidesets()

void belfem::mesh::CutFactory::duplicate_nodes_on_face_sidesets ( )

◆ orient_terminal_curves()

void belfem::mesh::CutFactory::orient_terminal_curves ( )

◆ orient_terminal_curves_2D()

void belfem::mesh::CutFactory::orient_terminal_curves_2D ( )

Gives every 2-D terminal curve the counter-clockwise sense about +z around its tape.

Runs after the slave side is relinked to duplicate nodes and the loops are closed. The sense is read off the master element of the sideset_a facet that carries the first segment: with counter-clockwise elements the master lies to the left of its edge direction and owns the original nodes, so the loop is counter-clockwise exactly when that pass runs against the edge direction. Checked with BELFEM_ERROR: the first segment lies on sideset_a and the master carries its nodes. Homology::reorient_generators applies a global -1 calibrated to this sense.

◆ orient_terminal_curves_sub()

void belfem::mesh::CutFactory::orient_terminal_curves_sub ( SideSet * aSideSet,
Vector< real > & aWorkA,
Vector< real > & aWorkB,
Vector< real > & aN )

◆ orphaned_nodes()

Cell< Node * > & belfem::mesh::CutFactory::orphaned_nodes ( )

◆ refuse_closed_side_curve_sharing_nodes()

void belfem::mesh::CutFactory::refuse_closed_side_curve_sharing_nodes ( Mesh * aMesh,
Cell< Protoshell * > & aShells,
const index_t aNumMeshCurves )
static

Refuses a geometrically closed side curve of any shell in aShells that shares a node with a terminal curve of any shell, or with a side curve of another shell.

A closed rim is accepted only when it is isolated: its nodes stay single-valued, while the nodes of a terminal curve are duplicated, and a rim that touches another shell's side curve is treated as open and duplicated, which tears it. Called once the side curves of every shell exist and have been pushed, in shell order, onto aMesh->curves(), which held aNumMeshCurves curves before the first push. Before the throw, shrinks aMesh->curves() back to aNumMeshCurves, then deletes the side curves of every shell and empties each side_curves(). Uses node flag slot 0, which is clear on return and before the throw. Rank 0, before the shell nodes are duplicated.

◆ relink_non_thinshell_facets()

void belfem::mesh::CutFactory::relink_non_thinshell_facets ( )

◆ relink_slave_elements_with_duplicate_nodes()

void belfem::mesh::CutFactory::relink_slave_elements_with_duplicate_nodes ( )

◆ run()

void belfem::mesh::CutFactory::run ( )

◆ save_curve_debug_meshes()

void belfem::mesh::CutFactory::save_curve_debug_meshes ( )

◆ set_periodicity()

void belfem::mesh::CutFactory::set_periodicity ( PeriodicityFactory * aPeriodicFactory)

◆ set_terminals()

void belfem::mesh::CutFactory::set_terminals ( const Cell< Cell< id_t > > & aTerminals,
const Cell< id_t > & aThinShellIndices )

◆ thin_shell_boundaries()

Vector< id_t > & belfem::mesh::CutFactory::thin_shell_boundaries ( )
inline

◆ thin_shell_facets()

Cell< Facet * > & belfem::mesh::CutFactory::thin_shell_facets ( const id_t aID)
inline

◆ thin_shell_master_nodes()

Cell< Node * > & belfem::mesh::CutFactory::thin_shell_master_nodes ( )
inline

◆ thin_shell_slave_nodes()

Cell< Node * > & belfem::mesh::CutFactory::thin_shell_slave_nodes ( )
inline

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