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 => &
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)
77 type(
coef_t),
intent(in),
target :: coef
78 type(
dofmap_t),
intent(in),
target :: dof
79 type(
gs_t),
intent(in),
target :: gs_h
85 allocate(this%d(dof%Xh%lx, dof%Xh%ly, dof%Xh%lz, dof%msh%nelv))
92 if (
allocated(this%d))
then
103 integer,
intent(in) :: n
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 integer :: lz, ly, lx
113 associate(dof => this%dof, coef => this%coef, &
114 gs_h => this%gs_h, nelv => this%dof%msh%nelv)
124 call sx_update_lx14(this%d, coef%Xh%dxt, coef%Xh%dyt, coef%Xh%dzt, &
125 coef%G11, coef%G22, coef%G33, coef%G12, coef%G13, coef%G23, nelv)
127 call sx_update_lx13(this%d, coef%Xh%dxt, coef%Xh%dyt, coef%Xh%dzt, &
128 coef%G11, coef%G22, coef%G33, coef%G12, coef%G13, coef%G23, nelv)
130 call sx_update_lx12(this%d, coef%Xh%dxt, coef%Xh%dyt, coef%Xh%dzt, &
131 coef%G11, coef%G22, coef%G33, coef%G12, coef%G13, coef%G23, nelv)
133 call sx_update_lx11(this%d, coef%Xh%dxt, coef%Xh%dyt, coef%Xh%dzt, &
134 coef%G11, coef%G22, coef%G33, coef%G12, coef%G13, coef%G23, nelv)
136 call sx_update_lx10(this%d, coef%Xh%dxt, coef%Xh%dyt, coef%Xh%dzt, &
137 coef%G11, coef%G22, coef%G33, coef%G12, coef%G13, coef%G23, nelv)
139 call sx_update_lx9(this%d, coef%Xh%dxt, coef%Xh%dyt, coef%Xh%dzt, &
140 coef%G11, coef%G22, coef%G33, coef%G12, coef%G13, coef%G23, nelv)
142 call sx_update_lx8(this%d, coef%Xh%dxt, coef%Xh%dyt, coef%Xh%dzt, &
143 coef%G11, coef%G22, coef%G33, coef%G12, coef%G13, coef%G23, nelv)
145 call sx_update_lx7(this%d, coef%Xh%dxt, coef%Xh%dyt, coef%Xh%dzt, &
146 coef%G11, coef%G22, coef%G33, coef%G12, coef%G13, coef%G23, nelv)
148 call sx_update_lx6(this%d, coef%Xh%dxt, coef%Xh%dyt, coef%Xh%dzt, &
149 coef%G11, coef%G22, coef%G33, coef%G12, coef%G13, coef%G23, nelv)
151 call sx_update_lx5(this%d, coef%Xh%dxt, coef%Xh%dyt, coef%Xh%dzt, &
152 coef%G11, coef%G22, coef%G33, coef%G12, coef%G13, coef%G23, nelv)
154 call sx_update_lx4(this%d, coef%Xh%dxt, coef%Xh%dyt, coef%Xh%dzt, &
155 coef%G11, coef%G22, coef%G33, coef%G12, coef%G13, coef%G23, nelv)
157 call sx_update_lx2(this%d, coef%Xh%dxt, coef%Xh%dyt, coef%Xh%dzt, &
158 coef%G11, coef%G22, coef%G33, coef%G12, coef%G13, coef%G23, nelv)
160 call sx_update_lx(this%d, coef%Xh%dxt, coef%Xh%dyt, coef%Xh%dzt, &
161 coef%G11, coef%G22, coef%G33, coef%G12, coef%G13, coef%G23, &
165 call col2(this%d, coef%h1, coef%dof%size())
166 if (coef%ifh2)
call addcol3(this%d, coef%h2, coef%B, coef%dof%size())
167 call gs_h%op(this%d, dof%size(), gs_op_add)
168 if (.not. coef%ifh2)
call col2(this%d, coef%mult, coef%dof%size())
169 call invcol1(this%d, dof%size())
173 subroutine sx_update_lx(d, dxt, dyt, dzt, G11, G22, G33, G12, G13, G23, n, lx)
174 integer,
intent(in) :: n, lx
175 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
176 real(kind=rp),
intent(in) :: dxt(lx, lx)
177 real(kind=rp),
intent(in) :: dyt(lx, lx)
178 real(kind=rp),
intent(in) :: dzt(lx, lx)
179 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
180 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
181 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
182 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
183 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
184 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
185 integer :: i, j, k, l, e
193 d(i, j, k, e) = d(i, j, k, e) + &
194 g11(l, j, k, e) * dxt(i, l)**2
196 d(i, j, k, e) = d(i, j, k, e) + &
197 g22(i, l, k, e) * dyt(j, l)**2
199 d(i, j, k, e) = d(i, j, k, e) + &
200 g33(i, j, l, e) * dzt(k, l)**2
211 d(1, j, k, e) = d(1, j, k, e) &
212 + g12(1, j, k, e) * dxt(1, 1)*dyt(j, j) &
213 + g13(1, j, k, e) * dxt(1, 1)*dzt(k, k)
214 d(lx, j, k, e) = d(lx, j, k, e) &
215 + g12(lx, j, k, e) * dxt(lx, lx)*dyt(j, j) &
216 + g13(lx, j, k, e) * dxt(lx, lx)*dzt(k, k)
224 d(i, 1, k, e) = d(i, 1, k, e) &
225 + g12(i, 1, k, e) * dyt(1, 1)*dxt(i, i) &
226 + g23(i, 1, k, e) * dyt(1, 1)*dzt(k, k)
227 d(i, lx, k, e) = d(i, lx, k, e) &
228 + g12(i, lx, k, e) * dyt(lx, lx)*dxt(i, i) &
229 + g23(i, lx, k, e) * dyt(lx, lx)*dzt(k, k)
237 d(i, j, 1, e) = d(i, j, 1, e) &
238 + g13(i, j, 1, e) * dzt(1, 1)*dxt(i, i) &
239 + g23(i, j, 1, e) * dzt(1, 1)*dyt(j, j)
240 d(i, j, lx, e) = d(i, j, lx, e) &
241 + g13(i, j, lx, e) * dzt(lx, lx)*dxt(i, i) &
242 + g23(i, j, lx, e) * dzt(lx, lx)*dyt(j, j)
249 subroutine sx_update_lx14(d, dxt, dyt, dzt, G11, G22, G33, G12, G13, G23, n)
250 integer,
parameter :: lx = 14
251 integer,
parameter :: ly = 14
252 integer,
parameter :: lz = 14
253 integer,
intent(in) :: n
254 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
255 real(kind=rp),
intent(in) :: dxt(lx, lx)
256 real(kind=rp),
intent(in) :: dyt(lx, lx)
257 real(kind=rp),
intent(in) :: dzt(lx, lx)
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 integer :: i, j, k, l, e
272 d(i, j, k, e) = d(i, j, k, e) + &
273 g11(l, j, k, e) * dxt(i, l)**2
275 d(i, j, k, e) = d(i, j, k, e) + &
276 g22(i, l, k, e) * dyt(j, l)**2
278 d(i, j, k, e) = d(i, j, k, e) + &
279 g33(i, j, l, e) * dzt(k, l)**2
290 d(1, j, k, e) = d(1, j, k, e) &
291 + g12(1, j, k, e) * dxt(1, 1)*dyt(j, j) &
292 + g13(1, j, k, e) * dxt(1, 1)*dzt(k, k)
293 d(lx, j, k, e) = d(lx, j, k, e) &
294 + g12(lx, j, k, e) * dxt(lx, lx)*dyt(j, j) &
295 + g13(lx, j, k, e) * dxt(lx, lx)*dzt(k, k)
303 d(i, 1, k, e) = d(i, 1, k, e) &
304 + g12(i, 1, k, e) * dyt(1, 1)*dxt(i, i) &
305 + g23(i, 1, k, e) * dyt(1, 1)*dzt(k, k)
306 d(i, ly, k, e) = d(i, ly, k, e) &
307 + g12(i, ly, k, e) * dyt(ly, ly)*dxt(i, i) &
308 + g23(i, ly, k, e) * dyt(ly, ly)*dzt(k, k)
316 d(i, j, 1, e) = d(i, j, 1, e) &
317 + g13(i, j, 1, e) * dzt(1, 1)*dxt(i, i) &
318 + g23(i, j, 1, e) * dzt(1, 1)*dyt(j, j)
319 d(i, j, lz, e) = d(i, j, lz, e) &
320 + g13(i, j, lz, e) * dzt(lz, lz)*dxt(i, i) &
321 + g23(i, j, lz, e) * dzt(lz, lz)*dyt(j, j)
328 subroutine sx_update_lx13(d, dxt, dyt, dzt, G11, G22, G33, G12, G13, G23, n)
329 integer,
parameter :: lx = 13
330 integer,
parameter :: ly = 13
331 integer,
parameter :: lz = 13
332 integer,
intent(in) :: n
333 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
334 real(kind=rp),
intent(in) :: dxt(lx, lx)
335 real(kind=rp),
intent(in) :: dyt(lx, lx)
336 real(kind=rp),
intent(in) :: dzt(lx, lx)
337 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
338 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
339 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
340 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
341 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
342 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
343 integer :: i, j, k, l, e
351 d(i, j, k, e) = d(i, j, k, e) + &
352 g11(l, j, k, e) * dxt(i, l)**2
354 d(i, j, k, e) = d(i, j, k, e) + &
355 g22(i, l, k, e) * dyt(j, l)**2
357 d(i, j, k, e) = d(i, j, k, e) + &
358 g33(i, j, l, e) * dzt(k, l)**2
369 d(1, j, k, e) = d(1, j, k, e) &
370 + g12(1, j, k, e) * dxt(1, 1)*dyt(j, j) &
371 + g13(1, j, k, e) * dxt(1, 1)*dzt(k, k)
372 d(lx, j, k, e) = d(lx, j, k, e) &
373 + g12(lx, j, k, e) * dxt(lx, lx)*dyt(j, j) &
374 + g13(lx, j, k, e) * dxt(lx, lx)*dzt(k, k)
382 d(i, 1, k, e) = d(i, 1, k, e) &
383 + g12(i, 1, k, e) * dyt(1, 1)*dxt(i, i) &
384 + g23(i, 1, k, e) * dyt(1, 1)*dzt(k, k)
385 d(i, ly, k, e) = d(i, ly, k, e) &
386 + g12(i, ly, k, e) * dyt(ly, ly)*dxt(i, i) &
387 + g23(i, ly, k, e) * dyt(ly, ly)*dzt(k, k)
395 d(i, j, 1, e) = d(i, j, 1, e) &
396 + g13(i, j, 1, e) * dzt(1, 1)*dxt(i, i) &
397 + g23(i, j, 1, e) * dzt(1, 1)*dyt(j, j)
398 d(i, j, lz, e) = d(i, j, lz, e) &
399 + g13(i, j, lz, e) * dzt(lz, lz)*dxt(i, i) &
400 + g23(i, j, lz, e) * dzt(lz, lz)*dyt(j, j)
407 subroutine sx_update_lx12(d, dxt, dyt, dzt, G11, G22, G33, G12, G13, G23, n)
408 integer,
parameter :: lx = 12
409 integer,
parameter :: ly = 12
410 integer,
parameter :: lz = 12
411 integer,
intent(in) :: n
412 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
413 real(kind=rp),
intent(in) :: dxt(lx, lx)
414 real(kind=rp),
intent(in) :: dyt(lx, lx)
415 real(kind=rp),
intent(in) :: dzt(lx, lx)
416 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
417 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
418 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
419 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
420 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
421 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
422 integer :: i, j, k, l, e
430 d(i, j, k, e) = d(i, j, k, e) + &
431 g11(l, j, k, e) * dxt(i, l)**2
433 d(i, j, k, e) = d(i, j, k, e) + &
434 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
448 d(1, j, k, e) = d(1, j, k, e) &
449 + g12(1, j, k, e) * dxt(1, 1)*dyt(j, j) &
450 + g13(1, j, k, e) * dxt(1, 1)*dzt(k, k)
451 d(lx, j, k, e) = d(lx, j, k, e) &
452 + g12(lx, j, k, e) * dxt(lx, lx)*dyt(j, j) &
453 + g13(lx, j, k, e) * dxt(lx, lx)*dzt(k, k)
461 d(i, 1, k, e) = d(i, 1, k, e) &
462 + g12(i, 1, k, e) * dyt(1, 1)*dxt(i, i) &
463 + g23(i, 1, k, e) * dyt(1, 1)*dzt(k, k)
464 d(i, ly, k, e) = d(i, ly, k, e) &
465 + g12(i, ly, k, e) * dyt(ly, ly)*dxt(i, i) &
466 + g23(i, ly, k, e) * dyt(ly, ly)*dzt(k, k)
474 d(i, j, 1, e) = d(i, j, 1, e) &
475 + g13(i, j, 1, e) * dzt(1, 1)*dxt(i, i) &
476 + g23(i, j, 1, e) * dzt(1, 1)*dyt(j, j)
477 d(i, j, lz, e) = d(i, j, lz, e) &
478 + g13(i, j, lz, e) * dzt(lz, lz)*dxt(i, i) &
479 + g23(i, j, lz, e) * dzt(lz, lz)*dyt(j, j)
486 subroutine sx_update_lx11(d, dxt, dyt, dzt, G11, G22, G33, G12, G13, G23, n)
487 integer,
parameter :: lx = 11
488 integer,
parameter :: ly = 11
489 integer,
parameter :: lz = 11
490 integer,
intent(in) :: n
491 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
492 real(kind=rp),
intent(in) :: dxt(lx, lx)
493 real(kind=rp),
intent(in) :: dyt(lx, lx)
494 real(kind=rp),
intent(in) :: dzt(lx, lx)
495 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
496 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
497 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
498 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
499 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
500 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
501 integer :: i, j, k, l, e
509 d(i, j, k, e) = d(i, j, k, e) + &
510 g11(l, j, k, e) * dxt(i, l)**2
512 d(i, j, k, e) = d(i, j, k, e) + &
513 g22(i, l, k, e) * dyt(j, l)**2
515 d(i, j, k, e) = d(i, j, k, e) + &
516 g33(i, j, l, e) * dzt(k, l)**2
527 d(1, j, k, e) = d(1, j, k, e) &
528 + g12(1, j, k, e) * dxt(1, 1)*dyt(j, j) &
529 + g13(1, j, k, e) * dxt(1, 1)*dzt(k, k)
530 d(lx, j, k, e) = d(lx, j, k, e) &
531 + g12(lx, j, k, e) * dxt(lx, lx)*dyt(j, j) &
532 + 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, ly, k, e) = d(i, ly, k, e) &
544 + g12(i, ly, k, e) * dyt(ly, ly)*dxt(i, i) &
545 + g23(i, ly, k, e) * dyt(ly, ly)*dzt(k, k)
553 d(i, j, 1, e) = d(i, j, 1, e) &
554 + g13(i, j, 1, e) * dzt(1, 1)*dxt(i, i) &
555 + g23(i, j, 1, e) * dzt(1, 1)*dyt(j, j)
556 d(i, j, lz, e) = d(i, j, lz, e) &
557 + g13(i, j, lz, e) * dzt(lz, lz)*dxt(i, i) &
558 + g23(i, j, lz, e) * dzt(lz, lz)*dyt(j, j)
565 subroutine sx_update_lx10(d, dxt, dyt, dzt, G11, G22, G33, G12, G13, G23, n)
566 integer,
parameter :: lx = 10
567 integer,
parameter :: ly = 10
568 integer,
parameter :: lz = 10
569 integer,
intent(in) :: n
570 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
571 real(kind=rp),
intent(in) :: dxt(lx, lx)
572 real(kind=rp),
intent(in) :: dyt(lx, lx)
573 real(kind=rp),
intent(in) :: dzt(lx, lx)
574 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
575 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
576 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
577 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
578 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
579 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
580 integer :: i, j, k, l, e
588 d(i, j, k, e) = d(i, j, k, e) + &
589 g11(l, j, k, e) * dxt(i, l)**2
591 d(i, j, k, e) = d(i, j, k, e) + &
592 g22(i, l, k, e) * dyt(j, l)**2
594 d(i, j, k, e) = d(i, j, k, e) + &
595 g33(i, j, l, e) * dzt(k, l)**2
606 d(1, j, k, e) = d(1, j, k, e) &
607 + g12(1, j, k, e) * dxt(1, 1)*dyt(j, j) &
608 + g13(1, j, k, e) * dxt(1, 1)*dzt(k, k)
609 d(lx, j, k, e) = d(lx, j, k, e) &
610 + g12(lx, j, k, e) * dxt(lx, lx)*dyt(j, j) &
611 + g13(lx, j, k, e) * dxt(lx, lx)*dzt(k, k)
619 d(i, 1, k, e) = d(i, 1, k, e) &
620 + g12(i, 1, k, e) * dyt(1, 1)*dxt(i, i) &
621 + g23(i, 1, k, e) * dyt(1, 1)*dzt(k, k)
622 d(i, ly, k, e) = d(i, ly, k, e) &
623 + g12(i, ly, k, e) * dyt(ly, ly)*dxt(i, i) &
624 + g23(i, ly, k, e) * dyt(ly, ly)*dzt(k, k)
632 d(i, j, 1, e) = d(i, j, 1, e) &
633 + g13(i, j, 1, e) * dzt(1, 1)*dxt(i, i) &
634 + g23(i, j, 1, e) * dzt(1, 1)*dyt(j, j)
635 d(i, j, lz, e) = d(i, j, lz, e) &
636 + g13(i, j, lz, e) * dzt(lz, lz)*dxt(i, i) &
637 + g23(i, j, lz, e) * dzt(lz, lz)*dyt(j, j)
644 subroutine sx_update_lx9(d, dxt, dyt, dzt, G11, G22, G33, G12, G13, G23, n)
645 integer,
parameter :: lx = 9
646 integer,
parameter :: ly = 9
647 integer,
parameter :: lz = 9
648 integer,
intent(in) :: n
649 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
650 real(kind=rp),
intent(in) :: dxt(lx, lx)
651 real(kind=rp),
intent(in) :: dyt(lx, lx)
652 real(kind=rp),
intent(in) :: dzt(lx, lx)
653 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
654 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
655 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
656 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
657 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
658 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
659 integer :: i, j, k, l, e
667 d(i, j, k, e) = d(i, j, k, e) + &
668 g11(l, j, k, e) * dxt(i, l)**2
670 d(i, j, k, e) = d(i, j, k, e) + &
671 g22(i, l, k, e) * dyt(j, l)**2
673 d(i, j, k, e) = d(i, j, k, e) + &
674 g33(i, j, l, e) * dzt(k, l)**2
685 d(1, j, k, e) = d(1, j, k, e) &
686 + g12(1, j, k, e) * dxt(1, 1)*dyt(j, j) &
687 + g13(1, j, k, e) * dxt(1, 1)*dzt(k, k)
688 d(lx, j, k, e) = d(lx, j, k, e) &
689 + g12(lx, j, k, e) * dxt(lx, lx)*dyt(j, j) &
690 + g13(lx, j, k, e) * dxt(lx, lx)*dzt(k, k)
698 d(i, 1, k, e) = d(i, 1, k, e) &
699 + g12(i, 1, k, e) * dyt(1, 1)*dxt(i, i) &
700 + g23(i, 1, k, e) * dyt(1, 1)*dzt(k, k)
701 d(i, ly, k, e) = d(i, ly, k, e) &
702 + g12(i, ly, k, e) * dyt(ly, ly)*dxt(i, i) &
703 + g23(i, ly, k, e) * dyt(ly, ly)*dzt(k, k)
711 d(i, j, 1, e) = d(i, j, 1, e) &
712 + g13(i, j, 1, e) * dzt(1, 1)*dxt(i, i) &
713 + g23(i, j, 1, e) * dzt(1, 1)*dyt(j, j)
714 d(i, j, lz, e) = d(i, j, lz, e) &
715 + g13(i, j, lz, e) * dzt(lz, lz)*dxt(i, i) &
716 + g23(i, j, lz, e) * dzt(lz, lz)*dyt(j, j)
723 subroutine sx_update_lx8(d, dxt, dyt, dzt, G11, G22, G33, G12, G13, G23, n)
724 integer,
parameter :: lx = 8
725 integer,
parameter :: ly = 8
726 integer,
parameter :: lz = 8
727 integer,
intent(in) :: n
728 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
729 real(kind=rp),
intent(in) :: dxt(lx, lx)
730 real(kind=rp),
intent(in) :: dyt(lx, lx)
731 real(kind=rp),
intent(in) :: dzt(lx, lx)
732 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
733 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
734 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
735 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
736 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
737 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
738 integer :: i, j, k, l, e
746 d(i, j, k, e) = d(i, j, k, e) + &
747 g11(l, j, k, e) * dxt(i, l)**2
749 d(i, j, k, e) = d(i, j, k, e) + &
750 g22(i, l, k, e) * dyt(j, l)**2
752 d(i, j, k, e) = d(i, j, k, e) + &
753 g33(i, j, l, e) * dzt(k, l)**2
764 d(1, j, k, e) = d(1, j, k, e) &
765 + g12(1, j, k, e) * dxt(1, 1)*dyt(j, j) &
766 + g13(1, j, k, e) * dxt(1, 1)*dzt(k, k)
767 d(lx, j, k, e) = d(lx, j, k, e) &
768 + g12(lx, j, k, e) * dxt(lx, lx)*dyt(j, j) &
769 + g13(lx, j, k, e) * dxt(lx, lx)*dzt(k, k)
777 d(i, 1, k, e) = d(i, 1, k, e) &
778 + g12(i, 1, k, e) * dyt(1, 1)*dxt(i, i) &
779 + g23(i, 1, k, e) * dyt(1, 1)*dzt(k, k)
780 d(i, ly, k, e) = d(i, ly, k, e) &
781 + g12(i, ly, k, e) * dyt(ly, ly)*dxt(i, i) &
782 + g23(i, ly, k, e) * dyt(ly, ly)*dzt(k, k)
790 d(i, j, 1, e) = d(i, j, 1, e) &
791 + g13(i, j, 1, e) * dzt(1, 1)*dxt(i, i) &
792 + g23(i, j, 1, e) * dzt(1, 1)*dyt(j, j)
793 d(i, j, lz, e) = d(i, j, lz, e) &
794 + g13(i, j, lz, e) * dzt(lz, lz)*dxt(i, i) &
795 + g23(i, j, lz, e) * dzt(lz, lz)*dyt(j, j)
802 subroutine sx_update_lx7(d, dxt, dyt, dzt, G11, G22, G33, G12, G13, G23, n)
803 integer,
parameter :: lx = 7
804 integer,
parameter :: ly = 7
805 integer,
parameter :: lz = 7
806 integer,
intent(in) :: n
807 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
808 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
809 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
810 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
811 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
812 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
813 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
814 real(kind=rp),
intent(in) :: dxt(lx, lx)
815 real(kind=rp),
intent(in) :: dyt(lx, lx)
816 real(kind=rp),
intent(in) :: dzt(lx, lx)
817 integer :: i, j, k, l, e
824 d(i, j, k, e) = d(i, j, k, e) + &
825 g11(l, j, k, e) * dxt(i, l)**2
827 d(i, j, k, e) = d(i, j, k, e) + &
828 g22(i, l, k, e) * dyt(j, l)**2
830 d(i, j, k, e) = d(i, j, k, e) + &
831 g33(i, j, l, e) * dzt(k, l)**2
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)
855 d(i, 1, k, e) = d(i, 1, k, e) &
856 + g12(i, 1, k, e) * dyt(1, 1)*dxt(i, i) &
857 + g23(i, 1, k, e) * dyt(1, 1)*dzt(k, k)
858 d(i, ly, k, e) = d(i, ly, k, e) &
859 + g12(i, ly, k, e) * dyt(ly, ly)*dxt(i, i) &
860 + g23(i, ly, k, e) * dyt(ly, ly)*dzt(k, k)
868 d(i, j, 1, e) = d(i, j, 1, e) &
869 + g13(i, j, 1, e) * dzt(1, 1)*dxt(i, i) &
870 + g23(i, j, 1, e) * dzt(1, 1)*dyt(j, j)
871 d(i, j, lz, e) = d(i, j, lz, e) &
872 + g13(i, j, lz, e) * dzt(lz, lz)*dxt(i, i) &
873 + g23(i, j, lz, e) * dzt(lz, lz)*dyt(j, j)
881 subroutine sx_update_lx6(d, dxt, dyt, dzt, G11, G22, G33, G12, G13, G23, n)
882 integer,
parameter :: lx = 6
883 integer,
parameter :: ly = 6
884 integer,
parameter :: lz = 6
885 integer,
intent(in) :: n
886 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
887 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
888 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
889 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
890 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
891 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
892 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
893 real(kind=rp),
intent(in) :: dxt(lx, lx)
894 real(kind=rp),
intent(in) :: dyt(lx, lx)
895 real(kind=rp),
intent(in) :: dzt(lx, lx)
896 integer :: i, j, k, l, e
903 d(i, j, k, e) = d(i, j, k, e) + &
904 g11(l, j, k, e) * dxt(i, l)**2
906 d(i, j, k, e) = d(i, j, k, e) + &
907 g22(i, l, k, e) * dyt(j, l)**2
909 d(i, j, k, e) = d(i, j, k, e) + &
910 g33(i, j, l, e) * dzt(k, l)**2
921 d(1, j, k, e) = d(1, j, k, e) &
922 + g12(1, j, k, e) * dxt(1, 1)*dyt(j, j) &
923 + g13(1, j, k, e) * dxt(1, 1)*dzt(k, k)
924 d(lx, j, k, e) = d(lx, j, k, e) &
925 + g12(lx, j, k, e) * dxt(lx, lx)*dyt(j, j) &
926 + g13(lx, j, k, e) * dxt(lx, lx)*dzt(k, k)
934 d(i, 1, k, e) = d(i, 1, k, e) &
935 + g12(i, 1, k, e) * dyt(1, 1)*dxt(i, i) &
936 + g23(i, 1, k, e) * dyt(1, 1)*dzt(k, k)
937 d(i, ly, k, e) = d(i, ly, k, e) &
938 + g12(i, ly, k, e) * dyt(ly, ly)*dxt(i, i) &
939 + g23(i, ly, k, e) * dyt(ly, ly)*dzt(k, k)
947 d(i, j, 1, e) = d(i, j, 1, e) &
948 + g13(i, j, 1, e) * dzt(1, 1)*dxt(i, i) &
949 + g23(i, j, 1, e) * dzt(1, 1)*dyt(j, j)
950 d(i, j, lz, e) = d(i, j, lz, e) &
951 + g13(i, j, lz, e) * dzt(lz, lz)*dxt(i, i) &
952 + g23(i, j, lz, e) * dzt(lz, lz)*dyt(j, j)
960 subroutine sx_update_lx5(d, dxt, dyt, dzt, G11, G22, G33, G12, G13, G23, n)
961 integer,
parameter :: lx = 5
962 integer,
parameter :: ly = 5
963 integer,
parameter :: lz = 5
964 integer,
intent(in) :: n
965 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
966 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
967 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
968 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
969 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
970 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
971 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
972 real(kind=rp),
intent(in) :: dxt(lx, lx)
973 real(kind=rp),
intent(in) :: dyt(lx, lx)
974 real(kind=rp),
intent(in) :: dzt(lx, lx)
975 integer :: i, j, k, l, e
982 d(i, j, k, e) = d(i, j, k, e) + &
983 g11(l, j, k, e) * dxt(i, l)**2
985 d(i, j, k, e) = d(i, j, k, e) + &
986 g22(i, l, k, e) * dyt(j, l)**2
988 d(i, j, k, e) = d(i, j, k, e) + &
989 g33(i, j, l, e) * dzt(k, l)**2
1000 d(1, j, k, e) = d(1, j, k, e) &
1001 + g12(1, j, k, e) * dxt(1, 1)*dyt(j, j) &
1002 + g13(1, j, k, e) * dxt(1, 1)*dzt(k, k)
1003 d(lx, j, k, e) = d(lx, j, k, e) &
1004 + g12(lx, j, k, e) * dxt(lx, lx)*dyt(j, j) &
1005 + g13(lx, j, k, e) * dxt(lx, lx)*dzt(k, k)
1013 d(i, 1, k, e) = d(i, 1, k, e) &
1014 + g12(i, 1, k, e) * dyt(1, 1)*dxt(i, i) &
1015 + g23(i, 1, k, e) * dyt(1, 1)*dzt(k, k)
1016 d(i, ly, k, e) = d(i, ly, k, e) &
1017 + g12(i, ly, k, e) * dyt(ly, ly)*dxt(i, i) &
1018 + g23(i, ly, k, e) * dyt(ly, ly)*dzt(k, k)
1026 d(i, j, 1, e) = d(i, j, 1, e) &
1027 + g13(i, j, 1, e) * dzt(1, 1)*dxt(i, i) &
1028 + g23(i, j, 1, e) * dzt(1, 1)*dyt(j, j)
1029 d(i, j, lz, e) = d(i, j, lz, e) &
1030 + g13(i, j, lz, e) * dzt(lz, lz)*dxt(i, i) &
1031 + g23(i, j, lz, e) * dzt(lz, lz)*dyt(j, j)
1039 subroutine sx_update_lx4(d, dxt, dyt, dzt, G11, G22, G33, G12, G13, G23, n)
1040 integer,
parameter :: lx = 4
1041 integer,
parameter :: ly = 4
1042 integer,
parameter :: lz = 4
1043 integer,
intent(in) :: n
1044 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
1045 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
1046 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
1047 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
1048 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
1049 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
1050 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
1051 real(kind=rp),
intent(in) :: dxt(lx, lx)
1052 real(kind=rp),
intent(in) :: dyt(lx, lx)
1053 real(kind=rp),
intent(in) :: dzt(lx, lx)
1054 integer :: i, j, k, l, e
1061 d(i, j, k, e) = d(i, j, k, e) + &
1062 g11(l, j, k, e) * dxt(i, l)**2
1064 d(i, j, k, e) = d(i, j, k, e) + &
1065 g22(i, l, k, e) * dyt(j, l)**2
1067 d(i, j, k, e) = d(i, j, k, e) + &
1068 g33(i, j, l, e) * dzt(k, l)**2
1079 d(1, j, k, e) = d(1, j, k, e) &
1080 + g12(1, j, k, e) * dxt(1, 1)*dyt(j, j) &
1081 + g13(1, j, k, e) * dxt(1, 1)*dzt(k, k)
1082 d(lx, j, k, e) = d(lx, j, k, e) &
1083 + g12(lx, j, k, e) * dxt(lx, lx)*dyt(j, j) &
1084 + g13(lx, j, k, e) * dxt(lx, lx)*dzt(k, k)
1092 d(i, 1, k, e) = d(i, 1, k, e) &
1093 + g12(i, 1, k, e) * dyt(1, 1)*dxt(i, i) &
1094 + g23(i, 1, k, e) * dyt(1, 1)*dzt(k, k)
1095 d(i, ly, k, e) = d(i, ly, k, e) &
1096 + g12(i, ly, k, e) * dyt(ly, ly)*dxt(i, i) &
1097 + g23(i, ly, k, e) * dyt(ly, ly)*dzt(k, k)
1105 d(i, j, 1, e) = d(i, j, 1, e) &
1106 + g13(i, j, 1, e) * dzt(1, 1)*dxt(i, i) &
1107 + g23(i, j, 1, e) * dzt(1, 1)*dyt(j, j)
1108 d(i, j, lz, e) = d(i, j, lz, e) &
1109 + g13(i, j, lz, e) * dzt(lz, lz)*dxt(i, i) &
1110 + g23(i, j, lz, e) * dzt(lz, lz)*dyt(j, j)
1118 subroutine sx_update_lx3(d, dxt, dyt, dzt, G11, G22, G33, G12, G13, G23, n)
1119 integer,
parameter :: lx = 3
1120 integer,
parameter :: ly = 3
1121 integer,
parameter :: lz = 3
1122 integer,
intent(in) :: n
1123 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
1124 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
1125 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
1126 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
1127 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
1128 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
1129 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
1130 real(kind=rp),
intent(in) :: dxt(lx, lx)
1131 real(kind=rp),
intent(in) :: dyt(lx, lx)
1132 real(kind=rp),
intent(in) :: dzt(lx, lx)
1133 integer :: i, j, k, l, e
1141 d(i, j, k, e) = d(i, j, k, e) + &
1142 g11(l, j, k, e) * dxt(i, l)**2
1144 d(i, j, k, e) = d(i, j, k, e) + &
1145 g22(i, l, k, e) * dyt(j, l)**2
1147 d(i, j, k, e) = d(i, j, k, e) + &
1148 g33(i, j, l, e) * dzt(k, l)**2
1159 d(1, j, k, e) = d(1, j, k, e) &
1160 + g12(1, j, k, e) * dxt(1, 1)*dyt(j, j) &
1161 + g13(1, j, k, e) * dxt(1, 1)*dzt(k, k)
1162 d(lx, j, k, e) = d(lx, j, k, e) &
1163 + g12(lx, j, k, e) * dxt(lx, lx)*dyt(j, j) &
1164 + g13(lx, j, k, e) * dxt(lx, lx)*dzt(k, k)
1172 d(i, 1, k, e) = d(i, 1, k, e) &
1173 + g12(i, 1, k, e) * dyt(1, 1)*dxt(i, i) &
1174 + g23(i, 1, k, e) * dyt(1, 1)*dzt(k, k)
1175 d(i, ly, k, e) = d(i, ly, k, e) &
1176 + g12(i, ly, k, e) * dyt(ly, ly)*dxt(i, i) &
1177 + g23(i, ly, k, e) * dyt(ly, ly)*dzt(k, k)
1185 d(i, j, 1, e) = d(i, j, 1, e) &
1186 + g13(i, j, 1, e) * dzt(1, 1)*dxt(i, i) &
1187 + g23(i, j, 1, e) * dzt(1, 1)*dyt(j, j)
1188 d(i, j, lz, e) = d(i, j, lz, e) &
1189 + g13(i, j, lz, e) * dzt(lz, lz)*dxt(i, i) &
1190 + g23(i, j, lz, e) * dzt(lz, lz)*dyt(j, j)
1197 subroutine sx_update_lx2(d, dxt, dyt, dzt, G11, G22, G33, G12, G13, G23, n)
1198 integer,
parameter :: lx = 2
1199 integer,
parameter :: ly = 2
1200 integer,
parameter :: lz = 2
1201 integer,
intent(in) :: n
1202 real(kind=rp),
intent(inout) :: d(lx, lx, lx, n)
1203 real(kind=rp),
intent(in) :: g11(lx, lx, lx, n)
1204 real(kind=rp),
intent(in) :: g22(lx, lx, lx, n)
1205 real(kind=rp),
intent(in) :: g33(lx, lx, lx, n)
1206 real(kind=rp),
intent(in) :: g12(lx, lx, lx, n)
1207 real(kind=rp),
intent(in) :: g13(lx, lx, lx, n)
1208 real(kind=rp),
intent(in) :: g23(lx, lx, lx, n)
1209 real(kind=rp),
intent(in) :: dxt(lx, lx)
1210 real(kind=rp),
intent(in) :: dyt(lx, lx)
1211 real(kind=rp),
intent(in) :: dzt(lx, lx)
1212 integer :: i, j, k, l, e
1220 d(i, j, k, e) = d(i, j, k, e) + &
1221 g11(l, j, k, e) * dxt(i, l)**2
1223 d(i, j, k, e) = d(i, j, k, e) + &
1224 g22(i, l, k, e) * dyt(j, l)**2
1226 d(i, j, k, e) = d(i, j, k, e) + &
1227 g33(i, j, l, e) * dzt(k, l)**2
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)
1251 d(i, 1, k, e) = d(i, 1, k, e) &
1252 + g12(i, 1, k, e) * dyt(1, 1)*dxt(i, i) &
1253 + g23(i, 1, k, e) * dyt(1, 1)*dzt(k, k)
1254 d(i, ly, k, e) = d(i, ly, k, e) &
1255 + g12(i, ly, k, e) * dyt(ly, ly)*dxt(i, i) &
1256 + g23(i, ly, k, e) * dyt(ly, ly)*dzt(k, k)
1264 d(i, j, 1, e) = d(i, j, 1, e) &
1265 + g13(i, j, 1, e) * dzt(1, 1)*dxt(i, i) &
1266 + g23(i, j, 1, e) * dzt(1, 1)*dyt(j, j)
1267 d(i, j, lz, e) = d(i, j, lz, e) &
1268 + g13(i, j, lz, e) * dzt(lz, lz)*dxt(i, i) &
1269 + g23(i, j, lz, e) * dzt(lz, lz)*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, 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.
Jacobi preconditioner SX-Aurora backend.
subroutine sx_update_lx3(d, dxt, dyt, dzt, g11, g22, g33, g12, g13, g23, n)
subroutine sx_jacobi_free(this)
subroutine sx_jacobi_solve(this, z, r, n)
The jacobi preconditioner where .
subroutine sx_update_lx5(d, dxt, dyt, dzt, g11, g22, g33, g12, g13, g23, n)
subroutine sx_jacobi_init(this, coef, bclst, json)
Initialize from the case file. The boundary conditions and the JSON dictionary are not needed by this...
subroutine sx_update_lx12(d, dxt, dyt, dzt, g11, g22, g33, g12, g13, g23, n)
subroutine sx_update_lx11(d, dxt, dyt, dzt, g11, g22, g33, g12, g13, g23, n)
subroutine sx_update_lx2(d, dxt, dyt, dzt, g11, g22, g33, g12, g13, g23, n)
subroutine sx_update_lx7(d, dxt, dyt, dzt, g11, g22, g33, g12, g13, g23, n)
subroutine sx_jacobi_init_from_components(this, coef, dof, gs_h)
subroutine sx_update_lx13(d, dxt, dyt, dzt, g11, g22, g33, g12, g13, g23, n)
subroutine sx_update_lx4(d, dxt, dyt, dzt, g11, g22, g33, g12, g13, g23, n)
subroutine sx_update_lx6(d, dxt, dyt, dzt, g11, g22, g33, g12, g13, g23, n)
subroutine sx_update_lx(d, dxt, dyt, dzt, g11, g22, g33, g12, g13, g23, n, lx)
subroutine sx_jacobi_update(this)
subroutine sx_update_lx9(d, dxt, dyt, dzt, g11, g22, g33, g12, g13, g23, n)
subroutine sx_update_lx14(d, dxt, dyt, dzt, g11, g22, g33, g12, g13, g23, n)
subroutine sx_update_lx8(d, dxt, dyt, dzt, g11, g22, g33, g12, g13, g23, n)
subroutine sx_update_lx10(d, dxt, dyt, dzt, g11, g22, g33, g12, g13, g23, n)
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 canonical Krylov preconditioner.
Defines a jacobi preconditioner for SX-Aurora.