New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 14327 – NEMO

Changeset 14327


Ignore:
Timestamp:
2021-01-22T11:50:04+01:00 (3 years ago)
Author:
smasson
Message:

dev_r14312_MPI_Interface: bugfix for icebergs and NP folding, #2598

Location:
NEMO/branches/2021/dev_r14312_MPI_Interface/src/OCE
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2021/dev_r14312_MPI_Interface/src/OCE/ICB/icbini.F90

    r14314 r14327  
    189189       
    190190      ! north fold 
    191       IF( l_NFoldT .OR.  l_NFoldF ) THEN 
     191      IF( l_IdoNFold ) THEN 
    192192         ! 
    193193         ! icebergs in row nicbej+1 get passed across fold 
     
    235235         WRITE(numicb,*) "j point" 
    236236         WRITE(numicb,*) (INT(src_calving(ji,jj)), jj=1,jpj) 
    237          IF( l_NFoldT .OR. l_NFoldF ) THEN 
     237         IF( l_IdoNFold ) THEN 
    238238            WRITE(numicb,*) 'north fold destination points ' 
    239239            WRITE(numicb,*) nicbfldpts 
  • NEMO/branches/2021/dev_r14312_MPI_Interface/src/OCE/ICB/icblbc.F90

    r14314 r14327  
    105105      IF( l_Jperio)      CALL ctl_stop(' north-south periodicity not implemented for icebergs') 
    106106      ! north fold 
    107       IF( l_NFoldT .OR. l_NFoldF )   CALL icb_lbc_nfld() 
     107      IF( l_IdoNFold )   CALL icb_lbc_nfld() 
    108108      ! 
    109109   END SUBROUTINE icb_lbc 
     
    185185      ! 
    186186      ! at northern line of processors with north fold handle bergs differently 
    187       IF( l_NFoldT .OR. l_NFoldF )   ipe_N = -1 
     187      IF( l_IdoNFold )   ipe_N = -1 
    188188 
    189189      ! if there's only one processor in x direction then don't let mpp try to handle periodicity 
     
    285285      ENDIF 
    286286       
    287       IF( ibergs_to_send_w > 0 ) CALL mppsend( 13, obuffer_w%DATA, ibergs_to_send_w*jp_buffer_width, ipe_W, iml_req2 ) 
    288       IF( ibergs_to_send_e > 0 ) CALL mppsend( 14, obuffer_e%DATA, ibergs_to_send_e*jp_buffer_width, ipe_E, iml_req3 ) 
     287      IF( ibergs_to_send_w > 0 ) CALL mppsend( 13, obuffer_w%data, ibergs_to_send_w*jp_buffer_width, ipe_W, iml_req2 ) 
     288      IF( ibergs_to_send_e > 0 ) CALL mppsend( 14, obuffer_e%data, ibergs_to_send_e*jp_buffer_width, ipe_E, iml_req3 ) 
    289289      IF( ibergs_rcvd_from_e > 0 ) THEN 
    290290         CALL icb_increase_ibuffer(ibuffer_e, ibergs_rcvd_from_e) 
    291          CALL mpprecv( 13, ibuffer_e%DATA, ibergs_rcvd_from_e*jp_buffer_width ) 
     291         CALL mpprecv( 13, ibuffer_e%data, ibergs_rcvd_from_e*jp_buffer_width ) 
    292292      ENDIF 
    293293      IF( ibergs_rcvd_from_w > 0 ) THEN 
    294294         CALL icb_increase_ibuffer(ibuffer_w, ibergs_rcvd_from_w) 
    295          CALL mpprecv( 14, ibuffer_w%DATA, ibergs_rcvd_from_w*jp_buffer_width ) 
     295         CALL mpprecv( 14, ibuffer_w%data, ibergs_rcvd_from_w*jp_buffer_width ) 
    296296      ENDIF 
    297297      IF( ibergs_to_send_w > 0 ) CALL mpi_wait( iml_req2, iml_stat, iml_err ) 
     
    299299      DO i = 1, ibergs_rcvd_from_e 
    300300         IF( nn_verbose_level >= 4 ) THEN 
    301             WRITE(numicb,*) 'bergstep ',nktberg,' unpacking berg ',INT(ibuffer_e%DATA(16,i)),' from east' 
     301            WRITE(numicb,*) 'bergstep ',nktberg,' unpacking berg ',INT(ibuffer_e%data(16,i)),' from east' 
    302302            CALL FLUSH( numicb ) 
    303303         ENDIF 
     
    306306      DO i = 1, ibergs_rcvd_from_w 
    307307         IF( nn_verbose_level >= 4 ) THEN 
    308             WRITE(numicb,*) 'bergstep ',nktberg,' unpacking berg ',INT(ibuffer_w%DATA(16,i)),' from west' 
     308            WRITE(numicb,*) 'bergstep ',nktberg,' unpacking berg ',INT(ibuffer_w%data(16,i)),' from west' 
    309309            CALL FLUSH( numicb ) 
    310310         ENDIF 
    311311         CALL icb_unpack_from_buffer(first_berg, ibuffer_w, i) 
    312       ENDDO 
     312      END DO 
    313313 
    314314      ! Find number of bergs that headed north/south 
     
    370370      ENDIF 
    371371 
    372       IF( ibergs_to_send_s > 0 ) CALL mppsend( 17, obuffer_s%DATA, ibergs_to_send_s*jp_buffer_width, ipe_S, iml_req2 ) 
    373       IF( ibergs_to_send_n > 0 ) CALL mppsend( 18, obuffer_n%DATA, ibergs_to_send_n*jp_buffer_width, ipe_N, iml_req3 ) 
     372      IF( ibergs_to_send_s > 0 ) CALL mppsend( 17, obuffer_s%data, ibergs_to_send_s*jp_buffer_width, ipe_S, iml_req2 ) 
     373      IF( ibergs_to_send_n > 0 ) CALL mppsend( 18, obuffer_n%data, ibergs_to_send_n*jp_buffer_width, ipe_N, iml_req3 ) 
    374374      IF( ibergs_rcvd_from_n > 0 ) THEN 
    375375         CALL icb_increase_ibuffer(ibuffer_n, ibergs_rcvd_from_n) 
    376          CALL mpprecv( 17, ibuffer_n%DATA, ibergs_rcvd_from_n*jp_buffer_width ) 
     376         CALL mpprecv( 17, ibuffer_n%data, ibergs_rcvd_from_n*jp_buffer_width ) 
    377377      ENDIF 
    378378      IF( ibergs_rcvd_from_s > 0 ) THEN 
    379379         CALL icb_increase_ibuffer(ibuffer_s, ibergs_rcvd_from_s) 
    380          CALL mpprecv( 18, ibuffer_s%DATA, ibergs_rcvd_from_s*jp_buffer_width ) 
     380         CALL mpprecv( 18, ibuffer_s%data, ibergs_rcvd_from_s*jp_buffer_width ) 
    381381      ENDIF 
    382382      IF( ibergs_to_send_s > 0 ) CALL mpi_wait( iml_req2, iml_stat, iml_err ) 
     
    384384      DO i = 1, ibergs_rcvd_from_n 
    385385         IF( nn_verbose_level >= 4 ) THEN 
    386             WRITE(numicb,*) 'bergstep ',nktberg,' unpacking berg ',INT(ibuffer_n%DATA(16,i)),' from north' 
     386            WRITE(numicb,*) 'bergstep ',nktberg,' unpacking berg ',INT(ibuffer_n%data(16,i)),' from north' 
    387387            CALL FLUSH( numicb ) 
    388388         ENDIF 
     
    391391      DO i = 1, ibergs_rcvd_from_s 
    392392         IF( nn_verbose_level >= 4 ) THEN 
    393             WRITE(numicb,*) 'bergstep ',nktberg,' unpacking berg ',INT(ibuffer_s%DATA(16,i)),' from south' 
     393            WRITE(numicb,*) 'bergstep ',nktberg,' unpacking berg ',INT(ibuffer_s%data(16,i)),' from south' 
    394394            CALL FLUSH( numicb ) 
    395395         ENDIF 
    396396         CALL icb_unpack_from_buffer(first_berg, ibuffer_s, i) 
    397       ENDDO 
     397      END DO 
    398398       
    399399      IF( nn_verbose_level > 0 ) THEN 
     
    435435      ! deal with north fold if we necessary when there is more than one top row processor 
    436436      ! note that for jpni=1 north fold has been dealt with above in call to icb_lbc 
    437       IF( ( l_NFoldT .OR. l_NFoldF ) .AND. jpni > 1 ) CALL icb_lbc_mpp_nfld( ) 
     437      IF( l_IdoNFold .AND. jpni > 1 ) CALL icb_lbc_mpp_nfld( ) 
    438438 
    439439      IF( nn_verbose_level > 0 ) THEN 
  • NEMO/branches/2021/dev_r14312_MPI_Interface/src/OCE/LBC/mpp_lnk_icb_generic.h90

    r14314 r14327  
    8585      ! north fold treatment 
    8686      ! ----------------------- 
    87       IF( l_NFoldT .OR. l_NFoldF ) THEN 
     87      IF( l_IdoNFold ) THEN 
    8888         ! 
    8989         SELECT CASE ( jpni ) 
     
    158158      IF( mpinei(jpno) >= 0  )   CALL RECVROUTINE( 3, r2dns(1-kexti,1,2), imigr, mpinei(jpno) ) 
    159159      IF( mpinei(jpso) >= 0  )   CALL mpi_wait(ml_req1,ml_stat,ml_err) 
    160       IF( mpinei(jpso) >= 0  )   CALL mpi_wait(ml_req2,ml_stat,ml_err) 
     160      IF( mpinei(jpno) >= 0  )   CALL mpi_wait(ml_req2,ml_stat,ml_err) 
    161161      ! 
    162162      IF( ln_timing ) CALL tic_tac(.FALSE.) 
  • NEMO/branches/2021/dev_r14312_MPI_Interface/src/OCE/LBC/mppini.F90

    r14320 r14327  
    494494      !                          ! Prepare mpp north fold 
    495495      ! 
    496       llmpiNfold =          jpnj  > 1 .AND. ( l_NFoldT .OR. l_NFoldF )   ! is the North fold done with an MPI communication? 
     496      llmpiNfold =          jpni  > 1 .AND. ( l_NFoldT .OR. l_NFoldF )   ! is the North fold done with an MPI communication? 
    497497      l_IdoNFold = ijn(narea) == jpnj .AND. ( l_NFoldT .OR. l_NFoldF )   ! is this process doing North fold? 
    498498      ! 
Note: See TracChangeset for help on using the changeset viewer.