46 real(kind=
rp),
allocatable :: d(:, :, :, :)
47 type(
gs_t),
pointer :: gs_h
60 class(
jacobi_t),
intent(inout) :: this
61 type(
coef_t),
intent(in),
target :: coef
62 type(
dofmap_t),
intent(in),
target :: dof
63 type(
gs_t),
intent(inout),
target :: gs_h
69 allocate(this%d(dof%Xh%lx, dof%Xh%ly, dof%Xh%lz, dof%msh%nelv))
75 class(
jacobi_t),
intent(inout) :: this
76 if (
allocated(this%d))
then
87 integer,
intent(in) :: n
88 class(
jacobi_t),
intent(inout) :: this
89 real(kind=
rp),
dimension(n),
intent(inout) :: z
90 real(kind=
rp),
dimension(n),
intent(inout) :: r
91 call col3(z, r, this%d, n)
96 class(
jacobi_t),
intent(inout) :: this
97 associate(dof => this%dof, coef => this%coef, gs_h => this%gs_h)
100 select case (dof%Xh%lx)
103 coef%G11, coef%G22, coef%G33, coef%G12, coef%G13, coef%G23, &
104 dof%msh%dfrmd_el, dof%msh%nelv)
107 coef%G11, coef%G22, coef%G33, coef%G12, coef%G13, coef%G23, &
108 dof%msh%dfrmd_el, dof%msh%nelv)
111 coef%G11, coef%G22, coef%G33, coef%G12, coef%G13, coef%G23, &
112 dof%msh%dfrmd_el, dof%msh%nelv)
115 coef%G11, coef%G22, coef%G33, coef%G12, coef%G13, coef%G23, &
116 dof%msh%dfrmd_el, dof%msh%nelv)
119 coef%G11, coef%G22, coef%G33, coef%G12, coef%G13, coef%G23, &
120 dof%msh%dfrmd_el, dof%msh%nelv)
123 coef%G11, coef%G22, coef%G33, coef%G12, coef%G13, coef%G23, &
124 dof%msh%dfrmd_el, dof%msh%nelv)
127 coef%G11, coef%G22, coef%G33, coef%G12, coef%G13, coef%G23, &
128 dof%msh%dfrmd_el, dof%msh%nelv)
131 coef%G11, coef%G22, coef%G33, coef%G12, coef%G13, coef%G23, &
132 dof%msh%dfrmd_el, dof%msh%nelv)
135 coef%G11, coef%G22, coef%G33, coef%G12, coef%G13, coef%G23, &
136 dof%msh%dfrmd_el, dof%msh%nelv)
139 coef%G11, coef%G22, coef%G33, coef%G12, coef%G13, coef%G23, &
140 dof%msh%dfrmd_el, dof%msh%nelv)
143 coef%G11, coef%G22, coef%G33, coef%G12, coef%G13, coef%G23, &
144 dof%msh%dfrmd_el, dof%msh%nelv)
147 coef%G11, coef%G22, coef%G33, coef%G12, coef%G13, coef%G23, &
148 dof%msh%dfrmd_el, dof%msh%nelv)
151 coef%G11, coef%G22, coef%G33, coef%G12, coef%G13, coef%G23, &
152 dof%msh%dfrmd_el, dof%msh%nelv)
155 coef%G11, coef%G22, coef%G33, coef%G12, coef%G13, coef%G23, &
156 dof%msh%dfrmd_el, dof%msh%nelv, dof%Xh%lx)
160 call col2(this%d, coef%h1, coef%dof%size())
161 if (coef%ifh2)
call addcol3(this%d, coef%h2, coef%B, coef%dof%size())
162 call gs_h%op(this%d, dof%size(), gs_op_add)
163 call invcol1(this%d, dof%size())
169 G12, G13, G23, dfrmd_el, n, lx)
170 integer,
intent(in) :: n, lx
171 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
172 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
173 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
174 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
175 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
176 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
177 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
178 real(kind=rp),
intent(in) :: dxt(lx, lx)
179 real(kind=rp),
intent(in) :: dyt(lx, lx)
180 real(kind=rp),
intent(in) :: dzt(lx, lx)
181 logical,
intent(in) :: dfrmd_el(n)
182 integer :: i, j, k, l, e
200 d(i,j,k,e) = d(i,j,k,e) + &
201 g11(l,j,k,e) * dxt(i,l)**2
211 d(i,j,k,e) = d(i,j,k,e) + &
212 g22(i,l,k,e) * dyt(j,l)**2
222 d(i,j,k,e) = d(i,j,k,e) + &
223 g33(i,j,l,e) * dzt(k,l)**2
229 if (dfrmd_el(e))
then
232 d(1,j,k,e) = d(1,j,k,e) &
233 + g12(1,j,k,e) * dxt(1,1)*dyt(j,j) &
234 + g13(1,j,k,e) * dxt(1,1)*dzt(k,k)
235 d(lx,j,k,e) = d(lx,j,k,e) &
236 + g12(lx,j,k,e) * dxt(lx,lx)*dyt(j,j) &
237 + g13(lx,j,k,e) * dxt(lx,lx)*dzt(k,k)
243 d(i,1,k,e) = d(i,1,k,e) &
244 + g12(i,1,k,e) * dyt(1,1)*dxt(i,i) &
245 + g23(i,1,k,e) * dyt(1,1)*dzt(k,k)
246 d(i,lx,k,e) = d(i,lx,k,e) &
247 + g12(i,lx,k,e) * dyt(lx,lx)*dxt(i,i) &
248 + g23(i,lx,k,e) * dyt(lx,lx)*dzt(k,k)
253 d(i,j,1,e) = d(i,j,1,e) &
254 + g13(i,j,1,e) * dzt(1,1)*dxt(i,i) &
255 + g23(i,j,1,e) * dzt(1,1)*dyt(j,j)
256 d(i,j,lx,e) = d(i,j,lx,e) &
257 + g13(i,j,lx,e) * dzt(lx,lx)*dxt(i,i) &
258 + g23(i,j,lx,e) * dzt(lx,lx)*dyt(j,j)
267 G12, G13, G23, dfrmd_el, n)
268 integer,
parameter :: lx = 14
269 integer,
intent(in) :: n
270 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
271 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
272 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
273 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
274 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
275 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
276 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
277 real(kind=rp),
intent(in) :: dxt(lx, lx)
278 real(kind=rp),
intent(in) :: dyt(lx, lx)
279 real(kind=rp),
intent(in) :: dzt(lx, lx)
280 logical,
intent(in) :: dfrmd_el(n)
281 integer :: i, j, k, l, e
299 d(i,j,k,e) = d(i,j,k,e) + &
300 g11(l,j,k,e) * dxt(i,l)**2
310 d(i,j,k,e) = d(i,j,k,e) + &
311 g22(i,l,k,e) * dyt(j,l)**2
321 d(i,j,k,e) = d(i,j,k,e) + &
322 g33(i,j,l,e) * dzt(k,l)**2
328 if (dfrmd_el(e))
then
331 d(1,j,k,e) = d(1,j,k,e) &
332 + g12(1,j,k,e) * dxt(1,1)*dyt(j,j) &
333 + g13(1,j,k,e) * dxt(1,1)*dzt(k,k)
334 d(lx,j,k,e) = d(lx,j,k,e) &
335 + g12(lx,j,k,e) * dxt(lx,lx)*dyt(j,j) &
336 + g13(lx,j,k,e) * dxt(lx,lx)*dzt(k,k)
342 d(i,1,k,e) = d(i,1,k,e) &
343 + g12(i,1,k,e) * dyt(1,1)*dxt(i,i) &
344 + g23(i,1,k,e) * dyt(1,1)*dzt(k,k)
345 d(i,lx,k,e) = d(i,lx,k,e) &
346 + g12(i,lx,k,e) * dyt(lx,lx)*dxt(i,i) &
347 + g23(i,lx,k,e) * dyt(lx,lx)*dzt(k,k)
352 d(i,j,1,e) = d(i,j,1,e) &
353 + g13(i,j,1,e) * dzt(1,1)*dxt(i,i) &
354 + g23(i,j,1,e) * dzt(1,1)*dyt(j,j)
355 d(i,j,lx,e) = d(i,j,lx,e) &
356 + g13(i,j,lx,e) * dzt(lx,lx)*dxt(i,i) &
357 + g23(i,j,lx,e) * dzt(lx,lx)*dyt(j,j)
366 G12, G13, G23, dfrmd_el, n)
367 integer,
parameter :: lx = 13
368 integer,
intent(in) :: n
369 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
370 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
371 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
372 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
373 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
374 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
375 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
376 real(kind=rp),
intent(in) :: dxt(lx, lx)
377 real(kind=rp),
intent(in) :: dyt(lx, lx)
378 real(kind=rp),
intent(in) :: dzt(lx, lx)
379 logical,
intent(in) :: dfrmd_el(n)
380 integer :: i, j, k, l, e
398 d(i,j,k,e) = d(i,j,k,e) + &
399 g11(l,j,k,e) * dxt(i,l)**2
409 d(i,j,k,e) = d(i,j,k,e) + &
410 g22(i,l,k,e) * dyt(j,l)**2
420 d(i,j,k,e) = d(i,j,k,e) + &
421 g33(i,j,l,e) * dzt(k,l)**2
427 if (dfrmd_el(e))
then
430 d(1,j,k,e) = d(1,j,k,e) &
431 + g12(1,j,k,e) * dxt(1,1)*dyt(j,j) &
432 + g13(1,j,k,e) * dxt(1,1)*dzt(k,k)
433 d(lx,j,k,e) = d(lx,j,k,e) &
434 + g12(lx,j,k,e) * dxt(lx,lx)*dyt(j,j) &
435 + g13(lx,j,k,e) * dxt(lx,lx)*dzt(k,k)
441 d(i,1,k,e) = d(i,1,k,e) &
442 + g12(i,1,k,e) * dyt(1,1)*dxt(i,i) &
443 + g23(i,1,k,e) * dyt(1,1)*dzt(k,k)
444 d(i,lx,k,e) = d(i,lx,k,e) &
445 + g12(i,lx,k,e) * dyt(lx,lx)*dxt(i,i) &
446 + g23(i,lx,k,e) * dyt(lx,lx)*dzt(k,k)
451 d(i,j,1,e) = d(i,j,1,e) &
452 + g13(i,j,1,e) * dzt(1,1)*dxt(i,i) &
453 + g23(i,j,1,e) * dzt(1,1)*dyt(j,j)
454 d(i,j,lx,e) = d(i,j,lx,e) &
455 + g13(i,j,lx,e) * dzt(lx,lx)*dxt(i,i) &
456 + g23(i,j,lx,e) * dzt(lx,lx)*dyt(j,j)
465 G12, G13, G23, dfrmd_el, n)
466 integer,
parameter :: lx = 12
467 integer,
intent(in) :: n
468 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
469 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
470 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
471 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
472 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
473 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
474 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
475 real(kind=rp),
intent(in) :: dxt(lx, lx)
476 real(kind=rp),
intent(in) :: dyt(lx, lx)
477 real(kind=rp),
intent(in) :: dzt(lx, lx)
478 logical,
intent(in) :: dfrmd_el(n)
479 integer :: i, j, k, l, e
497 d(i,j,k,e) = d(i,j,k,e) + &
498 g11(l,j,k,e) * dxt(i,l)**2
508 d(i,j,k,e) = d(i,j,k,e) + &
509 g22(i,l,k,e) * dyt(j,l)**2
519 d(i,j,k,e) = d(i,j,k,e) + &
520 g33(i,j,l,e) * dzt(k,l)**2
526 if (dfrmd_el(e))
then
529 d(1,j,k,e) = d(1,j,k,e) &
530 + g12(1,j,k,e) * dxt(1,1)*dyt(j,j) &
531 + g13(1,j,k,e) * dxt(1,1)*dzt(k,k)
532 d(lx,j,k,e) = d(lx,j,k,e) &
533 + g12(lx,j,k,e) * dxt(lx,lx)*dyt(j,j) &
534 + g13(lx,j,k,e) * dxt(lx,lx)*dzt(k,k)
540 d(i,1,k,e) = d(i,1,k,e) &
541 + g12(i,1,k,e) * dyt(1,1)*dxt(i,i) &
542 + g23(i,1,k,e) * dyt(1,1)*dzt(k,k)
543 d(i,lx,k,e) = d(i,lx,k,e) &
544 + g12(i,lx,k,e) * dyt(lx,lx)*dxt(i,i) &
545 + g23(i,lx,k,e) * dyt(lx,lx)*dzt(k,k)
550 d(i,j,1,e) = d(i,j,1,e) &
551 + g13(i,j,1,e) * dzt(1,1)*dxt(i,i) &
552 + g23(i,j,1,e) * dzt(1,1)*dyt(j,j)
553 d(i,j,lx,e) = d(i,j,lx,e) &
554 + g13(i,j,lx,e) * dzt(lx,lx)*dxt(i,i) &
555 + g23(i,j,lx,e) * dzt(lx,lx)*dyt(j,j)
564 G12, G13, G23, dfrmd_el, n)
565 integer,
parameter :: lx = 11
566 integer,
intent(in) :: n
567 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
568 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
569 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
570 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
571 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
572 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
573 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
574 real(kind=rp),
intent(in) :: dxt(lx, lx)
575 real(kind=rp),
intent(in) :: dyt(lx, lx)
576 real(kind=rp),
intent(in) :: dzt(lx, lx)
577 logical,
intent(in) :: dfrmd_el(n)
578 integer :: i, j, k, l, e
596 d(i,j,k,e) = d(i,j,k,e) + &
597 g11(l,j,k,e) * dxt(i,l)**2
607 d(i,j,k,e) = d(i,j,k,e) + &
608 g22(i,l,k,e) * dyt(j,l)**2
618 d(i,j,k,e) = d(i,j,k,e) + &
619 g33(i,j,l,e) * dzt(k,l)**2
625 if (dfrmd_el(e))
then
628 d(1,j,k,e) = d(1,j,k,e) &
629 + g12(1,j,k,e) * dxt(1,1)*dyt(j,j) &
630 + g13(1,j,k,e) * dxt(1,1)*dzt(k,k)
631 d(lx,j,k,e) = d(lx,j,k,e) &
632 + g12(lx,j,k,e) * dxt(lx,lx)*dyt(j,j) &
633 + g13(lx,j,k,e) * dxt(lx,lx)*dzt(k,k)
639 d(i,1,k,e) = d(i,1,k,e) &
640 + g12(i,1,k,e) * dyt(1,1)*dxt(i,i) &
641 + g23(i,1,k,e) * dyt(1,1)*dzt(k,k)
642 d(i,lx,k,e) = d(i,lx,k,e) &
643 + g12(i,lx,k,e) * dyt(lx,lx)*dxt(i,i) &
644 + g23(i,lx,k,e) * dyt(lx,lx)*dzt(k,k)
649 d(i,j,1,e) = d(i,j,1,e) &
650 + g13(i,j,1,e) * dzt(1,1)*dxt(i,i) &
651 + g23(i,j,1,e) * dzt(1,1)*dyt(j,j)
652 d(i,j,lx,e) = d(i,j,lx,e) &
653 + g13(i,j,lx,e) * dzt(lx,lx)*dxt(i,i) &
654 + g23(i,j,lx,e) * dzt(lx,lx)*dyt(j,j)
663 G12, G13, G23, dfrmd_el, n)
664 integer,
parameter :: lx = 10
665 integer,
intent(in) :: n
666 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
667 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
668 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
669 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
670 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
671 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
672 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
673 real(kind=rp),
intent(in) :: dxt(lx, lx)
674 real(kind=rp),
intent(in) :: dyt(lx, lx)
675 real(kind=rp),
intent(in) :: dzt(lx, lx)
676 logical,
intent(in) :: dfrmd_el(n)
677 integer :: i, j, k, l, e
695 d(i,j,k,e) = d(i,j,k,e) + &
696 g11(l,j,k,e) * dxt(i,l)**2
706 d(i,j,k,e) = d(i,j,k,e) + &
707 g22(i,l,k,e) * dyt(j,l)**2
717 d(i,j,k,e) = d(i,j,k,e) + &
718 g33(i,j,l,e) * dzt(k,l)**2
724 if (dfrmd_el(e))
then
727 d(1,j,k,e) = d(1,j,k,e) &
728 + g12(1,j,k,e) * dxt(1,1)*dyt(j,j) &
729 + g13(1,j,k,e) * dxt(1,1)*dzt(k,k)
730 d(lx,j,k,e) = d(lx,j,k,e) &
731 + g12(lx,j,k,e) * dxt(lx,lx)*dyt(j,j) &
732 + g13(lx,j,k,e) * dxt(lx,lx)*dzt(k,k)
738 d(i,1,k,e) = d(i,1,k,e) &
739 + g12(i,1,k,e) * dyt(1,1)*dxt(i,i) &
740 + g23(i,1,k,e) * dyt(1,1)*dzt(k,k)
741 d(i,lx,k,e) = d(i,lx,k,e) &
742 + g12(i,lx,k,e) * dyt(lx,lx)*dxt(i,i) &
743 + g23(i,lx,k,e) * dyt(lx,lx)*dzt(k,k)
748 d(i,j,1,e) = d(i,j,1,e) &
749 + g13(i,j,1,e) * dzt(1,1)*dxt(i,i) &
750 + g23(i,j,1,e) * dzt(1,1)*dyt(j,j)
751 d(i,j,lx,e) = d(i,j,lx,e) &
752 + g13(i,j,lx,e) * dzt(lx,lx)*dxt(i,i) &
753 + g23(i,j,lx,e) * dzt(lx,lx)*dyt(j,j)
762 G12, G13, G23, dfrmd_el, n)
763 integer,
parameter :: lx = 9
764 integer,
intent(in) :: n
765 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
766 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
767 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
768 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
769 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
770 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
771 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
772 real(kind=rp),
intent(in) :: dxt(lx, lx)
773 real(kind=rp),
intent(in) :: dyt(lx, lx)
774 real(kind=rp),
intent(in) :: dzt(lx, lx)
775 logical,
intent(in) :: dfrmd_el(n)
776 integer :: i, j, k, l, e
794 d(i,j,k,e) = d(i,j,k,e) + &
795 g11(l,j,k,e) * dxt(i,l)**2
805 d(i,j,k,e) = d(i,j,k,e) + &
806 g22(i,l,k,e) * dyt(j,l)**2
816 d(i,j,k,e) = d(i,j,k,e) + &
817 g33(i,j,l,e) * dzt(k,l)**2
823 if (dfrmd_el(e))
then
826 d(1,j,k,e) = d(1,j,k,e) &
827 + g12(1,j,k,e) * dxt(1,1)*dyt(j,j) &
828 + g13(1,j,k,e) * dxt(1,1)*dzt(k,k)
829 d(lx,j,k,e) = d(lx,j,k,e) &
830 + g12(lx,j,k,e) * dxt(lx,lx)*dyt(j,j) &
831 + g13(lx,j,k,e) * dxt(lx,lx)*dzt(k,k)
837 d(i,1,k,e) = d(i,1,k,e) &
838 + g12(i,1,k,e) * dyt(1,1)*dxt(i,i) &
839 + g23(i,1,k,e) * dyt(1,1)*dzt(k,k)
840 d(i,lx,k,e) = d(i,lx,k,e) &
841 + g12(i,lx,k,e) * dyt(lx,lx)*dxt(i,i) &
842 + g23(i,lx,k,e) * dyt(lx,lx)*dzt(k,k)
847 d(i,j,1,e) = d(i,j,1,e) &
848 + g13(i,j,1,e) * dzt(1,1)*dxt(i,i) &
849 + g23(i,j,1,e) * dzt(1,1)*dyt(j,j)
850 d(i,j,lx,e) = d(i,j,lx,e) &
851 + g13(i,j,lx,e) * dzt(lx,lx)*dxt(i,i) &
852 + g23(i,j,lx,e) * dzt(lx,lx)*dyt(j,j)
861 G12, G13, G23, dfrmd_el, n)
862 integer,
parameter :: lx = 8
863 integer,
intent(in) :: n
864 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
865 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
866 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
867 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
868 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
869 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
870 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
871 real(kind=rp),
intent(in) :: dxt(lx, lx)
872 real(kind=rp),
intent(in) :: dyt(lx, lx)
873 real(kind=rp),
intent(in) :: dzt(lx, lx)
874 logical,
intent(in) :: dfrmd_el(n)
875 integer :: i, j, k, l, e
893 d(i,j,k,e) = d(i,j,k,e) + &
894 g11(l,j,k,e) * dxt(i,l)**2
904 d(i,j,k,e) = d(i,j,k,e) + &
905 g22(i,l,k,e) * dyt(j,l)**2
915 d(i,j,k,e) = d(i,j,k,e) + &
916 g33(i,j,l,e) * dzt(k,l)**2
922 if (dfrmd_el(e))
then
925 d(1,j,k,e) = d(1,j,k,e) &
926 + g12(1,j,k,e) * dxt(1,1)*dyt(j,j) &
927 + g13(1,j,k,e) * dxt(1,1)*dzt(k,k)
928 d(lx,j,k,e) = d(lx,j,k,e) &
929 + g12(lx,j,k,e) * dxt(lx,lx)*dyt(j,j) &
930 + g13(lx,j,k,e) * dxt(lx,lx)*dzt(k,k)
936 d(i,1,k,e) = d(i,1,k,e) &
937 + g12(i,1,k,e) * dyt(1,1)*dxt(i,i) &
938 + g23(i,1,k,e) * dyt(1,1)*dzt(k,k)
939 d(i,lx,k,e) = d(i,lx,k,e) &
940 + g12(i,lx,k,e) * dyt(lx,lx)*dxt(i,i) &
941 + g23(i,lx,k,e) * dyt(lx,lx)*dzt(k,k)
946 d(i,j,1,e) = d(i,j,1,e) &
947 + g13(i,j,1,e) * dzt(1,1)*dxt(i,i) &
948 + g23(i,j,1,e) * dzt(1,1)*dyt(j,j)
949 d(i,j,lx,e) = d(i,j,lx,e) &
950 + g13(i,j,lx,e) * dzt(lx,lx)*dxt(i,i) &
951 + g23(i,j,lx,e) * dzt(lx,lx)*dyt(j,j)
960 G12, G13, G23, dfrmd_el, n)
961 integer,
parameter :: lx = 7
962 integer,
intent(in) :: n
963 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
964 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
965 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
966 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
967 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
968 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
969 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
970 real(kind=rp),
intent(in) :: dxt(lx, lx)
971 real(kind=rp),
intent(in) :: dyt(lx, lx)
972 real(kind=rp),
intent(in) :: dzt(lx, lx)
973 logical,
intent(in) :: dfrmd_el(n)
974 integer :: i, j, k, l, e
992 d(i,j,k,e) = d(i,j,k,e) + &
993 g11(l,j,k,e) * dxt(i,l)**2
1003 d(i,j,k,e) = d(i,j,k,e) + &
1004 g22(i,l,k,e) * dyt(j,l)**2
1014 d(i,j,k,e) = d(i,j,k,e) + &
1015 g33(i,j,l,e) * dzt(k,l)**2
1021 if (dfrmd_el(e))
then
1024 d(1,j,k,e) = d(1,j,k,e) &
1025 + g12(1,j,k,e) * dxt(1,1)*dyt(j,j) &
1026 + g13(1,j,k,e) * dxt(1,1)*dzt(k,k)
1027 d(lx,j,k,e) = d(lx,j,k,e) &
1028 + g12(lx,j,k,e) * dxt(lx,lx)*dyt(j,j) &
1029 + g13(lx,j,k,e) * dxt(lx,lx)*dzt(k,k)
1035 d(i,1,k,e) = d(i,1,k,e) &
1036 + g12(i,1,k,e) * dyt(1,1)*dxt(i,i) &
1037 + g23(i,1,k,e) * dyt(1,1)*dzt(k,k)
1038 d(i,lx,k,e) = d(i,lx,k,e) &
1039 + g12(i,lx,k,e) * dyt(lx,lx)*dxt(i,i) &
1040 + g23(i,lx,k,e) * dyt(lx,lx)*dzt(k,k)
1045 d(i,j,1,e) = d(i,j,1,e) &
1046 + g13(i,j,1,e) * dzt(1,1)*dxt(i,i) &
1047 + g23(i,j,1,e) * dzt(1,1)*dyt(j,j)
1048 d(i,j,lx,e) = d(i,j,lx,e) &
1049 + g13(i,j,lx,e) * dzt(lx,lx)*dxt(i,i) &
1050 + g23(i,j,lx,e) * dzt(lx,lx)*dyt(j,j)
1059 G12, G13, G23, dfrmd_el, n)
1060 integer,
parameter :: lx = 6
1061 integer,
intent(in) :: n
1062 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
1063 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
1064 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
1065 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
1066 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
1067 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
1068 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
1069 real(kind=rp),
intent(in) :: dxt(lx, lx)
1070 real(kind=rp),
intent(in) :: dyt(lx, lx)
1071 real(kind=rp),
intent(in) :: dzt(lx, lx)
1072 logical,
intent(in) :: dfrmd_el(n)
1073 integer :: i, j, k, l, e
1091 d(i,j,k,e) = d(i,j,k,e) + &
1092 g11(l,j,k,e) * dxt(i,l)**2
1102 d(i,j,k,e) = d(i,j,k,e) + &
1103 g22(i,l,k,e) * dyt(j,l)**2
1113 d(i,j,k,e) = d(i,j,k,e) + &
1114 g33(i,j,l,e) * dzt(k,l)**2
1120 if (dfrmd_el(e))
then
1123 d(1,j,k,e) = d(1,j,k,e) &
1124 + g12(1,j,k,e) * dxt(1,1)*dyt(j,j) &
1125 + g13(1,j,k,e) * dxt(1,1)*dzt(k,k)
1126 d(lx,j,k,e) = d(lx,j,k,e) &
1127 + g12(lx,j,k,e) * dxt(lx,lx)*dyt(j,j) &
1128 + g13(lx,j,k,e) * dxt(lx,lx)*dzt(k,k)
1134 d(i,1,k,e) = d(i,1,k,e) &
1135 + g12(i,1,k,e) * dyt(1,1)*dxt(i,i) &
1136 + g23(i,1,k,e) * dyt(1,1)*dzt(k,k)
1137 d(i,lx,k,e) = d(i,lx,k,e) &
1138 + g12(i,lx,k,e) * dyt(lx,lx)*dxt(i,i) &
1139 + g23(i,lx,k,e) * dyt(lx,lx)*dzt(k,k)
1144 d(i,j,1,e) = d(i,j,1,e) &
1145 + g13(i,j,1,e) * dzt(1,1)*dxt(i,i) &
1146 + g23(i,j,1,e) * dzt(1,1)*dyt(j,j)
1147 d(i,j,lx,e) = d(i,j,lx,e) &
1148 + g13(i,j,lx,e) * dzt(lx,lx)*dxt(i,i) &
1149 + g23(i,j,lx,e) * dzt(lx,lx)*dyt(j,j)
1158 G12, G13, G23, dfrmd_el, n)
1159 integer,
parameter :: lx = 5
1160 integer,
intent(in) :: n
1161 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
1162 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
1163 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
1164 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
1165 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
1166 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
1167 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
1168 real(kind=rp),
intent(in) :: dxt(lx, lx)
1169 real(kind=rp),
intent(in) :: dyt(lx, lx)
1170 real(kind=rp),
intent(in) :: dzt(lx, lx)
1171 logical,
intent(in) :: dfrmd_el(n)
1172 integer :: i, j, k, l, e
1190 d(i,j,k,e) = d(i,j,k,e) + &
1191 g11(l,j,k,e) * dxt(i,l)**2
1201 d(i,j,k,e) = d(i,j,k,e) + &
1202 g22(i,l,k,e) * dyt(j,l)**2
1212 d(i,j,k,e) = d(i,j,k,e) + &
1213 g33(i,j,l,e) * dzt(k,l)**2
1219 if (dfrmd_el(e))
then
1222 d(1,j,k,e) = d(1,j,k,e) &
1223 + g12(1,j,k,e) * dxt(1,1)*dyt(j,j) &
1224 + g13(1,j,k,e) * dxt(1,1)*dzt(k,k)
1225 d(lx,j,k,e) = d(lx,j,k,e) &
1226 + g12(lx,j,k,e) * dxt(lx,lx)*dyt(j,j) &
1227 + g13(lx,j,k,e) * dxt(lx,lx)*dzt(k,k)
1233 d(i,1,k,e) = d(i,1,k,e) &
1234 + g12(i,1,k,e) * dyt(1,1)*dxt(i,i) &
1235 + g23(i,1,k,e) * dyt(1,1)*dzt(k,k)
1236 d(i,lx,k,e) = d(i,lx,k,e) &
1237 + g12(i,lx,k,e) * dyt(lx,lx)*dxt(i,i) &
1238 + g23(i,lx,k,e) * dyt(lx,lx)*dzt(k,k)
1243 d(i,j,1,e) = d(i,j,1,e) &
1244 + g13(i,j,1,e) * dzt(1,1)*dxt(i,i) &
1245 + g23(i,j,1,e) * dzt(1,1)*dyt(j,j)
1246 d(i,j,lx,e) = d(i,j,lx,e) &
1247 + g13(i,j,lx,e) * dzt(lx,lx)*dxt(i,i) &
1248 + g23(i,j,lx,e) * dzt(lx,lx)*dyt(j,j)
1257 G12, G13, G23, dfrmd_el, n)
1258 integer,
parameter :: lx = 4
1259 integer,
intent(in) :: n
1260 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
1261 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
1262 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
1263 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
1264 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
1265 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
1266 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
1267 real(kind=rp),
intent(in) :: dxt(lx, lx)
1268 real(kind=rp),
intent(in) :: dyt(lx, lx)
1269 real(kind=rp),
intent(in) :: dzt(lx, lx)
1270 logical,
intent(in) :: dfrmd_el(n)
1271 integer :: i, j, k, l, e
1289 d(i,j,k,e) = d(i,j,k,e) + &
1290 g11(l,j,k,e) * dxt(i,l)**2
1300 d(i,j,k,e) = d(i,j,k,e) + &
1301 g22(i,l,k,e) * dyt(j,l)**2
1311 d(i,j,k,e) = d(i,j,k,e) + &
1312 g33(i,j,l,e) * dzt(k,l)**2
1318 if (dfrmd_el(e))
then
1321 d(1,j,k,e) = d(1,j,k,e) &
1322 + g12(1,j,k,e) * dxt(1,1)*dyt(j,j) &
1323 + g13(1,j,k,e) * dxt(1,1)*dzt(k,k)
1324 d(lx,j,k,e) = d(lx,j,k,e) &
1325 + g12(lx,j,k,e) * dxt(lx,lx)*dyt(j,j) &
1326 + g13(lx,j,k,e) * dxt(lx,lx)*dzt(k,k)
1332 d(i,1,k,e) = d(i,1,k,e) &
1333 + g12(i,1,k,e) * dyt(1,1)*dxt(i,i) &
1334 + g23(i,1,k,e) * dyt(1,1)*dzt(k,k)
1335 d(i,lx,k,e) = d(i,lx,k,e) &
1336 + g12(i,lx,k,e) * dyt(lx,lx)*dxt(i,i) &
1337 + g23(i,lx,k,e) * dyt(lx,lx)*dzt(k,k)
1342 d(i,j,1,e) = d(i,j,1,e) &
1343 + g13(i,j,1,e) * dzt(1,1)*dxt(i,i) &
1344 + g23(i,j,1,e) * dzt(1,1)*dyt(j,j)
1345 d(i,j,lx,e) = d(i,j,lx,e) &
1346 + g13(i,j,lx,e) * dzt(lx,lx)*dxt(i,i) &
1347 + g23(i,j,lx,e) * dzt(lx,lx)*dyt(j,j)
1356 G12, G13, G23, dfrmd_el, n)
1357 integer,
parameter :: lx = 3
1358 integer,
intent(in) :: n
1359 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
1360 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
1361 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
1362 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
1363 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
1364 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
1365 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
1366 real(kind=rp),
intent(in) :: dxt(lx, lx)
1367 real(kind=rp),
intent(in) :: dyt(lx, lx)
1368 real(kind=rp),
intent(in) :: dzt(lx, lx)
1369 logical,
intent(in) :: dfrmd_el(n)
1370 integer :: i, j, k, l, e
1388 d(i,j,k,e) = d(i,j,k,e) + &
1389 g11(l,j,k,e) * dxt(i,l)**2
1399 d(i,j,k,e) = d(i,j,k,e) + &
1400 g22(i,l,k,e) * dyt(j,l)**2
1410 d(i,j,k,e) = d(i,j,k,e) + &
1411 g33(i,j,l,e) * dzt(k,l)**2
1417 if (dfrmd_el(e))
then
1420 d(1,j,k,e) = d(1,j,k,e) &
1421 + g12(1,j,k,e) * dxt(1,1)*dyt(j,j) &
1422 + g13(1,j,k,e) * dxt(1,1)*dzt(k,k)
1423 d(lx,j,k,e) = d(lx,j,k,e) &
1424 + g12(lx,j,k,e) * dxt(lx,lx)*dyt(j,j) &
1425 + g13(lx,j,k,e) * dxt(lx,lx)*dzt(k,k)
1431 d(i,1,k,e) = d(i,1,k,e) &
1432 + g12(i,1,k,e) * dyt(1,1)*dxt(i,i) &
1433 + g23(i,1,k,e) * dyt(1,1)*dzt(k,k)
1434 d(i,lx,k,e) = d(i,lx,k,e) &
1435 + g12(i,lx,k,e) * dyt(lx,lx)*dxt(i,i) &
1436 + g23(i,lx,k,e) * dyt(lx,lx)*dzt(k,k)
1441 d(i,j,1,e) = d(i,j,1,e) &
1442 + g13(i,j,1,e) * dzt(1,1)*dxt(i,i) &
1443 + g23(i,j,1,e) * dzt(1,1)*dyt(j,j)
1444 d(i,j,lx,e) = d(i,j,lx,e) &
1445 + g13(i,j,lx,e) * dzt(lx,lx)*dxt(i,i) &
1446 + g23(i,j,lx,e) * dzt(lx,lx)*dyt(j,j)
1455 G12, G13, G23, dfrmd_el, n)
1456 integer,
parameter :: lx = 2
1457 integer,
intent(in) :: n
1458 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
1459 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
1460 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
1461 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
1462 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
1463 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
1464 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
1465 real(kind=rp),
intent(in) :: dxt(lx, lx)
1466 real(kind=rp),
intent(in) :: dyt(lx, lx)
1467 real(kind=rp),
intent(in) :: dzt(lx, lx)
1468 logical,
intent(in) :: dfrmd_el(n)
1469 integer :: i, j, k, l, e
1487 d(i,j,k,e) = d(i,j,k,e) + &
1488 g11(l,j,k,e) * dxt(i,l)**2
1498 d(i,j,k,e) = d(i,j,k,e) + &
1499 g22(i,l,k,e) * dyt(j,l)**2
1509 d(i,j,k,e) = d(i,j,k,e) + &
1510 g33(i,j,l,e) * dzt(k,l)**2
1516 if (dfrmd_el(e))
then
1519 d(1,j,k,e) = d(1,j,k,e) &
1520 + g12(1,j,k,e) * dxt(1,1)*dyt(j,j) &
1521 + g13(1,j,k,e) * dxt(1,1)*dzt(k,k)
1522 d(lx,j,k,e) = d(lx,j,k,e) &
1523 + g12(lx,j,k,e) * dxt(lx,lx)*dyt(j,j) &
1524 + g13(lx,j,k,e) * dxt(lx,lx)*dzt(k,k)
1530 d(i,1,k,e) = d(i,1,k,e) &
1531 + g12(i,1,k,e) * dyt(1,1)*dxt(i,i) &
1532 + g23(i,1,k,e) * dyt(1,1)*dzt(k,k)
1533 d(i,lx,k,e) = d(i,lx,k,e) &
1534 + g12(i,lx,k,e) * dyt(lx,lx)*dxt(i,i) &
1535 + g23(i,lx,k,e) * dyt(lx,lx)*dzt(k,k)
1540 d(i,j,1,e) = d(i,j,1,e) &
1541 + g13(i,j,1,e) * dzt(1,1)*dxt(i,i) &
1542 + g23(i,j,1,e) * dzt(1,1)*dyt(j,j)
1543 d(i,j,lx,e) = d(i,j,lx,e) &
1544 + g13(i,j,lx,e) * dzt(lx,lx)*dxt(i,i) &
1545 + g23(i,j,lx,e) * dzt(lx,lx)*dyt(j,j)
__device__ T solve(const T u, const T y, const T guess, const T nu, const T kappa, const T B)
Defines a mapping of the degrees of freedom.
subroutine jacobi_update_lx8(d, dxt, dyt, dzt, g11, g22, g33, g12, g13, g23, dfrmd_el, n)
subroutine jacobi_solve(this, z, r, n)
The jacobi preconditioner where .
subroutine jacobi_update(this)
Update Jacobi preconditioner if the geometry G has changed.
subroutine jacobi_update_lx7(d, dxt, dyt, dzt, g11, g22, g33, g12, g13, g23, dfrmd_el, n)
subroutine jacobi_update_lx11(d, dxt, dyt, dzt, g11, g22, g33, g12, g13, g23, dfrmd_el, n)
subroutine jacobi_update_lx10(d, dxt, dyt, dzt, g11, g22, g33, g12, g13, g23, dfrmd_el, n)
subroutine jacobi_init(this, coef, dof, gs_h)
subroutine jacobi_free(this)
subroutine jacobi_update_lx(d, dxt, dyt, dzt, g11, g22, g33, g12, g13, g23, dfrmd_el, n, lx)
Generic CPU kernel for updating the Jacobi preconditioner.
subroutine jacobi_update_lx13(d, dxt, dyt, dzt, g11, g22, g33, g12, g13, g23, dfrmd_el, n)
subroutine jacobi_update_lx12(d, dxt, dyt, dzt, g11, g22, g33, g12, g13, g23, dfrmd_el, n)
subroutine jacobi_update_lx5(d, dxt, dyt, dzt, g11, g22, g33, g12, g13, g23, dfrmd_el, n)
subroutine jacobi_update_lx9(d, dxt, dyt, dzt, g11, g22, g33, g12, g13, g23, dfrmd_el, n)
subroutine jacobi_update_lx14(d, dxt, dyt, dzt, g11, g22, g33, g12, g13, g23, dfrmd_el, n)
subroutine jacobi_update_lx4(d, dxt, dyt, dzt, g11, g22, g33, g12, g13, g23, dfrmd_el, n)
subroutine jacobi_update_lx3(d, dxt, dyt, dzt, g11, g22, g33, g12, g13, g23, dfrmd_el, n)
subroutine jacobi_update_lx6(d, dxt, dyt, dzt, g11, g22, g33, g12, g13, g23, dfrmd_el, n)
subroutine jacobi_update_lx2(d, dxt, dyt, dzt, g11, g22, g33, g12, g13, g23, dfrmd_el, n)
subroutine, public addcol3(a, b, c, n)
Returns .
subroutine, public invcol1(a, n)
Invert a vector .
subroutine, public col2(a, b, n)
Vector multiplication .
subroutine, public col3(a, b, c, n)
Vector multiplication with 3 vectors .
integer, parameter, public rp
Global precision used in computations.
Coefficients defined on a given (mesh, ) tuple. Arrays use indices (i,j,k,e): element e,...
Defines a jacobi preconditioner.
Defines a canonical Krylov preconditioner.