7 #include "petsc/finclude/petsc.h" 15 dt, re, list_mode, pp_mesh, vv_mesh, incpn_m1, incpn, pn_m1, pn, un_m1, un, &
16 hn_p2, bn_p2, density_m1, density, density_p1, visco_dyn, tempn, level_set, level_set_p1, &
40 REAL(KIND=8) :: time, dt, Re
41 INTEGER,
DIMENSION(:),
INTENT(IN) :: list_mode
42 TYPE(
mesh_type),
INTENT(IN) :: pp_mesh, vv_mesh
44 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(INOUT) :: incpn_m1, incpn
45 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(INOUT) :: pn_m1, pn
46 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(INOUT) :: un_m1, un
47 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: density_m1, density, density_p1
48 REAL(KIND=8),
DIMENSION(:,:,:,:),
INTENT(IN) :: level_set, level_set_p1
49 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: visco_dyn
50 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: tempn
51 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: Hn_p2, Bn_p2
52 REAL(KIND=8),
DIMENSION(vv_mesh%np,6,SIZE(list_mode)) :: Hn_p2_aux
53 REAL(KIND=8),
DIMENSION(:,:),
INTENT(OUT) :: visc_entro_level
54 INTEGER,
SAVE :: m_max_c
55 TYPE(
dyn_real_line),
DIMENSION(:),
ALLOCATABLE,
SAVE :: pp_global_D
56 TYPE(
dyn_int_line),
DIMENSION(:),
POINTER,
SAVE :: pp_mode_global_js_D
58 TYPE(
dyn_int_line),
DIMENSION(:),
POINTER,
SAVE :: vv_mode_global_js_D
59 TYPE(
dyn_real_line),
DIMENSION(:),
ALLOCATABLE,
SAVE :: vel_global_D
60 LOGICAL,
SAVE :: once = .true.
61 INTEGER,
SAVE :: my_petscworld_rank
62 REAL(KIND=8),
SAVE :: mu_bar, nu_bar, rho_bar, sqrt_2d_vol
63 REAL(KIND=8),
DIMENSION(:,:,:),
ALLOCATABLE,
SAVE :: momentum, momentum_m1, momentum_m2
64 INTEGER,
SAVE :: bloc_size, m_max_pad, nb_procs
65 REAL(KIND=8),
ALLOCATABLE,
DIMENSION(:,:,:),
SAVE :: rotb_b_m1
66 REAL(KIND=8),
ALLOCATABLE,
DIMENSION(:,:,:,:),
SAVE :: visc_grad_vel_m1
67 REAL(KIND=8),
ALLOCATABLE,
DIMENSION(:,:,:,:),
SAVE :: tensor_m1
68 REAL(KIND=8),
ALLOCATABLE,
DIMENSION(:,:),
SAVE :: visc_entro_real
72 INTEGER,
POINTER,
DIMENSION(:) :: pp_1_ifrom, vv_3_ifrom
74 INTEGER :: code,nu_mat, mode
75 REAL(KIND=8) :: moyenne
77 REAL(KIND=8),
DIMENSION(pp_mesh%np, 2, SIZE(list_mode)) :: div
78 REAL(KIND=8),
DIMENSION(pp_mesh%np, 2) :: pn_p1, phi
79 REAL(KIND=8),
DIMENSION(vv_mesh%np, 2) :: p_p2
80 REAL(KIND=8),
DIMENSION(vv_mesh%np, 6) :: un_p1, src
81 REAL(KIND=8),
DIMENSION(vv_mesh%gauss%l_G*vv_mesh%dom_me,6,SIZE(list_mode)) :: rotb_b, rotb_b_aux
82 REAL(KIND=8),
DIMENSION(3,vv_mesh%gauss%l_G*vv_mesh%dom_me,6,SIZE(list_mode)) :: visc_grad_vel
83 REAL(KIND=8),
DIMENSION(3,vv_mesh%gauss%l_G*vv_mesh%dom_me,6,SIZE(list_mode)) :: visc_entro_grad_mom
84 REAL(KIND=8),
DIMENSION(3,vv_mesh%gauss%l_G*vv_mesh%dom_me,6,SIZE(list_mode)) :: tensor_surface_gauss
85 REAL(KIND=8),
DIMENSION(3,vv_mesh%np,6,SIZE(list_mode)) :: tensor
86 REAL(KIND=8),
DIMENSION(3,vv_mesh%gauss%l_G*vv_mesh%dom_me,6) :: visc_grad_vel_ext
87 REAL(KIND=8),
DIMENSION(3,vv_mesh%np,6) :: tensor_ext
88 REAL(KIND=8),
DIMENSION(vv_mesh%np,6,SIZE(list_mode)) :: uext, momentumext, momentum_exact
89 REAL(KIND=8),
DIMENSION(inputs%nb_fluid-1, vv_mesh%np, 2, SIZE(list_mode)) :: level_set_FEM_P2
90 REAL(KIND=8),
DIMENSION(vv_mesh%np) :: vel_loc, vel_tot
91 REAL(KIND=8),
DIMENSION(SIZE(list_mode)) :: normalization_mt
92 REAL(KINd=8) :: vel_tot_max_S,vel_tot_max
93 INTEGER :: n1, n2, n3, n123, nb_inter
94 REAL(KIND=8) :: tps, tps_tot, tps_cumul, coeff, cfl, cfl_max, norm
95 INTEGER :: nb_procs_LES, bloc_size_LES, m_max_pad_LES
97 REAL(KIND=8) :: one, zero, three
98 DATA zero, one, three/0.d0,1.d0,3.d0/
101 petscerrorcode :: ierr
102 mpi_comm,
DIMENSION(:),
POINTER :: comm_one_d
103 mat,
DIMENSION(:),
POINTER,
SAVE :: vel_mat
104 mat,
DIMENSION(:),
POINTER,
SAVE :: press_mat
105 mat,
SAVE :: mass_mat, mass_mat0
106 vec,
SAVE :: vb_3_145, vb_3_236, vx_3, vx_3_ghost
107 vec,
SAVE :: pb_1, pb_2, px_1, px_1_ghost
108 ksp,
DIMENSION(:),
POINTER,
SAVE :: vel_ksp, press_ksp
109 ksp,
SAVE :: mass_ksp, mass_ksp0
117 CALL mpi_comm_rank(petsc_comm_world,my_petscworld_rank,code)
122 CALL veccreateghost(comm_one_d(1), n, &
123 petsc_determine,
SIZE(vv_3_ifrom), vv_3_ifrom, vx_3, ierr)
124 CALL vecghostgetlocalform(vx_3, vx_3_ghost, ierr)
125 CALL vecduplicate(vx_3, vb_3_145, ierr)
126 CALL vecduplicate(vx_3, vb_3_236, ierr)
130 CALL veccreateghost(comm_one_d(1), n, &
131 petsc_determine,
SIZE(pp_1_ifrom), pp_1_ifrom, px_1, ierr)
132 CALL vecghostgetlocalform(px_1, px_1_ghost, ierr)
133 CALL vecduplicate(px_1, pb_1, ierr)
134 CALL vecduplicate(px_1, pb_2, ierr)
138 m_max_c =
SIZE(list_mode)
142 ALLOCATE(momentum(
SIZE(un,1),
SIZE(un,2),
SIZE(un,3)),&
143 momentum_m1(
SIZE(un,1),
SIZE(un,2),
SIZE(un,3)), &
144 momentum_m2(
SIZE(un,1),
SIZE(un,2),
SIZE(un,3)))
145 CALL mpi_comm_size(comm_one_d(2), nb_procs, code)
146 bloc_size =
SIZE(un,1)/nb_procs+1
147 m_max_pad = 3*
SIZE(list_mode)*nb_procs/2
149 IF (
inputs%if_level_set)
THEN 151 bloc_size, m_max_pad)
153 bloc_size, m_max_pad)
159 ALLOCATE(rotb_b_m1(vv_mesh%gauss%l_G*vv_mesh%dom_me,6,
SIZE(list_mode)))
162 ALLOCATE(tensor_m1(3,vv_mesh%np,6,
SIZE(list_mode)))
163 bloc_size =
SIZE(un,1)/nb_procs+1
164 m_max_pad = 3*
SIZE(list_mode)*nb_procs/2
165 CALL fft_tensor_dcl(comm_one_d(2), momentum_m1, un_m1, tensor_m1, nb_procs, bloc_size, m_max_pad)
167 ALLOCATE(visc_grad_vel_m1(3,vv_mesh%gauss%l_G*vv_mesh%dom_me,6,
SIZE(list_mode)))
169 visco_dyn/re, un_m1, visc_grad_vel_m1)
171 CALL mpi_comm_size(comm_one_d(2), nb_procs_les, code)
172 bloc_size_les = vv_mesh%gauss%l_G*vv_mesh%dom_me/nb_procs_les+1
173 bloc_size_les = vv_mesh%gauss%l_G*(bloc_size_les/vv_mesh%gauss%l_G)+vv_mesh%gauss%l_G
174 m_max_pad_les = 3*
SIZE(list_mode)*nb_procs_les/2
175 ALLOCATE(visc_entro_real(2*m_max_pad_les-1,bloc_size_les))
176 visc_entro_real = 0.d0
186 ALLOCATE(pp_global_d(m_max_c))
188 ALLOCATE(pp_global_d(i)%DRL(
SIZE(pp_mode_global_js_d(i)%DIL)))
193 vv_js_d, vv_mode_global_js_d)
195 ALLOCATE(vel_global_d(m_max_c))
197 ALLOCATE(vel_global_d(i)%DRL(
SIZE(vv_mode_global_js_d(i)%DIL)))
205 IF (list_mode(i)==0) cycle
211 IF (minval(list_mode)==0)
THEN 215 IF (list_mode(i).NE.0) cycle
224 ALLOCATE(vel_mat(2*m_max_c),vel_ksp(2*m_max_c))
225 ALLOCATE(press_mat(m_max_c),press_ksp(m_max_c))
228 IF (
inputs%if_level_set)
THEN 230 mu_bar = minval(
inputs%dyna_visc_fluid)
231 rho_bar = minval(
inputs%density_fluid)
234 nu_bar = max(nu_bar,
inputs%dyna_visc_fluid(n)/
inputs%density_fluid(n))
248 IF (
inputs%if_moment_bdf2)
THEN 250 inputs%LES_coeff1_mom,
inputs%stab_bdy_ns, i, mode, vel_mat(nu_mat))
253 inputs%LES_coeff1_mom,
inputs%stab_bdy_ns, i, mode, vel_mat(nu_mat))
256 CALL init_solver(
inputs%my_par_vv,vel_ksp(nu_mat),vel_mat(nu_mat),comm_one_d(1),&
261 IF (
inputs%if_moment_bdf2)
THEN 263 inputs%LES_coeff1_mom,
inputs%stab_bdy_ns, i, mode, vel_mat(nu_mat))
266 inputs%LES_coeff1_mom,
inputs%stab_bdy_ns, i, mode, vel_mat(nu_mat))
269 CALL init_solver(
inputs%my_par_vv,vel_ksp(nu_mat),vel_mat(nu_mat),comm_one_d(1),&
281 CALL twod_volume(comm_one_d(1),vv_mesh,sqrt_2d_vol)
282 sqrt_2d_vol = sqrt(sqrt_2d_vol)
292 IF (
inputs%if_moment_bdf2)
THEN 294 IF (
inputs%if_level_set)
THEN 297 bloc_size, m_max_pad)
299 momentumext = 2*momentum - momentum_m1
303 IF (
inputs%if_level_set)
THEN 306 bloc_size, m_max_pad)
308 momentumext = momentum
313 IF (
inputs%precession)
THEN 314 CALL error_petsc(
'for momentum ns : precession should be in condlim')
318 IF (
inputs%type_pb==
'mhd')
THEN 320 IF (
inputs%if_quasi_static_approx)
THEN 323 hn_p2_aux(:,:,i) = h_b_quasi_static(
'H', vv_mesh%rr, mode)
328 hn_p2_aux(:,:,i) = h_b_quasi_static(
'B', vv_mesh%rr, mode)
331 rotb_b = rotb_b + rotb_b_aux
340 IF (
inputs%if_level_set)
THEN 343 visco_dyn/re, un, visc_grad_vel)
349 visc_entro_real, momentumext, visc_entro_grad_mom)
351 visc_entro_grad_mom=0.d0
355 IF (
inputs%if_surface_tension)
THEN 357 IF (
inputs%if_level_set_P2)
THEN 359 level_set_p1, tensor_surface_gauss)
361 DO nb_inter = 1,
inputs%nb_fluid-1
362 DO i = 1,
SIZE(list_mode)
364 CALL inject_p1_p2(pp_mesh%jj, vv_mesh%jj, level_set_p1(nb_inter,:,k,i), &
365 level_set_fem_p2(nb_inter,:,k,i))
370 level_set_fem_p2, tensor_surface_gauss)
373 tensor_surface_gauss = 0.d0
377 tensor_surface_gauss = 0.d0
381 CALL fft_tensor_dcl(comm_one_d(2), momentum, un, tensor, nb_procs, bloc_size, m_max_pad)
384 CALL momentum_dirichlet(comm_one_d(2), vv_mesh, list_mode, time, nb_procs,density_p1, &
385 momentum_exact, vv_js_d)
387 tps =
user_time() - tps; tps_cumul=tps_cumul+tps
396 pn_p1(:,:) = pn(:,:,i)
397 IF (
inputs%if_moment_bdf2)
THEN 398 phi = pn_p1(:,:) + (4.d0 * incpn(:,:,i) - incpn_m1(:,:,i))/3.d0
400 phi = pn_p1(:,:) + incpn(:,:,i)
406 CALL inject(pp_mesh%jj, vv_mesh%jj, phi(:,k), p_p2(:,k))
411 IF (
inputs%if_temperature)
THEN 412 src(:,k) = source_in_ns_momentum(k, vv_mesh%rr, mode, i, time, re,
'ns', &
413 opt_density=density_p1, opt_tempn=tempn)
415 src(:,k) = source_in_ns_momentum(k, vv_mesh%rr, mode, i, time, re,
'ns', &
416 opt_density=density_p1)
420 IF (
inputs%if_moment_bdf2)
THEN 421 tensor_ext = 2*tensor(:,:,:,i) - tensor_m1(:,:,:,i)
422 visc_grad_vel_ext = 2*visc_grad_vel(:,:,:,i) - visc_grad_vel_m1(:,:,:,i)
425 rotb_b_m1(:,:,i) = rotb_b(:,:,i)
426 tensor_m1(:,:,:,i) = tensor(:,:,:,i)
427 visc_grad_vel_m1(:,:,:,i) = visc_grad_vel(:,:,:,i)
429 (4*momentum(:,:,i)-momentum_m1(:,:,i))/(2*dt), p_p2(:,:), &
430 vb_3_145, vb_3_236, rotb_b(:,:,i), tensor_ext,&
431 tensor_surface_gauss(:,:,:,i), nu_bar/re, momentumext(:,:,i), &
432 -visc_grad_vel_ext-visc_entro_grad_mom(:,:,:,i))
435 momentum(:,:,i)/dt, p_p2(:,:), &
436 vb_3_145, vb_3_236, rotb_b(:,:,i), tensor(:,:,:,i),&
437 tensor_surface_gauss(:,:,:,i), nu_bar/re, momentumext(:,:,i), &
438 -visc_grad_vel(:,:,:,i)-visc_entro_grad_mom(:,:,:,i))
442 n1 =
SIZE(vv_js_d(1)%DIL)
443 n2 =
SIZE(vv_js_d(2)%DIL)
444 n3 =
SIZE(vv_js_d(3)%DIL)
446 vel_global_d(i)%DRL(1:n1) = momentum_exact(vv_js_d(1)%DIL,1,i)
447 vel_global_d(i)%DRL(n1+1:n1+n2) = momentum_exact(vv_js_d(2)%DIL,4,i)
448 vel_global_d(i)%DRL(n1+n2+1:n123)= momentum_exact(vv_js_d(3)%DIL,5,i)
449 vel_global_d(i)%DRL(n123+1:) = 0.d0
450 CALL dirichlet_rhs(vv_mode_global_js_d(i)%DIL-1,vel_global_d(i)%DRL,vb_3_145)
451 vel_global_d(i)%DRL(1:n1) = momentum_exact(vv_js_d(1)%DIL,2,i)
452 vel_global_d(i)%DRL(n1+1:n1+n2) = momentum_exact(vv_js_d(2)%DIL,3,i)
453 vel_global_d(i)%DRL(n1+n2+1:n123)= momentum_exact(vv_js_d(3)%DIL,6,i)
454 CALL dirichlet_rhs(vv_mode_global_js_d(i)%DIL-1,vel_global_d(i)%DRL,vb_3_236)
455 tps =
user_time() - tps; tps_cumul=tps_cumul+tps
459 tps =
user_time() - tps; tps_cumul=tps_cumul+tps
468 CALL vecghostupdatebegin(vx_3,insert_values,scatter_forward,ierr)
469 CALL vecghostupdateend(vx_3,insert_values,scatter_forward,ierr)
470 CALL extract(vx_3_ghost,1,1,vv_3_la,un_p1(:,1))
471 CALL extract(vx_3_ghost,2,2,vv_3_la,un_p1(:,4))
472 CALL extract(vx_3_ghost,3,3,vv_3_la,un_p1(:,5))
477 CALL vecghostupdatebegin(vx_3,insert_values,scatter_forward,ierr)
478 CALL vecghostupdateend(vx_3,insert_values,scatter_forward,ierr)
479 CALL extract(vx_3_ghost,1,1,vv_3_la,un_p1(:,2))
480 CALL extract(vx_3_ghost,2,2,vv_3_la,un_p1(:,3))
481 CALL extract(vx_3_ghost,3,3,vv_3_la,un_p1(:,6))
483 tps =
user_time() - tps; tps_cumul=tps_cumul+tps
496 momentum_m2(:,:,i) = momentum_m1(:,:,i)
497 momentum_m1(:,:,i) = momentum(:,:,i)
498 momentum(:,:,i) = un_p1
504 IF (
inputs%if_level_set)
THEN 506 bloc_size, m_max_pad)
517 pn_p1(:,:) = pn(:,:,i)
529 pp_global_d(i)%DRL = 0.d0
530 CALL dirichlet_rhs(pp_mode_global_js_d(i)%DIL-1,pp_global_d(i)%DRL,pb_1)
531 CALL dirichlet_rhs(pp_mode_global_js_d(i)%DIL-1,pp_global_d(i)%DRL,pb_2)
535 CALL vecghostupdatebegin(px_1,insert_values,scatter_forward,ierr)
536 CALL vecghostupdateend(px_1,insert_values,scatter_forward,ierr)
537 CALL extract(px_1_ghost,1,1,pp_1_la,phi(:,1))
540 CALL vecghostupdatebegin(px_1,insert_values,scatter_forward,ierr)
541 CALL vecghostupdateend(px_1,insert_values,scatter_forward,ierr)
542 CALL extract(px_1_ghost,1,1,pp_1_la,phi(:,2))
545 IF (
inputs%if_moment_bdf2)
THEN 546 phi = -phi*(1.5d0/dt)*rho_bar
548 phi = -phi/dt*rho_bar
550 tps =
user_time() - tps; tps_cumul=tps_cumul+tps
563 CALL vecghostupdatebegin(px_1,insert_values,scatter_forward,ierr)
564 CALL vecghostupdateend(px_1,insert_values,scatter_forward,ierr)
565 CALL extract(px_1_ghost,1,1,pp_1_la,div(:,1,i))
573 CALL vecghostupdatebegin(px_1,insert_values,scatter_forward,ierr)
574 CALL vecghostupdateend(px_1,insert_values,scatter_forward,ierr)
575 CALL extract(px_1_ghost,1,1,pp_1_la,div(:,2,i))
580 pn_p1(:,k) = pn_p1(:,k) + phi(:,k) - div(:,k,i)*(mu_bar/re)
583 tps =
user_time() - tps; tps_cumul=tps_cumul+tps
590 CALL moy(comm_one_d(1),pp_mesh, pn_p1(:,1),moyenne)
591 pn_p1(:,1) = pn_p1(:,1)-moyenne
600 pn_m1(:,:,i) = pn(:,:,i)
603 incpn_m1(:,:,i) = incpn(:,:,i)
606 tps =
user_time() - tps; tps_cumul=tps_cumul+tps
614 IF (
inputs%verbose_divergence)
THEN 615 norm =
norm_sf(comm_one_d,
'H1', vv_mesh, list_mode, un)
625 IF (list_mode(i)==0)
THEN 630 vel_loc = vel_loc + coeff*(un(:,1,i)**2+un(:,2,i)**2+un(:,3,i)**2+&
631 un(:,4,i)**2+un(:,5,i)**2+un(:,6,i)**2)
633 CALL mpi_comm_size(comm_one_d(2),nb_procs,code)
634 CALL mpi_allreduce(vel_loc,vel_tot,vv_mesh%np,mpi_double_precision, mpi_sum, comm_one_d(2), code)
636 vel_tot = sqrt(vel_tot)
637 vel_tot_max_s = maxval(vel_tot)
638 CALL mpi_allreduce(vel_tot_max_s,vel_tot_max,1,mpi_double_precision, mpi_max, comm_one_d(1), code)
642 normalization_mt(i) =
norm_s(comm_one_d,
'L2', vv_mesh, list_mode, momentum)/(sqrt(2.d0)*sqrt_2d_vol)
647 IF (
inputs%verbose_CFL)
THEN 649 DO m = 1, vv_mesh%dom_me
650 cfl = max(vel_tot_max*dt/vv_mesh%hloc(m),cfl)
652 CALL mpi_allreduce(cfl,cfl_max,1,mpi_double_precision, mpi_max, comm_one_d(1), code)
662 IF (
inputs%if_level_set)
THEN 665 momentum, momentum_m1, momentum_m2, pn_m1, un_m1, tensor, visc_grad_vel, tensor_surface_gauss, &
666 rotb_b, visco_dyn, density_m1, density, density_p1, tempn, visc_entro_real, visc_entro_level)
668 visc_entro_real = 0.d0
669 visc_entro_level= 0.d0
672 IF (
inputs%if_LES_in_momentum)
THEN 674 momentum, momentum_m1, momentum_m2, pn_m1, un_m1, tensor, rotb_b, tempn, visc_entro_real)
688 SUBROUTINE inject(jj_c, jj_f, pp_c, pp_f)
691 INTEGER,
DIMENSION(:,:),
INTENT(IN) :: jj_c, jj_f
692 REAL(KIND=8),
DIMENSION(:),
INTENT(IN) :: pp_c
693 REAL(KIND=8),
DIMENSION(:),
INTENT(OUT) :: pp_f
694 REAL(KIND=8) :: half = 0.5
696 IF (
SIZE(jj_c,1)==3)
THEN 697 DO m = 1,
SIZE(jj_f,2)
698 pp_f(jj_f(1:3,m)) = pp_c(jj_c(:,m))
699 pp_f(jj_f(4,m)) = (pp_c(jj_c(2,m)) + pp_c(jj_c(3,m)))*half
700 pp_f(jj_f(5,m)) = (pp_c(jj_c(3,m)) + pp_c(jj_c(1,m)))*half
701 pp_f(jj_f(6,m)) = (pp_c(jj_c(1,m)) + pp_c(jj_c(2,m)))*half
705 DO m = 1,
SIZE(jj_f,2)
706 pp_f(jj_f(1:4,m)) = pp_c(jj_c(:,m))
708 pp_f(jj_f(5,:)) = (pp_c(jj_c(3,:)) + pp_c(jj_c(4,:)))*half
709 pp_f(jj_f(6,:)) = (pp_c(jj_c(4,:)) + pp_c(jj_c(2,:)))*half
710 pp_f(jj_f(7,:)) = (pp_c(jj_c(2,:)) + pp_c(jj_c(3,:)))*half
711 pp_f(jj_f(8,:)) = (pp_c(jj_c(1,:)) + pp_c(jj_c(4,:)))*half
712 pp_f(jj_f(9,:)) = (pp_c(jj_c(3,:)) + pp_c(jj_c(1,:)))*half
713 pp_f(jj_f(10,:)) = (pp_c(jj_c(1,:)) + pp_c(jj_c(2,:)))*half
727 INTEGER,
DIMENSION(:),
INTENT(IN) :: list_mode
728 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: V_in, W_in
729 REAL(KIND=8),
DIMENSION(:,:,:) :: V_out
730 REAL(KIND=8),
DIMENSION(mesh%gauss%l_G*mesh%me,6,SIZE(list_mode)) :: RotV, V, W
731 INTEGER,
DIMENSION(mesh%gauss%n_w) :: j_loc
732 REAL(KIND=8),
DIMENSION(mesh%gauss%k_d,mesh%gauss%n_w) :: dw_loc
733 INTEGER :: m, l , i, mode, index, k
734 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w,6) :: Vs, Ws
737 REAL(KIND=8),
DIMENSION(3) :: temps
739 INTEGER :: nb_procs, bloc_size, m_max_pad, code
740 mpi_comm :: communicator
743 DO i = 1,
SIZE(list_mode)
749 vs(:,k) = v_in(j_loc,k,i)
750 ws(:,k) = w_in(j_loc,k,i)
753 DO l = 1, mesh%gauss%l_G
755 dw_loc = mesh%gauss%dw(:,:,l,m)
758 ray = sum(mesh%rr(1,j_loc)*mesh%gauss%ww(:,l))
761 w(index,1,i) = sum(ws(:,1)*mesh%gauss%ww(:,l))
762 w(index,3,i) = sum(ws(:,3)*mesh%gauss%ww(:,l))
763 w(index,5,i) = sum(ws(:,5)*mesh%gauss%ww(:,l))
765 w(index,2,i) = sum(ws(:,2)*mesh%gauss%ww(:,l))
766 w(index,4,i) = sum(ws(:,4)*mesh%gauss%ww(:,l))
767 w(index,6,i) = sum(ws(:,6)*mesh%gauss%ww(:,l))
768 v(index,1,i) = sum(vs(:,1)*mesh%gauss%ww(:,l))
769 v(index,3,i) = sum(vs(:,3)*mesh%gauss%ww(:,l))
770 v(index,5,i) = sum(vs(:,5)*mesh%gauss%ww(:,l))
772 v(index,2,i) = sum(vs(:,2)*mesh%gauss%ww(:,l))
773 v(index,4,i) = sum(vs(:,4)*mesh%gauss%ww(:,l))
774 v(index,6,i) = sum(vs(:,6)*mesh%gauss%ww(:,l))
777 rotv(index,1,i) = mode/ray*v(index,6,i) &
778 -sum(vs(:,3)*dw_loc(2,:))
779 rotv(index,4,i) = sum(vs(:,2)*dw_loc(2,:)) &
780 -sum(vs(:,6)*dw_loc(1,:))
781 rotv(index,5,i) = 1/ray*v(index,3,i) &
782 +sum(vs(:,3)*dw_loc(1,:)) &
783 -mode/ray*v(index,2,i)
785 rotv(index,2,i) =-mode/ray*v(index,5,i) &
786 -sum(vs(:,4)*dw_loc(2,:))
787 rotv(index,3,i) = sum(vs(:,1)*dw_loc(2,:)) &
788 -sum(vs(:,5)*dw_loc(1,:))
789 rotv(index,6,i) = 1/ray*v(index,4,i) &
790 +sum(vs(:,4)*dw_loc(1,:))&
791 +mode/ray*v(index,1,i)
802 CALL mpi_comm_size(communicator, nb_procs, code)
803 bloc_size =
SIZE(rotv,1)/nb_procs+1
804 m_max_pad = 3*
SIZE(list_mode)*nb_procs/2
824 INTEGER,
INTENT(IN) :: nb_procs
825 INTEGER,
DIMENSION(:),
INTENT(IN) :: list_mode
826 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: visc_dyn
827 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: vel
828 REAL(KIND=8),
DIMENSION(3,mesh%gauss%l_G*mesh%dom_me,6,SIZE(list_mode)),
INTENT(OUT) :: V_out
829 REAL(KIND=8),
DIMENSION(mesh%gauss%l_G*mesh%dom_me,6,SIZE(list_mode)) :: grad1_vel, grad2_vel, grad3_vel
830 REAL(KIND=8),
DIMENSION(mesh%gauss%l_G*mesh%dom_me,6,SIZE(list_mode)) :: gradT1_vel, gradT2_vel, gradT3_vel
831 REAL(KIND=8),
DIMENSION(mesh%gauss%l_G*mesh%dom_me,6,SIZE(list_mode)) :: part_tensor_1, part_tensor_2
832 REAL(KIND=8),
DIMENSION(mesh%gauss%l_G*mesh%dom_me,6,SIZE(list_mode)) :: part_visc_sym_grad_1
833 REAL(KIND=8),
DIMENSION(mesh%gauss%l_G*mesh%dom_me,6,SIZE(list_mode)) :: part_visc_sym_grad_2
834 REAL(KIND=8),
DIMENSION(mesh%gauss%l_G*mesh%dom_me,2,SIZE(list_mode)) :: visc_dyn_gauss
835 INTEGER,
DIMENSION(mesh%gauss%n_w) :: j_loc
836 REAL(KIND=8),
DIMENSION(mesh%gauss%k_d,mesh%gauss%n_w) :: dw_loc
837 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w,6) :: vel_loc
839 INTEGER :: m, l , i, mode, index, k
840 INTEGER :: m_max_pad, bloc_size
841 mpi_comm :: communicator
845 DO i = 1,
SIZE(list_mode)
848 DO m = 1, mesh%dom_me
851 vel_loc(:,k) = vel(j_loc,k,i)
858 ray = sum(mesh%rr(1,j_loc)*
ww(:,l))
861 visc_dyn_gauss(index,1,i) = sum(visc_dyn(j_loc,1,i)*
ww(:,l))
862 visc_dyn_gauss(index,2,i) = sum(visc_dyn(j_loc,2,i)*
ww(:,l))
865 grad1_vel(index,1,i) = sum(vel_loc(:,1)*dw_loc(1,:))
866 grad1_vel(index,2,i) = sum(vel_loc(:,2)*dw_loc(1,:))
867 grad1_vel(index,3,i) = (mode*sum(vel_loc(:,2)*
ww(:,l)) - sum(vel_loc(:,3)*
ww(:,l)))/ray
868 grad1_vel(index,4,i) = (-mode*sum(vel_loc(:,1)*
ww(:,l)) - sum(vel_loc(:,4)*
ww(:,l)))/ray
869 grad1_vel(index,5,i) = sum(vel_loc(:,1)*dw_loc(2,:))
870 grad1_vel(index,6,i) = sum(vel_loc(:,2)*dw_loc(2,:))
873 grad2_vel(index,1,i) = sum(vel_loc(:,3)*dw_loc(1,:))
874 grad2_vel(index,2,i) = sum(vel_loc(:,4)*dw_loc(1,:))
875 grad2_vel(index,3,i) = (mode*sum(vel_loc(:,4)*
ww(:,l)) + sum(vel_loc(:,1)*
ww(:,l)))/ray
876 grad2_vel(index,4,i) = (-mode*sum(vel_loc(:,3)*
ww(:,l)) + sum(vel_loc(:,2)*
ww(:,l)))/ray
877 grad2_vel(index,5,i) = sum(vel_loc(:,3)*dw_loc(2,:))
878 grad2_vel(index,6,i) = sum(vel_loc(:,4)*dw_loc(2,:))
881 grad3_vel(index,1,i) = sum(vel_loc(:,5)*dw_loc(1,:))
882 grad3_vel(index,2,i) = sum(vel_loc(:,6)*dw_loc(1,:))
883 grad3_vel(index,3,i) = mode*sum(vel_loc(:,6)*
ww(:,l))/ray
884 grad3_vel(index,4,i) = -mode*sum(vel_loc(:,5)*
ww(:,l))/ray
885 grad3_vel(index,5,i) = sum(vel_loc(:,5)*dw_loc(2,:))
886 grad3_vel(index,6,i) = sum(vel_loc(:,6)*dw_loc(2,:))
891 IF (
inputs%if_tensor_sym)
THEN 893 gradt1_vel(:,1,:) = grad1_vel(:,1,:)
894 gradt1_vel(:,2,:) = grad1_vel(:,2,:)
895 gradt1_vel(:,3,:) = grad2_vel(:,1,:)
896 gradt1_vel(:,4,:) = grad2_vel(:,2,:)
897 gradt1_vel(:,5,:) = grad3_vel(:,1,:)
898 gradt1_vel(:,6,:) = grad3_vel(:,2,:)
900 gradt2_vel(:,1,:) = grad1_vel(:,3,:)
901 gradt2_vel(:,2,:) = grad1_vel(:,4,:)
902 gradt2_vel(:,3,:) = grad2_vel(:,3,:)
903 gradt2_vel(:,4,:) = grad2_vel(:,4,:)
904 gradt2_vel(:,5,:) = grad3_vel(:,3,:)
905 gradt2_vel(:,6,:) = grad3_vel(:,4,:)
907 gradt3_vel(:,1,:) = grad1_vel(:,5,:)
908 gradt3_vel(:,2,:) = grad1_vel(:,6,:)
909 gradt3_vel(:,3,:) = grad2_vel(:,5,:)
910 gradt3_vel(:,4,:) = grad2_vel(:,6,:)
911 gradt3_vel(:,5,:) = grad3_vel(:,5,:)
912 gradt3_vel(:,6,:) = grad3_vel(:,6,:)
915 grad1_vel = grad1_vel + gradt1_vel
916 grad2_vel = grad2_vel + gradt2_vel
917 grad3_vel = grad3_vel + gradt3_vel
921 part_tensor_1 = grad1_vel(:,:,:)
922 part_tensor_2(:,1:4,:) = grad2_vel(:,3:6,:)
923 part_tensor_2(:,5:6,:) = grad3_vel(:,5:6,:)
925 m_max_pad = 3*
SIZE(list_mode)*nb_procs/2
926 bloc_size =
SIZE(grad1_vel,1)/nb_procs+1
928 part_visc_sym_grad_1, part_visc_sym_grad_2, nb_procs, bloc_size, m_max_pad)
931 v_out(1,:,:,:) = part_visc_sym_grad_1
932 v_out(2,:,1:2,:) = part_visc_sym_grad_1(:,3:4,:)
933 v_out(2,:,3:6,:) = part_visc_sym_grad_2(:,1:4,:)
934 v_out(3,:,1:2,:) = part_visc_sym_grad_1(:,5:6,:)
935 v_out(3,:,3:4,:) = part_visc_sym_grad_2(:,3:4,:)
936 v_out(3,:,5:6,:) = part_visc_sym_grad_2(:,5:6,:)
940 SUBROUTINE smb_explicit_les(communicator, mesh, list_mode, nb_procs, visc_entro_real, mom, V_out)
948 INTEGER,
INTENT(IN) :: nb_procs
949 INTEGER,
DIMENSION(:),
INTENT(IN) :: list_mode
950 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: visc_entro_real
951 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: mom
952 REAL(KIND=8),
DIMENSION(3,mesh%gauss%l_G*mesh%dom_me,6,SIZE(list_mode)),
INTENT(OUT) :: V_out
953 REAL(KIND=8),
DIMENSION(mesh%gauss%l_G*mesh%dom_me,6,SIZE(list_mode)) :: grad1_mom, grad2_mom, grad3_mom
954 INTEGER,
DIMENSION(mesh%gauss%n_w) :: j_loc
955 REAL(KIND=8),
DIMENSION(mesh%gauss%k_d,mesh%gauss%n_w) :: dw_loc
956 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w,6) :: mom_loc
957 REAL(KIND=8) :: ray, hh, hm
958 INTEGER :: m, l , i, mode, index, k
959 INTEGER :: m_max_pad, bloc_size
960 mpi_comm :: communicator
964 DO i = 1,
SIZE(list_mode)
967 DO m = 1, mesh%dom_me
970 mom_loc(:,k) = mom(j_loc,k,i)
977 hh=mesh%hloc_gauss(index)
978 hm=min(mesh%hm(i),hh)
983 ray = sum(mesh%rr(1,j_loc)*
ww(:,l))
986 grad1_mom(index,1,i) = sum(mom_loc(:,1)*dw_loc(1,:))*hh
987 grad1_mom(index,2,i) = sum(mom_loc(:,2)*dw_loc(1,:))*hh
988 grad1_mom(index,3,i) = (mode*sum(mom_loc(:,2)*
ww(:,l)) - &
989 sum(mom_loc(:,3)*
ww(:,l)))/ray*hm
990 grad1_mom(index,4,i) = (-mode*sum(mom_loc(:,1)*
ww(:,l)) - &
991 sum(mom_loc(:,4)*
ww(:,l)))/ray*hm
992 grad1_mom(index,5,i) = sum(mom_loc(:,1)*dw_loc(2,:))*hh
993 grad1_mom(index,6,i) = sum(mom_loc(:,2)*dw_loc(2,:))*hh
996 grad2_mom(index,1,i) = sum(mom_loc(:,3)*dw_loc(1,:))*hh
997 grad2_mom(index,2,i) = sum(mom_loc(:,4)*dw_loc(1,:))*hh
998 grad2_mom(index,3,i) = (mode*sum(mom_loc(:,4)*
ww(:,l)) + &
999 sum(mom_loc(:,1)*
ww(:,l)))/ray*hm
1000 grad2_mom(index,4,i) = (-mode*sum(mom_loc(:,3)*
ww(:,l)) + &
1001 sum(mom_loc(:,2)*
ww(:,l)))/ray*hm
1002 grad2_mom(index,5,i) = sum(mom_loc(:,3)*dw_loc(2,:))*hh
1003 grad2_mom(index,6,i) = sum(mom_loc(:,4)*dw_loc(2,:))*hh
1006 grad3_mom(index,1,i) = sum(mom_loc(:,5)*dw_loc(1,:))*hh
1007 grad3_mom(index,2,i) = sum(mom_loc(:,6)*dw_loc(1,:))*hh
1008 grad3_mom(index,3,i) = mode*sum(mom_loc(:,6)*
ww(:,l))/ray*hm
1009 grad3_mom(index,4,i) = -mode*sum(mom_loc(:,5)*
ww(:,l))/ray*hm
1010 grad3_mom(index,5,i) = sum(mom_loc(:,5)*dw_loc(2,:))*hh
1011 grad3_mom(index,6,i) = sum(mom_loc(:,6)*dw_loc(2,:))*hh
1016 m_max_pad = 3*
SIZE(list_mode)*nb_procs/2
1017 bloc_size =
SIZE(grad1_mom,1)/nb_procs+1
1018 bloc_size = mesh%gauss%l_G*(bloc_size/mesh%gauss%l_G)+mesh%gauss%l_G
1020 v_out, nb_procs, bloc_size, m_max_pad)
1024 SUBROUTINE smb_surface_tension(communicator, mesh, list_mode, nb_procs, level_set, tensor_surface_gauss)
1032 INTEGER,
INTENT(IN) :: nb_procs
1033 INTEGER,
DIMENSION(:),
INTENT(IN) :: list_mode
1034 REAL(KIND=8),
DIMENSION(:,:,:,:),
INTENT(IN) :: level_set
1035 REAL(KIND=8),
DIMENSION(3,mesh%gauss%l_G*mesh%dom_me,6,SIZE(list_mode)),
INTENT(OUT) :: tensor_surface_gauss
1036 REAL(KIND=8),
DIMENSION(3,mesh%gauss%l_G*mesh%dom_me,6,SIZE(list_mode)) :: tensor
1037 REAL(KIND=8),
DIMENSION(mesh%gauss%l_G*mesh%dom_me,6,SIZE(list_mode)) :: grad_level
1038 INTEGER,
DIMENSION(mesh%gauss%n_w) :: j_loc
1039 REAL(KIND=8),
DIMENSION(mesh%gauss%k_d,mesh%gauss%n_w) :: dw_loc
1040 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w,2) :: level_set_loc
1042 INTEGER :: m, l , i, mode, index, k, n
1043 INTEGER :: m_max_pad, bloc_size
1044 mpi_comm :: communicator
1048 tensor_surface_gauss = 0.d0
1049 DO n = 1,
inputs%nb_fluid-1
1050 DO i = 1,
SIZE(list_mode)
1053 DO m = 1, mesh%dom_me
1054 j_loc = mesh%jj(:,m)
1056 level_set_loc(:,k) = level_set(n,j_loc,k,i)
1060 dw_loc =
dw(:,:,l,m)
1063 ray = sum(mesh%rr(1,j_loc)*
ww(:,l))
1066 grad_level(index,1,i) = sum(level_set_loc(:,1)*dw_loc(1,:))
1067 grad_level(index,2,i) = sum(level_set_loc(:,2)*dw_loc(1,:))
1068 grad_level(index,3,i) = mode/ray*sum(level_set_loc(:,2)*
ww(:,l))
1069 grad_level(index,4,i) = -mode/ray*sum(level_set_loc(:,1)*
ww(:,l))
1070 grad_level(index,5,i) = sum(level_set_loc(:,1)*dw_loc(2,:))
1071 grad_level(index,6,i) = sum(level_set_loc(:,2)*dw_loc(2,:))
1075 m_max_pad = 3*
SIZE(list_mode)*nb_procs/2
1076 bloc_size =
SIZE(grad_level,1)/nb_procs+1
1077 CALL fft_tensor_dcl(communicator, grad_level, grad_level, tensor, nb_procs, bloc_size, m_max_pad, opt_tension=.true.)
1078 tensor_surface_gauss = tensor_surface_gauss +
inputs%coeff_surface(n)*tensor
1083 SUBROUTINE momentum_dirichlet(communicator, mesh, list_mode, t, nb_procs, density, momentum_exact, vv_js_D)
1091 INTEGER,
INTENT(IN) :: nb_procs
1092 REAL(KIND=8),
INTENT(IN) :: t
1093 INTEGER,
DIMENSION(:),
INTENT(IN) :: list_mode
1094 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: density
1096 REAL(KIND=8),
DIMENSION(mesh%np,6,SIZE(list_mode)),
INTENT(OUT) :: momentum_exact
1097 REAL(KIND=8),
DIMENSION(SIZE(vv_js_D(1)%DIL),2,SIZE(list_mode)) :: vel_exact_r, mr
1098 REAL(KIND=8),
DIMENSION(SIZE(vv_js_D(2)%DIL),2,SIZE(list_mode)) :: vel_exact_t, mt
1099 REAL(KIND=8),
DIMENSION(SIZE(vv_js_D(3)%DIL),2,SIZE(list_mode)) :: vel_exact_z, mz
1101 INTEGER :: m_max_pad, bloc_size
1102 mpi_comm :: communicator
1104 IF (
inputs%if_level_set)
THEN 1105 DO i = 1,
SIZE(list_mode)
1107 vel_exact_r(:,k,i) = vv_exact(k, mesh%rr(:,vv_js_d(1)%DIL),list_mode(i),t)
1108 vel_exact_t(:,k,i) = vv_exact(k+2,mesh%rr(:,vv_js_d(2)%DIL),list_mode(i),t)
1109 vel_exact_z(:,k,i) = vv_exact(k+4,mesh%rr(:,vv_js_d(3)%DIL),list_mode(i),t)
1113 m_max_pad = 3*
SIZE(list_mode)*nb_procs/2
1114 bloc_size =
SIZE(vv_js_d(1)%DIL)/nb_procs+1
1115 CALL fft_par_prod_dcl(communicator, density(vv_js_d(1)%DIL,:,:), vel_exact_r, &
1116 mr, nb_procs, bloc_size, m_max_pad)
1117 momentum_exact(vv_js_d(1)%DIL,1:2,:) = mr
1119 bloc_size =
SIZE(vv_js_d(2)%DIL)/nb_procs+1
1120 CALL fft_par_prod_dcl(communicator, density(vv_js_d(2)%DIL,:,:), vel_exact_t, &
1121 mt, nb_procs, bloc_size, m_max_pad)
1122 momentum_exact(vv_js_d(2)%DIL,3:4,:) = mt
1124 bloc_size =
SIZE(vv_js_d(3)%DIL)/nb_procs+1
1125 CALL fft_par_prod_dcl(communicator, density(vv_js_d(3)%DIL,:,:), vel_exact_z, &
1126 mz, nb_procs, bloc_size, m_max_pad)
1127 momentum_exact(vv_js_d(3)%DIL,5:6,:) = mz
1129 DO i = 1,
SIZE(list_mode)
1132 momentum_exact(vv_js_d(kk)%DIL,k,i) = vv_exact(k,mesh%rr(:,vv_js_d(kk)%DIL),list_mode(i),t)
1144 REAL(KIND=8),
INTENT(OUT) :: RESLT
1145 REAL(KIND=8) :: vol_loc, vol_out
1146 INTEGER,
DIMENSION(mesh%gauss%n_w) :: j_loc
1147 INTEGER :: m, l , i , ni, code
1149 mpi_comm :: communicator
1151 DO m = 1, mesh%dom_me
1152 j_loc = mesh%jj(:,m)
1153 DO l = 1, mesh%gauss%l_G
1155 DO ni = 1, mesh%gauss%n_w; i = j_loc(ni)
1156 ray = ray + mesh%rr(1,i)*mesh%gauss%ww(ni,l)
1158 vol_loc = vol_loc + ray*mesh%gauss%rj(l,m)
1161 CALL mpi_allreduce(vol_loc,vol_out,1,mpi_double_precision, mpi_sum, communicator, code)
1165 SUBROUTINE moy(communicator,mesh,p,RESLT)
1171 REAL(KIND=8),
DIMENSION(:) ,
INTENT(IN) :: p
1172 REAL(KIND=8) ,
INTENT(OUT) :: RESLT
1173 REAL(KIND=8) :: vol_loc, vol_out, r_loc, r_out
1174 INTEGER :: m, l , i , ni, code
1175 INTEGER,
DIMENSION(mesh%gauss%n_w) :: j_loc
1177 mpi_comm :: communicator
1181 DO m = 1, mesh%dom_me
1182 j_loc = mesh%jj(:,m)
1183 DO l = 1, mesh%gauss%l_G
1185 DO ni = 1, mesh%gauss%n_w; i = j_loc(ni)
1186 ray = ray + mesh%rr(1,i)*mesh%gauss%ww(ni,l)
1189 r_loc = r_loc + sum(p(j_loc(:))*mesh%gauss%ww(:,l))*ray*mesh%gauss%rj(l,m)
1190 vol_loc = vol_loc + ray*mesh%gauss%rj(l,m)
1195 CALL mpi_allreduce(r_loc,r_out,1,mpi_double_precision, mpi_sum, communicator, code)
1196 CALL mpi_allreduce(vol_loc,vol_out,1,mpi_double_precision, mpi_sum, communicator, code)
1197 reslt = r_out / vol_out
subroutine solver(my_ksp, b, x, reinit, verbose)
subroutine qs_ns_momentum_stab_3x3(mesh, vv_3_LA, mode, ff, V1m, P, vb_3_145, vb_3_236, rotb_b, tensor, tensor_surface_gauss, stab, momentum, visc_grad_vel)
subroutine, public extract(xghost, ks, ke, LA, phi)
subroutine, public create_my_ghost(mesh, LA, ifrom)
subroutine, public smb_surface_tension(communicator, mesh, list_mode, nb_procs, level_set, tensor_surface_gauss)
subroutine, public fft_tensor_dcl(communicator, V1_in, V2_in, V_out, nb_procs, bloc_size, m_max_pad, temps, opt_tension)
subroutine qs_01_div_hybrid_2006(vv_mesh, pp_mesh, pp_LA, mode, gg, pb_1, pb_2)
subroutine twod_volume(communicator, mesh, RESLT)
subroutine, public fft_compute_entropy_visc_grad_mom(communicator, V1_in, V2_in, V3_in, c_in_real, V_out, nb_procs, bloc_size, m_max_pad, temps)
subroutine, public compute_entropy_viscosity_mom(comm_one_d, vv_3_LA, vv_mesh, pp_mesh, time, list_mode, momentum, momentum_m1, momentum_m2, pn_m1, un_m1, tensor_m1, visc_grad_vel_m1, tensor_surface_gauss, rotb_b_m1, visco_dyn_m1, density_m2, density_m1, density, tempn, visc_entro_real, visc_entro_level_real)
subroutine create_local_petsc_matrix(communicator, LA, matrix, clean)
subroutine error_petsc(string)
real(kind=8) function user_time()
subroutine, public fft_par_cross_prod_dcl(communicator, V1_in, V2_in, V_out, nb_procs, bloc_size, m_max_pad, temps)
subroutine, public smb_explicit_diffu_sym(communicator, mesh, list_mode, nb_procs, visc_dyn, vel, V_out)
subroutine qs_diff_mass_scal_m(mesh, LA, visco, mass, stab, mode, matrix)
subroutine, public fft_compute_diffu_mom(communicator, V1_in, V2_in, V3_in, V1_out, V2_out, nb_procs, bloc_size, m_max_pad, temps)
subroutine, public fft_par_prod_dcl(communicator, c1_in, c2_in, c_out, nb_procs, bloc_size, m_max_pad, temps)
subroutine, public three_level_ns_tensor_sym_with_m(comm_one_d, time, vv_3_LA, pp_1_LA, dt, Re, list_mode, pp_mesh, vv_mesh, incpn_m1, incpn, pn_m1, pn, un_m1, un, Hn_p2, Bn_p2, density_m1, density, density_p1, visco_dyn, tempn, level_set, level_set_p1, visc_entro_level)
real(kind=8) function norm_s(communicator, norm_type, mesh, list_mode, v)
subroutine init_solver(my_par, my_ksp, matrix, communicator, solver, precond, opt_re_init)
subroutine dirichlet_rhs(js_D, bs_D, b)
subroutine vector_glob_js_d(vv_mesh, list_mode, vv_3_LA, vv_list_dirichlet_sides, vv_js_D, vv_mode_global_js_D)
subroutine, public compute_entropy_viscosity_mom_no_level_set(comm_one_d, vv_3_LA, vv_mesh, pp_mesh, time, list_mode, momentum, momentum_m1, momentum_m2, pn_m1, un_m1, tensor_m1, rotb_b_m1, tempn, visc_entro_real)
subroutine inject(jj_c, jj_f, pp_c, pp_f)
subroutine, public momentum_dirichlet(communicator, mesh, list_mode, t, nb_procs, density, momentum_exact, vv_js_D)
subroutine dirichlet_m_parallel(matrix, glob_js_D)
type(my_verbose), public talk_to_me
real(kind=8) function norm_sf(communicator, norm_type, mesh, list_mode, v)
subroutine, public fft_scalar_vect_dcl(communicator, V1_in, V2_in, V_out, pb, nb_procs, bloc_size, m_max_pad, temps)
subroutine qs_diff_mass_vect_3x3(type_op, LA, mesh, visco, mass, stab, stab_bdy_ns, i_mode, mode, matrix)
subroutine twod_volume(communicator, mesh, RESLT)
subroutine, public smb_explicit_les(communicator, mesh, list_mode, nb_procs, visc_entro_real, mom, V_out)
subroutine, public inject_p1_p2(jj_c, jj_f, pp_c, pp_f)
subroutine moy(communicator, mesh, p, RESLT)
real(kind=8), dimension(:,:,:,:), pointer dw
real(kind=8), dimension(:,:), pointer ww
subroutine smb_curlh_cross_b_gauss_sft_par(communicator, mesh, list_mode, V_in, W_in, V_out)
subroutine scalar_without_glob_js_d(pp_mesh, list_mode, pp_1_LA, pp_mode_global_js_D)