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(inout),
target :: coef
62 type(
dofmap_t),
intent(inout),
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)
159 call col2(this%d,coef%h1,coef%dof%size())
160 if (coef%ifh2)
call addcol3(this%d,coef%h2,coef%B,coef%dof%size())
161 call gs_h%op(this%d, dof%size(), gs_op_add)
162 call invcol1(this%d,dof%size())
168 G12, G13, G23, dfrmd_el, n, lx)
169 integer,
intent(in) :: n, lx
170 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
171 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
172 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
173 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
174 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
175 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
176 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
177 real(kind=rp),
intent(in) :: dxt(lx, lx)
178 real(kind=rp),
intent(in) :: dyt(lx, lx)
179 real(kind=rp),
intent(in) :: dzt(lx, lx)
180 logical,
intent(in) :: dfrmd_el(n)
181 integer :: i, j, k, l, e
190 d(i,j,k,e) = d(i,j,k,e) + &
191 g11(l,j,k,e) * dxt(i,l)**2
200 d(i,j,k,e) = d(i,j,k,e) + &
201 g22(i,l,k,e) * dyt(j,l)**2
210 d(i,j,k,e) = d(i,j,k,e) + &
211 g33(i,j,l,e) * dzt(k,l)**2
217 if (dfrmd_el(e))
then
220 d(1,j,k,e) = d(1,j,k,e) &
221 + g12(1,j,k,e) * dxt(1,1)*dyt(j,j) &
222 + g13(1,j,k,e) * dxt(1,1)*dzt(k,k)
223 d(lx,j,k,e) = d(lx,j,k,e) &
224 + g12(lx,j,k,e) * dxt(lx,lx)*dyt(j,j) &
225 + g13(lx,j,k,e) * dxt(lx,lx)*dzt(k,k)
231 d(i,1,k,e) = d(i,1,k,e) &
232 + g12(i,1,k,e) * dyt(1,1)*dxt(i,i) &
233 + g23(i,1,k,e) * dyt(1,1)*dzt(k,k)
234 d(i,lx,k,e) = d(i,lx,k,e) &
235 + g12(i,lx,k,e) * dyt(lx,lx)*dxt(i,i) &
236 + g23(i,lx,k,e) * dyt(lx,lx)*dzt(k,k)
241 d(i,j,1,e) = d(i,j,1,e) &
242 + g13(i,j,1,e) * dzt(1,1)*dxt(i,i) &
243 + g23(i,j,1,e) * dzt(1,1)*dyt(j,j)
244 d(i,j,lx,e) = d(i,j,lx,e) &
245 + g13(i,j,lx,e) * dzt(lx,lx)*dxt(i,i) &
246 + g23(i,j,lx,e) * dzt(lx,lx)*dyt(j,j)
254 G12, G13, G23, dfrmd_el, n)
255 integer,
parameter :: lx = 14
256 integer,
intent(in) :: n
257 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
258 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
259 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
260 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
261 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
262 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
263 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
264 real(kind=rp),
intent(in) :: dxt(lx, lx)
265 real(kind=rp),
intent(in) :: dyt(lx, lx)
266 real(kind=rp),
intent(in) :: dzt(lx, lx)
267 logical,
intent(in) :: dfrmd_el(n)
268 integer :: i, j, k, l, e
277 d(i,j,k,e) = d(i,j,k,e) + &
278 g11(l,j,k,e) * dxt(i,l)**2
287 d(i,j,k,e) = d(i,j,k,e) + &
288 g22(i,l,k,e) * dyt(j,l)**2
297 d(i,j,k,e) = d(i,j,k,e) + &
298 g33(i,j,l,e) * dzt(k,l)**2
304 if (dfrmd_el(e))
then
307 d(1,j,k,e) = d(1,j,k,e) &
308 + g12(1,j,k,e) * dxt(1,1)*dyt(j,j) &
309 + g13(1,j,k,e) * dxt(1,1)*dzt(k,k)
310 d(lx,j,k,e) = d(lx,j,k,e) &
311 + g12(lx,j,k,e) * dxt(lx,lx)*dyt(j,j) &
312 + g13(lx,j,k,e) * dxt(lx,lx)*dzt(k,k)
318 d(i,1,k,e) = d(i,1,k,e) &
319 + g12(i,1,k,e) * dyt(1,1)*dxt(i,i) &
320 + g23(i,1,k,e) * dyt(1,1)*dzt(k,k)
321 d(i,lx,k,e) = d(i,lx,k,e) &
322 + g12(i,lx,k,e) * dyt(lx,lx)*dxt(i,i) &
323 + g23(i,lx,k,e) * dyt(lx,lx)*dzt(k,k)
328 d(i,j,1,e) = d(i,j,1,e) &
329 + g13(i,j,1,e) * dzt(1,1)*dxt(i,i) &
330 + g23(i,j,1,e) * dzt(1,1)*dyt(j,j)
331 d(i,j,lx,e) = d(i,j,lx,e) &
332 + g13(i,j,lx,e) * dzt(lx,lx)*dxt(i,i) &
333 + g23(i,j,lx,e) * dzt(lx,lx)*dyt(j,j)
341 G12, G13, G23, dfrmd_el, n)
342 integer,
parameter :: lx = 13
343 integer,
intent(in) :: n
344 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
345 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
346 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
347 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
348 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
349 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
350 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
351 real(kind=rp),
intent(in) :: dxt(lx, lx)
352 real(kind=rp),
intent(in) :: dyt(lx, lx)
353 real(kind=rp),
intent(in) :: dzt(lx, lx)
354 logical,
intent(in) :: dfrmd_el(n)
355 integer :: i, j, k, l, e
364 d(i,j,k,e) = d(i,j,k,e) + &
365 g11(l,j,k,e) * dxt(i,l)**2
374 d(i,j,k,e) = d(i,j,k,e) + &
375 g22(i,l,k,e) * dyt(j,l)**2
384 d(i,j,k,e) = d(i,j,k,e) + &
385 g33(i,j,l,e) * dzt(k,l)**2
391 if (dfrmd_el(e))
then
394 d(1,j,k,e) = d(1,j,k,e) &
395 + g12(1,j,k,e) * dxt(1,1)*dyt(j,j) &
396 + g13(1,j,k,e) * dxt(1,1)*dzt(k,k)
397 d(lx,j,k,e) = d(lx,j,k,e) &
398 + g12(lx,j,k,e) * dxt(lx,lx)*dyt(j,j) &
399 + g13(lx,j,k,e) * dxt(lx,lx)*dzt(k,k)
405 d(i,1,k,e) = d(i,1,k,e) &
406 + g12(i,1,k,e) * dyt(1,1)*dxt(i,i) &
407 + g23(i,1,k,e) * dyt(1,1)*dzt(k,k)
408 d(i,lx,k,e) = d(i,lx,k,e) &
409 + g12(i,lx,k,e) * dyt(lx,lx)*dxt(i,i) &
410 + g23(i,lx,k,e) * dyt(lx,lx)*dzt(k,k)
415 d(i,j,1,e) = d(i,j,1,e) &
416 + g13(i,j,1,e) * dzt(1,1)*dxt(i,i) &
417 + g23(i,j,1,e) * dzt(1,1)*dyt(j,j)
418 d(i,j,lx,e) = d(i,j,lx,e) &
419 + g13(i,j,lx,e) * dzt(lx,lx)*dxt(i,i) &
420 + g23(i,j,lx,e) * dzt(lx,lx)*dyt(j,j)
428 G12, G13, G23, dfrmd_el, n)
429 integer,
parameter :: lx = 12
430 integer,
intent(in) :: n
431 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
432 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
433 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
434 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
435 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
436 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
437 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
438 real(kind=rp),
intent(in) :: dxt(lx, lx)
439 real(kind=rp),
intent(in) :: dyt(lx, lx)
440 real(kind=rp),
intent(in) :: dzt(lx, lx)
441 logical,
intent(in) :: dfrmd_el(n)
442 integer :: i, j, k, l, e
451 d(i,j,k,e) = d(i,j,k,e) + &
452 g11(l,j,k,e) * dxt(i,l)**2
461 d(i,j,k,e) = d(i,j,k,e) + &
462 g22(i,l,k,e) * dyt(j,l)**2
471 d(i,j,k,e) = d(i,j,k,e) + &
472 g33(i,j,l,e) * dzt(k,l)**2
478 if (dfrmd_el(e))
then
481 d(1,j,k,e) = d(1,j,k,e) &
482 + g12(1,j,k,e) * dxt(1,1)*dyt(j,j) &
483 + g13(1,j,k,e) * dxt(1,1)*dzt(k,k)
484 d(lx,j,k,e) = d(lx,j,k,e) &
485 + g12(lx,j,k,e) * dxt(lx,lx)*dyt(j,j) &
486 + g13(lx,j,k,e) * dxt(lx,lx)*dzt(k,k)
492 d(i,1,k,e) = d(i,1,k,e) &
493 + g12(i,1,k,e) * dyt(1,1)*dxt(i,i) &
494 + g23(i,1,k,e) * dyt(1,1)*dzt(k,k)
495 d(i,lx,k,e) = d(i,lx,k,e) &
496 + g12(i,lx,k,e) * dyt(lx,lx)*dxt(i,i) &
497 + g23(i,lx,k,e) * dyt(lx,lx)*dzt(k,k)
502 d(i,j,1,e) = d(i,j,1,e) &
503 + g13(i,j,1,e) * dzt(1,1)*dxt(i,i) &
504 + g23(i,j,1,e) * dzt(1,1)*dyt(j,j)
505 d(i,j,lx,e) = d(i,j,lx,e) &
506 + g13(i,j,lx,e) * dzt(lx,lx)*dxt(i,i) &
507 + g23(i,j,lx,e) * dzt(lx,lx)*dyt(j,j)
515 G12, G13, G23, dfrmd_el, n)
516 integer,
parameter :: lx = 11
517 integer,
intent(in) :: n
518 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
519 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
520 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
521 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
522 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
523 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
524 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
525 real(kind=rp),
intent(in) :: dxt(lx, lx)
526 real(kind=rp),
intent(in) :: dyt(lx, lx)
527 real(kind=rp),
intent(in) :: dzt(lx, lx)
528 logical,
intent(in) :: dfrmd_el(n)
529 integer :: i, j, k, l, e
538 d(i,j,k,e) = d(i,j,k,e) + &
539 g11(l,j,k,e) * dxt(i,l)**2
548 d(i,j,k,e) = d(i,j,k,e) + &
549 g22(i,l,k,e) * dyt(j,l)**2
558 d(i,j,k,e) = d(i,j,k,e) + &
559 g33(i,j,l,e) * dzt(k,l)**2
565 if (dfrmd_el(e))
then
568 d(1,j,k,e) = d(1,j,k,e) &
569 + g12(1,j,k,e) * dxt(1,1)*dyt(j,j) &
570 + g13(1,j,k,e) * dxt(1,1)*dzt(k,k)
571 d(lx,j,k,e) = d(lx,j,k,e) &
572 + g12(lx,j,k,e) * dxt(lx,lx)*dyt(j,j) &
573 + g13(lx,j,k,e) * dxt(lx,lx)*dzt(k,k)
579 d(i,1,k,e) = d(i,1,k,e) &
580 + g12(i,1,k,e) * dyt(1,1)*dxt(i,i) &
581 + g23(i,1,k,e) * dyt(1,1)*dzt(k,k)
582 d(i,lx,k,e) = d(i,lx,k,e) &
583 + g12(i,lx,k,e) * dyt(lx,lx)*dxt(i,i) &
584 + g23(i,lx,k,e) * dyt(lx,lx)*dzt(k,k)
589 d(i,j,1,e) = d(i,j,1,e) &
590 + g13(i,j,1,e) * dzt(1,1)*dxt(i,i) &
591 + g23(i,j,1,e) * dzt(1,1)*dyt(j,j)
592 d(i,j,lx,e) = d(i,j,lx,e) &
593 + g13(i,j,lx,e) * dzt(lx,lx)*dxt(i,i) &
594 + g23(i,j,lx,e) * dzt(lx,lx)*dyt(j,j)
602 G12, G13, G23, dfrmd_el, n)
603 integer,
parameter :: lx = 10
604 integer,
intent(in) :: n
605 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
606 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
607 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
608 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
609 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
610 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
611 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
612 real(kind=rp),
intent(in) :: dxt(lx, lx)
613 real(kind=rp),
intent(in) :: dyt(lx, lx)
614 real(kind=rp),
intent(in) :: dzt(lx, lx)
615 logical,
intent(in) :: dfrmd_el(n)
616 integer :: i, j, k, l, e
625 d(i,j,k,e) = d(i,j,k,e) + &
626 g11(l,j,k,e) * dxt(i,l)**2
635 d(i,j,k,e) = d(i,j,k,e) + &
636 g22(i,l,k,e) * dyt(j,l)**2
645 d(i,j,k,e) = d(i,j,k,e) + &
646 g33(i,j,l,e) * dzt(k,l)**2
652 if (dfrmd_el(e))
then
655 d(1,j,k,e) = d(1,j,k,e) &
656 + g12(1,j,k,e) * dxt(1,1)*dyt(j,j) &
657 + g13(1,j,k,e) * dxt(1,1)*dzt(k,k)
658 d(lx,j,k,e) = d(lx,j,k,e) &
659 + g12(lx,j,k,e) * dxt(lx,lx)*dyt(j,j) &
660 + g13(lx,j,k,e) * dxt(lx,lx)*dzt(k,k)
666 d(i,1,k,e) = d(i,1,k,e) &
667 + g12(i,1,k,e) * dyt(1,1)*dxt(i,i) &
668 + g23(i,1,k,e) * dyt(1,1)*dzt(k,k)
669 d(i,lx,k,e) = d(i,lx,k,e) &
670 + g12(i,lx,k,e) * dyt(lx,lx)*dxt(i,i) &
671 + g23(i,lx,k,e) * dyt(lx,lx)*dzt(k,k)
676 d(i,j,1,e) = d(i,j,1,e) &
677 + g13(i,j,1,e) * dzt(1,1)*dxt(i,i) &
678 + g23(i,j,1,e) * dzt(1,1)*dyt(j,j)
679 d(i,j,lx,e) = d(i,j,lx,e) &
680 + g13(i,j,lx,e) * dzt(lx,lx)*dxt(i,i) &
681 + g23(i,j,lx,e) * dzt(lx,lx)*dyt(j,j)
689 G12, G13, G23, dfrmd_el, n)
690 integer,
parameter :: lx = 9
691 integer,
intent(in) :: n
692 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
693 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
694 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
695 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
696 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
697 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
698 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
699 real(kind=rp),
intent(in) :: dxt(lx, lx)
700 real(kind=rp),
intent(in) :: dyt(lx, lx)
701 real(kind=rp),
intent(in) :: dzt(lx, lx)
702 logical,
intent(in) :: dfrmd_el(n)
703 integer :: i, j, k, l, e
712 d(i,j,k,e) = d(i,j,k,e) + &
713 g11(l,j,k,e) * dxt(i,l)**2
722 d(i,j,k,e) = d(i,j,k,e) + &
723 g22(i,l,k,e) * dyt(j,l)**2
732 d(i,j,k,e) = d(i,j,k,e) + &
733 g33(i,j,l,e) * dzt(k,l)**2
739 if (dfrmd_el(e))
then
742 d(1,j,k,e) = d(1,j,k,e) &
743 + g12(1,j,k,e) * dxt(1,1)*dyt(j,j) &
744 + g13(1,j,k,e) * dxt(1,1)*dzt(k,k)
745 d(lx,j,k,e) = d(lx,j,k,e) &
746 + g12(lx,j,k,e) * dxt(lx,lx)*dyt(j,j) &
747 + g13(lx,j,k,e) * dxt(lx,lx)*dzt(k,k)
753 d(i,1,k,e) = d(i,1,k,e) &
754 + g12(i,1,k,e) * dyt(1,1)*dxt(i,i) &
755 + g23(i,1,k,e) * dyt(1,1)*dzt(k,k)
756 d(i,lx,k,e) = d(i,lx,k,e) &
757 + g12(i,lx,k,e) * dyt(lx,lx)*dxt(i,i) &
758 + g23(i,lx,k,e) * dyt(lx,lx)*dzt(k,k)
763 d(i,j,1,e) = d(i,j,1,e) &
764 + g13(i,j,1,e) * dzt(1,1)*dxt(i,i) &
765 + g23(i,j,1,e) * dzt(1,1)*dyt(j,j)
766 d(i,j,lx,e) = d(i,j,lx,e) &
767 + g13(i,j,lx,e) * dzt(lx,lx)*dxt(i,i) &
768 + g23(i,j,lx,e) * dzt(lx,lx)*dyt(j,j)
776 G12, G13, G23, dfrmd_el, n)
777 integer,
parameter :: lx = 8
778 integer,
intent(in) :: n
779 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
780 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
781 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
782 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
783 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
784 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
785 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
786 real(kind=rp),
intent(in) :: dxt(lx, lx)
787 real(kind=rp),
intent(in) :: dyt(lx, lx)
788 real(kind=rp),
intent(in) :: dzt(lx, lx)
789 logical,
intent(in) :: dfrmd_el(n)
790 integer :: i, j, k, l, e
799 d(i,j,k,e) = d(i,j,k,e) + &
800 g11(l,j,k,e) * dxt(i,l)**2
809 d(i,j,k,e) = d(i,j,k,e) + &
810 g22(i,l,k,e) * dyt(j,l)**2
819 d(i,j,k,e) = d(i,j,k,e) + &
820 g33(i,j,l,e) * dzt(k,l)**2
826 if (dfrmd_el(e))
then
829 d(1,j,k,e) = d(1,j,k,e) &
830 + g12(1,j,k,e) * dxt(1,1)*dyt(j,j) &
831 + g13(1,j,k,e) * dxt(1,1)*dzt(k,k)
832 d(lx,j,k,e) = d(lx,j,k,e) &
833 + g12(lx,j,k,e) * dxt(lx,lx)*dyt(j,j) &
834 + g13(lx,j,k,e) * dxt(lx,lx)*dzt(k,k)
840 d(i,1,k,e) = d(i,1,k,e) &
841 + g12(i,1,k,e) * dyt(1,1)*dxt(i,i) &
842 + g23(i,1,k,e) * dyt(1,1)*dzt(k,k)
843 d(i,lx,k,e) = d(i,lx,k,e) &
844 + g12(i,lx,k,e) * dyt(lx,lx)*dxt(i,i) &
845 + g23(i,lx,k,e) * dyt(lx,lx)*dzt(k,k)
850 d(i,j,1,e) = d(i,j,1,e) &
851 + g13(i,j,1,e) * dzt(1,1)*dxt(i,i) &
852 + g23(i,j,1,e) * dzt(1,1)*dyt(j,j)
853 d(i,j,lx,e) = d(i,j,lx,e) &
854 + g13(i,j,lx,e) * dzt(lx,lx)*dxt(i,i) &
855 + g23(i,j,lx,e) * dzt(lx,lx)*dyt(j,j)
863 G12, G13, G23, dfrmd_el, n)
864 integer,
parameter :: lx = 7
865 integer,
intent(in) :: n
866 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
867 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
868 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
869 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
870 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
871 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
872 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
873 real(kind=rp),
intent(in) :: dxt(lx, lx)
874 real(kind=rp),
intent(in) :: dyt(lx, lx)
875 real(kind=rp),
intent(in) :: dzt(lx, lx)
876 logical,
intent(in) :: dfrmd_el(n)
877 integer :: i, j, k, l, e
886 d(i,j,k,e) = d(i,j,k,e) + &
887 g11(l,j,k,e) * dxt(i,l)**2
896 d(i,j,k,e) = d(i,j,k,e) + &
897 g22(i,l,k,e) * dyt(j,l)**2
906 d(i,j,k,e) = d(i,j,k,e) + &
907 g33(i,j,l,e) * dzt(k,l)**2
913 if (dfrmd_el(e))
then
916 d(1,j,k,e) = d(1,j,k,e) &
917 + g12(1,j,k,e) * dxt(1,1)*dyt(j,j) &
918 + g13(1,j,k,e) * dxt(1,1)*dzt(k,k)
919 d(lx,j,k,e) = d(lx,j,k,e) &
920 + g12(lx,j,k,e) * dxt(lx,lx)*dyt(j,j) &
921 + g13(lx,j,k,e) * dxt(lx,lx)*dzt(k,k)
927 d(i,1,k,e) = d(i,1,k,e) &
928 + g12(i,1,k,e) * dyt(1,1)*dxt(i,i) &
929 + g23(i,1,k,e) * dyt(1,1)*dzt(k,k)
930 d(i,lx,k,e) = d(i,lx,k,e) &
931 + g12(i,lx,k,e) * dyt(lx,lx)*dxt(i,i) &
932 + g23(i,lx,k,e) * dyt(lx,lx)*dzt(k,k)
937 d(i,j,1,e) = d(i,j,1,e) &
938 + g13(i,j,1,e) * dzt(1,1)*dxt(i,i) &
939 + g23(i,j,1,e) * dzt(1,1)*dyt(j,j)
940 d(i,j,lx,e) = d(i,j,lx,e) &
941 + g13(i,j,lx,e) * dzt(lx,lx)*dxt(i,i) &
942 + g23(i,j,lx,e) * dzt(lx,lx)*dyt(j,j)
950 G12, G13, G23, dfrmd_el, n)
951 integer,
parameter :: lx = 6
952 integer,
intent(in) :: n
953 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
954 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
955 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
956 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
957 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
958 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
959 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
960 real(kind=rp),
intent(in) :: dxt(lx, lx)
961 real(kind=rp),
intent(in) :: dyt(lx, lx)
962 real(kind=rp),
intent(in) :: dzt(lx, lx)
963 logical,
intent(in) :: dfrmd_el(n)
964 integer :: i, j, k, l, e
973 d(i,j,k,e) = d(i,j,k,e) + &
974 g11(l,j,k,e) * dxt(i,l)**2
983 d(i,j,k,e) = d(i,j,k,e) + &
984 g22(i,l,k,e) * dyt(j,l)**2
993 d(i,j,k,e) = d(i,j,k,e) + &
994 g33(i,j,l,e) * dzt(k,l)**2
1000 if (dfrmd_el(e))
then
1003 d(1,j,k,e) = d(1,j,k,e) &
1004 + g12(1,j,k,e) * dxt(1,1)*dyt(j,j) &
1005 + g13(1,j,k,e) * dxt(1,1)*dzt(k,k)
1006 d(lx,j,k,e) = d(lx,j,k,e) &
1007 + g12(lx,j,k,e) * dxt(lx,lx)*dyt(j,j) &
1008 + g13(lx,j,k,e) * dxt(lx,lx)*dzt(k,k)
1014 d(i,1,k,e) = d(i,1,k,e) &
1015 + g12(i,1,k,e) * dyt(1,1)*dxt(i,i) &
1016 + g23(i,1,k,e) * dyt(1,1)*dzt(k,k)
1017 d(i,lx,k,e) = d(i,lx,k,e) &
1018 + g12(i,lx,k,e) * dyt(lx,lx)*dxt(i,i) &
1019 + g23(i,lx,k,e) * dyt(lx,lx)*dzt(k,k)
1024 d(i,j,1,e) = d(i,j,1,e) &
1025 + g13(i,j,1,e) * dzt(1,1)*dxt(i,i) &
1026 + g23(i,j,1,e) * dzt(1,1)*dyt(j,j)
1027 d(i,j,lx,e) = d(i,j,lx,e) &
1028 + g13(i,j,lx,e) * dzt(lx,lx)*dxt(i,i) &
1029 + g23(i,j,lx,e) * dzt(lx,lx)*dyt(j,j)
1037 G12, G13, G23, dfrmd_el, n)
1038 integer,
parameter :: lx = 5
1039 integer,
intent(in) :: n
1040 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
1041 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
1042 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
1043 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
1044 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
1045 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
1046 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
1047 real(kind=rp),
intent(in) :: dxt(lx, lx)
1048 real(kind=rp),
intent(in) :: dyt(lx, lx)
1049 real(kind=rp),
intent(in) :: dzt(lx, lx)
1050 logical,
intent(in) :: dfrmd_el(n)
1051 integer :: i, j, k, l, e
1060 d(i,j,k,e) = d(i,j,k,e) + &
1061 g11(l,j,k,e) * dxt(i,l)**2
1070 d(i,j,k,e) = d(i,j,k,e) + &
1071 g22(i,l,k,e) * dyt(j,l)**2
1080 d(i,j,k,e) = d(i,j,k,e) + &
1081 g33(i,j,l,e) * dzt(k,l)**2
1087 if (dfrmd_el(e))
then
1090 d(1,j,k,e) = d(1,j,k,e) &
1091 + g12(1,j,k,e) * dxt(1,1)*dyt(j,j) &
1092 + g13(1,j,k,e) * dxt(1,1)*dzt(k,k)
1093 d(lx,j,k,e) = d(lx,j,k,e) &
1094 + g12(lx,j,k,e) * dxt(lx,lx)*dyt(j,j) &
1095 + g13(lx,j,k,e) * dxt(lx,lx)*dzt(k,k)
1101 d(i,1,k,e) = d(i,1,k,e) &
1102 + g12(i,1,k,e) * dyt(1,1)*dxt(i,i) &
1103 + g23(i,1,k,e) * dyt(1,1)*dzt(k,k)
1104 d(i,lx,k,e) = d(i,lx,k,e) &
1105 + g12(i,lx,k,e) * dyt(lx,lx)*dxt(i,i) &
1106 + g23(i,lx,k,e) * dyt(lx,lx)*dzt(k,k)
1111 d(i,j,1,e) = d(i,j,1,e) &
1112 + g13(i,j,1,e) * dzt(1,1)*dxt(i,i) &
1113 + g23(i,j,1,e) * dzt(1,1)*dyt(j,j)
1114 d(i,j,lx,e) = d(i,j,lx,e) &
1115 + g13(i,j,lx,e) * dzt(lx,lx)*dxt(i,i) &
1116 + g23(i,j,lx,e) * dzt(lx,lx)*dyt(j,j)
1124 G12, G13, G23, dfrmd_el, n)
1125 integer,
parameter :: lx = 4
1126 integer,
intent(in) :: n
1127 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
1128 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
1129 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
1130 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
1131 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
1132 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
1133 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
1134 real(kind=rp),
intent(in) :: dxt(lx, lx)
1135 real(kind=rp),
intent(in) :: dyt(lx, lx)
1136 real(kind=rp),
intent(in) :: dzt(lx, lx)
1137 logical,
intent(in) :: dfrmd_el(n)
1138 integer :: i, j, k, l, e
1147 d(i,j,k,e) = d(i,j,k,e) + &
1148 g11(l,j,k,e) * dxt(i,l)**2
1157 d(i,j,k,e) = d(i,j,k,e) + &
1158 g22(i,l,k,e) * dyt(j,l)**2
1167 d(i,j,k,e) = d(i,j,k,e) + &
1168 g33(i,j,l,e) * dzt(k,l)**2
1174 if (dfrmd_el(e))
then
1177 d(1,j,k,e) = d(1,j,k,e) &
1178 + g12(1,j,k,e) * dxt(1,1)*dyt(j,j) &
1179 + g13(1,j,k,e) * dxt(1,1)*dzt(k,k)
1180 d(lx,j,k,e) = d(lx,j,k,e) &
1181 + g12(lx,j,k,e) * dxt(lx,lx)*dyt(j,j) &
1182 + g13(lx,j,k,e) * dxt(lx,lx)*dzt(k,k)
1188 d(i,1,k,e) = d(i,1,k,e) &
1189 + g12(i,1,k,e) * dyt(1,1)*dxt(i,i) &
1190 + g23(i,1,k,e) * dyt(1,1)*dzt(k,k)
1191 d(i,lx,k,e) = d(i,lx,k,e) &
1192 + g12(i,lx,k,e) * dyt(lx,lx)*dxt(i,i) &
1193 + g23(i,lx,k,e) * dyt(lx,lx)*dzt(k,k)
1198 d(i,j,1,e) = d(i,j,1,e) &
1199 + g13(i,j,1,e) * dzt(1,1)*dxt(i,i) &
1200 + g23(i,j,1,e) * dzt(1,1)*dyt(j,j)
1201 d(i,j,lx,e) = d(i,j,lx,e) &
1202 + g13(i,j,lx,e) * dzt(lx,lx)*dxt(i,i) &
1203 + g23(i,j,lx,e) * dzt(lx,lx)*dyt(j,j)
1211 G12, G13, G23, dfrmd_el, n)
1212 integer,
parameter :: lx = 3
1213 integer,
intent(in) :: n
1214 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
1215 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
1216 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
1217 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
1218 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
1219 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
1220 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
1221 real(kind=rp),
intent(in) :: dxt(lx, lx)
1222 real(kind=rp),
intent(in) :: dyt(lx, lx)
1223 real(kind=rp),
intent(in) :: dzt(lx, lx)
1224 logical,
intent(in) :: dfrmd_el(n)
1225 integer :: i, j, k, l, e
1234 d(i,j,k,e) = d(i,j,k,e) + &
1235 g11(l,j,k,e) * dxt(i,l)**2
1244 d(i,j,k,e) = d(i,j,k,e) + &
1245 g22(i,l,k,e) * dyt(j,l)**2
1254 d(i,j,k,e) = d(i,j,k,e) + &
1255 g33(i,j,l,e) * dzt(k,l)**2
1261 if (dfrmd_el(e))
then
1264 d(1,j,k,e) = d(1,j,k,e) &
1265 + g12(1,j,k,e) * dxt(1,1)*dyt(j,j) &
1266 + g13(1,j,k,e) * dxt(1,1)*dzt(k,k)
1267 d(lx,j,k,e) = d(lx,j,k,e) &
1268 + g12(lx,j,k,e) * dxt(lx,lx)*dyt(j,j) &
1269 + g13(lx,j,k,e) * dxt(lx,lx)*dzt(k,k)
1275 d(i,1,k,e) = d(i,1,k,e) &
1276 + g12(i,1,k,e) * dyt(1,1)*dxt(i,i) &
1277 + g23(i,1,k,e) * dyt(1,1)*dzt(k,k)
1278 d(i,lx,k,e) = d(i,lx,k,e) &
1279 + g12(i,lx,k,e) * dyt(lx,lx)*dxt(i,i) &
1280 + g23(i,lx,k,e) * dyt(lx,lx)*dzt(k,k)
1285 d(i,j,1,e) = d(i,j,1,e) &
1286 + g13(i,j,1,e) * dzt(1,1)*dxt(i,i) &
1287 + g23(i,j,1,e) * dzt(1,1)*dyt(j,j)
1288 d(i,j,lx,e) = d(i,j,lx,e) &
1289 + g13(i,j,lx,e) * dzt(lx,lx)*dxt(i,i) &
1290 + g23(i,j,lx,e) * dzt(lx,lx)*dyt(j,j)
1298 G12, G13, G23, dfrmd_el, n)
1299 integer,
parameter :: lx = 2
1300 integer,
intent(in) :: n
1301 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
1302 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
1303 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
1304 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
1305 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
1306 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
1307 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
1308 real(kind=rp),
intent(in) :: dxt(lx, lx)
1309 real(kind=rp),
intent(in) :: dyt(lx, lx)
1310 real(kind=rp),
intent(in) :: dzt(lx, lx)
1311 logical,
intent(in) :: dfrmd_el(n)
1312 integer :: i, j, k, l, e
1321 d(i,j,k,e) = d(i,j,k,e) + &
1322 g11(l,j,k,e) * dxt(i,l)**2
1331 d(i,j,k,e) = d(i,j,k,e) + &
1332 g22(i,l,k,e) * dyt(j,l)**2
1341 d(i,j,k,e) = d(i,j,k,e) + &
1342 g33(i,j,l,e) * dzt(k,l)**2
1348 if (dfrmd_el(e))
then
1351 d(1,j,k,e) = d(1,j,k,e) &
1352 + g12(1,j,k,e) * dxt(1,1)*dyt(j,j) &
1353 + g13(1,j,k,e) * dxt(1,1)*dzt(k,k)
1354 d(lx,j,k,e) = d(lx,j,k,e) &
1355 + g12(lx,j,k,e) * dxt(lx,lx)*dyt(j,j) &
1356 + g13(lx,j,k,e) * dxt(lx,lx)*dzt(k,k)
1362 d(i,1,k,e) = d(i,1,k,e) &
1363 + g12(i,1,k,e) * dyt(1,1)*dxt(i,i) &
1364 + g23(i,1,k,e) * dyt(1,1)*dzt(k,k)
1365 d(i,lx,k,e) = d(i,lx,k,e) &
1366 + g12(i,lx,k,e) * dyt(lx,lx)*dxt(i,i) &
1367 + g23(i,lx,k,e) * dyt(lx,lx)*dzt(k,k)
1372 d(i,j,1,e) = d(i,j,1,e) &
1373 + g13(i,j,1,e) * dzt(1,1)*dxt(i,i) &
1374 + g23(i,j,1,e) * dzt(1,1)*dyt(j,j)
1375 d(i,j,lx,e) = d(i,j,lx,e) &
1376 + g13(i,j,lx,e) * dzt(lx,lx)*dxt(i,i) &
1377 + g23(i,j,lx,e) * dzt(lx,lx)*dyt(j,j)
Defines a mapping of the degrees of freedom.
subroutine jacobi_update_lx14(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_lx4(d, dxt, dyt, dzt, G11, G22, G33, G12, G13, G23, dfrmd_el, n)
subroutine jacobi_update_lx13(d, dxt, dyt, dzt, G11, G22, G33, G12, G13, G23, dfrmd_el, n)
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_init(this, coef, dof, gs_h)
subroutine jacobi_update_lx2(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_free(this)
subroutine jacobi_update_lx12(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_lx8(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_lx7(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_lx3(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, 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.