TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
IJK_Thermal_Onefluid.cpp
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#include <IJK_Navier_Stokes_tools.h>
17#include <IJK_Thermal_Onefluid.h>
18#include <Probleme_FTD_IJK.h>
19#include <Schema_RK3_IJK.h>
20#include <DebogIJK.h>
21
22Implemente_instanciable_sans_constructeur( IJK_Thermal_Onefluid, "IJK_Thermal_Onefluid", IJK_Thermal_base ) ;
23
24IJK_Thermal_Onefluid::IJK_Thermal_Onefluid()
25{
29}
30
32{
34 os<< " {\n";
35
36 os<< " type_T_source " << type_T_source_ << "\n";
37
39 os<< " rho_cp_moy_harmonic \n";
41 os<< " lambda_variable \n";
43 os<< " lambda_moy_arith \n";
45 os<< " depracated_rho_cp \n";
47 os<< " conserv_energy_global \n";
48
49 os<< " \n}";
50 return os;
51}
52
54{
56 return is;
57}
58
60{
62 param.ajouter_flag("lambda_moy_arith_", &lambda_moy_arith_);
63 param.ajouter_flag("rho_cp_moy_harmonic", &rho_cp_moy_harmonic_);
64 param.ajouter_flag("deprecated_rho_cp", &deprecated_rho_cp_);
65}
66
68{
69 Cout << que_suis_je() << "::initialize()" << finl;
72 lambda_.allocate(splitting, Domaine_IJK::ELEM, 1);
73
75 rho_cp_inv_.allocate(splitting, Domaine_IJK::ELEM, 2);
76 else
77 {
79 cp_.allocate(splitting, Domaine_IJK::ELEM, 2);
80 else
81 {
83 rho_cp_.allocate(splitting, Domaine_IJK::ELEM, 2);
84 }
85 }
86
87 // Compute initial energy :
89 {
91 d_T_rustine_.allocate(splitting, Domaine_IJK::ELEM, 1);
92 if (ref_ijk_ft_ && sub_type(Schema_RK3_IJK, ref_ijk_ft_->schema_temps_ijk()))
93 RK3_F_rustine_.allocate(splitting, Domaine_IJK::ELEM, 0);
94 Cout << "Initial energy at time t=" << ref_ijk_ft_->schema_temps_ijk().get_current_time() << " is " << E0_ << " [W.m-3]." << finl;
95 Cerr << "Initial energy at time t=" << ref_ijk_ft_->schema_temps_ijk().get_current_time() << " is " << E0_ << " [W.m-3]." << finl;
96 }
98 {
99 rho_cp_T_.allocate(splitting, Domaine_IJK::ELEM, 2);
100 div_rho_cp_T_.allocate(splitting, Domaine_IJK::ELEM, 0);
101 }
102
103 const Nom nom_rust= get_field_name_with_rank("T_RUST");
104 if (ref_ijk_ft_post_->is_post_required(nom_rust) || (type_temperature_convection_form_==2))
105 {
106 T_rust_.allocate(splitting, Domaine_IJK::ELEM, 0, nom_rust);
107 champs_compris_.ajoute_champ(T_rust_);
108 T_rust_.data() = 0.;
109 }
110 Cout << "End of " << que_suis_je() << "::initialize()" << finl;
111}
112
114{
116 const IJK_Field_double& indic = ref_ijk_ft_->get_interface().I();
117 // Nombre de mailles du domaine NS :
118 const int nx = indic.ni();
119 const int ny = indic.nj();
120 const int nz = indic.nk();
121 const double rho_l = ref_ijk_ft_->milieu_ijk().get_rho_liquid();
122 const double rho_v = ref_ijk_ft_->milieu_ijk().get_rho_vapour();
123 const bool harmonic_mean = ((!lambda_moy_arith_) and (lambda_liquid_ > DMINFLOAT) and (lambda_vapour_ >DMINFLOAT));
124 const bool rho_cp_harmonic_mean = ((rho_cp_moy_harmonic_) and (rho_l*cp_liquid_ > DMINFLOAT) and (rho_v*cp_vapour_ >DMINFLOAT));
125 for (int k=0; k < nz ; k++)
126 for (int j=0; j< ny; j++)
127 for (int i=0; i < nx; i++)
128 {
129 double chi_l = indic(i,j,k);
131 if (rho_cp_harmonic_mean)
132 rho_cp_inv_(i,j,k)= chi_l / (rho_l * cp_liquid_) + (1 - chi_l) / (rho_v * cp_vapour_);
133 else
134 rho_cp_inv_(i,j,k) = rho_l * cp_liquid_ * chi_l + rho_v * cp_vapour_ * (1.- chi_l);
135 else
136 {
138 cp_(i,j,k) = cp_liquid_ * chi_l + cp_vapour_ * (1.- chi_l);
139 else if (!rho_cp_post_)
140 rho_cp_(i,j,k) = rho_l * cp_liquid_ * chi_l + rho_v * cp_vapour_ * (1.- chi_l);
141 }
142 if (rho_cp_post_)
143 rho_cp_(i,j,k) = rho_l * cp_liquid_ * chi_l + rho_v * cp_vapour_ * (1.- chi_l);
144 if (harmonic_mean)
145 lambda_(i,j,k) = lambda_liquid_ * lambda_vapour_ / ((1 - chi_l) * lambda_liquid_ + chi_l * lambda_vapour_);
146 else
147 lambda_(i,j,k) = lambda_liquid_ * chi_l + (1.- chi_l) * lambda_vapour_ ;
148 }
149 lambda_.echange_espace_virtuel(lambda_.ghost());
150 if (rho_cp_post_)
151 rho_cp_.echange_espace_virtuel(rho_cp_.ghost());
153 rho_cp_inv_.echange_espace_virtuel(rho_cp_inv_.ghost());
154 else
155 {
157 cp_.echange_espace_virtuel(cp_.ghost());
158 else
159 {
160 if (!rho_cp_post_)
161 rho_cp_.echange_espace_virtuel(rho_cp_.ghost());
162 }
163 }
164}
165
174
176{
177 const IJK_Field_double& div_coeff_grad_T_volume = *div_coeff_grad_T_volume_;
178 IJK_Field_double& d_temperature = *d_temperature_;
179
180 // Update d_temperature
181 const int ni = d_temperature.ni();
182 const int nj = d_temperature.nj();
183 const int nk = d_temperature.nk();
184 const double vol_inv = 1./vol_;
185 for (int k = 0; k < nk; k++)
186 for (int j = 0; j < nj; j++)
187 for (int i = 0; i < ni; i++)
188 {
190 {
191 const double rhocpV_inv = rho_cp_inv_(i,j,k) * vol_inv;
192 const double ope = div_coeff_grad_T_volume(i,j,k);
193 const double resu = ope*rhocpV_inv;
194 d_temperature(i,j,k) +=resu ;
195 }
196 else
197 {
198 double rhocpV = 0;
200 {
201 const double rho = ref_ijk_ft_->eq_ns().get_rho_field_ijk(i,j,k);
202 const double cp = cp_(i,j,k);
203 rhocpV = rho * cp * vol_;
204 }
205 else
206 {
207 rhocpV = rho_cp_(i,j,k) * vol_;
208 }
209 const double ope = div_coeff_grad_T_volume(i,j,k);
210 const double resu = ope/rhocpV;
211 d_temperature(i,j,k) +=resu ;
212 }
213 }
214}
215
216double IJK_Thermal_Onefluid::compute_rho_cp_u_mean(const IJK_Field_double& vx)
217{
218 double rho_cp_u_mean = 0.;
220 {
221 const double rho_l = ref_ijk_ft_->milieu_ijk().get_rho_liquid();
222 const double rho_v = ref_ijk_ft_->milieu_ijk().get_rho_vapour();
223 const bool rho_cp_harmonic_mean = ((rho_cp_moy_harmonic_) and (rho_l*cp_liquid_ > DMINFLOAT) and (rho_v*cp_vapour_ >DMINFLOAT));
224 if (rho_cp_harmonic_mean)
225 rho_cp_u_mean = calculer_rho_cp_u_moyen(vx, rho_cp_inv_, vx, 0., 3);
226 else
227 rho_cp_u_mean = calculer_rho_cp_u_moyen(vx, rho_cp_inv_, vx, 0., 1);
228 }
229 else
230 {
232 {
233 rho_cp_u_mean = calculer_rho_cp_u_moyen(vx, cp_, ref_ijk_ft_->eq_ns().get_rho_field(), 0., 0);
234 }
235 else
236 {
237 rho_cp_u_mean = calculer_rho_cp_u_moyen(vx, rho_cp_, vx, 0., 1);
238 }
239 }
240 return rho_cp_u_mean;
241}
242
243double IJK_Thermal_Onefluid::get_rho_cp_ijk(int i, int j, int k) const
244{
245 double rho_cp = 0.;
247 {
248 const double rho_l = ref_ijk_ft_->milieu_ijk().get_rho_liquid();
249 const double rho_v = ref_ijk_ft_->milieu_ijk().get_rho_vapour();
250 const bool rho_cp_harmonic_mean = ((rho_cp_moy_harmonic_) and (rho_l*cp_liquid_ > DMINFLOAT) and (rho_v*cp_vapour_ >DMINFLOAT));
251 if (rho_cp_harmonic_mean)
252 rho_cp = 1 / rho_cp_inv_(i,j,k);
253 else
254 rho_cp = rho_cp_inv_(i,j,k);
255 }
256 else
257 {
259 {
260 rho_cp = cp_(i,j,k) * (ref_ijk_ft_->eq_ns().get_rho_field_ijk(i,j,k));
261 }
262 else
263 {
264 rho_cp = rho_cp_(i,j,k);
265 }
266 }
267 return rho_cp;
268}
269
270double IJK_Thermal_Onefluid::get_rho_cp_u_ijk(const IJK_Field_double& vx, int i, int j, int k) const
271{
272 return get_rho_cp_ijk(i,j,k) * vx(i,j,k);
273}
274
275double IJK_Thermal_Onefluid::get_div_lambda_ijk(int i, int j, int k) const
276{
277 return (lambda_(i+1,j,k)-lambda_(i-1,j,k));
278}
279
281{
282 double theta_adim_moy = 0.;
284 {
285 const double rho_l = ref_ijk_ft_->milieu_ijk().get_rho_liquid();
286 const double rho_v = ref_ijk_ft_->milieu_ijk().get_rho_vapour();
287 const bool rho_cp_harmonic_mean = ((rho_cp_moy_harmonic_) and (rho_l*cp_liquid_ > DMINFLOAT) and (rho_v*cp_vapour_ >DMINFLOAT));
288 if (rho_cp_harmonic_mean)
289 theta_adim_moy = calculer_temperature_adimensionnelle_theta_moy(vx, temperature_adimensionnelle_theta_, rho_cp_inv_, vx, 0., 3);
290 else
291 theta_adim_moy = calculer_temperature_adimensionnelle_theta_moy(vx, temperature_adimensionnelle_theta_, rho_cp_inv_, vx, 0., 1);
292 }
293 else
294 {
296 {
297 theta_adim_moy = calculer_temperature_adimensionnelle_theta_moy(vx, temperature_adimensionnelle_theta_, cp_, ref_ijk_ft_->eq_ns().get_rho_field(), 0., 0);
298 }
299 else
300 {
301 theta_adim_moy = calculer_temperature_adimensionnelle_theta_moy(vx, temperature_adimensionnelle_theta_, rho_cp_, vx, 0., 1);
302 }
303 }
304 return theta_adim_moy;
305}
306
308{
309 const int ni = T_rust_.ni();
310 const int nj = T_rust_.nj();
311 const int nk = T_rust_.nk();
312 const double rho_l = ref_ijk_ft_->milieu_ijk().get_rho_liquid();
313 const double rho_v = ref_ijk_ft_->milieu_ijk().get_rho_vapour();
314 const IJK_Field_double& indic = ref_ijk_ft_->get_interface().I();
315 double int_rhocpTrust = 0;
316 for (int k = 0; k < nk; k++)
317 for (int j = 0; j < nj; j++)
318 for (int i = 0; i < ni; i++)
319 {
320 int_rhocpTrust += (rho_l*cp_liquid_*indic(i,j,k) + rho_v*cp_vapour_*(1.-indic(i,j,k)))*T_rust_(i,j,k);
321 }
322 const int ntot = T_rust_.get_domaine().get_nb_items_global(Domaine_IJK::ELEM, DIRECTION_I)
323 *T_rust_.get_domaine().get_nb_items_global(Domaine_IJK::ELEM, DIRECTION_J)
324 *T_rust_.get_domaine().get_nb_items_global(Domaine_IJK::ELEM, DIRECTION_K);
325 int_rhocpTrust = mp_sum(int_rhocpTrust)/(double)(ntot);
326 if ((std::fabs(int_rhocpTrust) < DMINFLOAT) && (std::fabs(dE) > DMINFLOAT))
327 {
328 Cerr << "Trying to normalize the energy by an infinite coef : " << dE << " / " << int_rhocpTrust << finl;
330 }
331 else
332 {
333 Cerr << "Le coeff de manque d'energie dE/int_rhocpTrust vaut : " << dE/int_rhocpTrust << finl;
334 }
335 if (int_rhocpTrust)
336 {
337 for (int k = 0; k < nk; k++)
338 for (int j = 0; j < nj; j++)
339 for (int i = 0; i < ni; i++)
340 {
341 d_T_rustine_(i,j,k) = dE/ int_rhocpTrust * T_rust_(i,j,k);
342 }
343 }
344}
345
346void IJK_Thermal_Onefluid::rk3_rustine_sub_step(const int rk_step, const double total_timestep,
347 const double fractionnal_timestep, const double time)
348{
351 {
352 const double dE = get_E0() - compute_global_energy();
353 rk3_rustine_sub_step(rk_step, total_timestep, fractionnal_timestep, time, dE);
354 }
355}
356
357void IJK_Thermal_Onefluid::rk3_rustine_sub_step(const int rk_step, const double total_timestep,
358 const double fractionnal_timestep, const double time, const double dE)
359{
361 // Update the temperature :
362 const int kmax = temperature_->nk();
363 const double ene_ini = compute_global_energy();
364 for (int k = 0; k < kmax; k++)
365 {
366 runge_kutta3_update(d_T_rustine_, RK3_F_rustine_, *temperature_, rk_step, k, total_timestep);
367 }
368 temperature_->echange_espace_virtuel(temperature_->ghost());
369 const double ene_post = compute_global_energy();
370 Cerr << "[Energy-Budget-T"<<rank_<<"RK3 rustine step "<<rk_step<<"] time t=" << ref_ijk_ft_->schema_temps_ijk().get_current_time()
371 << " " << ene_ini
372 << " " << ene_post << " [W.m-3]. [step"<< rk_step << "]" << finl;
374}
375
377{
380 {
381 const double dE = get_E0() - compute_global_energy();
382 euler_rustine_step(timestep, dE);
383 }
384}
385
386void IJK_Thermal_Onefluid::euler_rustine_step(const double timestep, const double dE)
387{
389 // Update the temperature :
390 const int kmax = temperature_->nk();
391 const double ene_ini = compute_global_energy();
392 for (int k = 0; k < kmax; k++)
393 ref_ijk_ft_->eq_ns().euler_explicit_update(d_T_rustine_, *temperature_, k);
394 temperature_->echange_espace_virtuel(temperature_->ghost());
395 const double ene_post = compute_global_energy();
396 Cerr << "[Energy-Budget-T"<<rank_<<" euler rustine] time t=" << ref_ijk_ft_->schema_temps_ijk().get_current_time()
397 << " " << ene_ini
398 << " " << ene_post << " [W.m-3]."
399 << " dE "<< dE
400 << finl;
402}
403
404void IJK_Thermal_Onefluid::compute_temperature_convection_conservative(const IJK_Field_vector3_double& velocity)
405{
406 //static Stat_Counter_Id cnt_conv_temp = //statistiques().new_counter(1, "FT convection rho");
407 //statistiques().begin_count(cnt_conv_temp);
408 IJK_Field_double& d_temperature = *d_temperature_;
410 {
411 d_temperature.data()=0;
412 }
413 else
414 {
415 // TODO Mathis : Voir la nouvelle facon sans switch
416 /*
417 switch (type_temperature_convection_op_)
418 {
419 case 1:
420 Cerr << "Operateur amont non implemente" << finl;
421 break;
422 case 2:
423 Cerr << "Operateur centre non implemente" << finl;
424 break;
425 case 3:
426 // rho_cp_convection_op_quick_.calculer(rho_cp_T_, velocity[0], ref_ijk_ft_->itfce().I(), velocity[1], velocity[2], div_rho_cp_T_);
427 rho_cp_convection_op_quick_.set_indicatrice(ref_ijk_ft_->itfce().I());
428 rho_cp_convection_op_quick_.calculer(rho_cp_T_, velocity[0], velocity[1], velocity[2], div_rho_cp_T_);
429
430 break;
431 case 4:
432 Cerr << "Operateur centre4 non implemente" << finl;
433 break;
434
435 default:
436 Cerr << "Unknown convection operator for the temperature." << finl;
437 Process::exit();
438 } */
439 const int ni = d_temperature.ni();
440 const int nj = d_temperature.nj();
441 const int nk = d_temperature.nk();
442 const Domaine_IJK& geom = d_temperature.get_domaine();
443 const double dx = geom.get_constant_delta(DIRECTION_I);
444 const double dy = geom.get_constant_delta(DIRECTION_J);
445 const double dz = geom.get_constant_delta(DIRECTION_K);
446 const double vol = dx*dy*dz;
447 const double rho_l = ref_ijk_ft_->milieu_ijk().get_rho_liquid();
448 const double rho_v = ref_ijk_ft_->milieu_ijk().get_rho_vapour();
449 const IJK_Field_double& indic = ref_ijk_ft_->get_interface().I();
450 for (int k = 0; k < nk; k++)
451 for (int j = 0; j < nj; j++)
452 for (int i = 0; i < ni; i++)
453 {
454 const double I = indic(i,j,k);
455 // dT = 1/rho_cp_h * div( rho*cp*T*v )
456 div_rho_cp_T_(i,j,k) /= vol;
457 d_temperature(i,j,k) = 1/((I*rho_l*cp_liquid_) + (1.-I)*rho_v*cp_vapour_)*div_rho_cp_T_(i,j,k);
458 }
459 // on met a jour T_rust_
460 compute_T_rust(velocity);
461 for (int k = 0; k < nk; k++)
462 for (int j = 0; j < nj; j++)
463 for (int i = 0; i < ni; i++)
464 {
465 // dT = 1/rho_cp_h * div( rho*cp*T*v ) - T/rho_cp_h *div( rho*cp*v)
466 d_temperature(i,j,k) -= T_rust_(i,j,k) ;
467 }
468 d_temperature.echange_espace_virtuel(d_temperature.ghost());
469 }
470 //statistiques().end_count(cnt_conv_temp);
471 DebogIJK::verifier("op_conv(rho)", d_temperature);
472 return;
473}
474
475void IJK_Thermal_Onefluid::compute_T_rust(const IJK_Field_vector3_double& velocity)
476{
477 //static Stat_Counter_Id cnt_conv_temp = //statistiques().new_counter(1, "FT convection rho cp");
478 //statistiques().begin_count(cnt_conv_temp);
479 const Domaine_IJK& geom = T_rust_.get_domaine();
480 // DONE: remplacer rho_cp par un champ rho_cp_ mis a jour dans update_thermal_properties. Necessaire pour que ca marche.
481 //On calcule div(rho_cp*v) qu'on stocke dans T_rust
482 // TODO Mathis check
483 /* switch (type_temperature_convection_op_)
484 {
485 case 1:
486 temperature_convection_op_amont_.calculer(rho_cp_, rho_cp_, rho_cp_, velocity[0], velocity[1], velocity[2], T_rust_, T_rust_, T_rust_);
487 break;
488 case 2:
489 temperature_convection_op_centre2_.calculer(rho_cp_, velocity[0], velocity[1], velocity[2], T_rust_);
490 break;
491 case 3:
492 temperature_convection_op_quick_.calculer(rho_cp_, velocity[0], velocity[1], velocity[2], T_rust_);
493 break;
494 case 4:
495 temperature_convection_op_centre4_.calculer(rho_cp_,rho_cp_,rho_cp_, velocity[0], velocity[1], velocity[2], T_rust_, T_rust_, T_rust_);
496 break;
497
498 default:
499 Cerr << "Unknown convection operator for the temperature." << finl;
500 Process::exit();
501 }
502 */
503 temperature_convection_op_->calculer(T_rust_, velocity[0], velocity[1], velocity[2], d_T_rustine_);
504
505 // TODO : GB il manquait un truc comme ca? ou
506 const int kmax = temperature_->nk();
507 for (int k = 0; k < kmax; k++)
508 ref_ijk_ft_->eq_ns().euler_explicit_update(d_T_rustine_, T_rust_, k);
509 // ou bien :
510// const double timestep = ref_ijk_ft_->schema_temps_ijk().get_timestep();
511// euler_rustine_step(timestep, 0. /* dE */);
512 //
513 const int ni = T_rust_.ni();
514 const int nj = T_rust_.nj();
515 const int nk = T_rust_.nk();
516 const double dx = geom.get_constant_delta(DIRECTION_I);
517 const double dy = geom.get_constant_delta(DIRECTION_J);
518 const double dz = geom.get_constant_delta(DIRECTION_K);
519 // To be sure we're on a regular mesh
520 assert(dz >0);
521 const double vol = dx*dy*dz;
522 for (int k = 0; k < nk; k++)
523 for (int j = 0; j < nj; j++)
524 for (int i = 0; i < ni; i++)
525 {
526 T_rust_(i,j,k) /=vol ;
527 }
528 //On met a jour T_rust_ on le multipliant par T/rho_cp_hamro
529 const double rho_l = ref_ijk_ft_->milieu_ijk().get_rho_liquid();
530 const double rho_v = ref_ijk_ft_->milieu_ijk().get_rho_vapour();
531 const IJK_Field_double& indic = ref_ijk_ft_->get_interface().I();
532 const IJK_Field_double& temperature = *temperature_;
533 for (int k=0; k < nk ; k++)
534 for (int j=0; j< nj; j++)
535 for (int i=0; i < ni; i++)
536 {
537 const double chi_l = indic(i,j,k);
538 T_rust_(i,j,k) *= temperature(i,j,k)/(chi_l*rho_l*cp_liquid_ + (1-chi_l)*rho_v*cp_vapour_);
539 }
540 //statistiques().end_count(cnt_conv_temp);
541 return;
542}
static void verifier(const char *msg, const IJK_Field_float &)
Definition DebogIJK.cpp:117
This class encapsulates all the information related to the eulerian mesh for TrioIJK.
Definition Domaine_IJK.h:47
double get_constant_delta(int direction) const
Returns the size of cells in a direction.
Class defining operators and methods for all reading operation in an input flow (file,...
Definition Entree.h:42
void echange_espace_virtuel(int ghost)
Exchange data over "ghost" number of cells.
const Domaine_IJK & get_domaine() const
IJK_Field_double d_T_rustine_
void set_param(Param &param) const override
double get_rho_cp_u_ijk(const IJK_Field_double &vx, int i, int j, int k) const override
void add_temperature_diffusion() override
virtual void rk3_rustine_sub_step(const int rk_step, const double total_timestep, const double fractionnal_timestep, const double time) override
double get_rho_cp_ijk(int i, int j, int k) const
void compute_diffusion_increment() override
void initialize(const Domaine_IJK &splitting) override
IJK_Field_double RK3_F_rustine_
double get_div_lambda_ijk(int i, int j, int k) const override
void compute_dT_rustine(const double dE)
void update_thermal_properties() override
double compute_rho_cp_u_mean(const IJK_Field_double &vx) override
virtual void euler_rustine_step(const double timestep) override
IJK_Field_double div_rho_cp_T_
IJK_Field_double rho_cp_inv_
void compute_T_rust(const IJK_Field_vector3_double &velocity)
double compute_temperature_dimensionless_theta_mean(const IJK_Field_double &vx) override
void compute_temperature_convection_conservative(const IJK_Field_vector3_double &velocity) override
virtual double compute_global_energy()
IJK_Field_double rho_cp_
std::shared_ptr< IJK_Field_double > div_coeff_grad_T_volume_
Champs_compris_IJK champs_compris_
Operateur_IJK_elem_conv temperature_convection_op_
virtual bool get_conserv_energy_global()
Operateur_IJK_elem_diff temperature_diffusion_op_
Nom get_field_name_with_rank(Nom basename) const
virtual void update_thermal_properties()
IJK_Field_double rho_cp_T_
const double & get_E0() const
virtual void initialize(const Domaine_IJK &splitting)
virtual void set_param(Param &param) const override
IJK_Field_double temperature_adimensionnelle_theta_
std::shared_ptr< IJK_Field_double > d_temperature_
virtual void add_temperature_diffusion()
std::shared_ptr< IJK_Field_double > temperature_
class Nom Une chaine de caractere pour nommer les objets de TRUST
Definition Nom.h:31
const Nom & que_suis_je() const
renvoie la chaine identifiant la classe.
Definition Objet_U.cpp:104
virtual Entree & readOn(Entree &)
Lecture d'un Objet_U sur un flot d'entree Methode a surcharger.
Definition Objet_U.cpp:293
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
Definition Objet_U.cpp:282
Helper class to factorize the readOn method of Objet_U classes.
Definition Param.h:112
void ajouter_flag(const char *keyword, const bool *value)
Register a boolean flag whose mere presence switches it to true.
Definition Param.cpp:474
static double mp_sum(double)
Calcule la somme de x sur tous les processeurs du groupe courant.
Definition Process.cpp:146
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Definition Process.cpp:455
Classe de base des flux de sortie.
Definition Sortie.h:52