ParFUM: High-level Adaptivity Algorithms for Unstructured Meshes Terry L. Wilmarth, Nilesh Choudhury, Isaac Dooley, Sayantan Chakravorty Parallel Programming Laboratory University of Illinois at Urbana-Champaign
Adaptivity Goals for ParFUM Work with applications scientists to discover realistic adaptivity needs Develop rich set of algorithms for flexible mesh adaptivity interface Easy to use: minimal extra work for user Fast, efficient, scalable Modular, extensible implementation
Example: 1D Wave Propagation
Mesh Sizing Many adaptivity operations strive to achieve a certain mesh sizing Specified in mesh edge length Set at mesh elements Mesh sizing can be used to: Direct refinement and coarsening Maintain regional sizing Maintain a reference mesh
Mesh Sizing, cont'd Setting mesh sizing: FEM_ADAPT_SetElementSizeField(i nt meshID, int elem, double size) FEM_ADAPT_SetElementsSizeField( int meshID, double *sizes) Allows user to set sizing directly, however, adaptivity operations support special sizing techniques
Example: Flexible Sizing
Example: Flexible Sizing
Example: Flexible Sizing
Example: Flexible Sizing
Example: Flexible Sizing
Refinement and Coarsening Simple algorithms guided by mesh sizing requirements and quality measures Refinement: longest edge bisection (Rivara) Coarsening: shortest edge contraction
Refinement and Coarsening, cont'd An element is added to a list of elements to be refined/coarsened if: Its average edge length is not within some tolerance of the sizing field Its quality is low These elements are sorted by: Longest/shortest edge weighted appropriately by quality measure
Refinement and Coarsening, cont'd Adaptation proceeds in passes After a pass, elements are re- evaluated Refinement adds new elements which must be examined in the next pass Coarsening modifies shape of existing elements Both algorithms may skip adapting certain elements (locking, inversion, quality)
Refinement and Coarsening, cont'd API: FEM_ADAPT_Refine(int qm, int method, double factor, double *sizes) FEM_ADAPT_Coarsen(int qm, int method, double factor, double *sizes) Method allows for modifying mesh to a uniform size, to use mesh sizing, to perform scaling, or combinations of these
Example: Remeshing/Repair
Example: Remeshing/Repair
Example: Remeshing/Repair
Example: Remeshing/Repair
Example: Remeshing/Repair
Example: Remeshing/Repair
Mesh Quality These simple algorithms can be used strategically to improve mesh quality: Coarsening removes elements, particularly skinny isosceles triangles Refinement makes flat slivers into skinny isosceles that can be later removed by coarsening
Data Transfer Automatic data transfer built in to low-level mesh modification operations Linear interpolation of nodal data Duplication of element data for bisection Framework for user to override/specify data transfer mechanisms Provides mechanism to push element data to nodes and pull it back again
Ongoing Efforts Translation of current functionality into 3D Remesh/Repair, Smoothing, etc. Element-to-element data transfer Support for adaptivity in “thicker” ghost layers Load balancing and dynamic repartitioning