- Timestamp:
- 2018-11-19T10:33:35+01:00 (5 years ago)
- Location:
- NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/OCE/LBC
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/OCE/LBC/lbc_lnk_generic.h90
r10314 r10329 78 78 ! ------------------------------- ! 79 79 ! 80 IF( PRESENT( cd_mpp ) ) THEN !== halos filled with inner values ==! 81 ! 82 ! only fill the overlap area and extra allows 83 ! this is in mpp case. In this module, just do nothing 84 ! 85 ELSE !== standard close or cyclic treatment ==! 80 IF( .NOT. PRESENT( cd_mpp ) ) THEN !== standard close or cyclic treatment ==! 86 81 ! 87 82 DO jf = 1, ipf ! number of arrays to be treated -
NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/OCE/LBC/mpp_lnk_generic.h90
r10314 r10329 75 75 IF( narea == 1 .AND. numcom == -1 ) CALL mpp_report( cdname, ipk, ipl, ipf, ld_lbc = .TRUE. ) 76 76 ! 77 ALLOCATE( zt3ns(jpi,nn_hls,ipk,ipl,ipf,2), zt3sn(jpi,nn_hls,ipk,ipl,ipf,2), &78 & zt3ew(jpj,nn_hls,ipk,ipl,ipf,2), zt3we(jpj,nn_hls,ipk,ipl,ipf,2) )79 !80 77 IF( PRESENT( pval ) ) THEN ; zland = pval ! set land value 81 78 ELSE ; zland = 0._wp ! zero by default … … 86 83 ! ------------------------------- ! 87 84 ! 88 IF( PRESENT( cd_mpp ) ) THEN !== halos filled with inner values ==! 89 ! 90 DO jf = 1, ipf ! number of arrays to be treated 91 ! 92 DO jl = 1, ipl ! CAUTION: ptab is defined only between nld and nle 93 DO jk = 1, ipk 94 DO jj = nlcj+1, jpj ! added line(s) (inner only) 95 ARRAY_IN(nldi :nlei ,jj,jk,jl,jf) = ARRAY_IN(nldi:nlei,nlej,jk,jl,jf) 96 ARRAY_IN(1 :nldi-1,jj,jk,jl,jf) = ARRAY_IN(nldi ,nlej,jk,jl,jf) 97 ARRAY_IN(nlei+1:nlci ,jj,jk,jl,jf) = ARRAY_IN( nlei,nlej,jk,jl,jf) 98 END DO 99 DO ji = nlci+1, jpi ! added column(s) (full) 100 ARRAY_IN(ji,nldj :nlej ,jk,jl,jf) = ARRAY_IN(nlei,nldj:nlej,jk,jl,jf) 101 ARRAY_IN(ji,1 :nldj-1,jk,jl,jf) = ARRAY_IN(nlei,nldj ,jk,jl,jf) 102 ARRAY_IN(ji,nlej+1:jpj ,jk,jl,jf) = ARRAY_IN(nlei, nlej,jk,jl,jf) 103 END DO 104 END DO 105 END DO 106 ! 107 END DO 108 ! 109 ELSE !== standard close or cyclic treatment ==! 85 IF( .NOT. PRESENT( cd_mpp ) ) THEN !== standard close or cyclic treatment ==! 110 86 ! 111 87 DO jf = 1, ipf ! number of arrays to be treated … … 136 112 ! we play with the neigbours AND the row number because of the periodicity 137 113 ! 114 IF( ABS(nbondi) == 1 ) ALLOCATE( zt3ew(jpj,nn_hls,ipk,ipl,ipf,1), zt3we(jpj,nn_hls,ipk,ipl,ipf,1) ) 115 IF( nbondi == 0 ) ALLOCATE( zt3ew(jpj,nn_hls,ipk,ipl,ipf,2), zt3we(jpj,nn_hls,ipk,ipl,ipf,2) ) 116 ! 138 117 SELECT CASE ( nbondi ) ! Read Dirichlet lateral conditions 139 CASE ( -1, 0, 1 ) ! all exept 2 (i.e. close case) 118 CASE ( -1 ) 119 iihom = nlci-nreci 120 DO jf = 1, ipf 121 DO jl = 1, ipl 122 DO jk = 1, ipk 123 DO jh = 1, nn_hls 124 zt3we(:,jh,jk,jl,jf,1) = ARRAY_IN(iihom +jh,:,jk,jl,jf) 125 END DO 126 END DO 127 END DO 128 END DO 129 CASE ( 0 ) 140 130 iihom = nlci-nreci 141 131 DO jf = 1, ipf … … 149 139 END DO 150 140 END DO 151 END SELECT 152 ! 141 CASE ( 1 ) 142 iihom = nlci-nreci 143 DO jf = 1, ipf 144 DO jl = 1, ipl 145 DO jk = 1, ipk 146 DO jh = 1, nn_hls 147 zt3ew(:,jh,jk,jl,jf,1) = ARRAY_IN(nn_hls+jh,:,jk,jl,jf) 148 END DO 149 END DO 150 END DO 151 END DO 152 END SELECT 153 153 ! ! Migrations 154 154 imigr = nn_hls * jpj * ipk * ipl * ipf … … 159 159 CASE ( -1 ) 160 160 CALL mppsend( 2, zt3we(1,1,1,1,1,1), imigr, noea, ml_req1 ) 161 CALL mpprecv( 1, zt3ew(1,1,1,1,1, 2), imigr, noea )161 CALL mpprecv( 1, zt3ew(1,1,1,1,1,1), imigr, noea ) 162 162 IF(l_isend) CALL mpi_wait(ml_req1, ml_stat, ml_err) 163 163 CASE ( 0 ) … … 170 170 CASE ( 1 ) 171 171 CALL mppsend( 1, zt3ew(1,1,1,1,1,1), imigr, nowe, ml_req1 ) 172 CALL mpprecv( 2, zt3we(1,1,1,1,1, 2), imigr, nowe )172 CALL mpprecv( 2, zt3we(1,1,1,1,1,1), imigr, nowe ) 173 173 IF(l_isend) CALL mpi_wait(ml_req1, ml_stat, ml_err ) 174 174 END SELECT 175 175 ! 176 176 IF( ln_timing ) CALL tic_tac(.FALSE.) 177 !178 177 ! 179 178 ! ! Write Dirichlet lateral conditions … … 186 185 DO jk = 1, ipk 187 186 DO jh = 1, nn_hls 188 ARRAY_IN(iihom+jh,:,jk,jl,jf) = zt3ew(:,jh,jk,jl,jf, 2)187 ARRAY_IN(iihom+jh,:,jk,jl,jf) = zt3ew(:,jh,jk,jl,jf,1) 189 188 END DO 190 189 END DO … … 207 206 DO jk = 1, ipk 208 207 DO jh = 1, nn_hls 209 ARRAY_IN(jh ,:,jk,jl,jf) = zt3we(:,jh,jk,jl,jf,2) 210 END DO 211 END DO 212 END DO 213 END DO 214 END SELECT 208 ARRAY_IN(jh ,:,jk,jl,jf) = zt3we(:,jh,jk,jl,jf,1) 209 END DO 210 END DO 211 END DO 212 END DO 213 END SELECT 214 ! 215 IF( nbondi /= 2 ) DEALLOCATE( zt3ew, zt3we ) 215 216 216 217 ! 3. North and south directions … … 218 219 ! always closed : we play only with the neigbours 219 220 ! 220 IF( nbondj /= 2 ) THEN ! Read Dirichlet lateral conditions 221 IF( ABS(nbondj) == 1 ) ALLOCATE( zt3ns(jpi,nn_hls,ipk,ipl,ipf,1), zt3sn(jpi,nn_hls,ipk,ipl,ipf,1) ) 222 IF( nbondj == 0 ) ALLOCATE( zt3ns(jpi,nn_hls,ipk,ipl,ipf,2), zt3sn(jpi,nn_hls,ipk,ipl,ipf,2) ) 223 ! 224 SELECT CASE ( nbondj ) 225 CASE ( -1 ) 226 ijhom = nlcj-nrecj 227 DO jf = 1, ipf 228 DO jl = 1, ipl 229 DO jk = 1, ipk 230 DO jh = 1, nn_hls 231 zt3sn(:,jh,jk,jl,jf,1) = ARRAY_IN(:,ijhom +jh,jk,jl,jf) 232 END DO 233 END DO 234 END DO 235 END DO 236 CASE ( 0 ) 221 237 ijhom = nlcj-nrecj 222 238 DO jf = 1, ipf … … 230 246 END DO 231 247 END DO 232 ENDIF 248 CASE ( 1 ) 249 ijhom = nlcj-nrecj 250 DO jf = 1, ipf 251 DO jl = 1, ipl 252 DO jk = 1, ipk 253 DO jh = 1, nn_hls 254 zt3ns(:,jh,jk,jl,jf,1) = ARRAY_IN(:,nn_hls+jh,jk,jl,jf) 255 END DO 256 END DO 257 END DO 258 END DO 259 END SELECT 233 260 ! 234 261 ! ! Migrations … … 240 267 CASE ( -1 ) 241 268 CALL mppsend( 4, zt3sn(1,1,1,1,1,1), imigr, nono, ml_req1 ) 242 CALL mpprecv( 3, zt3ns(1,1,1,1,1, 2), imigr, nono )269 CALL mpprecv( 3, zt3ns(1,1,1,1,1,1), imigr, nono ) 243 270 IF(l_isend) CALL mpi_wait(ml_req1, ml_stat, ml_err ) 244 271 CASE ( 0 ) … … 251 278 CASE ( 1 ) 252 279 CALL mppsend( 3, zt3ns(1,1,1,1,1,1), imigr, noso, ml_req1 ) 253 CALL mpprecv( 4, zt3sn(1,1,1,1,1, 2), imigr, noso )280 CALL mpprecv( 4, zt3sn(1,1,1,1,1,1), imigr, noso ) 254 281 IF(l_isend) CALL mpi_wait(ml_req1, ml_stat, ml_err ) 255 282 END SELECT … … 265 292 DO jk = 1, ipk 266 293 DO jh = 1, nn_hls 267 ARRAY_IN(:,ijhom+jh,jk,jl,jf) = zt3ns(:,jh,jk,jl,jf, 2)294 ARRAY_IN(:,ijhom+jh,jk,jl,jf) = zt3ns(:,jh,jk,jl,jf,1) 268 295 END DO 269 296 END DO … … 286 313 DO jk = 1, ipk 287 314 DO jh = 1, nn_hls 288 ARRAY_IN(:,jh,jk,jl,jf) = zt3sn(:,jh,jk,jl,jf,2) 289 END DO 290 END DO 291 END DO 292 END DO 293 END SELECT 315 ARRAY_IN(:,jh,jk,jl,jf) = zt3sn(:,jh,jk,jl,jf,1) 316 END DO 317 END DO 318 END DO 319 END DO 320 END SELECT 321 ! 322 IF( nbondj /= 2 ) DEALLOCATE( zt3ns, zt3sn ) 294 323 295 324 ! 4. north fold treatment … … 305 334 ENDIF 306 335 ! 307 DEALLOCATE( zt3ns, zt3sn, zt3ew, zt3we )308 !309 336 END SUBROUTINE ROUTINE_LNK 310 337
Note: See TracChangeset
for help on using the changeset viewer.