Changeset 6571
- Timestamp:
- 2016-05-19T14:33:26+02:00 (8 years ago)
- Location:
- branches/UKMO/dev_r5518_hadgem3_mct/NEMOGCM/NEMO/OPA_SRC
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/dev_r5518_hadgem3_mct/NEMOGCM/NEMO/OPA_SRC/LBC/lib_mpp.F90
r6558 r6571 2019 2019 ! 2020 2020 2021 #if defined key_oasis3 || defined key_oasis3mct2021 #if defined key_oasis3 2022 2022 ! If we're trying to shut down cleanly then we need to consider the fact 2023 2023 ! that this could be part of an MPMD configuration - we don't want to -
branches/UKMO/dev_r5518_hadgem3_mct/NEMOGCM/NEMO/OPA_SRC/SBC/cpl_oasis3.F90
r6558 r6571 24 24 !! cpl_finalize : finalize the coupled mode communication 25 25 !!---------------------------------------------------------------------- 26 #if defined key_oasis3 || defined key_oasis3mct26 #if defined key_oasis3 27 27 USE mod_oasis ! OASIS3-MCT module 28 28 #endif … … 32 32 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 33 33 34 #if defined key_cpl_rootexchg35 USE lib_mpp, only : mppsync36 USE lib_mpp, only : mppscatter,mppgather37 #endif38 39 34 IMPLICIT NONE 40 35 PRIVATE … … 62 57 INTEGER :: ncomp_id ! id returned by oasis_init_comp 63 58 INTEGER :: nerror ! return error code 64 #if ! defined key_oasis3 && ! defined key_oasis3mct59 #if ! defined key_oasis3 65 60 ! OASIS Variables not used. defined only for compilation purpose 66 61 INTEGER :: OASIS_Out = -1 … … 98 93 99 94 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: exfld ! Temporary buffer for receiving 100 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: tbuf ! Temporary buffer for sending / receiving101 95 INTEGER, PUBLIC :: localComm 102 96 … … 167 161 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~~~~~' 168 162 IF(lwp) WRITE(numout,*) 169 170 commRank = .false.171 IF ( rootexchg ) THEN172 IF ( nproc == localRoot ) commRank = .true.173 ELSE174 commRank = .true.175 ENDIF176 163 177 164 ncplmodel = kcplmodel … … 198 185 ishape(:,2) = (/ 1, nlej-nldj+1 /) 199 186 ! 187 ! ... Allocate memory for data exchange 188 ! 189 ALLOCATE(exfld(nlei-nldi+1, nlej-nldj+1), stat = nerror) 190 IF( nerror > 0 ) THEN 191 CALL oasis_abort ( ncomp_id, 'cpl_define', 'Failure in allocating exfld') ; RETURN 192 ENDIF 200 193 ! 201 194 ! ----------------------------------------------------------------- 202 195 ! ... Define the partition 203 196 ! ----------------------------------------------------------------- 204 205 IF ( rootexchg ) THEN 206 207 paral(1) = 2 ! box partitioning 208 paral(2) = 0 ! NEMO lower left corner global offset 209 paral(3) = jpiglo ! local extent in i 210 paral(4) = jpjglo ! local extent in j 211 paral(5) = jpiglo ! global extent in x 212 213 ELSE 214 197 215 198 paral(1) = 2 ! box partitioning 216 199 paral(2) = jpiglo * (nldj-1+njmpp-1) + (nldi-1+nimpp-1) ! NEMO lower left corner global offset … … 226 209 ENDIF 227 210 228 ENDIF 229 IF ( commRank ) CALL oasis_def_partition ( id_part, paral, nerror, jpiglo*jpjglo ) 230 231 ! ... Allocate memory for data exchange 232 ! 233 ALLOCATE(exfld(paral(3), paral(4)), stat = nerror) 234 IF( nerror > 0 ) THEN 235 CALL oasis_abort ( ncomp_id, 'cpl_define', 'Failure in allocating exfld') ; RETURN 236 ENDIF 237 IF ( rootexchg ) THEN 238 ! Should possibly use one of the work arrays for tbuf really 239 ALLOCATE(tbuf(jpi, jpj, jpnij), stat = nerror) 240 IF( nerror > 0 ) THEN 241 CALL oasis_abort ( ncomp_id, 'cpl_define', 'Failure in allocating tbuf') ; RETURN 242 ENDIF 243 ENDIF 244 ! 245 IF (commRank ) THEN 211 CALL oasis_def_partition ( id_part, paral, nerror ) 246 212 ! 247 213 ! ... Announce send variables. … … 335 301 ENDIF 336 302 END DO 337 !338 ENDIF ! commRank=true339 303 340 304 !------------------------------------------------------------------ … … 342 306 !------------------------------------------------------------------ 343 307 344 IF ( commRank ) THEN 345 346 CALL oasis_enddef(nerror) 347 IF( nerror /= OASIS_Ok ) CALL oasis_abort ( ncomp_id, 'cpl_define', 'Failure in oasis_enddef') 348 ENDIF 308 CALL oasis_enddef(nerror) 309 IF( nerror /= OASIS_Ok ) CALL oasis_abort ( ncomp_id, 'cpl_define', 'Failure in oasis_enddef') 349 310 ! 350 311 END SUBROUTINE cpl_define … … 363 324 REAL(wp), DIMENSION(:,:,:), INTENT(in ) :: pdata 364 325 !! 365 INTEGER :: j n,jc,jm ! local loop index326 INTEGER :: jc,jm ! local loop index 366 327 !!-------------------------------------------------------------------- 367 328 ! … … 372 333 373 334 IF( ssnd(kid)%nid(jc,jm) /= -1 ) THEN 374 IF ( rootexchg ) THEN 375 ! 376 ! collect data on the local root process 377 ! 378 CALL mppgather (pdata(:,:,jc),localRoot,tbuf) 379 CALL mppsync 380 381 IF ( nproc == localRoot ) THEN 382 383 DO jn = 1, jpnij 384 exfld(nimppt(jn)-1+nldit(jn):nimppt(jn)+nleit(jn)-1,njmppt(jn)-1+nldjt(jn):njmppt(jn)+nlejt(jn)-1)= & 385 tbuf(nldit(jn):nleit(jn),nldjt(jn):nlejt(jn),jn) 386 ENDDO 387 388 ! snd data to OASIS3 389 CALL oasis_put ( ssnd(kid)%nid(jc,jm), kstep, exfld, kinfo ) 390 391 ENDIF 392 393 ELSE 394 395 ! snd data to OASIS3 396 CALL oasis_put ( ssnd(kid)%nid(jc,jm), kstep, pdata(nldi:nlei, nldj:nlej,jc), kinfo ) 397 ENDIF 335 CALL oasis_put ( ssnd(kid)%nid(jc,jm), kstep, pdata(nldi:nlei, nldj:nlej,jc), kinfo ) 398 336 399 337 IF ( ln_ctl ) THEN … … 433 371 INTEGER , INTENT( out) :: kinfo ! OASIS3 info argument 434 372 !! 435 INTEGER :: j n,jc,jm ! local loop index373 INTEGER :: jc,jm ! local loop index 436 374 LOGICAL :: llaction, llfisrt 437 375 !!-------------------------------------------------------------------- … … 447 385 448 386 IF( srcv(kid)%nid(jc,jm) /= -1 ) THEN 449 450 ! 451 ! receive data from OASIS3 452 ! 453 IF ( commRank ) CALL oasis_get ( srcv(kid)%nid(jc,jm), kstep, exfld, kinfo ) 454 455 IF ( rootexchg ) CALL MPI_BCAST ( kinfo, 1, MPI_INTEGER, localRoot, localComm, nerror ) 387 388 CALL oasis_get ( srcv(kid)%nid(jc,jm), kstep, exfld, kinfo ) 456 389 457 390 llaction = kinfo == OASIS_Recvd .OR. kinfo == OASIS_FromRest .OR. & … … 464 397 kinfo = OASIS_Rcv 465 398 IF( llfisrt ) THEN 466 467 IF ( rootexchg ) THEN 468 469 ! distribute data to processes 470 ! 471 IF ( nproc == localRoot ) THEN 472 473 DO jn = 1, jpnij 474 tbuf(nldit(jn):nleit(jn),nldjt(jn):nlejt(jn),jn)= & 475 exfld(nimppt(jn)-1+nldit(jn):nimppt(jn)+nleit(jn)-1,njmppt(jn)-1+nldjt(jn):njmppt(jn)+nlejt(jn)-1) 476 ! NOTE: we are missing combining this with pmask (see else below) 477 ENDDO 478 479 ENDIF 480 481 CALL mppscatter (tbuf,localRoot,pdata(:,:,jc)) 482 CALL mppsync 483 484 ELSE 485 486 pdata(nldi:nlei, nldj:nlej, jc) = exfld(:,:) * pmask(nldi:nlei,nldj:nlej,jm) 487 488 ENDIF 489 399 pdata(nldi:nlei,nldj:nlej,jc) = exfld(:,:) * pmask(nldi:nlei,nldj:nlej,jm) 490 400 llfisrt = .FALSE. 491 401 ELSE … … 565 475 #if defined key_oa3mct_v3 566 476 CALL oasis_get_freqs(id, mop, 1, itmp, info) 567 #endif 568 #if defined key_oasis3 569 CALL oasis_get_freqs(id, 1, itmp, info) 570 #endif 571 cpl_freq = itmp(1) 572 #if defined key_oasis3mct 477 #else 478 ! CALL oasis_get_freqs(id, 1, itmp, info) 573 479 cpl_freq = namflddti( id ) 574 480 #endif … … 588 494 ! 589 495 DEALLOCATE( exfld ) 590 IF ( rootexchg ) DEALLOCATE ( tbuf )591 496 IF (nstop == 0) THEN 592 497 CALL oasis_terminate( nerror ) … … 597 502 END SUBROUTINE cpl_finalize 598 503 599 #if ! defined key_oasis3 && ! defined key_oasis3mct504 #if ! defined key_oasis3 600 505 601 506 !!---------------------------------------------------------------------- -
branches/UKMO/dev_r5518_hadgem3_mct/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_oce.F90
r6558 r6571 35 35 LOGICAL , PUBLIC :: ln_blk_core !: CORE bulk formulation 36 36 LOGICAL , PUBLIC :: ln_blk_mfs !: MFS bulk formulation 37 #if defined key_oasis3 || defined key_oasis3mct37 #if defined key_oasis3 38 38 LOGICAL , PUBLIC :: lk_oasis = .TRUE. !: OASIS used 39 39 #else -
branches/UKMO/dev_r5518_hadgem3_mct/NEMOGCM/NEMO/OPA_SRC/SBC/sbccpl.F90
r6558 r6571 41 41 USE timing ! Timing 42 42 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 43 #if defined key_oasis3 || defined key_oasis3mct44 USE mod_oasis ! OASIS3-MCT module45 #endif46 43 USE eosbn2 47 44 USE sbcrnf , ONLY : l_rnfcpl
Note: See TracChangeset
for help on using the changeset viewer.