16#include <Pb_Couple_Optimisation_IBM.h>
17#include <Terme_Derivee_Forme_base.h>
18#include <Operateur_Diff_base.h>
19#include <Equation_IBM_proto.h>
20#include <Prepro_IBM_base.h>
21#include <Probleme_base.h>
30 Cerr <<
"<<<<<< Reading of Probleme_Couple_Optimisation_IBM " <<
le_nom() <<
" >>>>>>>>>>"<<finl;
33 if (motlu != Motcle(
"{"))
35 Cerr <<
"We expected { to start to read the Probleme_Couple" << finl;
39 while (motlu!=Motcle(
"}"))
45 Cerr <<
"We can associate problems to Probleme_Couple" << finl;
46 Cerr <<
"* either by \"associer prob_couple pb\" (in which case they are all in the same group)" << finl;
47 Cerr <<
"* either by the keyword \"groupes\" while reading the object Probleme_Couple" << finl;
48 Cerr <<
"but not both!" << finl;
52 LIST(LIST(Nom)) les_noms;
55 groupes.resize_array(les_noms.size());
56 for (
int i=0; i<les_noms.size(); i++)
59 for (
int j=0; j<les_noms[i].size(); j++)
61 Nom nom_pb=les_noms[i][j];
63 Probleme_base& pb=ref_cast(Probleme_base,ob);
68 else if (motlu==
"state_problem")
73 Probleme_base& pb_lu=ref_cast(Probleme_base,ob);
76 Cerr <<
"We define state problem as ... " << pb_etat_opt_->le_nom() << finl;
79 else if (motlu==
"adjoint_problem")
84 Probleme_base& pb_lu=ref_cast(Probleme_base,ob);
87 Cerr <<
"We define adjoint problem as ... " << pb_adjt_opt_->le_nom() << finl;
90 else if (motlu==
"projection_problem")
95 Probleme_base& pb_lu=ref_cast(Probleme_base,ob);
96 pb_projection_opt_ = pb_lu;
98 Cerr <<
"We define projection problem as ... " << pb_projection_opt_->le_nom() << finl;
99 if ( (pb_projection_opt_->que_suis_je() !=
"Pb_Conduction") && (pb_projection_opt_->que_suis_je() !=
"Pb_Conduction_IBM"))
101 Cerr <<
"Projection problem is not of type Pb_Conduction or Pb_Conduction_IBM : "<<pb_projection_opt_->que_suis_je()<<finl;
104 if ( pb_projection_opt_->nombre_d_equations() != 1 )
106 Cerr<<
"Pb_Couple_Optimisation_IBM : nb equation != 1 for projection problem."<<finl;
111 else if (motlu==
"objective_function")
115 fonction_cout_lu_.typer(type);
116 Champ_Don_base& ch_fonction_cout_lu = ref_cast(Champ_Don_base,fonction_cout_lu_.valeur());
117 is >> ch_fonction_cout_lu;
118 const int nb_comp = ch_fonction_cout_lu.
nb_comp();
121 Cerr<<
"Pb_Couple_Optimisation_IBM : dimension objective_function != 1 ."<<finl;
124 fonction_cout_lu_->fixer_nb_comp(nb_comp);
125 if (ch_fonction_cout_lu.
le_nom()==
"anonyme") ch_fonction_cout_lu.
nommer(
"fonction_cout");
126 for (
int n = 0; n < nb_comp; n++) fonction_cout_lu_->fixer_nom_compo(n, ch_fonction_cout_lu.
le_nom() + (nb_comp > 1 ? Nom(n) :
""));
129 else if (motlu==
"objective_function_visualization")
134 else if (motlu==
"IBM_moving_parameter")
137 Cerr <<
"IBM_moving_parameter = " <<
alpha_ << finl;
140 else if (motlu==
"ponderation_shap_deriv_for_projection")
146 else if (motlu==
"PDF_regularization_for_shape_deriv")
151 else if (motlu==
"area_constraints_low_high")
159 Cerr <<
"We expected state_problem, adjoint_problem, projection_problem, objective_function, objective_function_visualization, IBM_moving_parameter, ponderation_shap_deriv_for_projection, PDF_regularization_for_shape_deriv, deplacement_vector_visualization or area_constraints_low_high" << finl;
168 Cerr <<
"We expected three problems: the state_problem, the adjoint_problem and the projection_problem" << finl;
171 Cerr <<
"<<<<<<<<< End of reading of Probleme_Couple_Optimisation_IBM >>>>>>>>>>"<<finl;
186 Cerr<<
"(IBM) Pb_Couple_Optimisation_IBM : no detected state problem."<<finl;
187 Cerr<<
"Case not supported"<<finl;
188 Cerr<<
"Aborting..."<<finl;
192 int nb_source_pdf = 0;
195 Cerr<<
"(IBM) Pb_Couple_Optimisation_IBM : search for the Source_PDF in the "<<pb_etat_opt_->nombre_d_equations()<<
" equation(s) of the state problem "<<pb_etat_opt_->le_nom()<<finl;
196 for (
int i = 0; i <pb_etat_opt_->nombre_d_equations() ; i++)
198 Cerr<<
"Equation : "<<pb_etat_opt_->equation(i).le_nom()<<finl;
199 if(pb_etat_opt_->equation(i).que_suis_je().finit_par(
"IBM"))
204 if (id_source_pdf == -1)
206 Cerr<<
"Pb_Couple_Optimisation_IBM : Source_PDF not detected in IBM equation."<<finl;
207 Cerr <<
"Either this source term is missing or not read again !!!"<< finl;
208 Cerr<<
"Aborting..."<<finl;
213 my_source_PDF_opt_ = src;
217 Cerr<<
"Model_PDF with bilan_PDF <> 0. Exit."<<finl;
229 Cerr<<
"Pb_Couple_Optimisation_IBM : no IBM equation detected."<<finl;
230 Cerr<<
"The state problem needs one IBM equation"<<finl;
231 Cerr<<
"Aborting..."<<finl;
237 Cerr<<
"Pb_Couple_Optimisation_IBM : more than one Source_PDF detected in state problem."<<finl;
238 Cerr<<
"Case not supported"<<finl;
239 Cerr<<
"Aborting..."<<finl;
242 else if (nb_source_pdf>0)
244 Cerr<<
"(IBM) Pb_Couple_Optimisation_IBM : one Source_PDF detected in state problem."<<finl;
248 Cerr<<
"Pb_Couple_Optimisation_IBM : no Source_PDF detected."<<finl;
249 Cerr<<
"It needs one Source_PDF in state problem"<<finl;
250 Cerr<<
"Aborting..."<<finl;
254 const int exist_interp = my_source_PDF_opt_->getInterpolationBool();
255 if (exist_interp) my_interpolation_opt_ = my_source_PDF_opt_->getInterpolationLu();
256 if (my_interpolation_opt_)
258 Cerr<<
"(IBM) Pb_Couple_Optimisation_IBM : interpolation detected."<<finl;
261 my_prepro_opt_ = my_source_PDF_opt_->getpreproLu();
264 Cerr<<
"(IBM) Pb_Couple_Optimisation_IBM : prepro_IBM detected for state equ."<<finl;
268 Cerr<<
"(IBM) Pb_Couple_Optimisation_IBM : prepro_IBM is missing for state equ."<<finl;
274 Cerr<<
"(IBM) Pb_Couple_Optimisation_IBM : the state pb and the adjoint pb are of different type."<<finl;
282 if (id_source_pdf_adj == -1)
284 Cerr<<
"Pb_Couple_Optimisation_IBM : Source_PDF not detected in adjoint IBM equation."<<finl;
285 Cerr <<
"Either this source term is missing or not read again !!!"<< finl;
286 Cerr<<
"Aborting..."<<finl;
290 my_source_PDF_opt_adjt_ = src_adj;
294 const int exist_interp_adjt = my_source_PDF_opt_adjt_->getInterpolationBool();
295 if (exist_interp_adjt) my_interpolation_opt_adjt_ = my_source_PDF_opt_adjt_->getInterpolationLu();
296 if (my_interpolation_opt_adjt_)
298 Cerr<<
"(IBM) Pb_Couple_Optimisation_IBM : interpolation detected for adjoint problem."<<finl;
304 int size_s = sources_proj.size();
305 if(size_s == 0) { Cerr<<
"Pb_Couple_Optimisation_IBM::solveTimeStep : no source for projection problem."<<finl;
abort();};
308 Nom type =
"Derivee_Forme";
316 for (
int nsrc=0; nsrc<size_s; nsrc++)
318 Source_base& ma_source = sources_proj(nsrc).valeur();
323 Cerr<<
"Pb_Couple_Optimisation_IBM : no source for projection problem is of type derivee_forme."<<finl;
330 pb_projection_opt_->discretisation().discretiser_champ(
"champ_elem",le_dom_dis,
"source_derivee_forme",
"",1,0., source_derivee_forme_);
331 DoubleTab& sourceArray = source_derivee_forme_->valeurs();
335 pb_projection_opt_->discretisation().discretiser_champ(
"champ_elem",le_dom_dis,
"normal_derivee_forme",
"",3,0., normal_derivee_forme_);
336 DoubleTab& normSourceArray = normal_derivee_forme_->valeurs();
337 normSourceArray = 0.;
341 if (fonction_cout_lu_)
344 const int nb_comp = ch_fonction_cout_lu.
nb_comp();
345 pb_projection_opt_->discretisation().discretiser_champ(
"champ_elem",le_dom_dis,
"fonction_cout",
"",nb_comp,0.,
fonction_cout_);
346 for (
int n = 0; n < nb_comp; n++)
fonction_cout_->fixer_nom_compo(n, ch_fonction_cout_lu.
le_nom() + (nb_comp > 1 ?
Nom(n) :
""));
355 pb_projection_opt_->discretisation().discretiser_champ(
"champ_elem",le_dom_dis,
"fonction_cout",
"",1,0.,
fonction_cout_);
361 Cerr<<
"Shape optimization coupled problem :";
370 int nb_elem = le_dom_dis.
nb_elem();
374 bool level_set = my_source_PDF_opt_->get_modele().get_use_pseudo_level_set_moving_PDF();
376 const Domaine& dom = le_dom_dis.
domaine();
379 const IntTab& elem_face = the_dom_VF.
elem_faces();
382 int nb_dof_elem = nb_faces_elem;
384 if (pb_projection_opt_->equation(0).discretisation().is_ef())
388 else if (!(pb_projection_opt_->equation(0).discretisation().is_vdf()) && !(pb_projection_opt_->equation(0).discretisation().is_vef()))
390 Cerr<<
"(IBM) Pb_Couple_Optimisation_IBM::calcul_derivee_forme_IBM: discretisation is not EF, VEF or VDF. Aborting... "<<pb_projection_opt_->equation(0).discretisation()<<finl;
392 const IntTab& elems = (pb_projection_opt_->equation(0).discretisation().is_ef() ? dom.
les_elems() : the_dom_VF.
elem_faces());
395 if (fonction_cout_lu_)
397 fonction_cout_lu_->mettre_a_jour(temps);
403 DoubleTab& normSourceArray = normal_derivee_forme_->valeurs();
404 const DoubleTab& deplacement_scalaire = pb_projection_opt_->equation(0).inconnue().valeurs();
405 int dim0 = (level_set ? deplacement_scalaire.
dimension(0) : normSourceArray.
dimension(0));
406 DoubleTab vecteur_deplacement(dim0, normSourceArray.
dimension(1));
409 int relev_vois_e = 0;
411 vecteur_deplacement = 0.;
412 DoubleTrav contrib_i(dim0);
413 for (
int e=0; e<normSourceArray.
dimension(0); e++)
416 for (
int k=0; k<normSourceArray.
dimension(1); k++) norm += normSourceArray(e,k)*normSourceArray(e,k);
419 for (
int il=0; il<nb_dof_elem; il++)
422 for (
int k=0; k<vecteur_deplacement.
dimension(1); k++) vecteur_deplacement(i,k) += normSourceArray(e,k);
428 for (
int fac=0; fac<nb_faces_elem; fac++)
430 int num_fac = elem_face(e, fac);
431 for (
int voisin=0; voisin<2; voisin++)
433 int elem_voi = face_voisins(num_fac,voisin);
434 if ( (elem_voi!=-1) && (elem_voi!=e) )
437 for (
int k=0; k<normSourceArray.
dimension(1); k++) norm += normSourceArray(elem_voi,k)*normSourceArray(elem_voi,k);
440 for (
int il_v=0; il_v<nb_dof_elem; il_v++)
442 int i_v = elems(elem_voi,il_v);
443 for (
int k=0; k<vecteur_deplacement.
dimension(1); k++) vecteur_deplacement(i_v,k) += normSourceArray(e,k);
444 contrib_i(i_v) += 1.;
453 for (
int i=0; i<dim0; i++)
455 if (contrib_i(i) >0.)
458 for (
int k=0; k<vecteur_deplacement.
dimension(1); k++) nor_nor += (vecteur_deplacement(i,k)/contrib_i(i))*(vecteur_deplacement(i,k)/contrib_i(i));
459 if (nor_nor > 1.e-10)
460 for (
int k=0; k<vecteur_deplacement.
dimension(1); k++) vecteur_deplacement(i,k) /= sqrt(nor_nor);
467 for (
int e=0; e<dim0; e++)
469 for (
int k=0; k<vecteur_deplacement.
dimension(1); k++) vecteur_deplacement(e,k) = normSourceArray(e,k);
473 bool iShapDeplOK =
false;
476 if (temps >= pdtps &&
alpha_ > 0.)
478 Cerr<<
"(IBM) Pb_Couple_Optimisation_IBM : updating the shape following shape displacements"<<finl;
479 const DoubleTab& aire = my_source_PDF_opt_->get_champ_aire().valeurs();
481 for (
int e=0; e<nb_elem; e++)
482 if (aire(e)>0.) bilan += aire(e);
483 Cerr<<
"(IBM) Area balance before shape moving = "<<bilan<<finl;
486 const DoubleTab& h_max_elem = (level_set ? my_prepro_opt_->get_h_max_node() : my_prepro_opt_->get_h_max_elem());
489 double deplacement_scalaire_e;
490 for (
int e=0; e<vecteur_deplacement.
dimension(0); e++)
495 deplacement_scalaire_e = deplacement_scalaire(e);
500 deplacement_scalaire_e =0.;
501 for (
int il=0; il<nb_dof_elem; il++)
504 deplacement_scalaire_e += deplacement_scalaire(i) / nb_dof_elem;
507 double abs_depl = abs(deplacement_scalaire_e);
508 double sign_depl = 0.;
509 if (abs_depl > 1.e-10) sign_depl = deplacement_scalaire_e / abs_depl;
510 double min_en_depl = min(abs_depl *
alpha_, h_max_elem(e)) * sign_depl;
511 for (
int k=0; k<vecteur_deplacement.
dimension(1); k++) vecteur_deplacement(e,k) *= min_en_depl;
515 else vecteur_deplacement *= 0.;
518 DoubleTrav vitesse_deplacement(normSourceArray);
521 const DoubleTab& aire = my_source_PDF_opt_->get_champ_aire().valeurs();
522 for (
int e=0; e<normSourceArray.
dimension(0); e++)
524 for (
int il=0; il<nb_dof_elem; il++)
527 for (
int k=0; k<vecteur_deplacement.
dimension(1); k++) vitesse_deplacement(e,k) += vecteur_deplacement(i,k)*(aire(e)>0.?1.:0.) / nb_dof_elem;
533 for (
int e=0; e<vecteur_deplacement.
dimension(0); e++)
535 for (
int k=0; k<vecteur_deplacement.
dimension(1); k++) vitesse_deplacement(e,k) = vecteur_deplacement(e,k) ;
538 vitesse_deplacement /= pdtps;
539 PDF_model& pdf_mod_etat = ref_cast_non_const(
PDF_model, my_source_PDF_opt_->get_modele());
545 double raid = my_source_PDF_opt_->get_modele().raid();
547 my_source_PDF_opt_->update_pseudo_level_set_IBM(vecteur_deplacement, 1.0);
549 my_source_PDF_opt_->update_elem_IBM(vecteur_deplacement, 1.0, raid);
551 const DoubleTab& aire = my_source_PDF_opt_->get_champ_aire().valeurs();
553 for (
int e=0; e<nb_elem; e++) bilan += aire(e);
558 Cerr<<
"(IBM) Reference area balance after first shape moving = "<<bilan<<finl;
562 Cerr<<
"(IBM) Area balance after shape moving = "<<bilan<<finl;
566 Cerr<<
"(IBM) Area constraint: shape moving is stopped. Percent = "<<(bilan/
area_ref_ )<<finl;
573 my_source_PDF_opt_adjt_->get_fields_from_prepro(my_prepro_opt_);
574 if(my_source_PDF_opt_adjt_->getInterpolationBool() ==
true)
579 my_source_PDF_opt_adjt_->set_variable_imposee();
603 Cerr<<
"(IBM) Pb_Couple_Optimisation_IBM : update of shape derivative term in projection eq." <<finl;
605 my_source_PDF_opt_->compute_source_term_PDF(my_bilan);
606 my_source_PDF_opt_adjt_->compute_source_term_PDF(my_bilan);
613 DoubleTab& sourceDFArray = source_derivee_forme_->valeurs();
616 for (
int i=0; i<sourceEqArray.
dimension(0); i++)
622 ma_source_DF_eq.
mettre_a_jour(pb_projection_opt_->equation(0).probleme().schema_temps().temps_courant());
637 DoubleTab& sourceArray = source_derivee_forme_->valeurs();
638 DoubleTab& normSourceArray = normal_derivee_forme_->valeurs();
640 DoubleTab coutArray(fonctCout);
643 const Champ_Don_base& champ_aire = my_source_PDF_opt_->get_champ_aire();
644 const DoubleTab& aire = champ_aire.
valeurs();
645 const DoubleTab& edp_val_i = my_source_PDF_opt_->get_source_pdf();
646 const DoubleTab& adjoint = pb_adjt_opt_->equation(
Numero_eq_optimis_).inconnue().valeurs();
647 const int interp_adjoint = my_source_PDF_opt_adjt_->getInterpolationBool();
654 assert(nb_comp<=dim_esp);
657 const Domaine& dom = le_dom_dis.
domaine();
659 int nb_elem = le_dom_dis.
nb_elem();
667 int nb_dof_elem = nb_faces_elem;
673 nb_dof_elem = nb_som_elem;
678 Cerr<<
"(IBM) Pb_Couple_Optimisation_IBM::calcul_derivee_forme_IBM: discretisation is not EF, VEF or VDF. Aborting... "<<pb_adjt_opt_->equation(
Numero_eq_optimis_).discretisation()<<finl;
681 DoubleTrav nor(nb_dof, dim_esp);
682 DoubleTrav dist(nb_dof);
683 my_prepro_opt_->calculer_normal_proj_solid(nor, dist);
684 IntLists elem_voisins(nb_elem_tot);
685 DoubleTab& aire_ncst = ref_cast_non_const(DoubleTab, aire);
686 bool all_elem_vois =
true;
687 my_source_PDF_opt_->compute_NeighNode_IBM_elem(aire_ncst, elem_voisins, all_elem_vois);
690 DoubleTrav weight(nb_dof);
692 for (
int e=0; e<nb_elem; e++)
696 for (
int il=0; il<nb_dof_elem; il++)
706 normSourceArray = 0.;
708 double regualpha_i=1.;
711 double PDF_contr_min = 1.e+30;
712 double PDF_contr_max = -1.e+30;
713 double cout_contr_min = 1.e+30;
714 double cout_contr_max = -1.e+30;
716 double lim_n = 0. - lim_p;
717 DoubleTrav nor_e(1, dim_esp);
719 for (
int e=0; e<nb_elem; e++)
724 for (
int il=0; il<nb_dof_elem; il++)
729 double ps_edp_i = 0.;
732 for (
int nc=0; nc<nb_comp; nc++)
733 if(interp_adjoint) ps_edp_i += regualpha_i * edp_val_i(i,nc) * adjoint(i,nc) / weight(i);
734 else ps_edp_i += regualpha_i * edp_val_i(i,nc) / weight(i);
739 for (
int k=0; k<dim_esp; k++) nor_e(0, k) += nor(i, k)*ps_edp_i;
741 else if (is_face_dis)
743 for (
int no=0; no<nb_som_face; no++)
745 int inode = faces_som(i, no);
746 for (
int k=0; k<dim_esp; k++) nor_e(0, k) += nor(inode, k)*ps_edp_i;
753 for (
int k=0; k<dim_esp; k++) d1 += nor_e(0, k)*nor_e(0, k);
756 for (
int k=0; k<dim_esp; k++) normSourceArray(e, k) = nor_e(0, k) / d1 ;
758 sourceArray(e,0) = std::min(d1, lim_p);
759 if (sourceArray(e,0) < PDF_contr_min) PDF_contr_min = sourceArray(e,0);
760 if (sourceArray(e,0) > PDF_contr_max) PDF_contr_max = sourceArray(e,0);
765 int nb_elem_voi = elem_voisins[e].
size();
768 double meanCout_pos = 0.;
769 double meanCout_neg = 0.;
770 if (nb_elem_voi != 0)
772 for (
int voi=0; voi<nb_elem_voi; voi++)
776 if (aire((elem_voisins[e])[voi]) <= 0.)
778 int elem_voi = (elem_voisins[e])[voi];
781 double ps_voi_ref = 0.;
783 for (
int il=0; il<nb_dof_elem; il++)
785 int i = elems(elem_voi,il);
787 for (
int k=0; k<dim_esp; k++) ps_voi_i += nor(i, k) * normSourceArray(e,k) ;
788 if (iok == 0 && ps_voi_i != 0.)
790 ps_voi_ref = ps_voi_i;
793 if (ps_voi_ref*ps_voi_i < 0)
801 if (iok == 1 && ps_voi_ref > 0.)
804 meanCout_pos += fonctCout(elem_voi,0);
806 else if (iok == 1 && ps_voi_ref<0.)
809 meanCout_neg += fonctCout(elem_voi,0);
814 if (ps_pos != 0 && ps_neg != 0)
815 coutArray(e,0) = std::max(std::min(meanCout_pos/ps_pos - meanCout_neg/ps_neg, lim_p), lim_n);
816 else coutArray(e,0) = 0.;
818 if (coutArray(e,0) < cout_contr_min) cout_contr_min = coutArray(e,0);
819 if (coutArray(e,0) > cout_contr_max) cout_contr_max = coutArray(e,0);
830 for (
int e=0; e<nb_elem; e++)
837 double source = sourceArray(e,0) ;
838 double coutsd = coutArray(e,0) ;
839 sourceArray(e,0) = source - coutsd;
840 bilan += sourceArray(e,0);
846 Cerr<<
"(IBM) Pb_Couple_Optimisation_IBM::calcul_derivee_forme_IBM: Balance (// Balance) = ";
847 Cerr<<bilan<<
" "<<
mp_sum(bilan)<<finl;
852 const Domaine& le_dom = pb_projection_opt_.valeur().domaine();
857 int step=int(temps_ecoule/dt_impr);
859 Nom nom_fichier_med_Out_ =
"objective_function.med";
870 Noms nom_cout(nb_comp);
871 Noms unites_cout(nb_comp);
872 for (
int k=0; k<nb_comp; k++) unites_cout[k] =
"-";
873 for (
int k=0; k<nb_comp; k++) nom_cout[k] =
"-";
874 ecr_med_fonction_cout_.ecrire_champ(
"CHAMPMAILLE",
"objective_function", fcout, unites_cout, nom_cout, type_elem, temps);
classe Champ_Don_base classe de base des Champs donnes (non calcules)
DoubleTab & valeurs() override
Surcharge Champ_base::valeurs() Renvoie le tableau des valeurs.
const Probleme_U & probleme(int i) const
void suppProblem(Probleme_U &)
void addProblem(Probleme_U &)
void nommer_completer_champ_physique(const Domaine_dis_base &domaine_vdf, const Nom &nom_champ, const Nom &unite, Champ_base &champ, const Probleme_base &pbi) const
virtual bool is_ef() const
virtual bool is_vdf() const
virtual bool is_vef() const
int nb_som_elem() const
Renvoie le nombre de sommets des elements geometriques constituants le domaine.
int nb_faces_elem(int=0) const
Renvoie le nombre de face de type i des elements geometriques constituants le domaine.
int face_sommets(int i, int j) const
renvoie le numero du ieme sommet de la face num_face.
int nb_som_face() const
renvoie le nombre de sommets par face.
int elem_faces(int i, int j) const
renvoie le numero de le ieme face de la maille num_elem la facon dont ces faces sont numerotees est
int face_voisins(int num_face, int i) const
renvoie l'element voisin de numface dans la direction i.
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.
const Domaine & domaine() const
Class defining operators and methods for all reading operation in an input flow (file,...
int get_i_source_pdf() const
classe Equation_base Le role d'une equation est le calcul d'un ou plusieurs champs....
Sources & sources()
Renvoie les termes sources asssocies a l'equation.
const Discretisation_base & discretisation() const
Renvoie la discretisation associee a l'equation.
Probleme_base & probleme()
Renvoie le probleme associe a l'equation.
Domaine_dis_base & domaine_dis()
Renvoie le domaine discretise associe a l'equation.
const Nom & le_nom() const override
Renvoie le nom du champ.
void nommer(const Nom &) override
Donne un nom au champ.
virtual int nb_comp() const
virtual void set_fields_from_prepro_to_interp(Prepro_IBM_base &)
static Objet_U & objet(const Nom &)
Voir Interprete_bloc::objet_global() BM: la classe Interprete n'est pas le meilleur endroit pour cett...
class Nom Une chaine de caractere pour nommer les objets de TRUST
Un tableau de chaine de caracteres (VECT(Nom)).
const Nom & que_suis_je() const
renvoie la chaine identifiant la classe.
virtual Entree & readOn(Entree &)
Lecture d'un Objet_U sur un flot d'entree Methode a surcharger.
Objet_U()
Constructeur par defaut : attribue un numero d'identifiant unique a l'objet (object_id_),...
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
void set_PDF_mobile(bool the_flag)
void discretiser_vitesse_shape_IBM(const Probleme_base &)
void set_vitesse_shape_IBM(DoubleTab &it)
double pond_shap_deriv_for_proj_
Ecrire_MED ecr_med_fonction_cout_
void calcul_derivee_forme_IBM()
bool solveTimeStep() override
pour recodage eventuel et appel unifie en python
int regul_PDF_shape_deriv_
int Numero_src_deriv_form_
bool initTimeStep(double) override
This method allocates and initializes the unknown and given fields for the future time step.
void Save_Med_File_fonction_cout(DoubleTab &)
double modif_aire_pc_low_
double modif_aire_pc_high_
void initialize() override
This method is called once at the beginning, before any other one of the interface Problem.
classe Probleme_Couple C'est la classe historique de couplage de TRUST.
bool initTimeStep(double dt) override
This method allocates and initializes the unknown and given fields for the future time step.
void initialize() override
This method is called once at the beginning, before any other one of the interface Problem.
bool solveTimeStep() override
pour recodage eventuel et appel unifie en python
void ajouter(Probleme_base &)
Ajoute un probleme a la liste des problemes couples.
const Nom & le_nom() const override
Donne le nom de l'Objet_U Methode a surcharger : renvoie "neant" dans cette implementation.
static void abort()
Routine de sortie de Trio-U sur une erreur abort().
static double mp_sum(double)
Calcule la somme de x sur tous les processeurs du groupe courant.
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
double temps_courant() const
Renvoie le temps courant.
double temps_impr() const
Renvoie une reference sur le temps d'impression.
double temps_calcul() const
Renvoie le temps de calcul ecoule i.
double pas_de_temps() const
Renvoie le pas de temps (delta_t) courant.
int nb_pas_dt() const
Renvoie le nombre de pas de temps effectues.
Classe de base des flux de sortie.
class Source_PDF_base Base class for the source terms for the penalisation of the momentum in the Imm...
const PDF_model & get_modele() const
classe Source_base Un objet Source_base est un terme apparaissant au second membre d'une
class Sources Sources represente une liste de Source.
_SIZE_ dimension(int d) const
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")