TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
corrections_qdm.cpp
1/****************************************************************************
2* Copyright (c) 2021, 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 <corrections_qdm.h>
17//#include <Interprete_bloc.h>
18#include <Param.h>
19#include <string>
20#include <iostream>
21#include <math.h>
22
23///////////////////////////////////////////////////////////////////////
24///////////////////////////////////////////////////////////////////////
25
26///////////////////////////////////////////////////////////////////////
27///////////////////////////////////////////////////////////////////////
28
29Implemente_instanciable( consigne_initiale, "consigne_initiale", Objet_U ) ;
30
32{
33 Objet_U::printOn( os );
34 os << "{\n"
35 << " qdm_cible " << qdm_cible_ << "\n";
36 os << " }\n" ;
37 return os;
38}
39
41{
42 Objet_U::readOn( is );
43 Param param(que_suis_je());
44 param.ajouter("qdm_cible",&qdm_cible_ );
45 param.lire_avec_accolades(is);
46 return is;
47}
48
54
55// TODO
57{
58 if (time_iteration_ == 0)
59 qdm_cible_ = qdm_init;
60}
61
62/////////////////////////////////////////////////////////////////////////////////////////
63// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ////////////////////////////////
64/////////////////////////////////////////////////////////////////////////////////////////
65
66Implemente_instanciable_sans_constructeur( cible_donnee, "cible_donnee", Objet_U ) ;
67
69 rho_liq_(0.),
70 v_cible_(0.),
71 qdm_cible_(0.)
72{
73}
74
76{
77 Objet_U::printOn( os );
78 os << "{\n"
79 << " vitesse_cible " << v_cible_ << "\n";
80 os << " }\n" ;
81 return os;
82}
83
85{
86 Objet_U::readOn( is );
87 Param param(que_suis_je());
88 param.ajouter("vitesse_cible",&v_cible_ );
89 param.lire_avec_accolades(is);
90 return is;
91}
92
94{
96}
97
98/////////////////////////////////////////////////////////////////////////////////////////
99// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ////////////////////////////////
100/////////////////////////////////////////////////////////////////////////////////////////
101
102// IL FAUT ENCORE BIEN INITIALISER LA CLASSE EN GERANT LES SAUVEGARDES, REPRISES //
103Implemente_instanciable_sans_constructeur( moyenne_par_morceaux, "moyenne_par_morceaux", Objet_U ) ;
104
105moyenne_par_morceaux::moyenne_par_morceaux() // @suppress("Class members should be properly initialized")
106{
107 timestep_=0;
108 time_=0;
109 rho_liq_=0;
110
114 qdm_cible_=0;
115 v_cible_=0;
117}
118
119
121{
122 Objet_U::printOn( os );
123 os << "{\n";
124 /* Sorties utilisateur */
125 os << " duree_morceau " << duree_morceau_demandee_ << "\n"
126 << " v_init_guess " << v_init_guess_ << "\n";
127 /* Sorties reprises */
128 os << " qdm_integ_partielle " << qdm_integ_partielle_ << "\n"
129 << " last_update_time " << last_update_time_ << "\n"
130 << " qdm_reprise " << qdm_cible_ << "\n"
131 << " v_reprise " << v_cible_ << "\n";
132 os << " }\n" ;
133 return os;
134}
135
137{
138 Objet_U::readOn( is );
139 Param param(que_suis_je());
140 /* Entrees utilisateur */
141 param.ajouter("duree_morceau",&duree_morceau_demandee_);
142 param.ajouter("v_init_guess",&v_init_guess_);
143 /* Entrees reprise */
144 param.ajouter("qdm_integ_partielle",&qdm_integ_partielle_);
145 param.ajouter("last_update_time",&last_update_time_);
146 param.ajouter("qdm_reprise",&qdm_cible_);
147 param.ajouter("v_reprise",&v_cible_);
148 param.lire_avec_accolades(is);
149 return is;
150}
151
166void moyenne_par_morceaux::set_time(double time, double time_step, int time_iteration)
167{
168 time_ = time;
169 timestep_ = time_step;
170 time_iteration_ = time_iteration;
171}
172
173void moyenne_par_morceaux::compute_qdm_cible(double alpha_l, double vitesse_relative)
174{
175 Cout << "time_" << time_ << finl;
176 Cout << "duree_morceau_demandee_" << duree_morceau_demandee_ << finl;
177 Cout << "last_update_time_" << last_update_time_ << finl;
178 Cout << "qdm_integ_partielle_" << qdm_integ_partielle_ << finl;
179 Cout << "alpha_l " << alpha_l << finl;
180 Cout << "vitesse_relative " << vitesse_relative << finl;
181 Cout << "timestep_ " << timestep_ << finl;
183 {
184 /* *****************************************************
185 * Construit l'integrale pour la cible de qdm
186 * *****************************************************/
187 Cout << "In the if " << time_<< "/ "<< duree_morceau_demandee_ + last_update_time_ << finl;
188 qdm_integ_partielle_ += alpha_l*vitesse_relative*timestep_;
189 //duree_morceau_effective_ += timestep_;
190 }
191 else
192 {
193 /* ******************************************************************************
194 * Passage d'un morceau a l'autre :
195 * Mise a jour de la cible de qdm et remise a zero des grandeurs de construction
196 * ******************************************************************************/
197
198 /* Finalize integral and update target value */
199 Cout << "time_ - last_update_time_" << time_ - last_update_time_ << finl;
200 Cout << "rho_liq_" << rho_liq_ << finl;
201 Cout << "qdm_integ_partielle_" << qdm_integ_partielle_ << finl;
202 Cout << "last_update_time_" << last_update_time_ << finl;
207 /* Refresh for the next mean */
210 }
211
212}
213
214/////////////////////////////////////////////////////////////////////////////////////////
215// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ////////////////////////////////
216/////////////////////////////////////////////////////////////////////////////////////////
217
218// IL FAUT ENCORE BIEN INITIALISER LA CLASSE EN GERANT LES SAUVEGARDES, REPRISES //
219Implemente_instanciable_sans_constructeur( moyenne_glissante, "moyenne_glissante", Objet_U ) ;
220
221moyenne_glissante::moyenne_glissante() // @suppress("Class members should be properly initialized")
222{
223 list_index_=0;
224 offset_list_index_=0; /*è MOLTO IMPORTANTE lasciare il valore 0*/
225 liste_instants_.resize_array(0);
226 liste_v_cible_dl_.resize_array(0);
227 liste_v_cible_.resize_array(0);
228 rho_liq_=0;
229
230 tstep_=0;
231 time_=0;
232 timestep_=0;
233 v_cible_=0;
234 qdm_cible_=0;
237}
238
240{
241 Objet_U::printOn( os );
242 os << "{\n";
243 /* Sorties utilisateurs */
244 os << " duree_intervalle " << duree_demandee_morceau_glissant_ << "\n"
245 << " v_init_guess " << v_cible_ << "\n";
246 /* Sorties reprise*/
247 os << " list_index " << list_index_ << "\n"
248 << " offset_list_index " << list_index_+1 << "\n"
249 << " liste_instants " << liste_instants_ << "\n"
250 << " liste_v_cible_dl " << liste_v_cible_dl_ << "\n"
251 << " liste_v_cible " << liste_v_cible_ << "\n"
252 << " duree_effective_morceau_glissant " << duree_effective_morceau_glissant_ << "\n"
253 << " v_cible_en_cours " << v_cible_ << "\n";
254 os << " }\n" ;
255 return os;
256}
257
259{
260 Objet_U::readOn( is );
261 Param param(que_suis_je());
262 /* Entrees utilisateur */
263 param.ajouter("duree_intervalle", &duree_demandee_morceau_glissant_);
264 param.ajouter("v_init_guess", &v_cible_);
265 /* Entrees reprises */
266 param.ajouter("list_index", &list_index_);
267 param.ajouter("offset_list_index", &offset_list_index_);
268 param.ajouter("liste_instants", &liste_instants_);
269 param.ajouter("liste_v_cible_dl", &liste_v_cible_dl_);
270 param.ajouter("liste_v_cible", &liste_v_cible_);
271 param.ajouter("duree_effective_morceau_glissant", &duree_effective_morceau_glissant_);
272 param.ajouter("v_cible_en_cours", &v_cible_);
273 param.lire_avec_accolades(is);
274 return is;
275}
276
278{
279 list_index_=0;
280 offset_list_index_=0; /*è MOLTO IMPORTANTE lasciare il valore 0*/
281 liste_instants_.resize_array(0);
282 liste_v_cible_dl_.resize_array(0);
283 liste_v_cible_.resize_array(0);
284 rho_liq_=0;
285
286 tstep_=0;
287 time_=0;
288 timestep_=0;
289 v_cible_=0;
290 qdm_cible_=0;
293}
294
295void moyenne_glissante::set_time(double time, double time_step, int time_iteration)
296{
297 time_ = time;
298 tstep_ = time_iteration;
299 timestep_ = time_step;
300}
301void moyenne_glissante::compute_v_cible(double vitesse_relative)
302{
303 /* ******************************************
304 * time_ <= duree_morceau_glissant_ : la moyenne ne glisse pas encore
305 * *****************************************/
306 Cout << "time_" << time_ << finl;
307 Cout << "duree_demandee_morceau_glissant_" << duree_demandee_morceau_glissant_ << finl;
308 Cout << "list_index_ " << list_index_ << finl;
309 Cout << "tstep_ " << tstep_ << finl;
310 Cout << "offset_list_index_ " << offset_list_index_ << finl;
311 Cout << "liste_instants_.size_array()" << liste_instants_.size_array() << finl ;
312 Cout << "duree_effective_morceau_glissant_" << duree_effective_morceau_glissant_ << finl;
313 Cout << "v_cible_" << v_cible_ << finl;
314
316 {
317 Cout << "DEB : time_ <= duree_demandee_morceau_glissant_" << finl;
318 /* Construction des listes pour la moyenne */
319 liste_instants_.append_array(time_);
320 double v_cible_dl = vitesse_relative*timestep_;
321 liste_v_cible_dl_.append_array(v_cible_dl);
323
324
325 if (time_ != 0)
326 {
327 Cout << "time_ != 0 " << time_ << finl;
328 /* Construction de la moyenne au fur et a mesure */
329 const int i_last = liste_instants_.size_array()-1;
332 Cout << "liste_instants_.size_array()-1" << liste_instants_.size_array()-1 << finl;
333 }
334 else
335 {
336 Cout << "ELSE : time_ != 0 " << time_ << finl;
337 /* Instant initial, ou instant de reprise */
338 Cout << "v_cible_" << v_cible_ << finl;
339 v_cible_ += 0.;
340 }
341 Cout << "duree_effective_morceau_glissant_" << duree_demandee_morceau_glissant_ << finl;
342 Cout << "FIN : time_ <= duree_demandee_morceau_glissant_" << finl;
343 }
344 /* ******************************************
345 * time_ > duree_morceau_glissant_ : la moyenne glisse
346 * si on a rempli N+1 instants :
347 * v_c^n = { v_c^(n-1) T^(n-1) - vdt^(n-N) + vdt^n } / (t^n - t^(n-N) )
348 * OU => v_cible_^(mem.) liste_v_cible_dl_^(prem.) calc. mem. liste_instants_^(prem.)
349 * *****************************************/
351 {
352 const int len_list = liste_instants_.size_array();
353 Cout << time_ <<" > " << duree_demandee_morceau_glissant_ << finl;
354 Cout << "vitesse_relative" << vitesse_relative << finl;
355 Cout << "timestep_" << timestep_ << finl;
356 Cout << "liste_v_cible_dl_[list_index_]"<< liste_v_cible_dl_[list_index_] << finl;
357 Cout << "liste_instants_[list_index_]" << liste_instants_[list_index_] << finl;
359 Cout << "list_index_ " << list_index_ << finl;
360 Cout << "(list_index_+1)%len_list" << (list_index_+1)%len_list << finl;
361 Cout << "liste_v_cible_dl_[list_index_]"<< liste_v_cible_dl_[list_index_] << finl;
362 Cout << "liste_instants_[(list_index_+1)%len_list]" << liste_instants_[(list_index_+1)%len_list] << finl;
363 Cout << "(vitesse_relative)*timestep_" << (vitesse_relative)*timestep_<< finl;
364 /* With old time_interval_ */
368
369 /* Au lieu de decaler TOUT LE MONDE a gauche, un remplace la case d'indice j=(N_max+i)%N_max = i%N_max
370 * et apres on vient piocher la valeur tstep%N_max dans mes listes */
372 liste_v_cible_dl_[list_index_] = (vitesse_relative)*timestep_;
373 }
374}
375
377{
378 qdm_cible_ = alpha_liq*rho_liq_*v_cible_;
379}
380
381/////////////////////////////////////////////////////////////////////////////////////////
382// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ////////////////////////////////
383/////////////////////////////////////////////////////////////////////////////////////////
384
385Implemente_instanciable_sans_constructeur( correction_one_direction, "correction_one_direction", Objet_U ) ;
386
390 type_corr_(CONSIGNE_INITIALE), // plutot le mettre en consigne_initiale_ pour un usage par defaut
392 rho_vel_moyen_(0.),
393 rho_moyen_(0.),
394 alpha_l_(0.),
396 qdm_cible_(0.)
397{
398 // Ces membres sont initialises par le constructeur par defaut:
399 // parametres_cible_constante_.initialise();
400 // parametres_moyenne_par_morceaux_.initialise();
401 // parametres_moyenne_glissante_.initialise();
402}
403
404
406{
407 //Objet_U::printOn( os );
408 // TODO : Help, je ne sais pas faire l'operation inverse de get_type_corr_()
409 os << "{\n";
410 if ( get_type_corr()==CIBLE_CONSTANTE) os << " type_correction " << "cible_constante" << "\n";
411 if ( get_type_corr()==MOYENNE_PAR_MORCEAUX) os << " type_correction " << "moyenne_par_morceaux" << "\n";
412 if ( get_type_corr()==MOYENNE_GLISSANTE) os << " type_correction " << "moyenne_glissante" << "\n";
413 if ( get_type_corr()==REGIME_ETABLI) os << " type_correction " << "regime_etabli" << "\n";
414 if ( get_type_corr()==CONSIGNE_INITIALE) os << " type_correction " << "consigne_initiale" << "\n";
415 os << " parametres_cible_constante " << parametres_cible_constante_ << "\n"
416 << " parametres_moyenne_par_morceaux " << parametres_moyenne_par_morceaux_ << "\n"
417 << " parametres_moyenne_glissante " << parametres_moyenne_glissante_ << "\n"
418 << " parametres_consigne_initiale " << parametres_consigne_initiale_ << "\n";
419 os << " }\n" ;
420 return os;
421
422}
423
425{
426 //Objet_U::readOn( is );
427 Param param(que_suis_je());
428 param.ajouter("type_correction",&type_corr_);
429 param.dictionnaire("cible_constante", CIBLE_CONSTANTE);
430 param.dictionnaire("moyenne_par_morceaux", MOYENNE_PAR_MORCEAUX);
431 param.dictionnaire("moyenne_glissante", MOYENNE_GLISSANTE);
432 param.dictionnaire("regime_etabli", REGIME_ETABLI); // unused (29/06/2022)
433 param.dictionnaire("consigne_initiale", CONSIGNE_INITIALE);
434 param.ajouter("parametres_cible_constante",&parametres_cible_constante_);
435 param.ajouter("parametres_moyenne_par_morceaux",&parametres_moyenne_par_morceaux_);
436 param.ajouter("parametres_moyenne_glissante",&parametres_moyenne_glissante_);
437 param.ajouter("parametres_consigne_initiale",&parametres_consigne_initiale_);
438 param.lire_avec_accolades(is);
439 return is;
440}
441
450
455
464
465void correction_one_direction::set_time_for_correction(double time, double time_step, int time_iteration)
466{
467 // switch VOLONTAIREMENT NON UTILISE CAR DIMINUE LA LISIBILITE
469 {
471 }
473 {
474 parametres_moyenne_par_morceaux_.set_time(time,time_step,time_iteration);
475 }
476 else if ( get_type_corr()==MOYENNE_GLISSANTE)
477 {
478 parametres_moyenne_glissante_.set_time(time,time_step,time_iteration);
479 }
480 else if ( get_type_corr()==CONSIGNE_INITIALE)
481 {
482 parametres_consigne_initiale_.set_time(time_iteration);
483 }
484 else
485 Cerr << "Error, unknown type_correction_ "<< (int)get_type_corr() <<" for correction_perp_g" << finl;
486}
488{
489 rho_moyen_ = rho_moyen;
490 alpha_l_ = alpha_l;
491}
492
494{
495 rho_vel_moyen_ = rho_vel_moyen;
496}
497
498void correction_one_direction::set_mean_values_for_correction(double rho_vel_moyen, double rho_moyen, double alpha_l)
499{
500 rho_vel_moyen_ = rho_vel_moyen;
501 rho_moyen_ = rho_moyen;
502 alpha_l_ = alpha_l;
503}
504
506{
507
508 // switch VOLONTAIREMENT NON UTILISE CAR DIMINUE LA LISIBILITE
510 {
511 parametres_cible_constante_.compute_qdm_cible(alpha_l_);
512 qdm_cible_ = parametres_cible_constante_.get_qdm_cible();
513 }
515 {
518 }
519 else if ( get_type_corr()==MOYENNE_GLISSANTE)
520 {
524 }
525 else if ( get_type_corr()==CONSIGNE_INITIALE)
526 {
529 }
530 else
531 Cerr << "Error, unknown type_correction_ "<< (int)get_type_corr() <<" for correction_perp_g" << finl;
532
534}
535
540
542{
543 // switch VOLONTAIREMENT NON UTILISE CAR DIMINUE LA LISIBILITE
545 {
546 parametres_cible_constante_.set_rho_l(rho_l);
547 }
549 {
550 parametres_moyenne_par_morceaux_.set_rho_l(rho_l);
551 }
552 else if ( get_type_corr()==MOYENNE_GLISSANTE)
553 {
554 parametres_moyenne_glissante_.set_rho_l(rho_l);
555 }
556 else if ( get_type_corr()==CONSIGNE_INITIALE)
557 {
558 // no need for rho_l ?;
559 }
560 else
561 Cerr << "Error, unknown type_correction_ "<< (int)get_type_corr() <<" for correction_perp_g" << finl;
562}
563
565{
566 int need_to_compute_relative_velocity = 0;
567 // switch VOLONTAIREMENT NON UTILISE CAR FONCTIONNE SUR DES INT UNIQUEMENT, CE QUI DIMINUE LA LISIBILITE
569 {
570 need_to_compute_relative_velocity = parametres_cible_constante_.get_need_for_vl_vv();
571 }
573 {
574 need_to_compute_relative_velocity = parametres_moyenne_par_morceaux_.get_need_for_vl_vv();
575 }
576 else if ( get_type_corr()==MOYENNE_GLISSANTE)
577 {
578 need_to_compute_relative_velocity = parametres_moyenne_glissante_.get_need_for_vl_vv();
579 }
580 else if ( get_type_corr()==CONSIGNE_INITIALE)
581 {
582 need_to_compute_relative_velocity = parametres_consigne_initiale_.get_need_for_vl_vv();
583 }
584 else
585 Cerr << "Error, unknown type_correction_ "<< (int)get_type_corr() <<" for correction_perp_g" << finl;
586 return need_to_compute_relative_velocity;
587}
588
590{
591 vitesse_relative_ = vl_vv;
592}
593
595{
596 int need_to_compute_relative_velocity = 0;
597 // switch VOLONTAIREMENT NON UTILISE CAR FONCTIONNE SUR DES INT UNIQUEMENT, CE QUI DIMINUE LA LISIBILITE
599 {
600 need_to_compute_relative_velocity = parametres_cible_constante_.get_need_for_rho_l();
601 }
603 {
604 need_to_compute_relative_velocity = parametres_moyenne_par_morceaux_.get_need_for_rho_l();
605 }
606 else if ( get_type_corr()==MOYENNE_GLISSANTE)
607 {
608 need_to_compute_relative_velocity = parametres_moyenne_glissante_.get_need_for_rho_l();
609 }
610 else if ( get_type_corr()==CONSIGNE_INITIALE)
611 {
612 need_to_compute_relative_velocity = parametres_consigne_initiale_.get_need_for_rho_l();
613 }
614 else
615 Cerr << "Error, unknown type_correction_ "<< (int)get_type_corr() <<" for correction_perp_g" << finl;
616 return need_to_compute_relative_velocity;
617}
618
620{
621 // TODO : Si on ne veux corriger que dans une direction de l'espace,
622 // pas besoin de definir les correction des autres directions
623 int need_to_compute_correction_value = 1;
624// // switch VOLONTAIREMENT NON UTILISE CAR FONCTIONNE SUR DES INT UNIQUEMENT, CE QUI DIMINUE LA LISIBILITE
625// if ( get_type_corr()==CONSIGNE_INITIALE)
626// {
627// need_to_compute_correction_value = parametres_consigne_initiale_.get_need_to_compute_correction_value();
628// }
629//
630 return need_to_compute_correction_value;
631}
632
633/////////////////////////////////////////////////////////////////////////////////////////
634// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ////////////////////////////////
635/////////////////////////////////////////////////////////////////////////////////////////
636
637Implemente_instanciable_sans_constructeur( corrections_qdm, "corrections_qdm", Objet_U ) ;
638
640 type_(2) // type_ mis a none (-> NONE) par defaut
641{
642}
643
645{
646 //Objet_U::printOn( os );
647 // TODO : Help : je ne sais pas faire l'operation inverse de get_type
648 os << "{\n";
649 if (get_type_()==GR) os << "type " << " gr" << "\n";
650 if (get_type_()==GB) os << "type " << " gb" << "\n";
651 if (get_type_()==NONE_IJK) os << "type " << " none" << "\n";
652 if (write_me_) os << " write_infos " << "\n";
653 os << " correction_x " << correction_x_ << "\n"
654 << " correction_y " << correction_y_ << "\n"
655 << " correction_z " << correction_z_ << "\n";
656 os << " }\n" ;
657 return os;
658}
659
661{
662 //Objet_U::readOn( is );
663 Param param(que_suis_je());
664 param.ajouter("type",&type_);
665 param.dictionnaire("gb",GB);
666 param.dictionnaire("gr",GR);
667 param.dictionnaire("none",NONE_IJK);
668 param.ajouter_flag("write_infos",&write_me_);
669 param.ajouter("correction_x",&correction_x_ );
670 param.ajouter("correction_y",&correction_y_ );
671 param.ajouter("correction_z",&correction_z_ );
672 param.lire_avec_accolades(is);
673 return is;
674}
675
680
682 correction_one_direction& in_corr_y_,
683 correction_one_direction& in_corr_z_)
684{
685 correction_x_.set_correction(in_corr_x_);
686 correction_y_.set_correction(in_corr_y_);
687 correction_z_.set_correction(in_corr_z_);
688}
689
690void corrections_qdm::set_time(double time_, double time_step, int time_iteration)
691{
692 correction_x_.set_time_for_correction(time_, time_step, time_iteration);
693 correction_y_.set_time_for_correction(time_, time_step, time_iteration);
694 correction_z_.set_time_for_correction(time_, time_step, time_iteration);
695}
696
697void corrections_qdm::set_rho_moyen_alpha_l(double rho_moyen, double alpha_l)
698{
699 correction_x_.set_rho_moyen_alpha_l_for_correction(rho_moyen, alpha_l);
700 correction_y_.set_rho_moyen_alpha_l_for_correction(rho_moyen, alpha_l);
701 correction_z_.set_rho_moyen_alpha_l_for_correction(rho_moyen, alpha_l);
702}
703
704void corrections_qdm::set_rho_vel_moyen(int dir, double rho_vel_moyen)
705{
706 switch(dir)
707 {
708 case 0:
709 correction_x_.set_rho_vel_moyen_for_correction(rho_vel_moyen);
710 break;
711 case 1:
712 correction_y_.set_rho_vel_moyen_for_correction(rho_vel_moyen);
713 break;
714 case 2:
715 correction_z_.set_rho_vel_moyen_for_correction(rho_vel_moyen);
716 break;
717 default:
718 Cerr << "In corrections_qdm::compute_correction_one_direction, dir " << dir << " Error." << finl;
719 }
720}
721
722void corrections_qdm::set_mean_values_for_corrections(double rho_vel_moyen, double rho_moyen, double alpha_l)
723{
724 correction_x_.set_mean_values_for_correction(rho_vel_moyen, rho_moyen, alpha_l);
725 correction_y_.set_mean_values_for_correction(rho_vel_moyen, rho_moyen, alpha_l);
726 correction_z_.set_mean_values_for_correction(rho_vel_moyen, rho_moyen, alpha_l);
727}
728
730{
731 switch(dir)
732 {
733 case 0:
734 correction_x_.compute_correction_value();
735 break;
736 case 1:
737 correction_y_.compute_correction_value();
738 break;
739 case 2:
740 correction_z_.compute_correction_value();
741 break;
742 default:
743 Cerr << "In corrections_qdm::compute_correction_one_direction, dir " << dir << " Error." << finl;
744 }
745}
746
748{
749 switch(dir)
750 {
751 case 0:
752 correction_x_.compute_correct_velocity(vel_ijk_t);
753 break;
754 case 1:
755 correction_y_.compute_correct_velocity(vel_ijk_t);
756 break;
757 case 2:
758 correction_z_.compute_correct_velocity(vel_ijk_t);
759 break;
760 default:
761 Cerr << "In corrections_qdm::compute_correction_one_direction, dir " << dir << " Error." << finl;
762 }
763}
764
766{
767 /* Donne acces a correct_velocity_,
768 * -> correct_velocity_ = v_ijk_t - value_correction */
769 Vecteur3 correct_velocities;
770 correct_velocities[0] = correction_x_.get_correct_velocity();
771 correct_velocities[1] = correction_y_.get_correct_velocity();
772 correct_velocities[2] = correction_z_.get_correct_velocity();
773 return correct_velocities;
774}
775
777{
778 /* Donne acces a value_correction_,
779 * -> value_correction_ = (rho_vel_moyen_ - qdm_cible_) / rho_moyen_*/
780 Vecteur3 velocity_corrections;
781 velocity_corrections[0] = correction_x_.get_velocity_correction();
782 velocity_corrections[1] = correction_y_.get_velocity_correction();
783 velocity_corrections[2] = correction_z_.get_velocity_correction();
784 return velocity_corrections;
785}
786
788{
789 /* Donne acces a qdm_cible_,
790 * dont l'expression depend du type de correction choisi
791 * -> pour VITESSE_CIBLE : qdm_cible_ = alpha_l rho_l u_cible */
792 Vecteur3 correction_values;
793 correction_values[0] = correction_x_.get_correction_value();
794 correction_values[1] = correction_y_.get_correction_value();
795 correction_values[2] = correction_z_.get_correction_value();
796 return correction_values;
797}
798
800{
801 switch(dir)
802 {
803 case 0:
804 return correction_x_.get_correct_velocity();
805 case 1:
806 return correction_y_.get_correct_velocity();
807 case 2:
808 return correction_z_.get_correct_velocity();
809 default:
810 Cerr << "In corrections_qdm::compute_correction_one_direction, dir " << dir << " Error." << finl;
811 return 0.;
812 }
813}
814
816{
817 switch(direction)
818 {
819 case 0:
820 return correction_x_.get_need_for_vit_rel();
821 case 1:
822 return correction_y_.get_need_for_vit_rel();
823 case 2:
824 return correction_z_.get_need_for_vit_rel();
825 default:
826 Cerr << "In corrections_qdm::compute_correction_one_direction, dir " << direction << " Error." << finl;
827 return 0.;
828 };
829}
830
832{
833 switch(direction)
834 {
835 case 0:
836 return correction_x_.get_need_to_compute_correction_value();
837 case 1:
838 return correction_y_.get_need_to_compute_correction_value();
839 case 2:
840 return correction_z_.get_need_to_compute_correction_value();
841 default:
842 Cerr << "In corrections_qdm::compute_correction_one_direction, dir " << direction << " Error." << finl;
843 return 0.;
844 };
845}
846
847void corrections_qdm::set_vitesse_relative(int direction, double vl_vv)
848{
849 if (correction_x_.get_need_for_vit_rel() && direction==0)
850 {
851 correction_x_.set_vl_vv(vl_vv);
852 }
853 if (correction_y_.get_need_for_vit_rel() && direction==1)
854 {
855 correction_y_.set_vl_vv(vl_vv);
856 }
857 if (correction_z_.get_need_for_vit_rel() && direction==2)
858 {
859 correction_z_.set_vl_vv(vl_vv);
860 }
861}
862
863void corrections_qdm::set_rho_liquide(double rho_liquide)
864{
865 if (correction_x_.get_need_for_rho_liq())
866 {
867 correction_x_.set_rho_liq(rho_liquide);
868 }
869 if (correction_y_.get_need_for_rho_liq())
870 {
871 correction_y_.set_rho_liq(rho_liquide);
872 }
873 if (correction_z_.get_need_for_rho_liq())
874 {
875 correction_z_.set_rho_liq(rho_liquide);
876 }
877}
878
880{
881 if (type_ == GB)
882 return 1;
883 else
884 return 0;
885}
886
888{
889 if (type_ == GR)
890 return 1;
891 else
892 return 0;
893}
894
896{
897 if (type_ == NONE_IJK)
898 return 1;
899 else
900 return 0;
901}
902
904{return write_me_;}
905/////////////////////////////////////////////////////////////////////////////////////////
906// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ////////////////////////////////
907/////////////////////////////////////////////////////////////////////////////////////////
Class defining operators and methods for all reading operation in an input flow (file,...
Definition Entree.h:42
classe Objet_U Cette classe est la classe de base des Objets de TRUST
Definition Objet_U.h:73
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
Classe de base des flux de sortie.
Definition Sortie.h:52
: class cible_donnee
void compute_qdm_cible(double alpha_l)
: class consigne_initiale
void compute_qdm_cible(double qdm_initiale)
: class correction_one_direction
moyenne_glissante parametres_moyenne_glissante_
void set_rho_vel_moyen_for_correction(double rho_vel_moyen)
void set_vl_vv(double vl_vv)
type_correction get_type_corr() const
moyenne_glissante get_moyenne_glissante() const
cible_donnee get_cible_constante() const
moyenne_par_morceaux get_moyenne_par_morceaux() const
consigne_initiale get_consigne_initiale() const
void set_mean_values_for_correction(double rho_vel_moyen, double rho_moyen, double alpha_l)
moyenne_par_morceaux parametres_moyenne_par_morceaux_
void set_rho_liq(double rho_liquide)
consigne_initiale parametres_consigne_initiale_
cible_donnee parametres_cible_constante_
void set_rho_moyen_alpha_l_for_correction(double rho_moyen, double alpha_l)
void compute_correct_velocity(double vel_ijk_t)
void set_correction(correction_one_direction &correction_in)
void set_time_for_correction(double time, double time_step, int time_iteration)
: class corrections_qdm
Vecteur3 get_velocity_corrections()
double get_correct_velocitiy_one_direction(int dir)
void set_rho_liquide(double rho_liquide)
int get_need_for_vitesse_relative(int direction)
void set_mean_values_for_corrections(double rho_vel_moyen, double rho_moyen, double alpha_l)
correction_one_direction correction_z_
type_dict_ get_type_() const
int get_need_to_compute_correction_value_one_direction(int direction)
void set_rho_moyen_alpha_l(double rho_moyen, double alpha_l)
void set_corrections(correction_one_direction &in_corr_x_, correction_one_direction &in_corr_y_, correction_one_direction &in_corr_z_)
void compute_correction_value_one_direction(int dir)
Vecteur3 get_correct_velocities()
void set_rho_vel_moyen(int direction, double rho_vel_moyen)
correction_one_direction correction_y_
Vecteur3 get_correction_values()
correction_one_direction correction_x_
void set_vitesse_relative(int direction, double vitesse_relative)
void compute_correct_velocity_one_direction(int dir, double vel_ijk_t)
void set_time(double time, double time_step, int time_iteration)
int is_type_none() const
: class moyenne_glissante
void compute_qdm_cible(double alpha_liq)
void set_time(double time, double time_step, int time_iteration)
double compute_v_cible()
ArrOfDouble liste_instants_
double duree_effective_morceau_glissant_
ArrOfDouble liste_v_cible_
double duree_demandee_morceau_glissant_
ArrOfDouble liste_v_cible_dl_
: class moyenne_par_morceaux
void compute_qdm_cible(double alpha_l, double vitesse_relative)
void set_time(double time, double time_step, int time_iteration)