1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
#ifndef XYST_MESH_ADAPTER_H
#define XYST_MESH_ADAPTER_H

#include <stddef.h><--- Include file:  not found. Please note: Cppcheck does not need standard library headers to get proper results.
#include <vector><--- Include file:  not found. Please note: Cppcheck does not need standard library headers to get proper results.

#include "DerivedData.hpp"<--- Include file: "DerivedData.hpp" not found.

#include "AMR_types.hpp"
#include "tet_store.hpp"
#include "node_connectivity.hpp"

#ifdef ENABLE_NODE_STORE
#include "node_store.hpp"
#endif

#include "refinement.hpp"
//#include "derefinement.hpp"

#include "Refinement_State.hpp"

namespace AMR {
    class mesh_adapter_t {

        public:

            //! Default constructor for migration
            mesh_adapter_t() {}

            //! Constructor taking a max refinement level and a mesh graph
            explicit mesh_adapter_t( std::size_t u_mrl,
                const std::vector< std::size_t >& inpoel ) :
                node_connectivity( tk::npoin_in_graph(inpoel) ),
                refiner( u_mrl )
            {
                consume_tets( inpoel );
                tet_store.generate_edges();
            }

            void init_node_store(coord_type* m_x, coord_type* m_y, coord_type* m_z);

            // FIXME: Set these in a better way
            real_t derefinement_cut_off = 0.2;
            real_t refinement_cut_off = 0.9;

            AMR::tet_store_t tet_store;
            AMR::node_connectivity_t node_connectivity;

#ifdef ENABLE_NODE_STORE
            // for coord tracking type stuff (debugging)
            AMR::node_store_t node_store;
#endif

            AMR::refinement_t refiner;

            std::pair< bool, std::size_t > check_same_face(std::size_t tet_id,
              const std::unordered_set<std::size_t>& inactive_nodes);
            void consume_tets(const std::vector<std::size_t>& tetinpoel );

            void evaluate_error_estimate();
            void mark_uniform_refinement();
            void mark_uniform_derefinement();
            void mark_error_refinement(
              const std::vector< std::pair< edge_t, edge_tag > >& remote );

            void mark_error_refinement_corr( const EdgeData& edges );
            int detect_compatibility(
                    int num_locked_edges,
                    int num_intermediate_edges,
                    AMR::Refinement_Case refinement_case,
                    int normal=0
            );

            void lock_intermediates();

            void mark_refinement();
            void perform_refinement();

            void refinement_class_one(int num_to_refine, size_t tet_id);
            void refinement_class_two(edge_list_t edge_list, size_t tet_id);
            void refinement_class_three(size_t tet_id);

            void lock_tet_edges(size_t tet_id);
            void deactivate_tet_edges(size_t tet_id);
            void deactivate_deref_tet_edges(size_t tet_id);
            bool check_valid_refinement_case(size_t child_id);

            void mark_derefinement();
            void perform_derefinement();
            //std::vector< std::size_t >& get_active_inpoel();

            void print_tets();

            void reset_intermediate_edges();
            void update_tet_edges_lock_type(size_t tet_id, AMR::Edge_Lock_Case check, AMR::Edge_Lock_Case new_case);
            void remove_edge_locks(int intermediate = 0);
            void remove_edge_temp_locks();
            void remove_normals();

            size_t convert_derefine_edges_to_points(
                    size_t num_edges_to_derefine,
                    AMR::Refinement_Case  refinement_case);

    };
}

#endif //XYST_MESH_ADAPTER_H