10 #ifdef USE_HALO_REAL32
11 #define HALO_DTYPE sll_real32
13 #define HALO_DTYPE sll_real64
20 #include "sll_assert.h"
21 #include "sll_errors.h"
22 #include "sll_working_precision.h"
56 #define OMP_COLLAPSE collapse(2)
57 #define OMP_SCHEDULE schedule(static)
93 sll_int32 :: lagrange_width(2)
95 sll_real64,
allocatable :: displacement_eta1(:)
96 sll_real64,
allocatable :: displacement_eta2(:)
97 sll_real64,
allocatable :: displacement_eta3(:)
99 sll_int32 ,
allocatable :: halo_blocks_eta1(:,:,:)
100 sll_int32 ,
allocatable :: halo_blocks_eta2(:,:,:)
101 sll_int32 ,
allocatable :: halo_blocks_eta3(:,:,:)
103 sll_int32 ,
allocatable :: halo_width_eta1(:,:)
104 sll_int32 ,
allocatable :: halo_width_eta2(:,:)
105 sll_int32 ,
allocatable :: halo_width_eta3(:,:)
107 sll_int32 :: n_halo_blocks(3)
117 if (
allocated(self%displacement_eta1))
deallocate(self%displacement_eta1)
118 if (
allocated(self%displacement_eta2))
deallocate(self%displacement_eta2)
119 if (
allocated(self%displacement_eta3))
deallocate(self%displacement_eta3)
121 if (
allocated(self%halo_blocks_eta1))
deallocate(self%halo_blocks_eta1)
122 if (
allocated(self%halo_blocks_eta2))
deallocate(self%halo_blocks_eta2)
123 if (
allocated(self%halo_blocks_eta3))
deallocate(self%halo_blocks_eta3)
125 if (
allocated(self%halo_width_eta1))
deallocate(self%halo_width_eta1)
126 if (
allocated(self%halo_width_eta2))
deallocate(self%halo_width_eta2)
127 if (
allocated(self%halo_width_eta3))
deallocate(self%halo_width_eta3)
133 sll_int32,
intent( in ) :: lagrange_width(2)
134 self%lagrange_width = lagrange_width
135 #ifdef DISABLE_CACHE_BLOCKING
136 write(*,*)
"sll_m_advection_6d_lagrange_dd_slim :: cache blocking disabled"
144 sll_int32,
intent(in),
optional :: id_in
145 sll_int32 ::
get_wx, wx, id
146 #ifndef DISABLE_CACHE_BLOCKING
148 if (
present(id_in))
then
162 wx = decomposition%local%nw(id)
174 displacement_eta2, displacement_eta3)
178 sll_real64,
intent(in) :: displacement_eta1(:)
179 sll_real64,
intent(in) :: displacement_eta2(:)
180 sll_real64,
intent(in) :: displacement_eta3(:)
182 allocate(self%displacement_eta1(decomposition%local%mn(4):decomposition%local%mx(4)))
183 self%displacement_eta1 = displacement_eta1
184 allocate(self%displacement_eta2(decomposition%local%mn(5):decomposition%local%mx(5)))
185 self%displacement_eta2 = displacement_eta2
186 allocate(self%displacement_eta3(decomposition%local%mn(6):decomposition%local%mx(6)))
187 self%displacement_eta3 = displacement_eta3
190 self%displacement_eta1, self%halo_blocks_eta1, &
191 self%halo_width_eta1, self%n_halo_blocks(1))
193 self%displacement_eta2, self%halo_blocks_eta2, &
194 self%halo_width_eta2, self%n_halo_blocks(2))
196 self%displacement_eta3, self%halo_blocks_eta3, &
197 self%halo_width_eta3, self%n_halo_blocks(3))
203 sll_int32,
intent( in ) :: ind
204 sll_int32,
intent( in ) :: stencil
206 sll_real64,
intent( inout ) :: disp(decomposition%local%mn(ind):decomposition%local%mx(ind))
207 sll_int32,
intent( out ),
allocatable :: halo_blocks(:,:,:)
208 sll_int32,
intent( out ),
allocatable :: halo_width(:,:)
209 sll_int32,
intent( out ) :: n_halo_blocks
211 sll_int32 :: index_range(2)
212 sll_int32 :: blocks, j, bl
213 sll_int32 :: box1, box2
215 index_range = [ decomposition%local%mn(ind), decomposition%local%mx(ind) ]
226 if ( abs(disp(bl) ) == 0.0_f64) bl = bl+1
227 box1 = floor( disp(bl) )
229 if ( abs(disp(bl) ) == 0.0_f64) bl = bl-1
230 box2 = floor( disp(bl) )
233 sll_assert( box1 >= -stencil/2 )
234 sll_assert( box1 < stencil/2 )
235 sll_assert( box2 >= -stencil/2 )
236 sll_assert( box2 < stencil/2 )
238 blocks = abs(box2-box1)+1
241 allocate( halo_blocks(6, 2, blocks) )
242 allocate( halo_width(2, blocks) )
244 halo_blocks(:, 1, j) = decomposition%local%mn
245 halo_blocks(:, 2, j) = decomposition%local%mx
249 if (box1 > box2 )
then
252 if ( abs(disp(j)) == 0.0_f64 ) j = j+1
253 halo_width(1, bl ) = stencil/2 - (box1-bl+1)-1
254 halo_width(2, bl ) = stencil/2 + (box1-bl+1)
255 halo_blocks(ind, 1, bl ) = j
256 do while( disp(j) > box1-bl+1 )
258 if ( j > index_range(2))
exit
260 if ( abs(disp(j-1)) == 0.0_f64 )
then
261 halo_blocks(ind, 2, bl ) = j-2
263 halo_blocks(ind, 2, bl ) = j-1
269 if ( abs(disp(j)) == 0.0_f64 ) j = j+1
270 halo_width(1, bl-box1+1) = stencil/2 - bl-1
271 halo_width(2, bl-box1+1) = stencil/2 + bl
272 halo_blocks(ind, 1, bl-box1+1) = j
273 do while ( (disp(j) < bl+1) )
275 if ( j > index_range(2) )
exit
277 if ( abs(disp(j-1)) == 0.0_f64 )
then
278 halo_blocks(ind, 2, bl-box1+1) = j-2
280 halo_blocks(ind, 2, bl-box1+1) = j-1
285 n_halo_blocks = blocks
295 sll_real64,
intent(inout) :: f6d(&
296 decomposition%local%mn(1):decomposition%local%mx(1), &
297 decomposition%local%mn(2):decomposition%local%mx(2), &
298 decomposition%local%mn(3):decomposition%local%mx(3), &
299 decomposition%local%mn(4):decomposition%local%mx(4), &
300 decomposition%local%mn(5):decomposition%local%mx(5), &
301 decomposition%local%mn(6):decomposition%local%mx(6))
303 sll_int32,
parameter :: id = 1
306 do j=1, self%n_halo_blocks(id)
311 self%halo_width_eta1(1, j), &
312 self%halo_width_eta1(2, j), &
313 self%halo_blocks_eta1(:,:,j))
318 self%halo_blocks_eta1(id+3, :, j), &
319 self%displacement_eta1, &
328 sll_int32,
intent(in) :: eta4_cut(2)
329 sll_real64,
intent(in) :: displacement(decomposition%local%mn(4):decomposition%local%mx(4))
330 sll_real64,
intent(inout) :: f6d(&
331 decomposition%local%mn(1):decomposition%local%mx(1), &
332 decomposition%local%mn(2):decomposition%local%mx(2), &
333 decomposition%local%mn(3):decomposition%local%mx(3), &
334 decomposition%local%mn(4):decomposition%local%mx(4), &
335 decomposition%local%mn(5):decomposition%local%mx(5), &
336 decomposition%local%mn(6):decomposition%local%mx(6))
337 sll_int32,
parameter :: id = 1
338 sll_int32 :: i,j,k,l,m,n,w,wx, lw
339 sll_real64,
pointer :: buf_i(:,:)
340 sll_real64,
pointer :: buf_o(:,:)
342 sll_int32 :: mn(2), mx(2)
344 sll_int32 :: l_mn, l_mx, c_mn, c_mx, r_mn, r_mx
345 sll_int32,
pointer :: loop_mn(:), loop_mx(:)
346 halo_dtype,
pointer :: l_halo(:,:,:,:,:,:)
347 halo_dtype,
pointer :: r_halo(:,:,:,:,:,:)
350 l_mn = decomposition%local%halo_left%mn(id)
351 l_mx = decomposition%local%halo_left%mx(id)
352 c_mn = decomposition%local%mn(id)
353 c_mx = decomposition%local%mx(id)
354 r_mn = decomposition%local%halo_right%mn(id)
355 r_mx = decomposition%local%halo_right%mx(id)
356 l_halo => decomposition%local%halo_left%buf
357 r_halo => decomposition%local%halo_right%buf
358 loop_mn => decomposition%local%mn
359 loop_mx => decomposition%local%mx
362 #ifdef CACHE_BLOCKING_J
365 wx =
get_wx(decomposition, 2)
369 lw = self%lagrange_width(1)
381 allocate(buf_i(l_mn:r_mx, 0:wx-1))
382 allocate(buf_o(l_mn:r_mx, 0:wx-1))
385 do n=loop_mn(6), loop_mx(6)
386 do m=loop_mn(5), loop_mx(5)
387 do l=eta4_cut(1), eta4_cut(2)
388 do k=loop_mn(3), loop_mx(3)
389 #ifdef CACHE_BLOCKING_J
390 do j=loop_mn(2), loop_mx(2), wx
393 buf_i(i,w) = l_halo(i,j+w,k,l,m,n)
398 buf_i(i,w) = f6d(i,j+w,k,l,m,n)
403 buf_i(i,w) = r_halo(i,j+w,k,l,m,n)
418 f6d(i,j+w,k,l,m,n) = buf_o(i,w)
423 do j=loop_mn(2), loop_mx(2)
433 buf_i(i,0) = l_halo(i,j,k,l,m,n)
436 buf_i(i,0) = f6d(i,j,k,l,m,n)
439 buf_i(i,0) = r_halo(i,j,k,l,m,n)
450 f6d(i,j,k,l,m,n) = buf_o(i,0)
475 sll_real64,
intent(inout) :: f6d(&
476 decomposition%local%mn(1):decomposition%local%mx(1), &
477 decomposition%local%mn(2):decomposition%local%mx(2), &
478 decomposition%local%mn(3):decomposition%local%mx(3), &
479 decomposition%local%mn(4):decomposition%local%mx(4), &
480 decomposition%local%mn(5):decomposition%local%mx(5), &
481 decomposition%local%mn(6):decomposition%local%mx(6))
482 sll_int32,
parameter :: id = 2
485 do j=1, self%n_halo_blocks(id)
490 self%halo_width_eta2(1, j), &
491 self%halo_width_eta2(2, j), &
492 self%halo_blocks_eta2(:,:,j))
497 self%halo_blocks_eta2(id+3, :, j), &
498 self%displacement_eta2, &
507 sll_int32,
intent(in) :: eta5_cut(2)
508 sll_real64,
intent(in) :: displacement(decomposition%local%mn(5):decomposition%local%mx(5))
509 sll_real64,
intent(inout) :: f6d(&
510 decomposition%local%mn(1):decomposition%local%mx(1), &
511 decomposition%local%mn(2):decomposition%local%mx(2), &
512 decomposition%local%mn(3):decomposition%local%mx(3), &
513 decomposition%local%mn(4):decomposition%local%mx(4), &
514 decomposition%local%mn(5):decomposition%local%mx(5), &
515 decomposition%local%mn(6):decomposition%local%mx(6))
516 sll_int32,
parameter :: id = 2
517 sll_int32 :: i,j,k,l,m,n,w,wx, lw
518 sll_real64,
pointer :: buf_i(:,:)
519 sll_real64,
pointer :: buf_o(:,:)
521 sll_int32 :: mn(2), mx(2)
523 sll_int32 :: l_mn, l_mx, c_mn, c_mx, r_mn, r_mx
524 sll_int32,
pointer :: loop_mn(:), loop_mx(:)
525 halo_dtype,
pointer :: l_halo(:,:,:,:,:,:)
526 halo_dtype,
pointer :: r_halo(:,:,:,:,:,:)
529 l_mn = decomposition%local%halo_left%mn(id)
530 l_mx = decomposition%local%halo_left%mx(id)
531 c_mn = decomposition%local%mn(id)
532 c_mx = decomposition%local%mx(id)
533 r_mn = decomposition%local%halo_right%mn(id)
534 r_mx = decomposition%local%halo_right%mx(id)
535 l_halo => decomposition%local%halo_left%buf
536 r_halo => decomposition%local%halo_right%buf
537 loop_mn => decomposition%local%mn
538 loop_mx => decomposition%local%mx
539 wx =
get_wx(decomposition)
540 lw = self%lagrange_width(1)
552 allocate(buf_i(l_mn:r_mx, 0:wx-1))
553 allocate(buf_o(l_mn:r_mx, 0:wx-1))
556 do n=loop_mn(6), loop_mx(6)
557 do m=eta5_cut(1), eta5_cut(2)
558 do l=loop_mn(4), loop_mx(4)
559 do k=loop_mn(3), loop_mx(3)
560 #ifndef DISABLE_CACHE_BLOCKING
561 do i=loop_mn(1), loop_mx(1), wx
565 buf_i(j,w) = l_halo(i+w,j,k,l,m,n)
570 buf_i(j,w) = f6d(i+w,j,k,l,m,n)
575 buf_i(j,w) = r_halo(i+w,j,k,l,m,n)
590 f6d(i+w,j,k,l,m,n) = buf_o(j,w)
595 do i=loop_mn(1), loop_mx(1)
598 buf_i(j,0) = l_halo(i,j,k,l,m,n)
601 buf_i(j,0) = f6d(i,j,k,l,m,n)
604 buf_i(j,0) = r_halo(i,j,k,l,m,n)
615 f6d(i,j,k,l,m,n) = buf_o(j,0)
640 sll_real64,
intent(inout) :: f6d(&
641 decomposition%local%mn(1):decomposition%local%mx(1), &
642 decomposition%local%mn(2):decomposition%local%mx(2), &
643 decomposition%local%mn(3):decomposition%local%mx(3), &
644 decomposition%local%mn(4):decomposition%local%mx(4), &
645 decomposition%local%mn(5):decomposition%local%mx(5), &
646 decomposition%local%mn(6):decomposition%local%mx(6))
648 sll_int32,
parameter :: id = 3
651 do j=1, self%n_halo_blocks(id)
656 self%halo_width_eta3(1, j), &
657 self%halo_width_eta3(2, j), &
658 self%halo_blocks_eta3(:,:,j))
663 self%halo_blocks_eta3(id+3, :, j), &
664 self%displacement_eta3, &
673 sll_int32,
intent(in) :: eta6_cut(2)
674 sll_real64,
intent(in) :: displacement(decomposition%local%mn(6):decomposition%local%mx(6))
675 sll_real64,
intent(inout) :: f6d(&
676 decomposition%local%mn(1):decomposition%local%mx(1), &
677 decomposition%local%mn(2):decomposition%local%mx(2), &
678 decomposition%local%mn(3):decomposition%local%mx(3), &
679 decomposition%local%mn(4):decomposition%local%mx(4), &
680 decomposition%local%mn(5):decomposition%local%mx(5), &
681 decomposition%local%mn(6):decomposition%local%mx(6))
682 sll_int32,
parameter :: id = 3
683 sll_int32 :: i,j,k,l,m,n,w,wx, lw
684 sll_real64,
pointer :: buf_i(:,:)
685 sll_real64,
pointer :: buf_o(:,:)
687 sll_int32 :: mn(2), mx(2)
689 sll_int32 :: l_mn, l_mx, c_mn, c_mx, r_mn, r_mx
690 sll_int32,
pointer :: loop_mn(:), loop_mx(:)
691 halo_dtype,
pointer :: l_halo(:,:,:,:,:,:)
692 halo_dtype,
pointer :: r_halo(:,:,:,:,:,:)
695 l_mn = decomposition%local%halo_left%mn(id)
696 l_mx = decomposition%local%halo_left%mx(id)
697 c_mn = decomposition%local%mn(id)
698 c_mx = decomposition%local%mx(id)
699 r_mn = decomposition%local%halo_right%mn(id)
700 r_mx = decomposition%local%halo_right%mx(id)
701 l_halo => decomposition%local%halo_left%buf
702 r_halo => decomposition%local%halo_right%buf
703 loop_mn => decomposition%local%mn
704 loop_mx => decomposition%local%mx
705 wx =
get_wx(decomposition)
706 lw = self%lagrange_width(1)
718 allocate(buf_i(l_mn:r_mx, 0:wx-1))
719 allocate(buf_o(l_mn:r_mx, 0:wx-1))
722 do n=eta6_cut(1), eta6_cut(2)
723 do m=loop_mn(5), loop_mx(5)
724 do l=loop_mn(4), loop_mx(4)
725 do j=loop_mn(2), loop_mx(2)
726 #ifndef DISABLE_CACHE_BLOCKING
727 do i=loop_mn(1), loop_mx(1), wx
731 buf_i(k,w) = l_halo(i+w,j,k,l,m,n)
736 buf_i(k,w) = f6d(i+w,j,k,l,m,n)
741 buf_i(k,w) = r_halo(i+w,j,k,l,m,n)
756 f6d(i+w,j,k,l,m,n) = buf_o(k,w)
761 do i=loop_mn(1), loop_mx(1)
764 buf_i(k,0) = l_halo(i,j,k,l,m,n)
767 buf_i(k,0) = f6d(i,j,k,l,m,n)
770 buf_i(k,0) = r_halo(i,j,k,l,m,n)
781 f6d(i,j,k,l,m,n) = buf_o(k,0)
809 sll_real64,
intent(in) :: displacement(decomposition%local%mn(4):decomposition%local%mx(4))
810 sll_real64,
intent(inout) :: f6d(&
811 decomposition%local%mn(1):decomposition%local%mx(1), &
812 decomposition%local%mn(2):decomposition%local%mx(2), &
813 decomposition%local%mn(3):decomposition%local%mx(3), &
814 decomposition%local%mn(4):decomposition%local%mx(4), &
815 decomposition%local%mn(5):decomposition%local%mx(5), &
816 decomposition%local%mn(6):decomposition%local%mx(6))
817 sll_int32,
parameter :: id = 1
818 sll_int32 :: i,j,k,l,m,n,w,wx, lw
819 sll_real64,
pointer :: buf_i(:,:)
820 sll_real64,
pointer :: buf_o(:,:)
822 sll_int32 :: mn(2), mx(2)
824 sll_int32 :: l_mn, l_mx, c_mn, c_mx, r_mn, r_mx
825 sll_int32,
pointer :: loop_mn(:), loop_mx(:)
826 halo_dtype,
pointer :: l_halo(:,:,:,:,:,:)
827 halo_dtype,
pointer :: r_halo(:,:,:,:,:,:)
829 sll_assert_always(decomposition%local%halo_left%nw(id) == decomposition%local%halo_right%nw(id))
830 sll_assert_always(decomposition%local%halo_left%nw(id) == (self%lagrange_width(1)-1)/2)
832 l_mn = decomposition%local%halo_left%mn(id)
833 l_mx = decomposition%local%halo_left%mx(id)
834 c_mn = decomposition%local%mn(id)
835 c_mx = decomposition%local%mx(id)
836 r_mn = decomposition%local%halo_right%mn(id)
837 r_mx = decomposition%local%halo_right%mx(id)
838 l_halo => decomposition%local%halo_left%buf
839 r_halo => decomposition%local%halo_right%buf
840 loop_mn => decomposition%local%mn
841 loop_mx => decomposition%local%mx
844 wx =
get_wx(decomposition, 2)
845 lw = self%lagrange_width(1)
888 allocate(buf_i(l_mn:r_mx, 0:wx-1))
889 allocate(buf_o(l_mn:r_mx, 0:wx-1))
892 do n=loop_mn(6), loop_mx(6)
893 do m=loop_mn(5), loop_mx(5)
894 do l=loop_mn(4), loop_mx(4)
895 do k=loop_mn(3), loop_mx(3)
896 #ifndef DISABLE_CACHE_BLOCKING
897 do j=loop_mn(2), loop_mx(2), wx
900 buf_i(i,w) = l_halo(i,j+w,k,l,m,n)
905 buf_i(i,w) = f6d(i,j+w,k,l,m,n)
910 buf_i(i,w) = r_halo(i,j+w,k,l,m,n)
922 f6d(i,j+w,k,l,m,n) = buf_o(i,w)
927 do j=loop_mn(2), loop_mx(2)
933 buf_i(i,0) = l_halo(i,j,k,l,m,n)
936 buf_i(i,0) = f6d(i,j,k,l,m,n)
939 buf_i(i,0) = r_halo(i,j,k,l,m,n)
950 f6d(i,j,k,l,m,n) = buf_o(i,0)
973 sll_real64,
intent(in) :: displacement(decomposition%local%mn(4):decomposition%local%mx(4), decomposition%local%mn(5):decomposition%local%mx(5))
974 sll_real64,
intent(inout) :: f6d(&
975 decomposition%local%mn(1):decomposition%local%mx(1), &
976 decomposition%local%mn(2):decomposition%local%mx(2), &
977 decomposition%local%mn(3):decomposition%local%mx(3), &
978 decomposition%local%mn(4):decomposition%local%mx(4), &
979 decomposition%local%mn(5):decomposition%local%mx(5), &
980 decomposition%local%mn(6):decomposition%local%mx(6))
981 sll_int32,
parameter :: id = 1
982 sll_int32 :: i,j,k,l,m,n,w,wx, lw
983 sll_real64,
pointer :: buf_i(:,:)
984 sll_real64,
pointer :: buf_o(:,:)
986 sll_int32 :: mn(2), mx(2)
988 sll_int32 :: l_mn, l_mx, c_mn, c_mx, r_mn, r_mx
989 sll_int32,
pointer :: loop_mn(:), loop_mx(:)
990 halo_dtype,
pointer :: l_halo(:,:,:,:,:,:)
991 halo_dtype,
pointer :: r_halo(:,:,:,:,:,:)
993 sll_assert_always(decomposition%local%halo_left%nw(id) == decomposition%local%halo_right%nw(id))
994 sll_assert_always(decomposition%local%halo_left%nw(id) == (self%lagrange_width(1)-1)/2)
996 l_mn = decomposition%local%halo_left%mn(id)
997 l_mx = decomposition%local%halo_left%mx(id)
998 c_mn = decomposition%local%mn(id)
999 c_mx = decomposition%local%mx(id)
1000 r_mn = decomposition%local%halo_right%mn(id)
1001 r_mx = decomposition%local%halo_right%mx(id)
1002 l_halo => decomposition%local%halo_left%buf
1003 r_halo => decomposition%local%halo_right%buf
1004 loop_mn => decomposition%local%mn
1005 loop_mx => decomposition%local%mx
1008 wx =
get_wx(decomposition, 2)
1009 lw = self%lagrange_width(1)
1021 allocate(buf_i(l_mn:r_mx, 0:wx-1))
1022 allocate(buf_o(l_mn:r_mx, 0:wx-1))
1025 do n=loop_mn(6), loop_mx(6)
1026 do m=loop_mn(5), loop_mx(5)
1027 do l=loop_mn(4), loop_mx(4)
1028 do k=loop_mn(3), loop_mx(3)
1029 #ifndef DISABLE_CACHE_BLOCKING
1030 do j=loop_mn(2), loop_mx(2), wx
1033 buf_i(i,w) = l_halo(i,j+w,k,l,m,n)
1038 buf_i(i,w) = f6d(i,j+w,k,l,m,n)
1043 buf_i(i,w) = r_halo(i,j+w,k,l,m,n)
1050 displacement(l,m), &
1055 f6d(i,j+w,k,l,m,n) = buf_o(i,w)
1060 do j=loop_mn(2), loop_mx(2)
1066 buf_i(i,0) = l_halo(i,j,k,l,m,n)
1069 buf_i(i,0) = f6d(i,j,k,l,m,n)
1072 buf_i(i,0) = r_halo(i,j,k,l,m,n)
1078 displacement(l,m), &
1083 f6d(i,j,k,l,m,n) = buf_o(i,0)
1107 sll_real64,
intent(in) :: displacement(decomposition%local%mn(5):decomposition%local%mx(5))
1108 sll_real64,
intent(inout) :: f6d(&
1109 decomposition%local%mn(1):decomposition%local%mx(1), &
1110 decomposition%local%mn(2):decomposition%local%mx(2), &
1111 decomposition%local%mn(3):decomposition%local%mx(3), &
1112 decomposition%local%mn(4):decomposition%local%mx(4), &
1113 decomposition%local%mn(5):decomposition%local%mx(5), &
1114 decomposition%local%mn(6):decomposition%local%mx(6))
1115 sll_int32,
parameter :: id = 2
1116 sll_int32 :: i,j,k,l,m,n,w,wx, lw
1117 sll_real64,
pointer :: buf_i(:,:)
1118 sll_real64,
pointer :: buf_o(:,:)
1120 sll_int32 :: mn(2), mx(2)
1122 sll_int32 :: l_mn, l_mx, c_mn, c_mx, r_mn, r_mx
1123 sll_int32,
pointer :: loop_mn(:), loop_mx(:)
1124 halo_dtype,
pointer :: l_halo(:,:,:,:,:,:)
1125 halo_dtype,
pointer :: r_halo(:,:,:,:,:,:)
1130 sll_assert_always(decomposition%local%halo_left%nw(id) == decomposition%local%halo_right%nw(id))
1131 sll_assert_always(decomposition%local%halo_left%nw(id) == (self%lagrange_width(1)-1)/2)
1133 l_mn = decomposition%local%halo_left%mn(id)
1134 l_mx = decomposition%local%halo_left%mx(id)
1135 c_mn = decomposition%local%mn(id)
1136 c_mx = decomposition%local%mx(id)
1137 r_mn = decomposition%local%halo_right%mn(id)
1138 r_mx = decomposition%local%halo_right%mx(id)
1139 l_halo => decomposition%local%halo_left%buf
1140 r_halo => decomposition%local%halo_right%buf
1141 loop_mn => decomposition%local%mn
1142 loop_mx => decomposition%local%mx
1143 wx =
get_wx(decomposition)
1144 lw = self%lagrange_width(1)
1189 allocate(buf_i(l_mn:r_mx, 0:wx-1))
1190 allocate(buf_o(l_mn:r_mx, 0:wx-1))
1193 do n=loop_mn(6), loop_mx(6)
1194 do m=loop_mn(5), loop_mx(5)
1195 do l=loop_mn(4), loop_mx(4)
1196 do k=loop_mn(3), loop_mx(3)
1197 #ifndef DISABLE_CACHE_BLOCKING
1198 do i=loop_mn(1), loop_mx(1), wx
1201 buf_i(j,w) = l_halo(i+w,j,k,l,m,n)
1206 buf_i(j,w) = f6d(i+w,j,k,l,m,n)
1211 buf_i(j,w) = r_halo(i+w,j,k,l,m,n)
1223 f6d(i+w,j,k,l,m,n) = buf_o(j,w)
1228 do i=loop_mn(1), loop_mx(1)
1234 buf_i(j,0) = l_halo(i,j,k,l,m,n)
1237 buf_i(j,0) = f6d(i,j,k,l,m,n)
1240 buf_i(j,0) = r_halo(i,j,k,l,m,n)
1250 f6d(i,j,k,l,m,n) = buf_o(j,0)
1274 sll_real64,
intent(in) :: displacement(&
1275 decomposition%local%mn(4):decomposition%local%mx(4),&
1276 decomposition%local%mn(5):decomposition%local%mx(5))
1277 sll_real64,
intent(inout) :: f6d(&
1278 decomposition%local%mn(1):decomposition%local%mx(1), &
1279 decomposition%local%mn(2):decomposition%local%mx(2), &
1280 decomposition%local%mn(3):decomposition%local%mx(3), &
1281 decomposition%local%mn(4):decomposition%local%mx(4), &
1282 decomposition%local%mn(5):decomposition%local%mx(5), &
1283 decomposition%local%mn(6):decomposition%local%mx(6))
1284 sll_int32,
parameter :: id = 2
1285 sll_int32 :: i,j,k,l,m,n,w,wx, lw
1286 sll_real64,
pointer :: buf_i(:,:)
1287 sll_real64,
pointer :: buf_o(:,:)
1289 sll_int32 :: mn(2), mx(2)
1291 sll_int32 :: l_mn, l_mx, c_mn, c_mx, r_mn, r_mx
1292 sll_int32,
pointer :: loop_mn(:), loop_mx(:)
1293 halo_dtype,
pointer :: l_halo(:,:,:,:,:,:)
1294 halo_dtype,
pointer :: r_halo(:,:,:,:,:,:)
1299 sll_assert_always(decomposition%local%halo_left%nw(id) == decomposition%local%halo_right%nw(id))
1300 sll_assert_always(decomposition%local%halo_left%nw(id) == (self%lagrange_width(1)-1)/2)
1302 l_mn = decomposition%local%halo_left%mn(id)
1303 l_mx = decomposition%local%halo_left%mx(id)
1304 c_mn = decomposition%local%mn(id)
1305 c_mx = decomposition%local%mx(id)
1306 r_mn = decomposition%local%halo_right%mn(id)
1307 r_mx = decomposition%local%halo_right%mx(id)
1308 l_halo => decomposition%local%halo_left%buf
1309 r_halo => decomposition%local%halo_right%buf
1310 loop_mn => decomposition%local%mn
1311 loop_mx => decomposition%local%mx
1312 wx =
get_wx(decomposition)
1313 lw = self%lagrange_width(1)
1325 allocate(buf_i(l_mn:r_mx, 0:wx-1))
1326 allocate(buf_o(l_mn:r_mx, 0:wx-1))
1329 do n=loop_mn(6), loop_mx(6)
1330 do m=loop_mn(5), loop_mx(5)
1331 do l=loop_mn(4), loop_mx(4)
1332 do k=loop_mn(3), loop_mx(3)
1333 #ifndef DISABLE_CACHE_BLOCKING
1334 do i=loop_mn(1), loop_mx(1), wx
1337 buf_i(j,w) = l_halo(i+w,j,k,l,m,n)
1342 buf_i(j,w) = f6d(i+w,j,k,l,m,n)
1347 buf_i(j,w) = r_halo(i+w,j,k,l,m,n)
1354 displacement(l,m), &
1359 f6d(i+w,j,k,l,m,n) = buf_o(j,w)
1364 do i=loop_mn(1), loop_mx(1)
1370 buf_i(j,0) = l_halo(i,j,k,l,m,n)
1373 buf_i(j,0) = f6d(i,j,k,l,m,n)
1376 buf_i(j,0) = r_halo(i,j,k,l,m,n)
1382 displacement(l,m), &
1386 f6d(i,j,k,l,m,n) = buf_o(j,0)
1413 sll_real64,
intent(in) :: displacement(decomposition%local%mn(6):decomposition%local%mx(6))
1414 sll_real64,
intent(inout) :: f6d(&
1415 decomposition%local%mn(1):decomposition%local%mx(1), &
1416 decomposition%local%mn(2):decomposition%local%mx(2), &
1417 decomposition%local%mn(3):decomposition%local%mx(3), &
1418 decomposition%local%mn(4):decomposition%local%mx(4), &
1419 decomposition%local%mn(5):decomposition%local%mx(5), &
1420 decomposition%local%mn(6):decomposition%local%mx(6))
1421 sll_int32,
parameter :: id = 3
1422 sll_int32 :: i,j,k,l,m,n,w,wx, lw
1423 sll_real64,
pointer :: buf_i(:,:)
1424 sll_real64,
pointer :: buf_o(:,:)
1426 sll_int32 :: mn(2), mx(2)
1428 sll_int32 :: l_mn, l_mx, c_mn, c_mx, r_mn, r_mx
1429 sll_int32,
pointer :: loop_mn(:), loop_mx(:)
1430 halo_dtype,
pointer :: l_halo(:,:,:,:,:,:)
1431 halo_dtype,
pointer :: r_halo(:,:,:,:,:,:)
1436 sll_assert_always(decomposition%local%halo_left%nw(id) == decomposition%local%halo_right%nw(id))
1437 sll_assert_always(decomposition%local%halo_left%nw(id) == (self%lagrange_width(1)-1)/2)
1439 l_mn = decomposition%local%halo_left%mn(id)
1440 l_mx = decomposition%local%halo_left%mx(id)
1441 c_mn = decomposition%local%mn(id)
1442 c_mx = decomposition%local%mx(id)
1443 r_mn = decomposition%local%halo_right%mn(id)
1444 r_mx = decomposition%local%halo_right%mx(id)
1445 l_halo => decomposition%local%halo_left%buf
1446 r_halo => decomposition%local%halo_right%buf
1447 loop_mn => decomposition%local%mn
1448 loop_mx => decomposition%local%mx
1449 wx =
get_wx(decomposition)
1450 lw = self%lagrange_width(1)
1462 allocate(buf_i(l_mn:r_mx, 0:wx-1))
1463 allocate(buf_o(l_mn:r_mx, 0:wx-1))
1466 do n=loop_mn(6), loop_mx(6)
1467 do m=loop_mn(5), loop_mx(5)
1468 do l=loop_mn(4), loop_mx(4)
1469 do j=loop_mn(2), loop_mx(2)
1484 #ifndef DISABLE_CACHE_BLOCKING
1485 do i=loop_mn(1), loop_mx(1), wx
1488 buf_i(k,w) = l_halo(i+w,j,k,l,m,n)
1493 buf_i(k,w) = f6d(i+w,j,k,l,m,n)
1498 buf_i(k,w) = r_halo(i+w,j,k,l,m,n)
1510 f6d(i+w,j,k,l,m,n) = buf_o(k,w)
1515 do i=loop_mn(1), loop_mx(1)
1521 buf_i(k,0) = l_halo(i,j,k,l,m,n)
1524 buf_i(k,0) = f6d(i,j,k,l,m,n)
1527 buf_i(k,0) = r_halo(i,j,k,l,m,n)
1537 f6d(i,j,k,l,m,n) = buf_o(k,0)
1561 sll_real64,
intent(in) :: displacement(&
1562 decomposition%local%mn(1):decomposition%local%mx(1), &
1563 decomposition%local%mn(2):decomposition%local%mx(2), &
1564 decomposition%local%mn(3):decomposition%local%mx(3))
1565 sll_real64,
intent(inout) :: f6d(&
1566 decomposition%local%mn(1):decomposition%local%mx(1), &
1567 decomposition%local%mn(2):decomposition%local%mx(2), &
1568 decomposition%local%mn(3):decomposition%local%mx(3), &
1569 decomposition%local%mn(4):decomposition%local%mx(4), &
1570 decomposition%local%mn(5):decomposition%local%mx(5), &
1571 decomposition%local%mn(6):decomposition%local%mx(6))
1572 sll_int32,
parameter :: id = 4
1573 sll_int32 :: i,j,k,l,m,n,w,wx, lw
1574 sll_real64,
pointer :: buf_i(:,:)
1575 sll_real64,
pointer :: buf_o(:,:)
1577 sll_int32 :: mn(2), mx(2)
1579 sll_int32 :: l_mn, l_mx, c_mn, c_mx, r_mn, r_mx
1580 sll_int32,
pointer :: loop_mn(:), loop_mx(:)
1581 halo_dtype,
pointer :: l_halo(:,:,:,:,:,:)
1582 halo_dtype,
pointer :: r_halo(:,:,:,:,:,:)
1587 sll_assert_always(decomposition%local%halo_left%nw(id) == decomposition%local%halo_right%nw(id))
1588 sll_assert_always(decomposition%local%halo_left%nw(id) == (self%lagrange_width(2)-1)/2)
1590 l_mn = decomposition%local%halo_left%mn(id)
1591 l_mx = decomposition%local%halo_left%mx(id)
1592 c_mn = decomposition%local%mn(id)
1593 c_mx = decomposition%local%mx(id)
1594 r_mn = decomposition%local%halo_right%mn(id)
1595 r_mx = decomposition%local%halo_right%mx(id)
1596 l_halo => decomposition%local%halo_left%buf
1597 r_halo => decomposition%local%halo_right%buf
1598 loop_mn => decomposition%local%mn
1599 loop_mx => decomposition%local%mx
1600 wx =
get_wx(decomposition)
1601 lw = self%lagrange_width(2)
1613 allocate(buf_i(l_mn:r_mx, 0:wx-1))
1614 allocate(buf_o(l_mn:r_mx, 0:wx-1))
1617 do n=loop_mn(6), loop_mx(6)
1618 do m=loop_mn(5), loop_mx(5)
1619 do k=loop_mn(3), loop_mx(3)
1620 do j=loop_mn(2), loop_mx(2)
1635 #ifndef DISABLE_CACHE_BLOCKING
1636 do i=loop_mn(1), loop_mx(1), wx
1639 buf_i(l,w) = l_halo(i+w,j,k,l,m,n)
1644 buf_i(l,w) = f6d(i+w,j,k,l,m,n)
1649 buf_i(l,w) = r_halo(i+w,j,k,l,m,n)
1656 displacement(i+w,j,k), &
1661 f6d(i+w,j,k,l,m,n) = buf_o(l,w)
1666 do i=loop_mn(1), loop_mx(1)
1672 buf_i(l,0) = l_halo(i,j,k,l,m,n)
1675 buf_i(l,0) = f6d(i,j,k,l,m,n)
1678 buf_i(l,0) = r_halo(i,j,k,l,m,n)
1684 displacement(i,j,k), &
1687 f6d(i,j,k,l,m,n) = buf_o(l,0)
1711 sll_real64,
intent(in) :: displacement(&
1712 decomposition%local%mn(1):decomposition%local%mx(1), &
1713 decomposition%local%mn(2):decomposition%local%mx(2), &
1714 decomposition%local%mn(3):decomposition%local%mx(3))
1715 sll_real64,
intent(inout) :: f6d(&
1716 decomposition%local%mn(1):decomposition%local%mx(1), &
1717 decomposition%local%mn(2):decomposition%local%mx(2), &
1718 decomposition%local%mn(3):decomposition%local%mx(3), &
1719 decomposition%local%mn(4):decomposition%local%mx(4), &
1720 decomposition%local%mn(5):decomposition%local%mx(5), &
1721 decomposition%local%mn(6):decomposition%local%mx(6))
1722 sll_int32,
parameter :: id = 5
1723 sll_int32 :: i,j,k,l,m,n,w,wx, lw
1724 sll_real64,
pointer :: buf_i(:,:)
1725 sll_real64,
pointer :: buf_o(:,:)
1727 sll_int32 :: mn(2), mx(2)
1729 sll_int32 :: l_mn, l_mx, c_mn, c_mx, r_mn, r_mx
1730 sll_int32,
pointer :: loop_mn(:), loop_mx(:)
1731 halo_dtype,
pointer :: l_halo(:,:,:,:,:,:)
1732 halo_dtype,
pointer :: r_halo(:,:,:,:,:,:)
1737 sll_assert_always(decomposition%local%halo_left%nw(id) == decomposition%local%halo_right%nw(id))
1738 sll_assert_always(decomposition%local%halo_left%nw(id) == (self%lagrange_width(2)-1)/2)
1740 l_mn = decomposition%local%halo_left%mn(id)
1741 l_mx = decomposition%local%halo_left%mx(id)
1742 c_mn = decomposition%local%mn(id)
1743 c_mx = decomposition%local%mx(id)
1744 r_mn = decomposition%local%halo_right%mn(id)
1745 r_mx = decomposition%local%halo_right%mx(id)
1746 l_halo => decomposition%local%halo_left%buf
1747 r_halo => decomposition%local%halo_right%buf
1748 loop_mn => decomposition%local%mn
1749 loop_mx => decomposition%local%mx
1750 wx =
get_wx(decomposition)
1751 lw = self%lagrange_width(2)
1763 allocate(buf_i(l_mn:r_mx, 0:wx-1))
1764 allocate(buf_o(l_mn:r_mx, 0:wx-1))
1767 do n=loop_mn(6), loop_mx(6)
1768 do l=loop_mn(4), loop_mx(4)
1769 do k=loop_mn(3), loop_mx(3)
1770 do j=loop_mn(2), loop_mx(2)
1785 #ifndef DISABLE_CACHE_BLOCKING
1786 do i=loop_mn(1), loop_mx(1), wx
1789 buf_i(m,w) = l_halo(i+w,j,k,l,m,n)
1794 buf_i(m,w) = f6d(i+w,j,k,l,m,n)
1799 buf_i(m,w) = r_halo(i+w,j,k,l,m,n)
1807 displacement(i+w,j,k), &
1812 f6d(i+w,j,k,l,m,n) = buf_o(m,w)
1817 do i=loop_mn(1), loop_mx(1)
1820 buf_i(m,0) = l_halo(i,j,k,l,m,n)
1823 buf_i(m,0) = f6d(i,j,k,l,m,n)
1826 buf_i(m,0) = r_halo(i,j,k,l,m,n)
1832 displacement(i,j,k), &
1835 f6d(i,j,k,l,m,n) = buf_o(m,0)
1859 sll_real64,
intent(in) :: displacement(&
1860 decomposition%local%mn(1):decomposition%local%mx(1), &
1861 decomposition%local%mn(2):decomposition%local%mx(2), &
1862 decomposition%local%mn(3):decomposition%local%mx(3))
1863 sll_real64,
intent(inout) :: f6d(&
1864 decomposition%local%mn(1):decomposition%local%mx(1), &
1865 decomposition%local%mn(2):decomposition%local%mx(2), &
1866 decomposition%local%mn(3):decomposition%local%mx(3), &
1867 decomposition%local%mn(4):decomposition%local%mx(4), &
1868 decomposition%local%mn(5):decomposition%local%mx(5), &
1869 decomposition%local%mn(6):decomposition%local%mx(6))
1870 sll_int32,
parameter :: id = 6
1871 sll_int32 :: i,j,k,l,m,n,w,wx, lw
1872 sll_real64,
pointer :: buf_i(:,:)
1873 sll_real64,
pointer :: buf_o(:,:)
1875 sll_int32 :: mn(2), mx(2)
1877 sll_int32 :: l_mn, l_mx, c_mn, c_mx, r_mn, r_mx
1878 sll_int32,
pointer :: loop_mn(:), loop_mx(:)
1879 halo_dtype,
pointer :: l_halo(:,:,:,:,:,:)
1880 halo_dtype,
pointer :: r_halo(:,:,:,:,:,:)
1885 sll_assert_always(decomposition%local%halo_left%nw(id) == decomposition%local%halo_right%nw(id))
1886 sll_assert_always(decomposition%local%halo_left%nw(id) == (self%lagrange_width(2)-1)/2)
1888 l_mn = decomposition%local%halo_left%mn(id)
1889 l_mx = decomposition%local%halo_left%mx(id)
1890 c_mn = decomposition%local%mn(id)
1891 c_mx = decomposition%local%mx(id)
1892 r_mn = decomposition%local%halo_right%mn(id)
1893 r_mx = decomposition%local%halo_right%mx(id)
1894 l_halo => decomposition%local%halo_left%buf
1895 r_halo => decomposition%local%halo_right%buf
1896 loop_mn => decomposition%local%mn
1897 loop_mx => decomposition%local%mx
1898 wx =
get_wx(decomposition)
1899 lw = self%lagrange_width(2)
1911 allocate(buf_i(l_mn:r_mx, 0:wx-1))
1912 allocate(buf_o(l_mn:r_mx, 0:wx-1))
1915 do m=loop_mn(5), loop_mx(5)
1916 do l=loop_mn(4), loop_mx(4)
1917 do k=loop_mn(3), loop_mx(3)
1918 do j=loop_mn(2), loop_mx(2)
1934 #ifndef DISABLE_CACHE_BLOCKING
1935 do i=loop_mn(1), loop_mx(1), wx
1938 buf_i(n,w) = l_halo(i+w,j,k,l,m,n)
1943 buf_i(n,w) = f6d(i+w,j,k,l,m,n)
1948 buf_i(n,w) = r_halo(i+w,j,k,l,m,n)
1955 displacement(i+w,j,k), &
1960 f6d(i+w,j,k,l,m,n) = buf_o(n,w)
1965 do i=loop_mn(1), loop_mx(1)
1968 buf_i(n,0) = l_halo(i,j,k,l,m,n)
1971 buf_i(n,0) = f6d(i,j,k,l,m,n)
1974 buf_i(n,0) = r_halo(i,j,k,l,m,n)
1980 displacement(i,j,k), &
1984 f6d(i,j,k,l,m,n) = buf_o(n,0)
2010 sll_real64,
intent(in) :: displacement(decomposition%local%mn(4):decomposition%local%mx(4),decomposition%local%mn(5):decomposition%local%mx(5))
2011 sll_real64,
intent(inout) :: f6d(&
2012 decomposition%local%mn(1):decomposition%local%mx(1), &
2013 decomposition%local%mn(2):decomposition%local%mx(2), &
2014 decomposition%local%mn(3):decomposition%local%mx(3), &
2015 decomposition%local%mn(4):decomposition%local%mx(4), &
2016 decomposition%local%mn(5):decomposition%local%mx(5), &
2017 decomposition%local%mn(6):decomposition%local%mx(6))
2019 sll_int32,
parameter :: id = 1
2020 sll_int32 :: i,j,k,l,m,n,w,wx, n_omp_threads, deg
2021 sll_real64,
pointer :: buf_i(:,:)
2022 sll_real64,
pointer :: buf_o(:,:)
2023 sll_int32 :: l_mn, l_mx, c_mn, c_mx, r_mn, r_mx, l_mn_l, r_mx_l
2024 sll_int32,
pointer :: loop_mn(:), loop_mx(:)
2025 halo_dtype,
pointer :: l_halo(:,:,:,:,:,:)
2026 halo_dtype,
pointer :: r_halo(:,:,:,:,:,:)
2028 sll_int32 :: mn(2), mx(2)
2034 l_mn = decomposition%local%halo_left%mn(id)
2035 l_mx = decomposition%local%halo_left%mx(id)
2036 c_mn = decomposition%local%mn(id)
2037 c_mx = decomposition%local%mx(id)
2038 r_mn = decomposition%local%halo_right%mn(id)
2039 r_mx = decomposition%local%halo_right%mx(id)
2040 l_halo => decomposition%local%halo_left%buf
2041 r_halo => decomposition%local%halo_right%buf
2042 loop_mn => decomposition%local%mn
2043 loop_mx => decomposition%local%mx
2046 wx =
get_wx(decomposition, 2)
2047 deg = self%lagrange_width(1)
2060 allocate(buf_i(l_mn:r_mx, 0:wx-1))
2061 allocate(buf_o(l_mn:r_mx, 0:wx-1))
2064 do n=loop_mn(6), loop_mx(6)
2065 do m=loop_mn(5), loop_mx(5)
2066 do l=loop_mn(4), loop_mx(4)
2068 si = floor(displacement(l,m))
2069 alpha = displacement(l,m) - real(si,f64)
2070 l_mn_l = -deg/2+1+si+c_mn
2071 r_mx_l = c_mx+deg/2+si
2073 do k=loop_mn(3), loop_mx(3)
2074 #ifndef DISABLE_CACHE_BLOCKING
2075 do j=loop_mn(2), loop_mx(2), wx
2078 buf_i(i,w) = l_halo(i,j+w,k,l,m,n)
2083 buf_i(i,w) = f6d(i,j+w,k,l,m,n)
2088 buf_i(i,w) = r_halo(i,j+w,k,l,m,n)
2093 buf_i(l_mn_l:r_mx_l,w), &
2094 buf_o(l_mn_l:r_mx_l,w), &
2100 f6d(i,j+w,k,l,m,n) = buf_o(i+si,w)
2105 do j=loop_mn(2), loop_mx(2)
2108 buf_i(i,0) = l_halo(i,j,k,l,m,n)
2111 buf_i(i,0) = f6d(i,j,k,l,m,n)
2114 buf_i(i,0) = r_halo(i,j,k,l,m,n)
2118 buf_i(l_mn_l:r_mx_l,0), &
2119 buf_o(l_mn_l:r_mx_l,0), &
2124 f6d(i,j,k,l,m,n) = buf_o(i+si,0)
2149 sll_real64,
intent(in) :: displacement(decomposition%local%mn(4):decomposition%local%mx(4),decomposition%local%mn(5):decomposition%local%mx(5))
2150 sll_real64,
intent(inout) :: f6d(&
2151 decomposition%local%mn(1):decomposition%local%mx(1), &
2152 decomposition%local%mn(2):decomposition%local%mx(2), &
2153 decomposition%local%mn(3):decomposition%local%mx(3), &
2154 decomposition%local%mn(4):decomposition%local%mx(4), &
2155 decomposition%local%mn(5):decomposition%local%mx(5), &
2156 decomposition%local%mn(6):decomposition%local%mx(6))
2158 sll_int32,
parameter :: id = 2
2159 sll_int32 :: i,j,k,l,m,n,w,wx, n_omp_threads, deg
2160 sll_real64,
pointer :: buf_i(:,:)
2161 sll_real64,
pointer :: buf_o(:,:)
2162 sll_int32 :: l_mn, l_mx, c_mn, c_mx, r_mn, r_mx, l_mn_l, r_mx_l
2163 sll_int32,
pointer :: loop_mn(:), loop_mx(:)
2164 halo_dtype,
pointer :: l_halo(:,:,:,:,:,:)
2165 halo_dtype,
pointer :: r_halo(:,:,:,:,:,:)
2167 sll_int32 :: mn(2), mx(2)
2173 l_mn = decomposition%local%halo_left%mn(id)
2174 l_mx = decomposition%local%halo_left%mx(id)
2175 c_mn = decomposition%local%mn(id)
2176 c_mx = decomposition%local%mx(id)
2177 r_mn = decomposition%local%halo_right%mn(id)
2178 r_mx = decomposition%local%halo_right%mx(id)
2179 l_halo => decomposition%local%halo_left%buf
2180 r_halo => decomposition%local%halo_right%buf
2181 loop_mn => decomposition%local%mn
2182 loop_mx => decomposition%local%mx
2183 wx =
get_wx(decomposition, 1)
2184 deg = self%lagrange_width(1)
2197 allocate(buf_i(l_mn:r_mx, 0:wx-1))
2198 allocate(buf_o(l_mn:r_mx, 0:wx-1))
2201 do n=loop_mn(6), loop_mx(6)
2202 do m=loop_mn(5), loop_mx(5)
2203 do l=loop_mn(4), loop_mx(4)
2205 si = floor(displacement(l,m))
2206 alpha = displacement(l,m) - real(si,f64)
2207 l_mn_l = -deg/2+1+si+c_mn
2208 r_mx_l = c_mx+deg/2+si
2210 do k=loop_mn(3), loop_mx(3)
2211 #ifndef DISABLE_CACHE_BLOCKING
2212 do i=loop_mn(1), loop_mx(1), wx
2215 buf_i(j,w) = l_halo(i+w,j,k,l,m,n)
2220 buf_i(j,w) = f6d(i+w,j,k,l,m,n)
2225 buf_i(j,w) = r_halo(i+w,j,k,l,m,n)
2230 buf_i(l_mn_l:r_mx_l,w), &
2231 buf_o(l_mn_l:r_mx_l,w), &
2237 f6d(i+w,j,k,l,m,n) = buf_o(j+si,w)
2242 do i=loop_mn(1), loop_mx(1)
2244 buf_i(j,0) = l_halo(i,j,k,l,m,n)
2247 buf_i(j,0) = f6d(i,j,k,l,m,n)
2250 buf_i(j,0) = r_halo(i,j,k,l,m,n)
2253 buf_i(l_mn_l:r_mx_l,0), &
2254 buf_o(l_mn_l:r_mx_l,0), &
2258 f6d(i,j,k,l,m,n) = buf_o(j+si,0)
2290 sll_real64,
intent(in) :: velocity_shift(decomposition%local%mn(1):decomposition%local%mx(1), &
2291 decomposition%local%mn(2):decomposition%local%mx(2), &
2292 decomposition%local%mn(3):decomposition%local%mx(3),3)
2293 sll_real64,
intent(in) :: rotation_matrix(3,3)
2294 sll_real64,
intent(in) :: propagation_matrix(3,3)
2295 sll_real64,
intent(in) :: rdelta_x
2296 sll_real64,
intent(inout) :: f6d(&
2297 decomposition%local%mn(1):decomposition%local%mx(1), &
2298 decomposition%local%mn(2):decomposition%local%mx(2), &
2299 decomposition%local%mn(3):decomposition%local%mx(3), &
2300 decomposition%local%mn(4):decomposition%local%mx(4), &
2301 decomposition%local%mn(5):decomposition%local%mx(5), &
2302 decomposition%local%mn(6):decomposition%local%mx(6))
2303 sll_int32,
parameter :: id = 1
2304 sll_int32 :: i,j,k,l,m,n,w,wx, lw
2305 sll_real64,
pointer :: buf_i(:,:)
2306 sll_real64,
pointer :: buf_o(:,:)
2307 sll_real64,
pointer :: displacement(:,:)
2309 sll_int32 :: mn(2), mx(2), mno(2), mxo(2)
2311 sll_int32 :: l_mn, l_mx, c_mn, c_mx, r_mn, r_mx
2312 sll_int32,
pointer :: loop_mn(:), loop_mx(:)
2313 halo_dtype,
pointer :: l_halo(:,:,:,:,:,:)
2314 halo_dtype,
pointer :: r_halo(:,:,:,:,:,:)
2315 sll_real64 :: v_coord(3)
2317 sll_assert_always(decomposition%local%halo_left%nw(id) == decomposition%local%halo_right%nw(id))
2318 sll_assert_always(decomposition%local%halo_left%nw(id) == (self%lagrange_width(1)-1)/2)
2320 l_mn = decomposition%local%halo_left%mn(id)
2321 l_mx = decomposition%local%halo_left%mx(id)
2322 c_mn = decomposition%local%mn(id)
2323 c_mx = decomposition%local%mx(id)
2324 r_mn = decomposition%local%halo_right%mn(id)
2325 r_mx = decomposition%local%halo_right%mx(id)
2326 l_halo => decomposition%local%halo_left%buf
2327 r_halo => decomposition%local%halo_right%buf
2328 loop_mn => decomposition%local%mn
2329 loop_mx => decomposition%local%mx
2332 wx =
get_wx(decomposition, 2)
2333 lw = self%lagrange_width(1)
2347 allocate(buf_i(l_mn:r_mx, 0:wx-1))
2348 allocate(buf_o(c_mn:c_mx, 0:wx-1))
2350 allocate(displacement(c_mn:c_mx, 0:wx-1))
2352 do n=loop_mn(6), loop_mx(6)
2353 do m=loop_mn(5), loop_mx(5)
2354 do l=loop_mn(4), loop_mx(4)
2355 do k=loop_mn(3), loop_mx(3)
2356 #ifndef DISABLE_CACHE_BLOCKING
2357 do j=loop_mn(2), loop_mx(2), wx
2360 buf_i(i,w) = l_halo(i,j+w,k,l,m,n)
2365 buf_i(i,w) = f6d(i,j+w,k,l,m,n)
2370 buf_i(i,w) = r_halo(i,j+w,k,l,m,n)
2380 v_coord(1) = rotation_matrix(1,1) * velocity_grid(4)%vals(l-loop_mn(4)+1) + &
2381 rotation_matrix(1,2) * velocity_grid(5)%vals(m-loop_mn(5)+1) + &
2382 rotation_matrix(1,3) * velocity_grid(6)%vals(n-loop_mn(6)+1) + &
2383 velocity_shift(i,j+w,k,1)
2384 v_coord(2) = rotation_matrix(2,1) * velocity_grid(4)%vals(l-loop_mn(4)+1) + &
2385 rotation_matrix(2,2) * velocity_grid(5)%vals(m-loop_mn(5)+1) + &
2386 rotation_matrix(2,3) * velocity_grid(6)%vals(n-loop_mn(6)+1) + &
2387 velocity_shift(i,j+w,k,2)
2388 v_coord(3) = rotation_matrix(3,1) * velocity_grid(4)%vals(l-loop_mn(4)+1) + &
2389 rotation_matrix(3,2) * velocity_grid(5)%vals(m-loop_mn(5)+1) + &
2390 rotation_matrix(3,3) * velocity_grid(6)%vals(n-loop_mn(6)+1) + &
2391 velocity_shift(i,j+w,k,3)
2393 displacement(i,w) = rdelta_x * ( &
2394 propagation_matrix(1,1) * v_coord(1)+&
2395 propagation_matrix(1,2) * v_coord(2)+&
2396 propagation_matrix(1,3) * v_coord(3) )
2397 if (abs(displacement(i,w))> 1.0_f64 )
then
2398 print*, i,j+w,k,l,m,n, displacement(i,w)
2411 displacement(:,w), &
2417 f6d(i,j+w,k,l,m,n) = buf_o(i,w)
2422 do j=loop_mn(2), loop_mx(2)
2429 buf_i(i,0) = l_halo(i,j,k,l,m,n)
2432 buf_i(i,0) = f6d(i,j,k,l,m,n)
2435 buf_i(i,0) = r_halo(i,j,k,l,m,n)
2440 v_coord(1) = rotation_matrix(1,1) * velocity_grid(4)%vals(l-loop_mn(4)+1) + &
2441 rotation_matrix(1,2) * velocity_grid(5)%vals(m-loop_mn(5)+1) + &
2442 rotation_matrix(1,3) * velocity_grid(6)%vals(n-loop_mn(6)+1) + &
2443 velocity_shift(i,j,k,1)
2444 v_coord(2) = rotation_matrix(2,1) * velocity_grid(4)%vals(l-loop_mn(4)+1) + &
2445 rotation_matrix(2,2) * velocity_grid(5)%vals(m-loop_mn(5)+1) + &
2446 rotation_matrix(2,3) * velocity_grid(6)%vals(n-loop_mn(6)+1) + &
2447 velocity_shift(i,j,k,2)
2448 v_coord(3) = rotation_matrix(3,1) * velocity_grid(4)%vals(l-loop_mn(4)+1) + &
2449 rotation_matrix(3,2) * velocity_grid(5)%vals(m-loop_mn(5)+1) + &
2450 rotation_matrix(3,3) * velocity_grid(6)%vals(n-loop_mn(6)+1) + &
2451 velocity_shift(i,j,k,3)
2453 displacement(i,0) = rdelta_x * ( &
2454 propagation_matrix(1,1) * v_coord(1)+&
2455 propagation_matrix(1,2) * v_coord(2)+&
2456 propagation_matrix(1,3) * v_coord(3) )
2470 f6d(i,j,k,l,m,n) = buf_o(i,0)
2486 deallocate(displacement)
2495 sll_real64,
intent(in) :: velocity_shift(decomposition%local%mn(1):decomposition%local%mx(1), &
2496 decomposition%local%mn(2):decomposition%local%mx(2), &
2497 decomposition%local%mn(3):decomposition%local%mx(3),3)
2498 sll_real64,
intent(in) :: rotation_matrix(3,3)
2499 sll_real64,
intent(in) :: propagation_matrix(3,3)
2500 sll_real64,
intent(in) :: rdelta_x
2501 sll_real64,
intent(inout) :: f6d(&
2502 decomposition%local%mn(1):decomposition%local%mx(1), &
2503 decomposition%local%mn(2):decomposition%local%mx(2), &
2504 decomposition%local%mn(3):decomposition%local%mx(3), &
2505 decomposition%local%mn(4):decomposition%local%mx(4), &
2506 decomposition%local%mn(5):decomposition%local%mx(5), &
2507 decomposition%local%mn(6):decomposition%local%mx(6))
2508 sll_int32,
parameter :: id = 2
2509 sll_int32 :: i,j,k,l,m,n,w,wx, lw
2510 sll_real64,
pointer :: buf_i(:,:)
2511 sll_real64,
pointer :: buf_o(:,:)
2512 sll_real64,
pointer :: displacement(:,:)
2514 sll_int32 :: mn(2), mx(2), mno(2), mxo(2)
2516 sll_int32 :: l_mn, l_mx, c_mn, c_mx, r_mn, r_mx
2517 sll_int32,
pointer :: loop_mn(:), loop_mx(:)
2518 halo_dtype,
pointer :: l_halo(:,:,:,:,:,:)
2519 halo_dtype,
pointer :: r_halo(:,:,:,:,:,:)
2520 sll_real64 :: v_coord(3)
2525 sll_assert_always(decomposition%local%halo_left%nw(id) == decomposition%local%halo_right%nw(id))
2526 sll_assert_always(decomposition%local%halo_left%nw(id) == (self%lagrange_width(1)-1)/2)
2528 l_mn = decomposition%local%halo_left%mn(id)
2529 l_mx = decomposition%local%halo_left%mx(id)
2530 c_mn = decomposition%local%mn(id)
2531 c_mx = decomposition%local%mx(id)
2532 r_mn = decomposition%local%halo_right%mn(id)
2533 r_mx = decomposition%local%halo_right%mx(id)
2534 l_halo => decomposition%local%halo_left%buf
2535 r_halo => decomposition%local%halo_right%buf
2536 loop_mn => decomposition%local%mn
2537 loop_mx => decomposition%local%mx
2538 wx =
get_wx(decomposition)
2539 lw = self%lagrange_width(1)
2553 allocate(buf_i(l_mn:r_mx, 0:wx-1))
2554 allocate(buf_o(c_mn:c_mx, 0:wx-1))
2556 allocate(displacement(c_mn:c_mx, 0:wx-1))
2558 do n=loop_mn(6), loop_mx(6)
2559 do m=loop_mn(5), loop_mx(5)
2560 do l=loop_mn(4), loop_mx(4)
2561 do k=loop_mn(3), loop_mx(3)
2562 #ifndef DISABLE_CACHE_BLOCKING
2563 do i=loop_mn(1), loop_mx(1), wx
2566 buf_i(j,w) = l_halo(i+w,j,k,l,m,n)
2571 buf_i(j,w) = f6d(i+w,j,k,l,m,n)
2576 buf_i(j,w) = r_halo(i+w,j,k,l,m,n)
2582 v_coord(1) = rotation_matrix(1,1) * velocity_grid(4)%vals(l-loop_mn(4)+1) + &
2583 rotation_matrix(1,2) * velocity_grid(5)%vals(m-loop_mn(5)+1) + &
2584 rotation_matrix(1,3) * velocity_grid(6)%vals(n-loop_mn(6)+1) + &
2585 velocity_shift(i+w,j,k,1)
2586 v_coord(2) = rotation_matrix(2,1) * velocity_grid(4)%vals(l-loop_mn(4)+1) + &
2587 rotation_matrix(2,2) * velocity_grid(5)%vals(m-loop_mn(5)+1) + &
2588 rotation_matrix(2,3) * velocity_grid(6)%vals(n-loop_mn(6)+1) + &
2589 velocity_shift(i+w,j,k,2)
2590 v_coord(3) = rotation_matrix(3,1) * velocity_grid(4)%vals(l-loop_mn(4)+1) + &
2591 rotation_matrix(3,2) * velocity_grid(5)%vals(m-loop_mn(5)+1) + &
2592 rotation_matrix(3,3) * velocity_grid(6)%vals(n-loop_mn(6)+1) + &
2593 velocity_shift(i+w,j,k,3)
2595 displacement(j,w) = rdelta_x * ( &
2596 propagation_matrix(2,1) * v_coord(1)+&
2597 propagation_matrix(2,2) * v_coord(2)+&
2598 propagation_matrix(2,3) * v_coord(3) )
2599 if (abs(displacement(j,w))> 1.0_f64 )
then
2600 print*, i+w,j,k,l,m,n, displacement(j,w)
2611 displacement(:,w), &
2617 f6d(i+w,j,k,l,m,n) = buf_o(j,w)
2622 do i=loop_mn(1), loop_mx(1)
2628 buf_i(j,0) = l_halo(i,j,k,l,m,n)
2631 buf_i(j,0) = f6d(i,j,k,l,m,n)
2634 buf_i(j,0) = r_halo(i,j,k,l,m,n)
2638 v_coord(1) = rotation_matrix(1,1) * velocity_grid(4)%vals(l-loop_mn(4)+1) + &
2639 rotation_matrix(1,2) * velocity_grid(5)%vals(m-loop_mn(5)+1) + &
2640 rotation_matrix(1,3) * velocity_grid(6)%vals(n-loop_mn(6)+1) + &
2641 velocity_shift(i,j,k,1)
2642 v_coord(2) = rotation_matrix(2,1) * velocity_grid(4)%vals(l-loop_mn(4)+1) + &
2643 rotation_matrix(2,2) * velocity_grid(5)%vals(m-loop_mn(5)+1) + &
2644 rotation_matrix(2,3) * velocity_grid(6)%vals(n-loop_mn(6)+1) + &
2645 velocity_shift(i,j,k,2)
2646 v_coord(3) = rotation_matrix(3,1) * velocity_grid(4)%vals(l-loop_mn(4)+1) + &
2647 rotation_matrix(3,2) * velocity_grid(5)%vals(m-loop_mn(5)+1) + &
2648 rotation_matrix(3,3) * velocity_grid(6)%vals(n-loop_mn(6)+1) + &
2649 velocity_shift(i,j,k,3)
2651 displacement(j,0) = rdelta_x * ( &
2652 propagation_matrix(2,1) * v_coord(1)+&
2653 propagation_matrix(2,2) * v_coord(2)+&
2654 propagation_matrix(2,3) * v_coord(3) )
2661 displacement(:,0), &
2666 f6d(i,j,k,l,m,n) = buf_o(j,0)
2682 deallocate(displacement)
2691 sll_real64,
intent(in) :: velocity_shift(decomposition%local%mn(1):decomposition%local%mx(1), &
2692 decomposition%local%mn(2):decomposition%local%mx(2), &
2693 decomposition%local%mn(3):decomposition%local%mx(3),3)
2694 sll_real64,
intent(in) :: rotation_matrix(3,3)
2695 sll_real64,
intent(in) :: propagation_matrix(3,3)
2696 sll_real64,
intent(in) :: rdelta_x
2697 sll_real64,
intent(inout) :: f6d(&
2698 decomposition%local%mn(1):decomposition%local%mx(1), &
2699 decomposition%local%mn(2):decomposition%local%mx(2), &
2700 decomposition%local%mn(3):decomposition%local%mx(3), &
2701 decomposition%local%mn(4):decomposition%local%mx(4), &
2702 decomposition%local%mn(5):decomposition%local%mx(5), &
2703 decomposition%local%mn(6):decomposition%local%mx(6))
2705 sll_int32,
parameter :: id = 3
2706 sll_int32 :: i,j,k,l,m,n,w,wx, lw
2707 sll_real64,
pointer :: buf_i(:,:)
2708 sll_real64,
pointer :: buf_o(:,:)
2709 sll_real64,
pointer :: displacement(:,:)
2711 sll_int32 :: mn(2), mx(2), mno(2), mxo(2)
2713 sll_int32 :: l_mn, l_mx, c_mn, c_mx, r_mn, r_mx
2714 sll_int32,
pointer :: loop_mn(:), loop_mx(:)
2715 halo_dtype,
pointer :: l_halo(:,:,:,:,:,:)
2716 halo_dtype,
pointer :: r_halo(:,:,:,:,:,:)
2717 sll_real64 :: v_coord(3)
2722 sll_assert_always(decomposition%local%halo_left%nw(id) == decomposition%local%halo_right%nw(id))
2723 sll_assert_always(decomposition%local%halo_left%nw(id) == (self%lagrange_width(1)-1)/2)
2725 l_mn = decomposition%local%halo_left%mn(id)
2726 l_mx = decomposition%local%halo_left%mx(id)
2727 c_mn = decomposition%local%mn(id)
2728 c_mx = decomposition%local%mx(id)
2729 r_mn = decomposition%local%halo_right%mn(id)
2730 r_mx = decomposition%local%halo_right%mx(id)
2731 l_halo => decomposition%local%halo_left%buf
2732 r_halo => decomposition%local%halo_right%buf
2733 loop_mn => decomposition%local%mn
2734 loop_mx => decomposition%local%mx
2735 wx =
get_wx(decomposition)
2736 lw = self%lagrange_width(1)
2750 allocate(buf_i(l_mn:r_mx, 0:wx-1))
2751 allocate(buf_o(c_mn:c_mx, 0:wx-1))
2753 allocate(displacement(c_mn:c_mx, 0:wx-1))
2755 do n=loop_mn(6), loop_mx(6)
2756 do m=loop_mn(5), loop_mx(5)
2757 do l=loop_mn(4), loop_mx(4)
2758 do j=loop_mn(2), loop_mx(2)
2759 #ifndef DISABLE_CACHE_BLOCKING
2760 do i=loop_mn(1), loop_mx(1), wx
2763 buf_i(k,w) = l_halo(i+w,j,k,l,m,n)
2768 buf_i(k,w) = f6d(i+w,j,k,l,m,n)
2773 buf_i(k,w) = r_halo(i+w,j,k,l,m,n)
2779 v_coord(1) = rotation_matrix(1,1) * velocity_grid(4)%vals(l-loop_mn(4)+1) + &
2780 rotation_matrix(1,2) * velocity_grid(5)%vals(m-loop_mn(5)+1) + &
2781 rotation_matrix(1,3) * velocity_grid(6)%vals(n-loop_mn(6)+1) + &
2782 velocity_shift(i+w,j,k,1)
2783 v_coord(2) = rotation_matrix(2,1) * velocity_grid(4)%vals(l-loop_mn(4)+1) + &
2784 rotation_matrix(2,2) * velocity_grid(5)%vals(m-loop_mn(5)+1) + &
2785 rotation_matrix(2,3) * velocity_grid(6)%vals(n-loop_mn(6)+1) + &
2786 velocity_shift(i+w,j,k,2)
2787 v_coord(3) = rotation_matrix(3,1) * velocity_grid(4)%vals(l-loop_mn(4)+1) + &
2788 rotation_matrix(3,2) * velocity_grid(5)%vals(m-loop_mn(5)+1) + &
2789 rotation_matrix(3,3) * velocity_grid(6)%vals(n-loop_mn(6)+1) + &
2790 velocity_shift(i+w,j,k,3)
2792 displacement(k,w) = rdelta_x * ( &
2793 propagation_matrix(3,1) * v_coord(1)+&
2794 propagation_matrix(3,2) * v_coord(2)+&
2795 propagation_matrix(3,3) * v_coord(3) )
2803 displacement(:,w), &
2809 f6d(i+w,j,k,l,m,n) = buf_o(k,w)
2814 do i=loop_mn(1), loop_mx(1)
2820 buf_i(k,0) = l_halo(i,j,k,l,m,n)
2823 buf_i(k,0) = f6d(i,j,k,l,m,n)
2826 buf_i(k,0) = r_halo(i,j,k,l,m,n)
2830 v_coord(1) = rotation_matrix(1,1) * velocity_grid(4)%vals(l-loop_mn(4)+1) + &
2831 rotation_matrix(1,2) * velocity_grid(5)%vals(m-loop_mn(5)+1) + &
2832 rotation_matrix(1,3) * velocity_grid(6)%vals(n-loop_mn(6)+1) + &
2833 velocity_shift(i,j,k,1)
2834 v_coord(2) = rotation_matrix(2,1) * velocity_grid(4)%vals(l-loop_mn(4)+1) + &
2835 rotation_matrix(2,2) * velocity_grid(5)%vals(m-loop_mn(5)+1) + &
2836 rotation_matrix(2,3) * velocity_grid(6)%vals(n-loop_mn(6)+1) + &
2837 velocity_shift(i,j,k,2)
2838 v_coord(3) = rotation_matrix(3,1) * velocity_grid(4)%vals(l-loop_mn(4)+1) + &
2839 rotation_matrix(3,2) * velocity_grid(5)%vals(m-loop_mn(5)+1) + &
2840 rotation_matrix(3,3) * velocity_grid(6)%vals(n-loop_mn(6)+1) + &
2841 velocity_shift(i,j,k,3)
2843 displacement(k,0) = rdelta_x * ( &
2844 propagation_matrix(3,1) * v_coord(1)+&
2845 propagation_matrix(3,2) * v_coord(2)+&
2846 propagation_matrix(3,3) * v_coord(3) )
2852 displacement(:,0), &
2857 f6d(i,j,k,l,m,n) = buf_o(k,0)
2873 deallocate(displacement)
Plain Fortran implementation of a memory pool.
Module implementing Lagrange advection for the setting of a domain decomposition in 6d with extra buf...
subroutine, public sll_s_advection_6d_lagrange_dd_slim_advect_eta1(self, decomposition, displacement, f6d)
Advection along eta1 with displacement dependent on eta4.
subroutine, public sll_s_advection_6d_lagrange_dd_slim_advect_eta1_givenv(self, decomposition, rdelta_x, velocity_grid, velocity_shift, rotation_matrix, propagation_matrix, f6d)
Advection along eta1 with displacement dependent on eta45 (fixed interval Lagrange interpolation )
subroutine sll_s_advection_6d_lagrange_dd_slim_advect_eta2_core(self, decomposition, eta5_cut, displacement, f6d)
Advection along eta2 with displacement dependent on eta5.
subroutine, public sll_s_advection_6d_lagrange_dd_slim_set_eta123(self, decomposition, displacement_eta1, displacement_eta2, displacement_eta3)
subroutine, public sll_s_advection_6d_lagrange_dd_slim_advect_eta3(self, decomposition, displacement, f6d)
Advection along eta3 with displacement dependent on eta6.
subroutine, public sll_s_advection_6d_lagrange_dd_slim_advect_eta2(self, decomposition, displacement, f6d)
Advection along eta2 with displacement dependent on eta5.
subroutine make_blocks_lagrange(ind, stencil, decomposition, disp, halo_blocks, halo_width, n_halo_blocks)
Helper function to calculate the communication blocks for the Lagrange interpolation.
subroutine sll_s_advection_6d_lagrange_dd_slim_advect_eta1_core(self, decomposition, eta4_cut, displacement, f6d)
Advection along eta1 with displacement dependent on eta4.
subroutine, public sll_s_advection_6d_clagrange_dd_slim_advect_eta2_d45(self, decomposition, displacement, f6d)
Advection along eta2 with displacement dependent on eta4-5.
subroutine, public sll_s_advection_6d_lagrange_dd_slim_advect_eta2_givenv(self, decomposition, rdelta_x, velocity_grid, velocity_shift, rotation_matrix, propagation_matrix, f6d)
Advection along eta2 with displacement dependent on eta45.
subroutine, public sll_s_advection_6d_lagrange_dd_slim_advect_eta5(self, decomposition, displacement, f6d)
Advection along eta5 with displacement dependent on eta1-3.
subroutine, public sll_s_advection_6d_lagrange_dd_slim_fadvect_eta3(self, topology, decomposition, f6d)
Advection along eta3 with displacement dependent on eta6.
subroutine, public sll_s_advection_6d_lagrange_dd_slim_init(self, lagrange_width)
subroutine, public sll_s_advection_6d_lagrange_dd_slim_advect_eta2_dispeta45(self, decomposition, displacement, f6d)
Advection along eta2 with displacement dependent on eta45.
subroutine, public sll_s_advection_6d_lagrange_dd_slim_advect_eta1_dispeta45(self, decomposition, displacement, f6d)
Advection along eta1 with displacement dependent on eta45.
subroutine, public sll_s_advection_6d_lagrange_dd_slim_advect_eta6(self, decomposition, displacement, f6d)
Advection along eta6 with displacement dependent on eta1-3.
subroutine, public sll_s_advection_6d_lagrange_dd_slim_fadvect_eta1(self, topology, decomposition, f6d)
Advection along eta1 with displacement dependent on eta4.
subroutine sll_s_advection_6d_lagrange_dd_slim_advect_eta3_core(self, decomposition, eta6_cut, displacement, f6d)
Advection along eta3 with displacement dependent on eta6.
subroutine, public sll_s_advection_6d_lagrange_dd_slim_free(self)
subroutine, public sll_s_advection_6d_lagrange_dd_slim_advect_eta4(self, decomposition, displacement, f6d)
Advection along eta4 with displacement dependent on eta1-3.
subroutine, public sll_s_advection_6d_lagrange_dd_slim_fadvect_eta2(self, topology, decomposition, f6d)
Advection along eta2 with displacement dependent on eta5.
subroutine, public sll_s_advection_6d_clagrange_dd_slim_advect_eta1_d45(self, decomposition, displacement, f6d)
Advection along eta1 with displacement dependent on eta4-5.
subroutine, public sll_s_advection_6d_lagrange_dd_slim_advect_eta3_givenv(self, decomposition, rdelta_x, velocity_grid, velocity_shift, rotation_matrix, propagation_matrix, f6d)
Advection along eta3 with displacement dependent on eta45.
integer(kind=i32) function get_wx(decomposition, id_in)
Fortran module where set some physical and mathematical constants.
real(kind=f64), parameter, public sll_p_twopi
Module providing data structures and tools to implement domain decompositions.
subroutine, public sll_s_apply_bc_exchange_slim_6d_real64(topo, decomp, id)
subroutine, public sll_s_deallocate_bc_buffers(decomp)
subroutine, public sll_s_allocate_bc_buffers_6d(decomp, id)
subroutine, public sll_f_apply_halo_exchange_slim_6d_real64(topo, decomp, arr, id, hw_left, hw_right)
subroutine, public sll_s_apply_halo_exchange_slim_6d_real64(topo, decomp, arr, id, hw_left, hw_right, halo_block)
subroutine, public sll_s_allocate_bc_buffers_6d_part(decomp, id, idx_mn, idx_mx)
Data types that collect the parameters for various types of initial distributions and define the corr...
Module for 1D interpolation and reconstruction.
Module for 1D Lagrange interpolation on a uniform grid (only odd order)
subroutine, public sll_s_lagrange_interpolation_1d_fast_disp_even_halo_cells(fi, fp, p, stencil)
Even Lagrange interpolation with halo cells and no interval shift, i.e. p must be between zero and on...
subroutine, public sll_s_lagrange_interpolation_1d_fast_disp_fixed_haloc_cells(fi, fp, p, stencil)
Lagrange interpolation with halo cell boundaries, where the input array already contains halo cells....
subroutine, public sll_s_lagrange_interpolation_1d_fast_disp_centered_halo_cells(fi, fp, p, stencil)
subroutine, public sll_s_lagrange_interpolation_1d_fast_haloc_cells(fi, fp, p, stencil, index_shift)
Lagrange interpolation with halo cell boundaries, where the input array already contains halo cells....
Interpolator class and methods of Lagrange 1D interpolator.
integer(kind=i32), parameter, public sll_p_lagrange_fixed
Flag to specify Lagrange interpolation on a fixed interval centered around the point that is displace...
integer(kind=i32), parameter, public sll_p_lagrange_centered
Flag to specify Lagrange interpolation centered around the interpolation point.
Information on the 6D cartesian process topology.
6D decomposition, slim redesign, global array size information and local information.
Abstract class for 1D interpolation and reconstruction.