TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
IJK_Thermal_Subresolution.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_Subresolution_included
17#define IJK_Thermal_Subresolution_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 <Parser.h>
25#include <IJK_Lata_writer.h>
26#include <OpConvQuickIJKScalar.h>
27#include <OpConvCentre2IJKScalar.h>
28#include <Ouvrir_fichier.h>
29#include <Corrige_flux_FT_base.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 <IJK_One_Dimensional_Subproblems.h>
36#include <IJK_Finite_Difference_One_Dimensional_Matrix_Assembler.h>
37#include <IJK_SolveSys_FD_thermal.h>
38#include <MD_Vector_tools.h>
39
40
42{
43
44 Declare_instanciable( IJK_Thermal_Subresolution ) ;
47
48public :
49
50 void initialize(const Domaine_IJK& splitting) override;
51 // void sauvegarder_temperature(Nom& lata_name, int idx) override;
52 void update_thermal_properties() override;
54 void set_param(Param& param) const override;
55 void compute_ghost_cell_numbers_for_subproblems(const Domaine_IJK& splitting, int ghost_init) override;
56
57 double get_probes_length();
58 // Entree& read_fd_solver(Entree& is);
59 // void read_fd_solver(const Motcle& mot, Entree& is);
60 int lire_motcle_non_standard(const Motcle&, Entree&) override;
61 void set_thermal_subresolution_outputs(const Nom& interfacial_quantities_thermal_probes,
62 const Nom& shell_quantities_thermal_probes,
63 const Nom& overall_bubbles_quantities,
64 const Nom& local_quantities_thermal_probes_time_index_folder) override;
65 void post_process_thermal_downstream_lines(const Nom& local_quantities_thermal_lines_time_index_folder) override;
66 void initialise_thermal_dowstreamlines_tabs(std::vector<std::vector<FixedVector<ArrOfInt,3>>>& parameters,
67 const int& nb_thermal_circles,
68 const int& nb_thermal_lines);
69 void initialise_thermal_dowstreamlines_tabs(std::vector<std::vector<FixedVector<ArrOfDouble,2>>>& parameters,
70 const int& nb_thermal_circles,
71 const int& nb_thermal_lines);
72 void initialise_thermal_dowstreamlines_tabs(std::vector<std::vector<ArrOfInt>>& parameters,
73 const int& nb_thermal_circles,
74 const int& nb_thermal_lines);
75 void initialise_thermal_dowstreamlines_tabs(std::vector<std::vector<ArrOfDouble>>& parameters,
76 const int& nb_thermal_circles,
77 const int& nb_thermal_lines);
78 void initialise_thermal_line_points(const int& line_dir,
79 ArrOfDouble& linear_coord,
80 FixedVector<ArrOfDouble,3>& coordinates_line,
81 double& diameter);
82 void find_thermal_line_points_in_procs(std::vector<std::vector<ArrOfInt>>& parameters);
83 void find_cocentric_line_coordinates(const int& nb_thermal_circles,
84 const int& nb_thermal_lines,
85 const double& diameter_approx,
86 std::vector<std::vector<FixedVector<ArrOfDouble,2>>>& coordinates_sides);
87 void find_points_on_proc(std::vector<std::vector<ArrOfInt>>& is_point_on_proc,
88 std::vector<std::vector<FixedVector<ArrOfInt,3>>>& ijk_indices,
89 const FixedVector<ArrOfDouble,3>& coordinates_line,
90 const std::vector<std::vector<FixedVector<ArrOfDouble,2>>>& coordinates_sides,
91 const int& line_dir);
92 void min_max_ldir(const int& dir,
93 const Domaine_IJK& geom,
94 double& min_dir, double& max_dir);
95 void interpolate_fields_on_downstream_line(const int& dir,
96 const int& nb_thermal_circles,
97 const int& index_circle,
98 const int& index_line,
99 const std::vector<std::vector<ArrOfInt>>& is_point_on_proc,
100 const FixedVector<ArrOfDouble,3>& coordinates_line,
101 const std::vector<std::vector<FixedVector<ArrOfDouble,2>>>& coordinates_sides,
102 const IJK_Field_double& field,
103 const IJK_Field_vector3_double& field_gradient,
104 const IJK_Field_vector3_double& velocity,
105 DoubleVect& values,
106 const int field_type);
108 const int& nb_thermal_circles,
109 const int& index_circle,
110 const int& index_line,
111 const std::vector<std::vector<ArrOfInt>>& is_point_on_proc,
112 const FixedVector<ArrOfDouble,3>& coordinates_line,
113 const std::vector<std::vector<FixedVector<ArrOfDouble,2>>>& coordinates_sides,
114 DoubleVect& values);
115 void interpolate_velocity_on_downstream_line(const int& dir,
116 const int& nb_thermal_circles,
117 const int& index_circle,
118 const int& index_line,
119 const std::vector<std::vector<ArrOfInt>>& is_point_on_proc,
120 const FixedVector<ArrOfDouble,3>& coordinates_line,
121 const std::vector<std::vector<FixedVector<ArrOfDouble,2>>>& coordinates_sides,
122 DoubleVect& values);
124 const int& nb_thermal_circles,
125 const int& index_circle,
126 const int& index_line,
127 const std::vector<std::vector<ArrOfInt>>& is_point_on_proc,
128 const FixedVector<ArrOfDouble,3>& coordinates_line,
129 const std::vector<std::vector<FixedVector<ArrOfDouble,2>>>& coordinates_sides,
130 DoubleVect& values);
132 const int& nb_thermal_circles,
133 const int& index_circle,
134 const int& index_line,
135 const std::vector<std::vector<ArrOfInt>>& is_point_on_proc,
136 const FixedVector<ArrOfDouble,3>& coordinates_line,
137 const std::vector<std::vector<FixedVector<ArrOfDouble,2>>>& coordinates_sides,
138 DoubleVect& values);
140 const int& nb_thermal_circles,
141 const int& index_circle,
142 const int& index_line,
143 const std::vector<std::vector<ArrOfInt>>& is_point_on_proc,
144 const FixedVector<ArrOfDouble,3>& coordinates_line,
145 const std::vector<std::vector<FixedVector<ArrOfDouble,2>>>& coordinates_sides,
146 DoubleVect& values);
147 void post_processed_fields_on_downstream_line(const Nom& local_quantities_thermal_lines_time_index_folder,
148 const int& line_dir,
149 const int& linear_circle_line_index,
150 const int& index_circle,
151 const int& index_line,
152 const double& diameter_approx,
153 std::vector<std::vector<ArrOfInt>>& is_point_on_proc,
154 const std::vector<std::vector<FixedVector<ArrOfInt,3>>>& indices_ijk,
155 const ArrOfDouble& linear_coord,
156 const FixedVector<ArrOfDouble,3>& coordinates_line,
157 const std::vector<std::vector<FixedVector<ArrOfDouble,2>>>& coordinates_sides,
158 const DoubleVect& temperature_line,
159 const DoubleVect& velocity_line,
160 const DoubleVect& convective_term_line,
161 const DoubleVect& diffusive_term_line,
162 const DoubleVect& temperature_incr_line);
163 void post_process_thermal_wake_slices(const Nom& local_quantities_thermal_slices_time_index_folder) override;
164 void post_process_thermal_wake_slice(const int& slice,
165 const double& nb_diam_slice,
166 const Nom& local_quantities_thermal_slices_time_index_folder);
167 double post_process_thermal_wake_slice_index_dir(int& index_dir_local,
168 int& index_dir_global,
169 int& n_cross_section_1,
170 int& n_cross_section_2,
171 int& dir,
172 const double& nb_diam,
173 int upstream_dir,
174 int gravity_dir,
175 double& diameter);
176 void complete_field_thermal_wake_slice_ij_values(int& index_dir_local,
177 const int& dir,
178 const double& slice_pos,
179 FixedVector<IntTab, 2>& ij_indices,
180 FixedVector<DoubleTab, 3>& ij_coords,
181 const IJK_Field_double& field,
182 const IJK_Field_vector3_double& field_gradient,
183 const IJK_Field_vector3_double& velocity,
184 DoubleTab& values,
185 const int field_type,
186 const int slice_to_nearest_plane,
187 const int compute_indices = 0);
189 int& index_dir_local,
190 const int& dir,
191 const double& slice_pos,
192 FixedVector<IntTab, 2>& ij_indices,
193 FixedVector<DoubleTab, 3>& ij_coords,
194 DoubleTab& values,
195 const Nom& local_quantities_thermal_slices_time_index_folder);
197 int& index_dir_local,
198 const int& dir,
199 const double& slice_pos,
200 FixedVector<IntTab, 2>& ij_indices,
201 FixedVector<DoubleTab, 3>& ij_coords,
202 DoubleTab& values,
203 const Nom& local_quantities_thermal_slices_time_index_folder);
205 int& index_dir_local,
206 const int& dir,
207 const double& slice_pos,
208 FixedVector<IntTab, 2>& ij_indices,
209 FixedVector<DoubleTab, 3>& ij_coords,
210 DoubleTab& velocity_values,
211 const Nom& local_quantities_thermal_slices_time_index_folder);
213 int& index_dir_local,
214 const int& dir,
215 const double& slice_pos,
216 FixedVector<IntTab, 2>& ij_indices,
217 FixedVector<DoubleTab, 3>& ij_coords,
218 DoubleTab& values,
219 DoubleTab& velocity_values,
220 const Nom& local_quantities_thermal_slices_time_index_folder);
222 int& index_dir_local,
223 const int& dir,
224 const double& slice_pos,
225 FixedVector<IntTab, 2>& ij_indices,
226 FixedVector<DoubleTab, 3>& ij_coords,
227 DoubleTab& values,
228 const Nom& local_quantities_thermal_slices_time_index_folder);
230 int& index_dir_local,
231 const int& dir,
232 const double& slice_pos,
233 FixedVector<IntTab, 2>& ij_indices,
234 FixedVector<DoubleTab, 3>& ij_coords,
235 DoubleTab& values,
236 const Nom& local_quantities_thermal_slices_time_index_folder);
237 void post_processed_field_thermal_wake_slice_ij(const int& slice,
238 const Nom& local_quantities_thermal_slices_time_index_folder,
239 const double& diameter_approx,
240 const double& nb_diam_slice,
241 const int& n_cross_section_1,
242 const int& n_cross_section_2,
243 const FixedVector<IntTab, 2> ij_indices,
244 const FixedVector<DoubleTab, 3>& ij_coords,
245 const DoubleTab& temperature_slice,
246 const DoubleTab& velocity_slice,
247 const DoubleTab& convection_slice,
248 const DoubleTab& diffusion_slice,
249 const DoubleTab& temperature_incr_slice);
250
251 const IJK_Field_double& get_debug_lrs_cells() const override
252 {
253 return debug_LRS_cells_;
254 }
255 const IJK_Field_double& get_temperature_cell_neighbours_debug() const override
256 {
259 else
260 return dummy_double_field_;
261 }
262 const IJK_Field_double& get_temperature_cell_neighbours() const override
263 {
266 else
267 return dummy_double_field_;
268 }
269 const IJK_Field_int& get_cell_neighbours_corrected() const override
270 {
273 else
274 return dummy_int_field_;
275 }
276 const IJK_Field_double& get_neighbours_temperature_colinearity_weighting() const override
277 {
280 else
281 return dummy_double_field_;
282 }
283 const IJK_Field_vector3_double& get_cell_faces_corrected_diffusive() const override
284 {
287 else
288 return dummy_double_vect_;
289 }
290 const IJK_Field_vector3_double& get_cell_faces_corrected_convective() const override
291 {
294 else
295 return dummy_double_vect_;
296 }
297 const IJK_Field_vector3_int& get_cell_faces_corrected_bool() const override
298 {
301 else
302 return dummy_int_vect_;
303 }
311 const IJK_Field_vector3_int& get_cell_faces_neighbours_corrected_all_bool() const override
312 {
315 else
316 return dummy_int_vect_;
317 }
318 const IJK_Field_vector3_int& get_cell_faces_neighbours_corrected_min_max_bool() const override
319 {
322 else
323 return dummy_int_vect_;
324 }
325 const IJK_Field_vector3_double& get_cell_faces_neighbours_corrected_convective() const override
326 {
329 else
330 return dummy_double_vect_;
331 }
346 const IJK_Field_vector3_double& get_cell_faces_neighbours_corrected_diffusive() const override
347 {
350 else
351 return dummy_double_vect_;
352 }
353 const IJK_Field_vector3_double& get_neighbours_faces_weighting_colinearity() const override
354 {
357 else
358 return dummy_double_vect_;
359 }
360 const IJK_Field_int& get_cell_neighbours_corrected_trimmed() const override
361 {
364 else
365 return dummy_int_field_;
366 }
367 const IJK_Field_double& get_probe_collision_debug_field() const override
368 {
371 else
372 return dummy_double_field_;
373 }
374 const IJK_Field_vector3_double& get_interfacial_heat_flux_dispatched() const override
375 {
378 else
379 return dummy_double_vect_;
380 }
381 const IJK_Field_vector3_double& get_interfacial_heat_flux_contrib() const override
382 {
385 else
386 return dummy_double_vect_;
387 }
388
389 const IJK_Field_vector3_double& get_interfacial_heat_flux_current() const override
390 {
393 else
394 return dummy_double_vect_;
395 }
396
402 void set_subproblems_interfaces_fields(const Domaine_IJK& splitting) override;
403protected :
405 void compute_thermal_subproblems() override;
406 void compute_diffusion_increment() override;
408 void correct_any_temperature_fields_for_eulerian_fluxes(IJK_Field_double& temperature);
411 void compare_temperature_fields(const IJK_Field_double& temperature,
412 const IJK_Field_double& temperature_ana,
413 IJK_Field_double& error_temperature_ana,
414 IJK_Field_double& error_temperature_ana_rel);
415 void evaluate_total_liquid_absolute_parameter(const IJK_Field_double& field,
416 double& total_parameter);
417 void evaluate_total_liquid_parameter_squared(const IJK_Field_double& field,
418 double& total_parameter);
419 void correct_any_temperature_field_for_visu(IJK_Field_double& temperature);
420 void correct_temperature_for_visu() override;
421 void clip_min_temperature_values() override;
422 void clip_max_temperature_values() override;
425
428
441 void compute_radial_first_second_order_operators(Matrice& radial_first_order_operator_raw,
442 Matrice& radial_second_order_operator_raw,
443 Matrice& radial_first_order_operator,
444 Matrice& radial_second_order_operator);
445 void compute_first_order_operator_raw(Matrice& radial_first_order_operator);
446 void compute_first_order_operator(Matrice& radial_first_order_operator, double dr);
447 void compute_second_order_operator(Matrice& radial_second_order_operator, double dr);
448 void compute_second_order_operator_raw(Matrice& radial_second_order_operator);
449 void initialise_identity_matrices(Matrice& identity_matrix,
450 Matrice& identity_matrix_subproblems);
451 void initialise_identity_matrices_sparse(Matrice& identity_matrix,
452 Matrice& identity_matrix_subproblems);
453 void initialise_radial_convection_operator(Matrice& radial_first_order_operator,
454 Matrice& radial_convection_matrix);
455 void initialise_radial_convection_operator_sparse(Matrice& radial_first_order_operator,
456 Matrice& radial_convection_matrix);
457 void initialise_radial_diffusion_operator(Matrice& radial_second_order_operator,
458 Matrice& radial_diffusion_matrix);
459 void initialise_radial_diffusion_operator_sparse(Matrice& radial_second_order_operator,
460 Matrice& radial_diffusion_matrix);
461 // int copy_local_unknwowns_rhs();
463 void compute_md_vector();
474 void update_intersections() override;
478
479 void complete_thermal_fluxes_face_centre(const int& fluxes_correction_conservations);
480
481 void compute_temperature_cell_centres(const int first_corr) override;
484 void replace_temperature_cell_centres_neighbours(const int& use_neighbours_temperature_to_correct_trimmed);
485 void prepare_ij_fluxes_k_layers() override;
486 void set_zero_temperature_increment() override;
487 void clean_thermal_subproblems() override;
488 void clean_ijk_intersections() override;
491 void correct_operators_for_visu() override;
492
493 double get_modified_time() override;
494 void compute_temperature_init() override;
495 void recompute_temperature_init() override;
496 void set_field_temperature_per_bubble(const int index_bubble);
497 Nom compute_quasi_static_spherical_diffusion_expression(const double& time_scope, const int index_bubble, const int index_bubble_real);
498 Nom generate_expression_temperature_ini(const double& time_scope, const double x, const double y, const double z);
499 void approx_erf_inverse(const double& x, double& res);
500 void set_field_T_ana() override;
501 void calculer_ecart_T_ana() override { ; };
503 double compute_spherical_steady_dirichlet_left_right_derivative_value(const double& r, const double& temperature_prev);
504 double compute_spherical_steady_dirichlet_left_right_integral(const double& temperature_end_prev);
505 double find_time_dichotomy_integral(const double& temperature_integral, double& temperature_end_prev);
507 double get_time_inflection_derivative(double& temperature_end_min);
508 double find_time_dichotomy_derivative(const double& temperature_derivative, double& temperature_limit_left, double& temperature_limit_right);
509
510 /* compute_rho_cp_u_mean() May be clearly overridden later */
511 double compute_rho_cp_u_mean(const IJK_Field_double& vx) override { return IJK_Thermal_base::compute_rho_cp_u_mean(vx); };
512
514
521
524
527
542 double time_ini_user_ = 0.;
543
555 int subproblem_temperature_extension_ = 0; // ghost fluid extension based on the interfacial gradient computed with the subproblem
556
557 bool override_vapour_mixed_values_ = false; // For debug purposes
558
562 double probe_length_ = 0.;
563 double dr_ = 0.;
573
575
577
579 /*
580 * Thermal subproblems are regrouped in a single linear system AX=b
581 * on each processor !
582 */
588
589 /*
590 * TODO: Cast the matrice with Matrice Morse directly (not Matrice Bloc)
591 */
595
596 // SolveurSys one_dimensional_advection_diffusion_thermal_solver_;
604 bool discrete_integral_ = false;
606
608
623
624 /*
625 * Some tries to do explicit temporal variations at the beginning
626 */
633 double local_fourier_ = 1.;
634 double local_cfl_ = 1.;
639 double local_dt_cfl_ = 0.;
643
647
648 /*
649 * Some tries to make the probe length varies at the beginning of the simulation
650 */
656 bool max_u_radial_ = false;
657
658 IJK_Field_double debug_LRS_cells_;
661
665 bool use_sparse_matrix_ = false;
667
684
686
690
692
693 /*
694 * Pure cells corrected for visualisation
695 */
696 IJK_Field_vector3_double cell_faces_corrected_diffusive_;
697 IJK_Field_vector3_double cell_faces_corrected_convective_;
698 IJK_Field_vector3_int cell_faces_corrected_bool_;
700
701 /*
702 * Neighbouring faces in the diagonal
703 */
707
708 /*
709 * All reachable faces to correct
710 */
728
733
734 bool interp_eulerian_ = false;
737
740
743 double nb_diam_slice_ = -1;
744 int nb_slices_ = 1;
747
754
759
760 IJK_Field_vector3_double interfacial_heat_flux_dispatched_;
763
765 IJK_Field_vector3_double interfacial_heat_flux_contrib_;
766 IJK_Field_vector3_double interfacial_heat_flux_current_;
769};
770
771#endif /* IJK_Thermal_Subresolution_included */
This class encapsulates all the information related to the eulerian mesh for TrioIJK.
Definition Domaine_IJK.h:47
const IJK_Field_vector3_double & get_cell_faces_neighbours_corrected_diffusive() const override
Nom generate_expression_temperature_ini(const double &time_scope, const double x, const double y, const double z)
double compute_spherical_steady_dirichlet_left_right_value(const double &r)
IJK_Field_vector3_double cell_faces_corrected_convective_
const IJK_Field_vector3_double & get_interfacial_heat_flux_contrib() const override
void complete_field_thermal_wake_slice_ij_convection(const int &slice, int &index_dir_local, const int &dir, const double &slice_pos, FixedVector< IntTab, 2 > &ij_indices, FixedVector< DoubleTab, 3 > &ij_coords, DoubleTab &values, DoubleTab &velocity_values, const Nom &local_quantities_thermal_slices_time_index_folder)
const IJK_Field_vector3_double & get_cell_faces_corrected_diffusive() const override
void compute_second_order_operator(Matrice &radial_second_order_operator, double dr)
FixedVector< ArrOfDouble, 3 > thermal_flux_out_
void interpolate_temperature_on_downstream_line(const int &dir, const int &nb_thermal_circles, const int &index_circle, const int &index_line, const std::vector< std::vector< ArrOfInt > > &is_point_on_proc, const FixedVector< ArrOfDouble, 3 > &coordinates_line, const std::vector< std::vector< FixedVector< ArrOfDouble, 2 > > > &coordinates_sides, DoubleVect &values)
double compute_rho_cp_u_mean(const IJK_Field_double &vx) override
IJK_Field_double temperature_cell_neighbours_debug_
void initialise_thermal_line_points(const int &line_dir, ArrOfDouble &linear_coord, FixedVector< ArrOfDouble, 3 > &coordinates_line, double &diameter)
IJK_Field_vector3_double interfacial_heat_flux_contrib_
void compute_subresolution_temporal_explicit_implicit_matrices()
void compute_first_order_operator_raw(Matrice &radial_first_order_operator)
void compute_first_order_operator(Matrice &radial_first_order_operator, double dr)
double post_process_thermal_wake_slice_index_dir(int &index_dir_local, int &index_dir_global, int &n_cross_section_1, int &n_cross_section_2, int &dir, const double &nb_diam, int upstream_dir, int gravity_dir, double &diameter)
const IJK_Field_vector3_double & get_interfacial_heat_flux_dispatched() const override
int lire_motcle_non_standard(const Motcle &, Entree &) override
Lecture des parametres de type non simple d'un objet_U a partir d'un flot d'entree.
IJK_Field_vector3_double cell_faces_neighbours_corrected_diffusive_
IJK_Field_int neighbours_temperature_to_correct_trimmed_
const IJK_Field_vector3_double & get_cell_faces_corrected_convective() const override
IJK_Field_vector3_double interfacial_heat_flux_current_
void complete_field_thermal_wake_slice_ij_diffusion(const int &slice, int &index_dir_local, const int &dir, const double &slice_pos, FixedVector< IntTab, 2 > &ij_indices, FixedVector< DoubleTab, 3 > &ij_coords, DoubleTab &values, const Nom &local_quantities_thermal_slices_time_index_folder)
IJK_Field_vector3_int cell_faces_neighbours_corrected_min_max_bool_
void set_field_temperature_per_bubble(const int index_bubble)
void enforce_periodic_temperature_boundary_value() override
void evaluate_total_liquid_parameter_squared(const IJK_Field_double &field, double &total_parameter)
void compute_second_order_operator_raw(Matrice &radial_second_order_operator)
void compute_temperature_cell_centres(const int first_corr) override
IJK_Field_vector3_double neighbours_faces_weighting_colinearity_
IJK_SolveSys_FD_thermal one_dimensional_advection_diffusion_thermal_solver_implicit_
void interpolate_convective_term_on_downstream_line(const int &dir, const int &nb_thermal_circles, const int &index_circle, const int &index_line, const std::vector< std::vector< ArrOfInt > > &is_point_on_proc, const FixedVector< ArrOfDouble, 3 > &coordinates_line, const std::vector< std::vector< FixedVector< ArrOfDouble, 2 > > > &coordinates_sides, DoubleVect &values)
void initialize(const Domaine_IJK &splitting) override
void complete_field_thermal_wake_slice_ij_values(int &index_dir_local, const int &dir, const double &slice_pos, FixedVector< IntTab, 2 > &ij_indices, FixedVector< DoubleTab, 3 > &ij_coords, const IJK_Field_double &field, const IJK_Field_vector3_double &field_gradient, const IJK_Field_vector3_double &velocity, DoubleTab &values, const int field_type, const int slice_to_nearest_plane, const int compute_indices=0)
FixedVector< ArrOfInt, 6 > first_indices_sparse_matrix_
void find_points_on_proc(std::vector< std::vector< ArrOfInt > > &is_point_on_proc, std::vector< std::vector< FixedVector< ArrOfInt, 3 > > > &ijk_indices, const FixedVector< ArrOfDouble, 3 > &coordinates_line, const std::vector< std::vector< FixedVector< ArrOfDouble, 2 > > > &coordinates_sides, const int &line_dir)
void post_process_thermal_downstream_lines(const Nom &local_quantities_thermal_lines_time_index_folder) override
const IJK_Field_vector3_double & get_neighbours_faces_weighting_colinearity() const override
void initialise_identity_matrices(Matrice &identity_matrix, Matrice &identity_matrix_subproblems)
void compute_convective_diffusive_fluxes_face_centre() override
IJK_Field_double neighbours_temperature_colinearity_weighting_
void min_max_ldir(const int &dir, const Domaine_IJK &geom, double &min_dir, double &max_dir)
IJK_Finite_Difference_One_Dimensional_Matrix_Assembler finite_difference_assembler_
void compare_temperature_fields(const IJK_Field_double &temperature, const IJK_Field_double &temperature_ana, IJK_Field_double &error_temperature_ana, IJK_Field_double &error_temperature_ana_rel)
const IJK_Field_int & get_cell_neighbours_corrected() const override
void set_param(Param &param) const override
IJK_Field_vector3_double cell_faces_corrected_diffusive_
IJK_Field_vector3_double cell_faces_neighbours_corrected_convective_frame_of_reference_
IJK_Field_vector3_int cell_faces_neighbours_corrected_all_bool_
void initialise_radial_diffusion_operator(Matrice &radial_second_order_operator, Matrice &radial_diffusion_matrix)
const IJK_Field_double & get_temperature_cell_neighbours_debug() const override
const IJK_Field_vector3_int & get_cell_faces_corrected_bool() const override
IJK_Field_vector3_double cell_faces_neighbours_corrected_convective_
const IJK_Field_vector3_int & get_cell_faces_neighbours_corrected_diag_bool() const override
void post_processed_fields_on_downstream_line(const Nom &local_quantities_thermal_lines_time_index_folder, const int &line_dir, const int &linear_circle_line_index, const int &index_circle, const int &index_line, const double &diameter_approx, std::vector< std::vector< ArrOfInt > > &is_point_on_proc, const std::vector< std::vector< FixedVector< ArrOfInt, 3 > > > &indices_ijk, const ArrOfDouble &linear_coord, const FixedVector< ArrOfDouble, 3 > &coordinates_line, const std::vector< std::vector< FixedVector< ArrOfDouble, 2 > > > &coordinates_sides, const DoubleVect &temperature_line, const DoubleVect &velocity_line, const DoubleVect &convective_term_line, const DoubleVect &diffusive_term_line, const DoubleVect &temperature_incr_line)
double find_time_dichotomy_derivative(const double &temperature_derivative, double &temperature_limit_left, double &temperature_limit_right)
IJK_Field_vector3_int cell_faces_corrected_bool_
void set_subproblems_interfaces_fields(const Domaine_IJK &splitting) override
void initialise_radial_diffusion_operator_sparse(Matrice &radial_second_order_operator, Matrice &radial_diffusion_matrix)
void post_process_thermal_wake_slices(const Nom &local_quantities_thermal_slices_time_index_folder) override
void interpolate_velocity_on_downstream_line(const int &dir, const int &nb_thermal_circles, const int &index_circle, const int &index_line, const std::vector< std::vector< ArrOfInt > > &is_point_on_proc, const FixedVector< ArrOfDouble, 3 > &coordinates_line, const std::vector< std::vector< FixedVector< ArrOfDouble, 2 > > > &coordinates_sides, DoubleVect &values)
FixedVector< ArrOfInt, 3 > ijk_indices_flux_out_
const IJK_Field_double & get_probe_collision_debug_field() const override
const IJK_Field_vector3_int & get_cell_faces_neighbours_corrected_all_bool() const override
IJK_Field_vector3_double interfacial_heat_flux_dispatched_
IJK_Field_vector3_int cell_faces_neighbours_corrected_diag_bool_
double get_time_inflection_derivative(double &temperature_end_min)
void initialise_radial_convection_operator_sparse(Matrice &radial_first_order_operator, Matrice &radial_convection_matrix)
const IJK_Field_double & get_neighbours_temperature_colinearity_weighting() const override
void approx_erf_inverse(const double &x, double &res)
void initialise_radial_convection_operator(Matrice &radial_first_order_operator, Matrice &radial_convection_matrix)
const IJK_Field_vector3_int & get_cell_faces_neighbours_corrected_min_max_bool() const override
void initialise_thermal_dowstreamlines_tabs(std::vector< std::vector< FixedVector< ArrOfInt, 3 > > > &parameters, const int &nb_thermal_circles, const int &nb_thermal_lines)
void complete_field_thermal_wake_slice_ij_indices_coords(const int &slice, int &index_dir_local, const int &dir, const double &slice_pos, FixedVector< IntTab, 2 > &ij_indices, FixedVector< DoubleTab, 3 > &ij_coords, DoubleTab &values, const Nom &local_quantities_thermal_slices_time_index_folder)
Nom compute_quasi_static_spherical_diffusion_expression(const double &time_scope, const int index_bubble, const int index_bubble_real)
const IJK_Field_vector3_double & get_cell_faces_neighbours_corrected_velocity_temperature() const override
int get_disable_post_processing_probes_out_files() const override
const IJK_Field_double & get_debug_lrs_cells() const override
void interpolate_diffusive_term_on_downstream_line(const int &dir, const int &nb_thermal_circles, const int &index_circle, const int &index_line, const std::vector< std::vector< ArrOfInt > > &is_point_on_proc, const FixedVector< ArrOfDouble, 3 > &coordinates_line, const std::vector< std::vector< FixedVector< ArrOfDouble, 2 > > > &coordinates_sides, DoubleVect &values)
void compute_radial_first_second_order_operators(Matrice &radial_first_order_operator_raw, Matrice &radial_second_order_operator_raw, Matrice &radial_first_order_operator, Matrice &radial_second_order_operator)
void initialise_identity_matrices_sparse(Matrice &identity_matrix, Matrice &identity_matrix_subproblems)
double compute_spherical_steady_dirichlet_left_right_integral(const double &temperature_end_prev)
void complete_field_thermal_wake_slice_ij_velocity(const int &slice, int &index_dir_local, const int &dir, const double &slice_pos, FixedVector< IntTab, 2 > &ij_indices, FixedVector< DoubleTab, 3 > &ij_coords, DoubleTab &velocity_values, const Nom &local_quantities_thermal_slices_time_index_folder)
const IJK_Field_vector3_double & get_cell_faces_neighbours_corrected_convective_frame_of_ref() const override
void post_process_thermal_wake_slice(const int &slice, const double &nb_diam_slice, const Nom &local_quantities_thermal_slices_time_index_folder)
const IJK_Field_double & get_temperature_cell_neighbours() const override
void replace_temperature_cell_centres_neighbours(const int &use_neighbours_temperature_to_correct_trimmed)
void compute_ghost_cell_numbers_for_subproblems(const Domaine_IJK &splitting, int ghost_init) override
void correct_temperature_increment_for_interface_leaving_cell() override
double compute_spherical_steady_dirichlet_left_right_derivative_value(const double &r, const double &temperature_prev)
void set_thermal_subresolution_outputs(const Nom &interfacial_quantities_thermal_probes, const Nom &shell_quantities_thermal_probes, const Nom &overall_bubbles_quantities, const Nom &local_quantities_thermal_probes_time_index_folder) override
const IJK_Field_int & get_cell_neighbours_corrected_trimmed() const override
double find_time_dichotomy_integral(const double &temperature_integral, double &temperature_end_prev)
void find_cocentric_line_coordinates(const int &nb_thermal_circles, const int &nb_thermal_lines, const double &diameter_approx, std::vector< std::vector< FixedVector< ArrOfDouble, 2 > > > &coordinates_sides)
void compute_add_subresolution_source_terms()
const IJK_Field_vector3_double & get_cell_faces_neighbours_corrected_convective() const override
void evaluate_total_liquid_absolute_parameter(const IJK_Field_double &field, double &total_parameter)
void correct_any_temperature_fields_for_eulerian_fluxes(IJK_Field_double &temperature)
IJK_Field_vector3_double cell_faces_neighbours_corrected_velocity_temperature_
void complete_field_thermal_wake_slice_ij_temperature_incr(const int &slice, int &index_dir_local, const int &dir, const double &slice_pos, FixedVector< IntTab, 2 > &ij_indices, FixedVector< DoubleTab, 3 > &ij_coords, DoubleTab &values, const Nom &local_quantities_thermal_slices_time_index_folder)
void complete_thermal_fluxes_face_centre(const int &fluxes_correction_conservations)
void correct_any_temperature_field_for_visu(IJK_Field_double &temperature)
IJK_One_Dimensional_Subproblems thermal_local_subproblems_
FixedVector< ArrOfInt, 4 > ijk_indices_flux_contrib_
void interpolate_fields_on_downstream_line(const int &dir, const int &nb_thermal_circles, const int &index_circle, const int &index_line, const std::vector< std::vector< ArrOfInt > > &is_point_on_proc, const FixedVector< ArrOfDouble, 3 > &coordinates_line, const std::vector< std::vector< FixedVector< ArrOfDouble, 2 > > > &coordinates_sides, const IJK_Field_double &field, const IJK_Field_vector3_double &field_gradient, const IJK_Field_vector3_double &velocity, DoubleVect &values, const int field_type)
void find_thermal_line_points_in_procs(std::vector< std::vector< ArrOfInt > > &parameters)
const IJK_Field_vector3_double & get_interfacial_heat_flux_current() const override
void complete_field_thermal_wake_slice_ij_temperature(const int &slice, int &index_dir_local, const int &dir, const double &slice_pos, FixedVector< IntTab, 2 > &ij_indices, FixedVector< DoubleTab, 3 > &ij_coords, DoubleTab &values, const Nom &local_quantities_thermal_slices_time_index_folder)
void interpolate_temperature_increment_on_downstream_line(const int &dir, const int &nb_thermal_circles, const int &index_circle, const int &index_line, const std::vector< std::vector< ArrOfInt > > &is_point_on_proc, const FixedVector< ArrOfDouble, 3 > &coordinates_line, const std::vector< std::vector< FixedVector< ArrOfDouble, 2 > > > &coordinates_sides, DoubleVect &values)
IJK_SolveSys_FD_thermal one_dimensional_advection_diffusion_thermal_solver_
void post_processed_field_thermal_wake_slice_ij(const int &slice, const Nom &local_quantities_thermal_slices_time_index_folder, const double &diameter_approx, const double &nb_diam_slice, const int &n_cross_section_1, const int &n_cross_section_2, const FixedVector< IntTab, 2 > ij_indices, const FixedVector< DoubleTab, 3 > &ij_coords, const DoubleTab &temperature_slice, const DoubleTab &velocity_slice, const DoubleTab &convection_slice, const DoubleTab &diffusion_slice, const DoubleTab &temperature_incr_slice)
IJK_Field_double dummy_double_field_
bool store_flux_operators_for_energy_balance_
IJK_Field_int dummy_int_field_
IJK_Field_vector3_int dummy_int_vect_
virtual double compute_rho_cp_u_mean(const IJK_Field_double &vx)
IJK_Field_vector3_double dummy_double_vect_
: Cette classe est un OWN_PTR mais l'objet pointe est partage entre plusieurs
Definition MD_Vector.h:48
Classe Matrice Classe generique de la hierarchie des matrices.
Definition Matrice.h:34
Une chaine de caractere (Nom) en majuscules.
Definition Motcle.h:26
Un tableau d'objets de la classe Motcle.
Definition Motcle.h:63
class Nom Une chaine de caractere pour nommer les objets de TRUST
Definition Nom.h:31
friend class Entree
Definition Objet_U.h:76
Helper class to factorize the readOn method of Objet_U classes.
Definition Param.h:112