TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
IJK_Thermal_base.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_base_included
17#define IJK_Thermal_base_included
18
19#include <IJK_Field.h>
20#include <IJK_Field_vector.h>
21#include <Objet_U.h>
22#include <Boundary_Conditions_Thermique.h>
23#include <Domaine_IJK.h>
24#include <Parser.h>
25#include <IJK_Lata_writer.h>
26#include <Operateur_IJK_elem_conv.h>
27#include <Operateur_IJK_elem_diff.h>
28#include <OpGradCentre2IJKScalar.h>
29#include <OpHessCentre2IJKScalar.h>
30#include <OpGradQuickIJKScalar.h>
31#include <Ouvrir_fichier.h>
32#include <Corrige_flux_FT_base.h>
33#include <TRUST_Ref.h>
34#include <IJK_Ghost_Fluid_Fields.h>
35#include <IJK_One_Dimensional_Subproblems_Interfaces_Fields.h>
36#include <Fluide_Diphasique_IJK.h>
37
38
41class IJK_Interfaces;
43
45{
46 Declare_base( IJK_Thermal_base ) ;
49public:
51 /*
52 * Initialisation
53 */
54 const Milieu_base& milieu() const;
56 void associer_milieu_base(const Milieu_base&, const int& idth);
58 inline const Fluide_Diphasique_IJK& milieu_ijk() const { return ref_cast(Fluide_Diphasique_IJK, milieu()); }
59
60 virtual void set_param(Param& param) const override;
61 virtual void initialize(const Domaine_IJK& splitting);
62 virtual void initialize_switch(const Domaine_IJK& splitting, const int idx);
63 virtual void update_thermal_properties();
64 double compute_timestep(const double timestep,
65 const double dxmin);
66 void set_fichier_reprise(const char *lataname);
68 void associer(const Probleme_FTD_IJK_base& ijk_ft);
69 void associer_post(const Postprocessing_IJK& ijk_ft_post);
70 void associer_switch(const Switch_FT_double& ijk_ft_switch);
71
72 // Interface Champs_compris_IJK_interface:
73 bool has_champ(const Motcle& nom) const override;
74 bool has_champ(const Motcle& nom, OBS_PTR(Champ_base)& ref_champ) const { /* not used */ throw; }
75 bool has_champ_vectoriel(const Motcle& nom) const override { return false; }
76 const IJK_Field_double& get_IJK_field(const Motcle& nom) override;
77 const IJK_Field_vector3_double& get_IJK_field_vector(const Motcle& nom) override;
78 static void Fill_postprocessable_fields(std::vector<FieldInfo_t>& chps);
79 void get_noms_champs_postraitables(Noms& noms,Option opt=NONE) const;
80 Nom get_field_name_with_rank(Nom basename) const;
82 const Intersection_Interface_ijk_face& intersection_ijk_face);
83 void associer_ghost_fluid_fields(const IJK_Ghost_Fluid_Fields& ghost_fluid_fields);
84 void retrieve_ghost_fluid_params(int& compute_distance, int& compute_curvature, int& n_iter_distance, int& avoid_gfm_parallel_calls);
85 void get_boundary_fluxes(IJK_Field_local_double& boundary_flux_kmin, IJK_Field_local_double& boundary_flux_kmax);
86 virtual void euler_time_step(const double timestep);
87 virtual void rk3_sub_step(const int rk_step,
88 const double total_timestep,
89 const double time);
90 virtual void sauvegarder_temperature(Nom& lata_name, int idx, const int& stop=0);
91
92 virtual void euler_rustine_step(const double timestep) { };
93 virtual void rk3_rustine_sub_step(const int rk_step, const double total_timestep,
94 const double fractionnal_timestep, const double time) { };
95 double compute_global_energy(const IJK_Field_double& temperature);
96 virtual double compute_global_energy()
97 {
98 return compute_global_energy(*temperature_); // changes the attribute global_energy [J/m3]
99 }
100 int calculer_k_pour_bord(const IJK_Field_double& temperature, const bool bord_kmax);
101 int calculer_flux_thermique_bord(const IJK_Field_double& temperature,
102 const double lambda_de_t_paroi,
103 const double T_paroi_impose,
104 IJK_Field_local_double& flux_bord,
105 const bool bord_kmax);
106 int imposer_flux_thermique_bord(const IJK_Field_double& temperature,
107 const double flux_paroi_impose,
108 IJK_Field_local_double& flux_bord,
109 const bool bord_kmax);
110 virtual int get_first_step_thermals_post() { return 0; };
111 void set_latastep_reprise(const int latastep)
112 {
113 latastep_reprise_ = latastep;
114 }
115 const int& get_latastep_reprise() const
116 {
117 return latastep_reprise_;
118 }
119 const int& get_latastep_reprise_ini() const
120 {
121 return latastep_reprise_;
122 }
123 /*
124 * Getters and setters
125 */
126 double get_rhocp_l() const;
127 double get_rhocp_v() const;
128 const int& get_rank() const { return rank_; };
129 const std::shared_ptr<IJK_Field_double>& get_temperature() const
130 {
131 return temperature_ ;
132 }
133 const IJK_Field_double& get_temperature_before_extrapolation() const
134 {
136 }
137 IJK_Field_double& get_temperature_ft()
138 {
139 return temperature_ft_ ;
140 }
141 const IJK_Field_vector3_double& get_grad_T() const
142 {
143 return grad_T_ ;
144 }
145 IJK_Field_double& set_temperature()
146 {
147 return *temperature_ ;
148 }
149 const IJK_Field_double& get_temperature_ana() const
150 {
151 return temperature_ana_ ;
152 }
153 const IJK_Field_double& get_ecart_t_ana() const
154 {
155 return ecart_t_ana_ ;
156 }
157 const IJK_Field_double& get_ecart_t_ana_rel() const
158 {
159 return ecart_t_ana_rel_;
160 }
161 const IJK_Field_double& get_div_lambda_grad_T() const
162 {
163 return div_coeff_grad_T_ ;
164 }
165 const std::shared_ptr<IJK_Field_double>& get_div_lambda_grad_T_volume() const
166 {
168 }
169 const IJK_Field_double& get_u_T_convective() const
170 {
171 return u_T_convective_;
172 }
173 const IJK_Field_double& get_u_T_convective_volume() const
174 {
176 }
177 const IJK_Field_double& get_eulerian_distance_ft() const
178 {
179 return ghost_fluid_fields_->get_eulerian_distance_ft();
180 // return eulerian_distance_ft_;
181 }
182 const IJK_Field_double& get_eulerian_curvature_ft() const
183 {
184 return ghost_fluid_fields_->get_eulerian_curvature_ft();
185 // return eulerian_curvature_ft_ ;
186 }
187 const IJK_Field_double& get_interfacial_area_ft() const
188 {
189 return ghost_fluid_fields_->get_eulerian_interfacial_area_ft();
190 // return eulerian_interfacial_area_ft_;
191 }
192 const IJK_Field_double& get_grad_T_interface_ft() const
193 {
195 }
196 const IJK_Field_double& get_eulerian_compo_connex_ft() const;
197 const IJK_Field_double& get_eulerian_compo_connex_ghost_ft() const;
198 const IJK_Field_double& get_eulerian_compo_connex_from_interface_ft() const;
199 const IJK_Field_double& get_eulerian_compo_connex_from_interface_ghost_ft() const;
200
201 const IJK_Field_double& get_eulerian_compo_connex_ns() const;
202 const IJK_Field_double& get_eulerian_compo_connex_ghost_ns() const;
203 const IJK_Field_double& get_eulerian_compo_connex_from_interface_ns() const;
204 const IJK_Field_double& get_eulerian_compo_connex_from_interface_ghost_ns() const;
205 const IJK_Field_int& get_eulerian_compo_connex_int_from_interface_ns() const;
207
208 const IJK_Field_double& get_eulerian_distance_ns() const
209 {
210 return ghost_fluid_fields_->get_eulerian_distance_ns();
211 // return eulerian_distance_ns_;
212 }
213 const IJK_Field_double& get_eulerian_curvature_ns() const
214 {
215 return ghost_fluid_fields_->get_eulerian_curvature_ns();
216 // return eulerian_curvature_ns_ ;
217 }
218 const IJK_Field_double& get_interfacial_area_ns() const
219 {
220 return ghost_fluid_fields_->get_eulerian_interfacial_area_ns();
221 // return eulerian_interfacial_area_ns_;
222 }
223 const IJK_Field_double& get_grad_T_interface_ns() const
224 {
226 }
227 const IJK_Field_double& get_eulerian_rising_velocities() const
228 {
230 }
231 const IJK_Field_double& get_temperature_adim_bulles() const
232 {
234 }
235 const IJK_Field_double& get_temperature_adim_theta() const
236 {
238 }
239 const IJK_Field_vector3_double& get_gradient_temperature() const
240 {
241 return grad_T_ ;
242 }
243 const IJK_Field_vector3_double& get_gradient_temperature_elem() const
244 {
245 return grad_T_elem_ ;
246 }
247 const IJK_Field_vector3_double& get_gradient_temperature_elem_smooth() const
248 {
250 return grad_T_elem_smooth_;
251 else
252 return dummy_double_vect_;
253 }
254 const IJK_Field_vector3_double& get_tangential_gradient_temperature_elem_smooth() const
255 {
258 else
259 return dummy_double_vect_;
260 }
261 const IJK_Field_double& get_temperature_elem_smooth() const
262 {
265 else
266 return dummy_double_field_;
267 }
268 const IJK_Field_vector3_double& get_normal_vector_ns() const
269 {
270 return ghost_fluid_fields_->get_eulerian_normal_vectors_ns();
271 // return eulerian_normal_vectors_ns_;
272 }
273 const IJK_Field_vector3_double& get_normal_vector_ns_normed() const
274 {
275 return ghost_fluid_fields_->get_eulerian_normal_vectors_ns_normed();
276 // return eulerian_normal_vectors_ns_normed_;
277 }
278 const IJK_Field_vector3_double& get_normal_vector_ft() const
279 {
280 return ghost_fluid_fields_->get_eulerian_normal_vectors_ft();
281 // return eulerian_normal_vectors_ft_;
282 }
283 const IJK_Field_vector3_double& get_hessian_diag_temperature_elem() const
284 {
285 return hess_diag_T_elem_ ;
286 }
287 const IJK_Field_vector3_double& get_hessian_cross_temperature_elem() const
288 {
289 return hess_cross_T_elem_ ;
290 }
291 const IJK_Field_vector3_double& get_bary() const
292 {
293 return ghost_fluid_fields_->get_eulerian_facets_barycentre_ft();
294 // return eulerian_facets_barycentre_ft_;
295 }
297 {
298 return ghost_fluid_;
299 };
300 const int& get_ghost_cells() const
301 {
302 return ghost_cells_;
303 };
304 bool get_debug() const
305 {
306 return debug_;
307 };
308 virtual const IJK_Field_double& get_temperature_cell_neighbours_debug() const
309 {
310 return dummy_double_field_; //dummy
311 }
312 virtual const IJK_Field_double& get_temperature_cell_neighbours() const
313 {
314 return dummy_double_field_; //dummy
315 }
316 virtual const IJK_Field_int& get_cell_neighbours_corrected() const
317 {
318 return dummy_int_field_; //dummy
319 }
320 virtual const IJK_Field_double& get_neighbours_temperature_colinearity_weighting() const
321 {
322 return dummy_double_field_; //dummy
323 }
324 virtual const IJK_Field_double& get_debug_lrs_cells() const
325 {
326 return dummy_double_field_; //dummy
327 };
329 {
330 return 1;
331 };
332 virtual const IJK_Field_vector3_double& get_cell_faces_corrected_diffusive() const
333 {
334 return dummy_double_vect_; //dummy
335 }
336 virtual const IJK_Field_vector3_double& get_cell_faces_corrected_convective() const
337 {
338 return dummy_double_vect_; //dummy
339 }
340 virtual const IJK_Field_vector3_int& get_cell_faces_corrected_bool() const
341 {
342 return dummy_int_vect_;
343 }
344 virtual const IJK_Field_vector3_int& get_cell_faces_neighbours_corrected_diag_bool() const
345 {
346 return dummy_int_vect_;
347 }
348 virtual const IJK_Field_vector3_int& get_cell_faces_neighbours_corrected_all_bool() const
349 {
350 return dummy_int_vect_;
351 }
352 virtual const IJK_Field_vector3_int& get_cell_faces_neighbours_corrected_min_max_bool() const
353 {
354 return dummy_int_vect_;
355 }
356 virtual const IJK_Field_vector3_double& get_cell_faces_neighbours_corrected_velocity_temperature() const
357 {
358 return dummy_double_vect_;
359 }
360 virtual const IJK_Field_vector3_double& get_cell_faces_neighbours_corrected_convective() const
361 {
362 return dummy_double_vect_;
363 }
364 virtual const IJK_Field_vector3_double& get_cell_faces_neighbours_corrected_convective_frame_of_ref() const
365 {
366 return dummy_double_vect_;
367 }
368 virtual const IJK_Field_vector3_double& get_cell_faces_neighbours_corrected_diffusive() const
369 {
370 return dummy_double_vect_;
371 }
372 virtual const IJK_Field_vector3_double& get_neighbours_faces_weighting_colinearity() const
373 {
374 return dummy_double_vect_;
375 }
376 virtual const IJK_Field_int& get_cell_neighbours_corrected_trimmed() const
377 {
378 return dummy_int_field_;
379 }
380 virtual const IJK_Field_double& get_probe_collision_debug_field() const
381 {
382 return dummy_double_field_; //dummy
383 }
384 const IJK_Field_vector3_double& get_rho_cp_u_T_convective_fluxes() const
385 {
388 else
389 return dummy_double_vect_;
390 }
391 const IJK_Field_vector3_double& get_div_coeff_grad_T_diffusive_fluxes() const
392 {
395 else
396 return dummy_double_vect_;
397 }
398 virtual const IJK_Field_vector3_double& get_interfacial_heat_flux_dispatched() const
399 {
400 return dummy_double_vect_;
401 }
402 virtual const IJK_Field_vector3_double& get_interfacial_heat_flux_contrib() const
403 {
404 return dummy_double_vect_;
405 }
406 virtual const IJK_Field_vector3_double& get_interfacial_heat_flux_current() const
407 {
408 return dummy_double_vect_;
409 }
410
411 virtual double get_modified_time();
413 int& fill_rising_velocities,
414 int& use_bubbles_velocities_from_interface,
415 int& use_bubbles_velocities_from_barycentres);
416
417 virtual double get_rho_cp_u_ijk(const IJK_Field_double& vx, int i, int j, int k) const;
418 virtual double get_div_lambda_ijk(int i, int j, int k) const { return 0; };
419 virtual double compute_temperature_dimensionless_theta_mean(const IJK_Field_double& vx);
420
421 const char * get_fichier_sauvegarde() const
422 {
424 }
425 void set_fichier_sauvegarde(const char *lataname)
426 {
428 }
429 virtual void set_field_T_ana();
430
432 const double& get_E0() const { return E0_; };
433
434 virtual void calculer_ecart_T_ana();
436 ArrOfDouble& interfacial_temperature,
437 ArrOfDouble& flux_normal_interp);
438
439 virtual void compute_ghost_cell_numbers_for_subproblems(const Domaine_IJK& splitting, int ghost_init) { ghost_cells_ = ghost_init; };
440
444
445 virtual void update_intersections() { }
446 virtual void clean_ijk_intersections() { }
447 virtual void post_process_thermal_wake_slices(const Nom& local_quantities_thermal_slices_time_index_folder) { }
448 virtual void post_process_thermal_downstream_lines(const Nom& local_quantities_thermal_lines_time_index_folder) { }
449 virtual void set_thermal_subresolution_outputs(const Nom& interfacial_quantities_thermal_probes,
450 const Nom& shell_quantities_thermal_probes,
451 const Nom& overall_bubbles_quantities,
452 const Nom& local_quantities_thermal_probes_time_index_folder) { }
453 virtual void compute_temperature_init();
454 virtual void recompute_temperature_init();
455 virtual void set_subproblems_interfaces_fields(const Domaine_IJK& splitting) { }
457 int post_process_quantities_from_subresolution(const Motcles& liste_post_instantanes,
458 const char *lata_name,
459 const int latastep);
460
465 virtual void remplir_tableau_pure_cellules_diphasiques(bool next_time);
466
468
469 void post_process_std_thermal_field(const Motcles& liste_post_instantanes, const char *lata_name, const int latastep, const double current_time, const int idx, const Motcles& tested_names, const Nom& name_field, const Motcle& lata_suffix, const IJK_Field_double& field, std::ostringstream& oss, int& counter, const int& first_thermal_rank = 0);
470 int posttraiter_champs_instantanes_thermal(const Motcles& liste_post_instantanes, const char *lata_name, const int latastep, const double current_time, const int idx);
471
473 inline int& get_thermal_rank() { return thermal_rank_; }
474 inline const Motcles& get_thermal_words() const { return thermal_words_; }
475 inline const Motcles& get_thermal_suffix() const { return lata_suffix_; }
476
477 void posttraiter_tous_champs_thermal(Motcles& liste, const int idx) const;
478 void ecrire_statistiques_bulles(int reset, const Nom& nom_cas, const double current_time, const ArrOfDouble& surface, const int idx);
479
480 int posttraiter_champs_instantanes_thermal_interface(const Motcles& liste_post_instantanes, const char *lata_name, const int latastep, const double current_time, const int idx);
481 int posttraiter_champs_instantanes_thermal_interface_ref(const Motcles& liste_post_instantanes, const char *lata_name, const int latastep, const double current_time, const int idx);
482 void 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, const Nom& local_quantities_thermal_slices_time_index_folder, const Nom& local_quantities_thermal_lines_time_index_folder);
483
485 inline const Noms noms_compris() const { return champs_compris().liste_noms_compris(); }
486 //inline const bool is_post_required(const Nom& nom) const { return ref_ijk_ft_->get_post().is_post_required(nom); }
487 inline const Champs_compris_IJK& champs_compris() const { return champs_compris_; }
488protected:
490 OBS_PTR(Milieu_base) le_fluide_;
492 Nom thermal_problem_type_ = "subresolution";
496
497 void compute_cell_volume();
499 void compute_cell_diagonal(const Domaine_IJK& splitting);
500
501 virtual void lire_temperature(const Domaine_IJK& splitting);
502
503 void calculer_dT(const IJK_Field_vector3_double& velocity);
505
506 void compute_temperature_convective_fluxes(const IJK_Field_vector3_double& velocity);
507 void compute_temperature_convection(const IJK_Field_vector3_double& velocity);
508 virtual void compute_temperature_convection_conservative(const IJK_Field_vector3_double& velocity) { throw; } ;
511 virtual void add_temperature_diffusion();
513
520
521 void compute_eulerian_grad_T_interface(const int on_splitting_ns=0);
523
524 void compute_eulerian_temperature_ghost(const int on_splitting_ns=0);
525
528 // void enforce_zero_value_eulerian_field(IJK_Field_double& eulerian_field);
529 // void enforce_max_value_eulerian_field(IJK_Field_double& eulerian_field);
530 // void enforce_min_value_eulerian_field(IJK_Field_double& eulerian_field);
535 virtual void correct_operators_for_visu() { }
536 virtual void clip_temperature_values() { }
543 virtual void prepare_ij_fluxes_k_layers() { }
544 virtual void compute_temperature_cell_centres(const int first_corr) { }
546 virtual void clean_thermal_subproblems() { }
547
548 void calculer_gradient_temperature(const IJK_Field_double& temperature,
549 IJK_Field_vector3_double& grad_T);
550 void calculer_energies(double& E_liq_pure,
551 double& E_liq,
552 double& E_vap_pure,
553 double& E_vap,
554 double& E_mixt,
555 double& E_tot);
556
557 void source_callback();
558 void calculer_temperature_physique_T(const IJK_Field_double& vx, const double dTm);
561 void calculer_Nusselt(const IJK_Field_double& vx);
562 void calculer_temperature_adimensionnelle_theta(const IJK_Field_double& vx, const double qw);
564 virtual double compute_rho_cp_u_mean(const IJK_Field_double& vx);
565 double compute_variable_wall_temperature(const int kmin, const int kmax);
566
567 void force_upstream_temperature(IJK_Field_double& temperature, double T_imposed,
568 const IJK_Interfaces& interfaces, double nb_diam, int upstream_dir,
569 int gravity_dir, int upstream_stencil);
570
572
573 bool debug_ = false;
576 /*
577 * Patch to conserve energy
578 */
579 double E0_ = 0.; //volumique
580
582 OBS_PTR(Postprocessing_IJK) ref_ijk_ft_post_;
583 OBS_PTR(Switch_FT_double) ref_ijk_ft_switch_;
584 OBS_PTR(Intersection_Interface_ijk_cell) ref_intersection_ijk_cell_;
585 OBS_PTR(Intersection_Interface_ijk_face) ref_intersection_ijk_face_;
587 int rank_ = 0; // default value, used as an index for the list of thermal sub-problems
588
589 /*
590 * Physical parameters and inputs
591 */
592 double dt_fo_ = 1.e20;
593 double fo_ = 1.; // Fourier number
594 double cp_liquid_ = -123., cp_vapour_ = -123., lambda_liquid_ = -123., lambda_vapour_ = -123.;
595 double uniform_lambda_ = 0.;
596 double uniform_alpha_ = 0.;
597 double prandtl_number_ = 0.;
598 /*
599 * Initialisation (B.Cs, expression)
600 */
602 IJK_Field_local_double boundary_flux_kmin_;
603 IJK_Field_local_double boundary_flux_kmax_;
605 double upstream_temperature_ = -1.1e20;
609
610 /*
611 * Settings to resume a calculation
612 */
616
617 /*
618 * Source of temperature, wall heating,
619 * integral per boundary (Tryggvason)
620 */
621 /*
622 * Ceci est une initialisation des derivees des temperatures moyenne de chaque phase
623 * Il n'est peut-etre pas pertinent de les mettre ici
624 */
627 bool lambda_variable_ = false; // terme source variable
628 bool wall_flux_ = false;
629 IJK_Field_double source_temperature_;
630 IJK_Field_double source_temperature_v_;
631 IJK_Field_double source_temperature_l_;
632 IJK_Field_double d_source_Tl_;
633 IJK_Field_double d_source_Tv_;
634 double dTl_ = 0.;
635 double dTv_ = 1.;
636 double Tl_ = 0.;
637 double Tv_ = 1.;
638 double Tv0_ = 1.; // Serait-ce plutot Tref (une temperature de reference pour reconstruire le champ dim??)
639 double kl_ = -100000000000000.;
640 double kv_ = -200000000000000.;
641 double T0v_ = 1.;
642 double T0l_ = 0.;
643 IJK_Field_double source_temperature_ana_;
644 IJK_Field_double ecart_source_t_ana_;
645
646 /*
647 * Dimensionless temperature
648 */
649 IJK_Field_double temperature_physique_T_;
651 IJK_Field_double temperature_adim_bulles_;
652
653 /*
654 * Storage for operators & time scheme
655 */
658 int type_temperature_convection_form_ = 1; // Default value: 1 : non conservative
659
660 /*
661 * type_temperature_convection_op_:
662 * 1 : Quick
663 * 2 : Centre2
664 */
666 Operateur_IJK_elem_conv rho_cp_convection_op_; // TODO : mathis check : type was OpConvDiscQuickIJKScalar_double rho_cp_convection_op_quick_
668 IJK_Field_vector3_double div_coeff_grad_T_raw_;
669 std::shared_ptr<IJK_Field_double> div_coeff_grad_T_volume_;
670 IJK_Field_double div_coeff_grad_T_;
671 IJK_Field_vector3_double rho_cp_u_T_convective_raw_;
672 IJK_Field_double u_T_convective_volume_;
673 IJK_Field_double u_T_convective_;
678
679
680 /*
681 * Fields
682 */
683 double vol_ = 0.;
684 double min_delta_xyz_ = 0.;
685 double cell_diagonal_ = 0.;
687 IJK_Field_double rho_cp_;
688 IJK_Field_double rho_cp_T_;
689 IJK_Field_double div_rho_cp_T_;
690 std::shared_ptr<IJK_Field_double> temperature_;
693 std::shared_ptr<IJK_Field_double> d_temperature_; // Temperature increment.
694 std::shared_ptr<IJK_Field_double> RK3_F_temperature_; // Temporary storage for substeps in the RK3 algorithm.
695 IJK_Field_vector3_double storage_; // Temporary storage for fluxes calculation.
698
699 /*
700 * Fields FT
701 * TODO: Clean FT_fields and redistribute curvature, interfacial_area if necessary
702 */
703 IJK_Field_double temperature_ft_;
704
705 /*
706 * Post-processing
707 */
709 Motcles liste_post_instantanes_; // liste des champs instantanes a postraiter
711 IJK_Field_vector3_double grad_T_;
714
715 /*
716 * For Ghost fluid method & Subresolution or Post-processing
717 */
718 bool ghost_fluid_ = false;
726
730 /*
731 * TODO: Move fields and avoid redundancies in IJK_Interfaces
732 * Clean FT_fields
733 */
734 const DoubleTab * bounding_box_ = nullptr;
735 const DoubleTab * min_max_larger_box_ = nullptr;
737 const IJK_Field_double * eulerian_distance_ft_ = nullptr;
738 const IJK_Field_double * eulerian_distance_ns_ = nullptr;
739 const IJK_Field_vector3_double * eulerian_normal_vectors_ft_ = nullptr;
740 const IJK_Field_vector3_double * eulerian_facets_barycentre_ft_ = nullptr;
741 const IJK_Field_vector3_double * eulerian_normal_vectors_ns_ = nullptr;
742 const IJK_Field_vector3_double * eulerian_normal_vectors_ns_normed_ = nullptr;
743 const IJK_Field_vector3_double * eulerian_facets_barycentre_ns_ = nullptr;
744 const IJK_Field_double * eulerian_curvature_ft_ = nullptr;
745 const IJK_Field_double * eulerian_curvature_ns_ = nullptr;
746 const IJK_Field_double * eulerian_interfacial_area_ft_ = nullptr;
747 const IJK_Field_double * eulerian_interfacial_area_ns_ = nullptr;
751 IJK_Field_vector3_double grad_T_elem_;
753 IJK_Field_vector3_double grad_T_elem_smooth_;
754 /*
755 * hess(T) = grad(grad(T))
756 * Only 6 coefficients in
757 * cartesian coordinate system
758 * | * * * |
759 * | - * * |
760 * | - - * |
761 * FixedVector<IJK_Field_double, 6> grad_grad_T_elem_;
762 */
763 IJK_Field_vector3_double hess_diag_T_elem_;
764 IJK_Field_vector3_double hess_cross_T_elem_;
765 IJK_Field_vector3_double facets_barycentre;
773
775 void compute_mixed_cells_number(const IJK_Field_double& indicator);
777
778// IJK_Field_double eulerian_compo_connex_ft_;
779// IJK_Field_double eulerian_compo_connex_ns_;
780// IJK_Field_double eulerian_compo_connex_ghost_ft_;
781// IJK_Field_double eulerian_compo_connex_ghost_ns_;
783 bool spherical_exact_ = false;
784 const IJK_Field_double * eulerian_compo_connex_ft_ = nullptr;
785 const IJK_Field_double * eulerian_compo_connex_ns_ = nullptr;
786 const IJK_Field_double * eulerian_compo_connex_ghost_ft_ = nullptr;
787 const IJK_Field_double * eulerian_compo_connex_ghost_ns_ = nullptr;
788 const IJK_Field_double * eulerian_compo_connex_from_interface_ft_ = nullptr;
789 const IJK_Field_double * eulerian_compo_connex_from_interface_ns_ = nullptr;
790 const IJK_Field_double * eulerian_compo_connex_from_interface_ghost_ft_ = nullptr;
791 const IJK_Field_double * eulerian_compo_connex_from_interface_ghost_ns_ = nullptr;
792 const IJK_Field_int * eulerian_compo_connex_from_interface_int_ns_ = nullptr;
794
799
800 const Vecteur3 * liquid_velocity_ = nullptr;
802 const ArrOfDouble * rising_velocities_ = nullptr;
803 const ArrOfDouble * rising_velocities_from_barycentres_ = nullptr;
804 const DoubleTab * rising_vectors_ = nullptr;
805 const DoubleTab * rising_vectors_from_barycentres_ = nullptr;
806 const IJK_Field_double * eulerian_rising_velocities_ = nullptr;
807 const ArrOfDouble * bubbles_volume_ = nullptr;
808 const DoubleTab * bubbles_barycentre_ = nullptr;
809 const DoubleTab * bubbles_barycentres_old_ = nullptr;
810 const DoubleTab * bubbles_barycentres_new_ = nullptr;
811
812 IJK_Field_vector3_int dummy_int_vect_;
813 IJK_Field_vector3_double dummy_double_vect_;
814 IJK_Field_int dummy_int_field_;
815 IJK_Field_double dummy_double_field_;
816
819
822 IJK_Field_double tmp_smoothing_field_;
823 IJK_Field_vector3_double grad_T_elem_tangential_;
824 // IJK_Field_vector3_double grad_T_elem_gaussian_filtered_;
828 double direct_smoothing_factors_[7] = {1.,1.,1.,1.,1.,1.,2.};
829 double gaussian_smoothing_factors_[3][3][3] = {{{1,2,1},
830 {2,4,2},
831 {1,2,1}
832 },
833 { {1,4,1},
834 {4,8,4},
835 {2,4,2}
836 },
837 { {1,2,1},
838 {2,4,2},
839 {1,2,1}
840 }
841 };
842 double sharpen_smoothing_factors_[3][3][3] = {{{0,0,0},
843 {0,-1,0},
844 {0,0,0}
845 },
846 { {0,-1,0},
847 {-1,8,-1},
848 {0,-1,0}
849 },
850 { {0,0,0},
851 {0,-1,0},
852 {0,0,0}
853 }
854 };
855};
856
857#endif /* IJK_Thermal_base_included */
: class Boundary_Conditions_Thermique
classe Champ_base Cette classe est la base de la hierarchie des champs.
Definition Champ_base.h:43
Similar to Champs_compris_interface but for IJK scalar and vector fields.
std::tuple< Motcle, Entity, Nature_du_champ, bool > FieldInfo_t
Same as Champs_compris, but specialised for IJK fields and also supports quering for vectorial fields...
const Noms liste_noms_compris() const
: class Corrige_flux_FT API pour modifier un champ de flux à partir de donnees à l'interface....
This class encapsulates all the information related to the eulerian mesh for TrioIJK.
Definition Domaine_IJK.h:47
Class defining operators and methods for all reading operation in an input flow (file,...
Definition Entree.h:42
: class IJK_Interfaces
Operateur_IJK_elem_conv rho_cp_convection_op_
virtual 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)
virtual void compute_ghost_cell_numbers_for_subproblems(const Domaine_IJK &splitting, int ghost_init)
const IJK_Field_vector3_double & get_gradient_temperature_elem() const
const IJK_Field_vector3_double & get_tangential_gradient_temperature_elem_smooth() const
const IJK_Field_vector3_double & get_hessian_diag_temperature_elem() const
bool has_champ(const Motcle &nom, OBS_PTR(Champ_base)&ref_champ) const
virtual void echange_pure_vers_diph_cellules_initialement_pures()
virtual const IJK_Field_vector3_double & get_cell_faces_neighbours_corrected_convective_frame_of_ref() const
void set_fichier_reprise(const char *lataname)
virtual double compute_global_energy()
virtual const IJK_Field_vector3_double & get_cell_faces_neighbours_corrected_diffusive() const
IJK_Field_vector3_double div_coeff_grad_T_raw_
virtual void calculer_ecart_T_ana()
const int & get_latastep_reprise() const
int posttraiter_champs_instantanes_thermal(const Motcles &liste_post_instantanes, const char *lata_name, const int latastep, const double current_time, const int idx)
IJK_Field_double dummy_double_field_
const IJK_Field_double * eulerian_rising_velocities_
const IJK_Field_vector3_double & get_normal_vector_ft() const
const IJK_Field_double & get_grad_T_interface_ns() const
OpHessFluxCentre2IJKScalar_double temperature_hess_flux_op_centre_
static void typer_lire_thermal_equation(OWN_PTR(IJK_Thermal_base)&, Entree &)
virtual const IJK_Field_double & get_neighbours_temperature_colinearity_weighting() const
void compute_eulerian_curvature()
const IJK_Field_double * eulerian_interfacial_area_ns_
const DoubleTab * bubbles_barycentres_old_
int posttraiter_champs_instantanes_thermal_interface_ref(const Motcles &liste_post_instantanes, const char *lata_name, const int latastep, const double current_time, const int idx)
IJK_Field_double rho_cp_
const Noms noms_compris() const
const IJK_Field_int * eulerian_compo_connex_from_interface_ghost_int_ns_
bool store_flux_operators_for_energy_balance_
const IJK_Field_double * eulerian_curvature_ns_
virtual void correct_temperature_for_eulerian_fluxes()=0
const IJK_Field_double & get_eulerian_compo_connex_ft() const
const IJK_Field_double * eulerian_compo_connex_from_interface_ns_
const Motcles & get_thermal_suffix() const
void compute_mixed_cells_number(const IJK_Field_double &indicator)
const IJK_Field_int * eulerian_compo_connex_from_interface_int_ns_
std::shared_ptr< IJK_Field_double > div_coeff_grad_T_volume_
void calculer_Nusselt(const IJK_Field_double &vx)
IJK_Field_vector3_double grad_T_elem_smooth_
IJK_Field_double d_source_Tv_
void compute_eulerian_bounding_box_fill_compo()
virtual const IJK_Field_vector3_double & get_interfacial_heat_flux_dispatched() const
virtual double get_rho_cp_u_ijk(const IJK_Field_double &vx, int i, int j, int k) const
virtual void initialize_switch(const Domaine_IJK &splitting, const int idx)
const DoubleTab * bounding_box_
virtual const IJK_Field_vector3_double & get_cell_faces_corrected_diffusive() const
const IJK_Field_vector3_double & get_gradient_temperature_elem_smooth() const
virtual const IJK_Field_double & get_debug_lrs_cells() const
const Vecteur3 * liquid_velocity_
virtual void rk3_sub_step(const int rk_step, const double total_timestep, const double time)
const IJK_Field_double & get_eulerian_compo_connex_ghost_ns() const
const IJK_Field_double & get_temperature_adim_theta() const
bool use_bubbles_velocities_from_barycentres_
const DoubleTab * min_max_larger_box_
virtual void compute_convective_fluxes_face_centre()
const DoubleTab * bubbles_barycentres_new_
virtual void compute_diffusion_increment()=0
bool use_bubbles_velocities_from_interface_
Champs_compris_IJK champs_compris_
virtual const IJK_Field_vector3_double & get_cell_faces_neighbours_corrected_velocity_temperature() const
Operateur_IJK_elem_conv temperature_convection_op_
const IJK_Field_double & get_eulerian_compo_connex_ns() const
const IJK_Field_double & get_ecart_t_ana() const
virtual bool get_conserv_energy_global()
const IJK_Field_double * eulerian_compo_connex_from_interface_ghost_ns_
IJK_Field_double temperature_ft_
virtual const IJK_Field_int & get_cell_neighbours_corrected() const
const IJK_Field_double & get_eulerian_compo_connex_ghost_ft() const
virtual void compute_diffusive_fluxes_face_centre()
void compute_temperature_diffusive_fluxes()
IJK_Field_vector3_double hess_diag_T_elem_
IJK_Field_double u_T_convective_volume_
void propagate_eulerian_grad_T_interface()
const IJK_Field_double & get_IJK_field(const Motcle &nom) override
IJK_Field_int dummy_int_field_
void associer_interface_intersections(const Intersection_Interface_ijk_cell &intersection_ijk_cell, const Intersection_Interface_ijk_face &intersection_ijk_face)
virtual const IJK_Field_vector3_double & get_cell_faces_corrected_convective() const
void associer_post(const Postprocessing_IJK &ijk_ft_post)
Operateur_IJK_elem_conv temperature_convection_op_uncorrected_
IJK_Field_vector3_double grad_T_
virtual void compute_convective_diffusive_fluxes_face_centre()
void calculer_temperature_physique_T(const IJK_Field_double &vx, const double dTm)
const IJK_Field_double * eulerian_distance_ns_
virtual void correct_temperature_for_visu()
virtual const IJK_Field_double & get_temperature_cell_neighbours_debug() const
virtual void compute_temperature_init()
void set_fichier_sauvegarde(const char *lataname)
Operateur_IJK_elem_diff temperature_diffusion_op_
void compute_temperature_hessian_diag_elem()
virtual const IJK_Field_vector3_int & get_cell_faces_neighbours_corrected_min_max_bool() const
Nom get_field_name_with_rank(Nom basename) const
const IJK_Field_double & get_grad_T_interface_ft() const
OBS_PTR(Intersection_Interface_ijk_face) ref_intersection_ijk_face_
virtual void update_thermal_properties()
void retrieve_ghost_fluid_params(int &compute_distance, int &compute_curvature, int &n_iter_distance, int &avoid_gfm_parallel_calls)
virtual void post_process_thermal_downstream_lines(const Nom &local_quantities_thermal_lines_time_index_folder)
const IJK_Field_vector3_double & get_gradient_temperature() const
const IJK_Field_double * eulerian_compo_connex_from_interface_ft_
virtual void clip_temperature_values()
double compute_variable_wall_temperature(const int kmin, const int kmax)
int posttraiter_champs_instantanes_thermal_interface(const Motcles &liste_post_instantanes, const char *lata_name, const int latastep, const double current_time, const int idx)
const IJK_Field_double * eulerian_compo_connex_ft_
OBS_PTR(Postprocessing_IJK) ref_ijk_ft_post_
OWN_PTR(Corrige_flux_FT_base) corrige_flux_
IJK_Field_double u_T_convective_
const IJK_Field_double & get_interfacial_area_ns() const
virtual void store_temperature_before_extrapolation()
virtual void compute_temperature_cell_centres(const int first_corr)
const IJK_Field_double & get_eulerian_curvature_ns() const
virtual void echange_diph_vers_pure_cellules_finalement_pures()
IJK_Field_double rho_cp_T_
OBS_PTR(Intersection_Interface_ijk_cell) ref_intersection_ijk_cell_
IJK_Field_double div_rho_cp_T_
virtual double get_div_lambda_ijk(int i, int j, int k) const
void ecrire_statistiques_bulles(int reset, const Nom &nom_cas, const double current_time, const ArrOfDouble &surface, const int idx)
const DoubleTab * rising_vectors_from_barycentres_
void get_noms_champs_postraitables(Noms &noms, Option opt=NONE) const
virtual void vide_phase_invalide_cellules_diphasiques()
const IJK_Field_vector3_double * eulerian_facets_barycentre_ft_
IJK_Field_vector3_double grad_T_elem_tangential_
const IJK_Field_double & get_u_T_convective() const
const IJK_Field_double * eulerian_compo_connex_ghost_ns_
double gaussian_smoothing_factors_[3][3][3]
const IJK_Field_double * eulerian_compo_connex_ghost_ft_
Motcles liste_post_instantanes_
virtual void post_process_thermal_wake_slices(const Nom &local_quantities_thermal_slices_time_index_folder)
virtual const IJK_Field_vector3_double & get_neighbours_faces_weighting_colinearity() const
virtual const IJK_Field_vector3_double & get_cell_faces_neighbours_corrected_convective() const
const double & get_E0() const
const IJK_Field_double & get_eulerian_compo_connex_from_interface_ghost_ft() const
IJK_Field_double d_source_Tl_
IJK_Field_double source_temperature_v_
double sharpen_smoothing_factors_[3][3][3]
virtual void compute_thermal_subproblems()
IJK_Field_double temperature_ana_
const int & get_ghost_cells() const
OpGradFluxQuickIJKScalar_double temperature_grad_flux_op_quick_
std::shared_ptr< IJK_Field_double > RK3_F_temperature_
IJK_Field_double & get_temperature_ft()
virtual const IJK_Field_vector3_double & get_interfacial_heat_flux_current() const
const IJK_Field_vector3_double * eulerian_facets_barycentre_ns_
virtual void initialize(const Domaine_IJK &splitting)
virtual void clean_thermal_subproblems()
void compute_eulerian_curvature_from_interface()
friend class IJK_One_Dimensional_Subproblem
void calculer_temperature_adim_bulles()
virtual const IJK_Field_double & get_probe_collision_debug_field() const
const IJK_Field_double & get_eulerian_rising_velocities() const
const int & get_latastep_reprise_ini() const
const IJK_Field_vector3_double * eulerian_normal_vectors_ns_normed_
IJK_Field_local_double boundary_flux_kmax_
const IJK_Field_double & get_eulerian_compo_connex_from_interface_ft() const
virtual int get_first_step_thermals_post()
IJK_Field_local_double boundary_flux_kmin_
const IJK_Field_vector3_double & get_normal_vector_ns() const
void associer_milieu_base(const Milieu_base &, const int &idth)
double compute_timestep(const double timestep, const double dxmin)
const IJK_Field_double & get_ecart_t_ana_rel() const
virtual const IJK_Field_vector3_int & get_cell_faces_neighbours_corrected_all_bool() const
void 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, const Nom &local_quantities_thermal_slices_time_index_folder, const Nom &local_quantities_thermal_lines_time_index_folder)
virtual void enforce_periodic_temperature_boundary_value()
OBS_PTR(Milieu_base) le_fluide_
IJK_Field_double ecart_source_t_ana_
const IJK_Field_double * eulerian_interfacial_area_ft_
const IJK_Field_int & get_eulerian_compo_connex_int_from_interface_ns() const
const IJK_Field_double & get_div_lambda_grad_T() const
virtual void compute_temperature_convection_conservative(const IJK_Field_vector3_double &velocity)
virtual void clean_ijk_intersections()
const IJK_Field_double & get_temperature_ana() const
const IJK_Field_vector3_double * eulerian_normal_vectors_ft_
virtual void prepare_ij_fluxes_k_layers()
virtual void compute_interfacial_temperature2(ArrOfDouble &interfacial_temperature, ArrOfDouble &flux_normal_interp)
IJK_Field_vector3_double grad_T_elem_
void compute_temperature_gradient_elem()
bool get_debug() const
virtual const IJK_Field_vector3_double & get_interfacial_heat_flux_contrib() const
const IJK_Field_int & get_eulerian_compo_connex_int_from_interface_ghost_ns() const
void calculer_temperature_adimensionnelle_theta(const IJK_Field_double &vx, const double qw)
const Fluide_Diphasique_IJK & milieu_ijk() const
virtual void set_param(Param &param) const override
void calculer_dT(const IJK_Field_vector3_double &velocity)
void compute_eulerian_distance()
const Champs_compris_IJK & champs_compris() const
IJK_Field_vector3_int dummy_int_vect_
virtual void set_field_T_ana()
void post_process_std_thermal_field(const Motcles &liste_post_instantanes, const char *lata_name, const int latastep, const double current_time, const int idx, const Motcles &tested_names, const Nom &name_field, const Motcle &lata_suffix, const IJK_Field_double &field, std::ostringstream &oss, int &counter, const int &first_thermal_rank=0)
IJK_Field_vector3_double hess_cross_T_elem_
const DoubleTab * rising_vectors_
virtual void clip_max_temperature_values()
OpGradCentre2IJKScalar_double temperature_grad_op_centre_
const char * get_fichier_sauvegarde() const
const Nom & get_fichier_reprise() const
IJK_Field_double temperature_before_extrapolation_
virtual void rk3_rustine_sub_step(const int rk_step, const double total_timestep, const double fractionnal_timestep, const double time)
OBS_PTR(Probleme_FTD_IJK_base) ref_ijk_ft_
const IJK_Field_vector3_double & get_bary() const
double get_rhocp_v() const
IJK_One_Dimensional_Subproblems_Interfaces_Fields thermal_local_subproblems_interfaces_fields_
IJK_Field_double & set_temperature()
bool has_champ_vectoriel(const Motcle &nom) const override
const IJK_Field_double * eulerian_compo_connex_ns_
const int & get_rank() const
const Vecteur3 * rising_velocity_overall_
Boundary_Conditions_Thermique boundary_conditions_
IJK_Field_double temperature_adimensionnelle_theta_
void enforce_zero_value_eulerian_curvature()
const std::shared_ptr< IJK_Field_double > & get_temperature() const
const DoubleTab * bubbles_barycentre_
void get_rising_velocities_parameters(int &compute_rising_velocities, int &fill_rising_velocities, int &use_bubbles_velocities_from_interface, int &use_bubbles_velocities_from_barycentres)
void force_upstream_temperature(IJK_Field_double &temperature, double T_imposed, const IJK_Interfaces &interfaces, double nb_diam, int upstream_dir, int gravity_dir, int upstream_stencil)
void associer_ghost_fluid_fields(const IJK_Ghost_Fluid_Fields &ghost_fluid_fields)
void associer_switch(const Switch_FT_double &ijk_ft_switch)
virtual void recompute_temperature_init()
const IJK_Ghost_Fluid_Fields * ghost_fluid_fields_
double get_rhocp_l() const
IJK_Field_double div_coeff_grad_T_volume_uncorrected_
virtual const IJK_Field_int & get_cell_neighbours_corrected_trimmed() const
IJK_Field_double eulerian_grad_T_interface_ns_
virtual void correct_operators_for_visu()
const IJK_Field_double * eulerian_compo_connex_from_interface_ghost_ft_
void set_latastep_reprise(const int latastep)
virtual void euler_time_step(const double timestep)
OBS_PTR(Switch_FT_double) ref_ijk_ft_switch_
int imposer_flux_thermique_bord(const IJK_Field_double &temperature, const double flux_paroi_impose, IJK_Field_local_double &flux_bord, const bool bord_kmax)
const Milieu_base & milieu() const
const IJK_Field_double & get_temperature_adim_bulles() const
const ArrOfDouble * bubbles_volume_
virtual const IJK_Field_double & get_temperature_cell_neighbours() const
std::shared_ptr< IJK_Field_double > d_temperature_
virtual void euler_rustine_step(const double timestep)
virtual void compare_fluxes_thermal_subproblems()
virtual const IJK_Field_vector3_int & get_cell_faces_corrected_bool() const
static void Fill_postprocessable_fields(std::vector< FieldInfo_t > &chps)
int calculer_flux_thermique_bord(const IJK_Field_double &temperature, const double lambda_de_t_paroi, const double T_paroi_impose, IJK_Field_local_double &flux_bord, const bool bord_kmax)
const IJK_Field_double & get_eulerian_curvature_ft() const
void compute_temperature_hessian_cross_elem()
virtual void clip_min_temperature_values()
virtual double compute_rho_cp_u_mean(const IJK_Field_double &vx)
const Motcles & get_thermal_words() const
void enforce_zero_value_eulerian_distance()
virtual int get_disable_post_processing_probes_out_files() const
void get_boundary_fluxes(IJK_Field_local_double &boundary_flux_kmin, IJK_Field_local_double &boundary_flux_kmax)
Nom & get_thermal_problem_type()
virtual void lire_temperature(const Domaine_IJK &splitting)
const IJK_Field_vector3_double & get_normal_vector_ns_normed() const
Fluide_Diphasique_IJK & milieu_ijk()
virtual const IJK_Field_vector3_int & get_cell_faces_neighbours_corrected_diag_bool() const
const IJK_Field_double & get_temperature_before_extrapolation() const
virtual void post_process_after_temperature_increment()
double direct_smoothing_factors_[7]
virtual void set_subproblems_interfaces_fields(const Domaine_IJK &splitting)
virtual void add_temperature_diffusion()
const IJK_Field_double * eulerian_distance_ft_
virtual void set_zero_temperature_increment()
IJK_Field_double source_temperature_l_
const IJK_Field_double & get_eulerian_compo_connex_from_interface_ns() const
IJK_Field_double div_coeff_grad_T_
virtual void sauvegarder_temperature(Nom &lata_name, int idx, const int &stop=0)
IJK_Field_double tmp_smoothing_field_
virtual void remplir_tableau_pure_cellules_diphasiques(bool next_time)
void compute_eulerian_grad_T_interface(const int on_splitting_ns=0)
virtual double get_modified_time()
void compute_temperature_convection(const IJK_Field_vector3_double &velocity)
Champs_compris_IJK_interface::FieldInfo_t FieldInfo_t
const ArrOfDouble * rising_velocities_
IJK_Field_vector3_double dummy_double_vect_
IJK_Field_double temperature_physique_T_
Operateur_IJK_elem_diff temperature_diffusion_op_uncorrected_
IJK_Field_double ecart_t_ana_rel_
IJK_Field_double source_temperature_
const IJK_Field_vector3_double & get_IJK_field_vector(const Motcle &nom) override
const IJK_Field_double & get_u_T_convective_volume() const
bool has_champ(const Motcle &nom) const override
const IJK_Field_double & get_eulerian_distance_ns() const
IJK_Field_double temperature_gaussian_filtered_
void compute_temperature_convective_fluxes(const IJK_Field_vector3_double &velocity)
void calculer_gradient_temperature(const IJK_Field_double &temperature, IJK_Field_vector3_double &grad_T)
const IJK_Field_double & get_interfacial_area_ft() const
bool disable_relative_velocity_energy_balance_
IJK_Field_double ecart_t_ana_
void calculer_energies(double &E_liq_pure, double &E_liq, double &E_vap_pure, double &E_vap, double &E_mixt, double &E_tot)
void enforce_max_value_eulerian_curvature()
void posttraiter_tous_champs_thermal(Motcles &liste, const int idx) const
IJK_Field_double d_temperature_uncorrected_
OpHessCentre2IJKScalar_double temperature_hess_op_centre_
virtual void copie_pure_vers_diph_sans_interpolation()
const IJK_Field_vector3_double & get_rho_cp_u_T_convective_fluxes() const
const std::shared_ptr< IJK_Field_double > & get_div_lambda_grad_T_volume() const
const IJK_Field_vector3_double & get_div_coeff_grad_T_diffusive_fluxes() const
void compute_boundary_conditions_thermal()
const IJK_Field_vector3_double & get_grad_T() const
const IJK_Field_double * eulerian_curvature_ft_
void associer(const Probleme_FTD_IJK_base &ijk_ft)
bool get_ghost_fluid_flag() const
IJK_Field_vector3_double facets_barycentre
IJK_Field_double source_temperature_ana_
IJK_Field_double temperature_adim_bulles_
void compute_rising_velocities()
void compute_eulerian_temperature_ghost(const int on_splitting_ns=0)
IJK_Field_vector3_double rho_cp_u_T_convective_raw_
virtual void correct_temperature_increment_for_interface_leaving_cell()
virtual double compute_temperature_dimensionless_theta_mean(const IJK_Field_double &vx)
const IJK_Field_vector3_double & get_hessian_cross_temperature_elem() const
std::shared_ptr< IJK_Field_double > temperature_
const IJK_Field_double & get_eulerian_compo_connex_from_interface_ghost_ns() const
IJK_Field_double temperature_for_ini_per_bubble_
const IJK_Field_vector3_double * eulerian_normal_vectors_ns_
IJK_Field_double eulerian_grad_T_interface_ft_
void compute_cell_diagonal(const Domaine_IJK &splitting)
IJK_Field_vector3_double storage_
const IJK_Field_double & get_eulerian_distance_ft() const
const ArrOfDouble * rising_velocities_from_barycentres_
friend class IJK_One_Dimensional_Subproblems
const IJK_Field_double & get_temperature_elem_smooth() const
virtual void update_intersections()
int calculer_k_pour_bord(const IJK_Field_double &temperature, const bool bord_kmax)
int post_process_quantities_from_subresolution(const Motcles &liste_post_instantanes, const char *lata_name, const int latastep)
classe Milieu_base Cette classe est la base de la hierarchie des milieux (physiques)
Definition Milieu_base.h:50
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
Un tableau de chaine de caracteres (VECT(Nom)).
Definition Noms.h:26
Objet_U()
Constructeur par defaut : attribue un numero d'identifiant unique a l'objet (object_id_),...
Definition Objet_U.cpp:55
Helper class to factorize the readOn method of Objet_U classes.
Definition Param.h:112