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 : 8957 : mesh_adapter_t() {} 29 : : 30 : : //! Constructor taking a mesh graph 31 : 2128 : explicit mesh_adapter_t( const std::vector< std::size_t >& inpoel ) : 32 [ + - ]: 2128 : node_connectivity( tk::npoin_in_graph(inpoel) ) 33 : : { 34 [ + - ]: 2128 : consume_tets( inpoel ); 35 [ + - ]: 2128 : tet_store.generate_edges(); 36 : 2128 : } 37 : : 38 : : void init_node_store(coord_type* m_x, coord_type* m_y, coord_type* m_z); 39 : : 40 : : // FIXME: Set these in a better way 41 : : real_t derefinement_cut_off = 0.2; 42 : : real_t refinement_cut_off = 0.9; 43 : : 44 : : AMR::tet_store_t tet_store; 45 : : AMR::node_connectivity_t node_connectivity; 46 : : 47 : : #ifdef ENABLE_NODE_STORE 48 : : // for coord tracking type stuff (debugging) 49 : : AMR::node_store_t node_store; 50 : : #endif 51 : : 52 : : AMR::refinement_t refiner; 53 : : 54 : : std::pair< bool, std::size_t > check_same_face(std::size_t tet_id, 55 : : const std::unordered_set<std::size_t>& inactive_nodes); 56 : : void consume_tets(const std::vector<std::size_t>& tetinpoel ); 57 : : 58 : : void evaluate_error_estimate(); 59 : : void mark_uniform_refinement(); 60 : : void mark_uniform_derefinement(); 61 : : void mark_error_refinement( 62 : : const std::vector< std::pair< edge_t, edge_tag > >& remote ); 63 : : 64 : : void mark_error_refinement_corr( const EdgeData& edges ); 65 : : int detect_compatibility( 66 : : int num_locked_edges, 67 : : int num_intermediate_edges, 68 : : AMR::Refinement_Case refinement_case, 69 : : int normal=0 70 : : ); 71 : : 72 : : void lock_intermediates(); 73 : : 74 : : void mark_refinement(); 75 : : void perform_refinement(); 76 : : 77 : : void refinement_class_one(int num_to_refine, size_t tet_id); 78 : : void refinement_class_two(edge_list_t edge_list, size_t tet_id); 79 : : void refinement_class_three(size_t tet_id); 80 : : 81 : : void lock_tet_edges(size_t tet_id); 82 : : void deactivate_tet_edges(size_t tet_id); 83 : : void deactivate_deref_tet_edges(size_t tet_id); 84 : : bool check_valid_refinement_case(size_t child_id); 85 : : 86 : : void mark_derefinement(); 87 : : void perform_derefinement(); 88 : : //std::vector< std::size_t >& get_active_inpoel(); 89 : : 90 : : void print_tets(); 91 : : 92 : : void reset_intermediate_edges(); 93 : : void update_tet_edges_lock_type(size_t tet_id, AMR::Edge_Lock_Case check, AMR::Edge_Lock_Case new_case); 94 : : void remove_edge_locks(int intermediate = 0); 95 : : void remove_normals(); 96 : : 97 : : size_t convert_derefine_edges_to_points( 98 : : size_t num_edges_to_derefine, 99 : : AMR::Refinement_Case refinement_case); 100 : : 101 : : }; 102 : : } 103 : : 104 : : #endif //QUINOA_MESH_ADAPTER_H