Skip to content

Commit 1592382

Browse files
committed
refac(laplacian): add locality specifiers
1 parent 136c163 commit 1592382

1 file changed

Lines changed: 28 additions & 20 deletions

File tree

src/matcha/subdomain_s.F90

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -82,46 +82,54 @@
8282
end procedure
8383

8484
module procedure laplacian
85-
86-
integer i, j, k
85+
integer i, j, k;
8786
real, allocatable :: halo_west(:,:), halo_east(:,:)
8887

8988
call_assert(allocated(rhs%s_))
9089
call_assert(allocated(halo_x))
9190

9291
allocate(laplacian_rhs%s_(my_nx, ny, nz))
93-
9492
halo_west = merge(halo_x(west,:,:), rhs%s_(1,:,:), me/=1)
9593
i = my_internal_west
9694
call_assert_describe(i+1<=my_nx, "laplacian: westernmost subdomain too small")
97-
do concurrent(j=2:ny-1, k=2:nz-1)
98-
laplacian_rhs%s_(i,j,k) = ( halo_west(j,k ) - 2*rhs%s_(i,j,k) + rhs%s_(i+1,j ,k ))/dx_**2 + &
99-
(rhs%s_(i,j-1,k ) - 2*rhs%s_(i,j,k) + rhs%s_(i ,j+1,k ))/dy_**2 + &
100-
(rhs%s_(i,j ,k-1) - 2*rhs%s_(i,j,k) + rhs%s_(i ,j ,k+1))/dz_**2
101-
end do
102-
103-
do concurrent(i=my_internal_west+1:my_internal_east-1, j=2:ny-1, k=2:nz-1)
104-
laplacian_rhs%s_(i,j,k) = (rhs%s_(i-1,j ,k ) - 2*rhs%s_(i,j,k) + rhs%s_(i+1,j ,k ))/dx_**2 + &
105-
(rhs%s_(i ,j-1,k ) - 2*rhs%s_(i,j,k) + rhs%s_(i ,j+1,k ))/dy_**2 + &
106-
(rhs%s_(i ,j ,k-1) - 2*rhs%s_(i,j,k) + rhs%s_(i ,j ,k+1))/dz_**2
107-
end do
95+
96+
associate( laplacian_phi => laplacian_rhs%s_, inbox => halo_west, phi=>rhs%s_)
97+
do concurrent(j=2:ny-1, k=2:nz-1) &
98+
default(none) shared(laplacian_phi, inbox, phi, dx_, dy_, dz_, i)
99+
laplacian_phi(i,j,k) = (inbox(j,k ) - 2*phi(i,j,k) + phi(i+1,j ,k ))/dx_**2 + &
100+
(phi(i,j-1,k ) - 2*phi(i,j,k) + phi(i ,j+1,k ))/dy_**2 + &
101+
(phi(i,j ,k-1) - 2*phi(i,j,k) + phi(i ,j ,k+1))/dz_**2
102+
end do
103+
end associate
104+
105+
associate(laplacian_phi => laplacian_rhs%s_, phi=>rhs%s_)
106+
do concurrent(i=my_internal_west+1:my_internal_east-1, j=2:ny-1, k=2:nz-1) &
107+
default(none) shared(laplacian_phi, phi, dx_, dy_, dz_)
108+
laplacian_phi(i,j,k) = (phi(i-1,j ,k ) - 2*phi(i,j,k) + phi(i+1,j ,k ))/dx_**2 + &
109+
(phi(i ,j-1,k ) - 2*phi(i,j,k) + phi(i ,j+1,k ))/dy_**2 + &
110+
(phi(i ,j ,k-1) - 2*phi(i,j,k) + phi(i ,j ,k+1))/dz_**2
111+
end do
112+
end associate
108113

109114
halo_east = merge(halo_x(east,:,:), rhs%s_(my_nx,:,:), me/=num_subdomains)
110115
i = my_internal_east
111116
call_assert_describe(i-1>0, "laplacian: easternmost subdomain too small")
112-
do concurrent(j=2:ny-1, k=2:nz-1)
113-
laplacian_rhs%s_(i,j,k) = (rhs%s_(i-1,j ,k ) - 2*rhs%s_(i,j,k) + halo_east(j ,k ))/dx_**2 + &
114-
(rhs%s_(i ,j-1,k ) - 2*rhs%s_(i,j,k) + rhs%s_(i ,j+1,k ))/dy_**2 + &
115-
(rhs%s_(i ,j ,k-1) - 2*rhs%s_(i,j,k) + rhs%s_(i ,j ,k+1))/dz_**2
116-
end do
117+
118+
associate(laplacian_phi => laplacian_rhs%s_, inbox => halo_east, phi=>rhs%s_)
119+
do concurrent(j=2:ny-1, k=2:nz-1) &
120+
default(none) shared(laplacian_phi, inbox, phi, dx_, dy_, dz_, i)
121+
laplacian_phi(i,j,k) = (phi(i-1,j ,k ) - 2*phi(i,j,k) + inbox( j ,k ))/dx_**2 + &
122+
(phi(i ,j-1,k ) - 2*phi(i,j,k) + phi(i ,j+1,k ))/dy_**2 + &
123+
(phi(i ,j ,k-1) - 2*phi(i,j,k) + phi(i ,j ,k+1))/dz_**2
124+
end do
125+
end associate
117126

118127
laplacian_rhs%s_(:, 1,:) = 0.
119128
laplacian_rhs%s_(:,ny,:) = 0.
120129
laplacian_rhs%s_(:,:, 1) = 0.
121130
laplacian_rhs%s_(:,:,nz) = 0.
122131
if (me==1) laplacian_rhs%s_(1,:,:) = 0.
123132
if (me==num_subdomains) laplacian_rhs%s_(my_nx,:,:) = 0.
124-
125133
end procedure
126134

127135
module procedure multiply

0 commit comments

Comments
 (0)