6 SUBROUTINE qs_00_m(mesh, alpha, ia, ja, a0)
15 REAL(KIND=8),
INTENT(IN) :: alpha
16 INTEGER,
DIMENSION(:),
INTENT(IN) :: ia
17 INTEGER,
DIMENSION(:),
INTENT(IN) :: ja
18 REAL(KIND=8),
DIMENSION(:),
INTENT(INOUT) :: a0
20 INTEGER :: m, l, ni, nj, i, j, p
23 TYPE(mesh_type
),
TARGET :: mesh
24 INTEGER,
DIMENSION(:,:),
POINTER :: jj
25 INTEGER,
POINTER :: me
36 DO nj = 1, n_w; j = jj(nj, m)
37 DO ni = 1, n_w; i = jj(ni, m)
40 x = ww(nj,l) * al * ww(ni,l)
41 DO p = ia(i), ia(i+1) - 1
42 IF (ja(p) == j) then; a0(p) = a0(p) + x; exit;
64 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: vv
65 INTEGER,
DIMENSION(:),
INTENT(IN) :: ia
66 INTEGER,
DIMENSION(:),
INTENT(IN) :: ja
67 REAL(KIND=8),
DIMENSION(:),
INTENT(INOUT) :: a0
69 TYPE(mesh_type
),
TARGET :: mesh
70 INTEGER,
DIMENSION(:,:),
POINTER :: jj
71 INTEGER,
POINTER :: me
73 INTEGER :: m, l, ni, nj, i, j, p, k
75 REAL(KIND=8),
DIMENSION(mesh%gauss%k_d) :: vl
86 vl = vl + vv(:,jj(ni,m)) * ww(ni,l)
92 DO nj = 1, n_w; j = jj(nj, m)
93 DO ni = 1, n_w; i = jj(ni, m)
97 x = x + vl(k) * dw(k, ni, l, m)
101 DO p = ia(i), ia(i+1) - 1
102 IF (ja(p) == j) then; a0(p) = a0(p) + x; exit;
124 REAL(KIND=8),
DIMENSION(:),
INTENT(IN) :: ff
125 INTEGER,
DIMENSION(:),
INTENT(IN) :: ia
126 INTEGER,
DIMENSION(:),
INTENT(IN) :: ja
127 REAL(KIND=8),
DIMENSION(:),
INTENT(INOUT) :: a0
129 INTEGER :: m, l, ni, nj, n, i, j, p
130 REAL(KIND=8) :: al, x , ffl
132 TYPE(mesh_type
),
TARGET :: mesh
133 INTEGER,
DIMENSION(:,:),
POINTER :: jj
134 INTEGER,
POINTER :: me
146 ffl = ffl + ff(jj(n,m)) * ww(n,l)
151 DO nj = 1, n_w; j = jj(nj, m)
152 DO ni = 1, n_w; i = jj(ni, m)
155 x = ww(nj,l) * al * ww(ni,l)
156 DO p = ia(i), ia(i+1) - 1
157 IF (ja(p) == j) then; a0(p) = a0(p) + x; exit;
180 REAL(KIND=8),
INTENT(IN) :: alpha
181 INTEGER,
DIMENSION(:),
INTENT(IN) :: ia
182 INTEGER,
DIMENSION(:),
INTENT(IN) :: ja
183 REAL(KIND=8),
DIMENSION(:),
INTENT(INOUT) :: a0
185 INTEGER :: m, l, ni, nj, i, j, p
186 REAL(KIND=8) :: al, x
188 TYPE(mesh_type
),
TARGET :: mesh
189 INTEGER,
DIMENSION(:,:),
POINTER :: jj
190 INTEGER,
POINTER :: me
202 DO nj = 1, n_w; j = jj(nj, m)
203 DO ni = 1, n_w; i = jj(ni, m)
206 x = al * sum(dw(:,nj,l,m) * dw(:,ni,l,m))
207 DO p = ia(i), ia(i+1) - 1
208 IF (ja(p) == j) then; a0(p) = a0(p) + x; exit;
230 REAL(KIND=8),
INTENT(IN) :: alpha
231 REAL(KIND=8),
DIMENSION(:,:),
INTENT(INOUT) :: bcd
233 INTEGER :: m, m_mother, l, ni, nj, i, j
234 REAL(KIND=8) :: al, x, mest
236 TYPE(mesh_type
),
TARGET :: mesh
237 INTEGER,
DIMENSION(:,:),
POINTER :: jj
238 INTEGER,
POINTER :: me
246 m_mother = (m-1)/n_w + 1
250 mest = mest + rj(l,m)
252 mest = alpha*(n_w*mest)**(1.d0/k_d)
258 nj = n_w; j = jj(nj, m)
259 ni = n_w; i = jj(ni, m)
261 x = al * sum(dw(:,nj,l,m) * dw(:,ni,l,m))
262 bcd(m_mother,n_w+1) = bcd(m_mother,n_w+1) + x
281 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: gg
282 INTEGER,
DIMENSION(:),
INTENT(IN) :: ia
283 INTEGER,
DIMENSION(:),
INTENT(IN) :: ja
284 REAL(KIND=8),
DIMENSION(:),
INTENT(INOUT) :: a0
286 TYPE(mesh_type
),
TARGET :: mesh
287 INTEGER,
DIMENSION(:,:),
POINTER :: jj
288 INTEGER,
POINTER :: me
292 INTEGER :: l, k, ni, nj, p, m, i, j
293 REAL(KIND=8),
DIMENSION(mesh%gauss%k_d) :: gl
295 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w) :: y
301 boucle_mm :
DO m = 1, me
303 boucle_l :
DO l = 1, l_g
306 boucle_k :
DO k = 1, k_d
307 boucle_ni :
DO ni =1 ,n_w
308 gl(k) = gl(k) + gg(k, jj(ni,m)) * ww(ni,l)
313 boucle_ni_2 :
DO ni = 1, n_w
314 boucle_k_2 :
DO k = 1, k_d
315 y(ni) = y(ni) + gl(k) * dw(k,ni,l,m)
319 boucle_ni_3 :
DO ni = 1, n_w
321 boucle_nj :
DO nj = 1, n_w
323 x = rj(l,m) * y(nj) * y(ni)
324 boucle_p :
DO p = ia(i), ia(i+1) - 1
351 REAL(KIND=8),
INTENT(IN) :: alpha
352 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: gg
353 INTEGER,
DIMENSION(:),
INTENT(IN) :: ia
354 INTEGER,
DIMENSION(:),
INTENT(IN) :: ja
355 REAL(KIND=8),
DIMENSION(:),
INTENT(INOUT) :: a0
357 TYPE(mesh_type
),
TARGET :: mesh
358 INTEGER,
DIMENSION(:,:),
POINTER :: jj
359 INTEGER,
POINTER :: me
363 INTEGER :: l, k, ni, nj, p, m, i, j
364 REAL(KIND=8),
DIMENSION(mesh%gauss%k_d) :: gl
366 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w) :: y
374 boucle_mm :
DO m = 1, me
376 boucle_l :
DO l = 1, l_g
379 boucle_k :
DO k = 1, k_d
380 boucle_ni :
DO ni =1 ,n_w
381 gl(k) = gl(k) + gg(k, jj(ni,m)) * ww(ni,l)
386 boucle_ni_2 :
DO ni = 1, n_w
387 boucle_k_2 :
DO k = 1, k_d
388 y(ni) = y(ni) + gl(k) * dw(k,ni,l,m)
392 boucle_ni_3 :
DO ni = 1, n_w
394 boucle_nj :
DO nj = 1, n_w
396 x = rj(l,m) * y(nj) * y(ni)
397 boucle_p :
DO p = ia(i), ia(i+1) - 1
424 REAL(KIND=8),
INTENT(IN) :: alpha, param
425 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: gg
426 INTEGER,
DIMENSION(:),
INTENT(IN) :: ia
427 INTEGER,
DIMENSION(:),
INTENT(IN) :: ja
428 REAL(KIND=8),
DIMENSION(:),
INTENT(INOUT) :: a0
430 TYPE(mesh_type
),
TARGET :: mesh
431 INTEGER,
DIMENSION(:,:),
POINTER :: jj
432 INTEGER,
POINTER :: me
436 INTEGER :: l, k, ni, nj, p, m, i, j
437 REAL(KIND=8),
DIMENSION(mesh%gauss%k_d) :: gl
438 REAL(KIND=8) :: x, mest, hloc
439 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w) :: y
451 mest = mest + rj(l,m)
453 hloc = param*mest**(1.d0/k_d)
460 gl(k) = gl(k) + gg(k, jj(ni,m)) * ww(ni,l)
467 y(ni) = y(ni) + gl(k) * dw(k,ni,l,m)
475 x = rj(l,m) * y(nj) * (ww(ni,l) + hloc*y(ni))
476 DO p = ia(i), ia(i+1) - 1
502 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: gg
503 INTEGER,
DIMENSION(:),
INTENT(IN) :: ia
504 INTEGER,
DIMENSION(:),
INTENT(IN) :: ja
505 REAL(KIND=8),
DIMENSION(:),
INTENT(INOUT) :: a0
507 TYPE(mesh_type
),
TARGET :: mesh
508 INTEGER,
DIMENSION(:,:),
POINTER :: jj
509 INTEGER,
POINTER :: me
513 INTEGER :: l, k, ni, nj, p, m, i, j
514 REAL(KIND=8),
DIMENSION(mesh%gauss%k_d) :: gl
515 REAL(KIND=8) :: x, mest, hloc
516 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w) :: y
524 boucle_mm :
DO m = 1, me
528 mest = mest + rj(l,m)
530 hloc = mest**(1.d0/k_d)
532 boucle_l :
DO l = 1, l_g
535 boucle_k :
DO k = 1, k_d
536 boucle_ni :
DO ni =1 ,n_w
537 gl(k) = gl(k) + gg(k, jj(ni,m)) * ww(ni,l)
542 boucle_ni_2 :
DO ni = 1, n_w
543 boucle_k_2 :
DO k = 1, k_d
544 y(ni) = y(ni) + gl(k) * dw(k,ni,l,m)
548 boucle_ni_3 :
DO ni = 1, n_w
550 boucle_nj :
DO nj = 1, n_w
552 x = rj(l,m) * y(nj) * y(ni)
553 boucle_p :
DO p = ia(i), ia(i+1) - 1
555 a0(p) = a0(p) + x*hloc
579 REAL(KIND=8),
INTENT(IN) :: visco, alpha
580 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: gg
581 INTEGER,
DIMENSION(:),
INTENT(IN) :: ia
582 INTEGER,
DIMENSION(:),
INTENT(IN) :: ja
583 REAL(KIND=8),
DIMENSION(:),
INTENT(INOUT) :: a0
585 TYPE(mesh_type
),
TARGET :: mesh
586 INTEGER,
DIMENSION(:,:),
POINTER :: jj
587 INTEGER,
POINTER :: me
589 INTEGER :: k, l, m, ni, nj, i, j, p
590 REAL(KIND=8),
DIMENSION(mesh%gauss%k_d) :: gl
591 REAL(KIND=8) :: dg, xij, masslm, viscolm
592 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w,mesh%gauss%n_w,mesh%gauss%l_G) :: wwprod
593 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w,mesh%gauss%n_w) :: aij
594 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w) :: y
603 wwprod(ni,nj,l) = ww(ni,l)*ww(nj,l)
616 gl(k) = gl(k) + gg(k, jj(ni,m)) * ww(ni,l)
617 dg = dg + gg(k, jj(ni,m)) * dw(k,ni,l,m)
620 viscolm = visco*rj(l,m)
621 masslm = (alpha+0.5*dg)*rj(l,m)
626 y(ni) = y(ni) + gl(k) * dw(k,ni,l,m)
631 DO ni = 1, n_w; i = jj(ni, m)
632 DO nj = 1, n_w; j = jj(nj, m)
636 xij = xij + dw(k,nj,l,m) * dw(k,ni,l,m)
639 aij(ni,nj) = aij(ni,nj) + viscolm*xij + masslm*wwprod(ni,nj,l) + &
647 DO ni = 1, n_w; i = jj(ni, m)
648 DO nj = 1, n_w; j = jj(nj, m)
649 DO p = ia(i), ia(i+1) - 1
650 IF (ja(p) == j) then; a0(p) = a0(p) + aij(ni,nj); exit;
672 REAL(KIND=8),
INTENT(IN) :: visco, alpha
673 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: gg
674 INTEGER,
DIMENSION(:),
INTENT(IN) :: ia
675 INTEGER,
DIMENSION(:),
INTENT(IN) :: ja
676 REAL(KIND=8),
DIMENSION(:),
INTENT(INOUT) :: a0
678 TYPE(mesh_type
),
TARGET :: mesh
679 INTEGER,
DIMENSION(:,:),
POINTER :: jj
680 INTEGER,
POINTER :: me
682 INTEGER :: k, l, m, ni, nj, i, j, p
683 REAL(KIND=8),
DIMENSION(mesh%gauss%k_d) :: gl
684 REAL(KIND=8) :: xij, masslm, viscolm
685 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w,mesh%gauss%n_w,mesh%gauss%l_G) :: wwprod
686 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w,mesh%gauss%n_w) :: aij
687 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w) :: y
697 wwprod(ni,nj,l) = ww(ni,l)*ww(nj,l)
709 gl(k) = gl(k) + gg(k, jj(ni,m)) * ww(ni,l)
712 viscolm = visco*rj(l,m)
713 masslm = alpha*rj(l,m)
718 y(ni) = y(ni) + gl(k) * dw(k,ni,l,m)
723 DO ni = 1, n_w; i = jj(ni, m)
724 DO nj = 1, n_w; j = jj(nj, m)
728 xij = xij + dw(k,nj,l,m) * dw(k,ni,l,m)
731 aij(ni,nj) = aij(ni,nj) + viscolm*xij + masslm*wwprod(ni,nj,l) + &
739 DO ni = 1, n_w; i = jj(ni, m)
740 DO nj = 1, n_w; j = jj(nj, m)
741 DO p = ia(i), ia(i+1) - 1
742 IF (ja(p) == j) then; a0(p) = a0(p) + aij(ni,nj); exit;
763 REAL(KIND=8),
INTENT(IN) :: visco, alpha
764 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: gg
765 INTEGER,
DIMENSION(:),
INTENT(IN) :: ia
766 INTEGER,
DIMENSION(:),
INTENT(IN) :: ja
767 REAL(KIND=8),
DIMENSION(:),
INTENT(INOUT) :: a0
769 TYPE(mesh_type
),
TARGET :: mesh
770 INTEGER,
DIMENSION(:,:),
POINTER :: jj
771 INTEGER,
POINTER :: me
773 INTEGER :: k, l, m, ni, nj, i, j, p
774 REAL(KIND=8),
DIMENSION(mesh%gauss%k_d) :: gl
775 REAL(KIND=8) :: x, xij, masslm, viscolm
776 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w,mesh%gauss%n_w,mesh%gauss%l_G) :: wwprod
777 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w) :: y
786 wwprod(ni,nj,l) = ww(ni,l)*ww(nj,l)
794 viscolm = visco*rj(l,m)
795 masslm = alpha*rj(l,m)
800 gl(k) = gl(k) + gg(k, jj(ni,m)) * ww(ni,l)
807 y(ni) = y(ni) + gl(k) * dw(k,ni,l,m)
812 DO ni = 1, n_w; i = jj(ni, m)
813 DO nj = 1, n_w; j = jj(nj, m)
817 xij = xij + dw(k,nj,l,m) * dw(k,ni,l,m)
820 x = viscolm*xij + masslm*wwprod(ni,nj,l) + &
821 y(nj)*ww(ni,l) - ww(nj,l)*y(ni)
823 DO p = ia(i), ia(i+1) - 1
824 IF (ja(p) == j) then; a0(p) = a0(p) + x; exit;
847 REAL(KIND=8),
INTENT(IN) :: visco, alpha
848 INTEGER,
DIMENSION(:),
INTENT(IN) :: ia
849 INTEGER,
DIMENSION(:),
INTENT(IN) :: ja
850 REAL(KIND=8),
DIMENSION(:),
INTENT(INOUT) :: a0
852 TYPE(mesh_type
),
TARGET :: mesh
853 INTEGER,
DIMENSION(:,:),
POINTER :: jj
854 INTEGER,
POINTER :: me
856 INTEGER :: k, l, m, ni, nj, i, j, p
857 REAL(KIND=8) :: x, xij, masslm, viscolm
858 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w,mesh%gauss%n_w,mesh%gauss%l_G) :: wwprod
867 wwprod(ni,nj,l) = ww(ni,l)*ww(nj,l)
875 viscolm = visco*rj(l,m)
876 masslm = alpha*rj(l,m)
878 DO ni = 1, n_w; i = jj(ni, m)
879 DO nj = 1, n_w; j = jj(nj, m)
883 xij = xij + dw(k,nj,l,m) * dw(k,ni,l,m)
886 x = viscolm*xij + masslm*wwprod(ni,nj,l)
888 DO p = ia(i), ia(i+1) - 1
889 IF (ja(p) == j) then; a0(p) = a0(p) + x; exit;
910 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: gg
911 INTEGER,
DIMENSION(:),
INTENT(IN) :: ia
912 INTEGER,
DIMENSION(:),
INTENT(IN) :: ja
913 REAL(KIND=8),
DIMENSION(:),
INTENT(INOUT) :: a0
915 TYPE(mesh_type
),
TARGET :: mesh
916 INTEGER,
DIMENSION(:,:),
POINTER :: jj
917 INTEGER,
POINTER :: me
919 INTEGER :: k, l, m, ni, nj, i, j, p
920 REAL(KIND=8),
DIMENSION(mesh%gauss%k_d) :: gl
921 REAL(KIND=8) :: dg, x, masslm
922 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w,mesh%gauss%n_w,mesh%gauss%l_G) :: wwprod
923 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w) :: y
932 wwprod(ni,nj,l) = ww(ni,l)*ww(nj,l)
944 gl(k) = gl(k) + gg(k, jj(ni,m)) * ww(ni,l)
945 dg = dg + gg(k, jj(ni,m)) * dw(k,ni,l,m)
948 masslm = 0.5*dg*rj(l,m)
953 y(ni) = y(ni) + gl(k) * dw(k,ni,l,m)
958 DO ni = 1, n_w; i = jj(ni, m)
959 DO nj = 1, n_w; j = jj(nj, m)
961 x = masslm*wwprod(ni,nj,l) + y(nj)*ww(ni,l)
963 DO p = ia(i), ia(i+1) - 1
964 IF (ja(p) == j) then; a0(p) = a0(p) + x; exit;
985 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: gg
986 INTEGER,
DIMENSION(:),
INTENT(IN) :: ia
987 INTEGER,
DIMENSION(:),
INTENT(IN) :: ja
988 REAL(KIND=8),
DIMENSION(:),
INTENT(INOUT) :: a0
990 TYPE(mesh_type
),
TARGET :: mesh
991 INTEGER,
DIMENSION(:,:),
POINTER :: jj
992 INTEGER,
POINTER :: me
994 INTEGER :: k, l, m, ni, nj, i, j, p
995 REAL(KIND=8),
DIMENSION(mesh%gauss%k_d) :: gl
996 REAL(KIND=8) :: dg, x, masslm, rjlm
997 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w,mesh%gauss%n_w,mesh%gauss%l_G) :: wwprod
998 REAL(KIND=8),
DIMENSION(mesh%gauss%k_d,mesh%gauss%n_w) :: dw_loc
999 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w) :: y
1000 INTEGER,
DIMENSION(mesh%gauss%n_w) :: j_loc
1009 wwprod(ni,nj,l) = 0.5d0*ww(ni,l)*ww(nj,l)
1016 j_loc(ni) = jj(ni,m)
1026 dw_loc(k,ni) = dw(k,ni,l,m)
1027 gl(k) = gl(k) + gg(k, j_loc(ni)) * ww(ni,l)
1028 dg = dg + gg(k, j_loc(ni)) * dw_loc(k,ni)
1037 y(ni) = y(ni) + gl(k) * dw_loc(k,ni)
1041 DO ni = 1, n_w; i = j_loc(ni)
1042 DO nj = 1, n_w; j = j_loc(nj)
1044 x = masslm*wwprod(ni,nj,l) + y(nj)*ww(ni,l)
1046 DO p = ia(i), ia(i+1) - 1
1047 IF (ja(p) == j) then; a0(p) = a0(p) + x; exit;
1067 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: gg
1068 INTEGER,
DIMENSION(:),
INTENT(IN) :: ia
1069 INTEGER,
DIMENSION(:),
INTENT(IN) :: ja
1070 REAL(KIND=8),
DIMENSION(:),
INTENT(INOUT) :: a0
1072 TYPE(mesh_type
),
TARGET :: mesh
1073 INTEGER,
DIMENSION(:,:),
POINTER :: jj
1074 INTEGER,
POINTER :: me
1076 INTEGER :: k, l, m, ni, nj, i, j, p
1077 REAL(KIND=8),
DIMENSION(mesh%gauss%k_d) :: gl
1079 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w) :: y
1092 gl(k) = gl(k) + gg(k, jj(ni,m)) * ww(ni,l)
1099 y(ni) = y(ni) + gl(k) * dw(k,ni,l,m)
1104 DO ni = 1, n_w; i = jj(ni, m)
1105 DO nj = 1, n_w; j = jj(nj, m)
1109 DO p = ia(i), ia(i+1) - 1
1110 IF (ja(p) == j) then; a0(p) = a0(p) + x; exit;
1130 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: gg
1131 REAL(KIND=8),
INTENT(IN) :: alpha
1132 INTEGER,
DIMENSION(:),
INTENT(IN) :: ia
1133 INTEGER,
DIMENSION(:),
INTENT(IN) :: ja
1134 REAL(KIND=8),
DIMENSION(:),
INTENT(INOUT) :: a0
1136 TYPE(mesh_type
),
TARGET :: mesh
1137 INTEGER,
DIMENSION(:,:),
POINTER :: jj
1138 INTEGER,
POINTER :: me
1140 INTEGER :: k, l, m, ni, nj, i, j, p
1141 REAL(KIND=8),
DIMENSION(mesh%gauss%k_d) :: gl
1142 REAL(KIND=8) :: x, mest, hloc
1143 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w) :: y
1153 mest = mest + rj(l,m)
1155 hloc = alpha*mest**(1.d0/k_d)
1162 gl(k) = gl(k) + gg(k, jj(ni,m)) * ww(ni,l)
1169 y(ni) = y(ni) + gl(k) * dw(k,ni,l,m)
1174 DO ni = 1, n_w; i = jj(ni, m)
1175 DO nj = 1, n_w; j = jj(nj, m)
1179 DO p = ia(i), ia(i+1) - 1
1180 IF (ja(p) == j) then; a0(p) = a0(p) + hloc*x; exit;
1200 REAL(KIND=8),
DIMENSION(:),
INTENT(IN) :: ff
1201 INTEGER,
DIMENSION(:),
INTENT(IN) :: ia
1202 INTEGER,
DIMENSION(:),
INTENT(IN) :: ja
1203 REAL(KIND=8),
DIMENSION(:),
INTENT(INOUT) :: a0
1205 INTEGER :: m, l, ni, nj, i, j, k, p
1206 REAL(KIND=8) :: fl, x, xij, h, exp
1208 TYPE(mesh_type
),
TARGET :: mesh
1209 INTEGER,
DIMENSION(:,:),
POINTER :: jj
1210 INTEGER,
POINTER :: me
1218 CASE(3); exp = 1.d0/2
1219 CASE(6); exp = 1.d0/2
1220 CASE(4); exp = 1.d0/3
1221 CASE(10); exp = 1.d0/3
1236 fl = fl + ff(jj(ni,m)) * ww(ni,l)
1240 DO ni = 1, n_w; i = jj(ni, m)
1241 DO nj = 1, n_w; j = jj(nj, m)
1245 xij = xij + dw(k,nj,l,m) * dw(k,ni,l,m)
1249 DO p = ia(i), ia(i+1) - 1
1250 IF (ja(p) == j) then; a0(p) = a0(p) + x; exit;
1270 REAL(KIND=8),
DIMENSION(:),
INTENT(IN) :: ff
1271 INTEGER,
DIMENSION(:),
INTENT(IN) :: ia
1272 INTEGER,
DIMENSION(:),
INTENT(IN) :: ja
1273 REAL(KIND=8),
DIMENSION(:),
INTENT(INOUT) :: a0
1275 INTEGER :: m, l, ni, nj, i, j, k, p
1276 REAL(KIND=8) :: fl, x, xij
1278 TYPE(mesh_type
),
TARGET :: mesh
1279 INTEGER,
DIMENSION(:,:),
POINTER :: jj
1280 INTEGER,
POINTER :: me
1292 fl = fl + ff(jj(ni,m)) * ww(ni,l)
1296 DO ni = 1, n_w; i = jj(ni, m)
1297 DO nj = 1, n_w; j = jj(nj, m)
1301 xij = xij + dw(k,nj,l,m) * dw(k,ni,l,m)
1305 DO p = ia(i), ia(i+1) - 1
1306 IF (ja(p) == j) then; a0(p) = a0(p) + x; exit;
1326 REAL(KIND=8),
INTENT(IN) :: p
1327 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: vstar
1328 REAL(KIND=8),
DIMENSION(:),
INTENT(IN) :: ff
1329 INTEGER,
DIMENSION(:),
INTENT(IN) :: ia
1330 INTEGER,
DIMENSION(:),
INTENT(IN) :: ja
1331 REAL(KIND=8),
DIMENSION(:),
INTENT(INOUT) :: a0
1333 TYPE(mesh_type
),
TARGET :: mesh
1334 INTEGER,
DIMENSION(:,:),
POINTER :: jj
1335 INTEGER,
POINTER :: me
1337 REAL(KIND=8) :: x, xrjlm, xij
1338 REAL(KIND=8),
DIMENSION(mesh%gauss%k_d) :: vl, gl
1339 INTEGER :: ni, nj, i, j, k, l, m, q
1353 vl(k) = vl(k) + vstar(k,jj(ni,m)) * ww(ni,l)
1354 gl(k) = gl(k) + ff(jj(ni,m)) * dw(k,ni,l,m)
1362 IF (abs(x) .LT. 1.d-12)
THEN
1365 xrjlm = (abs(x)**(p-2.d0))* rj(l,m)
1368 DO ni = 1, n_w; i = jj(ni, m)
1369 DO nj = 1, n_w; j = jj(nj, m)
1373 xij = xij + dw(k,nj,l,m) * dw(k,ni,l,m)
1377 DO q = ia(i), ia(i+1) - 1
1378 IF (ja(q) == j) then; a0(q) = a0(q) + x; exit;
1398 REAL(KIND=8),
INTENT(IN) :: p
1399 REAL(KIND=8),
DIMENSION(:),
INTENT(IN) :: ff
1400 INTEGER,
DIMENSION(:),
INTENT(IN) :: ia
1401 INTEGER,
DIMENSION(:),
INTENT(IN) :: ja
1402 REAL(KIND=8),
DIMENSION(:),
INTENT(INOUT) :: a0
1404 TYPE(mesh_type
),
TARGET :: mesh
1405 INTEGER,
DIMENSION(:,:),
POINTER :: jj
1406 INTEGER,
POINTER :: me
1408 REAL(KIND=8) :: x, xrjlm, xij
1409 REAL(KIND=8),
DIMENSION(mesh%gauss%k_d) :: gl
1410 INTEGER :: ni, nj, i, j, k, l, m, q
1423 gl(k) = gl(k) + ff(jj(ni,m)) * dw(k,ni,l,m)
1431 IF (abs(x) .LT. 1.d-20)
THEN
1434 xrjlm = (sqrt(x)**(p-2.d0))* rj(l,m)
1437 DO ni = 1, n_w; i = jj(ni, m)
1438 DO nj = 1, n_w; j = jj(nj, m)
1442 xij = xij + dw(k,nj,l,m) * dw(k,ni,l,m)
1446 DO q = ia(i), ia(i+1) - 1
1447 IF (ja(q) == j) then; a0(q) = a0(q) + x; exit;
1471 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: gg
1472 REAL(KIND=8),
DIMENSION(:),
INTENT(IN) :: stab
1473 INTEGER,
INTENT(IN) :: istab
1474 INTEGER,
DIMENSION(:),
INTENT(IN) :: ia
1475 INTEGER,
DIMENSION(:),
INTENT(IN) :: ja
1476 REAL(KIND=8),
DIMENSION(:),
INTENT(INOUT) :: a0
1478 TYPE(mesh_type
),
TARGET :: mesh
1479 INTEGER,
DIMENSION(:,:),
POINTER :: jj
1480 INTEGER,
POINTER :: me
1482 INTEGER :: k, kp, l, m, ni, nj, i, j, p
1483 REAL(KIND=8),
DIMENSION(mesh%gauss%k_d) :: vl
1484 REAL(KIND=8) :: dg, x, xij, masslm, rjlm
1485 REAL(KIND=8) :: h,hmu,xrjlm, exponent
1486 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w,mesh%gauss%n_w,mesh%gauss%l_G) :: wwprod
1487 REAL(KIND=8),
DIMENSION(mesh%gauss%k_d,mesh%gauss%n_w) :: dw_loc
1488 REAL(KIND=8),
DIMENSION(mesh%gauss%k_d,mesh%gauss%k_d) :: gradv
1489 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w) :: vdw
1490 INTEGER,
DIMENSION(mesh%gauss%n_w) :: j_loc
1501 wwprod(ni,nj,l) = 0.5*ww(ni,l)*ww(nj,l)
1509 j_loc(ni) = jj(ni,m)
1517 hmu = stab(1)*h**(stab(2)*exponent)
1525 dw_loc = dw(:,:,l,m)
1530 vl(k) = vl(k) + gg(k, j_loc(ni)) * ww(ni,l)
1532 gradv(k,kp) = gradv(k,kp) + gg(k, j_loc(ni)) * dw_loc(kp,ni)
1535 dg = dg + gradv(k,k)
1541 IF (istab .EQ. 1)
THEN
1544 x = x + (gradv(k,kp) + gradv(kp,k))**2
1547 ELSE IF (istab .EQ. 2)
THEN
1550 x = x +(vl(kp)*gradv(k,kp))**2
1554 WRITE(*,*)
'qs_adv_stab_M: istab > 2'
1558 IF (abs(x) .LT. 1.d-12)
THEN
1561 xrjlm = hmu*(sqrt(x)**(stab(3)))* rjlm
1567 vdw(ni) = vdw(ni) + vl(k)*dw_loc(k,ni)
1571 DO ni = 1, n_w; i = j_loc(ni)
1572 DO nj = 1, n_w; j = j_loc(nj)
1576 IF (istab .EQ. 1)
THEN
1578 xij = xij + dw_loc(k,nj) * dw_loc(k,ni)
1580 ELSE IF (istab .EQ. 2)
THEN
1581 xij = vdw(ni)*vdw(nj)
1584 x = masslm*wwprod(ni,nj,l) + vdw(nj)*ww(ni,l)*rjlm + xrjlm * xij
1587 DO p = ia(i), ia(i+1) - 1
1588 IF (ja(p) == j) then; a0(p) = a0(p) + x; exit;
1610 REAL(KIND=8),
DIMENSION(:),
INTENT(IN) :: ff
1611 INTEGER,
DIMENSION(:),
INTENT(IN) :: ia, ja
1612 REAL(KIND=8),
DIMENSION(:),
INTENT(INOUT) :: a0
1614 REAL(KIND=8) ::
f, x, s
1615 INTEGER :: m, l, n, n1, i, j, p
1617 TYPE(mesh_type
),
TARGET :: mesh
1618 INTEGER,
DIMENSION(:,:),
POINTER :: jj
1619 INTEGER,
POINTER :: me
1629 f = sum(ff(jj(:,m)) * ww(:,l)) * rj(l,m)
1631 DO n = 1, n_w; i = jj(n, m)
1632 DO n1 = 1, n_w; j = jj(n1, m)
1633 s = dw(1,n,l,m) * dw(2,n1,l,m) - dw(2,n,l,m) * dw(1,n1,l,m)
1636 DO p = ia(i), ia(i+1) - 1
1637 IF (ja(p) == j) then; a0(p) = a0(p) + x; exit;
1661 REAL(KIND=8),
DIMENSION(:),
INTENT(IN) :: fs
1662 INTEGER,
DIMENSION(:),
INTENT(IN) :: ia
1663 INTEGER,
DIMENSION(:),
INTENT(IN) :: ja
1664 REAL(KIND=8),
DIMENSION(:),
INTENT(INOUT) :: a0
1666 INTEGER :: ms, ls, ns, ns1, i, j, q
1667 REAL(KIND=8) :: fls, x
1669 TYPE(mesh_type
),
TARGET :: mesh
1670 INTEGER,
DIMENSION(:,:),
POINTER :: js, is
1671 INTEGER,
POINTER :: mes
1683 fls = fls + fs(is(ns,ms)) * wws(ns,ls) * rjs(ls,ms)
1685 fls = fls * rjs(ls,ms)
1687 DO ns = 1, n_ws; i = js(ns, ms)
1688 DO ns1 = 1, n_ws; j = js(ns1, ms)
1689 x = wws(ns,ls) * fls * wws(ns1,ls)
1691 DO q = ia(i), ia(i+1) - 1
1692 IF (ja(q) == j) then; a0(q) = a0(q) + x; exit;
1711 REAL(KIND=8),
INTENT(IN) :: alpha
1712 INTEGER,
DIMENSION(:),
INTENT(IN) :: ia
1713 INTEGER,
DIMENSION(:),
INTENT(IN) :: ja
1714 REAL(KIND=8),
DIMENSION(:),
INTENT(INOUT) :: a0
1716 INTEGER :: m, l, n, q, n0, k, k1, k2, h, h1, h2, i, j, i_b, j_b, &
1718 REAL(KIND=8) :: fla, x
1720 TYPE(mesh_type
),
TARGET :: mesh
1721 INTEGER,
DIMENSION(:,:),
POINTER :: jj
1722 INTEGER,
POINTER :: me
1728 bloc_size = (
SIZE(ia) - 1)/3
1733 fla = alpha * rj(l,m)
1735 DO n = 1, n_w; i_b = jj(n, m)
1736 DO k = 1, k_d; k1 = modulo(k,k_d) + 1; k2 = modulo(k+1,k_d) + 1
1737 i = i_b + (k-1)*bloc_size
1739 DO n0 = 1, n_w; j_b = jj(n0,m)
1740 DO h = 1, k_d; h1 = modulo(h,k_d) + 1; h2 = modulo(h+1,k_d) + 1
1741 j = j_b + (h-1)*bloc_size
1744 x = dw(k1,n,l,m)*dw(h1,n0,l,m) + &
1745 dw(k2,n,l,m)*dw(h2,n0,l,m)
1747 x = - dw(h,n,l,m)*dw(k,n0,l,m)
1752 DO q = ia(i), ia(i+1) - 1
1753 IF (ja(q) == j) then; a0(q) = a0(q) + x; exit;
1776 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: gg
1777 INTEGER,
DIMENSION(:),
INTENT(IN) :: ia
1778 INTEGER,
DIMENSION(:),
INTENT(IN) :: ja
1779 REAL(KIND=8),
DIMENSION(:),
INTENT(INOUT) :: a0
1781 INTEGER :: m, l, n, q, n0, k, k1, k2, h, h1, h2, i, j, i_b, j_b, &
1784 REAL(KIND=8),
DIMENSION(3) :: gl
1786 TYPE(mesh_type
),
TARGET :: mesh
1787 INTEGER,
DIMENSION(:,:),
POINTER :: jj
1788 INTEGER,
POINTER :: me
1794 bloc_size = (
SIZE(ia) - 1)/3
1800 gl(k) = sum(gg(k, jj(:,m)) * ww(:,l)) * rj(l,m)
1803 DO n = 1, n_w; i_b = jj(n, m)
1804 DO k = 1, k_d; k1 = modulo(k,k_d) + 1; k2 = modulo(k+1,k_d) + 1
1805 i = i_b + (k-1)*bloc_size
1807 DO n0 = 1, n_w; j_b = jj(n0,m)
1808 DO h = 1, k_d; h1 = modulo(h,k_d) + 1; h2 = modulo(h+1,k_d) + 1
1809 j = j_b + (h-1)*bloc_size
1812 x = gl(h) * ( dw(k2,n,l,m) * dw(h1,n0,l,m) &
1813 - dw(k1,n,l,m) * dw(h2,n0,l,m) )
1816 s = 0;
IF (k > h) s = 1
1817 x = (-1)**(k+h+s) * &
1818 ( dw(o,n,l,m) * (gl(h1)*dw(h1,n0,l,m) + gl(h2)*dw(h2,n0,l,m)) &
1819 + dw(h,n,l,m) * gl(h) * dw(o,n0,l,m) )
1824 DO q = ia(i), ia(i+1) - 1
1825 IF (ja(q) == j) then; a0(q) = a0(q) + x; exit;
1849 REAL(KIND=8),
DIMENSION(:),
INTENT(IN) :: fs
1850 INTEGER,
DIMENSION(:),
INTENT(IN) :: ia
1851 INTEGER,
DIMENSION(:),
INTENT(IN) :: ja
1852 REAL(KIND=8),
DIMENSION(:),
INTENT(INOUT) :: a0
1854 INTEGER :: ms, ls, ns, ns1, i, j, q, i_b, j_b, bloc_size, h, k
1855 REAL(KIND=8) :: fls, x, wwprod
1856 REAL(KIND=8),
DIMENSION(3,3) :: tab
1858 TYPE(mesh_type
),
TARGET :: mesh
1859 INTEGER,
DIMENSION(:,:),
POINTER :: js, is
1860 INTEGER,
POINTER :: mes
1867 bloc_size = (
SIZE(ia) - 1)/3
1872 fls = sum(fs(is(:,ms)) * wws(:,ls)) * rjs(ls,ms)
1874 tab(1,1) = rnorms(2,ls,ms)**2 + rnorms(3,ls,ms)**2
1875 tab(2,2) = rnorms(1,ls,ms)**2 + rnorms(3,ls,ms)**2
1876 tab(3,3) = rnorms(1,ls,ms)**2 + rnorms(2,ls,ms)**2
1878 tab(1,2) = -rnorms(2,ls,ms) * rnorms(1,ls,ms)
1879 tab(1,3) = -rnorms(3,ls,ms) * rnorms(1,ls,ms)
1880 tab(2,1) = -rnorms(1,ls,ms) * rnorms(2,ls,ms)
1881 tab(2,3) = -rnorms(3,ls,ms) * rnorms(2,ls,ms)
1882 tab(3,1) = -rnorms(1,ls,ms) * rnorms(3,ls,ms)
1883 tab(3,2) = -rnorms(2,ls,ms) * rnorms(3,ls,ms)
1886 DO ns = 1, n_ws; i_b = js(ns, ms)
1887 DO ns1 = 1, n_ws; j_b = js(ns1, ms)
1889 wwprod = wws(ns, ls) * wws(ns1, ls) * fls
1894 i = i_b + (k-1)*bloc_size; j = j_b + (h-1)*bloc_size
1896 x = wwprod * tab(k,h)
1898 DO q = ia(i), ia(i+1) - 1
1899 IF (ja(q) == j) then; a0(q) = a0(q) + x; exit;
1920 REAL(KIND=8),
INTENT(IN) :: alpha
1921 INTEGER,
DIMENSION(:),
INTENT(IN) :: ia
1922 INTEGER,
DIMENSION(:),
INTENT(IN) :: ja
1923 REAL(KIND=8),
DIMENSION(:),
INTENT(INOUT) :: a0
1925 INTEGER :: ms, ls, ns, ns1, i, j, q, i_b, j_b, bloc_size, h, k
1926 REAL(KIND=8) :: x, wwprod
1927 REAL(KIND=8),
DIMENSION(3,3) :: tab
1929 TYPE(mesh_type
),
TARGET :: mesh
1930 INTEGER,
DIMENSION(:,:),
POINTER :: js
1931 INTEGER,
POINTER :: mes
1937 bloc_size = (
SIZE(ia) - 1)/3
1942 tab(1,1) = rnorms(2,ls,ms)**2 + rnorms(3,ls,ms)**2
1943 tab(2,2) = rnorms(1,ls,ms)**2 + rnorms(3,ls,ms)**2
1944 tab(3,3) = rnorms(1,ls,ms)**2 + rnorms(2,ls,ms)**2
1946 tab(1,2) = -rnorms(2,ls,ms) * rnorms(1,ls,ms)
1947 tab(1,3) = -rnorms(3,ls,ms) * rnorms(1,ls,ms)
1948 tab(2,1) = -rnorms(1,ls,ms) * rnorms(2,ls,ms)
1949 tab(2,3) = -rnorms(3,ls,ms) * rnorms(2,ls,ms)
1950 tab(3,1) = -rnorms(1,ls,ms) * rnorms(3,ls,ms)
1951 tab(3,2) = -rnorms(2,ls,ms) * rnorms(3,ls,ms)
1953 tab = tab * rjs(ls,ms) * alpha
1955 DO ns = 1, n_ws; i_b = js(ns, ms)
1956 DO ns1 = 1, n_ws; j_b = js(ns1, ms)
1958 wwprod = wws(ns, ls) * wws(ns1, ls)
1963 i = i_b + (k-1)*bloc_size; j = j_b + (h-1)*bloc_size
1965 x = wwprod * tab(k,h)
1967 DO q = ia(i), ia(i+1) - 1
1968 IF (ja(q) == j) then; a0(q) = a0(q) + x; exit;
1991 REAL(KIND=8),
INTENT(IN) :: visco
1992 REAL(KIND=8),
DIMENSION(:),
INTENT(IN) :: ff
1993 INTEGER,
DIMENSION(:),
INTENT(IN) :: ia, ja
1994 REAL(KIND=8),
DIMENSION(:),
INTENT(INOUT) :: a0
1996 TYPE(mesh_type
),
TARGET :: mesh
1997 INTEGER,
DIMENSION(:,:),
POINTER :: jj
1998 INTEGER,
POINTER :: me
2000 INTEGER :: k, l, m, ni, nj, i, j, p
2001 REAL(KIND=8) :: x, xij, masslm, viscolm
2002 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w,mesh%gauss%n_w,mesh%gauss%l_G) :: wwprod
2011 wwprod(ni,nj,l) = ww(ni,l)*ww(nj,l)
2019 viscolm = visco*rj(l,m)
2023 masslm = masslm + ff(jj(ni,m))*ww(ni,l)
2025 masslm = masslm * rj(l,m)
2027 DO ni = 1, n_w; i = jj(ni, m)
2028 DO nj = 1, n_w; j = jj(nj, m)
2032 xij = xij + dw(k,nj,l,m) * dw(k,ni,l,m)
2035 x = viscolm*xij + masslm*wwprod(ni,nj,l)
2037 DO p = ia(i), ia(i+1) - 1
2038 IF (ja(p) == j) then; a0(p) = a0(p) + x; exit;
2060 REAL(KIND=8),
DIMENSION(:),
INTENT(IN) :: ff
2061 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: gg
2062 INTEGER,
DIMENSION(:),
INTENT(IN) :: ia, ja
2063 REAL(KIND=8),
DIMENSION(:),
INTENT(INOUT) :: a0
2064 REAL(KIND=8),
OPTIONAL,
INTENT(IN) :: a_skew
2066 TYPE(mesh_type
),
TARGET :: mesh
2067 INTEGER,
DIMENSION(:,:),
POINTER :: jj
2068 INTEGER,
POINTER :: me
2070 INTEGER :: k, l, m, ni, nj, i, j, p
2071 REAL(KIND=8),
DIMENSION(mesh%gauss%k_d) :: gl
2072 REAL(KIND=8) :: fl, dg, x, masslm, skew=1
2073 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w,mesh%gauss%n_w,mesh%gauss%l_G) :: wwprod
2074 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w) :: y
2084 wwprod(ni,nj,l) = ww(ni,l)*ww(nj,l)
2089 IF (present(a_skew))
THEN
2104 fl = fl + ff(jj(ni,m)) * ww(ni,l)
2106 gl(k) = gl(k) + gg(k, jj(ni,m)) * ww(ni,l)
2107 dg = dg + gg(k, jj(ni,m)) * dw(k,ni,l,m)
2110 masslm = (fl + skew*dg)*rj(l,m)
2116 y(ni) = y(ni) + gl(k) * dw(k,ni,l,m)
2122 DO ni = 1, n_w; i = jj(ni, m)
2123 DO nj = 1, n_w; j = jj(nj, m)
2125 x = masslm*wwprod(ni,nj,l) + y(nj)*ww(ni,l)
2127 DO p = ia(i), ia(i+1) - 1
2128 IF (ja(p) == j) then; a0(p) = a0(p) + x; exit;
2150 REAL(KIND=8),
INTENT(IN) :: mass
2151 REAL(KIND=8),
DIMENSION(:),
INTENT(IN) :: ff
2152 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: gg
2153 INTEGER,
DIMENSION(:),
INTENT(IN) :: ia, ja
2154 REAL(KIND=8),
DIMENSION(:),
INTENT(INOUT) :: a0
2155 REAL(KIND=8),
OPTIONAL,
INTENT(IN) :: a_skew
2157 TYPE(mesh_type
),
TARGET :: mesh
2158 INTEGER,
DIMENSION(:,:),
POINTER :: jj
2159 INTEGER,
POINTER :: me
2161 INTEGER :: k, l, m, ni, nj, i, j, p
2162 REAL(KIND=8),
DIMENSION(mesh%gauss%k_d) :: gl
2163 REAL(KIND=8) :: fl, dg, x, masslm, skew=1
2164 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w,mesh%gauss%n_w,mesh%gauss%l_G) :: wwprod
2165 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w) :: y
2175 wwprod(ni,nj,l) = ww(ni,l)*ww(nj,l)
2180 IF (present(a_skew))
THEN
2193 fl = fl + ff(jj(ni,m)) * ww(ni,l)
2195 gl(k) = gl(k) + gg(k, jj(ni,m)) * ww(ni,l)
2196 dg = dg + gg(k, jj(ni,m)) * dw(k,ni,l,m)
2199 masslm = (mass*fl + fl*skew*dg)*rj(l,m)
2204 y(ni) = y(ni) + gl(k) * dw(k,ni,l,m)
2210 DO ni = 1, n_w; i = jj(ni, m)
2211 DO nj = 1, n_w; j = jj(nj, m)
2213 x = masslm*wwprod(ni,nj,l) + y(nj)*ww(ni,l)
2215 DO p = ia(i), ia(i+1) - 1
2216 IF (ja(p) == j) then; a0(p) = a0(p) + x; exit;
2238 REAL(KIND=8),
INTENT(IN) :: alpha
2239 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: gg
2240 INTEGER,
DIMENSION(:),
INTENT(IN) :: ia, ja
2241 REAL(KIND=8),
DIMENSION(:),
INTENT(INOUT) :: a0
2242 REAL(KIND=8),
OPTIONAL,
INTENT(IN) :: a_skew
2244 TYPE(mesh_type
),
TARGET :: mesh
2245 INTEGER,
DIMENSION(:,:),
POINTER :: jj
2246 INTEGER,
POINTER :: me
2248 INTEGER :: k, l, m, ni, nj, i, j, p
2249 REAL(KIND=8),
DIMENSION(mesh%gauss%k_d) :: gl
2250 REAL(KIND=8) :: dg, x, masslm, skew
2251 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w,mesh%gauss%n_w,mesh%gauss%l_G) :: wwprod
2252 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w) :: y
2261 wwprod(ni,nj,l) = ww(ni,l)*ww(nj,l)
2266 IF (present(a_skew))
THEN
2281 gl(k) = gl(k) + gg(k, jj(ni,m)) * ww(ni,l)
2282 dg = dg + gg(k, jj(ni,m)) * dw(k,ni,l,m)
2285 masslm = (alpha+skew*dg)*rj(l,m)
2290 y(ni) = y(ni) + gl(k) * dw(k,ni,l,m)
2295 DO ni = 1, n_w; i = jj(ni, m)
2296 DO nj = 1, n_w; j = jj(nj, m)
2298 x = masslm*wwprod(ni,nj,l) + &
2301 DO p = ia(i), ia(i+1) - 1
2302 IF (ja(p) == j) then; a0(p) = a0(p) + x; exit;
2325 REAL(KIND=8),
INTENT(IN) :: alpha
2326 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: gg
2327 INTEGER,
DIMENSION(:),
INTENT(IN) :: ia, ja
2328 REAL(KIND=8),
DIMENSION(:),
INTENT(INOUT) :: a0
2330 TYPE(mesh_type
),
TARGET :: mesh
2331 INTEGER,
DIMENSION(:,:),
POINTER :: jj
2332 INTEGER,
POINTER :: me
2334 INTEGER :: k, l, m, ni, nj, i, j, p
2335 REAL(KIND=8),
DIMENSION(mesh%gauss%k_d) :: gl
2336 REAL(KIND=8) :: dg, x, masslm
2337 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w,mesh%gauss%n_w,mesh%gauss%l_G) :: wwprod
2338 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w) :: y
2348 wwprod(ni,nj,l) = ww(ni,l)*ww(nj,l)
2362 gl(k) = gl(k) + gg(k, jj(ni,m)) * ww(ni,l)
2363 dg = dg + gg(k, jj(ni,m)) * dw(k,ni,l,m)
2366 masslm = (alpha+dg)*rj(l,m)
2371 y(ni) = y(ni) + gl(k) * dw(k,ni,l,m)
2376 DO ni = 1, n_w; i = jj(ni, m)
2377 DO nj = 1, n_w; j = jj(nj, m)
2379 x = masslm*wwprod(ni,nj,l) + &
2382 DO p = ia(i), ia(i+1) - 1
2383 IF (ja(p) == j) then; a0(p) = a0(p) + x; exit;
2406 REAL(KIND=8),
INTENT(IN) :: alpha
2407 INTEGER,
DIMENSION(:),
INTENT(IN) :: ia
2408 INTEGER,
DIMENSION(:),
INTENT(IN) :: ja
2409 REAL(KIND=8),
DIMENSION(:),
INTENT(INOUT) :: a0
2411 INTEGER :: m, l, p, ni, nj, k, k1, h, i, j, i_b, j_b, &
2415 TYPE(mesh_type
),
TARGET :: mesh
2416 INTEGER,
DIMENSION(:,:),
POINTER :: jj
2417 INTEGER,
POINTER :: me
2423 bloc_size = (
SIZE(ia) - 1)/k_d
2428 DO ni = 1, n_w; i_b = jj(ni, m)
2430 i = i_b + (k-1)*bloc_size
2432 DO nj = 1, n_w; j_b = jj(nj,m)
2434 j = j_b + (h-1)*bloc_size
2436 x = dw(h,ni,l,m)*dw(k,nj,l,m) &
2437 + alpha*dw(k,ni,l,m)*dw(h,nj,l,m)
2440 x = x + dw(k1,ni,l,m)*dw(k1,nj,l,m)
2446 DO p = ia(i), ia(i+1) - 1
2447 IF (ja(p) == j) then; a0(p) = a0(p) + x; exit;
2472 REAL(KIND=8),
INTENT(IN) :: stabh, expdiv
2473 INTEGER,
DIMENSION(:),
INTENT(IN) :: ia
2474 INTEGER,
DIMENSION(:),
INTENT(IN) :: ja
2475 REAL(KIND=8),
DIMENSION(:),
INTENT(INOUT) :: a0
2476 REAL(KIND=8),
INTENT(IN) :: alpha
2477 INTEGER :: m, l, p, ni, nj, k, k1, h, i, j, i_b, j_b, &
2479 REAL(KIND=8) :: x, alphah
2481 TYPE(mesh_type
),
TARGET :: mesh
2482 INTEGER,
DIMENSION(:,:),
POINTER :: jj
2483 INTEGER,
POINTER :: me
2489 bloc_size = (
SIZE(ia) - 1)/2
2492 alphah = stabh*sum(rj(:,m))**(expdiv/2)
2495 DO ni = 1, n_w; i_b = jj(ni, m)
2497 i = i_b + (k-1)*bloc_size
2498 k1 = modulo(k,2) + 1
2500 DO nj = 1, n_w; j_b = jj(nj,m)
2502 j = j_b + (h-1)*bloc_size
2504 x = alphah*dw(k,ni,l,m)*dw(h,nj,l,m)
2506 x = x + alpha*ww(ni,l)*ww(nj,l) + dw(k1,ni,l,m)*dw(k1,nj,l,m)
2508 x = x - dw(h,ni,l,m)*dw(k,nj,l,m)
2513 DO p = ia(i), ia(i+1) - 1
2514 IF (ja(p) == j) then; a0(p) = a0(p) + x; exit;
2538 REAL(KIND=8),
INTENT(IN) :: stab, exp_sta
2539 INTEGER,
DIMENSION(:),
INTENT(IN) :: ia
2540 INTEGER,
DIMENSION(:),
INTENT(IN) :: ja
2541 REAL(KIND=8),
DIMENSION(:),
INTENT(INOUT) :: a0
2542 REAL(KIND=8),
INTENT(IN) :: alpha
2543 INTEGER :: m, l, p, ni, nj, k, k1, h, i, j, i_b, j_b, &
2545 REAL(KIND=8) :: x, alphah, betah, hloc
2547 TYPE(mesh_type
),
TARGET :: mesh
2548 INTEGER,
DIMENSION(:,:),
POINTER :: jj
2549 INTEGER,
POINTER :: me
2555 bloc_size = (
SIZE(ia) - 1)/3
2556 IF (mesh%gauss%n_w == 3)
THEN
2558 ELSE IF (mesh%gauss%n_w == 6)
THEN
2561 WRITE(*,*)
' BUG, bad FE'
2565 hloc = sqrt(sum(rj(:,m)))/type_fe
2566 alphah = stab*hloc**(2*exp_sta)
2567 betah = hloc**(2*(1-exp_sta))*(1.d0/stab)
2570 DO ni = 1, n_w; i_b = jj(ni, m)
2572 i = i_b + (k-1)*bloc_size
2573 k1 = modulo(k,2) + 1
2575 DO nj = 1, n_w; j_b = jj(nj,m)
2577 j = j_b + (h-1)*bloc_size
2579 x = alphah*dw(k,ni,l,m)*dw(h,nj,l,m)
2581 x = x + alpha*ww(ni,l)*ww(nj,l) + dw(k1,ni,l,m)*dw(k1,nj,l,m)
2583 x = x - dw(h,ni,l,m)*dw(k,nj,l,m)
2586 DO p = ia(i), ia(i+1) - 1
2587 IF (ja(p) == j) then; a0(p) = a0(p) + x; exit;
2597 DO ni = 1, n_w; i_b = jj(ni, m)
2599 i = i_b + (k-1)*bloc_size
2600 DO nj = 1, n_w; j_b = jj(nj,m)
2602 j = j_b + (h-1)*bloc_size
2603 x = dw(k,nj,l,m)*ww(ni,l)* rj(l,m)
2604 DO p = ia(i), ia(i+1) - 1
2605 IF (ja(p) == j) then; a0(p) = a0(p) + x;
2614 DO ni = 1, n_w; i_b = jj(ni, m)
2616 i = i_b + (k-1)*bloc_size
2617 DO nj = 1, n_w; j_b = jj(nj,m)
2619 j = j_b + (h-1)*bloc_size
2621 x = -ww(nj,l) * dw(h,ni,l,m)* rj(l,m)
2623 x = betah*sum(dw(:,ni,l,m) * dw(:,nj,l,m))* rj(l,m)
2625 DO p = ia(i), ia(i+1) - 1
2626 IF (ja(p) == j) then; a0(p) = a0(p) + x;
2647 INTEGER,
DIMENSION(:),
INTENT(IN) :: ia
2648 INTEGER,
DIMENSION(:),
INTENT(IN) :: ja
2649 REAL(KIND=8),
DIMENSION(:),
INTENT(INOUT) :: a0
2650 REAL(KIND=8),
INTENT(IN) :: stab_b, consist, adj, exp_b
2651 INTEGER :: m, ms, ls, p, ni, nj, k, k1, h, h1, i, j, i_b, j_b, &
2653 REAL(KIND=8) :: x, alphah
2655 TYPE(mesh_type
),
TARGET :: mesh
2656 INTEGER,
DIMENSION(:,:),
POINTER :: jjs
2657 INTEGER,
POINTER :: mes
2666 alphah = stab_b*sum(rjs(:,ms))**(exp_b)
2671 DO ni = 1, n_ws; i_b = jjs(ni, ms)
2673 i = i_b + (k-1)*bloc_size
2674 k1 = modulo(k,2) + 1
2676 DO nj = 1, n_ws; j_b = jjs(nj,ms)
2678 j = j_b + (h-1)*bloc_size
2679 h1 = modulo(h,2) + 1
2681 x = alphah*(-1)**(k1+h1)*wws(ni,ls)*rnorms(k1,ls,ms)*wws(nj,ls)*rnorms(h1,ls,ms)
2684 DO p = ia(i), ia(i+1) - 1
2685 IF (ja(p) == j) then; a0(p) = a0(p) + x; exit;
2695 DO ni = 1, n_ws; i_b = jjs(ni, ms)
2697 i = i_b + (k-1)*bloc_size
2698 k1 = modulo(k,2) + 1
2700 DO nj = 1, n_w; j_b = mesh%jj(nj,m)
2702 j = j_b + (h-1)*bloc_size
2703 h1 = modulo(h,2) + 1
2705 x =consist*(-1)**(k1+h) *wws(ni,ls)*rnorms(k1,ls,ms)*dw_s(h1,nj,ls,ms)
2708 DO p = ia(i), ia(i+1) - 1
2709 IF (ja(p) == j) then; a0(p) = a0(p) + x; exit;
2719 DO ni = 1, n_w; i_b = mesh%jj(ni,m)
2721 i = i_b + (k-1)*bloc_size
2722 k1 = modulo(k,2) + 1
2724 DO nj = 1, n_ws; j_b = jjs(nj,ms)
2726 j = j_b + (h-1)*bloc_size
2727 h1 = modulo(h,2) + 1
2729 x = adj*(-1)**(k+h1) *wws(nj,ls)*rnorms(h1,ls,ms)*dw_s(k1,ni,ls,ms)
2732 DO p = ia(i), ia(i+1) - 1
2733 IF (ja(p) == j) then; a0(p) = a0(p) + x; exit;
2756 REAL(KIND=8),
INTENT(IN) :: alpha
2757 INTEGER,
DIMENSION(:),
INTENT(IN) :: ia
2758 INTEGER,
DIMENSION(:),
INTENT(IN) :: ja
2759 REAL(KIND=8),
DIMENSION(:),
INTENT(INOUT) :: a0
2761 INTEGER :: m, l, ni, nj, i, j, p
2762 REAL(KIND=8) :: al, x
2764 TYPE(mesh_type
),
TARGET :: mesh
2765 INTEGER,
DIMENSION(:,:),
POINTER :: jj
2766 INTEGER,
POINTER :: me
2775 al = alpha * rj(l,m)
2777 DO nj = 1, n_w; j = jj(nj, m)
2778 DO ni = 1, n_w; i = jj(ni, m)
2780 x = al * dw(1,nj,l,m) * dw(1,ni,l,m)
2781 DO p = ia(i), ia(i+1) - 1
2782 IF (ja(p) == j) then; a0(p) = a0(p) + x; exit;
2800 INTEGER,
DIMENSION(:),
INTENT(IN) :: ia
2801 INTEGER,
DIMENSION(:),
INTENT(IN) :: ja
2802 REAL(KIND=8),
DIMENSION(:),
INTENT(INOUT) :: aa
2803 REAL(KIND=8) :: coeff_visc
2804 REAL(KIND=8),
DIMENSION(mesh%gauss%n_w,mesh%gauss%l_Gs, 2) :: dwni_loc
2805 INTEGER,
DIMENSION(mesh%gauss%n_w,2) :: jji_loc
2806 INTEGER :: ls, ms, cotei, cotej, p, ni, nj, i, j, type_fe
2807 REAL(KIND=8) :: x, h2, coeff
2808 IF (mesh%gauss%n_w==3)
THEN
2813 coeff = coeff_visc/type_fe**2
2815 dwni_loc = mesh%gauss%dwni(:,:,:,ms)
2816 jji_loc = mesh%jji(:,:,ms)
2817 h2 = coeff*sum(mesh%gauss%rji(:,ms))**2
2819 DO ni = 1, mesh%gauss%n_w
2820 i = jji_loc(ni,cotei)
2822 DO nj = 1, mesh%gauss%n_w
2823 j = jji_loc(nj,cotej)
2825 DO ls = 1, mesh%gauss%l_Gs
2826 x = x + dwni_loc(ni,ls,cotei)*dwni_loc(nj,ls,cotej)*mesh%gauss%rji(ls,ms)
2828 DO p = ia(i), ia(i+1) - 1
2829 IF (ja(p) == j) then;
2830 aa(p) = aa(p) + x*h2;
subroutine qs_00_s_m(mesh, fs, ia, ja, a0)
subroutine qs_varden_adv_m(mesh, mass, ff, gg, ia, ja, a0, a_skew)
subroutine qs_mass_adv_m(mesh, alpha, gg, ia, ja, a0, a_skew)
subroutine qs_h_v_grad_v_grad_w(mesh, gg, ia, ja, a0)
subroutine edge_stab_m(mesh, coeff_visc, ia, ja, aa)
subroutine qs_adv_m(mesh, gg, ia, ja, a0)
subroutine qs_diff_mass_adv_m(mesh, visco, alpha, gg, ia, ja, a0)
subroutine cv_11_m(mesh, alpha, ia, ja, a0)
subroutine curl_surf_2d_m(mesh, stab_b, exp_b, consist, adj, ia, ja, a0)
subroutine qs_001_m(mesh, gg, ia, ja, a0)
subroutine qs_dif_mass_adv_m(mesh, visco, alpha, gg, ia, ja, a0)
subroutine qs_ls_mass_adv(mesh, alpha, gg, ia, ja, a0)
subroutine qs_adv_m_bis(mesh, gg, ia, ja, a0)
subroutine qs_v_grad_v_grad_w(mesh, gg, ia, ja, a0)
subroutine qs_dif_massvar_m(mesh, visco, ff, ia, ja, a0)
subroutine qs_massvar_adv_m(mesh, ff, gg, ia, ja, a0, a_skew)
subroutine qs_100_m(mesh, vv, ia, ja, a0)
section doc_intro_frame_work_num_app Numerical approximation subsection doc_intro_fram_work_num_app_Fourier_FEM Fourier Finite element representation The SFEMaNS code uses a hybrid Fourier Finite element formulation The Fourier decomposition allows to approximate the problem’s solutions for each Fourier mode modulo nonlinear terms that are made explicit The variables are then approximated on a meridian section of the domain with a finite element method The numerical approximation of a function f $f f is written in the following generic f with f(r,\theta, z)\f $the cylindrical coordinates
subroutine cc_101_m(mesh, gg, ia, ja, a0)
subroutine bs_101_m(mesh, ff, ia, ja, a0)
subroutine qs_11_bb_p1_m(mesh, alpha, bcd)
subroutine qs_plap_m(mesh, p, ff, ia, ja, a0)
subroutine qs_h_100_m(mesh, alpha, gg, ia, ja, a0)
subroutine qs_gals_mass_adv_m(mesh, param, alpha, gg, ia, ja, a0)
subroutine qs_11_m(mesh, alpha, ia, ja, a0)
subroutine qs_v_plap_m(mesh, p, vstar, ff, ia, ja, a0)
subroutine elast_m(mesh, alpha, ia, ja, a0)
subroutine qs_1x1x_m(mesh, alpha, ia, ja, a0)
subroutine cv_00_s_m(mesh, fs, ia, ja, a0)
subroutine curl_div_2d_m(mesh, alpha, stabh, expdiv, ia, ja, a0)
subroutine qs_00_m(mesh, alpha, ia, ja, a0)
subroutine cc_00_s_m(mesh, alpha, ia, ja, a0)
subroutine qs_mass_div_m(mesh, alpha, gg, ia, ja, a0)
subroutine qs_000_m(mesh, ff, ia, ja, a0)
subroutine curl_grad_2d_m(mesh, alpha, stab, exp_sta, ia, ja, a0)
subroutine qs_dif_mass_adv_skew_m(mesh, visco, alpha, gg, ia, ja, a0)
subroutine qs_dif_mass_m(mesh, visco, alpha, ia, ja, a0)
subroutine qs_101_m(mesh, ff, ia, ja, a0)
subroutine qs_1_sgs_1_m(mesh, ff, ia, ja, a0)
subroutine qs_adv_stab_m(mesh, gg, stab, istab, ia, ja, a0)