Branch data Line data Source code
1 : : #ifndef XYST_MESH_ADAPTER_H
2 : : #define XYST_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 : 4274 : mesh_adapter_t() {}
29 : :
30 : : //! Constructor taking a max refinement level and a mesh graph
31 : 2585 : explicit mesh_adapter_t( std::size_t u_mrl,
32 : 2585 : const std::vector< std::size_t >& inpoel ) :
33 [ + - ][ + - ]: 2585 : node_connectivity( tk::npoin_in_graph(inpoel) ),
34 : 5170 : refiner( u_mrl )
35 : : {
36 [ + - ]: 2585 : consume_tets( inpoel );
37 [ + - ]: 2585 : tet_store.generate_edges();
38 : 2585 : }
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 //XYST_MESH_ADAPTER_H
|