Changeset 12586 for NEMO/branches/2020/dev_r12558_HPC-08_epico_Extra_Halo/src/OCE/LBC/mpp_lnk_generic.h90
- Timestamp:
- 2020-03-23T13:14:40+01:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2020/dev_r12558_HPC-08_epico_Extra_Halo/src/OCE/LBC/mpp_lnk_generic.h90
r11536 r12586 46 46 47 47 #if defined MULTI 48 SUBROUTINE ROUTINE_LNK( cdname, ptab, cd_nat, psgn, kfld, kfillmode, pfillval, lsend, lrecv , ihlcom)48 SUBROUTINE ROUTINE_LNK( cdname, ptab, cd_nat, psgn, kfld, kfillmode, pfillval, lsend, lrecv ) 49 49 INTEGER , INTENT(in ) :: kfld ! number of pt3d arrays 50 50 #else 51 SUBROUTINE ROUTINE_LNK( cdname, ptab, cd_nat, psgn , kfillmode, pfillval, lsend, lrecv , ihlcom)51 SUBROUTINE ROUTINE_LNK( cdname, ptab, cd_nat, psgn , kfillmode, pfillval, lsend, lrecv ) 52 52 #endif 53 ARRAY_TYPE( :,:,:,:,:) ! array or pointer of arrays on which the boundary condition is applied53 ARRAY_TYPE(1-nn_hls+1:,1-nn_hls+1:,:,:,:) ! array or pointer of arrays on which the boundary condition is applied 54 54 CHARACTER(len=*) , INTENT(in ) :: cdname ! name of the calling subroutine 55 55 CHARACTER(len=1) , INTENT(in ) :: NAT_IN(:) ! nature of array grid-points … … 58 58 REAL(wp), OPTIONAL, INTENT(in ) :: pfillval ! background value (used at closed boundaries) 59 59 LOGICAL, DIMENSION(4),OPTIONAL, INTENT(in ) :: lsend, lrecv ! communication with other 4 proc 60 INTEGER ,OPTIONAL, INTENT(in ) :: ihlcom ! number of ranks and rows to be communicated61 60 ! 62 61 INTEGER :: ji, jj, jk, jl, jf ! dummy loop indices … … 66 65 INTEGER :: ierr 67 66 INTEGER :: ifill_we, ifill_ea, ifill_so, ifill_no 68 INTEGER :: ihl ! number of ranks and rows to be communicated69 67 REAL(wp) :: zland 70 68 INTEGER , DIMENSION(MPI_STATUS_SIZE) :: istat ! for mpi_isend … … 83 81 ipl = L_SIZE(ptab) ! 4th - 84 82 ipf = F_SIZE(ptab) ! 5th - use in "multi" case (array of pointers) 85 !86 IF( PRESENT(ihlcom) ) THEN ; ihl = ihlcom87 ELSE ; ihl = 188 END IF89 83 ! 90 84 IF( narea == 1 .AND. numcom == -1 ) CALL mpp_report( cdname, ipk, ipl, ipf, ld_lbc = .TRUE. ) … … 148 142 ! -------------------------------------------------- ! 149 143 ! 144 150 145 ! Must exchange the whole column (from 1 to jpj) to get the corners if we have no south/north neighbourg 151 isize = ihl * jpj* ipk * ipl * ipf146 isize = nn_hls * ( jpj + nn_hls - 1 ) * ipk * ipl * ipf 152 147 ! 153 148 ! Allocate local temporary arrays to be sent/received. Fill arrays to be sent 154 IF( llsend_we ) ALLOCATE( zsnd_we( ihl,jpj,ipk,ipl,ipf) )155 IF( llsend_ea ) ALLOCATE( zsnd_ea( ihl,jpj,ipk,ipl,ipf) )156 IF( llrecv_we ) ALLOCATE( zrcv_we( ihl,jpj,ipk,ipl,ipf) )157 IF( llrecv_ea ) ALLOCATE( zrcv_ea( ihl,jpj,ipk,ipl,ipf) )149 IF( llsend_we ) ALLOCATE( zsnd_we(nn_hls,1-nn_hls+1:jpj,ipk,ipl,ipf) ) 150 IF( llsend_ea ) ALLOCATE( zsnd_ea(nn_hls,1-nn_hls+1:jpj,ipk,ipl,ipf) ) 151 IF( llrecv_we ) ALLOCATE( zrcv_we(nn_hls,1-nn_hls+1:jpj,ipk,ipl,ipf) ) 152 IF( llrecv_ea ) ALLOCATE( zrcv_ea(nn_hls,1-nn_hls+1:jpj,ipk,ipl,ipf) ) 158 153 ! 159 154 IF( llsend_we ) THEN ! copy western side of the inner mpi domain in local temporary array to be sent by MPI 160 ishift = ihl161 DO jf = 1, ipf ; DO jl = 1, ipl ; DO jk = 1, ipk ; DO jj = 1 , jpj ; DO ji = 1, ihl162 zsnd_we(ji,jj,jk,jl,jf) = ARRAY_IN(ishift+ji,jj,jk,jl,jf) ! ihl + 1 -> 2*ihl163 END DO ; END DO ; END DO ; END DO ; END DO 164 ENDIF 165 ! 166 IF( llsend_ea) THEN ! copy eastern side of the inner mpi domain in local temporary array to be sent by MPI167 ishift = jpi - 2 * ihl168 DO jf = 1, ipf ; DO jl = 1, ipl ; DO jk = 1, ipk ; DO jj = 1 , jpj ; DO ji = 1, ihl169 zsnd_ea(ji,jj,jk,jl,jf) = ARRAY_IN(ishift+ji,jj,jk,jl,jf) ! jpi - 2* ihl + 1 -> jpi - ihl155 ishift = 1 156 DO jf = 1, ipf ; DO jl = 1, ipl ; DO jk = 1, ipk ; DO jj = 1-nn_hls+1, jpj ; DO ji = 1, nn_hls 157 zsnd_we(ji,jj,jk,jl,jf) = ARRAY_IN(ishift+ji,jj,jk,jl,jf) ! nn_hls + 1 -> 2*nn_hls 158 END DO ; END DO ; END DO ; END DO ; END DO 159 ENDIF 160 ! 161 IF( llsend_ea ) THEN ! copy eastern side of the inner mpi domain in local temporary array to be sent by MPI 162 ishift = jpi - 2 * nn_hls 163 DO jf = 1, ipf ; DO jl = 1, ipl ; DO jk = 1, ipk ; DO jj = 1-nn_hls+1, jpj ; DO ji = 1, nn_hls 164 zsnd_ea(ji,jj,jk,jl,jf) = ARRAY_IN(ishift+ji,jj,jk,jl,jf) ! jpi - 2*nn_hls + 1 -> jpi - nn_hls 170 165 END DO ; END DO ; END DO ; END DO ; END DO 171 166 ENDIF … … 174 169 ! 175 170 ! non-blocking send of the western/eastern side using local temporary arrays 176 IF( llsend_we ) CALL mppsend( 1, zsnd_we(1,1 ,1,1,1), isize, nowe, ireq_we )177 IF( llsend_ea ) CALL mppsend( 2, zsnd_ea(1,1 ,1,1,1), isize, noea, ireq_ea )171 IF( llsend_we ) CALL mppsend( 1, zsnd_we(1,1-nn_hls+1,1,1,1), isize, nowe, ireq_we ) 172 IF( llsend_ea ) CALL mppsend( 2, zsnd_ea(1,1-nn_hls+1,1,1,1), isize, noea, ireq_ea ) 178 173 ! blocking receive of the western/eastern halo in local temporary arrays 179 IF( llrecv_we ) CALL mpprecv( 2, zrcv_we(1,1 ,1,1,1), isize, nowe )180 IF( llrecv_ea ) CALL mpprecv( 1, zrcv_ea(1,1 ,1,1,1), isize, noea )174 IF( llrecv_we ) CALL mpprecv( 2, zrcv_we(1,1-nn_hls+1,1,1,1), isize, nowe ) 175 IF( llrecv_ea ) CALL mpprecv( 1, zrcv_ea(1,1-nn_hls+1,1,1,1), isize, noea ) 181 176 ! 182 177 IF( ln_timing ) CALL tic_tac(.FALSE.) … … 189 184 ! 2.1 fill weastern halo 190 185 ! ---------------------- 191 ! ishift = 0 ! fill halo from ji = 1 to ihl186 ! ishift = 0 ! fill halo from ji = 1 to nn_hls 192 187 SELECT CASE ( ifill_we ) 193 188 CASE ( jpfillnothing ) ! no filling 194 189 CASE ( jpfillmpi ) ! use data received by MPI 195 DO jf = 1, ipf ; DO jl = 1, ipl ; DO jk = 1, ipk ; DO jj = 1 , jpj ; DO ji = 1, ihl196 ARRAY_IN(ji ,jj,jk,jl,jf) = zrcv_we(ji,jj,jk,jl,jf) ! 1 -> ihl190 DO jf = 1, ipf ; DO jl = 1, ipl ; DO jk = 1, ipk ; DO jj = 1-nn_hls+1, jpj ; DO ji = 1, nn_hls 191 ARRAY_IN(ji-nn_hls+1,jj,jk,jl,jf) = zrcv_we(ji,jj,jk,jl,jf) ! 1 -> nn_hls 197 192 END DO; END DO ; END DO ; END DO ; END DO 198 193 CASE ( jpfillperio ) ! use east-weast periodicity 199 ishift2 = jpi - 2 * ihl200 DO jf = 1, ipf ; DO jl = 1, ipl ; DO jk = 1, ipk ; DO jj = 1 , jpj ; DO ji = 1, ihl201 ARRAY_IN(ji ,jj,jk,jl,jf) = ARRAY_IN(ishift2+ji,jj,jk,jl,jf)194 ishift2 = jpi - 2 * nn_hls 195 DO jf = 1, ipf ; DO jl = 1, ipl ; DO jk = 1, ipk ; DO jj = 1-nn_hls+1, jpj ; DO ji = 1, nn_hls 196 ARRAY_IN(ji-nn_hls+1,jj,jk,jl,jf) = ARRAY_IN(ishift2+ji,jj,jk,jl,jf) 202 197 END DO; END DO ; END DO ; END DO ; END DO 203 198 CASE ( jpfillcopy ) ! filling with inner domain values 204 199 DO jf = 1, ipf ! number of arrays to be treated 205 200 IF( .NOT. NAT_IN(jf) == 'F' ) THEN ! do nothing for F point 206 DO jl = 1, ipl ; DO jk = 1, ipk ; DO jj = 1 , jpj ; DO ji = 1, ihl207 ARRAY_IN(ji ,jj,jk,jl,jf) = ARRAY_IN(ihl+1,jj,jk,jl,jf)201 DO jl = 1, ipl ; DO jk = 1, ipk ; DO jj = 1-nn_hls+1, jpj ; DO ji = 1, nn_hls 202 ARRAY_IN(ji-nn_hls+1,jj,jk,jl,jf) = ARRAY_IN(1+ji,jj,jk,jl,jf) 208 203 END DO ; END DO ; END DO ; END DO 209 204 ENDIF … … 212 207 DO jf = 1, ipf ! number of arrays to be treated 213 208 IF( .NOT. NAT_IN(jf) == 'F' ) THEN ! do nothing for F point 214 DO jl = 1, ipl ; DO jk = 1, ipk ; DO jj = 1 , jpj ; DO ji = 1, ihl215 ARRAY_IN(ji ,jj,jk,jl,jf) = zland209 DO jl = 1, ipl ; DO jk = 1, ipk ; DO jj = 1-nn_hls+1, jpj ; DO ji = 1, nn_hls 210 ARRAY_IN(ji-nn_hls+1,jj,jk,jl,jf) = zland 216 211 END DO; END DO ; END DO ; END DO 217 212 ENDIF … … 221 216 ! 2.2 fill eastern halo 222 217 ! --------------------- 223 ishift = jpi - ihl ! fill halo from ji = jpi-ihl+1 to jpi218 ishift = jpi - nn_hls ! fill halo from ji = jpi-nn_hls+1 to jpi 224 219 SELECT CASE ( ifill_ea ) 225 220 CASE ( jpfillnothing ) ! no filling 226 221 CASE ( jpfillmpi ) ! use data received by MPI 227 DO jf = 1, ipf ; DO jl = 1, ipl ; DO jk = 1, ipk ; DO jj = 1 , jpj ; DO ji = 1, ihl228 ARRAY_IN(ishift+ji,jj,jk,jl,jf) = zrcv_ea(ji,jj,jk,jl,jf) ! jpi - ihl+ 1 -> jpi222 DO jf = 1, ipf ; DO jl = 1, ipl ; DO jk = 1, ipk ; DO jj = 1-nn_hls+1, jpj ; DO ji = 1, nn_hls 223 ARRAY_IN(ishift+ji,jj,jk,jl,jf) = zrcv_ea(ji,jj,jk,jl,jf) ! jpi - nn_hls + 1 -> jpi 229 224 END DO ; END DO ; END DO ; END DO ; END DO 230 225 CASE ( jpfillperio ) ! use east-weast periodicity 231 ishift2 = ihl232 DO jf = 1, ipf ; DO jl = 1, ipl ; DO jk = 1, ipk ; DO jj = 1 , jpj ; DO ji = 1, ihl226 ishift2 = 1 227 DO jf = 1, ipf ; DO jl = 1, ipl ; DO jk = 1, ipk ; DO jj = 1-nn_hls+1, jpj ; DO ji = 1, nn_hls 233 228 ARRAY_IN(ishift+ji,jj,jk,jl,jf) = ARRAY_IN(ishift2+ji,jj,jk,jl,jf) 234 229 END DO ; END DO ; END DO ; END DO ; END DO 235 230 CASE ( jpfillcopy ) ! filling with inner domain values 236 DO jf = 1, ipf ; DO jl = 1, ipl ; DO jk = 1, ipk ; DO jj = 1, jpj ; DO ji = 1, ihl 237 ARRAY_IN(ishift+ji,jj,jk,jl,jf) = ARRAY_IN(ishift,jj,jk,jl,jf) 231 ishift2 = jpi - 2*nn_hls 232 DO jf = 1, ipf ; DO jl = 1, ipl ; DO jk = 1, ipk ; DO jj = 1-nn_hls+1, jpj ; DO ji = 1, nn_hls 233 ARRAY_IN(ishift+ji,jj,jk,jl,jf) = ARRAY_IN(ishift2+ji,jj,jk,jl,jf) 238 234 END DO ; END DO ; END DO ; END DO ; END DO 239 235 CASE ( jpfillcst ) ! filling with constant value 240 DO jf = 1, ipf ; DO jl = 1, ipl ; DO jk = 1, ipk ; DO jj = 1 , jpj ; DO ji = 1, ihl236 DO jf = 1, ipf ; DO jl = 1, ipl ; DO jk = 1, ipk ; DO jj = 1-nn_hls+1, jpj ; DO ji = 1, nn_hls 241 237 ARRAY_IN(ishift+ji,jj,jk,jl,jf) = zland 242 238 END DO; END DO ; END DO ; END DO ; END DO … … 264 260 ! ---------------------------------------------------- ! 265 261 ! 266 IF( llsend_so ) ALLOCATE( zsnd_so( jpi,ihl,ipk,ipl,ipf) )267 IF( llsend_no ) ALLOCATE( zsnd_no( jpi,ihl,ipk,ipl,ipf) )268 IF( llrecv_so ) ALLOCATE( zrcv_so( jpi,ihl,ipk,ipl,ipf) )269 IF( llrecv_no ) ALLOCATE( zrcv_no( jpi,ihl,ipk,ipl,ipf) )270 ! 271 isize = jpi * ihl* ipk * ipl * ipf262 IF( llsend_so ) ALLOCATE( zsnd_so(1-nn_hls+1:jpi,nn_hls,ipk,ipl,ipf) ) 263 IF( llsend_no ) ALLOCATE( zsnd_no(1-nn_hls+1:jpi,nn_hls,ipk,ipl,ipf) ) 264 IF( llrecv_so ) ALLOCATE( zrcv_so(1-nn_hls+1:jpi,nn_hls,ipk,ipl,ipf) ) 265 IF( llrecv_no ) ALLOCATE( zrcv_no(1-nn_hls+1:jpi,nn_hls,ipk,ipl,ipf) ) 266 ! 267 isize = ( jpi + nn_hls - 1 ) * nn_hls * ipk * ipl * ipf 272 268 273 269 ! allocate local temporary arrays to be sent/received. Fill arrays to be sent 274 270 IF( llsend_so ) THEN ! copy sourhern side of the inner mpi domain in local temporary array to be sent by MPI 275 ishift = ihl276 DO jf = 1, ipf ; DO jl = 1, ipl ; DO jk = 1, ipk ; DO jj = 1, ihl ; DO ji =1, jpi277 zsnd_so(ji,jj,jk,jl,jf) = ARRAY_IN(ji,ishift+jj,jk,jl,jf) ! ihl+1 -> 2*ihl271 ishift = 1 272 DO jf = 1, ipf ; DO jl = 1, ipl ; DO jk = 1, ipk ; DO jj = 1, nn_hls ; DO ji = 1-nn_hls+1, jpi 273 zsnd_so(ji,jj,jk,jl,jf) = ARRAY_IN(ji,ishift+jj,jk,jl,jf) ! nn_hls+1 -> 2*nn_hls 278 274 END DO ; END DO ; END DO ; END DO ; END DO 279 275 ENDIF 280 276 ! 281 277 IF( llsend_no ) THEN ! copy eastern side of the inner mpi domain in local temporary array to be sent by MPI 282 ishift = jpj - 2 * ihl283 DO jf = 1, ipf ; DO jl = 1, ipl ; DO jk = 1, ipk ; DO jj = 1, ihl ; DO ji =1, jpi284 zsnd_no(ji,jj,jk,jl,jf) = ARRAY_IN(ji,ishift+jj,jk,jl,jf) ! jpj-2* ihl+1 -> jpj-ihl278 ishift = jpj - 2 * nn_hls 279 DO jf = 1, ipf ; DO jl = 1, ipl ; DO jk = 1, ipk ; DO jj = 1, nn_hls ; DO ji = 1-nn_hls+1, jpi 280 zsnd_no(ji,jj,jk,jl,jf) = ARRAY_IN(ji,ishift+jj,jk,jl,jf) ! jpj-2*nn_hls+1 -> jpj-nn_hls 285 281 END DO ; END DO ; END DO ; END DO ; END DO 286 282 ENDIF … … 289 285 ! 290 286 ! non-blocking send of the southern/northern side 291 IF( llsend_so ) CALL mppsend( 3, zsnd_so(1 ,1,1,1,1), isize, noso, ireq_so )292 IF( llsend_no ) CALL mppsend( 4, zsnd_no(1 ,1,1,1,1), isize, nono, ireq_no )287 IF( llsend_so ) CALL mppsend( 3, zsnd_so(1-nn_hls+1,1,1,1,1), isize, noso, ireq_so ) 288 IF( llsend_no ) CALL mppsend( 4, zsnd_no(1-nn_hls+1,1,1,1,1), isize, nono, ireq_no ) 293 289 ! blocking receive of the southern/northern halo 294 IF( llrecv_so ) CALL mpprecv( 4, zrcv_so(1 ,1,1,1,1), isize, noso )295 IF( llrecv_no ) CALL mpprecv( 3, zrcv_no(1 ,1,1,1,1), isize, nono )290 IF( llrecv_so ) CALL mpprecv( 4, zrcv_so(1-nn_hls+1,1,1,1,1), isize, noso ) 291 IF( llrecv_no ) CALL mpprecv( 3, zrcv_no(1-nn_hls+1,1,1,1,1), isize, nono ) 296 292 ! 297 293 IF( ln_timing ) CALL tic_tac(.FALSE.) … … 303 299 ! 5.1 fill southern halo 304 300 ! ---------------------- 305 ! ishift = 0 ! fill halo from jj = 1 to ihl301 ! ishift = 0 ! fill halo from jj = 1 to nn_hls 306 302 SELECT CASE ( ifill_so ) 307 303 CASE ( jpfillnothing ) ! no filling 308 304 CASE ( jpfillmpi ) ! use data received by MPI 309 DO jf = 1, ipf ; DO jl = 1, ipl ; DO jk = 1, ipk ; DO jj = 1, ihl ; DO ji =1, jpi310 ARRAY_IN(ji,jj ,jk,jl,jf) = zrcv_so(ji,jj,jk,jl,jf) ! 1 -> ihl305 DO jf = 1, ipf ; DO jl = 1, ipl ; DO jk = 1, ipk ; DO jj = 1, nn_hls ; DO ji = 1-nn_hls+1, jpi 306 ARRAY_IN(ji,jj-nn_hls+1,jk,jl,jf) = zrcv_so(ji,jj,jk,jl,jf) ! 1 -> nn_hls 311 307 END DO; END DO ; END DO ; END DO ; END DO 312 308 CASE ( jpfillperio ) ! use north-south periodicity 313 ishift2 = jpj - 2 * ihl314 DO jf = 1, ipf ; DO jl = 1, ipl ; DO jk = 1, ipk ; DO jj = 1, ihl ; DO ji =1, jpi315 ARRAY_IN(ji,jj ,jk,jl,jf) = ARRAY_IN(ji,ishift2+jj,jk,jl,jf)309 ishift2 = jpj - 2 * nn_hls 310 DO jf = 1, ipf ; DO jl = 1, ipl ; DO jk = 1, ipk ; DO jj = 1, nn_hls ; DO ji = 1-nn_hls+1, jpi 311 ARRAY_IN(ji,jj-nn_hls+1,jk,jl,jf) = ARRAY_IN(ji,ishift2+jj,jk,jl,jf) 316 312 END DO; END DO ; END DO ; END DO ; END DO 317 313 CASE ( jpfillcopy ) ! filling with inner domain values 318 314 DO jf = 1, ipf ! number of arrays to be treated 319 315 IF( .NOT. NAT_IN(jf) == 'F' ) THEN ! do nothing for F point 320 DO jl = 1, ipl ; DO jk = 1, ipk ; DO jj = 1, ihl ; DO ji =1, jpi321 ARRAY_IN(ji,jj ,jk,jl,jf) = ARRAY_IN(ji,ihl+1,jk,jl,jf)316 DO jl = 1, ipl ; DO jk = 1, ipk ; DO jj = 1, nn_hls ; DO ji = 1-nn_hls+1, jpi 317 ARRAY_IN(ji,jj-nn_hls+1,jk,jl,jf) = ARRAY_IN(ji,1+jj,jk,jl,jf) 322 318 END DO ; END DO ; END DO ; END DO 323 319 ENDIF … … 326 322 DO jf = 1, ipf ! number of arrays to be treated 327 323 IF( .NOT. NAT_IN(jf) == 'F' ) THEN ! do nothing for F point 328 DO jl = 1, ipl ; DO jk = 1, ipk ; DO jj = 1, ihl ; DO ji =1, jpi329 ARRAY_IN(ji,jj ,jk,jl,jf) = zland324 DO jl = 1, ipl ; DO jk = 1, ipk ; DO jj = 1, nn_hls ; DO ji = 1-nn_hls+1, jpi 325 ARRAY_IN(ji,jj-nn_hls+1,jk,jl,jf) = zland 330 326 END DO; END DO ; END DO ; END DO 331 327 ENDIF … … 335 331 ! 5.2 fill northern halo 336 332 ! ---------------------- 337 ishift = jpj - ihl ! fill halo from jj = jpj-ihl+1 to jpj333 ishift = jpj - nn_hls ! fill halo from jj = jpj-nn_hls+1 to jpj 338 334 SELECT CASE ( ifill_no ) 339 335 CASE ( jpfillnothing ) ! no filling 340 336 CASE ( jpfillmpi ) ! use data received by MPI 341 DO jf = 1, ipf ; DO jl = 1, ipl ; DO jk = 1, ipk ; DO jj = 1, ihl ; DO ji =1, jpi342 ARRAY_IN(ji,ishift+jj,jk,jl,jf) = zrcv_no(ji,jj,jk,jl,jf) ! jpj- ihl+1 -> jpj337 DO jf = 1, ipf ; DO jl = 1, ipl ; DO jk = 1, ipk ; DO jj = 1, nn_hls ; DO ji = 1-nn_hls+1, jpi 338 ARRAY_IN(ji,ishift+jj,jk,jl,jf) = zrcv_no(ji,jj,jk,jl,jf) ! jpj-nn_hls+1 -> jpj 343 339 END DO ; END DO ; END DO ; END DO ; END DO 344 340 CASE ( jpfillperio ) ! use north-south periodicity 345 ishift2 = ihl346 DO jf = 1, ipf ; DO jl = 1, ipl ; DO jk = 1, ipk ; DO jj = 1, ihl ; DO ji =1, jpi341 ishift2 = 1 342 DO jf = 1, ipf ; DO jl = 1, ipl ; DO jk = 1, ipk ; DO jj = 1, nn_hls ; DO ji = 1-nn_hls+1, jpi 347 343 ARRAY_IN(ji,ishift+jj,jk,jl,jf) = ARRAY_IN(ji,ishift2+jj,jk,jl,jf) 348 344 END DO; END DO ; END DO ; END DO ; END DO 349 345 CASE ( jpfillcopy ) ! filling with inner domain values 350 DO jf = 1, ipf ; DO jl = 1, ipl ; DO jk = 1, ipk ; DO jj = 1, ihl ; DO ji = 1, jpi 351 ARRAY_IN(ji,ishift+jj,jk,jl,jf) = ARRAY_IN(ji,ishift,jk,jl,jf) 346 ishift2 = jpj - 2*nn_hls 347 DO jf = 1, ipf ; DO jl = 1, ipl ; DO jk = 1, ipk ; DO jj = 1, nn_hls ; DO ji = 1-nn_hls+1, jpi 348 ARRAY_IN(ji,ishift+jj,jk,jl,jf) = ARRAY_IN(ji,ishift2+jj,jk,jl,jf) 352 349 END DO; END DO ; END DO ; END DO ; END DO 353 350 CASE ( jpfillcst ) ! filling with constant value 354 DO jf = 1, ipf ; DO jl = 1, ipl ; DO jk = 1, ipk ; DO jj = 1, ihl ; DO ji =1, jpi351 DO jf = 1, ipf ; DO jl = 1, ipl ; DO jk = 1, ipk ; DO jj = 1, nn_hls ; DO ji = 1-nn_hls+1, jpi 355 352 ARRAY_IN(ji,ishift+jj,jk,jl,jf) = zland 356 353 END DO; END DO ; END DO ; END DO ; END DO
Note: See TracChangeset
for help on using the changeset viewer.