module pmgrid integer myidxy_y ! subdomain index (0 based) in latitude (y) (second. decomp.) integer nprxy_y ! number of subdomains in y (second. decomp.) integer beglatxy ! beg. index for latitudes (second. decomp.) integer endlatxy ! end. index for latitudes (second. decomp.) end module pmgrid!BOP program spmd_dyn ! ! !MODULE: Subroutines to initialize SPMD implementation of CAM ! ! ! !USES: use pmgrid, only: myidxy_y, nprxy_y, & beglatxy, endlatxy implicit none integer, allocatable :: latrangexy(:,:) ! global xy-latitude subdomain index !----------------------------------------------------------------------- !BOC ! !LOCAL VARIABLES: integer procid ! processor id integer, allocatable :: ydistxy(:) ! number of xy-lats per subdomain integer iam myidxy_y=11 allocate(ydistxy(myidxy_y+1)) ydistxy=3 ! Compute local limits beglatxy = 1 endlatxy = ydistxy(1) do procid = 1, myidxy_y beglatxy = endlatxy + 1 endlatxy = beglatxy + ydistxy(procid+1) - 1 enddo print*,'beglatxy=',beglatxy print*,'Correct answer should be=',sum(ydistxy(1:myidxy_y))+1 ! Compute global table nprxy_y=5 allocate (latrangexy(2,nprxy_y)) latrangexy(1,1) = 1 latrangexy(2,1) = ydistxy(1) do procid = 2, nprxy_y latrangexy(1,procid) = latrangexy(2,procid-1) + 1 latrangexy(2,procid) = latrangexy(1,procid) + ydistxy(procid) - 1 enddo !EOC end program spmd_dyn