QUGaR 0.0.4
Loading...
Searching...
No Matches
unfitted_domain.hpp
Go to the documentation of this file.
1// --------------------------------------------------------------------------
2//
3// Copyright (C) 2025-present by Pablo Antolin
4//
5// This file is part of the QUGaR library.
6//
7// SPDX-License-Identifier: MIT
8//
9// --------------------------------------------------------------------------
10
11#ifndef QUGAR_UNFITTED_DOMAIN_HPP
12#define QUGAR_UNFITTED_DOMAIN_HPP
13
14
21
23
24#include <array>
25#include <cassert>
26#include <cstddef>
27#include <cstdint>
28#include <memory>
29#include <unordered_map>
30#include <vector>
31
32namespace qugar {
33
47
48template<int dim> class UnfittedDomain
49{
50public:
51 using FacetsStatus = std::array<ImmersedFacetStatus, static_cast<std::size_t>(dim) * 2>;
52 using GridPtr = std::shared_ptr<const CartGridTP<dim>>;
53
54protected:
55 explicit UnfittedDomain(const GridPtr &grid);
56
57public:
58 virtual ~UnfittedDomain() = default;
59
60 [[nodiscard]] GridPtr get_grid() const;
61 [[nodiscard]] const std::vector<int> &get_full_cells() const;
62 [[nodiscard]] const std::vector<int> &get_empty_cells() const;
63 [[nodiscard]] const std::vector<int> &get_cut_cells() const;
64 [[nodiscard]] FacetsStatus get_cell_facets_status(int cell_id) const;
65
66 void get_empty_facets(std::vector<int> &cell_ids, std::vector<int> &local_facets_ids) const;
67 void get_full_facets(std::vector<int> &cell_ids, std::vector<int> &local_facets_ids) const;
68 void get_full_unfitted_facets(std::vector<int> &cell_ids, std::vector<int> &local_facets_ids) const;
69 void get_cut_facets(std::vector<int> &cell_ids, std::vector<int> &local_facets_ids) const;
70
71 [[nodiscard]] bool is_full_cell(int cell_id) const;
72 [[nodiscard]] bool is_empty_cell(int cell_id) const;
73 [[nodiscard]] bool is_cut_cell(int cell_id) const;
74
75 [[nodiscard]] bool is_full_facet(int cell_id, int local_facet_id) const;
76 [[nodiscard]] bool is_empty_facet(int cell_id, int local_facet_id) const;
77 [[nodiscard]] bool is_cut_facet(int cell_id, int local_facet_id) const;
78 [[nodiscard]] bool is_full_unfitted_facet(int cell_id, int local_facet_id) const;
79
80 [[nodiscard]] bool has_unfitted_boundary(int cell_id, int local_facet_id) const;
81 [[nodiscard]] bool has_unfitted_boundary_on_domain_boundary(int cell_id, int local_facet_id) const;
82 [[nodiscard]] bool has_external_boundary(int cell_id, int local_facet_id) const;
83
84protected:
86 std::vector<int> full_cells_;
87 std::vector<int> empty_cells_;
88 std::vector<int> cut_cells_;
89 std::unordered_map<int, FacetsStatus> facets_status_;
90
91 void sort();
92};
93
94
95}// namespace qugar
96
97#endif// QUGAR_UNFITTED_DOMAIN_HPP
Definition of Cartesian grid class.
Definition unfitted_domain.hpp:49
const std::vector< int > & get_full_cells() const
virtual ~UnfittedDomain()=default
bool has_external_boundary(int cell_id, int local_facet_id) const
bool is_cut_facet(int cell_id, int local_facet_id) const
GridPtr grid_
Definition unfitted_domain.hpp:85
GridPtr get_grid() const
FacetsStatus get_cell_facets_status(int cell_id) const
UnfittedDomain(const GridPtr &grid)
std::vector< int > full_cells_
Definition unfitted_domain.hpp:86
void get_empty_facets(std::vector< int > &cell_ids, std::vector< int > &local_facets_ids) const
void get_full_unfitted_facets(std::vector< int > &cell_ids, std::vector< int > &local_facets_ids) const
void get_full_facets(std::vector< int > &cell_ids, std::vector< int > &local_facets_ids) const
bool is_full_cell(int cell_id) const
std::unordered_map< int, FacetsStatus > facets_status_
Definition unfitted_domain.hpp:89
const std::vector< int > & get_cut_cells() const
bool is_cut_cell(int cell_id) const
bool has_unfitted_boundary_on_domain_boundary(int cell_id, int local_facet_id) const
bool is_empty_cell(int cell_id) const
bool is_full_facet(int cell_id, int local_facet_id) const
bool is_empty_facet(int cell_id, int local_facet_id) const
void get_cut_facets(std::vector< int > &cell_ids, std::vector< int > &local_facets_ids) const
std::array< ImmersedFacetStatus, static_cast< std::size_t >(dim) *2 > FacetsStatus
Definition unfitted_domain.hpp:51
const std::vector< int > & get_empty_cells() const
bool has_unfitted_boundary(int cell_id, int local_facet_id) const
std::vector< int > empty_cells_
Definition unfitted_domain.hpp:87
bool is_full_unfitted_facet(int cell_id, int local_facet_id) const
std::shared_ptr< const CartGridTP< dim > > GridPtr
Definition unfitted_domain.hpp:52
std::vector< int > cut_cells_
Definition unfitted_domain.hpp:88
QUGaR's main namespace.
Definition affine_transf.hpp:28
ImmersedFacetStatus
Definition unfitted_domain.hpp:34
@ cut
Definition cut_quadrature.hpp:33
@ empty
Definition cut_quadrature.hpp:33
@ full
Definition cut_quadrature.hpp:33