TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
IJK_Thermal_cut_cell.h
1/****************************************************************************
2* Copyright (c) 2023, CEA
3* All rights reserved.
4*
5* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
6* 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
7* 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
8* 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
9*
10* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
11* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
12* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
13*
14*****************************************************************************/
15
16#ifndef IJK_Thermal_cut_cell_included
17#define IJK_Thermal_cut_cell_included
18
19#include <IJK_Thermal_base.h>
20#include <IJK_Field_vector.h>
21#include <IJK_Field.h>
22#include <Boundary_Conditions_Thermique.h>
23#include <Domaine_IJK.h>
24#include <IJK_Field.h>
25#include <Parser.h>
26#include <IJK_Lata_writer.h>
27#include <OpConvQuickIJKScalar.h>
28#include <OpConvCentre2IJKScalar.h>
29#include <Ouvrir_fichier.h>
30#include <TRUST_Ref.h>
31#include <Operateur_IJK_elem_diff_base.h>
32#include <OpConvAmontIJK.h>
33#include <OpConvDiscQuickIJKScalar.h>
34#include <OpConvCentre4IJK.h>
35#include <Cut_cell_correction_petites_cellules.h>
36#include <Cut_cell_convection_auxiliaire.h>
37#include <Cut_cell_diffusion_auxiliaire.h>
38
39
41{
42
43 Declare_instanciable( IJK_Thermal_cut_cell ) ;
44
45public :
46
47 void initialize(const Domaine_IJK& splitting) override;
48
49 void update_thermal_properties() override;
50 void set_param( Param& param ) const override;
51 void compute_temperature_init() override;
52 void recompute_temperature_init() override;
53
54 void perform_thermal_step(double total_timestep, int flag_rk, int rk_step);
55 void euler_time_step(const double timestep) override;
56 void rk3_sub_step(const int rk_step, const double total_timestep, const double time) override;
57 void sauvegarder_temperature(Nom& lata_name, int idx, const int& stop=0) override;
58
59 double compute_global_energy() override
60 {
61 Cerr << "I want to make sure the function compute_global_energy is not used." << finl;
63 return 0.;
64 }
65 void print_Tmin_Tmax_cut_cell(const Cut_field_double& cut_field_temperature, bool next, double current_time, const std::string& heading);
67
69 {
70 Cut_field_double& cut_field_temperature = static_cast<Cut_field_double&>(*temperature_);
71 cut_field_temperature.copie_pure_vers_diph_sans_interpolation();
72
74 {
75 RK3_F_fluxes_conv_[0].copie_pure_vers_diph_sans_interpolation();
76 RK3_F_fluxes_conv_[1].copie_pure_vers_diph_sans_interpolation();
77 RK3_F_fluxes_conv_[2].copie_pure_vers_diph_sans_interpolation();
78 }
79
81 {
82 RK3_F_fluxes_diff_[0].copie_pure_vers_diph_sans_interpolation();
83 RK3_F_fluxes_diff_[1].copie_pure_vers_diph_sans_interpolation();
84 RK3_F_fluxes_diff_[2].copie_pure_vers_diph_sans_interpolation();
85 }
86
87 cellule_rk_restreint_conv_.copie_pure_vers_diph_sans_interpolation();
88 cellule_rk_restreint_diff_.copie_pure_vers_diph_sans_interpolation();
89 }
91 {
92 Cut_field_double& cut_field_temperature = static_cast<Cut_field_double&>(*temperature_);
94
96 {
97 RK3_F_fluxes_conv_[0].echange_pure_vers_diph_cellules_initialement_pures();
98 RK3_F_fluxes_conv_[1].echange_pure_vers_diph_cellules_initialement_pures();
99 RK3_F_fluxes_conv_[2].echange_pure_vers_diph_cellules_initialement_pures();
100 }
101
103 {
104 RK3_F_fluxes_diff_[0].echange_pure_vers_diph_cellules_initialement_pures();
105 RK3_F_fluxes_diff_[1].echange_pure_vers_diph_cellules_initialement_pures();
106 RK3_F_fluxes_diff_[2].echange_pure_vers_diph_cellules_initialement_pures();
107 }
108
109 cellule_rk_restreint_conv_.echange_pure_vers_diph_cellules_initialement_pures();
110 cellule_rk_restreint_diff_.echange_pure_vers_diph_cellules_initialement_pures();
111 }
113 {
114 Cut_field_double& cut_field_temperature = static_cast<Cut_field_double&>(*temperature_);
116
118 {
119 RK3_F_fluxes_conv_[0].echange_diph_vers_pure_cellules_finalement_pures();
120 RK3_F_fluxes_conv_[1].echange_diph_vers_pure_cellules_finalement_pures();
121 RK3_F_fluxes_conv_[2].echange_diph_vers_pure_cellules_finalement_pures();
122 }
123
125 {
126 RK3_F_fluxes_diff_[0].echange_diph_vers_pure_cellules_finalement_pures();
127 RK3_F_fluxes_diff_[1].echange_diph_vers_pure_cellules_finalement_pures();
128 RK3_F_fluxes_diff_[2].echange_diph_vers_pure_cellules_finalement_pures();
129 }
130
131 cellule_rk_restreint_conv_.echange_diph_vers_pure_cellules_finalement_pures();
132 cellule_rk_restreint_diff_.echange_diph_vers_pure_cellules_finalement_pures();
133 }
135 {
136 Cut_field_double& cut_field_temperature = static_cast<Cut_field_double&>(*temperature_);
137 cut_field_temperature.vide_phase_invalide_cellules_diphasiques();
138
140 {
141 RK3_F_fluxes_conv_[0].vide_phase_invalide_cellules_diphasiques();
142 RK3_F_fluxes_conv_[1].vide_phase_invalide_cellules_diphasiques();
143 RK3_F_fluxes_conv_[2].vide_phase_invalide_cellules_diphasiques();
144 }
145
147 {
148 RK3_F_fluxes_diff_[0].vide_phase_invalide_cellules_diphasiques();
149 RK3_F_fluxes_diff_[1].vide_phase_invalide_cellules_diphasiques();
150 RK3_F_fluxes_diff_[2].vide_phase_invalide_cellules_diphasiques();
151 }
152
153 cellule_rk_restreint_conv_.vide_phase_invalide_cellules_diphasiques();
154 cellule_rk_restreint_diff_.vide_phase_invalide_cellules_diphasiques();
155 }
156 void remplir_tableau_pure_cellules_diphasiques(bool next_time) override
157 {
158 Cut_field_double& cut_field_temperature = static_cast<Cut_field_double&>(*temperature_);
159 cut_field_temperature.remplir_tableau_pure_cellules_diphasiques(next_time);
160
162 {
163 RK3_F_fluxes_conv_[0].remplir_tableau_pure_cellules_diphasiques(next_time);
164 RK3_F_fluxes_conv_[1].remplir_tableau_pure_cellules_diphasiques(next_time);
165 RK3_F_fluxes_conv_[2].remplir_tableau_pure_cellules_diphasiques(next_time);
166 }
167
169 {
170 RK3_F_fluxes_diff_[0].remplir_tableau_pure_cellules_diphasiques(next_time);
171 RK3_F_fluxes_diff_[1].remplir_tableau_pure_cellules_diphasiques(next_time);
172 RK3_F_fluxes_diff_[2].remplir_tableau_pure_cellules_diphasiques(next_time);
173 }
174
175 cellule_rk_restreint_conv_.remplir_tableau_pure_cellules_diphasiques_max(next_time);
176 cellule_rk_restreint_diff_.remplir_tableau_pure_cellules_diphasiques_max(next_time);
177 }
178
179protected :
180 friend class Postprocessing_IJK;
181
182 void lire_temperature(const Domaine_IJK& splitting) override;
183
184 void compute_interfacial_temperature2(ArrOfDouble& interfacial_temperature, ArrOfDouble& flux_normal_interp) override;
185
186 void compute_temperature_convection_cut_cell(const Cut_field_vector3_double& cut_field_total_velocity, Cut_field_double& cut_field_d_temperature);
187 void add_temperature_diffusion() override;
188 void compute_diffusion_increment() override { ; }; // Unused function in the cut-cell case
190
191
192 OBS_PTR(Probleme_FTD_IJK_cut_cell) ref_ijk_ft_cut_cell_;
193
194 IJK_Field_double div_rho_cp_T_;
195 IJK_Field_double lambda_;
196
199
201
202 METHODE_FLUX_INTERFACE methode_flux_interface_ = METHODE_FLUX_INTERFACE::INTERP_CUT_CELL;
207 DoubleTabFT_cut_cell_scalar flux_interface_efficace_scalar_;
208
211
212 Cut_field_vector3_double current_fluxes_conv_;
213 Cut_field_vector3_double current_fluxes_diff_;
214 Cut_field_vector3_double RK3_F_fluxes_conv_;
215 Cut_field_vector3_double RK3_F_fluxes_diff_;
222
223 // Temporary fields, to inspect each step of the time advance
225 Cut_field_double temperature_post_dying_;
229
232
234
237
238
239 int verbosite_ = 2;
240};
241
242#endif /* IJK_Thermal_cut_cell_included */
void copie_pure_vers_diph_sans_interpolation()
Definition Cut_field.cpp:37
void remplir_tableau_pure_cellules_diphasiques(bool next_time)
void vide_phase_invalide_cellules_diphasiques()
void echange_pure_vers_diph_cellules_initialement_pures()
Definition Cut_field.cpp:54
void echange_diph_vers_pure_cellules_finalement_pures()
This class encapsulates all the information related to the eulerian mesh for TrioIJK.
Definition Domaine_IJK.h:47
FixedVector< Cut_cell_double, 3 > cut_cell_flux_convection_
void copie_pure_vers_diph_sans_interpolation() override
void compute_interfacial_temperature2(ArrOfDouble &interfacial_temperature, ArrOfDouble &flux_normal_interp) override
void compute_temperature_init() override
Cut_field_vector3_double current_fluxes_diff_
void correct_temperature_for_eulerian_fluxes() override
IJK_Field_double flux_interface_ft_scalar_old_
void recompute_temperature_init() override
void sauvegarder_temperature(Nom &lata_name, int idx, const int &stop=0) override
Cut_field_double temperature_post_convection_
FixedVector< Cut_cell_double, 3 > cut_cell_flux_diffusion_
bool runge_kutta_fluxes_pas_de_correction_convection_
void calculer_flux_interface()
void euler_time_step(const double timestep) override
double compute_global_energy() override
IJK_Field_double flux_interface_ns_scalar_next_
void set_param(Param &param) const override
Cut_cell_diffusion_auxiliaire diffusive_correction_
Cut_field_int cellule_rk_restreint_conv_
DoubleTabFT_cut_cell_scalar flux_interface_efficace_scalar_
Cut_field_vector3_double RK3_F_fluxes_diff_
void print_Tmin_Tmax_cut_cell(const Cut_field_double &cut_field_temperature, bool next, double current_time, const std::string &heading)
void lire_temperature(const Domaine_IJK &splitting) override
OBS_PTR(Probleme_FTD_IJK_cut_cell) ref_ijk_ft_cut_cell_
Cut_field_double temperature_post_dying_
Cut_field_double temperature_post_regular_
Cut_field_int cellule_rk_restreint_diff_
void perform_thermal_step(double total_timestep, int flag_rk, int rk_step)
void add_temperature_diffusion() override
void update_thermal_properties() override
METHODE_FLUX_INTERFACE methode_flux_interface_
void initialize(const Domaine_IJK &splitting) override
Cut_cell_conv_scheme cut_cell_conv_scheme_
void compute_temperature_convection_cut_cell(const Cut_field_vector3_double &cut_field_total_velocity, Cut_field_double &cut_field_d_temperature)
void echange_pure_vers_diph_cellules_initialement_pures() override
Cut_field_double temperature_post_diff_regular_
void rk3_sub_step(const int rk_step, const double total_timestep, const double time) override
void remplir_tableau_pure_cellules_diphasiques(bool next_time) override
Cut_field_vector3_double RK3_F_fluxes_conv_
IJK_Field_double flux_interface_ns_scalar_old_
void echange_diph_vers_pure_cellules_finalement_pures() override
IJK_Field_double div_rho_cp_T_
void compute_diffusion_increment() override
void vide_phase_invalide_cellules_diphasiques() override
IJK_Field_double flux_interface_ft_scalar_next_
Cut_cell_convection_auxiliaire convective_correction_
Cut_field_vector3_double current_fluxes_conv_
class Nom Une chaine de caractere pour nommer les objets de TRUST
Definition Nom.h:31
Helper class to factorize the readOn method of Objet_U classes.
Definition Param.h:112
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Definition Process.cpp:455