2 #include "petsc/finclude/petsc.h" 8 SUBROUTINE qs_ns_stab_new(mesh,vv_1_LA,vv_2_LA,mode,ff,vel_tot,V1m,vit,P,dudt,phalf,nlhalf,dt,&
9 vb_2_14,vb_2_23,vb_1_5,vb_1_6,rotv_v, vel_tot_max)
19 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: ff, rotv_v, dudt, nlhalf
20 REAL(KIND=8),
DIMENSION(:),
INTENT(IN) :: vel_tot
22 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: V1m, vit
23 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: P, phalf
24 REAL(KIND=8),
INTENT(IN) :: dt
25 INTEGER,
INTENT(IN) :: mode
27 REAL(KIND=8) :: vel_tot_max
29 REAL(KIND=8),
DIMENSION(6) :: fs , ft , fp, smb, fv, mult
30 REAL(KIND=8),
DIMENSION(2,6,mesh%gauss%l_G) :: grad
31 REAL(KIND=8),
DIMENSION(6,mesh%gauss%l_G) :: vitloc
32 INTEGER,
DIMENSION(mesh%gauss%n_w) :: j_loc
33 REAL(KIND=8),
DIMENSION(mesh%gauss%k_d,mesh%gauss%n_w) :: dw_loc
34 REAL(KIND=8),
DIMENSION(mesh%dom_me) :: visc_plot
35 REAL(KIND=8),
DIMENSION(2*mesh%gauss%n_w) :: v14_loc, v23_loc
36 INTEGER,
DIMENSION(2*mesh%gauss%n_w) :: idxm_2
37 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w) :: v5_loc, v6_loc
38 INTEGER,
DIMENSION(mesh%gauss%n_w) :: idxm_1
39 REAL(KIND=8),
DIMENSION(6) :: visc1, visc2
40 REAL(KIND=8) :: ray, div1, div2, cfl, vloc, normal_vit
41 REAL(KIND=8),
ALLOCATABLE,
DIMENSION(:),
SAVE :: h
42 REAL(KIND=8),
SAVE :: coeff_ed_st, R_eff, &
43 visc_eff, surf, nu_loc, coeff_visc_ordre_un
44 LOGICAL,
SAVE :: once = .true.
45 REAL(KIND=8),
DIMENSION(6,mesh%dom_me) :: viscosity
46 REAL(KIND=8),
DIMENSION(6) :: norm_vit
47 REAL(KIND=8) :: type_fe
48 INTEGER :: m, l , i , ni , index, index2,
TYPE, k
49 INTEGER :: ms, nw, ix, ki, iglob
58 vec :: vb_2_14,vb_2_23,vb_1_5,vb_1_6
59 petscerrorcode :: ierr
61 CALL vecset(vb_2_14, 0.d0, ierr)
62 CALL vecset(vb_2_23, 0.d0, ierr)
63 CALL vecset(vb_1_5, 0.d0, ierr)
64 CALL vecset(vb_1_6, 0.d0, ierr)
78 DO l = 1, mesh%gauss%l_G
79 ray = sum(mesh%rr(1,mesh%jj(:,m))*mesh%gauss%ww(:,l))
80 surf = surf + mesh%gauss%rj(l,m)*ray
84 IF (mesh%gauss%n_w==3)
THEN 89 coeff_ed_st =
inputs%LES_coeff3*0.02d0/type_fe
90 coeff_visc_ordre_un =
inputs%LES_coeff4
91 IF (mesh%edge_stab)
THEN 94 h(ms) = sum(mesh%gauss%rji(:,ms))/type_fe
104 normal_vit = vel_tot_max
107 norm_vit(type) = sum(abs(vit(:,type)))/mesh%np + 1.d-14
115 DO m = 1, mesh%dom_me
117 vloc = maxval(vel_tot(j_loc))
118 cfl = max(vloc*dt/mesh%hloc(m),cfl)
121 DO l = 1, mesh%gauss%l_G
123 dw_loc = mesh%gauss%dw(:,:,l,m)
126 ray = sum(mesh%rr(1,j_loc)*mesh%gauss%ww(:,l))
131 ft(1) = sum(dudt(j_loc,1) *mesh%gauss%ww(:,l))
132 fp(1) = sum(phalf(j_loc,1)*dw_loc(1,:))
134 ft(2) = sum(dudt(j_loc,2) * mesh%gauss%ww(:,l))
135 fp(2) = sum(phalf(j_loc,2)*dw_loc(1,:))
137 ft(3) = sum(dudt(j_loc,3) *mesh%gauss%ww(:,l))
138 fp(3) = sum(phalf(j_loc,2)*mesh%gauss%ww(:,l))*mode/ray
140 ft(4) = sum(dudt(j_loc,4) *mesh%gauss%ww(:,l))
141 fp(4) = -sum(phalf(j_loc,1)*mesh%gauss%ww(:,l))*mode/ray
143 ft(5) = sum(dudt(j_loc,5) *mesh%gauss%ww(:,l))
144 fp(5) = sum(phalf(j_loc,1)*dw_loc(2,:))
146 ft(6) = sum(dudt(j_loc,6) *mesh%gauss%ww(:,l))
147 fp(6) = sum(phalf(j_loc,2)*dw_loc(2,:))
150 visc1 = max(visc1,abs(ft+fp+nlhalf(index2,:)))
155 grad(k,
TYPE,l) = sum(vit(j_loc,type)*dw_loc(k,:))
157 vitloc(
TYPE,l) = sum(vit(j_loc,type)*mesh%gauss%ww(:,l))
161 div1 = abs(grad(1,1,l) + vitloc(1,l)/ray + grad(2,5,l) + vitloc(4,l)*mode/ray)
162 div2 = abs(grad(1,2,l) + vitloc(2,l)/ray + grad(2,6,l) - vitloc(3,l)*mode/ray)
163 visc2(1) = max(visc2(1),div1)
164 visc2(2) = max(visc2(2),div2)
166 visc2(4) = visc2(1); visc2(5) = visc2(1)
167 visc2(3) = visc2(2); visc2(6) = visc2(2)
173 visc1(type) = max(visc1(type),2*visc2(type)*normal_vit)/norm_vit(type)
174 visc_eff = mesh%hloc(m)*min(coeff_visc_ordre_un*normal_vit,
inputs%LES_coeff2*mesh%hloc(m)*visc1(type))
175 nu_loc = nu_loc + visc_eff
177 viscosity(
TYPE,m) =
inputs%LES_coeff1*mesh%hloc(m) - visc_eff
180 r_eff = r_eff + (nu_loc + dt**2*mesh%hloc(m))*mesh%hloc(m)**2*ray
181 visc_plot(m) = (nu_loc/6)/(coeff_visc_ordre_un*mesh%hloc(m)*normal_vit)
186 DO m = 1, mesh%dom_me
188 vloc = maxval(vel_tot(j_loc))
189 cfl = max(vloc*dt/mesh%hloc(m),cfl)
199 DO m = 1, mesh%dom_me
200 mult(:)= viscosity(:,m)
205 iglob = vv_1_la%loc_to_glob(1,i)
212 iglob = vv_2_la%loc_to_glob(ki,i)
222 DO l = 1, mesh%gauss%l_G
224 dw_loc = mesh%gauss%dw(:,:,l,m)
227 grad(k,
TYPE,l) = sum(vit(j_loc,type)*dw_loc(k,:))
229 vitloc(
TYPE,l) = sum(vit(j_loc,type)*mesh%gauss%ww(:,l))
233 ray = sum(mesh%rr(1,j_loc)*mesh%gauss%ww(:,l))
237 fs(1) = sum(ff(j_loc,1) * mesh%gauss%ww(:,l))
238 ft(1) = sum(v1m(j_loc,1) * mesh%gauss%ww(:,l))
239 fp(1) = -sum(p(j_loc,1)*dw_loc(1,:))
240 fv(1) = ((mode*vitloc(1,l)+vitloc(4,l))*mode +mode*vitloc(4,l)+vitloc(1,l))/ray**2
242 fs(2) = sum(ff(j_loc,2) * mesh%gauss%ww(:,l))
243 ft(2) = sum(v1m(j_loc,2) * mesh%gauss%ww(:,l))
244 fp(2) = -sum(p(j_loc,2)*dw_loc(1,:))
245 fv(2) = ((mode*vitloc(2,l)-vitloc(3,l))*mode -mode*vitloc(3,l)+vitloc(2,l))/ray**2
247 fs(3) = sum(ff(j_loc,3) * mesh%gauss%ww(:,l))
248 ft(3) = sum(v1m(j_loc,3) * mesh%gauss%ww(:,l))
249 fp(3) = -sum(p(j_loc,2)*mesh%gauss%ww(:,l))/ray*mode
250 fv(3) = (-mode*vitloc(2,l)+vitloc(3,l) +(mode*vitloc(3,l)-vitloc(2,l))*mode)/ray**2
252 fs(4) = sum(ff(j_loc,4) * mesh%gauss%ww(:,l))
253 ft(4) = sum(v1m(j_loc,4) * mesh%gauss%ww(:,l))
254 fp(4) = sum(p(j_loc,1)*mesh%gauss%ww(:,l))/ray *mode
255 fv(4) = (mode*vitloc(1,l)+vitloc(4,l) +(mode*vitloc(4,l)+vitloc(1,l))*mode)/ray**2
257 fs(5) = sum(ff(j_loc,5) * mesh%gauss%ww(:,l))
258 ft(5) = sum(v1m(j_loc,5) * mesh%gauss%ww(:,l))
259 fp(5) = -sum(p(j_loc,1)*dw_loc(2,:))
260 fv(5) = vitloc(5,l)*(mode/ray)**2
262 fs(6) = sum(ff(j_loc,6) * mesh%gauss%ww(:,l))
263 ft(6) = sum(v1m(j_loc,6) * mesh%gauss%ww(:,l))
264 fp(6) = -sum(p(j_loc,2)*dw_loc(2,:))
265 fv(6) = vitloc(6,l)*(mode/ray)**2
271 smb = (ft+fp+fs+fv-rotv_v(index,:))*ray*mesh%gauss%rj(l,m)
273 grad(:,
TYPE,l) = mult(type)*grad(:,
TYPE,l)*ray*mesh%
gauss%
rj(l,m)
285 v14_loc(ix) = v14_loc(ix) + mesh%gauss%ww(ni,l)*smb(1) + sum(dw_loc(:,ni)*grad(:,1,l))
286 v23_loc(ix) = v23_loc(ix) + mesh%gauss%ww(ni,l)*smb(2) + sum(dw_loc(:,ni)*grad(:,2,l))
287 v5_loc(ix) = v5_loc(ix) + mesh%gauss%ww(ni,l)*smb(5) + sum(dw_loc(:,ni)*grad(:,5,l))
288 v6_loc(ix) = v6_loc(ix) + mesh%gauss%ww(ni,l)*smb(6) + sum(dw_loc(:,ni)*grad(:,6,l))
294 v14_loc(ix) = v14_loc(ix) + mesh%gauss%ww(ni,l)*smb(4) + sum(dw_loc(:,ni)*grad(:,4,l))
295 v23_loc(ix) = v23_loc(ix) + mesh%gauss%ww(ni,l)*smb(3) + sum(dw_loc(:,ni)*grad(:,3,l))
300 CALL vecsetvalues(vb_2_14, 2*nw, idxm_2, v14_loc, add_values, ierr)
301 CALL vecsetvalues(vb_2_23, 2*nw, idxm_2, v23_loc, add_values, ierr)
302 CALL vecsetvalues(vb_1_5, nw, idxm_1, v5_loc, add_values, ierr)
303 CALL vecsetvalues(vb_1_6, nw, idxm_1, v6_loc, add_values, ierr)
312 IF (mesh%edge_stab)
THEN 313 CALL error_petsc(
'BUG in qs_ns_stab_new: terms with edge_stab not yet assembled')
350 CALL vecassemblybegin(vb_2_14,ierr)
351 CALL vecassemblyend(vb_2_14,ierr)
352 CALL vecassemblybegin(vb_2_23,ierr)
353 CALL vecassemblyend(vb_2_23,ierr)
354 CALL vecassemblybegin(vb_1_5,ierr)
355 CALL vecassemblyend(vb_1_5,ierr)
356 CALL vecassemblybegin(vb_1_6,ierr)
357 CALL vecassemblyend(vb_1_6,ierr)
361 SUBROUTINE qs_ns_stab_3x3(mesh,vv_3_LA,mode,ff,vel_tot,V1m,vit,P,dudt,phalf,nlhalf,dt,&
362 vb_145, vb_236,rotv_v, vel_tot_max)
373 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: ff, rotv_v, dudt, nlhalf
374 REAL(KIND=8),
DIMENSION(:),
INTENT(IN) :: vel_tot
376 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: V1m, vit
377 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: P, phalf
378 REAL(KIND=8),
INTENT(IN) :: dt
379 INTEGER,
INTENT(IN) :: mode
381 REAL(KIND=8) :: vel_tot_max
383 REAL(KIND=8),
DIMENSION(6) :: fs , ft , fp, fv, mult
384 REAL(KIND=8),
DIMENSION(2,6,mesh%gauss%l_G) :: grad
385 REAL(KIND=8),
DIMENSION(6,mesh%gauss%l_G) :: vitloc
386 INTEGER,
DIMENSION(mesh%gauss%n_w) :: j_loc
387 REAL(KIND=8),
DIMENSION(mesh%gauss%k_d,mesh%gauss%n_w) :: dw_loc
388 REAL(KIND=8),
DIMENSION(mesh%dom_me) :: visc_plot
389 REAL(KIND=8),
DIMENSION(2*mesh%gauss%n_w) :: v14_loc, v23_loc
390 INTEGER,
DIMENSION(2*mesh%gauss%n_w) :: idxm_2
391 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w) :: v5_loc, v6_loc
392 INTEGER,
DIMENSION(mesh%gauss%n_w) :: idxm_1
393 REAL(KIND=8),
DIMENSION(mesh%dom_me*mesh%gauss%l_G,6) :: rhs_gauss
394 REAL(KIND=8),
DIMENSION(6) :: visc1, visc2
395 REAL(KIND=8) :: ray, div1, div2, cfl, vloc, normal_vit
397 REAL(KIND=8),
ALLOCATABLE,
DIMENSION(:),
SAVE :: h
398 REAL(KIND=8),
SAVE :: coeff_ed_st, R_eff, &
399 visc_eff, surf, nu_loc, coeff_visc_ordre_un
400 LOGICAL,
SAVE :: once = .true.
401 REAL(KIND=8),
DIMENSION(6,mesh%dom_me) :: viscosity
402 REAL(KIND=8),
DIMENSION(6) :: norm_vit
403 REAL(KIND=8) :: type_fe
404 INTEGER :: m, l , i , ni , index, index2,
TYPE, k
405 INTEGER :: ms, nw, ix, ki, iglob
414 vec :: vb_145, vb_236
431 DO m = 1, mesh%dom_me
432 DO l = 1, mesh%gauss%l_G
433 ray = sum(mesh%rr(1,mesh%jj(:,m))*mesh%gauss%ww(:,l))
434 surf = surf + mesh%gauss%rj(l,m)*ray
438 IF (mesh%gauss%n_w==3)
THEN 443 coeff_ed_st =
inputs%LES_coeff3*0.02d0/type_fe
444 coeff_visc_ordre_un =
inputs%LES_coeff4
445 IF (mesh%edge_stab)
THEN 448 h(ms) = sum(mesh%gauss%rji(:,ms))/type_fe
458 normal_vit = vel_tot_max
461 norm_vit(type) = sum(abs(vit(:,type)))/mesh%np + 1.d-14
469 DO m = 1, mesh%dom_me
471 vloc = maxval(vel_tot(j_loc))
472 cfl = max(vloc*dt/mesh%hloc(m),cfl)
475 DO l = 1, mesh%gauss%l_G
477 dw_loc = mesh%gauss%dw(:,:,l,m)
480 ray = sum(mesh%rr(1,j_loc)*mesh%gauss%ww(:,l))
485 ft(1) = sum(dudt(j_loc,1) *mesh%gauss%ww(:,l))
486 fp(1) = sum(phalf(j_loc,1)*dw_loc(1,:))
488 ft(2) = sum(dudt(j_loc,2) * mesh%gauss%ww(:,l))
489 fp(2) = sum(phalf(j_loc,2)*dw_loc(1,:))
491 ft(3) = sum(dudt(j_loc,3) *mesh%gauss%ww(:,l))
492 fp(3) = sum(phalf(j_loc,2)*mesh%gauss%ww(:,l))*mode/ray
494 ft(4) = sum(dudt(j_loc,4) *mesh%gauss%ww(:,l))
495 fp(4) = -sum(phalf(j_loc,1)*mesh%gauss%ww(:,l))*mode/ray
497 ft(5) = sum(dudt(j_loc,5) *mesh%gauss%ww(:,l))
498 fp(5) = sum(phalf(j_loc,1)*dw_loc(2,:))
500 ft(6) = sum(dudt(j_loc,6) *mesh%gauss%ww(:,l))
501 fp(6) = sum(phalf(j_loc,2)*dw_loc(2,:))
504 visc1= max(visc1,abs(ft+fp+nlhalf(index2,:)))
509 grad(k,
TYPE,l) = sum(vit(j_loc,type)*dw_loc(k,:))
511 vitloc(
TYPE,l) = sum(vit(j_loc,type)*mesh%gauss%ww(:,l))
515 div1 = abs(grad(1,1,l) + vitloc(1,l)/ray + grad(2,5,l) + vitloc(4,l)*mode/ray)
516 div2 = abs(grad(1,2,l) + vitloc(2,l)/ray + grad(2,6,l) - vitloc(3,l)*mode/ray)
517 visc2(1) = max(visc2(1),div1)
518 visc2(2) = max(visc2(2),div2)
520 visc2(4) = visc2(1); visc2(5) = visc2(1)
521 visc2(3) = visc2(2); visc2(6) = visc2(2)
527 visc1(type) = max(visc1(type),2*visc2(type)*normal_vit)/norm_vit(type)
528 visc_eff = mesh%hloc(m)*min(coeff_visc_ordre_un*normal_vit,
inputs%LES_coeff2*mesh%hloc(m)*visc1(type))
529 nu_loc = nu_loc + visc_eff
531 viscosity(
TYPE,m) =
inputs%LES_coeff1*mesh%hloc(m) - visc_eff
534 r_eff = r_eff + (nu_loc + dt**2*mesh%hloc(m))*mesh%hloc(m)**2*ray
535 visc_plot(m) = (nu_loc/6)/(coeff_visc_ordre_un*mesh%hloc(m)*normal_vit)
540 DO m = 1, mesh%dom_me
542 vloc = maxval(vel_tot(j_loc))
543 cfl = max(vloc*dt/mesh%hloc(m),cfl)
553 DO m = 1, mesh%dom_me
554 mult(:)= viscosity(:,m)
559 iglob = vv_3_la%loc_to_glob(3,i)
566 iglob = vv_3_la%loc_to_glob(ki,i)
576 DO l = 1, mesh%gauss%l_G
578 dw_loc = mesh%gauss%dw(:,:,l,m)
581 grad(k,
TYPE,l) = sum(vit(j_loc,type)*dw_loc(k,:))
583 vitloc(
TYPE,l) = sum(vit(j_loc,type)*mesh%gauss%ww(:,l))
587 ray = sum(mesh%rr(1,j_loc)*mesh%gauss%ww(:,l))
591 fs(1) = sum(ff(j_loc,1) * mesh%gauss%ww(:,l))
592 ft(1) = sum(v1m(j_loc,1) * mesh%gauss%ww(:,l))
593 fp(1) = -sum(p(j_loc,1)*dw_loc(1,:))
594 fv(1) = ((mode*vitloc(1,l)+vitloc(4,l))*mode +mode*vitloc(4,l)+vitloc(1,l))/ray**2
596 fs(2) = sum(ff(j_loc,2) * mesh%gauss%ww(:,l))
597 ft(2) = sum(v1m(j_loc,2) * mesh%gauss%ww(:,l))
598 fp(2) = -sum(p(j_loc,2)*dw_loc(1,:))
599 fv(2) = ((mode*vitloc(2,l)-vitloc(3,l))*mode -mode*vitloc(3,l)+vitloc(2,l))/ray**2
601 fs(3) = sum(ff(j_loc,3) * mesh%gauss%ww(:,l))
602 ft(3) = sum(v1m(j_loc,3) * mesh%gauss%ww(:,l))
603 fp(3) = -sum(p(j_loc,2)*mesh%gauss%ww(:,l))/ray*mode
604 fv(3) = (-mode*vitloc(2,l)+vitloc(3,l) +(mode*vitloc(3,l)-vitloc(2,l))*mode)/ray**2
606 fs(4) = sum(ff(j_loc,4) * mesh%gauss%ww(:,l))
607 ft(4) = sum(v1m(j_loc,4) * mesh%gauss%ww(:,l))
608 fp(4) = sum(p(j_loc,1)*mesh%gauss%ww(:,l))/ray *mode
609 fv(4) = (mode*vitloc(1,l)+vitloc(4,l) +(mode*vitloc(4,l)+vitloc(1,l))*mode)/ray**2
611 fs(5) = sum(ff(j_loc,5) * mesh%gauss%ww(:,l))
612 ft(5) = sum(v1m(j_loc,5) * mesh%gauss%ww(:,l))
613 fp(5) = -sum(p(j_loc,1)*dw_loc(2,:))
614 fv(5) = vitloc(5,l)*(mode/ray)**2
616 fs(6) = sum(ff(j_loc,6) * mesh%gauss%ww(:,l))
617 ft(6) = sum(v1m(j_loc,6) * mesh%gauss%ww(:,l))
618 fp(6) = -sum(p(j_loc,2)*dw_loc(2,:))
619 fv(6) = vitloc(6,l)*(mode/ray)**2
625 rhs_gauss(index, :) = (ft+fp+fs+fv-rotv_v(index,:))
631 CALL rhs_3x3(mesh, vv_3_la, mode, rhs_gauss, vb_145, vb_236)
642 INTEGER,
INTENT(IN) :: type_fe_velocity
643 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: gg
644 INTEGER ,
INTENT(IN) :: mode
646 REAL(KIND=8),
DIMENSION(pp_mesh%gauss%n_w, vv_mesh%gauss%l_G) :: w_c
647 REAL(KIND=8),
DIMENSION(pp_mesh%gauss%n_w) :: v1_loc, v2_loc
648 INTEGER,
DIMENSION(pp_mesh%gauss%n_w) :: idxm
649 INTEGER :: m, l, n, i, nw, nwc, ni, iglob
650 REAL(KIND=8),
DIMENSION(3,2) :: f
652 INTEGER,
DIMENSION(vv_mesh%gauss%n_w) :: j_loc
653 INTEGER,
DIMENSION(pp_mesh%gauss%n_w) :: jc_loc
656 REAL(KIND=8),
DIMENSION(:,:),
POINTER,
SAVE :: aij_p1p2, aij_p2p3
657 REAL(KIND=8),
DIMENSION(:,:),
POINTER :: aij
658 LOGICAL :: once_p1p2=.true., once_p2p3=.true.
660 petscerrorcode :: ierr
664 IF (type_fe_velocity==2)
THEN 670 ELSE IF (type_fe_velocity==3)
THEN 677 CALL error_petsc(
'qs_01_div_hybrid_generic, type_fe_velocity not correct')
681 CALL vecset(pb_1, 0.d0, ierr)
682 CALL vecset(pb_2, 0.d0, ierr)
686 nw = vv_mesh%gauss%n_w
687 nwc = pp_mesh%gauss%n_w
688 DO l = 1, vv_mesh%gauss%l_G
690 w_c(n,l) = sum(aij(n,:)*vv_mesh%gauss%ww(:,l))
695 DO m = 1, vv_mesh%dom_me
696 j_loc(:) = vv_mesh%jj(:,m)
697 jc_loc(:)= pp_mesh%jj(:,m)
701 iglob = pp_la%loc_to_glob(1,i)
707 DO l = 1, vv_mesh%gauss%l_G
711 DO n = 1, nw; i = vv_mesh%jj(n,m)
712 ray = ray + vv_mesh%rr(1,i)*vv_mesh%gauss%ww(n,l)
717 f(1,1) = (ray*sum(gg(j_loc,1)*vv_mesh%gauss%dw(1,:,l,m)) &
718 + sum(gg(j_loc,1)*vv_mesh%gauss%ww(:,l)))
719 f(2,1) = mode*sum(gg(j_loc,4)*vv_mesh%gauss%ww(:,l))
720 f(3,1) = sum(gg(j_loc,5)*vv_mesh%gauss%dw(2,:,l,m)) * ray
723 f(1,2) = (ray*sum(gg(j_loc,2)*vv_mesh%gauss%dw(1,:,l,m)) &
724 + sum(gg(j_loc,2)*vv_mesh%gauss%ww(:,l)))
725 f(2,2) =-mode*sum(gg(j_loc,3)*vv_mesh%gauss%ww(:,l))
726 f(3,2) = sum(gg(j_loc,6)*vv_mesh%gauss%dw(2,:,l,m)) * ray
728 f = f *vv_mesh%gauss%rj(l,m)
730 x = f(1,1)+f(2,1)+f(3,1)
732 v1_loc(ni) = v1_loc(ni) + w_c(ni,l)*x
735 x = f(1,2)+f(2,2)+f(3,2)
737 v2_loc(ni) = v2_loc(ni) + w_c(ni,l)*x
741 CALL vecsetvalues(pb_1, nwc, idxm, v1_loc, add_values, ierr)
742 CALL vecsetvalues(pb_2, nwc, idxm, v2_loc, add_values, ierr)
744 CALL vecassemblybegin(pb_1,ierr)
745 CALL vecassemblyend(pb_1,ierr)
747 CALL vecassemblybegin(pb_2,ierr)
748 CALL vecassemblyend(pb_2,ierr)
752 SUBROUTINE inject_generic(type_fe_velocity, jj_c, jj_f, pp_c, pp_f)
755 INTEGER,
INTENT(IN) :: type_fe_velocity
756 INTEGER,
DIMENSION(:,:),
INTENT(IN) :: jj_c, jj_f
757 REAL(KIND=8),
DIMENSION(:),
INTENT(IN) :: pp_c
758 REAL(KIND=8),
DIMENSION(:),
INTENT(OUT) :: pp_f
761 REAL(KIND=8),
DIMENSION(:,:),
POINTER,
SAVE :: aij_p1p2, aij_p2p3
762 REAL(KIND=8),
DIMENSION(:,:),
POINTER :: aij
763 LOGICAL :: once_p1p2=.true., once_p2p3=.true.
767 IF (type_fe_velocity==2)
THEN 773 ELSE IF (type_fe_velocity==3)
THEN 780 CALL error_petsc(
'inject_generic, type_fe_velocity not correct')
784 DO m = 1,
size(jj_f,2)
785 DO n = 1,
size(jj_f,1)
786 pp_f(jj_f(n,m)) = sum(aij(:,n)*pp_c(jj_c(:,m)))
798 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: gg
799 INTEGER ,
INTENT(IN) :: mode
801 REAL(KIND=8),
DIMENSION(pp_mesh%gauss%n_w, vv_mesh%gauss%l_G) :: w_c
802 REAL(KIND=8),
DIMENSION(pp_mesh%gauss%n_w) :: v1_loc, v2_loc
803 INTEGER,
DIMENSION(pp_mesh%gauss%n_w) :: idxm
804 INTEGER :: m, l, n, i, nw, nwc, ni, iglob
805 REAL(KIND=8),
DIMENSION(3,2) :: f
807 INTEGER,
DIMENSION(vv_mesh%gauss%n_w) :: j_loc
808 INTEGER,
DIMENSION(pp_mesh%gauss%n_w) :: jc_loc
811 petscerrorcode :: ierr
814 IF (
inputs%type_fe_velocity.NE.2)
THEN 815 call error_petsc(.NE.
'BUG qs_01_div_hybrid_2006, inputs%type_fe_velocity2')
818 CALL vecset(pb_1, 0.d0, ierr)
819 CALL vecset(pb_2, 0.d0, ierr)
821 nw = vv_mesh%gauss%n_w
822 DO l = 1, vv_mesh%gauss%l_G
824 w_c(1,l) = vv_mesh%gauss%ww(1,l) + 0.5*(vv_mesh%gauss%ww(nw-1,l) + vv_mesh%gauss%ww(nw,l))
825 w_c(2,l) = vv_mesh%gauss%ww(2,l) + 0.5*(vv_mesh%gauss%ww(nw,l) + vv_mesh%gauss%ww(4,l))
826 w_c(3,l) = vv_mesh%gauss%ww(3,l) + 0.5*(vv_mesh%gauss%ww(4,l) + vv_mesh%gauss%ww(nw-1,l))
829 nwc = pp_mesh%gauss%n_w
830 DO m = 1, vv_mesh%dom_me
831 j_loc(:) = vv_mesh%jj(:,m)
832 jc_loc(:)= pp_mesh%jj(:,m)
836 iglob = pp_la%loc_to_glob(1,i)
842 DO l = 1, vv_mesh%gauss%l_G
846 DO n = 1, nw; i = vv_mesh%jj(n,m)
847 ray = ray + vv_mesh%rr(1,i)*vv_mesh%gauss%ww(n,l)
852 f(1,1) = (ray*sum(gg(j_loc,1)*vv_mesh%gauss%dw(1,:,l,m)) &
853 + sum(gg(j_loc,1)*vv_mesh%gauss%ww(:,l)))
854 f(2,1) = mode*sum(gg(j_loc,4)*vv_mesh%gauss%ww(:,l))
855 f(3,1) = sum(gg(j_loc,5)*vv_mesh%gauss%dw(2,:,l,m)) * ray
858 f(1,2) = (ray*sum(gg(j_loc,2)*vv_mesh%gauss%dw(1,:,l,m)) &
859 + sum(gg(j_loc,2)*vv_mesh%gauss%ww(:,l)))
860 f(2,2) =-mode*sum(gg(j_loc,3)*vv_mesh%gauss%ww(:,l))
861 f(3,2) = sum(gg(j_loc,6)*vv_mesh%gauss%dw(2,:,l,m)) * ray
863 f = f *vv_mesh%gauss%rj(l,m)
872 x = f(1,1)+f(2,1)+f(3,1)
874 v1_loc(ni) = v1_loc(ni) + w_c(ni,l)*x
877 x = f(1,2)+f(2,2)+f(3,2)
879 v2_loc(ni) = v2_loc(ni) + w_c(ni,l)*x
883 CALL vecsetvalues(pb_1, nwc, idxm, v1_loc, add_values, ierr)
884 CALL vecsetvalues(pb_2, nwc, idxm, v2_loc, add_values, ierr)
886 CALL vecassemblybegin(pb_1,ierr)
887 CALL vecassemblyend(pb_1,ierr)
889 CALL vecassemblybegin(pb_2,ierr)
890 CALL vecassemblyend(pb_2,ierr)
894 SUBROUTINE qs_00 (mesh, LA, ff, vect)
900 REAL(KIND=8),
DIMENSION(:),
INTENT(IN) :: ff
901 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w) :: ff_loc
902 INTEGER,
DIMENSION(mesh%gauss%n_w) :: jj_loc
903 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w) :: v_loc
904 INTEGER,
DIMENSION(mesh%gauss%n_w) :: idxm
905 INTEGER :: i, m, l, ni, iglob
906 REAL(KIND=8) :: fl, ray
909 petscerrorcode :: ierr
911 CALL vecset(vect, 0.d0, ierr)
913 DO m = 1, mesh%dom_me
914 jj_loc = mesh%jj(:,m)
916 DO ni = 1, mesh%gauss%n_w
918 iglob = la%loc_to_glob(1,i)
923 DO l = 1, mesh%gauss%l_G
925 DO ni = 1, mesh%gauss%n_w
927 ray = ray + mesh%rr(1,i)*mesh%gauss%ww(ni,l)
929 fl = sum(ff_loc*mesh%gauss%ww(:,l))*mesh%gauss%rj(l,m)*ray
930 DO ni = 1, mesh%gauss%n_w
931 v_loc(ni) = v_loc(ni) + mesh%gauss%ww(ni,l) * fl
934 CALL vecsetvalues(vect, mesh%gauss%n_w, idxm, v_loc, add_values, ierr)
936 CALL vecassemblybegin(vect,ierr)
937 CALL vecassemblyend(vect,ierr)
940 SUBROUTINE qs_00_gauss (mesh, LA, heat_capa, ff, ff_gauss, vect)
946 REAL(KIND=8),
DIMENSION(:),
INTENT(IN) :: heat_capa
947 REAL(KIND=8),
DIMENSION(:),
INTENT(IN) :: ff, ff_gauss
948 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w) :: ff_loc
949 INTEGER,
DIMENSION(mesh%gauss%n_w) :: jj_loc
950 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w) :: v_loc
951 INTEGER,
DIMENSION(mesh%gauss%n_w) :: idxm
952 INTEGER :: i, m, l, ni, iglob, index
953 REAL(KIND=8) :: fl, ray
956 petscerrorcode :: ierr
958 CALL vecset(vect, 0.d0, ierr)
961 DO m = 1, mesh%dom_me
962 jj_loc = mesh%jj(:,m)
964 DO ni = 1, mesh%gauss%n_w
966 iglob = la%loc_to_glob(1,i)
971 DO l = 1, mesh%gauss%l_G
974 DO ni = 1, mesh%gauss%n_w
976 ray = ray + mesh%rr(1,i)*mesh%gauss%ww(ni,l)
978 fl = (heat_capa(m) * sum(ff_loc*mesh%gauss%ww(:,l)) + ff_gauss(index))*mesh%gauss%rj(l,m)*ray
979 DO ni = 1, mesh%gauss%n_w
980 v_loc(ni) = v_loc(ni) + mesh%gauss%ww(ni,l) * fl
983 CALL vecsetvalues(vect, mesh%gauss%n_w, idxm, v_loc, add_values, ierr)
985 CALL vecassemblybegin(vect,ierr)
986 CALL vecassemblyend(vect,ierr)
990 vb_2_14,vb_2_23,vb_1_5,vb_1_6, rotb_b, tensor, tensor_surface_gauss,&
991 stab, momentum, momentum_les, visc_grad_vel, visc_entro)
1001 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: ff, rotb_b
1002 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: tensor
1003 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: tensor_surface_gauss
1005 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: V1m, momentum, momentum_LES
1006 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: P
1007 REAL(KIND=8),
INTENT(IN) :: stab
1008 INTEGER,
INTENT(IN) :: mode
1009 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: visc_grad_vel
1010 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: visc_entro
1011 REAL(KIND=8),
DIMENSION(6) :: fs , ft , fp, smb, mult
1012 REAL(KIND=8),
DIMENSION(6) :: fnl, fvgm, fvgm_LES, fvgu
1013 REAL(KIND=8),
DIMENSION(2,6,mesh%gauss%l_G) :: grad_mom
1014 REAL(KIND=8),
DIMENSION(6,mesh%gauss%l_G) :: momloc, momloc_LES
1015 REAL(KIND=8),
DIMENSION(3,6,mesh%gauss%l_G) :: tensor_loc
1016 INTEGER,
DIMENSION(mesh%gauss%n_w) :: j_loc
1017 REAL(KIND=8),
DIMENSION(mesh%gauss%k_d,mesh%gauss%n_w) :: dw_loc
1018 REAL(KIND=8),
DIMENSION(2*mesh%gauss%n_w) :: v14_loc, v23_loc
1019 INTEGER,
DIMENSION(2*mesh%gauss%n_w) :: idxm_2
1020 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w) :: v5_loc, v6_loc
1021 INTEGER,
DIMENSION(mesh%gauss%n_w) :: idxm_1
1023 REAL(KIND=8),
DIMENSION(mesh%dom_me) :: stab_loc
1024 LOGICAL,
SAVE :: once = .true.
1025 REAL(KIND=8),
SAVE :: type_fe
1026 INTEGER :: m, l , i , ni , index,
TYPE, k
1027 INTEGER :: nw, ix, ki, iglob
1029 vec :: vb_2_14,vb_2_23,vb_1_5,vb_1_6
1030 petscerrorcode :: ierr
1032 CALL vecset(vb_2_14, 0.d0, ierr)
1033 CALL vecset(vb_2_23, 0.d0, ierr)
1034 CALL vecset(vb_1_5, 0.d0, ierr)
1035 CALL vecset(vb_1_6, 0.d0, ierr)
1040 IF (.NOT.
inputs%LES)
THEN 1044 IF (mesh%gauss%n_w==3)
THEN 1052 DO m = 1, mesh%dom_me
1053 stab_loc(m) = stab +
inputs%LES_coeff1*mesh%hloc(m)
1062 DO m = 1, mesh%dom_me
1063 mult(:)= - visc_entro(m,1)
1065 j_loc = mesh%jj(:,m)
1069 iglob = vv_1_la%loc_to_glob(1,i)
1070 idxm_1(ni) = iglob-1
1076 iglob = vv_2_la%loc_to_glob(ki,i)
1078 idxm_2(ix) = iglob-1
1086 DO l = 1, mesh%gauss%l_G
1088 dw_loc = mesh%gauss%dw(:,:,l,m)
1091 tensor_loc(k,
TYPE,l) = sum(tensor(k,j_loc,type)*mesh%gauss%ww(:,l)) &
1092 + tensor_surface_gauss(k,index,type)
1097 ray = sum(mesh%rr(1,j_loc)*mesh%gauss%ww(:,l))
1101 fs(1) = sum(ff(j_loc,1) * mesh%gauss%ww(:,l))
1102 ft(1) = sum(v1m(j_loc,1) * mesh%gauss%ww(:,l))
1103 fp(1) = -sum(p(j_loc,1)*dw_loc(1,:))
1104 fnl(1) = (-mode*tensor_loc(1,4,l) + tensor_loc(2,3,l))/ray
1106 fs(2) = sum(ff(j_loc,2) * mesh%gauss%ww(:,l))
1107 ft(2) = sum(v1m(j_loc,2) * mesh%gauss%ww(:,l))
1108 fp(2) = -sum(p(j_loc,2)*dw_loc(1,:))
1109 fnl(2) = (mode*tensor_loc(1,3,l) + tensor_loc(2,4,l))/ray
1111 fs(3) = sum(ff(j_loc,3) * mesh%gauss%ww(:,l))
1112 ft(3) = sum(v1m(j_loc,3) * mesh%gauss%ww(:,l))
1113 fp(3) = -sum(p(j_loc,2)*mesh%gauss%ww(:,l))/ray*mode
1114 fnl(3) = (-tensor_loc(1,3,l) - mode*tensor_loc(2,4,l))/ray
1116 fs(4) = sum(ff(j_loc,4) * mesh%gauss%ww(:,l))
1117 ft(4) = sum(v1m(j_loc,4) * mesh%gauss%ww(:,l))
1118 fp(4) = sum(p(j_loc,1)*mesh%gauss%ww(:,l))/ray *mode
1119 fnl(4) = (-tensor_loc(1,4,l) + mode*tensor_loc(2,3,l))/ray
1121 fs(5) = sum(ff(j_loc,5) * mesh%gauss%ww(:,l))
1122 ft(5) = sum(v1m(j_loc,5) * mesh%gauss%ww(:,l))
1123 fp(5) = -sum(p(j_loc,1)*dw_loc(2,:))
1124 fnl(5) = -tensor_loc(3,4,l)*mode/ray
1126 fs(6) = sum(ff(j_loc,6) * mesh%gauss%ww(:,l))
1127 ft(6) = sum(v1m(j_loc,6) * mesh%gauss%ww(:,l))
1128 fp(6) = -sum(p(j_loc,2)*dw_loc(2,:))
1129 fnl(6) = tensor_loc(3,3,l)*mode/ray
1133 IF (
inputs%if_level_set)
THEN 1137 grad_mom(k,
TYPE,l) = stab_loc(m)* sum(momentum(j_loc,type)*dw_loc(k,:)) &
1138 + mult(type)*sum(momentum_les(j_loc,type)*dw_loc(k,:))
1141 momloc(
TYPE,l) = sum(momentum(j_loc,type)*mesh%gauss%ww(:,l))
1142 momloc_les(
TYPE,l) = sum(momentum_les(j_loc,type)*mesh%gauss%ww(:,l))
1145 fvgm(1) = ((mode*momloc(1,l)+momloc(4,l))*mode + mode*momloc(4,l)+momloc(1,l))/ray**2
1146 fvgm(2) = ((mode*momloc(2,l)-momloc(3,l))*mode - mode*momloc(3,l)+momloc(2,l))/ray**2
1147 fvgm(3) = (-mode*momloc(2,l)+momloc(3,l) + (mode*momloc(3,l)-momloc(2,l))*mode)/ray**2
1148 fvgm(4) = (mode*momloc(1,l)+momloc(4,l) + (mode*momloc(4,l)+momloc(1,l))*mode)/ray**2
1149 fvgm(5) = momloc(5,l)*(mode/ray)**2
1150 fvgm(6) = momloc(6,l)*(mode/ray)**2
1152 fvgm_les(1) = ((mode*momloc_les(1,l)+momloc_les(4,l))*mode + mode*momloc_les(4,l)+momloc_les(1,l))/ray**2
1153 fvgm_les(2) = ((mode*momloc_les(2,l)-momloc_les(3,l))*mode - mode*momloc_les(3,l)+momloc_les(2,l))/ray**2
1154 fvgm_les(3) = (-mode*momloc_les(2,l)+momloc_les(3,l) + (mode*momloc_les(3,l)-momloc_les(2,l))*mode)/ray**2
1155 fvgm_les(4) = (mode*momloc_les(1,l)+momloc_les(4,l) + (mode*momloc_les(4,l)+momloc_les(1,l))*mode)/ray**2
1156 fvgm_les(5) = momloc_les(5,l)*(mode/ray)**2
1157 fvgm_les(6) = momloc_les(6,l)*(mode/ray)**2
1159 fvgm = stab_loc(m)*fvgm + mult*fvgm_les
1161 fvgu(1) = (-visc_grad_vel(1,index,4)*mode + visc_grad_vel(2,index,3))/ray
1162 fvgu(2) = (visc_grad_vel(1,index,3)*mode + visc_grad_vel(2,index,4))/ray
1163 fvgu(3) = (-visc_grad_vel(1,index,3) - visc_grad_vel(2,index,4)*mode)/ray
1164 fvgu(4) = (-visc_grad_vel(1,index,4) + visc_grad_vel(2,index,3)*mode)/ray
1165 fvgu(5) = -visc_grad_vel(3,index,4)*mode/ray
1166 fvgu(6) = visc_grad_vel(3,index,3)*mode/ray
1169 grad_mom(:,
TYPE,l) = grad_mom(:,
TYPE,l)*ray*mesh%
gauss%
rj(l,m)
1171 tensor_loc(:,:,l) = tensor_loc(:,:,l) + visc_grad_vel(:,index,:)
1188 smb = (ft+fp+fs+rotb_b(index,:)+fnl+fvgm+fvgu)*ray*mesh%gauss%rj(l,m)
1193 v14_loc(ix) = v14_loc(ix) + mesh%gauss%ww(ni,l)*smb(1) + sum(dw_loc(:,ni)*grad_mom(:,1,l)) &
1194 + (dw_loc(1,ni)*tensor_loc(1,1,l) + dw_loc(2,ni)*tensor_loc(1,5,l))*ray*mesh%gauss%rj(l,m)
1195 v23_loc(ix) = v23_loc(ix) + mesh%gauss%ww(ni,l)*smb(2) + sum(dw_loc(:,ni)*grad_mom(:,2,l)) &
1196 + (dw_loc(1,ni)*tensor_loc(1,2,l) + dw_loc(2,ni)*tensor_loc(1,6,l))*ray*mesh%gauss%rj(l,m)
1197 v5_loc(ix) = v5_loc(ix) + mesh%gauss%ww(ni,l)*smb(5) + sum(dw_loc(:,ni)*grad_mom(:,5,l)) &
1198 + (dw_loc(1,ni)*tensor_loc(3,1,l) + dw_loc(2,ni)*tensor_loc(3,5,l))*ray*mesh%gauss%rj(l,m)
1199 v6_loc(ix) = v6_loc(ix) + mesh%gauss%ww(ni,l)*smb(6) + sum(dw_loc(:,ni)*grad_mom(:,6,l)) &
1200 + (dw_loc(1,ni)*tensor_loc(3,2,l) + dw_loc(2,ni)*tensor_loc(3,6,l))*ray*mesh%gauss%rj(l,m)
1206 v14_loc(ix) = v14_loc(ix) + mesh%gauss%ww(ni,l)*smb(4) + sum(dw_loc(:,ni)*grad_mom(:,4,l)) &
1207 + (dw_loc(1,ni)*tensor_loc(2,2,l) + dw_loc(2,ni)*tensor_loc(2,6,l))*ray*mesh%gauss%rj(l,m)
1208 v23_loc(ix) = v23_loc(ix) + mesh%gauss%ww(ni,l)*smb(3) + sum(dw_loc(:,ni)*grad_mom(:,3,l)) &
1209 + (dw_loc(1,ni)*tensor_loc(2,1,l) + dw_loc(2,ni)*tensor_loc(2,5,l))*ray*mesh%gauss%rj(l,m)
1213 CALL vecsetvalues(vb_2_14, 2*nw, idxm_2, v14_loc, add_values, ierr)
1214 CALL vecsetvalues(vb_2_23, 2*nw, idxm_2, v23_loc, add_values, ierr)
1215 CALL vecsetvalues(vb_1_5, nw, idxm_1, v5_loc, add_values, ierr)
1216 CALL vecsetvalues(vb_1_6, nw, idxm_1, v6_loc, add_values, ierr)
1220 IF (mesh%edge_stab)
THEN 1221 CALL error_petsc(
'BUG in qs_ns_stab_new: terms with edge_stab not yet assembled')
1225 CALL vecassemblybegin(vb_2_14,ierr)
1226 CALL vecassemblyend(vb_2_14,ierr)
1227 CALL vecassemblybegin(vb_2_23,ierr)
1228 CALL vecassemblyend(vb_2_23,ierr)
1229 CALL vecassemblybegin(vb_1_5,ierr)
1230 CALL vecassemblyend(vb_1_5,ierr)
1231 CALL vecassemblybegin(vb_1_6,ierr)
1232 CALL vecassemblyend(vb_1_6,ierr)
1237 vb_3_145,vb_3_236, rotb_b, tensor, tensor_surface_gauss,&
1238 stab, momentum, visc_grad_vel)
1248 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: ff, rotb_b
1249 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: tensor
1250 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: tensor_surface_gauss
1252 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: V1m, momentum
1253 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: P
1254 REAL(KIND=8),
INTENT(IN) :: stab
1255 INTEGER,
INTENT(IN) :: mode
1256 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: visc_grad_vel
1257 REAL(KIND=8),
DIMENSION(6) :: fs , ft , fp, smb, fnl
1258 REAL(KIND=8),
DIMENSION(6) :: fvgm, fvgu, fvgmT
1259 REAL(KIND=8),
DIMENSION(2,6,mesh%gauss%l_G) :: grad_mom, grad_T_mom
1260 REAL(KIND=8),
DIMENSION(6,mesh%gauss%l_G) :: momloc
1261 REAL(KIND=8),
DIMENSION(3,6,mesh%gauss%l_G) :: tensor_loc
1262 INTEGER,
DIMENSION(mesh%gauss%n_w) :: j_loc
1263 REAL(KIND=8),
DIMENSION(mesh%gauss%k_d,mesh%gauss%n_w) :: dw_loc
1264 REAL(KIND=8),
DIMENSION(2*mesh%gauss%n_w) :: v14_loc, v23_loc
1265 INTEGER,
DIMENSION(2*mesh%gauss%n_w) :: idxm_2
1266 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w) :: v5_loc, v6_loc
1267 INTEGER,
DIMENSION(mesh%gauss%n_w) :: idxm_1
1269 REAL(KIND=8),
DIMENSION(mesh%dom_me) :: stab_loc
1270 LOGICAL,
SAVE :: once = .true.
1271 REAL(KIND=8),
SAVE :: type_fe
1272 INTEGER :: m, l , i , ni , index,
TYPE, k
1273 INTEGER :: nw, ix, ki, iglob
1275 vec :: vb_3_145, vb_3_236
1276 petscerrorcode :: ierr
1278 CALL vecset(vb_3_145, 0.d0, ierr)
1279 CALL vecset(vb_3_236, 0.d0, ierr)
1284 IF (.NOT.
inputs%LES)
THEN 1288 IF (mesh%gauss%n_w==3)
THEN 1300 DO m = 1, mesh%dom_me
1302 j_loc = mesh%jj(:,m)
1306 iglob = vv_3_la%loc_to_glob(3,i)
1307 idxm_1(ni) = iglob-1
1313 iglob = vv_3_la%loc_to_glob(ki,i)
1315 idxm_2(ix) = iglob-1
1323 DO l = 1, mesh%gauss%l_G
1325 dw_loc = mesh%gauss%dw(:,:,l,m)
1328 tensor_loc(k,
TYPE,l) = sum(tensor(k,j_loc,type)*mesh%gauss%ww(:,l)) &
1329 + tensor_surface_gauss(k,index,type)
1334 ray = sum(mesh%rr(1,j_loc)*mesh%gauss%ww(:,l))
1338 fs(1) = sum(ff(j_loc,1) * mesh%gauss%ww(:,l))
1339 ft(1) = sum(v1m(j_loc,1) * mesh%gauss%ww(:,l))
1340 fp(1) = -sum(p(j_loc,1)*dw_loc(1,:))
1341 fnl(1) = (-mode*tensor_loc(1,4,l) + tensor_loc(2,3,l))/ray
1343 fs(2) = sum(ff(j_loc,2) * mesh%gauss%ww(:,l))
1344 ft(2) = sum(v1m(j_loc,2) * mesh%gauss%ww(:,l))
1345 fp(2) = -sum(p(j_loc,2)*dw_loc(1,:))
1346 fnl(2) = (mode*tensor_loc(1,3,l) + tensor_loc(2,4,l))/ray
1348 fs(3) = sum(ff(j_loc,3) * mesh%gauss%ww(:,l))
1349 ft(3) = sum(v1m(j_loc,3) * mesh%gauss%ww(:,l))
1350 fp(3) = -sum(p(j_loc,2)*mesh%gauss%ww(:,l))/ray*mode
1351 fnl(3) = (-tensor_loc(1,3,l) - mode*tensor_loc(2,4,l))/ray
1353 fs(4) = sum(ff(j_loc,4) * mesh%gauss%ww(:,l))
1354 ft(4) = sum(v1m(j_loc,4) * mesh%gauss%ww(:,l))
1355 fp(4) = sum(p(j_loc,1)*mesh%gauss%ww(:,l))/ray *mode
1356 fnl(4) = (-tensor_loc(1,4,l) + mode*tensor_loc(2,3,l))/ray
1358 fs(5) = sum(ff(j_loc,5) * mesh%gauss%ww(:,l))
1359 ft(5) = sum(v1m(j_loc,5) * mesh%gauss%ww(:,l))
1360 fp(5) = -sum(p(j_loc,1)*dw_loc(2,:))
1361 fnl(5) = -tensor_loc(3,4,l)*mode/ray
1363 fs(6) = sum(ff(j_loc,6) * mesh%gauss%ww(:,l))
1364 ft(6) = sum(v1m(j_loc,6) * mesh%gauss%ww(:,l))
1365 fp(6) = -sum(p(j_loc,2)*dw_loc(2,:))
1366 fnl(6) = tensor_loc(3,3,l)*mode/ray
1370 IF (
inputs%if_level_set)
THEN 1373 grad_mom(k,
TYPE,l) = stab_loc(m)*sum(momentum(j_loc,type)*dw_loc(k,:))
1376 momloc(
TYPE,l) = sum(momentum(j_loc,type)*mesh%gauss%ww(:,l))
1379 fvgm(1) = ((mode*momloc(1,l)+momloc(4,l))*mode + mode*momloc(4,l)+momloc(1,l))/ray**2
1380 fvgm(2) = ((mode*momloc(2,l)-momloc(3,l))*mode - mode*momloc(3,l)+momloc(2,l))/ray**2
1381 fvgm(3) = (-mode*momloc(2,l)+momloc(3,l) + (mode*momloc(3,l)-momloc(2,l))*mode)/ray**2
1382 fvgm(4) = (mode*momloc(1,l)+momloc(4,l) + (mode*momloc(4,l)+momloc(1,l))*mode)/ray**2
1383 fvgm(5) = momloc(5,l)*(mode/ray)**2
1384 fvgm(6) = momloc(6,l)*(mode/ray)**2
1387 grad_t_mom(1,1,l) = sum(momentum(j_loc,1)*dw_loc(1,:))
1388 grad_t_mom(2,1,l) = sum(momentum(j_loc,5)*dw_loc(1,:))
1389 grad_t_mom(1,2,l) = sum(momentum(j_loc,2)*dw_loc(1,:))
1390 grad_t_mom(2,2,l) = sum(momentum(j_loc,6)*dw_loc(1,:))
1391 grad_t_mom(1,3,l) = (mode*momloc(2,l) - momloc(3,l))/ray
1392 grad_t_mom(2,3,l) = mode*momloc(6,l)/ray
1393 grad_t_mom(1,4,l) = (-mode*momloc(1,l) - momloc(4,l))/ray
1394 grad_t_mom(2,4,l) = -mode*momloc(5,l)/ray
1395 grad_t_mom(1,5,l) = sum(momentum(j_loc,1)*dw_loc(2,:))
1396 grad_t_mom(2,5,l) = sum(momentum(j_loc,5)*dw_loc(2,:))
1397 grad_t_mom(1,6,l) = sum(momentum(j_loc,2)*dw_loc(2,:))
1398 grad_t_mom(2,6,l) = sum(momentum(j_loc,6)*dw_loc(2,:))
1401 fvgmt(1) = -mode*sum(momentum(j_loc,4)*dw_loc(1,:))/ray &
1402 + (mode*momloc(4,l)+momloc(1,l))/ray**2
1403 fvgmt(2) = mode*sum(momentum(j_loc,3)*dw_loc(1,:))/ray &
1404 + (-mode*momloc(3,l)+momloc(2,l))/ray**2
1405 fvgmt(3) = -sum(momentum(j_loc,3)*dw_loc(1,:))/ray &
1406 + mode*(mode*momloc(3,l)-momloc(2,l))/ray**2
1407 fvgmt(4) = -sum(momentum(j_loc,4)*dw_loc(1,:))/ray &
1408 + mode*(mode*momloc(4,l)+momloc(1,l))/ray**2
1409 fvgmt(5) = -mode*sum(momentum(j_loc,4)*dw_loc(2,:))/ray
1410 fvgmt(6) = mode*sum(momentum(j_loc,3)*dw_loc(2,:))/ray
1413 grad_mom(:,:,l) = grad_mom(:,:,l) + stab*grad_t_mom(:,:,l)
1414 fvgm = stab_loc(m)*fvgm + stab*fvgmt
1416 fvgu(1) = (-visc_grad_vel(1,index,4)*mode + visc_grad_vel(2,index,3))/ray
1417 fvgu(2) = (visc_grad_vel(1,index,3)*mode + visc_grad_vel(2,index,4))/ray
1418 fvgu(3) = (-visc_grad_vel(1,index,3) - visc_grad_vel(2,index,4)*mode)/ray
1419 fvgu(4) = (-visc_grad_vel(1,index,4) + visc_grad_vel(2,index,3)*mode)/ray
1420 fvgu(5) = -visc_grad_vel(3,index,4)*mode/ray
1421 fvgu(6) = visc_grad_vel(3,index,3)*mode/ray
1424 grad_mom(:,
TYPE,l) = grad_mom(:,
TYPE,l)*ray*mesh%
gauss%
rj(l,m)
1426 tensor_loc(:,:,l) = tensor_loc(:,:,l) + visc_grad_vel(:,index,:)
1443 smb = (ft+fp+fs+rotb_b(index,:)+fnl+fvgm+fvgu)*ray*mesh%gauss%rj(l,m)
1448 v14_loc(ix) = v14_loc(ix) + mesh%gauss%ww(ni,l)*smb(1) + sum(dw_loc(:,ni)*grad_mom(:,1,l)) &
1449 + (dw_loc(1,ni)*tensor_loc(1,1,l) + dw_loc(2,ni)*tensor_loc(1,5,l))*ray*mesh%gauss%rj(l,m)
1450 v23_loc(ix) = v23_loc(ix) + mesh%gauss%ww(ni,l)*smb(2) + sum(dw_loc(:,ni)*grad_mom(:,2,l)) &
1451 + (dw_loc(1,ni)*tensor_loc(1,2,l) + dw_loc(2,ni)*tensor_loc(1,6,l))*ray*mesh%gauss%rj(l,m)
1452 v5_loc(ix) = v5_loc(ix) + mesh%gauss%ww(ni,l)*smb(5) + sum(dw_loc(:,ni)*grad_mom(:,5,l)) &
1453 + (dw_loc(1,ni)*tensor_loc(3,1,l) + dw_loc(2,ni)*tensor_loc(3,5,l))*ray*mesh%gauss%rj(l,m)
1454 v6_loc(ix) = v6_loc(ix) + mesh%gauss%ww(ni,l)*smb(6) + sum(dw_loc(:,ni)*grad_mom(:,6,l)) &
1455 + (dw_loc(1,ni)*tensor_loc(3,2,l) + dw_loc(2,ni)*tensor_loc(3,6,l))*ray*mesh%gauss%rj(l,m)
1461 v14_loc(ix) = v14_loc(ix) + mesh%gauss%ww(ni,l)*smb(4) + sum(dw_loc(:,ni)*grad_mom(:,4,l)) &
1462 + (dw_loc(1,ni)*tensor_loc(2,2,l) + dw_loc(2,ni)*tensor_loc(2,6,l))*ray*mesh%gauss%rj(l,m)
1463 v23_loc(ix) = v23_loc(ix) + mesh%gauss%ww(ni,l)*smb(3) + sum(dw_loc(:,ni)*grad_mom(:,3,l)) &
1464 + (dw_loc(1,ni)*tensor_loc(2,1,l) + dw_loc(2,ni)*tensor_loc(2,5,l))*ray*mesh%gauss%rj(l,m)
1469 CALL vecsetvalues(vb_3_145, 2*nw, idxm_2, v14_loc, add_values, ierr)
1470 CALL vecsetvalues(vb_3_236, 2*nw, idxm_2, v23_loc, add_values, ierr)
1471 CALL vecsetvalues(vb_3_145, nw, idxm_1, v5_loc, add_values, ierr)
1472 CALL vecsetvalues(vb_3_236, nw, idxm_1, v6_loc, add_values, ierr)
1476 IF (mesh%edge_stab)
THEN 1477 CALL error_petsc(
'BUG in qs_ns_stab_new: terms with edge_stab not yet assembled')
1481 CALL vecassemblybegin(vb_3_145,ierr)
1482 CALL vecassemblyend(vb_3_145,ierr)
1483 CALL vecassemblybegin(vb_3_236,ierr)
1484 CALL vecassemblyend(vb_3_236,ierr)
1489 tensor,tensor_gauss,vb_2_14,vb_2_23,vb_1_5,vb_1_6)
1497 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: ff
1499 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: V1m
1500 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: tensor, tensor_gauss
1501 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: P
1502 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: rotb_b
1503 INTEGER,
INTENT(IN) :: mode
1504 REAL(KIND=8),
DIMENSION(6) :: fs , ft , fp, ftensor, smb
1505 INTEGER,
DIMENSION(mesh%gauss%n_w) :: j_loc
1506 REAL(KIND=8),
DIMENSION(mesh%gauss%k_d,mesh%gauss%n_w) :: dw_loc
1507 REAL(KIND=8),
DIMENSION(3,6,mesh%gauss%l_G) :: tensor_loc
1508 REAL(KIND=8),
DIMENSION(2*mesh%gauss%n_w) :: v14_loc, v23_loc
1509 INTEGER,
DIMENSION(2*mesh%gauss%n_w) :: idxm_2
1510 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w) :: v5_loc, v6_loc
1511 INTEGER,
DIMENSION(mesh%gauss%n_w) :: idxm_1
1513 INTEGER :: m, l , i , ni , index,
TYPE, k
1514 INTEGER :: nw, ix, ki, iglob
1516 vec :: vb_2_14,vb_2_23,vb_1_5,vb_1_6
1517 petscerrorcode :: ierr
1519 CALL vecset(vb_2_14, 0.d0, ierr)
1520 CALL vecset(vb_2_23, 0.d0, ierr)
1521 CALL vecset(vb_1_5, 0.d0, ierr)
1522 CALL vecset(vb_1_6, 0.d0, ierr)
1526 DO m = 1, mesh%dom_me
1527 j_loc = mesh%jj(:,m)
1531 iglob = vv_1_la%loc_to_glob(1,i)
1532 idxm_1(ni) = iglob-1
1538 iglob = vv_2_la%loc_to_glob(ki,i)
1540 idxm_2(ix) = iglob-1
1548 DO l = 1, mesh%gauss%l_G
1550 dw_loc = mesh%gauss%dw(:,:,l,m)
1553 ray = sum(mesh%rr(1,j_loc)*mesh%gauss%ww(:,l))
1558 tensor_loc(k,
TYPE,l) = -sum(tensor(k,j_loc,type)*mesh%gauss%ww(:,l)) &
1559 + tensor_gauss(k,index,type)
1565 fs(1) = sum(ff(j_loc,1) * mesh%gauss%ww(:,l))
1566 ft(1) = sum(v1m(j_loc,1) * mesh%gauss%ww(:,l))
1567 fp(1) = sum(p(j_loc,1)*dw_loc(1,:))
1568 ftensor(1) = -mode/ray*tensor_loc(1,4,l) + tensor_loc(2,3,l)/ray
1570 fs(2) = sum(ff(j_loc,2) * mesh%gauss%ww(:,l))
1571 ft(2) = sum(v1m(j_loc,2) * mesh%gauss%ww(:,l))
1572 fp(2) = sum(p(j_loc,2)*dw_loc(1,:))
1573 ftensor(2) = mode/ray*tensor_loc(1,3,l) + tensor_loc(2,4,l)/ray
1575 fs(3) = sum(ff(j_loc,3) * mesh%gauss%ww(:,l))
1576 ft(3) = sum(v1m(j_loc,3) * mesh%gauss%ww(:,l))
1577 fp(3) = sum(p(j_loc,2)*mesh%gauss%ww(:,l))/ray*mode
1578 ftensor(3) = -mode/ray*tensor_loc(2,4,l) - tensor_loc(1,3,l)/ray
1580 fs(4) = sum(ff(j_loc,4) * mesh%gauss%ww(:,l))
1581 ft(4) = sum(v1m(j_loc,4) * mesh%gauss%ww(:,l))
1582 fp(4) = -sum(p(j_loc,1)*mesh%gauss%ww(:,l))/ray *mode
1583 ftensor(4) = mode/ray*tensor_loc(2,3,l) - tensor_loc(1,4,l)/ray
1585 fs(5) = sum(ff(j_loc,5) * mesh%gauss%ww(:,l))
1586 ft(5) = sum(v1m(j_loc,5) * mesh%gauss%ww(:,l))
1587 fp(5) = sum(p(j_loc,1)*dw_loc(2,:))
1588 ftensor(5) = -mode/ray*tensor_loc(3,4,l)
1590 fs(6) = sum(ff(j_loc,6) * mesh%gauss%ww(:,l))
1591 ft(6) = sum(v1m(j_loc,6) * mesh%gauss%ww(:,l))
1592 fp(6) = sum(p(j_loc,2)*dw_loc(2,:))
1593 ftensor(6) = mode/ray*tensor_loc(3,3,l)
1597 smb = (ft+fp-fs+ftensor-rotb_b(index,:))*ray*mesh%gauss%rj(l,m)
1602 v14_loc(ix) = v14_loc(ix) + mesh%gauss%ww(ni,l)*smb(1) + &
1603 (dw_loc(1,ni)*tensor_loc(1,1,l) + dw_loc(2,ni)*tensor_loc(1,5,l))*ray*mesh%gauss%rj(l,m)
1604 v23_loc(ix) = v23_loc(ix) + mesh%gauss%ww(ni,l)*smb(2) + &
1605 (dw_loc(1,ni)*tensor_loc(1,2,l) + dw_loc(2,ni)*tensor_loc(1,6,l))*ray*mesh%gauss%rj(l,m)
1606 v5_loc(ix) = v5_loc(ix) + mesh%gauss%ww(ni,l)*smb(5) + &
1607 (dw_loc(1,ni)*tensor_loc(3,1,l) + dw_loc(2,ni)*tensor_loc(3,5,l))*ray*mesh%gauss%rj(l,m)
1608 v6_loc(ix) = v6_loc(ix) + mesh%gauss%ww(ni,l)*smb(6) + &
1609 (dw_loc(1,ni)*tensor_loc(3,2,l) + dw_loc(2,ni)*tensor_loc(3,6,l))*ray*mesh%gauss%rj(l,m)
1615 v14_loc(ix) = v14_loc(ix) + mesh%gauss%ww(ni,l)*smb(4) + &
1616 (dw_loc(1,ni)*tensor_loc(2,2,l) + dw_loc(2,ni)*tensor_loc(2,6,l))*ray*mesh%gauss%rj(l,m)
1617 v23_loc(ix) = v23_loc(ix) + mesh%gauss%ww(ni,l)*smb(3) + &
1618 (dw_loc(1,ni)*tensor_loc(2,1,l) + dw_loc(2,ni)*tensor_loc(2,5,l))*ray*mesh%gauss%rj(l,m)
1622 CALL vecsetvalues(vb_2_14, 2*nw, idxm_2, v14_loc, add_values, ierr)
1623 CALL vecsetvalues(vb_2_23, 2*nw, idxm_2, v23_loc, add_values, ierr)
1624 CALL vecsetvalues(vb_1_5, nw, idxm_1, v5_loc, add_values, ierr)
1625 CALL vecsetvalues(vb_1_6, nw, idxm_1, v6_loc, add_values, ierr)
1628 CALL vecassemblybegin(vb_2_14,ierr)
1629 CALL vecassemblyend(vb_2_14,ierr)
1630 CALL vecassemblybegin(vb_2_23,ierr)
1631 CALL vecassemblyend(vb_2_23,ierr)
1632 CALL vecassemblybegin(vb_1_5,ierr)
1633 CALL vecassemblyend(vb_1_5,ierr)
1634 CALL vecassemblybegin(vb_1_6,ierr)
1635 CALL vecassemblyend(vb_1_6,ierr)
1640 tensor,tensor_gauss,vb_3_145,vb_3_236)
1647 TYPE(petsc_csr_LA) :: vv_3_la
1648 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: ff
1650 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: V1m
1651 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: tensor, tensor_gauss
1652 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: P
1653 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: rotb_b
1654 INTEGER,
INTENT(IN) :: mode
1655 REAL(KIND=8),
DIMENSION(6) :: fs , ft , fp, ftensor, smb
1656 INTEGER,
DIMENSION(mesh%gauss%n_w) :: j_loc
1657 REAL(KIND=8),
DIMENSION(mesh%gauss%k_d,mesh%gauss%n_w) :: dw_loc
1658 REAL(KIND=8),
DIMENSION(3,6,mesh%gauss%l_G) :: tensor_loc
1659 REAL(KIND=8),
DIMENSION(2*mesh%gauss%n_w) :: v14_loc, v23_loc
1660 INTEGER,
DIMENSION(2*mesh%gauss%n_w) :: idxm_2
1661 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w) :: v5_loc, v6_loc
1662 INTEGER,
DIMENSION(mesh%gauss%n_w) :: idxm_1
1664 INTEGER :: m, l , i , ni , index,
TYPE, k
1665 INTEGER :: nw, ix, ki, iglob
1667 vec :: vb_3_145,vb_3_236
1668 petscerrorcode :: ierr
1670 CALL vecset(vb_3_145, 0.d0, ierr)
1671 CALL vecset(vb_3_236, 0.d0, ierr)
1675 DO m = 1, mesh%dom_me
1676 j_loc = mesh%jj(:,m)
1680 iglob = vv_3_la%loc_to_glob(3,i)
1681 idxm_1(ni) = iglob-1
1687 iglob = vv_3_la%loc_to_glob(ki,i)
1689 idxm_2(ix) = iglob-1
1697 DO l = 1, mesh%gauss%l_G
1699 dw_loc = mesh%gauss%dw(:,:,l,m)
1702 ray = sum(mesh%rr(1,j_loc)*mesh%gauss%ww(:,l))
1707 tensor_loc(k,
TYPE,l) = -sum(tensor(k,j_loc,type)*mesh%gauss%ww(:,l)) &
1708 + tensor_gauss(k,index,type)
1714 fs(1) = sum(ff(j_loc,1) * mesh%gauss%ww(:,l))
1715 ft(1) = sum(v1m(j_loc,1) * mesh%gauss%ww(:,l))
1716 fp(1) = sum(p(j_loc,1)*dw_loc(1,:))
1717 ftensor(1) = -mode/ray*tensor_loc(1,4,l) + tensor_loc(2,3,l)/ray
1719 fs(2) = sum(ff(j_loc,2) * mesh%gauss%ww(:,l))
1720 ft(2) = sum(v1m(j_loc,2) * mesh%gauss%ww(:,l))
1721 fp(2) = sum(p(j_loc,2)*dw_loc(1,:))
1722 ftensor(2) = mode/ray*tensor_loc(1,3,l) + tensor_loc(2,4,l)/ray
1724 fs(3) = sum(ff(j_loc,3) * mesh%gauss%ww(:,l))
1725 ft(3) = sum(v1m(j_loc,3) * mesh%gauss%ww(:,l))
1726 fp(3) = sum(p(j_loc,2)*mesh%gauss%ww(:,l))/ray*mode
1727 ftensor(3) = -mode/ray*tensor_loc(2,4,l) - tensor_loc(1,3,l)/ray
1729 fs(4) = sum(ff(j_loc,4) * mesh%gauss%ww(:,l))
1730 ft(4) = sum(v1m(j_loc,4) * mesh%gauss%ww(:,l))
1731 fp(4) = -sum(p(j_loc,1)*mesh%gauss%ww(:,l))/ray *mode
1732 ftensor(4) = mode/ray*tensor_loc(2,3,l) - tensor_loc(1,4,l)/ray
1734 fs(5) = sum(ff(j_loc,5) * mesh%gauss%ww(:,l))
1735 ft(5) = sum(v1m(j_loc,5) * mesh%gauss%ww(:,l))
1736 fp(5) = sum(p(j_loc,1)*dw_loc(2,:))
1737 ftensor(5) = -mode/ray*tensor_loc(3,4,l)
1739 fs(6) = sum(ff(j_loc,6) * mesh%gauss%ww(:,l))
1740 ft(6) = sum(v1m(j_loc,6) * mesh%gauss%ww(:,l))
1741 fp(6) = sum(p(j_loc,2)*dw_loc(2,:))
1742 ftensor(6) = mode/ray*tensor_loc(3,3,l)
1746 smb = (ft+fp-fs+ftensor-rotb_b(index,:))*ray*mesh%gauss%rj(l,m)
1751 v14_loc(ix) = v14_loc(ix) + mesh%gauss%ww(ni,l)*smb(1) + &
1752 (dw_loc(1,ni)*tensor_loc(1,1,l) + dw_loc(2,ni)*tensor_loc(1,5,l))*ray*mesh%gauss%rj(l,m)
1753 v23_loc(ix) = v23_loc(ix) + mesh%gauss%ww(ni,l)*smb(2) + &
1754 (dw_loc(1,ni)*tensor_loc(1,2,l) + dw_loc(2,ni)*tensor_loc(1,6,l))*ray*mesh%gauss%rj(l,m)
1755 v5_loc(ix) = v5_loc(ix) + mesh%gauss%ww(ni,l)*smb(5) + &
1756 (dw_loc(1,ni)*tensor_loc(3,1,l) + dw_loc(2,ni)*tensor_loc(3,5,l))*ray*mesh%gauss%rj(l,m)
1757 v6_loc(ix) = v6_loc(ix) + mesh%gauss%ww(ni,l)*smb(6) + &
1758 (dw_loc(1,ni)*tensor_loc(3,2,l) + dw_loc(2,ni)*tensor_loc(3,6,l))*ray*mesh%gauss%rj(l,m)
1764 v14_loc(ix) = v14_loc(ix) + mesh%gauss%ww(ni,l)*smb(4) + &
1765 (dw_loc(1,ni)*tensor_loc(2,2,l) + dw_loc(2,ni)*tensor_loc(2,6,l))*ray*mesh%gauss%rj(l,m)
1766 v23_loc(ix) = v23_loc(ix) + mesh%gauss%ww(ni,l)*smb(3) + &
1767 (dw_loc(1,ni)*tensor_loc(2,1,l) + dw_loc(2,ni)*tensor_loc(2,5,l))*ray*mesh%gauss%rj(l,m)
1771 CALL vecsetvalues(vb_3_145, 2*nw, idxm_2, v14_loc, add_values, ierr)
1772 CALL vecsetvalues(vb_3_236, 2*nw, idxm_2, v23_loc, add_values, ierr)
1773 CALL vecsetvalues(vb_3_145, nw, idxm_1, v5_loc, add_values, ierr)
1774 CALL vecsetvalues(vb_3_236, nw, idxm_1, v6_loc, add_values, ierr)
1777 CALL vecassemblybegin(vb_3_145,ierr)
1778 CALL vecassemblyend(vb_3_145,ierr)
1779 CALL vecassemblybegin(vb_3_236,ierr)
1780 CALL vecassemblyend(vb_3_236,ierr)
1785 exterior_temperature, cb)
1789 TYPE(mesh_type) :: mesh
1791 INTEGER ,
DIMENSION(:),
INTENT(IN) :: temp_list_robin_sides
1792 REAL(KIND=8),
DIMENSION(:),
INTENT(IN) :: convection_coeff, exterior_temperature
1793 REAL(KIND=8),
DIMENSION(mesh%gauss%n_ws) :: c_loc
1794 INTEGER,
DIMENSION(mesh%gauss%n_ws) :: idxm
1795 INTEGER :: nws, ms, ls, ni, i, iglob
1796 REAL(KIND=8) :: ray, x
1797 INTEGER,
DIMENSION(1:1) :: coeff_index
1800 petscerrorcode :: ierr
1802 nws = mesh%gauss%n_ws
1805 IF (minval(abs(temp_list_robin_sides - mesh%sides(ms))) > 0) cycle
1807 coeff_index = minloc(abs(temp_list_robin_sides - mesh%sides(ms)))
1808 DO ls = 1, mesh%gauss%l_Gs
1810 ray = sum(mesh%rr(1,mesh%jjs(:,ms)) * mesh%gauss%wws(:,ls))
1811 x = convection_coeff(coeff_index(1)) * exterior_temperature(coeff_index(1)) * &
1812 ray * mesh%gauss%rjs(ls,ms)
1814 c_loc(ni) = c_loc(ni) + x * mesh%gauss%wws(ni,ls)
1819 iglob = vv_1_la%loc_to_glob(1,i)
1822 CALL vecsetvalues(cb, nws, idxm, c_loc, add_values, ierr)
1825 CALL vecassemblybegin(cb,ierr)
1826 CALL vecassemblyend(cb,ierr)
subroutine qs_ns_stab_new(mesh, vv_1_LA, vv_2_LA, mode, ff, vel_tot, V1m, vit, P, dudt, phalf, nlhalf, dt, vb_2_14, vb_2_23, vb_1_5, vb_1_6, rotv_v, vel_tot_max)
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 qs_01_div_hybrid_2006(vv_mesh, pp_mesh, pp_LA, mode, gg, pb_1, pb_2)
subroutine qs_ns_mom_compute_residual_les(mesh, vv_1_LA, vv_2_LA, mode, ff, V1m, P, rotb_b, tensor, tensor_gauss, vb_2_14, vb_2_23, vb_1_5, vb_1_6)
real(kind=8), dimension(:,:), pointer rj
subroutine qs_00_gauss_surface(mesh, vv_1_LA, temp_list_robin_sides, convection_coeff, exterior_temperature, cb)
subroutine, public p2_p3(aij)
subroutine error_petsc(string)
subroutine qs_00_gauss(mesh, LA, heat_capa, ff, ff_gauss, vect)
subroutine qs_01_div_hybrid_generic(type_fe_velocity, vv_mesh, pp_mesh, pp_LA, mode, gg, pb_1, pb_2)
subroutine qs_ns_stab_3x3(mesh, vv_3_LA, mode, ff, vel_tot, V1m, vit, P, dudt, phalf, nlhalf, dt, vb_145, vb_236, rotv_v, vel_tot_max)
subroutine, public p1_p2(aij)
subroutine qs_00(mesh, LA, ff, vect)
subroutine rhs_3x3(mesh, vv_3_LA, mode, rhs_in, vb_145, vb_236, opt_tensor, opt_tensor_scaln_bdy)
subroutine qs_ns_mom_compute_residual_les_3x3(mesh, vv_3_LA, mode, ff, V1m, P, rotb_b, tensor, tensor_gauss, vb_3_145, vb_3_236)
subroutine qs_ns_momentum_stab_new(mesh, vv_1_LA, vv_2_LA, mode, ff, V1m, P, vb_2_14, vb_2_23, vb_1_5, vb_1_6, rotb_b, tensor, tensor_surface_gauss, stab, momentum, momentum_LES, visc_grad_vel, visc_entro)
subroutine inject_generic(type_fe_velocity, jj_c, jj_f, pp_c, pp_f)