8 un, un_m1, un_m2, pn_m1, rotv_v_m1, visco_entro_grad_u, opt_tempn)
23 #include "petsc/finclude/petsc.h" 27 TYPE(
mesh_type),
INTENT(IN) :: pp_mesh, vv_mesh
29 REAL(KIND=8),
INTENT(IN) :: time
30 INTEGER,
DIMENSION(:),
INTENT(IN) :: list_mode
31 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(INOUT) :: un, un_m1, un_m2
32 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(INOUT) :: pn_m1
33 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: rotv_v_m1
34 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN),
OPTIONAL :: opt_tempn
35 REAL(KIND=8),
DIMENSION(:,:,:,:),
INTENT(OUT) :: visco_entro_grad_u
36 TYPE(dyn_int_line),
DIMENSION(3),
SAVE :: vv_js_D
37 LOGICAL,
SAVE :: once = .true.
38 REAL(KIND=8),
ALLOCATABLE,
DIMENSION(:),
SAVE :: zero_dir1
39 REAL(KIND=8),
ALLOCATABLE,
DIMENSION(:),
SAVE :: zero_dir2
40 REAL(KIND=8),
ALLOCATABLE,
DIMENSION(:),
SAVE :: zero_dir3
41 REAL(KIND=8),
SAVE :: Volume_3D
42 INTEGER,
SAVE :: iteration
44 REAL(KIND=8),
DIMENSION(3,vv_mesh%gauss%l_G*vv_mesh%dom_me,6,SIZE(list_mode)) :: strain_rate_tensor
45 REAL(KIND=8),
DIMENSION(vv_mesh%gauss%l_Gs*vv_mesh%dom_mes,6,SIZE(list_mode)) :: strain_rate_tensor_scal_n_bdy
46 REAL(KIND=8),
DIMENSION(vv_mesh%gauss%l_G*vv_mesh%dom_me,6,SIZE(list_mode)) :: rhs_gauss
47 REAL(KIND=8),
DIMENSION(vv_mesh%gauss%l_G*vv_mesh%dom_me,6,SIZE(list_mode)) :: un_m1_gauss, res_ns_gauss
48 REAL(KIND=8),
DIMENSION(vv_mesh%np,6,SIZE(list_mode)) :: res_ns
49 INTEGER,
POINTER,
DIMENSION(:) :: vv_3_ifrom
50 INTEGER,
DIMENSION(vv_mesh%gauss%n_w) :: j_loc
51 REAL(KIND=8) :: norm_vel_L2
54 INTEGER :: i, k, nu_mat, mode, m, l,
TYPE, index, n
55 INTEGER :: nb_procs, code, bloc_size, m_max_pad
56 petscerrorcode :: ierr
57 mpi_comm,
DIMENSION(:),
POINTER :: comm_one_d
58 vec,
SAVE :: vb_3_145, vb_3_236, vx_3, vx_3_ghost
59 mat,
DIMENSION(:),
POINTER,
SAVE :: les_mat
60 ksp,
DIMENSION(:),
POINTER,
SAVE :: les_ksp
69 CALL veccreateghost(comm_one_d(1), n, &
70 petsc_determine,
SIZE(vv_3_ifrom), vv_3_ifrom, vx_3, ierr)
71 CALL vecghostgetlocalform(vx_3, vx_3_ghost, ierr)
72 CALL vecduplicate(vx_3, vb_3_145, ierr)
73 CALL vecduplicate(vx_3, vb_3_236, ierr)
77 volume_3d = volume_3d*2*acos(-1.d0)
86 ALLOCATE(les_mat(2),les_ksp(2))
87 ALLOCATE(zero_dir1(
SIZE(vv_js_d(1)%DIL)))
88 ALLOCATE(zero_dir2(
SIZE(vv_js_d(2)%DIL)))
89 ALLOCATE(zero_dir3(
SIZE(vv_js_d(3)%DIL)))
95 IF (
inputs%my_periodic%nb_periodic_pairs/=0)
THEN 97 les_mat(nu_mat), vv_3_la)
105 iteration = iteration + 1
109 strain_rate_tensor = 1/
inputs%Re*strain_rate_tensor
111 strain_rate_tensor_scal_n_bdy = -1/
inputs%Re*strain_rate_tensor_scal_n_bdy
114 IF (
PRESENT(opt_tempn))
THEN 116 (un-un_m2)/(2*
inputs%dt), pn_m1, rotv_v_m1, rhs_gauss, opt_tempn=opt_tempn)
119 (un-un_m2)/(2*
inputs%dt), pn_m1, rotv_v_m1, rhs_gauss)
123 DO i = 1,
SIZE(list_mode)
127 CALL rhs_3x3(vv_mesh, vv_3_la, mode, rhs_gauss(:,:,i), vb_3_145, vb_3_236,&
128 opt_tensor=strain_rate_tensor(:,:,:,i), opt_tensor_scaln_bdy=strain_rate_tensor_scal_n_bdy(:,:,i))
130 IF (
inputs%my_periodic%nb_periodic_pairs/=0)
THEN 131 CALL periodic_rhs_petsc(vvz_per%n_bord, vvz_per%list, vvz_per%perlist, vb_3_236, vv_3_la)
132 CALL periodic_rhs_petsc(vvz_per%n_bord, vvz_per%list, vvz_per%perlist, vb_3_145, vv_3_la)
141 CALL vecghostupdatebegin(vx_3,insert_values,scatter_forward,ierr)
142 CALL vecghostupdateend(vx_3,insert_values,scatter_forward,ierr)
143 CALL extract(vx_3_ghost,1,1,vv_3_la,res_ns(:,1,i))
144 CALL extract(vx_3_ghost,2,2,vv_3_la,res_ns(:,4,i))
145 CALL extract(vx_3_ghost,3,3,vv_3_la,res_ns(:,5,i))
150 CALL vecghostupdatebegin(vx_3,insert_values,scatter_forward,ierr)
151 CALL vecghostupdateend(vx_3,insert_values,scatter_forward,ierr)
152 CALL extract(vx_3_ghost,1,1,vv_3_la,res_ns(:,2,i))
153 CALL extract(vx_3_ghost,2,2,vv_3_la,res_ns(:,3,i))
154 CALL extract(vx_3_ghost,3,3,vv_3_la,res_ns(:,6,i))
171 DO i = 1,
SIZE(list_mode)
173 DO m = 1, vv_mesh%dom_me
174 j_loc = vv_mesh%jj(:,m)
175 DO l = 1, vv_mesh%gauss%l_G
178 un_m1_gauss(index,
TYPE,i) = sum(un_m1(j_loc,
TYPE,i)*vv_mesh%
gauss%
ww(:,l))
179 res_ns_gauss(index,
TYPE,i) = sum(res_ns(j_loc,
TYPE,i)*vv_mesh%
gauss%
ww(:,l))
189 norm_vel_l2 =
norm_sf(comm_one_d,
'L2', vv_mesh, list_mode, un_m1)
191 CALL mpi_comm_size(comm_one_d(2), nb_procs, code)
192 bloc_size =
SIZE(un_m1_gauss,1)/nb_procs+1
193 bloc_size = vv_mesh%gauss%l_G*(bloc_size/vv_mesh%gauss%l_G)+vv_mesh%gauss%l_G
194 m_max_pad = 3*
SIZE(list_mode)*nb_procs/2
196 strain_rate_tensor(1,:,:,:), strain_rate_tensor(2,:,:,:), strain_rate_tensor(3,:,:,:), &
197 vv_mesh%hloc_gauss, visco_entro_grad_u(1,:,:,:), visco_entro_grad_u(2,:,:,:), &
198 visco_entro_grad_u(3,:,:,:), nb_procs, bloc_size, m_max_pad, norm_vel_l2**2/volume_3d, vv_mesh%gauss%l_G)
204 momentum, momentum_m1, momentum_m2, pn_m1, un_m1, tensor_m1, visc_grad_vel_m1, tensor_surface_gauss, &
205 rotb_b_m1, visco_dyn_m1, density_m2, density_m1, density, tempn, visc_entro_real, visc_entro_level_real)
219 #include "petsc/finclude/petsc.h" 223 TYPE(
mesh_type),
INTENT(IN) :: pp_mesh, vv_mesh
224 REAL(KIND=8),
INTENT(IN) :: time
225 INTEGER,
DIMENSION(:),
INTENT(IN) :: list_mode
226 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: momentum, momentum_m1, momentum_m2
227 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: un_m1
228 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: pn_m1
229 REAL(KIND=8),
DIMENSION(:,:,:,:),
INTENT(IN) :: tensor_m1, visc_grad_vel_m1
230 REAL(KIND=8),
DIMENSION(:,:,:,:),
INTENT(IN) :: tensor_surface_gauss
231 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: rotb_b_m1
232 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: visco_dyn_m1
233 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: density_m2, density_m1, density
234 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: tempn
235 REAL(KIND=8),
DIMENSION(:,:),
INTENT(OUT) :: visc_entro_real
236 REAL(KIND=8),
DIMENSION(:,:),
INTENT(OUT) :: visc_entro_level_real
238 LOGICAL,
SAVE :: once = .true.
239 REAL(KIND=8),
SAVE :: Volume_3D
240 INTEGER,
SAVE :: iteration
241 REAL(KIND=8),
DIMENSION(3,vv_mesh%gauss%l_G*vv_mesh%dom_me,6,SIZE(list_mode)) :: tensor_m1_gauss
242 REAL(KIND=8),
DIMENSION(vv_mesh%gauss%l_Gs*vv_mesh%dom_mes,6,SIZE(list_mode)) :: visc_grad_vel_m1_scal_n_bdy
243 REAL(KIND=8),
DIMENSION(vv_mesh%gauss%l_Gs*vv_mesh%dom_mes,6,SIZE(list_mode)) :: tensor_m1_scal_n_bdy
244 REAL(KIND=8),
DIMENSION(vv_mesh%gauss%l_G*vv_mesh%dom_me,6,SIZE(list_mode)) :: rhs_gauss
245 REAL(KIND=8),
DIMENSION(vv_mesh%gauss%l_G*vv_mesh%dom_me,6,SIZE(list_mode)) :: un_m1_gauss
246 REAL(KIND=8),
DIMENSION(vv_mesh%gauss%l_G*vv_mesh%dom_me,6,SIZE(list_mode)) :: momentum_m1_gauss
247 REAL(KIND=8),
DIMENSION(vv_mesh%gauss%l_G*vv_mesh%dom_me,6,SIZE(list_mode)) :: res_ns_gauss
248 REAL(KIND=8),
DIMENSION(vv_mesh%np,6,SIZE(list_mode)) :: res_ns
249 REAL(KIND=8),
DIMENSION(vv_mesh%gauss%l_G*vv_mesh%dom_me,2,SIZE(list_mode)) :: res_mass_gauss
250 REAL(KIND=8),
DIMENSION(pp_mesh%np,6,SIZE(list_mode)) :: un_m1_P1, momentum_m1_P1, res_ns_P1
251 REAL(KIND=8),
DIMENSION(pp_mesh%np,2,SIZE(list_mode)) :: density_P1, density_m2_P1
252 REAL(KIND=8),
DIMENSION(pp_mesh%gauss%l_G*pp_mesh%dom_me,6,SIZE(list_mode)) :: un_m1_P1_gauss
253 REAL(KIND=8),
DIMENSION(pp_mesh%gauss%l_G*pp_mesh%dom_me,6,SIZE(list_mode)) :: momentum_m1_P1_gauss
254 REAL(KIND=8),
DIMENSION(pp_mesh%gauss%l_G*pp_mesh%dom_me,6,SIZE(list_mode)) :: res_ns_P1_gauss
255 REAL(KIND=8),
DIMENSION(pp_mesh%gauss%l_G*pp_mesh%dom_me,2,SIZE(list_mode)) :: res_mass_P1_gauss
256 INTEGER,
POINTER,
DIMENSION(:) :: vv_3_ifrom
257 INTEGER,
DIMENSION(vv_mesh%gauss%n_w) :: j_loc
258 INTEGER,
DIMENSION(pp_mesh%gauss%n_w) :: j_loc_P1
259 REAL(KIND=8) :: norm_vel_L2, norm_mom_L2
262 INTEGER :: i, k, nu_mat, mode, m, l,
TYPE, index, n
263 INTEGER :: nb_procs, code, bloc_size, m_max_pad
264 petscerrorcode :: ierr
265 mpi_comm,
DIMENSION(:),
POINTER :: comm_one_d
266 vec,
SAVE :: vb_3_145, vb_3_236, vx_3, vx_3_ghost
267 mat,
DIMENSION(:),
POINTER,
SAVE :: les_mat
268 ksp,
DIMENSION(:),
POINTER,
SAVE :: les_ksp
277 CALL veccreateghost(comm_one_d(1), n, &
278 petsc_determine,
SIZE(vv_3_ifrom), vv_3_ifrom, vx_3, ierr)
279 CALL vecghostgetlocalform(vx_3, vx_3_ghost, ierr)
280 CALL vecduplicate(vx_3, vb_3_145, ierr)
281 CALL vecduplicate(vx_3, vb_3_236, ierr)
285 volume_3d = volume_3d*2*acos(-1.d0)
288 ALLOCATE(les_mat(2),les_ksp(2))
297 CALL init_solver(
inputs%my_par_vv,les_ksp(nu_mat),les_mat(nu_mat),comm_one_d(1),&
304 iteration = iteration + 1
308 visc_grad_vel_m1_scal_n_bdy)
309 visc_grad_vel_m1_scal_n_bdy = -1/
inputs%Re*visc_grad_vel_m1_scal_n_bdy
316 (momentum-momentum_m2)/(2*
inputs%dt), pn_m1, density_m1, rotb_b_m1, rhs_gauss, opt_tempn=tempn)
320 DO i = 1,
SIZE(list_mode)
322 DO m = 1, vv_mesh%dom_me
323 j_loc = vv_mesh%jj(:,m)
324 DO l = 1, vv_mesh%gauss%l_G
328 tensor_m1_gauss(k,index,
TYPE,i)=sum(tensor_m1(k,j_loc,
TYPE,i)*vv_mesh%
gauss%
ww(:,l))
336 DO i = 1,
SIZE(list_mode)
340 CALL rhs_3x3(vv_mesh, vv_3_la, mode, rhs_gauss(:,:,i), vb_3_145, vb_3_236,&
341 opt_tensor=-tensor_m1_gauss(:,:,:,i)+visc_grad_vel_m1(:,:,:,i)+tensor_surface_gauss(:,:,:,i), &
342 opt_tensor_scaln_bdy=visc_grad_vel_m1_scal_n_bdy(:,:,i)+tensor_m1_scal_n_bdy(:,:,i))
355 CALL vecghostupdatebegin(vx_3,insert_values,scatter_forward,ierr)
356 CALL vecghostupdateend(vx_3,insert_values,scatter_forward,ierr)
357 CALL extract(vx_3_ghost,1,1,vv_3_la,res_ns(:,1,i))
358 CALL extract(vx_3_ghost,2,2,vv_3_la,res_ns(:,4,i))
359 CALL extract(vx_3_ghost,3,3,vv_3_la,res_ns(:,5,i))
364 CALL vecghostupdatebegin(vx_3,insert_values,scatter_forward,ierr)
365 CALL vecghostupdateend(vx_3,insert_values,scatter_forward,ierr)
366 CALL extract(vx_3_ghost,1,1,vv_3_la,res_ns(:,2,i))
367 CALL extract(vx_3_ghost,2,2,vv_3_la,res_ns(:,3,i))
368 CALL extract(vx_3_ghost,3,3,vv_3_la,res_ns(:,6,i))
382 DO i = 1,
SIZE(list_mode)
384 DO m = 1, vv_mesh%dom_me
385 j_loc = vv_mesh%jj(:,m)
386 DO l = 1, vv_mesh%gauss%l_G
389 un_m1_gauss(index,
TYPE,i) = sum(un_m1(j_loc,
TYPE,i)*vv_mesh%
gauss%
ww(:,l))
390 momentum_m1_gauss(index,
TYPE,i) = sum(momentum_m1(j_loc,
TYPE,i)*vv_mesh%
gauss%
ww(:,l))
391 res_ns_gauss(index,
TYPE,i) = sum(res_ns(j_loc,
TYPE,i)*vv_mesh%
gauss%
ww(:,l))
403 norm_vel_l2 =
norm_sf(comm_one_d,
'L2', vv_mesh, list_mode, un_m1)
404 norm_mom_l2 =
norm_sf(comm_one_d,
'L2', vv_mesh, list_mode, momentum_m1)
406 CALL mpi_comm_size(comm_one_d(2), nb_procs, code)
407 bloc_size =
SIZE(un_m1_gauss,1)/nb_procs+1
408 bloc_size = vv_mesh%gauss%l_G*(bloc_size/vv_mesh%gauss%l_G)+vv_mesh%gauss%l_G
409 m_max_pad = 3*
SIZE(list_mode)*nb_procs/2
411 IF (
inputs%if_level_set_P2)
THEN 414 res_mass_gauss, vv_mesh%hloc_gauss, visc_entro_real, nb_procs, bloc_size, m_max_pad,&
415 vv_mesh%gauss%l_G, opt_c2_real_out=visc_entro_level_real)
419 res_mass_gauss, vv_mesh%hloc_gauss, visc_entro_real, nb_procs, bloc_size, m_max_pad,&
423 DO i = 1,
SIZE(list_mode)
425 CALL project_p2_p1(vv_mesh%jj, pp_mesh%jj, un_m1(:,k,i), un_m1_p1(:,k,i))
426 CALL project_p2_p1(vv_mesh%jj, pp_mesh%jj, momentum_m1(:,k,i), momentum_m1_p1(:,k,i))
427 CALL project_p2_p1(vv_mesh%jj, pp_mesh%jj, res_ns(:,k,i), res_ns_p1(:,k,i))
430 CALL project_p2_p1(vv_mesh%jj, pp_mesh%jj, density(:,k,i), density_p1(:,k,i))
431 CALL project_p2_p1(vv_mesh%jj, pp_mesh%jj, density_m2(:,k,i), density_m2_p1(:,k,i))
437 DO i = 1,
SIZE(list_mode)
439 DO m = 1, pp_mesh%dom_me
440 j_loc_p1 = pp_mesh%jj(:,m)
441 DO l = 1, pp_mesh%gauss%l_G
444 un_m1_p1_gauss(index,
TYPE,i) = sum(un_m1_p1(j_loc_p1,
TYPE,i)*pp_mesh%
gauss%
ww(:,l))
445 momentum_m1_p1_gauss(index,
TYPE,i) = sum(momentum_m1_p1(j_loc_p1,
TYPE,i)*pp_mesh%
gauss%
ww(:,l))
446 res_ns_p1_gauss(index,
TYPE,i) = sum(res_ns_p1(j_loc_p1,
TYPE,i)*pp_mesh%
gauss%
ww(:,l))
454 CALL compute_res_mass_gauss(pp_mesh, list_mode, density_m2_p1, density_p1, momentum_m1_p1, res_mass_p1_gauss)
457 CALL mpi_comm_size(comm_one_d(2), nb_procs, code)
458 bloc_size =
SIZE(un_m1_p1_gauss,1)/nb_procs+1
459 bloc_size = pp_mesh%gauss%l_G*(bloc_size/pp_mesh%gauss%l_G)+pp_mesh%gauss%l_G
460 m_max_pad = 3*
SIZE(list_mode)*nb_procs/2
464 res_ns_p1_gauss, res_mass_p1_gauss, pp_mesh%hloc_gauss, visc_entro_level_real, nb_procs, bloc_size, m_max_pad,&
483 momentum, momentum_m1, momentum_m2, pn_m1, un_m1, tensor_m1, &
484 rotb_b_m1, tempn, visc_entro_real)
498 #include "petsc/finclude/petsc.h" 502 TYPE(
mesh_type),
INTENT(IN) :: pp_mesh, vv_mesh
503 REAL(KIND=8),
INTENT(IN) :: time
504 INTEGER,
DIMENSION(:),
INTENT(IN) :: list_mode
505 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: momentum, momentum_m1, momentum_m2
506 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: un_m1
507 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: pn_m1
508 REAL(KIND=8),
DIMENSION(:,:,:,:),
INTENT(IN) :: tensor_m1
509 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: rotb_b_m1
510 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: tempn
511 REAL(KIND=8),
DIMENSION(:,:),
INTENT(OUT) :: visc_entro_real
513 LOGICAL,
SAVE :: once = .true.
514 REAL(KIND=8),
SAVE :: Volume_3D
515 INTEGER,
SAVE :: iteration
516 REAL(KIND=8),
DIMENSION(3,vv_mesh%gauss%l_G*vv_mesh%dom_me,6,SIZE(list_mode)) :: tensor_m1_gauss
517 REAL(KIND=8),
DIMENSION(vv_mesh%gauss%l_Gs*vv_mesh%dom_mes,6,SIZE(list_mode)) :: tensor_m1_scal_n_bdy
518 REAL(KIND=8),
DIMENSION(3,vv_mesh%gauss%l_G*vv_mesh%dom_me,6,SIZE(list_mode)) :: visc_grad_vel_m1
519 REAL(KIND=8),
DIMENSION(vv_mesh%gauss%l_Gs*vv_mesh%dom_mes,6,SIZE(list_mode)) :: visc_grad_vel_m1_scal_n_bdy
520 REAL(KIND=8),
DIMENSION(vv_mesh%gauss%l_G*vv_mesh%dom_me,6,SIZE(list_mode)) :: rhs_gauss
521 REAL(KIND=8),
DIMENSION(vv_mesh%gauss%l_G*vv_mesh%dom_me,2,SIZE(list_mode)) :: res_mass_gauss
522 REAL(KIND=8),
DIMENSION(vv_mesh%gauss%l_G*vv_mesh%dom_me,6,SIZE(list_mode)) :: un_m1_gauss
523 REAL(KIND=8),
DIMENSION(vv_mesh%gauss%l_G*vv_mesh%dom_me,6,SIZE(list_mode)) :: momentum_m1_gauss
524 REAL(KIND=8),
DIMENSION(vv_mesh%gauss%l_G*vv_mesh%dom_me,6,SIZE(list_mode)) :: res_ns_gauss
525 REAL(KIND=8),
DIMENSION(vv_mesh%np,6,SIZE(list_mode)) :: res_ns
526 INTEGER,
POINTER,
DIMENSION(:) :: vv_3_ifrom
527 INTEGER,
DIMENSION(vv_mesh%gauss%n_w) :: j_loc
528 REAL(KIND=8) :: norm_vel_L2, norm_mom_L2
531 INTEGER :: i, k, nu_mat, mode, m, l,
TYPE, index, n
532 INTEGER :: nb_procs, code, bloc_size, m_max_pad
533 petscerrorcode :: ierr
534 mpi_comm,
DIMENSION(:),
POINTER :: comm_one_d
535 vec,
SAVE :: vb_3_145, vb_3_236, vx_3, vx_3_ghost
536 mat,
DIMENSION(:),
POINTER,
SAVE :: les_mat
537 ksp,
DIMENSION(:),
POINTER,
SAVE :: les_ksp
546 CALL veccreateghost(comm_one_d(1), n, &
547 petsc_determine,
SIZE(vv_3_ifrom), vv_3_ifrom, vx_3, ierr)
548 CALL vecghostgetlocalform(vx_3, vx_3_ghost, ierr)
549 CALL vecduplicate(vx_3, vb_3_145, ierr)
550 CALL vecduplicate(vx_3, vb_3_236, ierr)
554 volume_3d = volume_3d*2*acos(-1.d0)
557 ALLOCATE(les_mat(2),les_ksp(2))
562 CALL init_solver(
inputs%my_par_vv,les_ksp(nu_mat),les_mat(nu_mat),comm_one_d(1),&
569 iteration = iteration + 1
573 visc_grad_vel_m1 = 1/
inputs%Re* visc_grad_vel_m1
575 visc_grad_vel_m1_scal_n_bdy = -1/
inputs%Re*visc_grad_vel_m1_scal_n_bdy
583 (momentum-momentum_m2)/(2*
inputs%dt), pn_m1, -rotb_b_m1, rhs_gauss, opt_tempn=tempn)
587 DO i = 1,
SIZE(list_mode)
589 DO m = 1, vv_mesh%dom_me
590 j_loc = vv_mesh%jj(:,m)
591 DO l = 1, vv_mesh%gauss%l_G
595 tensor_m1_gauss(k,index,
TYPE,i)=sum(tensor_m1(k,j_loc,
TYPE,i)*vv_mesh%
gauss%
ww(:,l))
603 DO i = 1,
SIZE(list_mode)
607 CALL rhs_3x3(vv_mesh, vv_3_la, mode, rhs_gauss(:,:,i), vb_3_145, vb_3_236,&
608 opt_tensor=-tensor_m1_gauss(:,:,:,i)+visc_grad_vel_m1(:,:,:,i), &
609 opt_tensor_scaln_bdy=visc_grad_vel_m1_scal_n_bdy(:,:,i)+tensor_m1_scal_n_bdy(:,:,i))
617 CALL vecghostupdatebegin(vx_3,insert_values,scatter_forward,ierr)
618 CALL vecghostupdateend(vx_3,insert_values,scatter_forward,ierr)
619 CALL extract(vx_3_ghost,1,1,vv_3_la,res_ns(:,1,i))
620 CALL extract(vx_3_ghost,2,2,vv_3_la,res_ns(:,4,i))
621 CALL extract(vx_3_ghost,3,3,vv_3_la,res_ns(:,5,i))
626 CALL vecghostupdatebegin(vx_3,insert_values,scatter_forward,ierr)
627 CALL vecghostupdateend(vx_3,insert_values,scatter_forward,ierr)
628 CALL extract(vx_3_ghost,1,1,vv_3_la,res_ns(:,2,i))
629 CALL extract(vx_3_ghost,2,2,vv_3_la,res_ns(:,3,i))
630 CALL extract(vx_3_ghost,3,3,vv_3_la,res_ns(:,6,i))
635 DO i = 1,
SIZE(list_mode)
637 DO m = 1, vv_mesh%dom_me
638 j_loc = vv_mesh%jj(:,m)
639 DO l = 1, vv_mesh%gauss%l_G
642 un_m1_gauss(index,
TYPE,i) = sum(un_m1(j_loc,
TYPE,i)*vv_mesh%
gauss%
ww(:,l))
643 momentum_m1_gauss(index,
TYPE,i) = sum(momentum_m1(j_loc,
TYPE,i)*vv_mesh%
gauss%
ww(:,l))
644 res_ns_gauss(index,
TYPE,i) = sum(res_ns(j_loc,
TYPE,i)*vv_mesh%
gauss%
ww(:,l))
652 norm_vel_l2 =
norm_sf(comm_one_d,
'L2', vv_mesh, list_mode, un_m1)
653 norm_mom_l2 =
norm_sf(comm_one_d,
'L2', vv_mesh, list_mode, momentum_m1)
655 CALL mpi_comm_size(comm_one_d(2), nb_procs, code)
656 bloc_size =
SIZE(un_m1_gauss,1)/nb_procs+1
657 bloc_size = vv_mesh%gauss%l_G*(bloc_size/vv_mesh%gauss%l_G)+vv_mesh%gauss%l_G
658 m_max_pad = 3*
SIZE(list_mode)*nb_procs/2
663 res_mass_gauss, vv_mesh%hloc_gauss, visc_entro_real, nb_procs, bloc_size, m_max_pad,&
676 INTEGER,
DIMENSION(:),
INTENT(IN) :: list_mode
677 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: vel
678 REAL(KIND=8),
DIMENSION(3,mesh%gauss%l_G*mesh%dom_me,6,SIZE(list_mode)),
INTENT(OUT) :: V_out
679 REAL(KIND=8),
DIMENSION(mesh%gauss%l_G*mesh%dom_me,6,SIZE(list_mode)) :: grad1_vel, grad2_vel, grad3_vel
680 INTEGER,
DIMENSION(mesh%gauss%n_w) :: j_loc
681 REAL(KIND=8),
DIMENSION(mesh%gauss%k_d,mesh%gauss%n_w) :: dw_loc
682 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w,6) :: vel_loc
683 REAL(KIND=8) :: ray, hh, hm
684 INTEGER :: m, l , i, mode, index, k
686 DO i = 1,
SIZE(list_mode)
689 DO m = 1, mesh%dom_me
692 vel_loc(:,k) = vel(j_loc,k,i)
694 DO l = 1, mesh%gauss%l_G
696 dw_loc = mesh%gauss%dw(:,:,l,m)
699 hh=mesh%hloc_gauss(index)
700 hm=min(mesh%hm(i),hh)
704 ray = sum(mesh%rr(1,j_loc)*mesh%gauss%ww(:,l))
707 grad1_vel(index,1,i) = sum(vel_loc(:,1)*dw_loc(1,:))*hh
708 grad1_vel(index,2,i) = sum(vel_loc(:,2)*dw_loc(1,:))*hh
709 grad1_vel(index,3,i) = (mode*sum(vel_loc(:,2)*mesh%gauss%ww(:,l)) - &
710 sum(vel_loc(:,3)*mesh%gauss%ww(:,l)))/ray*hm
711 grad1_vel(index,4,i) = (-mode*sum(vel_loc(:,1)*mesh%gauss%ww(:,l)) - &
712 sum(vel_loc(:,4)*mesh%gauss%ww(:,l)))/ray*hm
713 grad1_vel(index,5,i) = sum(vel_loc(:,1)*dw_loc(2,:))*hh
714 grad1_vel(index,6,i) = sum(vel_loc(:,2)*dw_loc(2,:))*hh
717 grad2_vel(index,1,i) = sum(vel_loc(:,3)*dw_loc(1,:))*hh
718 grad2_vel(index,2,i) = sum(vel_loc(:,4)*dw_loc(1,:))*hh
719 grad2_vel(index,3,i) = (mode*sum(vel_loc(:,4)*mesh%gauss%ww(:,l)) + &
720 sum(vel_loc(:,1)*mesh%gauss%ww(:,l)))/ray*hm
721 grad2_vel(index,4,i) = (-mode*sum(vel_loc(:,3)*mesh%gauss%ww(:,l)) + &
722 sum(vel_loc(:,2)*mesh%gauss%ww(:,l)))/ray*hm
723 grad2_vel(index,5,i) = sum(vel_loc(:,3)*dw_loc(2,:))*hh
724 grad2_vel(index,6,i) = sum(vel_loc(:,4)*dw_loc(2,:))*hh
727 grad3_vel(index,1,i) = sum(vel_loc(:,5)*dw_loc(1,:))*hh
728 grad3_vel(index,2,i) = sum(vel_loc(:,6)*dw_loc(1,:))*hh
729 grad3_vel(index,3,i) = mode*sum(vel_loc(:,6)*mesh%gauss%ww(:,l))/ray*hm
730 grad3_vel(index,4,i) = -mode*sum(vel_loc(:,5)*mesh%gauss%ww(:,l))/ray*hm
731 grad3_vel(index,5,i) = sum(vel_loc(:,5)*dw_loc(2,:))*hh
732 grad3_vel(index,6,i) = sum(vel_loc(:,6)*dw_loc(2,:))*hh
737 v_out(1,:,:,:) = grad1_vel
738 v_out(2,:,:,:) = grad2_vel
739 v_out(3,:,:,:) = grad3_vel
751 INTEGER,
DIMENSION(:),
INTENT(IN) :: list_mode
752 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: vel
753 REAL(KIND=8),
DIMENSION(3,mesh%gauss%l_G*mesh%dom_me,6,SIZE(list_mode)),
INTENT(OUT) :: V_out
754 REAL(KIND=8),
DIMENSION(mesh%gauss%l_G*mesh%dom_me,6,SIZE(list_mode)) :: grad1_vel, grad2_vel, grad3_vel
755 REAL(KIND=8),
DIMENSION(mesh%gauss%l_G*mesh%dom_me,6,SIZE(list_mode)) :: gradT1_vel, gradT2_vel, gradT3_vel
756 INTEGER,
DIMENSION(mesh%gauss%n_w) :: j_loc
757 REAL(KIND=8),
DIMENSION(mesh%gauss%k_d,mesh%gauss%n_w) :: dw_loc
758 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w,6) :: vel_loc
760 INTEGER :: m, l , i, mode, index, k
762 DO i = 1,
SIZE(list_mode)
765 DO m = 1, mesh%dom_me
768 vel_loc(:,k) = vel(j_loc,k,i)
770 DO l = 1, mesh%gauss%l_G
772 dw_loc = mesh%gauss%dw(:,:,l,m)
775 ray = sum(mesh%rr(1,j_loc)*mesh%gauss%ww(:,l))
778 grad1_vel(index,1,i) = sum(vel_loc(:,1)*dw_loc(1,:))
779 grad1_vel(index,2,i) = sum(vel_loc(:,2)*dw_loc(1,:))
780 grad1_vel(index,3,i) = (mode*sum(vel_loc(:,2)*mesh%gauss%ww(:,l)) - &
781 sum(vel_loc(:,3)*mesh%gauss%ww(:,l)))/ray
782 grad1_vel(index,4,i) = (-mode*sum(vel_loc(:,1)*mesh%gauss%ww(:,l)) - &
783 sum(vel_loc(:,4)*mesh%gauss%ww(:,l)))/ray
784 grad1_vel(index,5,i) = sum(vel_loc(:,1)*dw_loc(2,:))
785 grad1_vel(index,6,i) = sum(vel_loc(:,2)*dw_loc(2,:))
788 grad2_vel(index,1,i) = sum(vel_loc(:,3)*dw_loc(1,:))
789 grad2_vel(index,2,i) = sum(vel_loc(:,4)*dw_loc(1,:))
790 grad2_vel(index,3,i) = (mode*sum(vel_loc(:,4)*mesh%gauss%ww(:,l)) + &
791 sum(vel_loc(:,1)*mesh%gauss%ww(:,l)))/ray
792 grad2_vel(index,4,i) = (-mode*sum(vel_loc(:,3)*mesh%gauss%ww(:,l)) + &
793 sum(vel_loc(:,2)*mesh%gauss%ww(:,l)))/ray
794 grad2_vel(index,5,i) = sum(vel_loc(:,3)*dw_loc(2,:))
795 grad2_vel(index,6,i) = sum(vel_loc(:,4)*dw_loc(2,:))
798 grad3_vel(index,1,i) = sum(vel_loc(:,5)*dw_loc(1,:))
799 grad3_vel(index,2,i) = sum(vel_loc(:,6)*dw_loc(1,:))
800 grad3_vel(index,3,i) = mode*sum(vel_loc(:,6)*mesh%gauss%ww(:,l))/ray
801 grad3_vel(index,4,i) = -mode*sum(vel_loc(:,5)*mesh%gauss%ww(:,l))/ray
802 grad3_vel(index,5,i) = sum(vel_loc(:,5)*dw_loc(2,:))
803 grad3_vel(index,6,i) = sum(vel_loc(:,6)*dw_loc(2,:))
809 gradt1_vel(:,1,:) = grad1_vel(:,1,:)
810 gradt1_vel(:,2,:) = grad1_vel(:,2,:)
811 gradt1_vel(:,3,:) = grad2_vel(:,1,:)
812 gradt1_vel(:,4,:) = grad2_vel(:,2,:)
813 gradt1_vel(:,5,:) = grad3_vel(:,1,:)
814 gradt1_vel(:,6,:) = grad3_vel(:,2,:)
816 gradt2_vel(:,1,:) = grad1_vel(:,3,:)
817 gradt2_vel(:,2,:) = grad1_vel(:,4,:)
818 gradt2_vel(:,3,:) = grad2_vel(:,3,:)
819 gradt2_vel(:,4,:) = grad2_vel(:,4,:)
820 gradt2_vel(:,5,:) = grad3_vel(:,3,:)
821 gradt2_vel(:,6,:) = grad3_vel(:,4,:)
823 gradt3_vel(:,1,:) = grad1_vel(:,5,:)
824 gradt3_vel(:,2,:) = grad1_vel(:,6,:)
825 gradt3_vel(:,3,:) = grad2_vel(:,5,:)
826 gradt3_vel(:,4,:) = grad2_vel(:,6,:)
827 gradt3_vel(:,5,:) = grad3_vel(:,5,:)
828 gradt3_vel(:,6,:) = grad3_vel(:,6,:)
831 v_out(1,:,:,:) = grad1_vel + gradt1_vel
832 v_out(2,:,:,:) = grad2_vel + gradt2_vel
833 v_out(3,:,:,:) = grad3_vel + gradt3_vel
845 INTEGER,
DIMENSION(:),
INTENT(IN) :: list_mode
846 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: vel
847 REAL(KIND=8),
DIMENSION(mesh%gauss%l_Gs*mesh%dom_mes,6,SIZE(list_mode)),
INTENT(OUT) :: V_out
848 REAL(KIND=8),
DIMENSION(mesh%gauss%l_Gs*mesh%dom_mes,6,SIZE(list_mode)) :: grad1_vel, grad2_vel, grad3_vel
849 REAL(KIND=8),
DIMENSION(mesh%gauss%l_Gs*mesh%dom_mes,6,SIZE(list_mode)) :: gradT1_vel, gradT2_vel, gradT3_vel
850 INTEGER,
DIMENSION(mesh%gauss%n_ws) :: js_loc
851 INTEGER,
DIMENSION(mesh%gauss%n_w) :: j_loc
852 REAL(KIND=8),
DIMENSION(mesh%gauss%k_d,mesh%gauss%n_w) :: dws_loc
853 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w,6) :: vel_loc
854 REAL(KIND=8),
DIMENSION(mesh%gauss%n_ws,6) :: vels_loc
856 INTEGER :: m, ms, ls , i, mode, indexs, k
858 DO i = 1,
SIZE(list_mode)
861 DO ms = 1, mesh%dom_mes
862 js_loc = mesh%jjs(:,ms)
866 vels_loc(:,k) = vel(js_loc,k,i)
867 vel_loc(:,k) = vel(j_loc,k,i)
869 DO ls = 1, mesh%gauss%l_Gs
871 dws_loc = mesh%gauss%dw_s(:,:,ls,ms)
874 ray = sum(mesh%rr(1,js_loc)*mesh%gauss%wws(:,ls))
877 IF (ray.LT.1.d-10)
THEN 878 v_out(indexs,:,i) = 0.d0
883 grad1_vel(indexs,1,i) = sum(vel_loc(:,1)*dws_loc(1,:))
884 grad1_vel(indexs,2,i) = sum(vel_loc(:,2)*dws_loc(1,:))
885 grad1_vel(indexs,3,i) = (mode*sum(vels_loc(:,2)*mesh%gauss%wws(:,ls)) - &
886 sum(vels_loc(:,3)*mesh%gauss%wws(:,ls)))/ray
887 grad1_vel(indexs,4,i) = (-mode*sum(vels_loc(:,1)*mesh%gauss%wws(:,ls)) - &
888 sum(vels_loc(:,4)*mesh%gauss%wws(:,ls)))/ray
889 grad1_vel(indexs,5,i) = sum(vel_loc(:,1)*dws_loc(2,:))
890 grad1_vel(indexs,6,i) = sum(vel_loc(:,2)*dws_loc(2,:))
893 grad2_vel(indexs,1,i) = sum(vel_loc(:,3)*dws_loc(1,:))
894 grad2_vel(indexs,2,i) = sum(vel_loc(:,4)*dws_loc(1,:))
895 grad2_vel(indexs,3,i) = (mode*sum(vels_loc(:,4)*mesh%gauss%wws(:,ls)) + &
896 sum(vels_loc(:,1)*mesh%gauss%wws(:,ls)))/ray
897 grad2_vel(indexs,4,i) = (-mode*sum(vels_loc(:,3)*mesh%gauss%wws(:,ls)) + &
898 sum(vels_loc(:,2)*mesh%gauss%wws(:,ls)))/ray
899 grad2_vel(indexs,5,i) = sum(vel_loc(:,3)*dws_loc(2,:))
900 grad2_vel(indexs,6,i) = sum(vel_loc(:,4)*dws_loc(2,:))
903 grad3_vel(indexs,1,i) = sum(vel_loc(:,5)*dws_loc(1,:))
904 grad3_vel(indexs,2,i) = sum(vel_loc(:,6)*dws_loc(1,:))
905 grad3_vel(indexs,3,i) = mode*sum(vels_loc(:,6)*mesh%gauss%wws(:,ls))/ray
906 grad3_vel(indexs,4,i) = -mode*sum(vels_loc(:,5)*mesh%gauss%wws(:,ls))/ray
907 grad3_vel(indexs,5,i) = sum(vel_loc(:,5)*dws_loc(2,:))
908 grad3_vel(indexs,6,i) = sum(vel_loc(:,6)*dws_loc(2,:))
911 gradt1_vel(indexs,1,i) = grad1_vel(indexs,1,i)
912 gradt1_vel(indexs,2,i) = grad1_vel(indexs,2,i)
913 gradt1_vel(indexs,3,i) = grad2_vel(indexs,1,i)
914 gradt1_vel(indexs,4,i) = grad2_vel(indexs,2,i)
915 gradt1_vel(indexs,5,i) = grad3_vel(indexs,1,i)
916 gradt1_vel(indexs,6,i) = grad3_vel(indexs,2,i)
918 gradt2_vel(indexs,1,i) = grad1_vel(indexs,3,i)
919 gradt2_vel(indexs,2,i) = grad1_vel(indexs,4,i)
920 gradt2_vel(indexs,3,i) = grad2_vel(indexs,3,i)
921 gradt2_vel(indexs,4,i) = grad2_vel(indexs,4,i)
922 gradt2_vel(indexs,5,i) = grad3_vel(indexs,3,i)
923 gradt2_vel(indexs,6,i) = grad3_vel(indexs,4,i)
925 gradt3_vel(indexs,1,i) = grad1_vel(indexs,5,i)
926 gradt3_vel(indexs,2,i) = grad1_vel(indexs,6,i)
927 gradt3_vel(indexs,3,i) = grad2_vel(indexs,5,i)
928 gradt3_vel(indexs,4,i) = grad2_vel(indexs,6,i)
929 gradt3_vel(indexs,5,i) = grad3_vel(indexs,5,i)
930 gradt3_vel(indexs,6,i) = grad3_vel(indexs,6,i)
933 v_out(indexs,1,i) = (grad1_vel(indexs,1,i)+gradt1_vel(indexs,1,i))*mesh%gauss%rnorms(1,ls,ms) &
934 + (grad1_vel(indexs,5,i)+gradt1_vel(indexs,5,i))*mesh%gauss%rnorms(2,ls,ms)
935 v_out(indexs,2,i) = (grad1_vel(indexs,2,i)+gradt1_vel(indexs,2,i))*mesh%gauss%rnorms(1,ls,ms) &
936 + (grad1_vel(indexs,6,i)+gradt1_vel(indexs,6,i))*mesh%gauss%rnorms(2,ls,ms)
937 v_out(indexs,3,i) = (grad2_vel(indexs,1,i)+gradt2_vel(indexs,1,i))*mesh%gauss%rnorms(1,ls,ms) &
938 + (grad2_vel(indexs,5,i)+gradt2_vel(indexs,5,i))*mesh%gauss%rnorms(2,ls,ms)
939 v_out(indexs,4,i) = (grad2_vel(indexs,2,i)+gradt2_vel(indexs,2,i))*mesh%gauss%rnorms(1,ls,ms) &
940 + (grad2_vel(indexs,6,i)+gradt2_vel(indexs,6,i))*mesh%gauss%rnorms(2,ls,ms)
941 v_out(indexs,5,i) = (grad3_vel(indexs,1,i)+gradt3_vel(indexs,1,i))*mesh%gauss%rnorms(1,ls,ms) &
942 + (grad3_vel(indexs,5,i)+gradt3_vel(indexs,5,i))*mesh%gauss%rnorms(2,ls,ms)
943 v_out(indexs,6,i) = (grad3_vel(indexs,2,i)+gradt3_vel(indexs,2,i))*mesh%gauss%rnorms(1,ls,ms) &
944 + (grad3_vel(indexs,6,i)+gradt3_vel(indexs,6,i))*mesh%gauss%rnorms(2,ls,ms)
957 #include "petsc/finclude/petsc.h" 961 INTEGER,
DIMENSION(:),
INTENT(IN) :: list_mode
962 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: visc_dyn
963 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: vel
964 REAL(KIND=8),
DIMENSION(mesh%gauss%l_Gs*mesh%dom_mes,6,SIZE(list_mode)),
INTENT(OUT) :: V_out
965 REAL(KIND=8),
DIMENSION(mesh%gauss%l_Gs*mesh%dom_mes,6,SIZE(list_mode)) :: grad1_vel, grad2_vel, grad3_vel
966 REAL(KIND=8),
DIMENSION(mesh%gauss%l_Gs*mesh%dom_mes,6,SIZE(list_mode)) :: gradT1_vel, gradT2_vel, gradT3_vel
967 REAL(KIND=8),
DIMENSION(mesh%gauss%l_Gs*mesh%dom_mes,6,SIZE(list_mode)) :: V_bdy
968 REAL(KIND=8),
DIMENSION(mesh%gauss%l_Gs*mesh%dom_mes,2,SIZE(list_mode)) :: visc_dyn_gauss
969 INTEGER,
DIMENSION(mesh%gauss%n_ws) :: js_loc
970 INTEGER,
DIMENSION(mesh%gauss%n_w) :: j_loc
971 REAL(KIND=8),
DIMENSION(mesh%gauss%k_d,mesh%gauss%n_w) :: dws_loc
972 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w,6) :: vel_loc
973 REAL(KIND=8),
DIMENSION(mesh%gauss%n_ws,6) :: vels_loc
974 REAL(KIND=8),
DIMENSION(mesh%gauss%n_ws,2) :: visc_dyns_loc
976 INTEGER :: m, ms, ls , i, mode, indexs, k
977 INTEGER :: code, bloc_size, m_max_pad, nb_procs
978 mpi_comm :: communicator
980 DO i = 1,
SIZE(list_mode)
983 DO ms = 1, mesh%dom_mes
984 js_loc = mesh%jjs(:,ms)
988 vels_loc(:,k) = vel(js_loc,k,i)
989 vel_loc(:,k) = vel(j_loc,k,i)
992 visc_dyns_loc(:,k) = visc_dyn(js_loc,k,i)
994 DO ls = 1, mesh%gauss%l_Gs
996 dws_loc = mesh%gauss%dw_s(:,:,ls,ms)
999 ray = sum(mesh%rr(1,js_loc)*mesh%gauss%wws(:,ls))
1002 IF (ray.LT.1.d-10)
THEN 1003 visc_dyn_gauss(indexs,:,i)=0.d0
1004 v_bdy(indexs,:,i) =0.d0
1009 visc_dyn_gauss(indexs,1,i) = sum(visc_dyns_loc(:,1)*mesh%gauss%wws(:,ls))
1010 visc_dyn_gauss(indexs,2,i) = sum(visc_dyns_loc(:,2)*mesh%gauss%wws(:,ls))
1013 grad1_vel(indexs,1,i) = sum(vel_loc(:,1)*dws_loc(1,:))
1014 grad1_vel(indexs,2,i) = sum(vel_loc(:,2)*dws_loc(1,:))
1015 grad1_vel(indexs,3,i) = (mode*sum(vels_loc(:,2)*mesh%gauss%wws(:,ls)) - &
1016 sum(vels_loc(:,3)*mesh%gauss%wws(:,ls)))/ray
1017 grad1_vel(indexs,4,i) = (-mode*sum(vels_loc(:,1)*mesh%gauss%wws(:,ls)) - &
1018 sum(vels_loc(:,4)*mesh%gauss%wws(:,ls)))/ray
1019 grad1_vel(indexs,5,i) = sum(vel_loc(:,1)*dws_loc(2,:))
1020 grad1_vel(indexs,6,i) = sum(vel_loc(:,2)*dws_loc(2,:))
1023 grad2_vel(indexs,1,i) = sum(vel_loc(:,3)*dws_loc(1,:))
1024 grad2_vel(indexs,2,i) = sum(vel_loc(:,4)*dws_loc(1,:))
1025 grad2_vel(indexs,3,i) = (mode*sum(vels_loc(:,4)*mesh%gauss%wws(:,ls)) + &
1026 sum(vels_loc(:,1)*mesh%gauss%wws(:,ls)))/ray
1027 grad2_vel(indexs,4,i) = (-mode*sum(vels_loc(:,3)*mesh%gauss%wws(:,ls)) + &
1028 sum(vels_loc(:,2)*mesh%gauss%wws(:,ls)))/ray
1029 grad2_vel(indexs,5,i) = sum(vel_loc(:,3)*dws_loc(2,:))
1030 grad2_vel(indexs,6,i) = sum(vel_loc(:,4)*dws_loc(2,:))
1033 grad3_vel(indexs,1,i) = sum(vel_loc(:,5)*dws_loc(1,:))
1034 grad3_vel(indexs,2,i) = sum(vel_loc(:,6)*dws_loc(1,:))
1035 grad3_vel(indexs,3,i) = mode*sum(vels_loc(:,6)*mesh%gauss%wws(:,ls))/ray
1036 grad3_vel(indexs,4,i) = -mode*sum(vels_loc(:,5)*mesh%gauss%wws(:,ls))/ray
1037 grad3_vel(indexs,5,i) = sum(vel_loc(:,5)*dws_loc(2,:))
1038 grad3_vel(indexs,6,i) = sum(vel_loc(:,6)*dws_loc(2,:))
1041 gradt1_vel(indexs,1,i) = grad1_vel(indexs,1,i)
1042 gradt1_vel(indexs,2,i) = grad1_vel(indexs,2,i)
1043 gradt1_vel(indexs,3,i) = grad2_vel(indexs,1,i)
1044 gradt1_vel(indexs,4,i) = grad2_vel(indexs,2,i)
1045 gradt1_vel(indexs,5,i) = grad3_vel(indexs,1,i)
1046 gradt1_vel(indexs,6,i) = grad3_vel(indexs,2,i)
1048 gradt2_vel(indexs,1,i) = grad1_vel(indexs,3,i)
1049 gradt2_vel(indexs,2,i) = grad1_vel(indexs,4,i)
1050 gradt2_vel(indexs,3,i) = grad2_vel(indexs,3,i)
1051 gradt2_vel(indexs,4,i) = grad2_vel(indexs,4,i)
1052 gradt2_vel(indexs,5,i) = grad3_vel(indexs,3,i)
1053 gradt2_vel(indexs,6,i) = grad3_vel(indexs,4,i)
1055 gradt3_vel(indexs,1,i) = grad1_vel(indexs,5,i)
1056 gradt3_vel(indexs,2,i) = grad1_vel(indexs,6,i)
1057 gradt3_vel(indexs,3,i) = grad2_vel(indexs,5,i)
1058 gradt3_vel(indexs,4,i) = grad2_vel(indexs,6,i)
1059 gradt3_vel(indexs,5,i) = grad3_vel(indexs,5,i)
1060 gradt3_vel(indexs,6,i) = grad3_vel(indexs,6,i)
1063 v_bdy(indexs,1,i) = (grad1_vel(indexs,1,i)+gradt1_vel(indexs,1,i))*mesh%gauss%rnorms(1,ls,ms) &
1064 + (grad1_vel(indexs,5,i)+gradt1_vel(indexs,5,i))*mesh%gauss%rnorms(2,ls,ms)
1065 v_bdy(indexs,2,i) = (grad1_vel(indexs,2,i)+gradt1_vel(indexs,2,i))*mesh%gauss%rnorms(1,ls,ms) &
1066 + (grad1_vel(indexs,6,i)+gradt1_vel(indexs,6,i))*mesh%gauss%rnorms(2,ls,ms)
1067 v_bdy(indexs,3,i) = (grad2_vel(indexs,1,i)+gradt2_vel(indexs,1,i))*mesh%gauss%rnorms(1,ls,ms) &
1068 + (grad2_vel(indexs,5,i)+gradt2_vel(indexs,5,i))*mesh%gauss%rnorms(2,ls,ms)
1069 v_bdy(indexs,4,i) = (grad2_vel(indexs,2,i)+gradt2_vel(indexs,2,i))*mesh%gauss%rnorms(1,ls,ms) &
1070 + (grad2_vel(indexs,6,i)+gradt2_vel(indexs,6,i))*mesh%gauss%rnorms(2,ls,ms)
1071 v_bdy(indexs,5,i) = (grad3_vel(indexs,1,i)+gradt3_vel(indexs,1,i))*mesh%gauss%rnorms(1,ls,ms) &
1072 + (grad3_vel(indexs,5,i)+gradt3_vel(indexs,5,i))*mesh%gauss%rnorms(2,ls,ms)
1073 v_bdy(indexs,6,i) = (grad3_vel(indexs,2,i)+gradt3_vel(indexs,2,i))*mesh%gauss%rnorms(1,ls,ms) &
1074 + (grad3_vel(indexs,6,i)+gradt3_vel(indexs,6,i))*mesh%gauss%rnorms(2,ls,ms)
1080 CALL mpi_comm_size(communicator, nb_procs, code)
1081 m_max_pad = 3*
SIZE(list_mode)*nb_procs/2
1082 bloc_size =
SIZE(v_bdy,1)/nb_procs+1
1083 CALL fft_scalar_vect_dcl(communicator, v_bdy, visc_dyn_gauss, v_out, 1, nb_procs, bloc_size, m_max_pad)
1096 INTEGER,
DIMENSION(:),
INTENT(IN) :: list_mode
1097 REAL(KIND=8),
DIMENSION(:,:,:,:),
INTENT(IN) :: tensor
1098 REAL(KIND=8),
DIMENSION(mesh%gauss%l_Gs*mesh%dom_mes,6,SIZE(list_mode)),
INTENT(OUT) :: V_out
1099 INTEGER,
DIMENSION(mesh%gauss%n_ws) :: js_loc
1100 REAL(KIND=8),
DIMENSION(3,mesh%gauss%n_ws,6) :: tensors_loc
1102 INTEGER :: m, ms, ls , i, mode, indexs, k, n
1104 DO i = 1,
SIZE(list_mode)
1107 DO ms = 1, mesh%dom_mes
1108 js_loc = mesh%jjs(:,ms)
1112 tensors_loc(n,:,k) = tensor(n,js_loc,k,i)
1115 DO ls = 1, mesh%gauss%l_Gs
1119 ray = sum(mesh%rr(1,js_loc)*mesh%gauss%wws(:,ls))
1122 IF (ray.LT.1.d-10)
THEN 1123 v_out(indexs,:,i) = 0.d0
1127 v_out(indexs,1,i) = sum(tensors_loc(1,:,1)*mesh%gauss%wws(:,ls))*mesh%gauss%rnorms(1,ls,ms) &
1128 + sum(tensors_loc(1,:,5)*mesh%gauss%wws(:,ls))*mesh%gauss%rnorms(2,ls,ms)
1129 v_out(indexs,2,i) = sum(tensors_loc(1,:,2)*mesh%gauss%wws(:,ls))*mesh%gauss%rnorms(1,ls,ms) &
1130 + sum(tensors_loc(1,:,6)*mesh%gauss%wws(:,ls))*mesh%gauss%rnorms(2,ls,ms)
1131 v_out(indexs,3,i) = sum(tensors_loc(2,:,1)*mesh%gauss%wws(:,ls))*mesh%gauss%rnorms(1,ls,ms) &
1132 + sum(tensors_loc(2,:,5)*mesh%gauss%wws(:,ls))*mesh%gauss%rnorms(2,ls,ms)
1133 v_out(indexs,4,i) = sum(tensors_loc(2,:,2)*mesh%gauss%wws(:,ls))*mesh%gauss%rnorms(1,ls,ms) &
1134 + sum(tensors_loc(2,:,6)*mesh%gauss%wws(:,ls))*mesh%gauss%rnorms(2,ls,ms)
1135 v_out(indexs,5,i) = sum(tensors_loc(3,:,1)*mesh%gauss%wws(:,ls))*mesh%gauss%rnorms(1,ls,ms) &
1136 + sum(tensors_loc(3,:,5)*mesh%gauss%wws(:,ls))*mesh%gauss%rnorms(2,ls,ms)
1137 v_out(indexs,6,i) = sum(tensors_loc(3,:,2)*mesh%gauss%wws(:,ls))*mesh%gauss%rnorms(1,ls,ms) &
1138 + sum(tensors_loc(3,:,6)*mesh%gauss%wws(:,ls))*mesh%gauss%rnorms(2,ls,ms)
1153 INTEGER,
DIMENSION(:),
INTENT(IN) :: list_mode
1154 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: density_m2, density
1155 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: momentum_m1
1156 REAL(KIND=8),
DIMENSION(mesh%gauss%l_G*mesh%dom_me,2,SIZE(list_mode)),
INTENT(OUT) :: c_out
1157 REAL(KIND=8),
DIMENSION(mesh%gauss%l_G*mesh%me,2,SIZE(list_mode)) :: Div
1158 REAL(KIND=8),
DIMENSION(mesh%gauss%l_G*mesh%me,2,SIZE(list_mode)) :: dens_m2_gauss, dens_gauss
1159 INTEGER,
DIMENSION(mesh%gauss%n_w) :: j_loc
1160 REAL(KIND=8),
DIMENSION(mesh%gauss%k_d,mesh%gauss%n_w) :: dw_loc
1161 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w,6) :: mom_loc
1162 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w,2) :: dens_m2_loc, dens_loc
1164 INTEGER :: m, l , i, mode, index, k
1166 DO i = 1,
SIZE(list_mode)
1169 DO m = 1, mesh%dom_me
1170 j_loc = mesh%jj(:,m)
1172 mom_loc(:,k) = momentum_m1(j_loc,k,i)
1175 dens_m2_loc(:,k) = density_m2(j_loc,k,i)
1176 dens_loc(:,k) = density(j_loc,k,i)
1178 DO l = 1, mesh%gauss%l_G
1180 dw_loc = mesh%gauss%dw(:,:,l,m)
1183 ray = sum(mesh%rr(1,j_loc)*mesh%gauss%ww(:,l))
1186 dens_m2_gauss(index,1,i) = sum(dens_m2_loc(:,1)*mesh%gauss%ww(:,l))
1187 dens_m2_gauss(index,2,i) = sum(dens_m2_loc(:,2)*mesh%gauss%ww(:,l))
1189 dens_gauss(index,1,i) = sum(dens_loc(:,1)*mesh%gauss%ww(:,l))
1190 dens_gauss(index,2,i) = sum(dens_loc(:,2)*mesh%gauss%ww(:,l))
1193 div(index,1,i) = sum(mom_loc(:,1)*dw_loc(1,:)) + sum(mom_loc(:,1)*mesh%gauss%ww(:,l))/ray &
1194 + (mode/ray)*sum(mom_loc(:,4)*mesh%gauss%ww(:,l)) + sum(mom_loc(:,5)*dw_loc(2,:))
1195 div(index,2,i) = sum(mom_loc(:,2)*dw_loc(1,:)) + sum(mom_loc(:,2)*mesh%gauss%ww(:,l))/ray &
1196 - (mode/ray)*sum(mom_loc(:,3)*mesh%gauss%ww(:,l)) + sum(mom_loc(:,6)*dw_loc(2,:))
1201 c_out = (dens_gauss-dens_m2_gauss)/(2*
inputs%dt) + div
1208 #include "petsc/finclude/petsc.h" 1212 REAL(KIND=8),
INTENT(OUT) :: RESLT
1213 REAL(KIND=8) :: vol_loc, vol_out
1214 INTEGER,
DIMENSION(mesh%gauss%n_w) :: j_loc
1215 INTEGER :: m, l , i , ni, code
1217 mpi_comm :: communicator
1219 DO m = 1, mesh%dom_me
1220 j_loc = mesh%jj(:,m)
1221 DO l = 1, mesh%gauss%l_G
1223 DO ni = 1, mesh%gauss%n_w; i = j_loc(ni)
1224 ray = ray + mesh%rr(1,i)*mesh%gauss%ww(ni,l)
1226 vol_loc = vol_loc + ray*mesh%gauss%rj(l,m)
1229 CALL mpi_allreduce(vol_loc,vol_out,1,mpi_double_precision, mpi_sum, communicator, code)
subroutine smb_explicit_tensor_bdy(mesh, list_mode, tensor, V_out)
subroutine smb_explicit_grad_vel_les(mesh, list_mode, vel, V_out)
subroutine solver(my_ksp, b, x, reinit, verbose)
subroutine, public fft_compute_entropy_visc(communicator, communicator_S, V1_in, V2_in, V3_in, V4_in, V5_in, hloc_gauss, V1_out, V2_out, V3_out, nb_procs, bloc_size, m_max_pad, residual_normalization, l_G, temps)
subroutine smb_explicit_strain_rate_tensor_bdy_mom(communicator, mesh, list_mode, visc_dyn, vel, V_out)
subroutine, public extract(xghost, ks, ke, LA, phi)
subroutine compute_res_mass_gauss(mesh, list_mode, density_m2, density, momentum_m1, c_out)
subroutine smb_explicit_strain_rate_tensor_bdy(mesh, list_mode, vel, V_out)
subroutine, public create_my_ghost(mesh, LA, ifrom)
subroutine twod_volume(communicator, mesh, RESLT)
subroutine, public project_p2_p1(jj_P2, jj_P1, pp_P2, pp_P1)
subroutine smb_explicit_strain_rate_tensor(mesh, list_mode, vel, V_out)
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 qs_mass_vect_3x3(LA, mesh, mass, matrix)
subroutine init_solver(my_par, my_ksp, matrix, communicator, solver, precond, opt_re_init)
subroutine dirichlet_nodes_parallel(mesh, list_dirichlet_sides, js_d)
subroutine, public fft_compute_entropy_visc_mom(communicator, communicator_S, V1_in, V2_in, V3_in, c1_in, hloc_gauss, c1_real_out, nb_procs, bloc_size, m_max_pad, l_G, opt_c2_real_out, temps)
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, public periodic_matrix_petsc(n_bord, list, perlist, matrix, LA)
subroutine, public rhs_residual_ns_gauss_3x3_mom(vv_mesh, pp_mesh, list_mode, time, du_dt, pn, density, rotb_b, rhs_gauss, opt_tempn)
real(kind=8) function norm_sf(communicator, norm_type, mesh, list_mode, v)
subroutine, public rhs_residual_ns_gauss_3x3(vv_mesh, pp_mesh, communicator, list_mode, time, du_dt, pn, rotv_v, rhs_gauss, opt_tempn)
subroutine, public fft_scalar_vect_dcl(communicator, V1_in, V2_in, V_out, pb, nb_procs, bloc_size, m_max_pad, temps)
subroutine rhs_3x3(mesh, vv_3_LA, mode, rhs_in, vb_145, vb_236, opt_tensor, opt_tensor_scaln_bdy)
subroutine, public compute_entropy_viscosity(comm_one_d, vv_3_LA, vv_mesh, pp_mesh, time, list_mode, vvz_per, un, un_m1, un_m2, pn_m1, rotv_v_m1, visco_entro_grad_u, opt_tempn)
real(kind=8), dimension(:,:), pointer ww
subroutine, public periodic_rhs_petsc(n_bord, list, perlist, v_rhs, LA)