38 use json_module,
only : json_file
48 real(kind=
rp),
allocatable :: d(:, :, :, :)
49 type(
gs_t),
pointer :: gs_h
54 procedure, pass(this) :: init_from_components => &
66 class(
jacobi_t),
intent(inout),
target :: this
67 type(
coef_t),
intent(in),
target :: coef
68 type(
bc_list_t),
intent(inout),
target :: bclst
69 type(json_file),
intent(inout) :: json
71 call this%init_from_components(coef, coef%dof, coef%gs_h)
76 class(
jacobi_t),
intent(inout) :: this
77 type(
coef_t),
intent(in),
target :: coef
78 type(
dofmap_t),
intent(in),
target :: dof
79 type(
gs_t),
intent(inout),
target :: gs_h
85 allocate(this%d(dof%Xh%lx, dof%Xh%ly, dof%Xh%lz, dof%msh%nelv))
91 class(
jacobi_t),
intent(inout) :: this
92 if (
allocated(this%d))
then
103 integer,
intent(in) :: n
104 class(
jacobi_t),
intent(inout) :: this
105 real(kind=
rp),
dimension(n),
intent(inout) :: z
106 real(kind=
rp),
dimension(n),
intent(inout) :: r
107 call col3(z, r, this%d, n)
112 class(
jacobi_t),
intent(inout) :: this
113 associate(dof => this%dof, coef => this%coef, gs_h => this%gs_h)
116 select case (dof%Xh%lx)
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)
159 coef%G11, coef%G22, coef%G33, coef%G12, coef%G13, coef%G23, &
160 dof%msh%dfrmd_el, dof%msh%nelv)
163 coef%G11, coef%G22, coef%G33, coef%G12, coef%G13, coef%G23, &
164 dof%msh%dfrmd_el, dof%msh%nelv)
167 coef%G11, coef%G22, coef%G33, coef%G12, coef%G13, coef%G23, &
168 dof%msh%dfrmd_el, dof%msh%nelv)
171 coef%G11, coef%G22, coef%G33, coef%G12, coef%G13, coef%G23, &
172 dof%msh%dfrmd_el, dof%msh%nelv, dof%Xh%lx)
176 call col2(this%d, coef%h1, coef%dof%size())
177 if (coef%ifh2)
call addcol3(this%d, coef%h2, coef%B, coef%dof%size())
178 call gs_h%op(this%d, dof%size(), gs_op_add)
179 call invcol1(this%d, dof%size())
185 G12, G13, G23, dfrmd_el, n, lx)
186 integer,
intent(in) :: n, lx
187 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
188 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
189 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
190 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
191 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
192 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
193 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
194 real(kind=rp),
intent(in) :: dxt(lx, lx)
195 real(kind=rp),
intent(in) :: dyt(lx, lx)
196 real(kind=rp),
intent(in) :: dzt(lx, lx)
197 logical,
intent(in) :: dfrmd_el(n)
198 integer :: i, j, k, l, e
216 d(i,j,k,e) = d(i,j,k,e) + &
217 g11(l,j,k,e) * dxt(i,l)**2
227 d(i,j,k,e) = d(i,j,k,e) + &
228 g22(i,l,k,e) * dyt(j,l)**2
238 d(i,j,k,e) = d(i,j,k,e) + &
239 g33(i,j,l,e) * dzt(k,l)**2
245 if (dfrmd_el(e))
then
248 d(1,j,k,e) = d(1,j,k,e) &
249 + g12(1,j,k,e) * dxt(1,1)*dyt(j,j) &
250 + g13(1,j,k,e) * dxt(1,1)*dzt(k,k)
251 d(lx,j,k,e) = d(lx,j,k,e) &
252 + g12(lx,j,k,e) * dxt(lx,lx)*dyt(j,j) &
253 + g13(lx,j,k,e) * dxt(lx,lx)*dzt(k,k)
259 d(i,1,k,e) = d(i,1,k,e) &
260 + g12(i,1,k,e) * dyt(1,1)*dxt(i,i) &
261 + g23(i,1,k,e) * dyt(1,1)*dzt(k,k)
262 d(i,lx,k,e) = d(i,lx,k,e) &
263 + g12(i,lx,k,e) * dyt(lx,lx)*dxt(i,i) &
264 + g23(i,lx,k,e) * dyt(lx,lx)*dzt(k,k)
269 d(i,j,1,e) = d(i,j,1,e) &
270 + g13(i,j,1,e) * dzt(1,1)*dxt(i,i) &
271 + g23(i,j,1,e) * dzt(1,1)*dyt(j,j)
272 d(i,j,lx,e) = d(i,j,lx,e) &
273 + g13(i,j,lx,e) * dzt(lx,lx)*dxt(i,i) &
274 + g23(i,j,lx,e) * dzt(lx,lx)*dyt(j,j)
283 G12, G13, G23, dfrmd_el, n)
284 integer,
parameter :: lx = 14
285 integer,
intent(in) :: n
286 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
287 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
288 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
289 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
290 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
291 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
292 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
293 real(kind=rp),
intent(in) :: dxt(lx, lx)
294 real(kind=rp),
intent(in) :: dyt(lx, lx)
295 real(kind=rp),
intent(in) :: dzt(lx, lx)
296 logical,
intent(in) :: dfrmd_el(n)
297 integer :: i, j, k, l, e
315 d(i,j,k,e) = d(i,j,k,e) + &
316 g11(l,j,k,e) * dxt(i,l)**2
326 d(i,j,k,e) = d(i,j,k,e) + &
327 g22(i,l,k,e) * dyt(j,l)**2
337 d(i,j,k,e) = d(i,j,k,e) + &
338 g33(i,j,l,e) * dzt(k,l)**2
344 if (dfrmd_el(e))
then
347 d(1,j,k,e) = d(1,j,k,e) &
348 + g12(1,j,k,e) * dxt(1,1)*dyt(j,j) &
349 + g13(1,j,k,e) * dxt(1,1)*dzt(k,k)
350 d(lx,j,k,e) = d(lx,j,k,e) &
351 + g12(lx,j,k,e) * dxt(lx,lx)*dyt(j,j) &
352 + g13(lx,j,k,e) * dxt(lx,lx)*dzt(k,k)
358 d(i,1,k,e) = d(i,1,k,e) &
359 + g12(i,1,k,e) * dyt(1,1)*dxt(i,i) &
360 + g23(i,1,k,e) * dyt(1,1)*dzt(k,k)
361 d(i,lx,k,e) = d(i,lx,k,e) &
362 + g12(i,lx,k,e) * dyt(lx,lx)*dxt(i,i) &
363 + g23(i,lx,k,e) * dyt(lx,lx)*dzt(k,k)
368 d(i,j,1,e) = d(i,j,1,e) &
369 + g13(i,j,1,e) * dzt(1,1)*dxt(i,i) &
370 + g23(i,j,1,e) * dzt(1,1)*dyt(j,j)
371 d(i,j,lx,e) = d(i,j,lx,e) &
372 + g13(i,j,lx,e) * dzt(lx,lx)*dxt(i,i) &
373 + g23(i,j,lx,e) * dzt(lx,lx)*dyt(j,j)
382 G12, G13, G23, dfrmd_el, n)
383 integer,
parameter :: lx = 13
384 integer,
intent(in) :: n
385 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
386 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
387 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
388 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
389 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
390 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
391 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
392 real(kind=rp),
intent(in) :: dxt(lx, lx)
393 real(kind=rp),
intent(in) :: dyt(lx, lx)
394 real(kind=rp),
intent(in) :: dzt(lx, lx)
395 logical,
intent(in) :: dfrmd_el(n)
396 integer :: i, j, k, l, e
414 d(i,j,k,e) = d(i,j,k,e) + &
415 g11(l,j,k,e) * dxt(i,l)**2
425 d(i,j,k,e) = d(i,j,k,e) + &
426 g22(i,l,k,e) * dyt(j,l)**2
436 d(i,j,k,e) = d(i,j,k,e) + &
437 g33(i,j,l,e) * dzt(k,l)**2
443 if (dfrmd_el(e))
then
446 d(1,j,k,e) = d(1,j,k,e) &
447 + g12(1,j,k,e) * dxt(1,1)*dyt(j,j) &
448 + g13(1,j,k,e) * dxt(1,1)*dzt(k,k)
449 d(lx,j,k,e) = d(lx,j,k,e) &
450 + g12(lx,j,k,e) * dxt(lx,lx)*dyt(j,j) &
451 + g13(lx,j,k,e) * dxt(lx,lx)*dzt(k,k)
457 d(i,1,k,e) = d(i,1,k,e) &
458 + g12(i,1,k,e) * dyt(1,1)*dxt(i,i) &
459 + g23(i,1,k,e) * dyt(1,1)*dzt(k,k)
460 d(i,lx,k,e) = d(i,lx,k,e) &
461 + g12(i,lx,k,e) * dyt(lx,lx)*dxt(i,i) &
462 + g23(i,lx,k,e) * dyt(lx,lx)*dzt(k,k)
467 d(i,j,1,e) = d(i,j,1,e) &
468 + g13(i,j,1,e) * dzt(1,1)*dxt(i,i) &
469 + g23(i,j,1,e) * dzt(1,1)*dyt(j,j)
470 d(i,j,lx,e) = d(i,j,lx,e) &
471 + g13(i,j,lx,e) * dzt(lx,lx)*dxt(i,i) &
472 + g23(i,j,lx,e) * dzt(lx,lx)*dyt(j,j)
481 G12, G13, G23, dfrmd_el, n)
482 integer,
parameter :: lx = 12
483 integer,
intent(in) :: n
484 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
485 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
486 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
487 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
488 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
489 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
490 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
491 real(kind=rp),
intent(in) :: dxt(lx, lx)
492 real(kind=rp),
intent(in) :: dyt(lx, lx)
493 real(kind=rp),
intent(in) :: dzt(lx, lx)
494 logical,
intent(in) :: dfrmd_el(n)
495 integer :: i, j, k, l, e
513 d(i,j,k,e) = d(i,j,k,e) + &
514 g11(l,j,k,e) * dxt(i,l)**2
524 d(i,j,k,e) = d(i,j,k,e) + &
525 g22(i,l,k,e) * dyt(j,l)**2
535 d(i,j,k,e) = d(i,j,k,e) + &
536 g33(i,j,l,e) * dzt(k,l)**2
542 if (dfrmd_el(e))
then
545 d(1,j,k,e) = d(1,j,k,e) &
546 + g12(1,j,k,e) * dxt(1,1)*dyt(j,j) &
547 + g13(1,j,k,e) * dxt(1,1)*dzt(k,k)
548 d(lx,j,k,e) = d(lx,j,k,e) &
549 + g12(lx,j,k,e) * dxt(lx,lx)*dyt(j,j) &
550 + g13(lx,j,k,e) * dxt(lx,lx)*dzt(k,k)
556 d(i,1,k,e) = d(i,1,k,e) &
557 + g12(i,1,k,e) * dyt(1,1)*dxt(i,i) &
558 + g23(i,1,k,e) * dyt(1,1)*dzt(k,k)
559 d(i,lx,k,e) = d(i,lx,k,e) &
560 + g12(i,lx,k,e) * dyt(lx,lx)*dxt(i,i) &
561 + g23(i,lx,k,e) * dyt(lx,lx)*dzt(k,k)
566 d(i,j,1,e) = d(i,j,1,e) &
567 + g13(i,j,1,e) * dzt(1,1)*dxt(i,i) &
568 + g23(i,j,1,e) * dzt(1,1)*dyt(j,j)
569 d(i,j,lx,e) = d(i,j,lx,e) &
570 + g13(i,j,lx,e) * dzt(lx,lx)*dxt(i,i) &
571 + g23(i,j,lx,e) * dzt(lx,lx)*dyt(j,j)
580 G12, G13, G23, dfrmd_el, n)
581 integer,
parameter :: lx = 11
582 integer,
intent(in) :: n
583 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
584 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
585 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
586 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
587 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
588 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
589 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
590 real(kind=rp),
intent(in) :: dxt(lx, lx)
591 real(kind=rp),
intent(in) :: dyt(lx, lx)
592 real(kind=rp),
intent(in) :: dzt(lx, lx)
593 logical,
intent(in) :: dfrmd_el(n)
594 integer :: i, j, k, l, e
612 d(i,j,k,e) = d(i,j,k,e) + &
613 g11(l,j,k,e) * dxt(i,l)**2
623 d(i,j,k,e) = d(i,j,k,e) + &
624 g22(i,l,k,e) * dyt(j,l)**2
634 d(i,j,k,e) = d(i,j,k,e) + &
635 g33(i,j,l,e) * dzt(k,l)**2
641 if (dfrmd_el(e))
then
644 d(1,j,k,e) = d(1,j,k,e) &
645 + g12(1,j,k,e) * dxt(1,1)*dyt(j,j) &
646 + g13(1,j,k,e) * dxt(1,1)*dzt(k,k)
647 d(lx,j,k,e) = d(lx,j,k,e) &
648 + g12(lx,j,k,e) * dxt(lx,lx)*dyt(j,j) &
649 + g13(lx,j,k,e) * dxt(lx,lx)*dzt(k,k)
655 d(i,1,k,e) = d(i,1,k,e) &
656 + g12(i,1,k,e) * dyt(1,1)*dxt(i,i) &
657 + g23(i,1,k,e) * dyt(1,1)*dzt(k,k)
658 d(i,lx,k,e) = d(i,lx,k,e) &
659 + g12(i,lx,k,e) * dyt(lx,lx)*dxt(i,i) &
660 + g23(i,lx,k,e) * dyt(lx,lx)*dzt(k,k)
665 d(i,j,1,e) = d(i,j,1,e) &
666 + g13(i,j,1,e) * dzt(1,1)*dxt(i,i) &
667 + g23(i,j,1,e) * dzt(1,1)*dyt(j,j)
668 d(i,j,lx,e) = d(i,j,lx,e) &
669 + g13(i,j,lx,e) * dzt(lx,lx)*dxt(i,i) &
670 + g23(i,j,lx,e) * dzt(lx,lx)*dyt(j,j)
679 G12, G13, G23, dfrmd_el, n)
680 integer,
parameter :: lx = 10
681 integer,
intent(in) :: n
682 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
683 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
684 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
685 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
686 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
687 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
688 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
689 real(kind=rp),
intent(in) :: dxt(lx, lx)
690 real(kind=rp),
intent(in) :: dyt(lx, lx)
691 real(kind=rp),
intent(in) :: dzt(lx, lx)
692 logical,
intent(in) :: dfrmd_el(n)
693 integer :: i, j, k, l, e
711 d(i,j,k,e) = d(i,j,k,e) + &
712 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
733 d(i,j,k,e) = d(i,j,k,e) + &
734 g33(i,j,l,e) * dzt(k,l)**2
740 if (dfrmd_el(e))
then
743 d(1,j,k,e) = d(1,j,k,e) &
744 + g12(1,j,k,e) * dxt(1,1)*dyt(j,j) &
745 + g13(1,j,k,e) * dxt(1,1)*dzt(k,k)
746 d(lx,j,k,e) = d(lx,j,k,e) &
747 + g12(lx,j,k,e) * dxt(lx,lx)*dyt(j,j) &
748 + g13(lx,j,k,e) * dxt(lx,lx)*dzt(k,k)
754 d(i,1,k,e) = d(i,1,k,e) &
755 + g12(i,1,k,e) * dyt(1,1)*dxt(i,i) &
756 + g23(i,1,k,e) * dyt(1,1)*dzt(k,k)
757 d(i,lx,k,e) = d(i,lx,k,e) &
758 + g12(i,lx,k,e) * dyt(lx,lx)*dxt(i,i) &
759 + g23(i,lx,k,e) * dyt(lx,lx)*dzt(k,k)
764 d(i,j,1,e) = d(i,j,1,e) &
765 + g13(i,j,1,e) * dzt(1,1)*dxt(i,i) &
766 + g23(i,j,1,e) * dzt(1,1)*dyt(j,j)
767 d(i,j,lx,e) = d(i,j,lx,e) &
768 + g13(i,j,lx,e) * dzt(lx,lx)*dxt(i,i) &
769 + g23(i,j,lx,e) * dzt(lx,lx)*dyt(j,j)
778 G12, G13, G23, dfrmd_el, n)
779 integer,
parameter :: lx = 9
780 integer,
intent(in) :: n
781 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
782 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
783 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
784 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
785 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
786 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
787 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
788 real(kind=rp),
intent(in) :: dxt(lx, lx)
789 real(kind=rp),
intent(in) :: dyt(lx, lx)
790 real(kind=rp),
intent(in) :: dzt(lx, lx)
791 logical,
intent(in) :: dfrmd_el(n)
792 integer :: i, j, k, l, e
810 d(i,j,k,e) = d(i,j,k,e) + &
811 g11(l,j,k,e) * dxt(i,l)**2
821 d(i,j,k,e) = d(i,j,k,e) + &
822 g22(i,l,k,e) * dyt(j,l)**2
832 d(i,j,k,e) = d(i,j,k,e) + &
833 g33(i,j,l,e) * dzt(k,l)**2
839 if (dfrmd_el(e))
then
842 d(1,j,k,e) = d(1,j,k,e) &
843 + g12(1,j,k,e) * dxt(1,1)*dyt(j,j) &
844 + g13(1,j,k,e) * dxt(1,1)*dzt(k,k)
845 d(lx,j,k,e) = d(lx,j,k,e) &
846 + g12(lx,j,k,e) * dxt(lx,lx)*dyt(j,j) &
847 + g13(lx,j,k,e) * dxt(lx,lx)*dzt(k,k)
853 d(i,1,k,e) = d(i,1,k,e) &
854 + g12(i,1,k,e) * dyt(1,1)*dxt(i,i) &
855 + g23(i,1,k,e) * dyt(1,1)*dzt(k,k)
856 d(i,lx,k,e) = d(i,lx,k,e) &
857 + g12(i,lx,k,e) * dyt(lx,lx)*dxt(i,i) &
858 + g23(i,lx,k,e) * dyt(lx,lx)*dzt(k,k)
863 d(i,j,1,e) = d(i,j,1,e) &
864 + g13(i,j,1,e) * dzt(1,1)*dxt(i,i) &
865 + g23(i,j,1,e) * dzt(1,1)*dyt(j,j)
866 d(i,j,lx,e) = d(i,j,lx,e) &
867 + g13(i,j,lx,e) * dzt(lx,lx)*dxt(i,i) &
868 + g23(i,j,lx,e) * dzt(lx,lx)*dyt(j,j)
877 G12, G13, G23, dfrmd_el, n)
878 integer,
parameter :: lx = 8
879 integer,
intent(in) :: n
880 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
881 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
882 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
883 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
884 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
885 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
886 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
887 real(kind=rp),
intent(in) :: dxt(lx, lx)
888 real(kind=rp),
intent(in) :: dyt(lx, lx)
889 real(kind=rp),
intent(in) :: dzt(lx, lx)
890 logical,
intent(in) :: dfrmd_el(n)
891 integer :: i, j, k, l, e
909 d(i,j,k,e) = d(i,j,k,e) + &
910 g11(l,j,k,e) * dxt(i,l)**2
920 d(i,j,k,e) = d(i,j,k,e) + &
921 g22(i,l,k,e) * dyt(j,l)**2
931 d(i,j,k,e) = d(i,j,k,e) + &
932 g33(i,j,l,e) * dzt(k,l)**2
938 if (dfrmd_el(e))
then
941 d(1,j,k,e) = d(1,j,k,e) &
942 + g12(1,j,k,e) * dxt(1,1)*dyt(j,j) &
943 + g13(1,j,k,e) * dxt(1,1)*dzt(k,k)
944 d(lx,j,k,e) = d(lx,j,k,e) &
945 + g12(lx,j,k,e) * dxt(lx,lx)*dyt(j,j) &
946 + g13(lx,j,k,e) * dxt(lx,lx)*dzt(k,k)
952 d(i,1,k,e) = d(i,1,k,e) &
953 + g12(i,1,k,e) * dyt(1,1)*dxt(i,i) &
954 + g23(i,1,k,e) * dyt(1,1)*dzt(k,k)
955 d(i,lx,k,e) = d(i,lx,k,e) &
956 + g12(i,lx,k,e) * dyt(lx,lx)*dxt(i,i) &
957 + g23(i,lx,k,e) * dyt(lx,lx)*dzt(k,k)
962 d(i,j,1,e) = d(i,j,1,e) &
963 + g13(i,j,1,e) * dzt(1,1)*dxt(i,i) &
964 + g23(i,j,1,e) * dzt(1,1)*dyt(j,j)
965 d(i,j,lx,e) = d(i,j,lx,e) &
966 + g13(i,j,lx,e) * dzt(lx,lx)*dxt(i,i) &
967 + g23(i,j,lx,e) * dzt(lx,lx)*dyt(j,j)
976 G12, G13, G23, dfrmd_el, n)
977 integer,
parameter :: lx = 7
978 integer,
intent(in) :: n
979 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
980 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
981 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
982 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
983 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
984 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
985 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
986 real(kind=rp),
intent(in) :: dxt(lx, lx)
987 real(kind=rp),
intent(in) :: dyt(lx, lx)
988 real(kind=rp),
intent(in) :: dzt(lx, lx)
989 logical,
intent(in) :: dfrmd_el(n)
990 integer :: i, j, k, l, e
1008 d(i,j,k,e) = d(i,j,k,e) + &
1009 g11(l,j,k,e) * dxt(i,l)**2
1019 d(i,j,k,e) = d(i,j,k,e) + &
1020 g22(i,l,k,e) * dyt(j,l)**2
1030 d(i,j,k,e) = d(i,j,k,e) + &
1031 g33(i,j,l,e) * dzt(k,l)**2
1037 if (dfrmd_el(e))
then
1040 d(1,j,k,e) = d(1,j,k,e) &
1041 + g12(1,j,k,e) * dxt(1,1)*dyt(j,j) &
1042 + g13(1,j,k,e) * dxt(1,1)*dzt(k,k)
1043 d(lx,j,k,e) = d(lx,j,k,e) &
1044 + g12(lx,j,k,e) * dxt(lx,lx)*dyt(j,j) &
1045 + g13(lx,j,k,e) * dxt(lx,lx)*dzt(k,k)
1051 d(i,1,k,e) = d(i,1,k,e) &
1052 + g12(i,1,k,e) * dyt(1,1)*dxt(i,i) &
1053 + g23(i,1,k,e) * dyt(1,1)*dzt(k,k)
1054 d(i,lx,k,e) = d(i,lx,k,e) &
1055 + g12(i,lx,k,e) * dyt(lx,lx)*dxt(i,i) &
1056 + g23(i,lx,k,e) * dyt(lx,lx)*dzt(k,k)
1061 d(i,j,1,e) = d(i,j,1,e) &
1062 + g13(i,j,1,e) * dzt(1,1)*dxt(i,i) &
1063 + g23(i,j,1,e) * dzt(1,1)*dyt(j,j)
1064 d(i,j,lx,e) = d(i,j,lx,e) &
1065 + g13(i,j,lx,e) * dzt(lx,lx)*dxt(i,i) &
1066 + g23(i,j,lx,e) * dzt(lx,lx)*dyt(j,j)
1075 G12, G13, G23, dfrmd_el, n)
1076 integer,
parameter :: lx = 6
1077 integer,
intent(in) :: n
1078 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
1079 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
1080 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
1081 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
1082 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
1083 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
1084 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
1085 real(kind=rp),
intent(in) :: dxt(lx, lx)
1086 real(kind=rp),
intent(in) :: dyt(lx, lx)
1087 real(kind=rp),
intent(in) :: dzt(lx, lx)
1088 logical,
intent(in) :: dfrmd_el(n)
1089 integer :: i, j, k, l, e
1107 d(i,j,k,e) = d(i,j,k,e) + &
1108 g11(l,j,k,e) * dxt(i,l)**2
1118 d(i,j,k,e) = d(i,j,k,e) + &
1119 g22(i,l,k,e) * dyt(j,l)**2
1129 d(i,j,k,e) = d(i,j,k,e) + &
1130 g33(i,j,l,e) * dzt(k,l)**2
1136 if (dfrmd_el(e))
then
1139 d(1,j,k,e) = d(1,j,k,e) &
1140 + g12(1,j,k,e) * dxt(1,1)*dyt(j,j) &
1141 + g13(1,j,k,e) * dxt(1,1)*dzt(k,k)
1142 d(lx,j,k,e) = d(lx,j,k,e) &
1143 + g12(lx,j,k,e) * dxt(lx,lx)*dyt(j,j) &
1144 + g13(lx,j,k,e) * dxt(lx,lx)*dzt(k,k)
1150 d(i,1,k,e) = d(i,1,k,e) &
1151 + g12(i,1,k,e) * dyt(1,1)*dxt(i,i) &
1152 + g23(i,1,k,e) * dyt(1,1)*dzt(k,k)
1153 d(i,lx,k,e) = d(i,lx,k,e) &
1154 + g12(i,lx,k,e) * dyt(lx,lx)*dxt(i,i) &
1155 + g23(i,lx,k,e) * dyt(lx,lx)*dzt(k,k)
1160 d(i,j,1,e) = d(i,j,1,e) &
1161 + g13(i,j,1,e) * dzt(1,1)*dxt(i,i) &
1162 + g23(i,j,1,e) * dzt(1,1)*dyt(j,j)
1163 d(i,j,lx,e) = d(i,j,lx,e) &
1164 + g13(i,j,lx,e) * dzt(lx,lx)*dxt(i,i) &
1165 + g23(i,j,lx,e) * dzt(lx,lx)*dyt(j,j)
1174 G12, G13, G23, dfrmd_el, n)
1175 integer,
parameter :: lx = 5
1176 integer,
intent(in) :: n
1177 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
1178 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
1179 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
1180 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
1181 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
1182 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
1183 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
1184 real(kind=rp),
intent(in) :: dxt(lx, lx)
1185 real(kind=rp),
intent(in) :: dyt(lx, lx)
1186 real(kind=rp),
intent(in) :: dzt(lx, lx)
1187 logical,
intent(in) :: dfrmd_el(n)
1188 integer :: i, j, k, l, e
1206 d(i,j,k,e) = d(i,j,k,e) + &
1207 g11(l,j,k,e) * dxt(i,l)**2
1217 d(i,j,k,e) = d(i,j,k,e) + &
1218 g22(i,l,k,e) * dyt(j,l)**2
1228 d(i,j,k,e) = d(i,j,k,e) + &
1229 g33(i,j,l,e) * dzt(k,l)**2
1235 if (dfrmd_el(e))
then
1238 d(1,j,k,e) = d(1,j,k,e) &
1239 + g12(1,j,k,e) * dxt(1,1)*dyt(j,j) &
1240 + g13(1,j,k,e) * dxt(1,1)*dzt(k,k)
1241 d(lx,j,k,e) = d(lx,j,k,e) &
1242 + g12(lx,j,k,e) * dxt(lx,lx)*dyt(j,j) &
1243 + g13(lx,j,k,e) * dxt(lx,lx)*dzt(k,k)
1249 d(i,1,k,e) = d(i,1,k,e) &
1250 + g12(i,1,k,e) * dyt(1,1)*dxt(i,i) &
1251 + g23(i,1,k,e) * dyt(1,1)*dzt(k,k)
1252 d(i,lx,k,e) = d(i,lx,k,e) &
1253 + g12(i,lx,k,e) * dyt(lx,lx)*dxt(i,i) &
1254 + g23(i,lx,k,e) * dyt(lx,lx)*dzt(k,k)
1259 d(i,j,1,e) = d(i,j,1,e) &
1260 + g13(i,j,1,e) * dzt(1,1)*dxt(i,i) &
1261 + g23(i,j,1,e) * dzt(1,1)*dyt(j,j)
1262 d(i,j,lx,e) = d(i,j,lx,e) &
1263 + g13(i,j,lx,e) * dzt(lx,lx)*dxt(i,i) &
1264 + g23(i,j,lx,e) * dzt(lx,lx)*dyt(j,j)
1273 G12, G13, G23, dfrmd_el, n)
1274 integer,
parameter :: lx = 4
1275 integer,
intent(in) :: n
1276 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
1277 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
1278 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
1279 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
1280 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
1281 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
1282 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
1283 real(kind=rp),
intent(in) :: dxt(lx, lx)
1284 real(kind=rp),
intent(in) :: dyt(lx, lx)
1285 real(kind=rp),
intent(in) :: dzt(lx, lx)
1286 logical,
intent(in) :: dfrmd_el(n)
1287 integer :: i, j, k, l, e
1305 d(i,j,k,e) = d(i,j,k,e) + &
1306 g11(l,j,k,e) * dxt(i,l)**2
1316 d(i,j,k,e) = d(i,j,k,e) + &
1317 g22(i,l,k,e) * dyt(j,l)**2
1327 d(i,j,k,e) = d(i,j,k,e) + &
1328 g33(i,j,l,e) * dzt(k,l)**2
1334 if (dfrmd_el(e))
then
1337 d(1,j,k,e) = d(1,j,k,e) &
1338 + g12(1,j,k,e) * dxt(1,1)*dyt(j,j) &
1339 + g13(1,j,k,e) * dxt(1,1)*dzt(k,k)
1340 d(lx,j,k,e) = d(lx,j,k,e) &
1341 + g12(lx,j,k,e) * dxt(lx,lx)*dyt(j,j) &
1342 + g13(lx,j,k,e) * dxt(lx,lx)*dzt(k,k)
1348 d(i,1,k,e) = d(i,1,k,e) &
1349 + g12(i,1,k,e) * dyt(1,1)*dxt(i,i) &
1350 + g23(i,1,k,e) * dyt(1,1)*dzt(k,k)
1351 d(i,lx,k,e) = d(i,lx,k,e) &
1352 + g12(i,lx,k,e) * dyt(lx,lx)*dxt(i,i) &
1353 + g23(i,lx,k,e) * dyt(lx,lx)*dzt(k,k)
1358 d(i,j,1,e) = d(i,j,1,e) &
1359 + g13(i,j,1,e) * dzt(1,1)*dxt(i,i) &
1360 + g23(i,j,1,e) * dzt(1,1)*dyt(j,j)
1361 d(i,j,lx,e) = d(i,j,lx,e) &
1362 + g13(i,j,lx,e) * dzt(lx,lx)*dxt(i,i) &
1363 + g23(i,j,lx,e) * dzt(lx,lx)*dyt(j,j)
1372 G12, G13, G23, dfrmd_el, n)
1373 integer,
parameter :: lx = 3
1374 integer,
intent(in) :: n
1375 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
1376 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
1377 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
1378 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
1379 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
1380 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
1381 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
1382 real(kind=rp),
intent(in) :: dxt(lx, lx)
1383 real(kind=rp),
intent(in) :: dyt(lx, lx)
1384 real(kind=rp),
intent(in) :: dzt(lx, lx)
1385 logical,
intent(in) :: dfrmd_el(n)
1386 integer :: i, j, k, l, e
1404 d(i,j,k,e) = d(i,j,k,e) + &
1405 g11(l,j,k,e) * dxt(i,l)**2
1415 d(i,j,k,e) = d(i,j,k,e) + &
1416 g22(i,l,k,e) * dyt(j,l)**2
1426 d(i,j,k,e) = d(i,j,k,e) + &
1427 g33(i,j,l,e) * dzt(k,l)**2
1433 if (dfrmd_el(e))
then
1436 d(1,j,k,e) = d(1,j,k,e) &
1437 + g12(1,j,k,e) * dxt(1,1)*dyt(j,j) &
1438 + g13(1,j,k,e) * dxt(1,1)*dzt(k,k)
1439 d(lx,j,k,e) = d(lx,j,k,e) &
1440 + g12(lx,j,k,e) * dxt(lx,lx)*dyt(j,j) &
1441 + g13(lx,j,k,e) * dxt(lx,lx)*dzt(k,k)
1447 d(i,1,k,e) = d(i,1,k,e) &
1448 + g12(i,1,k,e) * dyt(1,1)*dxt(i,i) &
1449 + g23(i,1,k,e) * dyt(1,1)*dzt(k,k)
1450 d(i,lx,k,e) = d(i,lx,k,e) &
1451 + g12(i,lx,k,e) * dyt(lx,lx)*dxt(i,i) &
1452 + g23(i,lx,k,e) * dyt(lx,lx)*dzt(k,k)
1457 d(i,j,1,e) = d(i,j,1,e) &
1458 + g13(i,j,1,e) * dzt(1,1)*dxt(i,i) &
1459 + g23(i,j,1,e) * dzt(1,1)*dyt(j,j)
1460 d(i,j,lx,e) = d(i,j,lx,e) &
1461 + g13(i,j,lx,e) * dzt(lx,lx)*dxt(i,i) &
1462 + g23(i,j,lx,e) * dzt(lx,lx)*dyt(j,j)
1471 G12, G13, G23, dfrmd_el, n)
1472 integer,
parameter :: lx = 2
1473 integer,
intent(in) :: n
1474 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
1475 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
1476 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
1477 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
1478 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
1479 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
1480 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
1481 real(kind=rp),
intent(in) :: dxt(lx, lx)
1482 real(kind=rp),
intent(in) :: dyt(lx, lx)
1483 real(kind=rp),
intent(in) :: dzt(lx, lx)
1484 logical,
intent(in) :: dfrmd_el(n)
1485 integer :: i, j, k, l, e
1503 d(i,j,k,e) = d(i,j,k,e) + &
1504 g11(l,j,k,e) * dxt(i,l)**2
1514 d(i,j,k,e) = d(i,j,k,e) + &
1515 g22(i,l,k,e) * dyt(j,l)**2
1525 d(i,j,k,e) = d(i,j,k,e) + &
1526 g33(i,j,l,e) * dzt(k,l)**2
1532 if (dfrmd_el(e))
then
1535 d(1,j,k,e) = d(1,j,k,e) &
1536 + g12(1,j,k,e) * dxt(1,1)*dyt(j,j) &
1537 + g13(1,j,k,e) * dxt(1,1)*dzt(k,k)
1538 d(lx,j,k,e) = d(lx,j,k,e) &
1539 + g12(lx,j,k,e) * dxt(lx,lx)*dyt(j,j) &
1540 + g13(lx,j,k,e) * dxt(lx,lx)*dzt(k,k)
1546 d(i,1,k,e) = d(i,1,k,e) &
1547 + g12(i,1,k,e) * dyt(1,1)*dxt(i,i) &
1548 + g23(i,1,k,e) * dyt(1,1)*dzt(k,k)
1549 d(i,lx,k,e) = d(i,lx,k,e) &
1550 + g12(i,lx,k,e) * dyt(lx,lx)*dxt(i,i) &
1551 + g23(i,lx,k,e) * dyt(lx,lx)*dzt(k,k)
1556 d(i,j,1,e) = d(i,j,1,e) &
1557 + g13(i,j,1,e) * dzt(1,1)*dxt(i,i) &
1558 + g23(i,j,1,e) * dzt(1,1)*dyt(j,j)
1559 d(i,j,lx,e) = d(i,j,lx,e) &
1560 + g13(i,j,lx,e) * dzt(lx,lx)*dxt(i,i) &
1561 + 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_from_components(this, coef, dof, gs_h)
subroutine jacobi_init(this, coef, bclst, json)
Initialize from the case file. The boundary conditions and the JSON dictionary are not needed by this...
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.
A list of allocatable `bc_t`. Follows the standard interface of lists.
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.