465 DoubleTab& in_out, FTd_vecteur3& norm_elem,
double& surface_tot)
470 const IntTab& facettes = maillage.
facettes();
473 const DoubleTab& sommets = maillage.
sommets();
478 Cerr <<
que_suis_je() <<
"::get_in_out_coords() only coded in 2 dimensions" << finl;
492 const double xP = zvdf.
xp(elem, 0);
493 const double yP = zvdf.
xp(elem, 1);
497 const double delta_x = zvdf.
dim_elem(elem, 0);
498 const double delta_y = zvdf.
dim_elem(elem, 1);
501 double rface_dis = xP + delta_x/2;
502 double lface_dis = xP - delta_x/2;
504 double tface_dis = yP + delta_y/2;
505 double bface_dis = yP - delta_y/2;
506 DoubleTab coo_faces(2,dim);
507 coo_faces(0,0) = lface_dis;
508 coo_faces(1,0) = rface_dis;
509 coo_faces(0,1) = bface_dis;
510 coo_faces(1,1) = tface_dis;
512 FTd_vecteur3 bary_facettes_dans_elem = {0., 0., 0.} ;
530 const double surface_facette = surface_facettes[fa7];
533 FTd_vecteur3 coord_barycentre_fraction = {0., 0., 0.};
534 FTd_vecteur3 coord_sommet = {0., 0., 0.};
537 const double nx = normale_facettes(fa7,dir);
538 norm_elem[dir] += nx * surf;
544 const int num_som = facettes(fa7, isom);
551 coord_sommet[dir] = sommets(num_som,dir);
552 coord_barycentre_fraction[dir] += bary_som * sommets(num_som,dir) * surf;
559 if(coord_sommet[0] - rface_dis< eps && coord_sommet[0] - lface_dis > -eps &&
560 coord_sommet[1]-tface_dis < eps && coord_sommet[1] - bface_dis > -eps)
570 if (inner_nodes >= 2)
576 const int node_number = facettes(fa7, isom);
580 coord_sommet[dir] = sommets(node_number,dir);
582 if((std::abs(coord_sommet[0]-lface_dis) <= eps)
583 ||(std::abs(coord_sommet[0]-rface_dis) <= eps)
584 ||(std::abs(coord_sommet[1]-bface_dis) <= eps)
585 ||(std::abs(coord_sommet[1]-tface_dis) <= eps))
587 xint[nint] = coord_sommet[0];
588 yint[nint] = coord_sommet[1];
590 Cerr<<
"Intersection found at node " << node_number <<
" belonging to " <<fa7 << finl;
595 else if((inner_nodes == 1)||(inner_nodes == 0))
602 const int s0 = facettes(fa7, 0);
603 const int s1 = facettes(fa7, 1);
604 const double x0 = sommets(s0,0);
605 const double x1 = sommets(s1,0);
606 const double y0 = sommets(s0,1);
607 const double y1 = sommets(s1,1);
608 for (
int jj=0; jj< 2; jj++)
610 const double xF = coo_faces(jj,0);
611 if ((x0-xF)*(x1-xF)<eps*(std::fabs(x0-x1)+eps))
614 double tmp_yint = 0.;
615 if (std::fabs(x0-x1)< eps)
618 Cerr <<
"Almost // to the face, which intersect?" <<finl;
619 Cerr <<
"Should we count two extrems as intersect" << finl;
621 yint[nint] = std::max(bface_dis,std::min(tface_dis, y0));
624 yint[nint] = std::max(bface_dis,std::min(tface_dis, y1));
629 tmp_yint = y0-(x0-xF)*(y0-y1)/(x0-x1);
631 if ((bface_dis-tmp_yint)*(tface_dis-tmp_yint)<eps*delta_y)
635 yint[nint] = tmp_yint;
639 const double yF = coo_faces(jj,1);
640 if ((y0-yF)*(y1-yF)<eps*(std::fabs(y0-y1)+eps))
643 double tmp_xint = 0.;
644 if (std::fabs(y0-y1)< eps)
647 Cerr <<
"Almost // to the face, which intersect?" <<finl;
648 Cerr <<
"Should we count two extrems as intersect" << finl;
650 xint[nint] = std::max(lface_dis,std::min(rface_dis, x0));
653 xint[nint] = std::max(lface_dis,std::min(rface_dis, x1));
655 Cerr <<
"Code to be validated" << finl;
659 tmp_xint = x0-(y0-yF)*(x0-x1)/(y0-y1);
661 if ((lface_dis-tmp_xint)*(rface_dis-tmp_xint)<eps*delta_x)
665 xint[nint] = tmp_xint;
673 Cerr <<
"WTF inner_nodes : " << inner_nodes << finl;
678 bary_facettes_dans_elem[dir] += coord_barycentre_fraction[dir];
685 for (
int i=0; i < nint; i++)
687 for (
int j=0; j < nint; j++)
691 const double dist = sqrt(pow((xint[i]-xint[j]), 2) + pow((yint[i]-yint[j]), 2));
697 xint[j] = xint[nint-1];
698 yint[j] = yint[nint-1];
719 Cerr <<
"Too many intersections " << nint <<
" -> trying to suppress duplicates" << finl;
720 Cerr <<
"Too many points, maybe a FT sommet was close to a border and is counted twice" << finl;
721 Cerr <<
"Intersections are: " << finl;
722 for (
int i=0; i<nint; i++)
723 Cerr << xint[i] <<
" " << yint[i] << finl;
724 Cerr <<
"In cell: " << elem <<
" at : " << finl;
725 Cerr <<
"x in : " << lface_dis <<
" " << lface_dis << finl;
726 Cerr <<
"y in : " << bface_dis <<
" " << tface_dis << finl;
727 for (
int i=0; i<nint-1; i++)
729 for (
int i2=0; i2<nint; i2++)
731 double dist = std::sqrt(pow(xint[i]-xint[i2],2) +pow(yint[i]-yint[i2],2));
738 xint[i2] = xint[nint-1];
739 yint[i2] = yint[nint-1];
749 Cerr <<
"Wrong number of intersections " << nint << finl;
750 Cerr <<
"STILL Too many points, maybe a FT sommet was close to a border and is counted twice" << finl;
751 Cerr <<
"Intersections are: " << finl;
752 for (
int i=0; i<nint; i++)
753 Cerr << xint[i] <<
" " << yint[i] << finl;
754 Cerr <<
"In cell: " << elem <<
"at : " << finl;
755 Cerr <<
"x in : " << lface_dis <<
" " << lface_dis << finl;
756 Cerr <<
"y in : " << bface_dis <<
" " << tface_dis << finl;
762 if (surface_tot > 0.)
765 norm_elem[dir] *= 1./surface_tot;
769 if(xint[1] > xint[0])
1162 ArrOfInt& num_faces,
1163 ArrOfDouble& mpoint_from_CL, ArrOfDouble& Q_from_CL)
1168 const DoubleVect& volumes = domaine_vf.
volumes();
1174 const double rho_phase_0 = tab_rho_phase_0(0,0);
1175 const double rho_phase_1 = tab_rho_phase_1(0,0);
1176 const double jump_inv_rho = 1./rho_phase_1 - 1./rho_phase_0;
1182 const IntTab& facettes = maillage.
facettes();
1184 const ArrOfInt& index_facette_elem = intersections.
index_facette();
1185 const DoubleTab& sommets = maillage.
sommets();
1190 double instant_Qmicro = 0., instant_Qmeso = 0.;
1191 if (first_call_for_this_mesh)
1196 instant_Qmicro = 0.;
1206 Cerr <<
"Now that elems_, mp_and Q_ are stored as members to the TCL class, we shouldn't need to call this function "
1207 <<
"several times for the same timestep. Please check or contact support." << finl;
1226 ArrOfInt list_meso_elems;
1227 ArrOfInt list_meso_faces;
1230 ArrOfInt list_micro_elems;
1231 ArrOfInt list_micro_faces;
1232 ArrOfInt list_micro_indexs;
1235 ArrOfDouble list_micro_fraction;
1241 const IntTab& elem_faces = zvdf.
elem_faces();
1251 DoubleTab vit(nsom, dim);
1256 Motcle nom_du_champ =
"vitesse";
1271 int nbwall_found = 0;
1275 const Nom& bc_name = la_cl->frontiere_dis().le_nom();
1282 Cerr <<
"[TCL]: Wall-type BC found at " << bc_name <<finl;
1284 nbwall_found = nbwall_found +1;
1288 if (nbwall_found != 1)
1289 Process::exit(
Nom(nbwall_found) +
" wall-type BC found!!!!! Check JDD, pls" );
1291 Process::exit(
"[TCL]: !!! NO WALL-TYPE BOUNDARY WAS FOUND IN THE DOMAINE, PLESEASE CHECK JDD" );
1299 for (
int ii = 0; ii < nb_face; ii++)
1301 const int num_face = ii + nb_first_face;
1302 const int elemi = face_voisins (num_face, 0)
1303 + face_voisins (num_face, 1) + 1;
1307 bool is_interf = (indica(elemi,0)>0.) && (indica(elemi,0)<1.) ;
1314 Cerr <<
"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! " << finl;
1315 Cerr <<
"[TCL!!!]: INDICATRICE and FT are NOT CONSISTENT "<< finl;
1316 Cerr <<
"[TCL!!!]: elem number " << elemi<<
" | indicatrice " << indica(elemi,0) << finl;
1317 Cerr <<
"[TCL!!!]: index " << index<<
" | iteration " << ii << finl;
1318 Cerr <<
"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! " << finl;
1325 const int korient = orientation(num_face);
1326 const double xwall = zvdf.
xv(num_face, korient);
1327 double nwall[3] = { 0., 0., 0. };
1328 (zvdf.
xp(elemi, korient) > xwall) ? nwall[korient] = 1. : nwall[korient] = -1.;
1342 const int sommet0 = facettes(fa7, 0);
1343 const int sommet1 = facettes(fa7, 1);
1347 int indextmp=index_facette_elem[fa7];
1348 while (indextmp >= 0)
1352 if (!is_in_list(list_micro_elems,elem))
1359 const int num_face_wall = wall_face_towards(iface, elem, num_bord, zvdf);
1368 x_cl_ = sommets(num_som,0);
1369 Cerr <<
"[TCL: MICRO] position of the CL is set to be " <<
x_cl_ << finl;
1375 if( est_egal(face, num_face_wall))
1378 Cerr <<
"[TCL-model] Contact_angle apparent is modified to " <<
theta_app_ << finl;
1386 Cerr <<
"[TCL-model] Qmicro is modified to " <<
Qtcl_ << finl;
1404 const int sommet0 = facettes(fa7, 0);
1405 const int sommet1 = facettes(fa7, 1);
1409 int indextmp=index_facette_elem[fa7];
1414 if (!is_in_list(list_micro_elems,elem))
1421 const int num_face_wall = wall_face_towards(iface, elem, num_bord, zvdf);
1430 x_cl_ = sommets(num_som,0);
1431 Cerr <<
"[TCL: MICRO] position of the CL is set to be " <<
x_cl_ << finl;
1436 if( est_egal(face, num_face_wall))
1439 Cerr <<
"[TCL-model] Contact_angle apparent is modified to " <<
theta_app_ << finl;
1447 Cerr <<
"[TCL-model] Qmicro is modified to " <<
Qtcl_ << finl;
1467 const double half_cell_height1 = std::fabs(zvdf.
dist_face_elem0(elem_faces(elemi,iface),elemi));
1468 const double hcell_top = dist1+half_cell_height1;
1469 const double hcell_bot = dist1-half_cell_height1;
1490 if (!is_in_list(list_meso_elems,elemi))
1513 ArrOfInt future_new_elems;
1518 ArrOfInt new_elems(future_new_elems);
1520 for (
int i=0; i< new_elems.
size_array(); i++)
1522 const int ielem = new_elems[i];
1524 const int nb_voisins = elem_faces.
dimension(1);
1525 for (
int iv=0; iv < nb_voisins; iv++)
1527 const int num_face2 = elem_faces(ielem,iv);
1528 int elem_voisin = face_voisins(num_face2, 0) + face_voisins(num_face2, 1) - ielem;
1533 int index2= (elem_voisin < nbelemt) ? intersections.
index_elem()[elem_voisin]:-1;
1538 if (is_in_list(list_micro_elems,elem_voisin) && is_in_list(list_meso_elems,elem_voisin))
1545 const double dist = std::fabs(zvdf.
dist_face_elem0(num_face,elem_voisin));
1546 const double half_cell_height = std::fabs(zvdf.
dist_face_elem0(elem_faces(elem_voisin,iface),elem_voisin));
1547 const double hcell_dn = dist-half_cell_height;
1548 const double hcell_up = dist+half_cell_height;
1557 const int num_face_wall = wall_face_towards(iface, elem_voisin, num_bord, zvdf);
1569 const int num_face_wall = wall_face_towards(iface, elem_voisin, num_bord, zvdf);
1580 if (!is_in_list(list_meso_elems,elem_voisin))
1585 if(!is_in_list(future_new_elems,elem_voisin))
1591 else if (hcell_dn<
ymeso_)
1593 if (!is_in_list(list_meso_elems,elem_voisin))
1599 const int num_face_wall = wall_face_towards(iface, elem_voisin, num_bord, zvdf);
1633 const double nn = list_micro_elems.
size_array();
1634 for (
int idx=0; idx<nn; idx++)
1636 const int elem = list_micro_elems[idx];
1637 const int num_face = list_micro_faces[idx];
1639 double surface_tot = 0.;
1641 FTd_vecteur3 norm_elem = {0., 0., 0.};
1651 in_out, norm_elem, surface_tot);
1659 FTd_vecteur3 norm_elem_approx = {0., 0., 0.};
1660 double surface_tot_approx = 0.;
1664 in_out_approx, norm_elem_approx, surface_tot_approx);
1665 Cerr <<
"comparison of approx to exact method in elem " << elem << finl;
1671 const double d0 = std::sqrt(in_out(0,0)*in_out(0,0)+in_out(0,1)*in_out(0,1));
1672 const double d1 = std::sqrt(in_out(1,0)*in_out(1,0)+in_out(1,1)*in_out(1,1));
1673 const double x_in = (d0<d1) ? in_out(0,0) : in_out(1,0);
1674 const double y_in = (d0<d1) ? in_out(0,1) : in_out(1,1);
1675 const double x_ou = (d0<d1) ? in_out(1,0) : in_out(0,0);
1676 const double y_ou = (d0<d1) ? in_out(1,1) : in_out(0,1);
1678 const double da0 = std::sqrt(in_out_approx(0,0)*in_out_approx(0,0)+in_out_approx(0,1)*in_out_approx(0,1));
1679 const double da1 = std::sqrt(in_out_approx(1,0)*in_out_approx(1,0)+in_out_approx(1,1)*in_out_approx(1,1));
1680 const double xa_in = (da0<da1) ? in_out_approx(0,0) : in_out_approx(1,0);
1681 const double ya_in = (da0<da1) ? in_out_approx(0,1) : in_out_approx(1,1);
1682 const double xa_ou = (da0<da1) ? in_out_approx(1,0) : in_out_approx(0,0);
1683 const double ya_ou = (da0<da1) ? in_out_approx(1,1) : in_out_approx(0,1);
1684 if ((std::fabs(x_in-xa_in)>DMINFLOAT) or (std::fabs(x_ou-xa_ou)>DMINFLOAT))
1685 Cerr <<
"inout x -- exact "
1687 << x_ou <<
" approx "
1689 << xa_ou <<
" delta "
1690 << x_in-xa_in <<
" "
1691 << x_ou-xa_ou << finl;
1692 if ((std::fabs(y_in-ya_in)>DMINFLOAT) or (std::fabs(y_ou-ya_ou)>DMINFLOAT))
1693 Cerr <<
"inout y -- exact "
1695 << y_ou <<
" approx "
1697 << ya_ou <<
" delta "
1698 << y_in-ya_in <<
" "
1699 << y_ou-ya_ou << finl;
1700 if ((std::fabs(norm_elem[0]-norm_elem_approx[0])>DMINFLOAT) or
1701 (std::fabs(norm_elem[1]-norm_elem_approx[1])>DMINFLOAT))
1702 Cerr <<
"normal_elem -- exact " << norm_elem[0] <<
" " << norm_elem[1]
1703 <<
" approx " << norm_elem_approx[0] <<
" " << norm_elem_approx[1]
1704 <<
" delta " << norm_elem[0]-norm_elem_approx[0] <<
" " << norm_elem[1]-norm_elem_approx[1]
1706 if (std::fabs(surface_tot-surface_tot_approx)>DMINFLOAT)
1707 Cerr <<
"surface -- exact "
1708 << surface_tot <<
" approx "
1709 << surface_tot_approx <<
" delta "
1710 << surface_tot-surface_tot_approx << finl;
1711 Cerr <<
"End of comparison" << finl;
1720 const double xwall =zvdf.
xv(num_face, korient);
1721 in_out(0,korient) -= xwall;
1722 in_out(1,korient) -= xwall;
1729 in_out(0,korient) *= -1;
1730 in_out(1,korient) *= -1;
1736 const double yl = in_out(0,1);
1738 const double yr = in_out(1,1);
1743 double circum_dis = 1.;
1747 circum_dis = angle_bidim_axi*
x_cl_;
1752 const double ytop = std::fmax(yr,yl);
1753 const double ybot = std::fmin(yr,yl);
1756 const double ymin = exp(-19);
1761 double fraction = 0.;
1765 Qmicro = log(std::fmin(
ym_,std::fmax(ytop,ymin))/ std::fmin(
ym_,std::fmax(ybot,ymin))) / (log(
ym_) +19.)*Qtot;
1766 fraction = log(std::fmin(
ym_,std::fmax(ytop,ymin))/ std::fmin(
ym_,std::fmax(ybot,ymin))) / (log(
ym_) +19.);
1771 const int index= list_micro_indexs[idx];
1774 Qmicro = fraction*Qtot;
1777 double Q_int = Qmicro*circum_dis;
1779 if (std::fabs(Q_int)<DMINFLOAT)
1782 if (first_call_for_this_mesh)
1797 instant_Qmicro += Qmicro;
1801 Cerr <<
"[TCL: MICRO] time = " <<
integration_time_ <<
" Qmicro= " << Qmicro <<
" Qint " << Q_int << finl;
1808 instant_Qmicro =
mp_sum(instant_Qmicro);
1812 Cerr <<
" nb_contact_line_contribution " << Q_from_CL.
size_array() << finl;
1813 Cerr <<
" ********* VALUES OF MICRO CONTRIBUTION *************** " << finl;
1814 Cerr <<
"elem\t| face\t| Q\t\t| mp\t\t| fraction" << finl;
1815 for (
int idx = 0; idx < Q_from_CL.
size_array(); idx++)
1817 Cerr << elems_with_CL_contrib[idx] <<
"\t| " << num_faces[idx] <<
"\t| "
1818 << Q_from_CL[idx] <<
"\t| " << mpoint_from_CL[idx] <<
"\t| "
1819 <<list_micro_fraction[idx] << finl;
1821 Cerr <<
" ************************************************************* " << finl;
1827 const double nn = list_meso_elems.
size_array();
1828 for (
int idx=0; idx<nn; idx++)
1830 const int elem = list_meso_elems[idx];
1831 const int num_face = list_meso_faces[idx];
1834 double surface_tot = 0.;
1836 FTd_vecteur3 norm_elem = {0., 0., 0.};
1846 in_out, norm_elem, surface_tot);
1854 FTd_vecteur3 norm_elem_approx = {0., 0., 0.};
1855 double surface_tot_approx = 0.;
1859 in_out_approx, norm_elem_approx, surface_tot_approx);
1860 Cerr <<
"comparison of approx to exact method in elem " << elem << finl;
1866 const double d0 = std::sqrt(in_out(0,0)*in_out(0,0)+in_out(0,1)*in_out(0,1));
1867 const double d1 = std::sqrt(in_out(1,0)*in_out(1,0)+in_out(1,1)*in_out(1,1));
1868 const double x_in = (d0<d1) ? in_out(0,0) : in_out(1,0);
1869 const double y_in = (d0<d1) ? in_out(0,1) : in_out(1,1);
1870 const double x_ou = (d0<d1) ? in_out(1,0) : in_out(0,0);
1871 const double y_ou = (d0<d1) ? in_out(1,1) : in_out(0,1);
1873 const double da0 = std::sqrt(in_out_approx(0,0)*in_out_approx(0,0)+in_out_approx(0,1)*in_out_approx(0,1));
1874 const double da1 = std::sqrt(in_out_approx(1,0)*in_out_approx(1,0)+in_out_approx(1,1)*in_out_approx(1,1));
1875 const double xa_in = (da0<da1) ? in_out_approx(0,0) : in_out_approx(1,0);
1876 const double ya_in = (da0<da1) ? in_out_approx(0,1) : in_out_approx(1,1);
1877 const double xa_ou = (da0<da1) ? in_out_approx(1,0) : in_out_approx(0,0);
1878 const double ya_ou = (da0<da1) ? in_out_approx(1,1) : in_out_approx(0,1);
1879 if ((std::fabs(x_in-xa_in)>DMINFLOAT) or (std::fabs(x_ou-xa_ou)>DMINFLOAT))
1880 Cerr <<
"inout x -- exact "
1882 << x_ou <<
" approx "
1884 << xa_ou <<
" delta "
1885 << x_in-xa_in <<
" "
1886 << x_ou-xa_ou << finl;
1887 if ((std::fabs(y_in-ya_in)>DMINFLOAT) or (std::fabs(y_ou-ya_ou)>DMINFLOAT))
1888 Cerr <<
"inout y -- exact "
1890 << y_ou <<
" approx "
1892 << ya_ou <<
" delta "
1893 << y_in-ya_in <<
" "
1894 << y_ou-ya_ou << finl;
1895 if ((std::fabs(norm_elem[0]-norm_elem_approx[0])>DMINFLOAT) or
1896 (std::fabs(norm_elem[1]-norm_elem_approx[1])>DMINFLOAT))
1897 Cerr <<
"normal_elem -- exact " << norm_elem[0] <<
" " << norm_elem[1]
1898 <<
" approx " << norm_elem_approx[0] <<
" " << norm_elem_approx[1]
1899 <<
" delta " << norm_elem[0]-norm_elem_approx[0] <<
" " << norm_elem[1]-norm_elem_approx[1]
1901 if (std::fabs(surface_tot-surface_tot_approx)>DMINFLOAT)
1902 Cerr <<
"surface -- exact "
1903 << surface_tot <<
" approx "
1904 << surface_tot_approx <<
" delta "
1905 << surface_tot-surface_tot_approx << finl;
1906 Cerr <<
"End of comparison" << finl;
1908 double factor = surface_tot/pow(volumes[elem], 2./3.);
1911 Cerr <<
"We are skipping cell " << elem <<
"because the interface in it has negligible surface!!" << finl;
1920 const double ywall =zvdf.
xv(num_face, korient);
1921 in_out(0,korient) -= ywall;
1922 in_out(1,korient) -= ywall;
1929 in_out(0,korient) *= -1;
1930 in_out(1,korient) *= -1;
1935 const double xl = in_out(0,0);
1936 const double yl = in_out(0,1);
1937 const double xr = in_out(1,0);
1938 const double yr = in_out(1,1);
1953 const double cell_left = zvdf.
xp(elem, 1-korient)-0.5*zvdf.
dim_elem(elem, 1-korient);
1954 const double ytop = std::fmax(yr,yl);
1955 const double xleft = std::fmin(xr,xl);
1957 if (est_egal(xleft, cell_left) && est_egal(ytop,
ymeso_))
1963 Q_int =
compute_Qint(in_out, theta_app_loc, num_face, Q_meso);
1971 if (std::fabs(Q_int)<DMINFLOAT)
1974 if (first_call_for_this_mesh)
1987 double x1=0., y1=0.;
1988 double x2=0., y2=0.;
1991 double x0=0., y0=0.;
2017 const double f = (y0-y1)/(y2-y1);
2019 Cerr <<
"[x0 vs x_cl] t= "<<
integration_time_ <<
" elem= " << elem <<
" x0/x_cl " << x0<<
" " <<
x_cl_<< finl;
2027 const double dx = x2-x0;
2028 const double dy = y2-y0;
2029 const double s_meso = sqrt(dx*dx+dy*dy);
2030 if (s_meso<DMINFLOAT)
2039 instant_Qmeso += Q_meso;
2046 const double rm = 0.5*(xr+xl);
2049 Cerr <<
"[TCL: MESO: Assessment-S_meso] t= "<<
integration_time_ <<
" elem= " << elem <<
" LR= " ;
2050 Cerr << s_meso <<
" Ameso/2pir= " << s_meso_assessed <<
" err(%)= " << 50.*std::abs(s_meso_assessed-s_meso)/(s_meso_assessed+s_meso) << finl;
2060 instant_Qmeso =
mp_sum(instant_Qmeso);
2062 const double verbosity=1;
2065 const int nb_contact_line_contribution = elems_with_CL_contrib.
size_array();
2066 if (nb_contact_line_contribution>0 )
2069 Cerr <<
" time " << t << finl;
2070 Cerr <<
" nb_contact_line_contribution " << nb_contact_line_contribution << finl;
2071 Cerr <<
" ********* VALUES OF CONTACT LINE CONTRIBUTION *************** " << finl;
2072 Cerr <<
"elem\t| face\t| Q\t\t| mp" << finl;
2073 for (
int idx = 0; idx < nb_contact_line_contribution; idx++)
2075 Cerr << elems_with_CL_contrib[idx] <<
"\t| " << num_faces[idx] <<
"\t| "
2076 << Q_from_CL[idx] <<
"\t| " << mpoint_from_CL[idx] << finl;
2078 Cerr <<
" ************************************************************* " << finl;
2079 Cerr <<
"[instant-Q] time micro meso " << t <<
" " <<
2080 instant_Qmicro <<
" " << instant_Qmeso << finl;
2081 Cerr <<
" ************************************************************* " << finl;
2095 mp_.resize_array(0);
2097 const int nn = elems_with_CL_contrib.
size_array();
2101 for (
int idx = 0; idx < nn; idx++)
2103 const int elem = elems_with_CL_contrib[idx];
2104 elems_.append_array(elem);
2106 mp_.append_array(mpoint_from_CL[idx]);
2107 Q_.append_array(Q_from_CL[idx]);