16#include <Champ_front_recyclage.h>
17#include <Interprete.h>
18#include <Probleme_base.h>
20#include <Domaine_VF.h>
21#include <Equation_base.h>
22#include <communications.h>
26#include <LecFicDiffuse.h>
27#include <EcrFicCollecte.h>
28#include <Champ_front_calc.h>
69 delt_dist.resize(dim,RESIZE_OPTIONS::NOCOPY_NOINIT);
101 param.lire_avec_accolades_depuis(is);
120 if (mot==
"pb_champ_evaluateur")
124 ampli_fluct_.resize(nbcomp,RESIZE_OPTIONS::NOCOPY_NOINIT);
132 else if (mot==
"distance_plan")
134 for (
int i=0; i<dimension; i++) is >>
delt_dist(i) ;
136 else if (mot==
"ampli_fluctuation")
144 else if (mot==
"ampli_moyenne_imposee")
152 else if (mot==
"ampli_moyenne_recyclee")
160 else if (mot==
"moyenne_imposee")
164 else if (mot==
"moyenne_recyclee")
240 les_mots[0] =
"profil";
241 les_mots[1] =
"interpolation";
242 les_mots[2] =
"connexion_approchee";
243 les_mots[3] =
"connexion_exacte";
244 les_mots[4] =
"logarithmique";
248 int rang = les_mots.
search(choix);
258 for (
int i=0; i<nc; i++)
279 int compt_mot_lu = 0;
280 while (compt_mot_lu!=4)
283 if (motlu==
"diametre")
285 else if (motlu==
"u_tau")
287 else if (motlu==
"visco_cin")
289 else if (motlu==
"direction")
293 Cerr<<
"The keyword "<<motlu<<
" is not recognized."<<finl;
299 Cerr<<
"Champ_front_recyclage : a positive diameter must be specified when a logarithmique injected averaged is used."<<finl;
304 Cerr<<
"Champ_front_recyclage : a positive shear velocity must be specified when a logarithmique injected averaged is used."<<finl;
309 Cerr<<
"Champ_front_recyclage : a positive kinematic viscosity must be specified when a logarithmique injected averaged is used."<<finl;
314 Cerr<<
"Champ_front_recyclage : the direction must be specified when a logarithmique injected averaged is used."<<finl;
323 Cerr<<
"Champ_front_recyclage::lire_info_moyenne_imposee : keyword "<<choix<<
" is not recognized."<<finl;
324 Cerr<<
"The recognized keywords are :"<<les_mots<<finl;
329 if ((methode == 2) || (methode == 3))
333 if (motlu!=
"fichier")
335 Cerr<<
"Champ_front_recyclage::lire_info_moyenne_imposee : at least one file must be provided for this method."<<finl;
347 if (motlu!=
"fichier")
349 Cerr<<
"Champ_front_recyclage::lire_info_moyenne_imposee : at least one file must be provided for this method."<<finl;
361 Cerr<<
"Champ_front_recyclage::lire_info_moyenne_imposee : no method to make average evaluation has been given."<<finl;
362 Cerr<<
"Choose among the following keywords : les_mots"<<finl;
380 les_mots[0] =
"surfacique";
381 les_mots[1] =
"interpolation";
382 les_mots[2] =
"connexion_approchee";
383 les_mots[3] =
"connexion_exacte";
386 int rang = les_mots.
search(choix);
413 Cerr<<
"Champ_front_recyclage::lire_info_moyenne_recyclee keyword "<<choix<<
" is not recognized."<<finl;
414 Cerr<<
"The recognized keywords are :"<<les_mots<<finl;
419 if ((methode == 2) || (methode == 3) || (methode == 4))
423 if (motlu!=
"fichier")
425 Cerr<<
"Champ_front_recyclage::lire_info_moyenne_recyclee : a file must be provided for this method."<<finl;
439 Cerr<<
"Champ_front_recyclage::lire_info_moyenne_recyclee : no method to make average evaluation has been given."<<finl;
440 Cerr<<
"Choose among the following keywords : les_mots"<<finl;
460 Cerr <<
"No problem named "<< un_nom_pb1 <<
" has been found."<< finl;
463 rch1 = pb1->get_champ(un_nom_inco1);
469 Cerr<<pb1->le_nom()<<
" has no unknown field named "<<un_nom_inco1<<finl;
484 const DoubleTab& xv2 = le_dom2.
xv();
485 const int nb_faces2 = fr_vf2.
nb_faces();
489 coords.
resize(nb_faces2,dim);
490 for (
int i = 0; i < nb_faces2; i++)
491 for (
int j = 0; j < dim; j++)
492 coords(i,j) = xv2(i+ndeb2,j) +
delt_dist(j);
510 int nb_faces_bord2 = fr_vf2.
nb_faces();
518 Cerr<<
"The number of fluctuation amplification factors is not coherent with the component number of the field "<<
nom_inco1<<finl;
519 Cerr<<
"This field has "<<
nb_compo_<<
" components and there is "<<
ampli_fluct_.size()<<
" amplification factors defined."<<finl;
520 Cerr<<
"Please check that ampli_fluctuation is well specified in your data set."<<finl;
526 Cerr<<
"The number of the amplification factors for the fixed average is not coherent with the component number of the field "<<
nom_inco1<<finl;
527 Cerr<<
"This field has "<<
nb_compo_<<
" components and there is "<<
ampli_moy_imposee_.size()<<
" amplification factors defined."<<finl;
528 Cerr<<
"Please check that ampli_moyenne_imposee is well specified in your data set."<<finl;
534 Cerr<<
"The number of the amplification factors for the recycled average is not coherent with the component number of the field "<<
nom_inco1<<finl;
536 Cerr<<
"Please check that ampli_moyenne_recyclee is well specified in your data set."<<finl;
540 Cerr <<
"Initializing Champ_front_recyclage on the boundary: " << nom_bord2 << finl;
545 const int nprocs =
nproc();
546 const int moi =
me();
552 DoubleTabs remote_coords(nprocs);
562 for (
int pe = 0; pe < nprocs; pe++)
563 envoyer_broadcast(remote_coords[pe],pe);
570 ArrsOfInt indexes_to_recv(nprocs);
576 const Domaine& domaine1 = l_inconnue1->equation().domaine_dis().domaine();
577 const int nb_elem_domaine1 = domaine1.
nb_elem();
578 const int dim = remote_coords[moi].
dimension(1);
582 const DoubleTab& xp = zvf.
xp();
583 DoubleVect remote_point(3);
586 for (
int pe = 0; pe < nprocs; pe++)
589 const DoubleTab& remote_coords_on_pe = remote_coords[pe];
590 int nb_faces_on_pe = remote_coords_on_pe.
dimension(0);
591 elem_list.
resize_tab(nb_faces_on_pe,RESIZE_OPTIONS::NOCOPY_NOINIT);
593 ArrOfInt elem_list_par_pos;
595 for (
int ind_face=0; ind_face<nb_faces_on_pe; ind_face++)
598 remote_point(j) = remote_coords_on_pe(ind_face,j);
601 octree.
rang_elems_sommet(elem_list_par_pos,remote_point(0),remote_point(1),remote_point(2));
602 int size_elem_list = elem_list_par_pos.
size_array();
604 if (size_elem_list==0)
605 elem_list[ind_face] = -1;
608 DoubleTrav coord_elems(size_elem_list,
dimension);
611 for (
int ind_elem=0; ind_elem<size_elem_list; ind_elem++)
613 int elem = elem_list_par_pos[ind_elem];
614 elems.add_if_not(elem);
616 coord_elems(ind_elem,dir) = xp(elem,dir);
619 if (size_elem_list==1)
622 elem_identifie = elems[0];
624 else if (size_elem_list==2 && norme_array(
delt_dist)==0)
630 if (local_elem==-1) local_elem = zvf.
face_voisins(local_face,1);
632 if (elems[0]==local_elem)
633 elem_identifie=elems[1];
634 else if (elems[1]==local_elem)
635 elem_identifie=elems[0];
647 elem_list[ind_face] = (elem_identifie < nb_elem_domaine1 ? elem_identifie : -1);
656 ArrOfInt& index_to_recv = indexes_to_recv[pe];
659 int nb_remote_faces = 0;
661 for (
int face = 0; face < nb_faces_on_pe; face++)
663 const int elem = elem_list[face];
664 if (elem < 0 || elem >= nb_elem_domaine1)
670 coord1.
resize(nb_remote_faces + 1, dim);
671 for (
int j = 0; j < dim; j++)
672 coord1(nb_remote_faces, j) = remote_coords_on_pe(face, j);
684 const int nb_faces2 = remote_coords[moi].
dimension(0);
685 ArrOfDouble count(nb_faces2);
686 for (
int pe = 0; pe < nprocs; pe++)
690 for (
int i = 0; i < n; i++)
691 count[index_to_recv[i]] ++;
694 bool error_1 =
false, error_2 =
false;
695 for (
int i = 0; i < nb_faces2; i++)
699 Journal() <<
"Champ_front_recyclage : error face (number "<< i<<
") " << remote_coords[moi](i, 0) <<
" " << remote_coords[moi](i, 1) <<
" "
700 << ((dim==3)?remote_coords[moi](i, 2):0.) <<
" no matching element found" << finl;
705 Journal() <<
"Champ_front_recyclage : error face (number "<< i<<
") " << remote_coords[moi](i, 0) <<
" " << remote_coords[moi](i, 1) <<
" "
706 << ((dim==3)?remote_coords[moi](i, 2):0.) <<
" " << count[i] <<
" corresponding points" << finl;
713 Cerr <<
"Error in Champ_front_recyclage.\n"
714 <<
"No matching source element found for some faces of boundary " << nom_bord2
715 <<
" (see log files)." << finl;
716 Cerr <<
"If you are sure that boundary faces match with faces of the other domain, try adding this keyword:" << finl;
717 Cerr <<
"PrecisionGeom 1.e-6" << finl;
718 Cerr <<
"Just after the following keyword in your data file:" << finl;
726 Cerr <<
"Error in Champ_front_recyclage.\n"
727 <<
"At least two elements match for some faces of boundary " << nom_bord2
728 <<
" (see log files)." << finl;
753 const int nprocs =
nproc();
754 DoubleTabs values_to_send(nprocs);
755 DoubleTabs values_to_recv(nprocs);
760 for (
int pe = 0; pe < nprocs; pe++)
765 const int n = elems.size_array();
772 envoyer_all_to_all(values_to_send, values_to_recv);
773 for (
int pe = 0; pe < nprocs; pe++)
775 const DoubleTab& values = values_to_recv[pe];
778 for (
int i = 0; i < n; i++)
780 const int idx = index_to_recv[i];
782 tab(idx, j) = values(i, j);
792 for (
int i=0; i<nb_faces2; i++)
813 profil_2[i].setNbVar(4);
815 profil_2[i].addVar(
"t");
816 profil_2[i].addVar(
"x");
817 profil_2[i].addVar(
"y");
818 profil_2[i].addVar(
"z");
819 profil_2[i].parseString();
838 const DoubleTab& xv2 = le_dom2.
xv();
841 double d_paroi,y_plus,U_log;
845 int num2 = num1 + nbface2;
848 for (
int num_face2=num1; num_face2<num2; num_face2++)
850 num_face_loc = num_face2-num1;
855 if(abs(
ndir)==1) d_paroi -= sqrt(xv2(num_face2,1)*xv2(num_face2,1) + xv2(num_face2,2)*xv2(num_face2,2));
856 if(abs(
ndir)==2) d_paroi -= sqrt(xv2(num_face2,0)*xv2(num_face2,0) + xv2(num_face2,2)*xv2(num_face2,2));
857 if(abs(
ndir)==3) d_paroi -= sqrt(xv2(num_face2,0)*xv2(num_face2,0) + xv2(num_face2,1)*xv2(num_face2,1));
861 if(abs(
ndir)==1) d_paroi -= sqrt(xv2(num_face2,1)*xv2(num_face2,1));
862 if(abs(
ndir)==2) d_paroi -= sqrt(xv2(num_face2,0)*xv2(num_face2,0));
866 U_log = (1./Kappa)*log(y_plus) + 5.1;
871 moyenne(num_face_loc,dir) = ((dir+1)==abs(
ndir))*U_log;
916 const DoubleTab& xv2 = le_dom2.
xv();
917 int nb_faces_bord2 = fr_vf2.
nb_faces();
920 for (
int i=0; i<nb_faces_bord2; i++)
923 profil_2[j].setVar(0,temps);
925 profil_2[j].setVar(d+1,xv2(ndeb+i,d));
943 Cerr<<
"The method used to calculate moyenne_imposee_ is not definded."<<finl;
963 int nb_faces_bord2 = fr_vf2.
nb_faces();
964 DoubleVect face_surfaces;
969 double somme_si = 0.;
971 for (
int i=0; i<nb_faces_bord2; i++)
974 moyenne(j) += tab(i,j)*face_surfaces(i);
976 somme_si += face_surfaces(i);
978 somme_si =
mp_sum(somme_si);
981 moyenne(j) =
mp_sum(moyenne(j));
984 for (
int i=0; i<nb_faces_bord2; i++)
999 Cerr<<
"The method used to calculate moyenne_recyclee_ is not defined."<<finl;
1020 while (!fich_Pb2.
eof())
1024 fich_Pb2 >> y_Pb2(l) >> U_Pb2(l);
1030 envoyer_broadcast(l,0);
1036 envoyer_broadcast(y_Pb2,0);
1037 envoyer_broadcast(U_Pb2,0);
1046 while ((y>y_Pb2(l)) && (l<nb_pts))
1063 if ( (y-y_Pb2(l-1)) > (y_Pb2(l)-y) )
1074 double ya=y_Pb2(l_deb);
1075 double Ua=U_Pb2(l_deb);
1076 double yb=y_Pb2(l_deb+1);
1077 double Ub=U_Pb2(l_deb+1);
1078 double yc=y_Pb2(l_deb+2);
1079 double Uc=U_Pb2(l_deb+2);
1082 U=(y-ya)*(y-yb)/(yc-ya)/(yc-yb)*Uc;
1083 U+=(y-yb)*(y-yc)/(ya-yb)/(ya-yc)*Ua;
1084 U+=(y-yc)*(y-ya)/(yb-yc)/(yb-ya)*Ub;
1098 const Nom& nom_fich)
1103 const int nb_faces2 = coords.
dimension(0);
1112 Cerr<<
"For this method the anisotropic direction mut be 1 2 or 3"<<finl;
1116 for (
int i=0; i<nb_faces2; i++)
1118 double y = coords(i,dir_ortho);
1119 moyenne(i,
ndir-1) =
UPb(y,nom_fich);
1135 const Nom& nom_fich)
1139 int num_face1, indice_compo;
1140 int num_face2, num_face2_loc;
1147 ifstream fic_Utargtest(nom_fich);
1150 Cerr <<
"No file of name : "<<nom_fich<<
" is available."<<finl;
1161 int num2 = num1 + fr_vf2.
nb_faces();
1164 const DoubleTab& xv2 = zvf2.
xv();
1166 for (num_face2=num1; num_face2<num2; num_face2++)
1168 x2 = xv2(num_face2,0);
1169 y2 = xv2(num_face2,1);
1170 if (
dimension==3) z2 = xv2(num_face2,2);
1171 num_face2_loc = num_face2-num1;
1176 for (num_face1=0; num_face1<N1; num_face1++)
1181 dist_eval = (x2-x1)*(x2-x1)+(y2-y1)*(y2-y1);
1182 if (
dimension==3) dist_eval+=(z2-z1)*(z2-z1);
1186 for (indice_compo=0; indice_compo<
nb_compo_; indice_compo++)
1189 if ((abs(
ndir)<4) && (abs(
ndir)>0))
1190 moyenne(num_face2_loc,abs(
ndir)-1) = val(abs(
ndir)-1);
1192 for (indice_compo=0; indice_compo<
nb_compo_; indice_compo++)
1193 moyenne(num_face2_loc,indice_compo) = val(indice_compo);
1208 const Nom& nom_fich1,
const Nom& nom_fich2)
1210 int Nbfaces,trouve,compteur;
1211 int num_face2,num_face2_loc;
1212 double x1=0.,y1=0.,z1=0.;
1213 double x2=0.,y2=0.,z2=0.;
1216 Nom fichier =
"VERIF_face_perio.";
1220 ifstream fic_geom_test(nom_fich2);
1223 Cerr <<
"No file of name : "<<nom_fich2<<
" is available."<<finl;
1227 ifstream fic_Umoy_test(nom_fich1);
1230 Cerr <<
"No file of name : "<<nom_fich1<<
" is available."<<finl;
1237 Cerr <<
"Error while reading the boundary condition " << fr_vf.
le_nom() << finl;
1238 Cerr <<
"You must define the keyword \"direction_anisotrope\"" << finl;
1245 Cerr <<
"Error while reading the boundary condition " << fr_vf.
le_nom() << finl;
1246 Cerr <<
"You must define the keyword \"direction_anisotrope\" with a direction different than 'z' in 2D" << finl;
1252 int num2 = num1 + fr_vf2.
nb_faces();
1255 const DoubleTab& xv2 = zvf2.
xv();
1260 fic_geom >> Nbfaces;
1261 fic_Umoy >> Nbfaces;
1262 ArrOfDouble fich_geom_buffer(Nbfaces*(
dimension+1));
1263 ArrOfDouble fich_Umoy_buffer(Nbfaces*(
dimension+1));
1269 for (num_face2=num1; num_face2<num2; num_face2++)
1271 x2 = xv2(num_face2,0);
1272 y2 = xv2(num_face2,1);
1273 if (
dimension==3) z2 = xv2(num_face2,2);
1274 num_face2_loc = num_face2-num1;
1280 while (compteur<Nbfaces)
1282 x1 = fich_geom_buffer[compteur*(
dimension+1)+1];
1283 y1 = fich_geom_buffer[compteur*(
dimension+1)+2];
1286 z1 = fich_geom_buffer[compteur*(
dimension+1)+3];
1287 if(abs(
ndir)==1 && (est_egal(y1,y2,eps)) && (est_egal(z1,z2,eps))) trouve=1;
1288 if(abs(
ndir)==2 && (est_egal(x1,x2,eps)) && (est_egal(z1,z2,eps))) trouve=1;
1289 if(abs(
ndir)==3 && (est_egal(x1,x2,eps)) && (est_egal(y1,y2,eps))) trouve=1;
1293 if(abs(
ndir)==1 && (est_egal(y1,y2,eps))) trouve=1;
1294 if(abs(
ndir)==2 && (est_egal(x1,x2,eps))) trouve=1;
1298 moyenne(num_face2_loc,0) = fich_Umoy_buffer[compteur*(
dimension+1)+1];
1299 moyenne(num_face2_loc,1) = fich_Umoy_buffer[compteur*(
dimension+1)+2];
1300 if (
dimension==3) moyenne(num_face2_loc,2) = fich_Umoy_buffer[compteur*(
dimension+1)+3];
1308 Cerr <<
" the face "<<num_face2<<
" with coordinates : x="<<x2<<
" y="<<y2;
1311 Cerr <<
"\n has no corresponding faces in "<<nom_fich2<<finl;
1317 fic <<
" num_face1 " << fich_geom_buffer[compteur*(
dimension+1)] <<
" " << x1 <<
" " << y1 <<
" " << z1 << finl;
1318 fic <<
" num_face2 " << num_face2 <<
" " << x2 <<
" " << y2 <<
" " << z2 << finl;
1323 fic <<
" num_face1 " << fich_geom_buffer[compteur*(
dimension+1)] <<
" " << x1 <<
" " << y1 << finl;
1324 fic <<
" num_face2 " << num_face2 <<
" " << x2 <<
" " << y2 << finl;
classe Ch_front_var_instationnaire_dep Cette classe abstraite represente un champ sur une frontiere,
int initialiser(double temps, const Champ_Inc_base &inco) override
Initialisation en debut de calcul.
classe Champ_base Cette classe est la base de la hierarchie des champs.
classe Champ_front_recyclage
ArrsOfInt inconnues2_faces_
void calcul_moyenne_recyclee(const DoubleTab &tab, double temps)
void calcul_moyenne_imposee(const DoubleTab &tab, double temps)
void initialiser_moyenne_imposee(DoubleTab &moyenne)
int initialiser(double temps, const Champ_Inc_base &inco) override
Initialisation en debut de calcul.
void lire_fichier_format2(DoubleTab &moyenne, const Frontiere_dis_base &fr_vf, const Nom &nom_fich)
int lire_info_moyenne_recyclee(Entree &is)
void associer_champ_evaluateur(const Nom &, const Motcle &)
void lire_fichier_format1(DoubleTab &moyenne, const Frontiere_dis_base &fr_vf, const Nom &nom_fich)
void initialiser_moyenne_recyclee(DoubleTab &moyenne)
int lire_info_moyenne_imposee(Entree &is)
DoubleVect ampli_moy_imposee_
DoubleVect ampli_moy_recyclee_
DoubleTab moyenne_recyclee_
int lire_motcle_non_standard(const Motcle &, Entree &) override
Lecture des parametres de type non simple d'un objet_U a partir d'un flot d'entree.
DoubleTabs inconnues1_coords_to_eval_
ArrsOfInt inconnues1_elems_
DoubleTab moyenne_imposee_
OBS_PTR(Champ_Inc_base) l_inconnue1
void set_param(Param ¶m) const override
void mettre_a_jour(double temps) override
NE FAIT RIEN, a surcharger.
double UPb(double y, Nom nom_fich)
static void get_coord_faces(const Frontiere_dis_base &fr_vf, DoubleTab &coords, const DoubleVect &delt_dist)
void lire_fichier_format3(DoubleTab &moyenne, const Frontiere_dis_base &fr_vf, const Nom &nom_fich1, const Nom &nom_fich2)
DoubleTab & valeurs_au_temps(double temps) override
Renvoie les valeurs au temps desire.
const OctreeRoot_t & construit_octree() const
static int identifie_item_unique(IntList &item_possible, DoubleTab &coord_possible, const DoubleVect &coord_ref)
double xv(int num_face, int k) const
double xp(int num_elem, int k) const
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.
Fichier en lecture Cette classe est a la classe C++ ifstream ce que la classe Entree est a la.
Ecriture dans un fichier Cette classe implemente les operateurs et les methodes virtuelles de la clas...
Class defining operators and methods for all reading operation in an input flow (file,...
void calculer_surfaces(DoubleVect_t &surf) const
Calcule la surface des faces.
virtual void fixer_nb_comp(int i)
Fixe le nombre de composantes du champ.
int num_premiere_face() const
const Nom & le_nom() const override
Donne le nom de l'Objet_U Methode a surcharger : renvoie "neant" dans cette implementation.
const Faces_t & faces() const
classe Frontiere_dis_base Classe representant une frontiere discretisee.
const Frontiere & frontiere() const
Renvoie la frontiere geometrique associee.
const Domaine_dis_base & domaine_dis() const
const Nom & le_nom() const override
Renvoie le nom de la frontiere geometrique.
static Objet_U & objet(const Nom &)
Voir Interprete_bloc::objet_global() BM: la classe Interprete n'est pas le meilleur endroit pour cett...
Cette classe implemente les operateurs et les methodes virtuelles de la classe EFichier de la facon s...
int get(int *ob, std::streamsize n) override
Une chaine de caractere (Nom) en majuscules.
Un tableau d'objets de la classe Motcle.
int search(const Motcle &t) const
class Nom Une chaine de caractere pour nommer les objets de TRUST
classe Objet_U Cette classe est la classe de base des Objets de TRUST
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.
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
void rang_elems_sommet(SmallArrOfTID_t &, double x, double y=0, double z=0) const
Helper class to factorize the readOn method of Objet_U classes.
void ajouter(const char *keyword, const int *value, Param::Nature nat=Param::OPTIONAL)
Register an integer parameter.
void ajouter_non_std(const char *keyword, const Objet_U *value, Param::Nature nat=Param::OPTIONAL)
Register a keyword handled by Objet_U::lire_motcle_non_standard.
classe Probleme_base C'est un Probleme_U qui n'est pas un couplage.
static Sortie & Journal(int message_level=0)
Renvoie un objet statique de type Sortie qui sert de journal d'evenements.
static int nproc()
renvoie le nombre de processeurs dans le groupe courant Voir Comm_Group::nproc() et PE_Groups::curren...
static double mp_sum(double)
Calcule la somme de x sur tous les processeurs du groupe courant.
static void barrier()
Synchronise tous les processeurs du groupe courant (attend que tous les processeurs soient arrives a ...
static int me()
renvoie mon rang dans le groupe de communication courant.
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
static int je_suis_maitre()
renvoie 1 si on est sur le processeur maitre du groupe courant (c'est a dire me() == 0),...
Classe de base des flux de sortie.
void append_array(_TYPE_ valeur)
_SIZE_ size_array() const
virtual void resize_tab(_SIZE_ n, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
void resize(_SIZE_ n, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
_SIZE_ dimension(int d) const
void resize(_SIZE_, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")