16#include <Post_Processing_Hydrodynamic_Forces_Stokes.h>
18#include <Convection_Diffusion_Temperature_FT_Disc.h>
19#include <Transport_Interfaces_FT_Disc.h>
20#include <Navier_Stokes_FT_Disc.h>
21#include <Fluide_Incompressible.h>
22#include <Connex_components_FT.h>
23#include <Solid_Particle_base.h>
24#include <Fluide_Diphasique.h>
25#include <Maillage_FT_Disc.h>
26#include <Matrice_Dense.h>
27#include <Domaine_VDF.h>
31 "Post_Processing_Hydrodynamic_Forces_Stokes",
41 Cerr <<
"Error: Post_Processing_Hydrodynamic_Forces::printOn is not implemented." << finl;
69 Cerr <<
"Post_Processing_Hydrodynamic_Forces_Stokes::compute_hydrodynamic_forces" << finl;
75 IntVect compo_connexes_fa7(nb_fa7);
76 int n = search_connex_components_local_FT(mesh, compo_connexes_fa7);
77 int nb_particles_tot=compute_global_connex_components_FT(mesh, compo_connexes_fa7, n);
99 particles_eulerian_id_number);
103 Thermal_correction_discretization_method::P1,
104 compo_connexes_fa7, fa7_surface, tab_fa7_normal);
110 fa7_surface, tab_fa7_normal);
116 fa7_surface, tab_fa7_normal);
130 total_pressure_force_Stokes_th_.resize(nb_particles_tot,
dimension);
131 total_friction_force_Stokes_th_.resize(nb_particles_tot,
dimension);
134 total_pressure_force_Stokes_th_=0;
135 total_friction_force_Stokes_th_=0;
148 const double mu_f =two_phase_fluid.
fluide_phase(id_fluid_phase).
149 viscosite_dynamique().valeurs()(0, 0);
150 const double mu_p = two_phase_fluid.
fluide_phase(1-id_fluid_phase).
151 masse_volumique().valeurs()(0, 0);
152 const double rho_f =two_phase_fluid.
fluide_phase(id_fluid_phase).
153 viscosite_dynamique().valeurs()(0, 0);
154 const double rho_p = two_phase_fluid.
fluide_phase(1-id_fluid_phase).
155 masse_volumique().valeurs()(0, 0);
156 const double phi_mu=mu_p/mu_f;
160 vect_g(i)=gravite(0,i);
161 const double norme_g = sqrt(local_carre_norme_vect(vect_g));
163 vinf_Stokes_=2./3.*(pow(particle_radius,2)*norme_g/mu_f)*((1+phi_mu)/(2.+3.*phi_mu)*(rho_f-rho_p));
172 const DoubleTab& xv = domain_vdf.
xv();
178 const double mu_f =two_phase_fluid.
fluide_phase(id_fluid_phase).
179 viscosite_dynamique().valeurs()(0, 0);
180 const double mu_p = two_phase_fluid.
fluide_phase(1-id_fluid_phase).
181 masse_volumique().valeurs()(0, 0);
182 const double phi_mu=mu_p/mu_f;
189 for (
int num_face=0; num_face<vitesse_Stokes_th.
dimension_tot(0); num_face++)
191 double x=xv(num_face,0);
192 double y=xv(num_face,1);
193 double z=xv(num_face,2);
194 if (sqrt(x*x+y*y+z*z)>=particle_radius)
198 particle_radius, phi_mu);
201 particle_radius, phi_mu);
204 particle_radius, phi_mu);
210 vitesse_Stokes_th(num_face)=vinf_Stokes/(2*pow(particle_radius,2))*
215 vitesse_Stokes_th(num_face)=vinf_Stokes/(2*pow(particle_radius,2))*
220 vitesse_Stokes_th(num_face)=vinf_Stokes/(2*(1+phi_mu))*
221 (1+z*z/(pow(particle_radius,2))-2*(x*x+y*y+z*z)/
222 (pow(particle_radius,2)));
235 const DoubleTab& xp = domain_vdf.
xp();
241 const double mu_f =two_phase_fluid.
fluide_phase(id_fluid_phase).
242 viscosite_dynamique().valeurs()(0, 0);
243 const double mu_p = two_phase_fluid.
fluide_phase(1-id_fluid_phase).
244 masse_volumique().valeurs()(0, 0);
245 const double phi_mu=mu_p/mu_f;
249 for (
int num_elem=0; num_elem<pressure_Stokes_th.
dimension_tot(0); num_elem++)
251 double x= xp(num_elem,0);
252 double y= xp(num_elem,1);
253 double z= xp(num_elem,2);
254 if (sqrt(x*x+y*y+z*z)>=particle_radius)
256 pressure_Stokes_th(num_elem)=mu_f*vinf_Stokes*((2+3*phi_mu)/(1+phi_mu))*
257 1/2*particle_radius*z/(pow(x*x+y*y+z*z,1.5));
261 pressure_Stokes_th(num_elem)=mu_p*vinf_Stokes*5/((1+phi_mu)*(pow(particle_radius,2)))*z;
274 pressure_fa7_Stokes_th_.resize(nb_fa7);
275 pressure_fa7_Stokes_th_=3e15;
278 pressure_force_Stokes_th_fa7_.resize(nb_fa7,
dimension);
279 pressure_force_Stokes_th_fa7_=3e15;
281 friction_force_Stokes_th_fa7_.resize(nb_fa7,
dimension);
282 friction_force_Stokes_th_fa7_=3e15;
297 U_P1_Stokes_th_.resize(nb_fa7,
dimension);
298 U_P2_Stokes_th_.resize(nb_fa7,
dimension);
315 sigma_xx_fa7_Stokes_th_.resize(nb_fa7);
316 sigma_xy_fa7_Stokes_th_.resize(nb_fa7);
317 sigma_xz_fa7_Stokes_th_.resize(nb_fa7);
318 sigma_yy_fa7_Stokes_th_.resize(nb_fa7);
319 sigma_yz_fa7_Stokes_th_.resize(nb_fa7);
320 sigma_zz_fa7_Stokes_th_.resize(nb_fa7);
335 dUdx_P1_Stokes_th_.resize(nb_fa7);
336 dUdz_P1_Stokes_th_.resize(nb_fa7);
337 dVdz_P1_Stokes_th_.resize(nb_fa7);
338 dWdx_P1_Stokes_th_.resize(nb_fa7);
339 dWdy_P1_Stokes_th_.resize(nb_fa7);
340 dWdz_P1_Stokes_th_.resize(nb_fa7);
355 dUdx_P2_Stokes_th_.resize(nb_fa7);
356 dUdz_P2_Stokes_th_.resize(nb_fa7);
357 dVdz_P2_Stokes_th_.resize(nb_fa7);
358 dWdx_P2_Stokes_th_.resize(nb_fa7);
359 dWdy_P2_Stokes_th_.resize(nb_fa7);
360 dWdz_P2_Stokes_th_.resize(nb_fa7);
372 const double mu_f =two_phase_fluid.
fluide_phase(id_fluid_phase).
373 viscosite_dynamique().valeurs()(0, 0);
374 const double mu_p = two_phase_fluid.
fluide_phase(1-id_fluid_phase).
375 masse_volumique().valeurs()(0, 0);
376 const double phi_mu=mu_p/mu_f;
377 return(mu_f*vinf_Stokes*((2+3*phi_mu)/(1+phi_mu))*1/2*particle_radius*z/(pow(x*x+y*y+z*z,1.5)));
381 double vinf_Stokes,
double particle_radius,
double phi_mu)
383 return (vinf_Stokes*z*x*((2+3*phi_mu)/(1+phi_mu)*(particle_radius)/(4*(pow(x*x+y*y+z*z,1.5)))-
384 3*phi_mu/(1+phi_mu)*pow(particle_radius,3)/(4*pow(x*x+y*y+z*z,2.5))));
388 double vinf_Stokes,
double particle_radius,
double phi_mu)
390 return (vinf_Stokes*z*y*((2+3*phi_mu)/(1+phi_mu)*(particle_radius)/(4*(pow(x*x+y*y+z*z,1.5)))-
391 3*phi_mu/(1+phi_mu)*pow(particle_radius,3)/(4*pow(x*x+y*y+z*z,2.5))));
395 double vinf_Stokes,
double particle_radius,
double phi_mu)
397 return (-vinf_Stokes*(+(z*z)*(1/(x*x+y*y+z*z)-(2+3*phi_mu)/(1+phi_mu)*
398 (particle_radius)/(2*pow(x*x+y*y+z*z,1.5))+phi_mu/(1+phi_mu)*
399 pow(particle_radius,3)/(2*pow(x*x+y*y+z*z,2.5)))+(1-z*z/(x*x+y*y+z*z))*
400 (1-(2+3*phi_mu)/(1+phi_mu)*particle_radius/(4*sqrt(x*x+y*y+z*z))-
401 phi_mu/(1+phi_mu)*pow(particle_radius,3)/(4*pow(x*x+y*y+z*z,1.5)))));
405 double particle_radius,
double phi_mu)
425 const int is_discr_elem_diph,
426 const DoubleTab& gravity_center_fa7,
428 const DoubleTab& tab_fa7_normal,
429 const IntTab& particles_eulerian_id_number)
433 const Domaine& domain = domain_vdf.
domaine();
440 const double mu_f =two_phase_fluid.
fluide_phase(id_fluid_phase).
441 viscosite_dynamique().valeurs()(0, 0);
442 const double mu_p = two_phase_fluid.
fluide_phase(1-id_fluid_phase).
443 masse_volumique().valeurs()(0, 0);
444 const double phi_mu=mu_p/mu_f;
446 for (
int fa7 =0 ; fa7<nb_fa7 ; fa7++)
452 gravity_center_fa7(fa7,1),
453 gravity_center_fa7(fa7,2));
464 if (tab_fa7_normal(fa7,dim)>0)
465 delta_i(dim) = (elem_haut>=0) ?
466 fabs(domain_vdf.
dist_elem(elem_diph,elem_haut, dim)) :
467 fabs(domain_vdf.
dist_elem(elem_diph,elem_bas, dim));
469 delta_i(dim) = (elem_bas>=0) ?
470 fabs(domain_vdf.
dist_elem(elem_diph,elem_bas, dim)) :
471 fabs(domain_vdf.
dist_elem(elem_diph,elem_haut, dim));
477 epsilon+= fabs(delta_i(dim)*fabs(tab_fa7_normal(fa7,dim)));
482 normale_fa7(dim)=tab_fa7_normal(fa7,dim);
501 Thermal_correction_discretization_method
503 const IntVect& compo_connexes_fa7,
504 const ArrOfDouble& fa7_surface,
505 const DoubleTab& tab_fa7_normal)
507 DoubleTab pressure_P1(nb_fa7);
508 DoubleTab pressure_P2(nb_fa7);
519 DoubleTab extrapolated_pressure(nb_fa7);
526 const double mu_f =two_phase_fluid.
fluide_phase(id_fluid_phase).
527 viscosite_dynamique().valeurs()(0, 0);
528 const double mu_p = two_phase_fluid.
fluide_phase(1-id_fluid_phase).
529 masse_volumique().valeurs()(0, 0);
530 const double phi_mu=mu_p/mu_f;
532 for (
int fa7=0; fa7<nb_fa7; fa7++)
537 (pressure_P2(fa7)-pressure_P1(fa7))/
542 gravity_center_fa7(fa7,1),gravity_center_fa7(fa7,2));
547 extrapolated_pressure(fa7)=-1e15;
551 for (
int fa7=0; fa7<nb_fa7; fa7++)
553 int compo=compo_connexes_fa7(fa7);
554 double coeff=-extrapolated_pressure(fa7)*fa7_surface(fa7);
555 DoubleVect pressure_force_fa7(
dimension);
557 pressure_force_fa7(dim)=coeff*tab_fa7_normal(fa7,dim);
564 pressure_force_Stokes_th_fa7_(fa7,0)=-(mu_f*vinf_Stokes*(2.+3.*phi_mu)/
565 (1.+phi_mu)*1./(2.*particle_radius)*
566 gravity_center_fa7(fa7,2)/particle_radius)*
567 tab_fa7_normal(fa7,0)*fa7_surface(fa7);
568 pressure_force_Stokes_th_fa7_(fa7,1)=-(mu_f*vinf_Stokes*(2.+3.*phi_mu)/(1.+phi_mu)*
569 1./(2.*particle_radius)*
570 gravity_center_fa7(fa7,2)/particle_radius)*
571 tab_fa7_normal(fa7,1)*fa7_surface(fa7);
572 pressure_force_Stokes_th_fa7_(fa7,2)=-(mu_f*vinf_Stokes*(2.+3.*phi_mu)/(1.+phi_mu)*
573 1./(2.*particle_radius)*
574 gravity_center_fa7(fa7,2)/particle_radius)*
575 tab_fa7_normal(fa7,2)*fa7_surface(fa7);
580 total_pressure_force_Stokes_th_(compo,dim)+=pressure_force_Stokes_th_fa7_(fa7,dim);
589 const IntVect& compo_connexes_fa7,
590 const ArrOfDouble& fa7_surface,
591 const DoubleTab& tab_fa7_normal)
593 int interp_gradU_P1_ok=0;
594 int interp_gradU_P2_ok=0;
606 const double mu_f =two_phase_fluid.
fluide_phase(id_fluid_phase).
607 viscosite_dynamique().valeurs()(0, 0);
608 const double mu_p = two_phase_fluid.
fluide_phase(1-id_fluid_phase).
609 masse_volumique().valeurs()(0, 0);
610 const double phi_mu=mu_p/mu_f;
632 if ( interp_gradU_P1_ok==1 && interp_gradU_P2_ok==1 )
635 grad_U_extrapole=1e20;
637 for (
int fa7=0; fa7<nb_fa7; fa7++)
650 grad_U_extrapole(fa7,i,j) = grad_U_P2(fa7,i,j)-
658 for (
int fa7=0; fa7<nb_fa7; fa7++)
660 int compo=compo_connexes_fa7(fa7);
666 stress_tensor(i,j) = (grad_U_extrapole(fa7,i,j) +
667 grad_U_extrapole(fa7,j,i));
677 DoubleTab la_normale_fa7_x_surface(
dimension);
680 la_normale_fa7_x_surface(dim) = fa7_surface(fa7)*tab_fa7_normal(fa7,dim);
682 DoubleVect friction_force_fa7=stress_tensor*la_normale_fa7_x_surface;
689 friction_force_Stokes_th_fa7_(fa7,0)=-mu_f*vinf_Stokes*gravity_center_fa7(fa7,0)*
690 gravity_center_fa7(fa7,2)/(pow(particle_radius,3))*(9.*phi_mu+8.)/
691 (1.+phi_mu)*fa7_surface(fa7);
692 friction_force_Stokes_th_fa7_(fa7,1)=-mu_f*vinf_Stokes*
693 gravity_center_fa7(fa7,1)*gravity_center_fa7(fa7,2)/(pow(particle_radius,3))*
694 (9.*phi_mu+8.)/(1.+phi_mu)*fa7_surface(fa7);
695 friction_force_Stokes_th_fa7_(fa7,2)=mu_f*vinf_Stokes*1./(2.*
696 particle_radius*(1.+phi_mu))*(-3.*phi_mu+pow(gravity_center_fa7(fa7,2)/
697 particle_radius,2)*(3.*phi_mu-4.))*fa7_surface(fa7);
702 total_friction_force_Stokes_th_(compo,dim)+=
703 friction_force_Stokes_th_fa7_(fa7,dim);
711 double r_fa7,
double phi_mu,
double particle_radius)
714 double dUdx=(vinf_Stokes*(pow(x_fa7,2)*z_fa7/pow(r_fa7,3)*
715 ( -(2+3*phi_mu)/(1+phi_mu)*3*particle_radius/(pow(2*r_fa7,2)) +
716 phi_mu/(1+phi_mu)*9*pow(particle_radius,3)/(4*pow(r_fa7,4)) ) +
717 pow(x_fa7,2)/(pow(r_fa7,2)-
718 pow(z_fa7,2))*z_fa7/r_fa7*
719 ( (1-pow(z_fa7/r_fa7,2))*( (2+3*phi_mu)/
720 (1+phi_mu)*particle_radius/
721 (4*pow(r_fa7,2)) + phi_mu/(1+phi_mu)*
722 3*pow(particle_radius,3)/(4*pow(r_fa7,4)) )
723 + pow(z_fa7/r_fa7,2)*( (2+3*phi_mu)/(1+phi_mu)*
724 particle_radius/(4*pow(r_fa7,2))-
725 phi_mu/(1+phi_mu)*3*pow(particle_radius,3)/
727 + pow(y_fa7,2)*z_fa7/(r_fa7*(pow(r_fa7,2)
728 -pow(z_fa7,2)))*((2+3*phi_mu)/(1+phi_mu)*
729 particle_radius/(pow(2*r_fa7,2))-
731 pow(particle_radius,3)/(4*pow(r_fa7,4)))));
735 double r_fa7,
double phi_mu,
double particle_radius)
738 double dUdz=vinf_Stokes*(x_fa7/r_fa7*(pow(z_fa7/r_fa7,2)*
739 (-(2+3*phi_mu)/(1+phi_mu)*particle_radius/(2*pow(r_fa7,2))+phi_mu/
740 (1+phi_mu)*3*pow(particle_radius,3)/(2*pow(r_fa7,4)))
741 +(1-pow(z_fa7/r_fa7,2))*
742 ((2+3*phi_mu)/(1+phi_mu)*particle_radius/
743 (4*pow(r_fa7,2))-phi_mu/(1+phi_mu)*3*
744 pow(particle_radius,3)/(4*pow(r_fa7,4))))+
745 pow(z_fa7,2)*x_fa7/pow(r_fa7,3)*
746 phi_mu/(1+phi_mu)*3*pow(particle_radius,3)/
752 double r_fa7,
double phi_mu,
double particle_radius)
755 double dVdz=vinf_Stokes*(y_fa7/r_fa7*(pow(z_fa7/r_fa7,2)*
756 (-(2+3*phi_mu)/(1+phi_mu)*particle_radius/(2*pow(r_fa7,2))+phi_mu/
757 (1+phi_mu)*3*pow(particle_radius,3)/(2*pow(r_fa7,4)))
758 +(1-pow(z_fa7/r_fa7,2))*((2+3*phi_mu)/(1+phi_mu)*
759 particle_radius/(4*pow(r_fa7,2))-phi_mu/(1+phi_mu)*
760 3*pow(particle_radius,3)/(4*pow(r_fa7,4))))+
761 pow(z_fa7,2)*y_fa7/pow(r_fa7,3)*
762 phi_mu/(1+phi_mu)*3*pow(particle_radius,3)/(2*pow(r_fa7,4)));
768 double r_fa7,
double phi_mu,
double particle_radius)
771 double dWdx=vinf_Stokes*(pow(z_fa7,2)*x_fa7/pow(r_fa7,3)*
772 (-(2+3*phi_mu)/(1+phi_mu)*3*particle_radius/(pow(2*r_fa7,2))+
773 phi_mu/(1+phi_mu)*9*pow(particle_radius,3)/(4*pow(r_fa7,4)))-
774 x_fa7/r_fa7*((1-pow(z_fa7/r_fa7,2))*((2+3*phi_mu)/
775 (1+phi_mu)*particle_radius/pow(2*r_fa7,2)+
776 phi_mu/(1+phi_mu)*3*pow(particle_radius,3)/
777 (4*pow(r_fa7,4)))+pow(z_fa7/r_fa7,2)*
778 ((2+3*phi_mu)/(1+phi_mu)*particle_radius/pow(2*r_fa7,2)-
779 phi_mu/(1+phi_mu)*3*pow(particle_radius,3)/
786 double r_fa7,
double phi_mu,
double particle_radius)
789 double dWdy=vinf_Stokes*(pow(z_fa7,2)*y_fa7/pow(r_fa7,3)*
790 (-(2+3*phi_mu)/(1+phi_mu)*3*particle_radius/(pow(2*r_fa7,2))+
791 phi_mu/(1+phi_mu)*9*pow(particle_radius,3)/(4*pow(r_fa7,4)))-
792 y_fa7/r_fa7*((1-pow(z_fa7/r_fa7,2))*((2+3*phi_mu)/
793 (1+phi_mu)*particle_radius/pow(2*r_fa7,2)+phi_mu/
794 (1+phi_mu)*3*pow(particle_radius,3)/(4*pow(r_fa7,4)))
795 +pow(z_fa7/r_fa7,2)*((2+3*phi_mu)/(1+phi_mu)*
796 particle_radius/pow(2*r_fa7,2)-phi_mu/(1+phi_mu)*
797 3*pow(particle_radius,3)/(4*pow(r_fa7,4)))));
803 double r_fa7,
double phi_mu,
double particle_radius)
806 double dWdz=vinf_Stokes*(z_fa7/r_fa7*(pow(z_fa7/r_fa7,2)*
807 (-(2+3*phi_mu)/(1+phi_mu)*particle_radius/(2*pow(r_fa7,2))+
808 phi_mu/(1+phi_mu)*3*pow(particle_radius,3)/(2*pow(r_fa7,4)))+
809 (1-pow(z_fa7/r_fa7,2))*((2+3*phi_mu)/(1+phi_mu)*
810 particle_radius/(pow(2*r_fa7,2))-phi_mu/(1+phi_mu)*
811 3*pow(particle_radius,3)/(4*pow(r_fa7,4))))-
812 z_fa7/r_fa7*(1-pow(z_fa7/r_fa7,2))*
813 phi_mu/(1+phi_mu)*3*pow(particle_radius,3)/(2*pow(r_fa7,4)));
819 double phi_mu,
double particle_radius)
824 double r_fa7_P1=sqrt(x_fa7_P1*x_fa7_P1+y_fa7_P1*y_fa7_P1+z_fa7_P1*z_fa7_P1);
827 r_fa7_P1, phi_mu, particle_radius);
829 r_fa7_P1, phi_mu, particle_radius);
831 r_fa7_P1, phi_mu, particle_radius);
833 r_fa7_P1, phi_mu, particle_radius);
835 r_fa7_P1, phi_mu, particle_radius);
837 r_fa7_P1, phi_mu, particle_radius);
841 double phi_mu,
double particle_radius)
846 double r_fa7_P2=sqrt(x_fa7_P2*x_fa7_P2+y_fa7_P2*y_fa7_P2+z_fa7_P2*z_fa7_P2);
849 r_fa7_P2, phi_mu, particle_radius);
851 r_fa7_P2, phi_mu, particle_radius);
853 r_fa7_P2, phi_mu, particle_radius);
855 r_fa7_P2, phi_mu, particle_radius);
857 r_fa7_P2, phi_mu, particle_radius);
859 r_fa7_P2, phi_mu, particle_radius);
872 const double mu_f =two_phase_fluid.
fluide_phase(id_fluid_phase).
873 viscosite_dynamique().valeurs()(0, 0);
874 const double mu_p = two_phase_fluid.
fluide_phase(1-id_fluid_phase).
875 masse_volumique().valeurs()(0, 0);
876 const double phi_mu=mu_p/mu_f;
880 double X_p=gravity_center_fa7(fa7,0);
881 double Y_p=gravity_center_fa7(fa7,1);
882 double Z_p=gravity_center_fa7(fa7,2);
884 sigma_xx_fa7_Stokes_th_(fa7)=(mu_f*vinf_Stokes/(particle_radius))*
885 (Z_p/(particle_radius*(1.+phi_mu)))*(pow(X_p/particle_radius,2)*
886 (Z_p*Z_p/(pow(particle_radius,2)*(1.-
887 pow(Z_p/particle_radius,2)))+3.*phi_mu-2.)+
888 (pow(Y_p/particle_radius,2)*(1.-
889 pow(Z_p/particle_radius,2))));
890 sigma_xy_fa7_Stokes_th_(fa7)=(mu_f*vinf_Stokes/(particle_radius))*
891 (Z_p/(particle_radius*(1.+phi_mu)))*X_p*Y_p/(particle_radius*
892 particle_radius)*(3.*phi_mu-3.);
893 sigma_xz_fa7_Stokes_th_(fa7)=(mu_f*vinf_Stokes/(particle_radius))*
894 X_p/(particle_radius*(1.+phi_mu))*(-3./2.*phi_mu*(1.-
895 pow(Z_p/particle_radius,2))+3.*pow(Z_p/particle_radius,2)*
897 sigma_yy_fa7_Stokes_th_(fa7)=(mu_f*vinf_Stokes/(particle_radius))*
898 (Z_p/(particle_radius*(1.+phi_mu)))*(Y_p*Y_p/pow(particle_radius,2)*
899 (3.*phi_mu-2.+(Z_p*Z_p/pow(particle_radius,2))/
900 (1.-Z_p*Z_p/pow(particle_radius,2)))+
901 X_p*X_p/(pow(particle_radius,2)*(1.-Z_p*Z_p/
902 pow(particle_radius,2))));
903 sigma_yz_fa7_Stokes_th_(fa7)=(mu_f*vinf_Stokes/(particle_radius))*
904 Y_p/(particle_radius*(1.+phi_mu))*(-3./2.*phi_mu*(1.-Z_p*
905 Z_p/pow(particle_radius,2))+3.*Z_p*Z_p/
906 pow(particle_radius,2)*(phi_mu/2.-1.));
907 sigma_zz_fa7_Stokes_th_(fa7)=(mu_f*vinf_Stokes/(particle_radius))*
908 (Z_p/(particle_radius*(1.+phi_mu)))*(-3.*phi_mu/2.*
909 (1.-Z_p*Z_p/pow(particle_radius,2))+1.-3.*
910 Z_p*Z_p/pow(particle_radius,2));
915 const IntVect& compo_connexes_fa7,
916 const ArrOfDouble& fa7_surface,
917 const DoubleTab& tab_fa7_normal)
923 const Domaine& domain = domain_vdf.
domaine();
928 const double mu_f =two_phase_fluid.
fluide_phase(id_fluid_phase).
929 viscosite_dynamique().valeurs()(0, 0);
930 const double mu_p = two_phase_fluid.
fluide_phase(1-id_fluid_phase).
931 masse_volumique().valeurs()(0, 0);
932 const double phi_mu=mu_p/mu_f;
936 int interp_U_P1_ok=0;
937 int interp_U_P2_ok=0;
941 DoubleTab U_P1_spherique(nb_fa7,
dimension);
942 DoubleTab U_P2_spherique(nb_fa7,
dimension);
943 DoubleTab U_cg_spherique(nb_fa7,
dimension);
944 DoubleTab Urr(nb_fa7);
945 DoubleTab Uthetar(nb_fa7);
946 DoubleTab Uphir(nb_fa7);
950 U_P1_spherique=-1e15;
951 U_P2_spherique=-1e30;
952 U_cg_spherique=-1e20;
959 double distance_au_cg=0;
970 if ( interp_U_P1_ok && interp_U_P2_ok )
973 for (
int fa7=0; fa7<nb_fa7; fa7++)
975 int compo=compo_connexes_fa7(fa7);
982 positions_compo(compo,i);
984 distance_au_cg=sqrt(local_carre_norme_vect(distance_cg_vect));
990 positions_compo(compo,2))/distance_au_cg);
1008 -positions_compo(compo,0)));
1015 -positions_compo(compo,0)))+2*M_PI;
1021 -positions_compo(compo,0)))+M_PI;
1034 U_P1_spherique(fa7,0)=sin(theta)*cos(phi)*
U_P1_(fa7,0)+sin(theta)*sin(phi)*
1036 U_P1_spherique(fa7,1)=cos(theta)*cos(phi)*
U_P1_(fa7,0)+cos(theta)*sin(phi)*
1038 U_P1_spherique(fa7,2)=-sin(phi)*
U_P1_(fa7,0)+cos(phi)*
U_P1_(fa7,1);
1040 U_P2_spherique(fa7,0)=sin(theta)*cos(phi)*
U_P2_(fa7,0)+sin(theta)*sin(phi)*
1042 U_P2_spherique(fa7,1)=cos(theta)*cos(phi)*
U_P2_(fa7,0)+cos(theta)*sin(phi)*
1044 U_P2_spherique(fa7,2)=-sin(phi)*
U_P2_(fa7,0)+cos(phi)*
U_P2_(fa7,1);
1046 U_cg_spherique(fa7,0)=0;
1047 U_cg_spherique(fa7,1)=0;
1048 U_cg_spherique(fa7,2)=0;
1052 gravity_center_fa7(fa7,1),
1053 gravity_center_fa7(fa7,2));
1060 if (tab_fa7_normal(fa7,2)>0)
1070 epsilon+= fabs(delta_i(dim)*fabs(tab_fa7_normal(fa7,dim)));
1073 Urr(fa7)=(-U_P2_spherique(fa7,0)+4.*U_P1_spherique(fa7,0)-
1074 3.*U_cg_spherique(fa7,0))/(2.*epsilon);
1075 Uthetar(fa7)=(-U_P2_spherique(fa7,1)+4.*U_P1_spherique(fa7,1)-
1076 3.*U_cg_spherique(fa7,1))/(2.*epsilon);
1077 Uphir(fa7)=(-U_P2_spherique(fa7,2)+4.*U_P1_spherique(fa7,2)-
1078 3.*U_cg_spherique(fa7,2))/(2.*epsilon);
1081 cos(phi)*Urr(fa7)+cos(theta)*cos(phi)*Uthetar(fa7)-sin(phi)*Uphir(fa7));
1083 sin(phi)*Urr(fa7)+cos(theta)*sin(phi)*Uthetar(fa7)+cos(phi)*Uphir(fa7));
1085 Urr(fa7)-sin(theta)*Uthetar(fa7));
1087 friction_force_Stokes_th_fa7_(fa7,0)=-mu_f*vinf_Stokes*gravity_center_fa7(fa7,0)*
1088 gravity_center_fa7(fa7,2)/(pow(particle_radius,3))*(9.*phi_mu+8.)/
1089 (1.+phi_mu)*fa7_surface(fa7);
1090 friction_force_Stokes_th_fa7_(fa7,1)=-mu_f*vinf_Stokes*gravity_center_fa7(fa7,1)*
1091 gravity_center_fa7(fa7,2)/(pow(particle_radius,3))*(9.*phi_mu+8.)/
1092 (1.+phi_mu)*fa7_surface(fa7);
1093 friction_force_Stokes_th_fa7_(fa7,2)=mu_f*vinf_Stokes*1./(2.*particle_radius*(1.+phi_mu))*
1094 (-3.*phi_mu+pow(gravity_center_fa7(fa7,2)/particle_radius,2)*(3.*phi_mu-4.))*fa7_surface(fa7);
1099 total_friction_force_Stokes_th_(compo,dim)+=
1100 friction_force_Stokes_th_fa7_(fa7,dim);
DoubleTab & valeurs() override
Surcharge Champ_base::valeurs() Renvoie le tableau des valeurs.
SmallArrOfTID_t & chercher_elements(const DoubleTab &pos, SmallArrOfTID_t &elem, int reel=0) const
Recherche des elements contenant les points dont les coordonnees sont specifiees.
int orientation(int) const override
inline DoubleVect& Domaine_VDF::porosite_face() {
double dist_elem(int, int, int) const
double xv(int num_face, int k) const
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
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.
const Domaine & domaine() const
Domaine_dis_base & domaine_dis()
Renvoie le domaine discretise associe a l'equation.
const Fluide_Incompressible & fluide_phase(int la_phase) const
const int & get_id_fluid_phase() const
: class Maillage_FT_Disc Cette classe decrit un maillage:
int nb_facettes() const
renvoie le nombre de facettes (reelles et virtuelles) (egal a facettes().
int facette_virtuelle(int i) const
Renvoie 0 si la facette m'appartient, 1 sinon.
virtual const DoubleTab & get_update_normale_facettes() const
Calcule la grandeur demandee, stocke le resultat dans un tableau interne a la classe et renvoie le re...
const DoubleTab & get_gravity_center_fa7() const
virtual const ArrOfDouble & get_update_surface_facettes() const
Calcule la grandeur demandee, stocke le resultat dans un tableau interne a la classe et renvoie le re...
virtual const Champ_Don_base & gravite() const
Renvoie la gravite du milieu si elle a ete associe provoque une erreur sinon.
DoubleTab & get_set_velocity_field_Stokes_th()
const Milieu_base & milieu() const override
virtual const Fluide_Diphasique & fluide_diphasique() const
const IntTab & get_particles_eulerian_id_number() const
DoubleTab & get_set_pressure_field_Stokes_th()
virtual void set_param(Param &) const
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
Helper class to factorize the readOn method of Objet_U classes.
void compute_UP1_UP2_Stokes(int fa7, double vinf_Stokes, double particle_radius, double phi_mu)
void compute_friction_force_complet_tensor(int nb_fa7, const Maillage_FT_Disc &mesh, const IntVect &compo_connexes_fa7, const ArrOfDouble &fa7_surface, const DoubleTab &tab_fa7_normal) override
double compute_dWdy_Stokes_th(int fa7, double x_fa7, double y_fa7, double z_fa7, double r_fa7, double phi_mu, double particle_radius)
void fill_sigma_Stokes_th(int fa7)
double compute_Stokes_Uy_fluid(double x, double y, double z, double vinf_Stokes, double particle_radius, double phi_mu)
double compute_dWdx_Stokes_th(int fa7, double x_fa7, double y_fa7, double z_fa7, double r_fa7, double phi_mu, double particle_radius)
double compute_dVdz_Stokes_th(int fa7, double x_fa7, double y_fa7, double z_fa7, double r_fa7, double phi_mu, double particle_radius)
const double & get_vinf_Stokes() const
void compute_hydrodynamic_forces() override
double compute_dUdx_Stokes_th(int fa7, double x_fa7, double y_fa7, double z_fa7, double r_fa7, double phi_mu, double particle_radius)
void resize_data_fa7(int nb_fa7) override
void fill_gradU_P1_Stokes_th(int fa7, double phi_mu, double particle_radius)
void compute_friction_force_projected_tensor(int nb_fa7, const Maillage_FT_Disc &mesh, const IntVect &compo_connexes_fa7, const ArrOfDouble &fa7_surface, const DoubleTab &tab_fa7_normal) override
void resize_gradU_P1(int nb_fa7) override
double compute_Stokes_Ux_fluid(double x, double y, double z, double vinf_Stokes, double particle_radius, double phi_mu)
void set_param(const Post_Processing_Hydrodynamic_Forces &post_process_hydro_forces_)
void compute_vinf_Stokes()
double compute_dWdz_Stokes_th(int fa7, double x_fa7, double y_fa7, double z_fa7, double r_fa7, double phi_mu, double particle_radius)
double compute_dUdz_Stokes_th(int fa7, double x_fa7, double y_fa7, double z_fa7, double r_fa7, double phi_mu, double particle_radius)
void resize_sigma(int nb_fa7) override
void fill_Stokes_velocity_field()
void fill_gradU_P2_Stokes_th(int fa7, double phi_mu, double particle_radius)
void compute_neighbors_coordinates_fluid_fa7(const int nb_fa7, const int is_discr_elem_diph, const DoubleTab &gravity_center_fa7, const Maillage_FT_Disc &mesh, const DoubleTab &tab_fa7_normal, const IntTab &particles_eulerian_id_number) override
double compute_pressure_interf(double x, double y, double z)
void resize_gradU_P2(int nb_fa7) override
void resize_and_init_tables(int nb_particles_tot) override
void compute_pressure_force_trilinear_linear(int nb_fa7, const Maillage_FT_Disc &mesh, Convection_Diffusion_Temperature_FT_Disc::Thermal_correction_discretization_method dummy_value, const IntVect &compo_connexes_fa7, const ArrOfDouble &fa7_surface, const DoubleTab &tab_fa7_normal) override
double compute_Stokes_Uz_fluid(double x, double y, double z, double vinf_Stokes, double particle_radius, double phi_mu)
void fill_Stokes_pressure_field()
DoubleTab coord_neighbor_fluid_fa7_gradU_2_
const double & get_interpolation_distance_gradU_P1() const
DoubleTab total_pressure_force_
double interpolation_distance_pressure_P2_
bool is_post_process_pressure_force_fa7_
DoubleTab friction_force_fa7_
bool get_is_post_process_pressure_fa7() const
DoubleTab coord_neighbor_fluid_fa7_pressure_1_
const double & get_interpolation_distance_pressure_P1() const
double interpolation_distance_pressure_P1_
bool get_is_post_process_friction_force_fa7() const
bool is_post_process_friction_force_fa7_
int trilinear_interpolation_elem(const DoubleTab &valeurs_champ, DoubleTab &coord, DoubleTab &resu)
void fill_gradU_P2(int fa7, DoubleTab gradU_P2)
const double & get_interpolation_distance_gradU_P2() const
int trilinear_interpolation_gradU_elem(const DoubleTab &valeurs_champ, DoubleTab &coord, DoubleTab &resu)
int elem_faces_for_interp(int num_face, int i) const
void fill_sigma(int fa7, Matrice_Dense stress_tensor)
DoubleTab coord_neighbor_fluid_fa7_pressure_2_
const Method_pressure_force_computation & get_method_pressure_force_computation() const
int trilinear_interpolation_face(const DoubleTab &valeurs_champ, DoubleTab &coord, DoubleTab &resu)
bool is_post_process_stress_tensor_fa7_
Location_stress_tensor location_stress_tensor_
DoubleTab total_friction_force_
bool is_compute_stokes_theoretical_forces_
bool get_is_compute_forces() const
bool get_is_compute_forces_Stokes_th() const
int flag_force_computation_
DoubleTab coord_neighbor_fluid_fa7_gradU_1_
Method_pressure_force_computation method_pressure_force_computation_
bool get_is_post_process_stress_tensor_fa7() const
DoubleTab pressure_force_fa7_
void fill_gradU_P1(int fa7, DoubleTab gradU_P1)
const Location_stress_tensor & get_location_stress_tensor() const
const double & get_interpolation_distance_pressure_P2() const
double interpolation_distance_gradU_P1_
double interpolation_distance_gradU_P2_
bool is_post_process_pressure_fa7_
void resize_coord_neighbor_fluid_fa7(int nb_fa7)
bool get_is_post_process_pressure_force_fa7() const
int trilinear_interpolation_gradU_face(const DoubleTab &valeurs_champ, DoubleTab &coord, DoubleTab &resu)
int face_voisins_for_interp(int num_face, int i) const
Method_friction_force_computation method_friction_force_computation_
Method_friction_force_computation
@ TRILINEAR_LINEAR_PROJECTED_TENSOR
@ TRILINEAR_LINEAR_COMPLET_TENSOR
static void mp_sum_for_each_item(TRUSTArray< _TYPE_ > &x, int n=-1)
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
const double & get_equivalent_radius() const
Classe de base des flux de sortie.
_SIZE_ dimension_tot(int) const override
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")
virtual const Maillage_FT_Disc & maillage_interface_pour_post() const
Renvoie le maillage stocke specialement pour le postraitement (si on veut postraiter un etat intermed...
const DoubleTab & get_particles_position() const