142 DoubleTab& resu)
const
149 int nb_front_Cl=le_domaine->nb_front_Cl();
150 DoubleTab& flux_bords=op_base->flux_bords();
151 for (; num_cl<nb_front_Cl; num_cl++)
154 const Cond_lim& la_cl = la_zcl->les_conditions_limites(num_cl);
157 nfin = ndeb + frontiere_dis.
nb_faces();
161 if (nfin>ndeb && est_egal(le_domaine->face_surfaces()[ndeb],0))
163 Cerr <<
"Error in the definition of the boundary conditions." << finl;
164 Cerr <<
"The axis of revolution for this 2D calculation is along Y." << finl;
165 Cerr <<
"So you must specify symmetry for the boundary " << frontiere_dis.
le_nom() << finl;
175 for (face=ndeb; face<nfin; face++)
178 if ( (elem1=
elem(face,0)) > -1)
181 flux_bords(face,0)+=flux;
183 if ( (elem2=
elem(face,1)) > -1)
186 flux_bords(face,0)-=flux;
195 for (face=ndeb; face<nfin; face++)
198 if ( (elem1=
elem(face,0)) > -1)
201 flux_bords(face,0)+=flux;
203 if ( (elem2=
elem(face,1)) > -1)
206 flux_bords(face,0)-=flux;
215 for (face=ndeb; face<nfin; face++)
218 if ( (elem1=
elem(face,0)) > -1)
221 flux_bords(face,0)+=flux;
223 if ( (elem2=
elem(face,1)) > -1)
226 flux_bords(face,0)-=flux;
235 for (face=ndeb; face<nfin; face++)
238 if ( (elem1=
elem(face,0)) > -1)
241 flux_bords(face,0)+=flux;
243 if ( (elem2=
elem(face,1)) > -1)
246 flux_bords(face,0)-=flux;
251 case paroi_defilante :
255 for (face=ndeb; face<nfin; face++)
258 if ( (elem1=
elem(face,0)) > -1)
261 flux_bords(face,0)+=flux;
263 if ( (elem2=
elem(face,1)) > -1)
266 flux_bords(face,0)-=flux;
271 case paroi_adiabatique :
275 for (face=ndeb; face<nfin; face++)
284 flux_bords(face,0)+=flux;
286 flux_bords(face,0)-=flux;
294 for (face=ndeb; face<nfin; face++)
297 if ( (elem1=
elem(face,0)) > -1)
300 flux_bords(face,0)+=flux;
302 if ( (elem2=
elem(face,1)) > -1)
305 flux_bords(face,0)-=flux;
310 case echange_externe_impose :
315 int boundary_index=-1;
316 if (le_domaine->front_VF(num_cl).le_nom() == frontiere_dis.
le_nom())
317 boundary_index=num_cl;
319 for (face=ndeb; face<nfin; face++)
321 int local_face=le_domaine->front_VF(boundary_index).num_local_face(face);
322 flux =
flux_evaluateur.flux_face(donnee, boundary_index,face,local_face, cl, ndeb);
323 if ( (elem1=
elem(face,0)) > -1)
326 flux_bords(face,0)+=flux;
328 if ( (elem2=
elem(face,1)) > -1)
331 flux_bords(face,0)-=flux;
336 case echange_global_impose :
340 for (face=ndeb; face<nfin; face++)
343 if ( (elem1=
elem(face,0)) > -1)
346 flux_bords(face,0)+=flux;
348 if ( (elem2=
elem(face,1)) > -1)
351 flux_bords(face,0)-=flux;
360 for (face=ndeb; face<nfin; face++)
363 if ( (elem1=
elem(face,0)) > -1)
365 resu[elem1]+=0.5*flux;
366 if ( face < (ndeb+frontiere_dis.
nb_faces()/2) )
367 flux_bords(face,0)+=flux;
369 if ( (elem2=
elem(face,1)) > -1)
371 resu[elem2]-=0.5*flux;
372 if ( (ndeb+frontiere_dis.
nb_faces()/2) <= face )
373 flux_bords(face,0)-=flux;
378 case scalaire_impose_paroi :
394 Cerr <<
"On ne reconnait pas la condition limite : " << la_cl.valeur();
395 Cerr <<
"Dans Iterateur_PolyMAC_CDO_Elem<_TYPE_>::ajouter_bords"<<finl;
405 assert(donnee.
nb_dim() < 3);
411 DoubleTab& flux_bords=op_base->flux_bords();
412 flux_bords.
resize(le_domaine->nb_faces_bord(),ncomp);
415 if( ncomp != 1) Process ::exit();
422 int nb_front_Cl=le_domaine->nb_front_Cl();
423 for (; num_cl<nb_front_Cl; num_cl++)
426 const Cond_lim& la_cl = la_zcl->les_conditions_limites(num_cl);
429 nfin = ndeb + frontiere_dis.
nb_faces();
433 if (nfin>ndeb && est_egal(le_domaine->face_surfaces()[ndeb],0))
435 Cerr <<
"Error in the definition of the boundary conditions." << finl;
436 Cerr <<
"The axis of revolution for this 2D calculation is along Y." << finl;
437 Cerr <<
"So you must specify symmetry for the boundary " << frontiere_dis.
le_nom() << finl;
447 for (face=ndeb; face<nfin; face++)
450 if ( (
elem(face,0)) > -1)
452 flux_bords(face,0)+=flux;
454 if ( (
elem(face,1)) > -1)
456 flux_bords(face,0)-=flux;
465 for (face=ndeb; face<nfin; face++)
468 if ( (
elem(face,0)) > -1)
470 flux_bords(face,0)+=flux;
472 if ( (
elem(face,1)) > -1)
474 flux_bords(face,0)-=flux;
483 for (face=ndeb; face<nfin; face++)
486 if ( (
elem(face,0)) > -1)
488 flux_bords(face,0)+=flux;
490 if ( (
elem(face,1)) > -1)
492 flux_bords(face,0)-=flux;
501 for (face=ndeb; face<nfin; face++)
504 if ( (
elem(face,0)) > -1)
506 flux_bords(face,0)+=flux;
508 if ( (
elem(face,1)) > -1)
510 flux_bords(face,0)-=flux;
515 case paroi_defilante :
519 for (face=ndeb; face<nfin; face++)
522 if ( (
elem(face,0)) > -1)
524 flux_bords(face,0)+=flux;
526 if ( (
elem(face,1)) > -1)
528 flux_bords(face,0)-=flux;
533 case paroi_adiabatique :
537 for (face=ndeb; face<nfin; face++)
542 flux_bords(face,0)+=flux;
543 flux_bords(face,0)-=flux;
551 for (face=ndeb; face<nfin; face++)
554 if ( (
elem(face,0)) > -1)
556 flux_bords(face,0)+=flux;
558 if ( (
elem(face,1)) > -1)
560 flux_bords(face,0)-=flux;
565 case echange_externe_impose :
570 int boundary_index=-1;
571 if (le_domaine->front_VF(num_cl).le_nom() == frontiere_dis.
le_nom())
572 boundary_index=num_cl;
574 for (face=ndeb; face<nfin; face++)
576 int local_face=le_domaine->front_VF(boundary_index).num_local_face(face);
577 flux =
flux_evaluateur.flux_face(donnee, boundary_index,face,local_face, cl, ndeb);
578 if ( (
elem(face,0)) > -1)
580 flux_bords(face,0)+=flux;
582 if ( (
elem(face,1)) > -1)
584 flux_bords(face,0)-=flux;
589 case echange_global_impose :
593 for (face=ndeb; face<nfin; face++)
596 if ( (
elem(face,0)) > -1)
598 flux_bords(face,0)+=flux;
600 if ( (
elem(face,1)) > -1)
602 flux_bords(face,0)-=flux;
611 for (face=ndeb; face<nfin; face++)
614 if ( (
elem(face,0)) > -1)
616 if ( face < (ndeb+frontiere_dis.
nb_faces()/2) )
617 flux_bords(face,0)+=flux;
619 if ( (
elem(face,1)) > -1)
621 if ( (ndeb+frontiere_dis.
nb_faces()/2) <= face )
622 flux_bords(face,0)-=flux;
627 case scalaire_impose_paroi :
643 Cerr <<
"On ne reconnait pas la condition limite : " << la_cl.valeur();
644 Cerr <<
"Dans Iterateur_PolyMAC_CDO_Elem<_TYPE_>::ajouter_bords"<<finl;
653 DoubleTab& resu,
int ncomp)
const
658 DoubleVect flux(ncomp);
660 int nb_front_Cl=le_domaine->nb_front_Cl();
661 DoubleTab& flux_bords=op_base->flux_bords();
662 for (; num_cl<nb_front_Cl; num_cl++)
664 const Cond_lim& la_cl = la_zcl->les_conditions_limites(num_cl);
667 nfin = ndeb + frontiere_dis.
nb_faces();
671 if (nfin>ndeb && est_egal(le_domaine->face_surfaces()[ndeb],0))
673 Cerr <<
"Error in the definition of the boundary conditions." << finl;
674 Cerr <<
"The axis of revolution for this 2D calculation is along Y." << finl;
675 Cerr <<
"So you must specify symmetry for the boundary " << frontiere_dis.
le_nom() << finl;
685 for (face=ndeb; face<nfin; face++)
688 if ( (elem1=
elem(face,0)) > -1)
689 for (k=0; k<ncomp; k++)
691 resu(elem1,k) +=flux(k);
692 flux_bords(face,k)+=flux(k);
694 if ( (elem2=
elem(face,1)) > -1)
695 for (k=0; k<ncomp; k++)
697 resu(elem2,k) -=flux(k);
698 flux_bords(face,k)-=flux(k);
707 for (face=ndeb; face<nfin; face++)
710 if ( (elem1=
elem(face,0)) > -1)
711 for (k=0; k<ncomp; k++)
713 resu(elem1,k) +=flux(k);
714 flux_bords(face,k)+=flux(k);
716 if ( (elem2=
elem(face,1)) > -1)
717 for (k=0; k<ncomp; k++)
719 resu(elem2,k) -=flux(k);
720 flux_bords(face,k)-=flux(k);
729 for (face=ndeb; face<nfin; face++)
732 if ( (elem1=
elem(face,0)) > -1)
733 for (k=0; k<ncomp; k++)
735 resu(elem1,k) +=flux(k);
736 flux_bords(face,k)+=flux(k);
738 if ( (elem2=
elem(face,1)) > -1)
739 for (k=0; k<ncomp; k++)
741 resu(elem2,k) -=flux(k);
742 flux_bords(face,k)-=flux(k);
751 for (face=ndeb; face<nfin; face++)
754 if ( (elem1=
elem(face,0)) > -1)
755 for (k=0; k<ncomp; k++)
757 resu(elem1,k) +=flux(k);
758 flux_bords(face,k)+=flux(k);
760 if ( (elem2=
elem(face,1)) > -1)
761 for (k=0; k<ncomp; k++)
763 resu(elem2,k) -=flux(k);
764 flux_bords(face,k)-=flux(k);
769 case paroi_defilante :
773 for (face=ndeb; face<nfin; face++)
776 if ( (elem1=
elem(face,0)) > -1)
777 for (k=0; k<ncomp; k++)
779 resu(elem1,k) +=flux(k);
780 flux_bords(face,k)+=flux(k);
782 if ( (elem2=
elem(face,1)) > -1)
783 for (k=0; k<ncomp; k++)
785 resu(elem2,k) -=flux(k);
786 flux_bords(face,k)-=flux(k);
791 case paroi_adiabatique :
795 for (face=ndeb; face<nfin; face++)
798 if ( (elem1=
elem(face,0)) > -1)
799 for (k=0; k<ncomp; k++)
801 resu(elem1,k) +=flux(k);
802 flux_bords(face,k)+=flux(k);
804 if ( (elem2=
elem(face,1)) > -1)
805 for (k=0; k<ncomp; k++)
807 resu(elem2,k) -=flux(k);
808 flux_bords(face,k)-=flux(k);
817 for (face=ndeb; face<nfin; face++)
825 for (k=0; k<ncomp; k++)
827 resu(elem1,k) +=flux(k);
828 flux_bords(face,k)+=flux(k);
830 for (k=0; k<ncomp; k++)
832 resu(elem2,k) -=flux(k);
833 flux_bords(face,k)-=flux(k);
838 case echange_externe_impose :
843 int boundary_index=-1;
844 if (le_domaine->front_VF(num_cl).le_nom() == frontiere_dis.
le_nom())
845 boundary_index=num_cl;
847 for (face=ndeb; face<nfin; face++)
849 int local_face=le_domaine->front_VF(boundary_index).num_local_face(face);
850 flux_evaluateur.flux_face(donnee, boundary_index, face, local_face, cl, ndeb, flux);
851 if ( (elem1=
elem(face,0)) > -1)
852 for (k=0; k<ncomp; k++)
854 resu(elem1,k) +=flux(k);
855 flux_bords(face,k)+=flux(k);
857 if ( (elem2=
elem(face,1)) > -1)
858 for (k=0; k<ncomp; k++)
860 resu(elem2,k) -=flux(k);
861 flux_bords(face,k)-=flux(k);
866 case echange_global_impose :
870 for (face=ndeb; face<nfin; face++)
873 if ( (elem1=
elem(face,0)) > -1)
874 for (k=0; k<ncomp; k++)
876 resu(elem1,k) +=flux(k);
877 flux_bords(face,k)+=flux(k);
879 if ( (elem2=
elem(face,1)) > -1)
880 for (k=0; k<ncomp; k++)
882 resu(elem2,k) -=flux(k);
883 flux_bords(face,k)-=flux(k);
892 for (face=ndeb; face<nfin; face++)
895 if ( (elem1=
elem(face,0)) > -1)
896 for (k=0; k<ncomp; k++)
898 resu(elem1,k) +=0.5*flux(k);
899 if ( face < (ndeb+frontiere_dis.
nb_faces()/2) )
900 flux_bords(face,k)+=flux(k);
902 if ( (elem2=
elem(face,1)) > -1)
903 for (k=0; k<ncomp; k++)
905 resu(elem2,k) -=0.5*flux(k);
906 if ( (ndeb+frontiere_dis.
nb_faces()/2) <= face )
907 flux_bords(face,k)-=flux(k);
929 Cerr <<
"On ne reconnait pas la condition limite : " << la_cl.valeur();
1031 const Domaine& madomaine=le_domaine->domaine();
1033 const int impr_bord=(madomaine.bords_a_imprimer().est_vide() ? 0:1);
1036 const DoubleTab& inco = la_zcl->equation().inconnue().valeurs();
1037 DoubleTab& flux_bords=op_base->flux_bords();
1042 DoubleVect bilan(flux_bords.
dimension(1));
1044 int nb_front_Cl=le_domaine->nb_front_Cl();
1045 DoubleTrav flux_bords2( 3, nb_front_Cl , flux_bords.
dimension(1)) ;
1050 for (
int num_cl=0; num_cl<nb_front_Cl; num_cl++)
1052 const Cond_lim& la_cl = la_zcl->les_conditions_limites(num_cl);
1055 int nfin = ndeb + frontiere_dis.
nb_faces();
1056 int periodicite = (
type_cl(la_cl)==periodique?1:0);
1057 for (face=ndeb; face<nfin; face++)
1058 for(k=0; k<flux_bords.
dimension(1); k++)
1060 flux_bords2(0,num_cl,k)+=flux_bords(face, k);
1063 if( face < (ndeb+frontiere_dis.
nb_faces()/2) )
1064 flux_bords2(1,num_cl,k)+=flux_bords(face, k);
1066 flux_bords2(2,num_cl,k)+=flux_bords(face, k);
1073 op_base->ouvrir_fichier(
Flux,
"",1);
1074 Flux.add_col(temps);
1075 for (
int num_cl=0; num_cl<nb_front_Cl; num_cl++)
1077 const Cond_lim& la_cl = la_zcl->les_conditions_limites(num_cl);
1078 int periodicite = (
type_cl(la_cl)==periodique?1:0);
1079 for(k=0; k<flux_bords.
dimension(1); k++)
1081 bilan(k)+=flux_bords2(0,num_cl,k);
1084 Flux.add_col(flux_bords2(1,num_cl,k));
1085 Flux.add_col(flux_bords2(2,num_cl,k));
1088 Flux.add_col(flux_bords2(0,num_cl,k));
1091 for(k=0; k<flux_bords.
dimension(1); k++)
1092 Flux.add_col(bilan(k));
1095 const LIST(
Nom)& Liste_Bords_a_imprimer = le_domaine->domaine().bords_a_imprimer();
1096 if (!Liste_Bords_a_imprimer.est_vide())
1099 op_base->ouvrir_fichier_partage(Flux_face,
"",impr_bord);
1100 for (
int num_cl=0; num_cl<nb_front_Cl; num_cl++)
1102 const Frontiere_dis_base& la_fr = la_zcl->les_conditions_limites(num_cl)->frontiere_dis();
1103 const Cond_lim& la_cl = la_zcl->les_conditions_limites(num_cl);
1106 int nfin = ndeb + frontiere_dis.
nb_faces();
1107 if (madomaine.bords_a_imprimer().contient(la_fr.
le_nom()))
1109 Flux_face <<
"# Flux par face sur " << la_fr.
le_nom() <<
" au temps " << temps <<
" : " << finl;
1110 for (face=ndeb; face<nfin; face++)
1113 Flux_face <<
"# Face a x= " << le_domaine->xv(face,0) <<
" y= " << le_domaine->xv(face,1) <<
" : ";
1115 Flux_face <<
"# Face a x= " << le_domaine->xv(face,0) <<
" y= " << le_domaine->xv(face,1) <<
" z= " << le_domaine->xv(face,2) <<
" : ";
1116 for(k=0; k<flux_bords.
dimension(1); k++)
1117 Flux_face << flux_bords(face, k) <<
" ";
1155 int nb_front_Cl=le_domaine->nb_front_Cl();
1156 DoubleTab& flux_bords=op_base->flux_bords();
1157 for (; num_cl<nb_front_Cl; num_cl++)
1160 const Cond_lim& la_cl = la_zcl->les_conditions_limites(num_cl);
1163 nfin = ndeb + frontiere_dis.
nb_faces();
1170 for (face=ndeb; face<nfin; face++)
1173 if ( (elem1=
elem(face,0)) > -1)
1176 flux_bords(face,0)+=flux;
1178 if ( (elem2=
elem(face,1)) > -1)
1181 flux_bords(face,0)-=flux;
1190 for (face=ndeb; face<nfin; face++)
1193 if ( (elem1=
elem(face,0)) > -1)
1196 flux_bords(face,0)+=flux;
1198 if ( (elem2=
elem(face,1)) > -1)
1201 flux_bords(face,0)-=flux;
1206 case entree_fluide :
1210 for (face=ndeb; face<nfin; face++)
1213 if ( (elem1=
elem(face,0)) > -1)
1216 flux_bords(face,0)+=flux;
1218 if ( (elem2=
elem(face,1)) > -1)
1221 flux_bords(face,0)-=flux;
1230 for (face=ndeb; face<nfin; face++)
1233 if ( (elem1=
elem(face,0)) > -1)
1236 flux_bords(face,0)+=flux;
1238 if ( (elem2=
elem(face,1)) > -1)
1241 flux_bords(face,0)-=flux;
1246 case paroi_defilante :
1250 for (face=ndeb; face<nfin; face++)
1253 if ( (elem1=
elem(face,0)) > -1)
1256 flux_bords(face,0)+=flux;
1258 if ( (elem2=
elem(face,1)) > -1)
1261 flux_bords(face,0)-=flux;
1266 case paroi_adiabatique :
1270 for (face=ndeb; face<nfin; face++)
1273 if ( (elem1=
elem(face,0)) > -1)
1276 flux_bords(face,0)+=flux;
1278 if ( (elem2=
elem(face,1)) > -1)
1281 flux_bords(face,0)-=flux;
1290 for (face=ndeb; face<nfin; face++)
1293 if ( (elem1=
elem(face,0)) > -1)
1296 flux_bords(face,0)+=flux;
1298 if ( (elem2=
elem(face,1)) > -1)
1301 flux_bords(face,0)-=flux;
1306 case echange_externe_impose :
1311 int boundary_index=-1;
1312 if (le_domaine->front_VF(num_cl).le_nom() == frontiere_dis.
le_nom())
1313 boundary_index=num_cl;
1315 for (face=ndeb; face<nfin; face++)
1317 int local_face=le_domaine->front_VF(boundary_index).num_local_face(face);
1318 flux =
flux_evaluateur.secmem_face(boundary_index,face,local_face, cl, ndeb);
1319 if ( (elem1=
elem(face,0)) > -1)
1322 flux_bords(face,0)+=flux;
1324 if ( (elem2=
elem(face,1)) > -1)
1327 flux_bords(face,0)-=flux;
1332 case echange_global_impose :
1336 for (face=ndeb; face<nfin; face++)
1339 if ( (elem1=
elem(face,0)) > -1)
1342 flux_bords(face,0)+=flux;
1344 if ( (elem2=
elem(face,1)) > -1)
1347 flux_bords(face,0)-=flux;
1356 for (face=ndeb; face<nfin; face++)
1358 if ( (elem1=
elem(face,0)) > -1)
1360 if ( (elem2=
elem(face,1)) > -1)
1365 case scalaire_impose_paroi :
1381 Cerr <<
"On ne reconnait pas la condition limite : " << la_cl.valeur();
1393 DoubleVect flux(ncomp);
1395 int nb_front_Cl=le_domaine->nb_front_Cl();
1396 DoubleTab& flux_bords=op_base->flux_bords();
1397 for (; num_cl<nb_front_Cl; num_cl++)
1399 const Cond_lim& la_cl = la_zcl->les_conditions_limites(num_cl);
1402 nfin = ndeb + frontiere_dis.
nb_faces();
1409 for (face=ndeb; face<nfin; face++)
1412 if ( (elem1=
elem(face,0)) > -1)
1413 for (k=0; k<ncomp; k++)
1415 resu(elem1,k) +=flux(k);
1416 flux_bords(face,k)+=flux(k);
1418 if ( (elem2=
elem(face,1)) > -1)
1419 for (k=0; k<ncomp; k++)
1421 resu(elem2,k) -=flux(k);
1422 flux_bords(face,k)-=flux(k);
1431 for (face=ndeb; face<nfin; face++)
1434 if ( (elem1=
elem(face,0)) > -1)
1435 for (k=0; k<ncomp; k++)
1437 resu(elem1,k) +=flux(k);
1438 flux_bords(face,k)+=flux(k);
1440 if ( (elem2=
elem(face,1)) > -1)
1441 for (k=0; k<ncomp; k++)
1443 resu(elem2,k) -=flux(k);
1444 flux_bords(face,k)-=flux(k);
1449 case entree_fluide :
1453 for (face=ndeb; face<nfin; face++)
1456 if ( (elem1=
elem(face,0)) > -1)
1457 for (k=0; k<ncomp; k++)
1459 resu(elem1,k) +=flux(k);
1460 flux_bords(face,k)+=flux(k);
1462 if ( (elem2=
elem(face,1)) > -1)
1463 for (k=0; k<ncomp; k++)
1465 resu(elem2,k) -=flux(k);
1466 flux_bords(face,k)-=flux(k);
1475 for (face=ndeb; face<nfin; face++)
1478 if ( (elem1=
elem(face,0)) > -1)
1479 for (k=0; k<ncomp; k++)
1481 resu(elem1,k) +=flux(k);
1482 flux_bords(face,k)+=flux(k);
1484 if ( (elem2=
elem(face,1)) > -1)
1485 for (k=0; k<ncomp; k++)
1487 resu(elem2,k) -=flux(k);
1488 flux_bords(face,k)-=flux(k);
1493 case paroi_defilante :
1497 for (face=ndeb; face<nfin; face++)
1500 if ( (elem1=
elem(face,0)) > -1)
1501 for (k=0; k<ncomp; k++)
1503 resu(elem1,k) +=flux(k);
1504 flux_bords(face,k)+=flux(k);
1506 if ( (elem2=
elem(face,1)) > -1)
1507 for (k=0; k<ncomp; k++)
1509 resu(elem2,k) -=flux(k);
1510 flux_bords(face,k)-=flux(k);
1515 case paroi_adiabatique :
1519 for (face=ndeb; face<nfin; face++)
1522 if ( (elem1=
elem(face,0)) > -1)
1523 for (k=0; k<ncomp; k++)
1525 resu(elem1,k) +=flux(k);
1526 flux_bords(face,k)+=flux(k);
1528 if ( (elem2=
elem(face,1)) > -1)
1529 for (k=0; k<ncomp; k++)
1531 resu(elem2,k) -=flux(k);
1532 flux_bords(face,k)-=flux(k);
1541 for (face=ndeb; face<nfin; face++)
1544 if ( (elem1=
elem(face,0)) > -1)
1545 for (k=0; k<ncomp; k++)
1547 resu(elem1,k) +=flux(k);
1548 flux_bords(face,k)+=flux(k);
1550 if ( (elem2=
elem(face,1)) > -1)
1551 for (k=0; k<ncomp; k++)
1553 resu(elem2,k) -=flux(k);
1554 flux_bords(face,k)-=flux(k);
1559 case echange_externe_impose :
1564 int boundary_index=-1;
1565 if (le_domaine->front_VF(num_cl).le_nom() == frontiere_dis.
le_nom())
1566 boundary_index=num_cl;
1568 for (face=ndeb; face<nfin; face++)
1570 int local_face=le_domaine->front_VF(boundary_index).num_local_face(face);
1571 flux_evaluateur.secmem_face(boundary_index,face,local_face, cl, ndeb, flux);
1572 if ( (elem1=
elem(face,0)) > -1)
1573 for (k=0; k<ncomp; k++)
1575 resu(elem1,k) +=flux(k);
1576 flux_bords(face,k)+=flux(k);
1578 if ( (elem2=
elem(face,1)) > -1)
1579 for (k=0; k<ncomp; k++)
1581 resu(elem2,k) -=flux(k);
1582 flux_bords(face,k)-=flux(k);
1587 case echange_global_impose :
1591 for (face=ndeb; face<nfin; face++)
1594 if ( (elem1=
elem(face,0)) > -1)
1595 for (k=0; k<ncomp; k++)
1597 resu(elem1,k) +=flux(k);
1598 flux_bords(face,k)+=flux(k);
1600 if ( (elem2=
elem(face,1)) > -1)
1601 for (k=0; k<ncomp; k++)
1603 resu(elem2,k) -=flux(k);
1604 flux_bords(face,k)-=flux(k);
1613 for (face=ndeb; face<nfin; face++)
1616 if ( (elem1=
elem(face,0)) > -1)
1617 for (k=0; k<ncomp; k++)
1619 resu(elem1,k) +=0.5*flux(k);
1620 flux_bords(face,k)+=0.5*flux(k);
1622 if ( (elem2=
elem(face,1)) > -1)
1623 for (k=0; k<ncomp; k++)
1625 resu(elem2,k) -=0.5*flux(k);
1626 flux_bords(face,k)-=0.5*flux(k);
1648 Cerr <<
"On ne reconnait pas la condition limite : " << la_cl.valeur();
1716 double aii=0, ajj=0;
1720 int nb_front_Cl=le_domaine->nb_front_Cl();
1721 for (; num_cl<nb_front_Cl; num_cl++)
1724 const Cond_lim& la_cl = la_zcl->les_conditions_limites(num_cl);
1727 nfin = ndeb + frontiere_dis.
nb_faces();
1734 for (face=ndeb; face<nfin; face++)
1737 if ( (elem1=
elem(face,0)) > -1)
1739 matrice(elem1,elem1)+=aii;
1741 if ( (elem2=
elem(face,1)) > -1)
1743 matrice(elem2,elem2)+=ajj;
1752 for (face=ndeb; face<nfin; face++)
1755 if ( (elem1=
elem(face,0)) > -1)
1757 matrice(elem1,elem1)+=aii;
1759 if ( (elem2=
elem(face,1)) > -1)
1761 matrice(elem2,elem2)+=ajj;
1766 case entree_fluide :
1770 for (face=ndeb; face<nfin; face++)
1773 if ( (elem1=
elem(face,0)) > -1)
1775 matrice(elem1,elem1)+=aii;
1777 if ( (elem2=
elem(face,1)) > -1)
1779 matrice(elem2,elem2)+=ajj;
1788 for (face=ndeb; face<nfin; face++)
1791 if ( (elem1=
elem(face,0)) > -1)
1793 matrice(elem1,elem1)+=aii;
1795 if ( (elem2=
elem(face,1)) > -1)
1797 matrice(elem2,elem2)+=ajj;
1802 case paroi_defilante :
1806 for (face=ndeb; face<nfin; face++)
1809 if ( (elem1=
elem(face,0)) > -1)
1811 matrice(elem1,elem1)+=aii;
1813 if ( (elem2=
elem(face,1)) > -1)
1815 matrice(elem2,elem2)+=ajj;
1820 case paroi_adiabatique :
1824 for (face=ndeb; face<nfin; face++)
1827 if ( (elem1=
elem(face,0)) > -1)
1829 matrice(elem1,elem1)+=aii;
1831 if ( (elem2=
elem(face,1)) > -1)
1833 matrice(elem2,elem2)+=ajj;
1842 for (face=ndeb; face<nfin; face++)
1845 if ( (elem1=
elem(face,0)) > -1)
1847 matrice(elem1,elem1)+=aii;
1849 if ( (elem2=
elem(face,1)) > -1)
1851 matrice(elem2,elem2)+=ajj;
1856 case echange_externe_impose :
1861 int boundary_index=-1;
1862 if (le_domaine->front_VF(num_cl).le_nom() == frontiere_dis.
le_nom())
1863 boundary_index=num_cl;
1865 for (face=ndeb; face<nfin; face++)
1867 int local_face=le_domaine->front_VF(boundary_index).num_local_face(face);
1868 flux_evaluateur.coeffs_face(boundary_index,face,local_face,ndeb, cl, aii, ajj);
1869 if ( (elem1=
elem(face,0)) > -1)
1871 matrice(elem1,elem1)+=aii;
1873 if ( (elem2=
elem(face,1)) > -1)
1875 matrice(elem2,elem2)+=ajj;
1880 case echange_global_impose :
1884 for (face=ndeb; face<nfin; face++)
1887 if ( (elem1=
elem(face,0)) > -1)
1889 matrice(elem1,elem1)+=aii;
1891 if ( (elem2=
elem(face,1)) > -1)
1893 matrice(elem2,elem2)+=ajj;
1902 for (face=ndeb; face<nfin; face++)
1907 elem1 =
elem(face,0);
1908 elem2 =
elem(face,1);
1909 matrice(elem1,elem1)+=0.5*aii;
1910 matrice(elem1,elem2)-=0.5*ajj;
1911 matrice(elem2,elem2)+=0.5*ajj;
1912 matrice(elem2,elem1)-=0.5*aii;
1916 case scalaire_impose_paroi :
1919 Cerr <<
"On ne reconnait pas la condition limite : " << la_cl.valeur();
1929 DoubleVect aii(ncomp), ajj(ncomp);
1933 int nb_front_Cl=le_domaine->nb_front_Cl();
1934 for (; num_cl<nb_front_Cl; num_cl++)
1936 const Cond_lim& la_cl = la_zcl->les_conditions_limites(num_cl);
1939 nfin = ndeb + frontiere_dis.
nb_faces();
1946 for (face=ndeb; face<nfin; face++)
1948 elem1 =
elem(face,0);
1949 elem2 =
elem(face,1);
1951 if ( (elem1=
elem(face,0)) > -1)
1953 for (i=0; i<ncomp; i++)
1955 matrice(elem1*ncomp+i,elem1*ncomp+i)+=aii(i);
1958 if ( (elem2=
elem(face,1)) > -1)
1960 for (i=0; i<ncomp; i++)
1962 matrice(elem2*ncomp+i,elem2*ncomp+i)+=ajj(i);
1972 for (face=ndeb; face<nfin; face++)
1975 elem1 =
elem(face,0);
1976 elem2 =
elem(face,1);
1978 if ( (elem1=
elem(face,0)) > -1)
1980 for (i=0; i<ncomp; i++)
1982 matrice(elem1*ncomp+i,elem1*ncomp+i)+=aii(i);
1985 if ( (elem2=
elem(face,1)) > -1)
1987 for (i=0; i<ncomp; i++)
1989 matrice(elem2*ncomp+i,elem2*ncomp+i)+=ajj(i);
1995 case entree_fluide :
1999 for (face=ndeb; face<nfin; face++)
2002 elem1 =
elem(face,0);
2003 elem2 =
elem(face,1);
2005 if ( (elem1=
elem(face,0)) > -1)
2007 for (i=0; i<ncomp; i++)
2009 matrice(elem1*ncomp+i,elem1*ncomp+i)+=aii(i);
2012 if ( (elem2=
elem(face,1)) > -1)
2014 for (i=0; i<ncomp; i++)
2016 matrice(elem2*ncomp+i,elem2*ncomp+i)+=ajj(i);
2026 for (face=ndeb; face<nfin; face++)
2029 elem1 =
elem(face,0);
2030 elem2 =
elem(face,1);
2032 if ( (elem1=
elem(face,0)) > -1)
2034 for (i=0; i<ncomp; i++)
2036 matrice(elem1*ncomp+i,elem1*ncomp+i)+=aii(i);
2039 if ( (elem2=
elem(face,1)) > -1)
2041 for (i=0; i<ncomp; i++)
2043 matrice(elem2*ncomp+i,elem2*ncomp+i)+=ajj(i);
2049 case paroi_defilante :
2053 for (face=ndeb; face<nfin; face++)
2056 elem1 =
elem(face,0);
2057 elem2 =
elem(face,1);
2059 if ( (elem1=
elem(face,0)) > -1)
2061 for (i=0; i<ncomp; i++)
2063 matrice(elem1*ncomp+i,elem1*ncomp+i)+=aii(i);
2066 if ( (elem2=
elem(face,1)) > -1)
2068 for (i=0; i<ncomp; i++)
2070 matrice(elem2*ncomp+i,elem2*ncomp+i)+=ajj(i);
2076 case paroi_adiabatique :
2080 for (face=ndeb; face<nfin; face++)
2083 elem1 =
elem(face,0);
2084 elem2 =
elem(face,1);
2086 if ( (elem1=
elem(face,0)) > -1)
2088 for (i=0; i<ncomp; i++)
2090 matrice(elem1*ncomp+i,elem1*ncomp+i)+=aii(i);
2093 if ( (elem2=
elem(face,1)) > -1)
2095 for (i=0; i<ncomp; i++)
2097 matrice(elem2*ncomp+i,elem2*ncomp+i)+=ajj(i);
2107 for (face=ndeb; face<nfin; face++)
2110 elem1 =
elem(face,0);
2111 elem2 =
elem(face,1);
2113 if ( (elem1=
elem(face,0)) > -1)
2115 for (i=0; i<ncomp; i++)
2117 matrice(elem1*ncomp+i,elem1*ncomp+i)+=aii(i);
2120 if ( (elem2=
elem(face,1)) > -1)
2122 for (i=0; i<ncomp; i++)
2124 matrice(elem2*ncomp+i,elem2*ncomp+i)+=ajj(i);
2130 case echange_externe_impose :
2135 int boundary_index=-1;
2136 if (le_domaine->front_VF(num_cl).le_nom() == frontiere_dis.
le_nom())
2137 boundary_index=num_cl;
2139 for (face=ndeb; face<nfin; face++)
2141 int local_face=le_domaine->front_VF(boundary_index).num_local_face(face);
2142 flux_evaluateur.coeffs_face(boundary_index,face,local_face,ndeb, cl, aii, ajj);
2143 elem1 =
elem(face,0);
2144 elem2 =
elem(face,1);
2145 if ( (elem1=
elem(face,0)) > -1)
2147 for (i=0; i<ncomp; i++)
2149 matrice(elem1*ncomp+i,elem1*ncomp+i)+=aii(i);
2152 if ( (elem2=
elem(face,1)) > -1)
2154 for (i=0; i<ncomp; i++)
2156 matrice(elem2*ncomp+i,elem2*ncomp+i)+=aii(i);
2162 case echange_global_impose :
2166 for (face=ndeb; face<nfin; face++)
2169 elem1 =
elem(face,0);
2170 elem2 =
elem(face,1);
2172 if ( (elem1=
elem(face,0)) > -1)
2174 for (i=0; i<ncomp; i++)
2176 matrice(elem1*ncomp+i,elem1*ncomp+i)+=aii(i);
2179 if ( (elem2=
elem(face,1)) > -1)
2181 for (i=0; i<ncomp; i++)
2183 matrice(elem2*ncomp+i,elem2*ncomp+i)+=ajj(i);
2193 for (face=ndeb; face<nfin; face++)
2196 elem1 =
elem(face,0);
2197 elem2 =
elem(face,1);
2200 for (i=0; i<ncomp; i++)
2202 int n1=elem1*ncomp+i;
2203 int n2=elem2*ncomp+i;
2204 matrice(n1,n1)+=0.5*aii(i);
2205 matrice(n1,n2)-=0.5*ajj(i);
2206 matrice(n2,n2)+=0.5*ajj(i);
2207 matrice(n2,n1)-=0.5*aii(i);
2213 case scalaire_impose_paroi :
2217 Cerr <<
"On ne reconnait pas la condition limite : " << la_cl.valeur();
2313 int nb_front_Cl=le_domaine->nb_front_Cl();
2314 for (
int num_cl = 0; num_cl<nb_front_Cl; num_cl++)
2317 const Cond_lim& la_cl = la_zcl->les_conditions_limites(num_cl);
2320 nfin = ndeb + frontiere_dis.
nb_faces();
2327 for (
int f = ndeb; f < nfin; f++)
2330 if ( (e1 =
elem(f, 0)) > -1) matrice(e1, f) += aef;
2331 if ( (e2 =
elem(f, 1)) > -1) matrice(e2, f) -= aef;
2339 for (
int f = ndeb; f < nfin; f++)
2342 if ( (e1 =
elem(f, 0)) > -1) matrice(e1, f) += aef;
2343 if ( (e2 =
elem(f, 1)) > -1) matrice(e2, f) -= aef;
2347 case entree_fluide :
2351 for (
int f = ndeb; f < nfin; f++)
2354 if ( (e1 =
elem(f, 0)) > -1) matrice(e1, f) += aef;
2355 if ( (e2 =
elem(f, 1)) > -1) matrice(e2, f) -= aef;
2363 for (
int f = ndeb; f < nfin; f++)
2366 if ( (e1 =
elem(f, 0)) > -1) matrice(e1, f) += aef;
2367 if ( (e2 =
elem(f, 1)) > -1) matrice(e2, f) -= aef;
2371 case paroi_defilante :
2375 for (
int f = ndeb; f < nfin; f++)
2378 if ( (e1 =
elem(f, 0)) > -1) matrice(e1, f) += aef;
2379 if ( (e2 =
elem(f, 1)) > -1) matrice(e2, f) -= aef;
2383 case paroi_adiabatique :
2387 for (
int f = ndeb; f < nfin; f++)
2390 if ( (e1 =
elem(f, 0)) > -1) matrice(e1, f) += aef;
2391 if ( (e2 =
elem(f, 1)) > -1) matrice(e2, f) -= aef;
2399 for (
int f = ndeb; f < nfin; f++)
2402 if ( (e1 =
elem(f, 0)) > -1) matrice(e1, f) += aef;
2403 if ( (e2 =
elem(f, 1)) > -1) matrice(e2, f) -= aef;
2407 case echange_externe_impose :
2411 int boundary_index=-1;
2412 if (le_domaine->front_VF(num_cl).le_nom() == frontiere_dis.
le_nom())
2413 boundary_index=num_cl;
2415 for (
int f = ndeb; f < nfin; f++)
2417 int local_face=le_domaine->front_VF(boundary_index).num_local_face(f);
2418 aef =
flux_evaluateur.coeffs_face_bloc_vitesse(inco, boundary_index, f, local_face, cl, ndeb);
2419 if ( (e1 =
elem(f, 0)) > -1) matrice(e1, f) += aef;
2420 if ( (e2 =
elem(f, 1)) > -1) matrice(e1, f) -= aef;
2424 case echange_global_impose :
2428 for (
int f = ndeb; f < nfin; f++)
2431 if ( (e1 =
elem(f, 0)) > -1) matrice(e1, f) += aef;
2432 if ( (e2 =
elem(f, 1)) > -1) matrice(e2, f) -= aef;
2440 for (
int f = ndeb; f < nfin; f++)
2443 if ( (e1 =
elem(f, 0)) > -1)
2445 if ( f < (ndeb+frontiere_dis.
nb_faces()/2) )
2446 matrice(e1, f) += aef;
2448 if ( (e2 =
elem(f, 1)) > -1)
2450 if ( (ndeb+frontiere_dis.
nb_faces()/2) <= f )
2451 matrice(e2, f) -= aef;
2457 Cerr <<
"On ne reconnait pas la condition limite : " << la_cl.valeur();
int face_voisins(int num_face, int i) const
renvoie l'element voisin de numface dans la direction i.
int nb_faces_bord() const
renvoie le nombre de faces sur lesquelles sont appliquees les conditions limites :