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;
55 SUBROUTINE qs_100_m(mesh, vv, ia, ja, a0)
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;
115 SUBROUTINE qs_000_m(mesh, ff, ia, ja, a0)
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;
171 SUBROUTINE qs_11_m (mesh, alpha, ia, ja, a0)
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;
976 SUBROUTINE qs_adv_m(mesh, gg, ia, ja, a0)
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;
1059 SUBROUTINE qs_001_m(mesh, gg, ia, ja, a0)
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;
1122 SUBROUTINE qs_h_100_m(mesh, alpha, gg, ia, ja, a0)
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;
1262 SUBROUTINE qs_101_m (mesh, ff, ia, ja, a0)
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;
1318 SUBROUTINE qs_v_plap_m (mesh, p, vstar, ff, ia, ja, a0)
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;
1390 SUBROUTINE qs_plap_m (mesh, p, ff, ia, ja, a0)
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;
1601 SUBROUTINE bs_101_m (mesh, ff, ia, ja, a0)
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;
1653 SUBROUTINE qs_00_s_m (mesh, fs, ia, ja, a0)
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;
1703 SUBROUTINE cv_11_m (mesh, alpha, ia, ja, a0)
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;
1768 SUBROUTINE cc_101_m (mesh, gg, ia, ja, a0)
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;
1841 SUBROUTINE cv_00_s_m (mesh, fs, ia, ja, a0)
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)
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;
1912 SUBROUTINE cc_00_s_m (mesh, alpha, ia, ja, a0)
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
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;
2228 SUBROUTINE qs_mass_adv_m (mesh, alpha, gg, ia, ja, a0, a_skew)
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;
2395 SUBROUTINE elast_m (mesh, alpha, ia, ja, a0)
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;
2462 SUBROUTINE curl_div_2d_m (mesh, alpha, stabh, expdiv, ia, ja, a0)
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;
2529 SUBROUTINE curl_grad_2d_m (mesh, alpha, stab, exp_sta, ia, ja, a0)
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;
2638 SUBROUTINE curl_surf_2d_m (mesh, stab_b, exp_b, consist, adj, ia, ja, a0)
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
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;
2748 SUBROUTINE qs_1x1x_m (mesh, alpha, ia, ja, a0)
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;
2794 SUBROUTINE edge_stab_m(mesh, coeff_visc, ia, ja, aa)
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 cv_11_m(mesh, alpha, ia, ja, a0)
subroutine cc_00_s_m(mesh, alpha, ia, ja, a0)
subroutine qs_100_m(mesh, vv, ia, ja, a0)
subroutine elast_m(mesh, alpha, ia, ja, a0)
subroutine qs_mass_div_m(mesh, alpha, gg, ia, ja, a0)
subroutine qs_dif_mass_m(mesh, visco, alpha, ia, ja, a0)
subroutine qs_plap_m(mesh, p, ff, ia, ja, a0)
subroutine edge_stab_m(mesh, coeff_visc, ia, ja, aa)
real(kind=8), dimension(:,:), pointer rj
subroutine qs_1x1x_m(mesh, alpha, ia, ja, a0)
subroutine qs_ls_mass_adv(mesh, alpha, gg, ia, ja, a0)
real(kind=8), dimension(:,:,:), pointer rnorms
subroutine qs_101_m(mesh, ff, ia, ja, a0)
subroutine qs_001_m(mesh, gg, ia, ja, a0)
subroutine curl_div_2d_m(mesh, alpha, stabh, expdiv, ia, ja, a0)
subroutine qs_diff_mass_adv_m(mesh, visco, alpha, gg, ia, ja, a0)
subroutine qs_massvar_adv_m(mesh, ff, gg, ia, ja, a0, a_skew)
subroutine qs_00_s_m(mesh, fs, ia, ja, a0)
subroutine qs_mass_adv_m(mesh, alpha, gg, ia, ja, a0, a_skew)
subroutine bs_101_m(mesh, ff, ia, ja, a0)
subroutine qs_adv_stab_m(mesh, gg, stab, istab, ia, ja, a0)
subroutine qs_h_v_grad_v_grad_w(mesh, gg, ia, ja, a0)
subroutine qs_11_bb_p1_m(mesh, alpha, bcd)
subroutine qs_gals_mass_adv_m(mesh, param, alpha, gg, ia, ja, a0)
subroutine qs_v_plap_m(mesh, p, vstar, ff, ia, ja, a0)
subroutine qs_00_m(mesh, alpha, ia, ja, a0)
subroutine qs_h_100_m(mesh, alpha, gg, ia, ja, a0)
subroutine qs_000_m(mesh, ff, ia, ja, a0)
subroutine qs_11_m(mesh, alpha, ia, ja, a0)
subroutine qs_adv_m_bis(mesh, gg, ia, ja, a0)
subroutine qs_dif_mass_adv_skew_m(mesh, visco, alpha, gg, ia, ja, a0)
subroutine qs_adv_m(mesh, gg, ia, ja, a0)
subroutine qs_dif_massvar_m(mesh, visco, ff, ia, ja, a0)
real(kind=8), dimension(:,:), pointer rjs
real(kind=8), dimension(:,:), pointer wws
subroutine cv_00_s_m(mesh, fs, ia, ja, a0)
subroutine curl_grad_2d_m(mesh, alpha, stab, exp_sta, ia, ja, a0)
subroutine qs_1_sgs_1_m(mesh, ff, ia, ja, a0)
subroutine cc_101_m(mesh, gg, ia, ja, a0)
real(kind=8), dimension(:,:,:,:), pointer dw
real(kind=8), dimension(:,:), pointer ww
subroutine curl_surf_2d_m(mesh, stab_b, exp_b, consist, adj, ia, ja, a0)
real(kind=8), dimension(:,:,:,:), pointer dw_s
subroutine qs_dif_mass_adv_m(mesh, visco, alpha, gg, ia, ja, a0)
subroutine qs_varden_adv_m(mesh, mass, ff, gg, ia, ja, a0, a_skew)
subroutine qs_v_grad_v_grad_w(mesh, gg, ia, ja, a0)