16#include <Cut_cell_FT_Disc.h>
17#include <TRUSTTabFT_cut_cell.h>
18#include <IJK_Interfaces.h>
19#include <IJK_Navier_Stokes_tools.h>
21template <
typename _TYPE_>
22void compare_second_column(_TYPE_* ptr,
int sz)
24 using pair = std::array<_TYPE_, 2>;
25 pair* tmp =
reinterpret_cast<pair*
>(ptr);
26 std::sort(tmp, tmp+sz, [&](
const pair& p1,
const pair& p2)
28 return (p1[1] < p2[1]);
32template <
typename _TYPE_>
33void compare_second_then_third_column(_TYPE_* ptr,
int sz)
35 using triplet = std::array<_TYPE_, 3>;
36 triplet* tmp =
reinterpret_cast<triplet*
>(ptr);
37 std::sort(tmp, tmp+sz, [&](
const triplet& p1,
const triplet& p2)
40 return (p1[2] < p2[2]);
42 return (p1[1] < p2[1]);
46template<
typename _TYPE_>
49 cut_cell_disc_ = cut_cell_disc;
53template<
typename _TYPE_>
56 cut_cell_disc_ = cut_cell_disc;
60template<
typename _TYPE_>
63 cut_cell_disc_ = cut_cell_disc;
74 compare_second_column<int>(
addr(), cut_cell_disc_->get_n_tot());
78 Cerr <<
"NotImplementedError: TRUSTTabFT_cut_cell<int>::sort_tot(int) with sorting other than the second column." << finl;
84 Cerr <<
"NotImplementedError: TRUSTTabFT_cut_cell<int>::sort_tot(int) with other than 2 columns." << finl;
96 compare_second_column<double>(
addr(), cut_cell_disc_->get_n_tot());
100 Cerr <<
"NotImplementedError: TRUSTTabFT_cut_cell<double>::sort_tot(double) with sorting other than the second column." << finl;
106 Cerr <<
"NotImplementedError: TRUSTTabFT_cut_cell<double>::sort_tot(double) with other than 2 columns." << finl;
116 if (column_1 == 1 && column_2 == 2)
118 compare_second_then_third_column<int>(
addr(), cut_cell_disc_->get_n_tot());
122 Cerr <<
"NotImplementedError: TRUSTTabFT_cut_cell<int>::sort_tot(int,int) with sorting other than the second, then third column." << finl;
128 Cerr <<
"NotImplementedError: TRUSTTabFT_cut_cell<int>::sort_tot(int,int) with other than 3 columns." << finl;
138 if (column_1 == 1 && column_2 == 2)
140 compare_second_then_third_column<double>(
addr(), cut_cell_disc_->get_n_tot());
144 Cerr <<
"NotImplementedError: TRUSTTabFT_cut_cell<double>::sort_tot(double,double) with sorting other than the second, then third column." << finl;
150 Cerr <<
"NotImplementedError: TRUSTTabFT_cut_cell<double>::sort_tot(double,double) with other than 3 columns." << finl;
155template<
typename _TYPE_>
158 cut_cell_disc_->get_desc_structure().echange_espace_virtuel(*
this);
161template<
typename _TYPE_>
164 cut_cell_disc_->get_desc_structure().echange_espace_virtuel(*
this, op);
170 cut_cell_disc_ = cut_cell_disc;
171 diph_l_.associer_persistant(cut_cell_disc_, dimension);
172 diph_v_.associer_persistant(cut_cell_disc_, dimension);
177 cut_cell_disc_ = cut_cell_disc;
178 diph_l_.associer_ephemere(cut_cell_disc_, dimension);
179 diph_v_.associer_ephemere(cut_cell_disc_, dimension);
184 cut_cell_disc_ = cut_cell_disc;
185 diph_l_.associer_paresseux(cut_cell_disc_, dimension);
186 diph_v_.associer_paresseux(cut_cell_disc_, dimension);
191 diph_l_.echange_espace_virtuel();
192 diph_v_.echange_espace_virtuel();
197 diph_l_.echange_espace_virtuel(op);
198 diph_v_.echange_espace_virtuel(op);
220 int ni = (dir == 0) ? flux.
ni() : flux.
ni() - 1;
221 int nj = (dir == 1) ? flux.
nj() : flux.
nj() - 1;
222 int di = (dir == 0)*(-1);
223 int dj = (dir == 1)*(-1);
224 int dk = (dir == 2)*(-1);
225 for (
int j = 0; j < nj; j++)
227 for (
int i = 0; i < ni; i++)
229 int n = cut_cell_disc_->get_n(i, j, k_layer);
232 int n_decale = cut_cell_disc_->get_n(i+di, j+dj, k_layer+dk);
void add_to_lazy_data(DoubleTabFT_cut_cell &field, int dimension)
void add_to_transient_data(DoubleTabFT_cut_cell &field, int dimension)
void add_to_persistent_data(DoubleTabFT_cut_cell &field, int dimension)
void associer_ephemere(Cut_cell_FT_Disc &cut_cell_disc, int dimension)
DoubleTabFT_cut_cell diph_v_
DoubleTabFT_cut_cell diph_l_
void echange_espace_virtuel()
void associer_persistant(Cut_cell_FT_Disc &cut_cell_disc, int dimension)
void associer_paresseux(Cut_cell_FT_Disc &cut_cell_disc, int dimension)
void associer_ephemere(Cut_cell_FT_Disc &cut_cell_disc)
void associer_persistant(Cut_cell_FT_Disc &cut_cell_disc)
void associer_paresseux(Cut_cell_FT_Disc &cut_cell_disc)
bool verify_consistency_within_layer(int dir, int k_layer, const IJK_Field_local_double &flux)
static int convert_indicatrice_to_phase(double indicatrice)
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
: class TRUSTTabFT_cut_cell
void associer_paresseux(Cut_cell_FT_Disc &cut_cell_disc, int dimension)
void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname") override
void associer_persistant(Cut_cell_FT_Disc &cut_cell_disc, int dimension)
void associer_ephemere(Cut_cell_FT_Disc &cut_cell_disc, int dimension)
_SIZE_ dimension(int d) const