Branch data Line data Source code
1 : : #ifndef QUINOA_MESH_ADAPTER_H 2 : : #define QUINOA_MESH_ADAPTER_H 3 : : 4 : : #include <stddef.h> 5 : : #include <vector> 6 : : 7 : : #include "DerivedData.hpp" 8 : : 9 : : #include "AMR_types.hpp" 10 : : #include "tet_store.hpp" 11 : : #include "node_connectivity.hpp" 12 : : 13 : : #ifdef ENABLE_NODE_STORE 14 : : #include "node_store.hpp" 15 : : #endif 16 : : 17 : : #include "refinement.hpp" 18 : : //#include "derefinement.hpp" 19 : : 20 : : #include "Refinement_State.hpp" 21 : : 22 : : namespace AMR { 23 : : class mesh_adapter_t { 24 : : 25 : : public: 26 : : 27 : : //! Default constructor for migration 28 : 7815 : mesh_adapter_t() {} 29 : : 30 : : //! Constructor taking a max refinement level and a mesh graph 31 : 1961 : explicit mesh_adapter_t( std::size_t u_mrl, 32 : 1961 : const std::vector< std::size_t >& inpoel ) : 33 : : node_connectivity( tk::npoin_in_graph(inpoel) ), 34 [ + - ][ + - ]: 1961 : refiner( u_mrl ) 35 : : { 36 [ + - ]: 1961 : consume_tets( inpoel ); 37 [ + - ]: 1961 : tet_store.generate_edges(); 38 : 1961 : } 39 : : 40 : : void init_node_store(coord_type* m_x, coord_type* m_y, coord_type* m_z); 41 : : 42 : : // FIXME: Set these in a better way 43 : : real_t derefinement_cut_off = 0.2; 44 : : real_t refinement_cut_off = 0.9; 45 : : 46 : : AMR::tet_store_t tet_store; 47 : : AMR::node_connectivity_t node_connectivity; 48 : : 49 : : #ifdef ENABLE_NODE_STORE 50 : : // for coord tracking type stuff (debugging) 51 : : AMR::node_store_t node_store; 52 : : #endif 53 : : 54 : : AMR::refinement_t refiner; 55 : : 56 : : std::pair< bool, std::size_t > check_same_face(std::size_t tet_id, 57 : : const std::unordered_set<std::size_t>& inactive_nodes); 58 : : void consume_tets(const std::vector<std::size_t>& tetinpoel ); 59 : : 60 : : void evaluate_error_estimate(); 61 : : void mark_uniform_refinement(); 62 : : void mark_uniform_derefinement(); 63 : : void mark_error_refinement( 64 : : const std::vector< std::pair< edge_t, edge_tag > >& remote ); 65 : : 66 : : void mark_error_refinement_corr( const EdgeData& edges ); 67 : : int detect_compatibility( 68 : : int num_locked_edges, 69 : : int num_intermediate_edges, 70 : : AMR::Refinement_Case refinement_case, 71 : : int normal=0 72 : : ); 73 : : 74 : : void lock_intermediates(); 75 : : 76 : : void mark_refinement(); 77 : : void perform_refinement(); 78 : : 79 : : void refinement_class_one(int num_to_refine, size_t tet_id); 80 : : void refinement_class_two(edge_list_t edge_list, size_t tet_id); 81 : : void refinement_class_three(size_t tet_id); 82 : : 83 : : void lock_tet_edges(size_t tet_id); 84 : : void deactivate_tet_edges(size_t tet_id); 85 : : void deactivate_deref_tet_edges(size_t tet_id); 86 : : bool check_valid_refinement_case(size_t child_id); 87 : : 88 : : void mark_derefinement(); 89 : : void perform_derefinement(); 90 : : //std::vector< std::size_t >& get_active_inpoel(); 91 : : 92 : : void print_tets(); 93 : : 94 : : void reset_intermediate_edges(); 95 : : void update_tet_edges_lock_type(size_t tet_id, AMR::Edge_Lock_Case check, AMR::Edge_Lock_Case new_case); 96 : : void remove_edge_locks(int intermediate = 0); 97 : : void remove_edge_temp_locks(); 98 : : void remove_normals(); 99 : : 100 : : size_t convert_derefine_edges_to_points( 101 : : size_t num_edges_to_derefine, 102 : : AMR::Refinement_Case refinement_case); 103 : : 104 : : }; 105 : : } 106 : : 107 : : #endif //QUINOA_MESH_ADAPTER_H