7 SUBROUTINE rhs_ns_gauss_3x3(vv_mesh, pp_mesh, communicator, list_mode, time, V1m, pn, pn_inc, rotv_v, &
19 REAL(KIND=8),
INTENT(IN) :: time
20 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: rotv_v
21 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: V1m
22 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: pn, pn_inc
23 INTEGER,
DIMENSION(:),
INTENT(IN) :: list_mode
24 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN),
OPTIONAL :: opt_tempn
25 REAL(KIND=8),
DIMENSION(vv_mesh%gauss%l_G*vv_mesh%dom_me,6,SIZE(list_mode)),
INTENT(OUT) :: rhs_gauss
26 REAL(KIND=8),
DIMENSION(6) :: fs, ft, fp_inc
27 INTEGER,
DIMENSION(vv_mesh%gauss%n_w) :: j_loc
28 REAL(KIND=8),
DIMENSION(vv_mesh%np,6) :: ff, imposed_vel
29 REAL(KIND=8),
DIMENSION(vv_mesh%np,2) :: P, P_inc
30 REAL(KIND=8),
DIMENSION(vv_mesh%gauss%k_d,vv_mesh%gauss%n_w) :: dw_loc
31 REAL(KIND=8),
DIMENSION(vv_mesh%dom_me*vv_mesh%gauss%l_G,6) :: imposed_vel_gauss
32 REAL(KIND=8),
DIMENSION(vv_mesh%dom_me*vv_mesh%gauss%l_G,6,SIZE(list_mode)) :: fp, rhs_gauss_penal
33 REAL(KIND=8),
DIMENSION(2,vv_mesh%gauss%l_G*vv_mesh%dom_me) :: rr_gauss
35 INTEGER :: m, l , i, k, index, TYPE
36 INTEGER :: nb_procs, m_max_pad, bloc_size
37 #include "petsc/finclude/petsc.h" 38 petscerrorcode :: ierr
39 mpi_comm :: communicator
41 DO i = 1,
SIZE(list_mode)
45 IF (
inputs%if_temperature)
THEN 47 ff(:,k) = source_in_ns_momentum(k, vv_mesh%rr, list_mode(i), i, time,
inputs%Re,
'ns', &
50 ff(:,k) = source_in_ns_momentum(k, vv_mesh%rr, list_mode(i), i, time,
inputs%Re,
'ns')
62 DO m = 1, vv_mesh%dom_me
63 j_loc = vv_mesh%jj(:,m)
65 DO l = 1, vv_mesh%gauss%l_G
67 dw_loc = vv_mesh%gauss%dw(:,:,l,m)
70 ray = sum(vv_mesh%rr(1,j_loc)*vv_mesh%gauss%ww(:,l))
71 rr_gauss(1,index) = ray
72 rr_gauss(2,index) = sum(vv_mesh%rr(2,j_loc)*vv_mesh%gauss%ww(:,l))
75 fs(1) = sum(ff(j_loc,1) * vv_mesh%gauss%ww(:,l))
76 ft(1) = sum(v1m(j_loc,1,i) * vv_mesh%gauss%ww(:,l))
77 fp(index,1,i) = -sum(p(j_loc,1)*dw_loc(1,:))
78 fp_inc(1) = -sum(p_inc(j_loc,1)*dw_loc(1,:))
80 fs(2) = sum(ff(j_loc,2) * vv_mesh%gauss%ww(:,l))
81 ft(2) = sum(v1m(j_loc,2,i) * vv_mesh%gauss%ww(:,l))
82 fp(index,2,i) = -sum(p(j_loc,2)*dw_loc(1,:))
83 fp_inc(2) = -sum(p_inc(j_loc,2)*dw_loc(1,:))
85 fs(3) = sum(ff(j_loc,3) * vv_mesh%gauss%ww(:,l))
86 ft(3) = sum(v1m(j_loc,3,i) * vv_mesh%gauss%ww(:,l))
87 fp(index,3,i) = -sum(p(j_loc,2)*vv_mesh%gauss%ww(:,l))/ray*list_mode(i)
88 fp_inc(3) = -sum(p_inc(j_loc,2)*vv_mesh%gauss%ww(:,l))/ray*list_mode(i)
90 fs(4) = sum(ff(j_loc,4) * vv_mesh%gauss%ww(:,l))
91 ft(4) = sum(v1m(j_loc,4,i) * vv_mesh%gauss%ww(:,l))
92 fp(index,4,i) = sum(p(j_loc,1)*vv_mesh%gauss%ww(:,l))/ray*list_mode(i)
93 fp_inc(4) = sum(p_inc(j_loc,1)*vv_mesh%gauss%ww(:,l))/ray*list_mode(i)
95 fs(5) = sum(ff(j_loc,5) * vv_mesh%gauss%ww(:,l))
96 ft(5) = sum(v1m(j_loc,5,i) * vv_mesh%gauss%ww(:,l))
97 fp(index,5,i) = -sum(p(j_loc,1)*dw_loc(2,:))
98 fp_inc(5) = -sum(p_inc(j_loc,1)*dw_loc(2,:))
100 fs(6) = sum(ff(j_loc,6) * vv_mesh%gauss%ww(:,l))
101 ft(6) = sum(v1m(j_loc,6,i) * vv_mesh%gauss%ww(:,l))
102 fp(index,6,i) = -sum(p(j_loc,2)*dw_loc(2,:))
103 fp_inc(6) = -sum(p_inc(j_loc,2)*dw_loc(2,:))
105 rhs_gauss(index,:,i) = (ft+fp_inc+fs-rotv_v(index,:,i))
109 IF (
inputs%if_ns_penalty)
THEN 110 IF(
inputs%if_impose_vel_in_solids)
THEN 111 IF (list_mode(i)==0)
THEN 113 imposed_vel(:,:) = 3.d0*imposed_velocity_by_penalty(vv_mesh%rr,time)/(2*
inputs%dt)
115 DO m = 1, vv_mesh%dom_me
116 j_loc = vv_mesh%jj(:,m)
117 DO l = 1, vv_mesh%gauss%l_G
120 imposed_vel_gauss(index,type) = sum(imposed_vel(j_loc,type) &
121 * vv_mesh%gauss%ww(:,l))
125 rhs_gauss(:,:,i) = rhs_gauss(:,:,i) - imposed_vel_gauss(:,:)
131 IF (
inputs%if_ns_penalty)
THEN 132 CALL mpi_comm_size(communicator, nb_procs, ierr)
133 m_max_pad = 3*
SIZE(list_mode)*nb_procs/2
134 bloc_size =
SIZE(rhs_gauss,1)/nb_procs+1
136 rhs_gauss, rhs_gauss_penal, nb_procs, bloc_size, m_max_pad, rr_gauss, time)
138 rhs_gauss = rhs_gauss_penal
140 IF(
inputs%if_impose_vel_in_solids)
THEN 141 DO i = 1,
SIZE(list_mode)
142 IF (list_mode(i)==0)
THEN 143 rhs_gauss(:,:,i) = rhs_gauss_penal(:,:,i) + imposed_vel_gauss(:,:)
149 rhs_gauss = rhs_gauss + fp
154 pn, rotv_v, rhs_gauss, opt_tempn)
165 INTEGER,
DIMENSION(:),
INTENT(IN) :: list_mode
166 REAL(KIND=8),
INTENT(IN) :: time
167 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: du_dt
168 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: pn
169 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: rotv_v
170 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN),
OPTIONAL :: opt_tempn
171 REAL(KIND=8),
DIMENSION(vv_mesh%gauss%l_G*vv_mesh%dom_me,6,SIZE(list_mode)),
INTENT(OUT) :: rhs_gauss
172 REAL(KIND=8),
DIMENSION(6) :: fs
173 INTEGER,
DIMENSION(vv_mesh%gauss%n_w) :: j_loc
174 REAL(KIND=8),
DIMENSION(vv_mesh%np,6) :: ff
175 REAL(KIND=8),
DIMENSION(vv_mesh%np,2) :: P
176 REAL(KIND=8),
DIMENSION(vv_mesh%gauss%k_d,vv_mesh%gauss%n_w) :: dw_loc
177 REAL(KIND=8),
DIMENSION(vv_mesh%dom_me*vv_mesh%gauss%l_G,6,SIZE(list_mode)) :: rhs_gauss_penal, fp, ft
178 REAL(KIND=8),
DIMENSION(2,vv_mesh%gauss%l_G*vv_mesh%dom_me) :: rr_gauss
180 INTEGER :: m, l , i, k, index
181 INTEGER :: nb_procs, m_max_pad, bloc_size
182 #include "petsc/finclude/petsc.h" 183 petscerrorcode :: ierr
184 mpi_comm :: communicator
186 DO i = 1,
SIZE(list_mode)
188 IF (
PRESENT(opt_tempn))
THEN 189 ff(:,k) = source_in_ns_momentum(k, vv_mesh%rr, list_mode(i), i, time,
inputs%Re,
'ns', &
192 ff(:,k) = source_in_ns_momentum(k, vv_mesh%rr, list_mode(i), i, time,
inputs%Re,
'ns')
202 DO m = 1, vv_mesh%dom_me
203 j_loc = vv_mesh%jj(:,m)
205 DO l = 1, vv_mesh%gauss%l_G
207 dw_loc = vv_mesh%gauss%dw(:,:,l,m)
210 ray = sum(vv_mesh%rr(1,j_loc)*vv_mesh%gauss%ww(:,l))
211 rr_gauss(1,index) = ray
212 rr_gauss(2,index) = sum(vv_mesh%rr(2,j_loc)*vv_mesh%gauss%ww(:,l))
215 fs(1) = sum(ff(j_loc,1) * vv_mesh%gauss%ww(:,l))
216 ft(index,1,i) = sum(du_dt(j_loc,1,i) * vv_mesh%gauss%ww(:,l))
217 fp(index,1,i) = sum(p(j_loc,1)*dw_loc(1,:))
219 fs(2) = sum(ff(j_loc,2) * vv_mesh%gauss%ww(:,l))
220 ft(index,2,i) = sum(du_dt(j_loc,2,i) * vv_mesh%gauss%ww(:,l))
221 fp(index,2,i) = sum(p(j_loc,2)*dw_loc(1,:))
223 fs(3) = sum(ff(j_loc,3) * vv_mesh%gauss%ww(:,l))
224 ft(index,3,i) = sum(du_dt(j_loc,3,i) * vv_mesh%gauss%ww(:,l))
225 fp(index,3,i) = sum(p(j_loc,2)*vv_mesh%gauss%ww(:,l))/ray*list_mode(i)
227 fs(4) = sum(ff(j_loc,4) * vv_mesh%gauss%ww(:,l))
228 ft(index,4,i) = sum(du_dt(j_loc,4,i) * vv_mesh%gauss%ww(:,l))
229 fp(index,4,i) = -sum(p(j_loc,1)*vv_mesh%gauss%ww(:,l))/ray*list_mode(i)
231 fs(5) = sum(ff(j_loc,5) * vv_mesh%gauss%ww(:,l))
232 ft(index,5,i) = sum(du_dt(j_loc,5,i) * vv_mesh%gauss%ww(:,l))
233 fp(index,5,i) = sum(p(j_loc,1)*dw_loc(2,:))
235 fs(6) = sum(ff(j_loc,6) * vv_mesh%gauss%ww(:,l))
236 ft(index,6,i) = sum(du_dt(j_loc,6,i) * vv_mesh%gauss%ww(:,l))
237 fp(index,6,i) = sum(p(j_loc,2)*dw_loc(2,:))
239 rhs_gauss(index,:,i) = -fs+rotv_v(index,:,i)
244 IF (
inputs%if_ns_penalty)
THEN 245 CALL mpi_comm_size(communicator, nb_procs, ierr)
246 m_max_pad = 3*
SIZE(list_mode)*nb_procs/2
247 bloc_size =
SIZE(rhs_gauss,1)/nb_procs+1
249 rhs_gauss, rhs_gauss_penal, nb_procs, bloc_size, m_max_pad, rr_gauss, time)
250 rhs_gauss = rhs_gauss_penal
254 rhs_gauss = rhs_gauss + ft + fp
259 density, rotb_b, rhs_gauss, opt_tempn)
270 INTEGER,
DIMENSION(:),
INTENT(IN) :: list_mode
271 REAL(KIND=8),
INTENT(IN) :: time
272 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: du_dt
273 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: pn
274 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: density
275 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: rotb_b
276 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN),
OPTIONAL :: opt_tempn
277 REAL(KIND=8),
DIMENSION(vv_mesh%gauss%l_G*vv_mesh%dom_me,6,SIZE(list_mode)),
INTENT(OUT) :: rhs_gauss
278 REAL(KIND=8),
DIMENSION(6) :: fs, ft, fp
279 INTEGER,
DIMENSION(vv_mesh%gauss%n_w) :: j_loc
280 REAL(KIND=8),
DIMENSION(vv_mesh%np,6) :: ff
281 REAL(KIND=8),
DIMENSION(vv_mesh%np,2) :: P
282 REAL(KIND=8),
DIMENSION(vv_mesh%gauss%k_d,vv_mesh%gauss%n_w) :: dw_loc
283 REAL(KIND=8),
DIMENSION(2,vv_mesh%gauss%l_G*vv_mesh%dom_me) :: rr_gauss
285 INTEGER :: m, l , i, k, index
287 DO i = 1,
SIZE(list_mode)
289 IF (
inputs%if_temperature)
THEN 290 ff(:,k) = source_in_ns_momentum(k, vv_mesh%rr, list_mode(i), i, time,
inputs%Re,
'ns', &
291 opt_density=density, opt_tempn=opt_tempn)
293 ff(:,k) = source_in_ns_momentum(k, vv_mesh%rr, list_mode(i), i, time,
inputs%Re,
'ns', &
304 DO m = 1, vv_mesh%dom_me
305 j_loc = vv_mesh%jj(:,m)
307 DO l = 1, vv_mesh%gauss%l_G
309 dw_loc = vv_mesh%gauss%dw(:,:,l,m)
312 ray = sum(vv_mesh%rr(1,j_loc)*vv_mesh%gauss%ww(:,l))
313 rr_gauss(1,index) = ray
314 rr_gauss(2,index) = sum(vv_mesh%rr(2,j_loc)*vv_mesh%gauss%ww(:,l))
317 fs(1) = sum(ff(j_loc,1) * vv_mesh%gauss%ww(:,l))
318 ft(1) = sum(du_dt(j_loc,1,i) * vv_mesh%gauss%ww(:,l))
319 fp(1) = sum(p(j_loc,1)*dw_loc(1,:))
321 fs(2) = sum(ff(j_loc,2) * vv_mesh%gauss%ww(:,l))
322 ft(2) = sum(du_dt(j_loc,2,i) * vv_mesh%gauss%ww(:,l))
323 fp(2) = sum(p(j_loc,2)*dw_loc(1,:))
325 fs(3) = sum(ff(j_loc,3) * vv_mesh%gauss%ww(:,l))
326 ft(3) = sum(du_dt(j_loc,3,i) * vv_mesh%gauss%ww(:,l))
327 fp(3) = sum(p(j_loc,2)*vv_mesh%gauss%ww(:,l))/ray*list_mode(i)
329 fs(4) = sum(ff(j_loc,4) * vv_mesh%gauss%ww(:,l))
330 ft(4) = sum(du_dt(j_loc,4,i) * vv_mesh%gauss%ww(:,l))
331 fp(4) = -sum(p(j_loc,1)*vv_mesh%gauss%ww(:,l))/ray*list_mode(i)
333 fs(5) = sum(ff(j_loc,5) * vv_mesh%gauss%ww(:,l))
334 ft(5) = sum(du_dt(j_loc,5,i) * vv_mesh%gauss%ww(:,l))
335 fp(5) = sum(p(j_loc,1)*dw_loc(2,:))
337 fs(6) = sum(ff(j_loc,6) * vv_mesh%gauss%ww(:,l))
338 ft(6) = sum(du_dt(j_loc,6,i) * vv_mesh%gauss%ww(:,l))
339 fp(6) = sum(p(j_loc,2)*dw_loc(2,:))
341 rhs_gauss(index,:,i) = ft+fp-fs-rotb_b(index,:,i)
349 rhs_gauss, tempn, density)
360 REAL(KIND=8),
INTENT(IN) :: time
361 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: rotv_v
362 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: V1m
363 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: pn
364 INTEGER,
DIMENSION(:),
INTENT(IN) :: list_mode
365 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: tempn
366 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: density
367 REAL(KIND=8),
DIMENSION(vv_mesh%gauss%l_G*vv_mesh%dom_me,6,SIZE(list_mode)),
INTENT(OUT) :: rhs_gauss
368 REAL(KIND=8),
DIMENSION(6) :: fs, ft
369 INTEGER,
DIMENSION(vv_mesh%gauss%n_w) :: j_loc
370 REAL(KIND=8),
DIMENSION(vv_mesh%np,6) :: ff
371 REAL(KIND=8),
DIMENSION(vv_mesh%np,2) :: P
372 REAL(KIND=8),
DIMENSION(vv_mesh%gauss%k_d,vv_mesh%gauss%n_w) :: dw_loc
373 REAL(KIND=8),
DIMENSION(vv_mesh%dom_me*vv_mesh%gauss%l_G,6,SIZE(list_mode)) :: fp
374 REAL(KIND=8),
DIMENSION(2,vv_mesh%gauss%l_G*vv_mesh%dom_me) :: rr_gauss
376 INTEGER :: m, l , i, k, index
377 #include "petsc/finclude/petsc.h" 378 petscerrorcode :: ierr
380 mpi_comm :: communicator
381 CALL mpi_comm_rank(communicator,rank,ierr)
382 DO i = 1,
SIZE(list_mode)
384 IF (
inputs%if_temperature)
THEN 385 ff(:,k) = source_in_ns_momentum(k, vv_mesh%rr, list_mode(i), i, time,
inputs%Re,
'ns', &
386 opt_density=density, opt_tempn=tempn)
388 ff(:,k) = source_in_ns_momentum(k, vv_mesh%rr, list_mode(i), i, time,
inputs%Re,
'ns', &
398 DO m = 1, vv_mesh%dom_me
399 j_loc = vv_mesh%jj(:,m)
401 DO l = 1, vv_mesh%gauss%l_G
403 dw_loc = vv_mesh%gauss%dw(:,:,l,m)
406 ray = sum(vv_mesh%rr(1,j_loc)*vv_mesh%gauss%ww(:,l))
407 rr_gauss(1,index) = ray
408 rr_gauss(2,index) = sum(vv_mesh%rr(2,j_loc)*vv_mesh%gauss%ww(:,l))
411 fs(1) = sum(ff(j_loc,1) * vv_mesh%gauss%ww(:,l))
412 ft(1) = sum(v1m(j_loc,1,i) * vv_mesh%gauss%ww(:,l))
413 fp(index,1,i) = -sum(p(j_loc,1)*dw_loc(1,:))
415 fs(2) = sum(ff(j_loc,2) * vv_mesh%gauss%ww(:,l))
416 ft(2) = sum(v1m(j_loc,2,i) * vv_mesh%gauss%ww(:,l))
417 fp(index,2,i) = -sum(p(j_loc,2)*dw_loc(1,:))
419 fs(3) = sum(ff(j_loc,3) * vv_mesh%gauss%ww(:,l))
420 ft(3) = sum(v1m(j_loc,3,i) * vv_mesh%gauss%ww(:,l))
421 fp(index,3,i) = -sum(p(j_loc,2)*vv_mesh%gauss%ww(:,l))/ray*list_mode(i)
423 fs(4) = sum(ff(j_loc,4) * vv_mesh%gauss%ww(:,l))
424 ft(4) = sum(v1m(j_loc,4,i) * vv_mesh%gauss%ww(:,l))
425 fp(index,4,i) = sum(p(j_loc,1)*vv_mesh%gauss%ww(:,l))/ray*list_mode(i)
427 fs(5) = sum(ff(j_loc,5) * vv_mesh%gauss%ww(:,l))
428 ft(5) = sum(v1m(j_loc,5,i) * vv_mesh%gauss%ww(:,l))
429 fp(index,5,i) = -sum(p(j_loc,1)*dw_loc(2,:))
431 fs(6) = sum(ff(j_loc,6) * vv_mesh%gauss%ww(:,l))
432 ft(6) = sum(v1m(j_loc,6,i) * vv_mesh%gauss%ww(:,l))
433 fp(index,6,i) = -sum(p(j_loc,2)*dw_loc(2,:))
435 rhs_gauss(index,:,i) = (ft+fs-rotv_v(index,:,i))
441 rhs_gauss = rhs_gauss + fp
subroutine, public rhs_ns_gauss_3x3_art_comp_mom(vv_mesh, pp_mesh, communicator, list_mode, time, V1m, pn, rotv_v, rhs_gauss, tempn, density)
subroutine, public fft_par_var_eta_prod_gauss_dcl(communicator, eta, H_mesh, c_in, c_out, nb_procs, bloc_size, m_max_pad, rr_gauss, time, temps)
subroutine, public rhs_ns_gauss_3x3(vv_mesh, pp_mesh, communicator, list_mode, time, V1m, pn, pn_inc, rotv_v, rhs_gauss, opt_tempn)
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)
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 inject_generic(type_fe_velocity, jj_c, jj_f, pp_c, pp_f)