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 7129 for branches – NEMO

Changeset 7129 for branches


Ignore:
Timestamp:
2016-10-27T13:01:25+02:00 (7 years ago)
Author:
jcastill
Message:

As in UKMO/dev_r5107_hadgem3_mct@5631

Location:
branches/UKMO/r5936_hadgem3_mct/NEMOGCM/NEMO/OPA_SRC
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/r5936_hadgem3_mct/NEMOGCM/NEMO/OPA_SRC/DIA/diadimg.F90

    r7127 r7129  
    124124 
    125125    CASE DEFAULT 
    126        IF(lwp) WRITE(numout,*) ' E R R O R : bad cd_type in dia_wri_dimg ' 
    127        STOP 'dia_wri_dimg' 
    128  
     126       WRITE(numout,*) ' E R R O R : bad cd_type in dia_wri_dimg ' 
     127       CALL ctl_stop( 'STOP', 'dia_wri_dimg :bad cd_type in dia_wri_dimg ' ) 
    129128    END SELECT 
    130129 
  • branches/UKMO/r5936_hadgem3_mct/NEMOGCM/NEMO/OPA_SRC/LBC/lib_mpp.F90

    r7127 r7129  
    6262   USE lbcnfd         ! north fold treatment 
    6363   USE in_out_manager ! I/O manager 
     64   USE mod_oasis      ! coupling routines 
    6465 
    6566   IMPLICIT NONE 
     
    20232024      !!---------------------------------------------------------------------- 
    20242025      ! 
     2026#if defined key_oasis3 || defined key_oasis3mct  
     2027      ! If we're trying to shut down cleanly then we need to consider the fact  
     2028      ! that this could be part of an MPMD configuration - we don't want to  
     2029      ! leave other components deadlocked.  
     2030      CALL oasis_abort(nproc,"mppstop","NEMO initiated abort")  
     2031#else  
    20252032      CALL mppsync 
    20262033      CALL mpi_finalize( info ) 
     2034#endif 
    20272035      ! 
    20282036   END SUBROUTINE mppstop 
  • branches/UKMO/r5936_hadgem3_mct/NEMOGCM/NEMO/OPA_SRC/SBC/cpl_oasis3.F90

    r7127 r7129  
    2525   !!   cpl_finalize : finalize the coupled mode communication 
    2626   !!---------------------------------------------------------------------- 
    27 #if defined key_oasis3 
     27#if defined key_oasis3 || defined key_oasis3mct 
    2828   USE mod_oasis                    ! OASIS3-MCT module 
    2929#endif 
     
    3232   USE in_out_manager               ! I/O manager 
    3333   USE lbclnk                       ! ocean lateral boundary conditions (or mpp link) 
     34 
     35#if defined key_cpl_rootexchg  
     36   USE lib_mpp, only : mppsync  
     37   USE lib_mpp, only : mppscatter,mppgather  
     38#endif   
    3439 
    3540   IMPLICIT NONE 
     
    4247   PUBLIC   cpl_freq 
    4348   PUBLIC   cpl_finalize 
     49#if defined key_mpp_mpi  
     50   INCLUDE 'mpif.h'  
     51#endif  
     52     
     53   INTEGER, PARAMETER         :: localRoot  = 0  
     54   LOGICAL                    :: commRank            ! true for ranks doing OASIS communication  
     55#if defined key_cpl_rootexchg  
     56   LOGICAL                    :: rootexchg =.true.   ! logical switch   
     57#else  
     58   LOGICAL                    :: rootexchg =.false.  ! logical switch   
     59#endif   
    4460 
    4561   INTEGER, PUBLIC            ::   OASIS_Rcv  = 1    !: return code if received field 
     
    4763   INTEGER                    ::   ncomp_id          ! id returned by oasis_init_comp 
    4864   INTEGER                    ::   nerror            ! return error code 
    49 #if ! defined key_oasis3 
     65#if ! defined key_oasis3 && ! defined key_oasis3mct 
    5066   ! OASIS Variables not used. defined only for compilation purpose 
    5167   INTEGER                    ::   OASIS_Out         = -1 
     
    8399 
    84100   REAL(wp), DIMENSION(:,:), ALLOCATABLE ::   exfld   ! Temporary buffer for receiving 
     101   REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::   tbuf  ! Temporary buffer for sending / receiving   
     102   INTEGER, PUBLIC :: localComm   
    85103 
    86104   !!---------------------------------------------------------------------- 
     
    121139      IF ( nerror /= OASIS_Ok ) & 
    122140         CALL oasis_abort (ncomp_id, 'cpl_init','Failure in oasis_get_localcomm' ) 
     141      localComm = kl_comm 
    123142      ! 
    124143   END SUBROUTINE cpl_init 
     
    149168      IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~~~~~' 
    150169      IF(lwp) WRITE(numout,*) 
     170        
     171      commRank = .false.  
     172      IF ( rootexchg ) THEN  
     173         IF ( nproc == localRoot ) commRank = .true.  
     174      ELSE  
     175         commRank = .true.  
     176      ENDIF  
    151177 
    152178      ncplmodel = kcplmodel 
     
    172198      ishape(:,2) = (/ 1, nlej-nldj+1 /) 
    173199      ! 
    174       ! ... Allocate memory for data exchange 
    175       ! 
    176       ALLOCATE(exfld(nlei-nldi+1, nlej-nldj+1), stat = nerror) 
    177       IF( nerror > 0 ) THEN 
    178          CALL oasis_abort ( ncomp_id, 'cpl_define', 'Failure in allocating exfld')   ;   RETURN 
    179       ENDIF 
    180200      ! 
    181201      ! ----------------------------------------------------------------- 
    182202      ! ... Define the partition  
    183203      ! ----------------------------------------------------------------- 
     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   
    184214       
    185215      paral(1) = 2                                              ! box partitioning 
     
    196226      ENDIF 
    197227       
    198       CALL oasis_def_partition ( id_part, paral, nerror ) 
     228      ENDIF  
     229      IF ( commRank )  CALL oasis_def_partition ( id_part, paral, nerror )  
     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  
    199246      ! 
    200247      ! ... Announce send variables.  
     
    288335         ENDIF 
    289336      END DO 
     337      ! 
     338      ENDIF  ! commRank=true  
    290339       
    291340      !------------------------------------------------------------------ 
     
    293342      !------------------------------------------------------------------ 
    294343       
    295       CALL oasis_enddef(nerror) 
    296       IF( nerror /= OASIS_Ok )   CALL oasis_abort ( ncomp_id, 'cpl_define', 'Failure in oasis_enddef') 
     344      IF ( commRank ) THEN       
     345         CALL oasis_enddef(nerror)  
     346         IF( nerror /= OASIS_Ok )   CALL oasis_abort ( ncomp_id, 'cpl_define', 'Failure in oasis_enddef')  
     347      ENDIF  
    297348      ! 
    298349   END SUBROUTINE cpl_define 
     
    311362      REAL(wp), DIMENSION(:,:,:), INTENT(in   ) ::   pdata 
    312363      !! 
    313       INTEGER                                   ::   jc,jm     ! local loop index 
     364      INTEGER                                   ::   jn,jc,jm     ! local loop index 
    314365      !!-------------------------------------------------------------------- 
    315366      ! 
     
    320371         
    321372            IF( ssnd(kid)%nid(jc,jm) /= -1 ) THEN 
    322                CALL oasis_put ( ssnd(kid)%nid(jc,jm), kstep, pdata(nldi:nlei, nldj:nlej,jc), kinfo ) 
     373               IF ( rootexchg ) THEN  
     374                  !  
     375                  ! collect data on the local root process  
     376                  !  
     377                  CALL mppgather (pdata(:,:,jc),localRoot,tbuf)   
     378                  CALL mppsync   
     379                        
     380                  IF ( nproc == localRoot ) THEN  
     381                     DO jn = 1, jpnij  
     382                        exfld(nimppt(jn)-1+nldit(jn):nimppt(jn)+nleit(jn)-1,njmppt(jn)-1+nldjt(jn):njmppt(jn)+nlejt(jn)-1)= &  
     383                          tbuf(nldit(jn):nleit(jn),nldjt(jn):nlejt(jn),jn)  
     384                     ENDDO  
     385                     ! snd data to OASIS3  
     386                     CALL oasis_put ( ssnd(kid)%nid(jc,jm), kstep, exfld, kinfo )  
     387                  ENDIF  
     388               ELSE  
     389                  ! snd data to OASIS3  
     390                  CALL oasis_put ( ssnd(kid)%nid(jc,jm), kstep, pdata(nldi:nlei, nldj:nlej,jc), kinfo )  
     391               ENDIF  
    323392                
    324393               IF ( ln_ctl ) THEN         
     
    358427      INTEGER                   , INTENT(  out) ::   kinfo     ! OASIS3 info argument 
    359428      !! 
    360       INTEGER                                   ::   jc,jm     ! local loop index 
     429      INTEGER                                   ::   jn,jc,jm     ! local loop index 
    361430      LOGICAL                                   ::   llaction, llfisrt 
    362431      !!-------------------------------------------------------------------- 
     
    372441 
    373442            IF( srcv(kid)%nid(jc,jm) /= -1 ) THEN 
    374  
    375                CALL oasis_get ( srcv(kid)%nid(jc,jm), kstep, exfld, kinfo )          
     443               !  
     444               ! receive data from OASIS3  
     445               !  
     446               IF ( commRank )   CALL oasis_get ( srcv(kid)%nid(jc,jm), kstep, exfld, kinfo )  
     447               IF ( rootexchg )  CALL MPI_BCAST ( kinfo, 1, MPI_INTEGER, localRoot, localComm, nerror ) 
    376448                
    377449               llaction =  kinfo == OASIS_Recvd   .OR. kinfo == OASIS_FromRest .OR.   & 
     
    384456                  kinfo = OASIS_Rcv 
    385457                  IF( llfisrt ) THEN  
    386                      pdata(nldi:nlei,nldj:nlej,jc) =                                 exfld(:,:) * pmask(nldi:nlei,nldj:nlej,jm) 
     458                     IF ( rootexchg ) THEN  
     459                        ! distribute data to processes  
     460                        !  
     461                        IF ( nproc == localRoot ) THEN  
     462                           DO jn = 1, jpnij  
     463                              tbuf(nldit(jn):nleit(jn),nldjt(jn):nlejt(jn),jn)=          &  
     464                              exfld(nimppt(jn)-1+nldit(jn):nimppt(jn)+nleit(jn)-1,njmppt(jn)-1+nldjt(jn):njmppt(jn)+nlejt(jn)-1)  
     465                              ! NOTE: we are missing combining this with pmask (see else below)  
     466                           ENDDO  
     467                        ENDIF  
     468                        CALL mppscatter(tbuf,localRoot,pdata(:,:,jc))   
     469                        CALL mppsync  
     470                     ELSE  
     471                        pdata(nldi:nlei, nldj:nlej, jc) = exfld(:,:) * pmask(nldi:nlei,nldj:nlej,jm)  
     472                     ENDIF  
    387473                     llfisrt = .FALSE. 
    388474                  ELSE 
     
    462548#if defined key_oa3mct_v3 
    463549         CALL oasis_get_freqs(id, mop, 1, itmp, info) 
    464 #else 
     550#endif 
     551#if defined key_oasis3 
    465552         CALL oasis_get_freqs(id,      1, itmp, info) 
    466553#endif 
    467554         cpl_freq = itmp(1) 
     555#if defined key_oasis3mct 
     556         cpl_freq = namflddti( id ) 
     557#endif 
    468558      ENDIF 
    469559      ! 
     
    481571      ! 
    482572      DEALLOCATE( exfld ) 
     573      IF ( rootexchg ) DEALLOCATE ( tbuf ) 
    483574      IF (nstop == 0) THEN 
    484575         CALL oasis_terminate( nerror )          
     
    489580   END SUBROUTINE cpl_finalize 
    490581 
    491 #if ! defined key_oasis3 
     582#if ! defined key_oasis3 && ! defined key_oasis3mct 
    492583 
    493584   !!---------------------------------------------------------------------- 
  • branches/UKMO/r5936_hadgem3_mct/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_oce.F90

    r7127 r7129  
    3535   LOGICAL , PUBLIC ::   ln_blk_core    !: CORE bulk formulation 
    3636   LOGICAL , PUBLIC ::   ln_blk_mfs     !: MFS  bulk formulation 
    37 #if defined key_oasis3 
     37#if defined key_oasis3 || defined key_oasis3mct 
    3838   LOGICAL , PUBLIC ::   lk_oasis = .TRUE.  !: OASIS used 
    3939#else 
  • branches/UKMO/r5936_hadgem3_mct/NEMOGCM/NEMO/OPA_SRC/SBC/sbccpl.F90

    r7127 r7129  
    4141   USE timing          ! Timing 
    4242   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
     43#if defined key_oasis3 || defined key_oasis3mct  
     44   USE mod_oasis                    ! OASIS3-MCT module  
     45#endif  
    4346   USE eosbn2 
    4447   USE sbcrnf   , ONLY : l_rnfcpl 
  • branches/UKMO/r5936_hadgem3_mct/NEMOGCM/NEMO/OPA_SRC/step.F90

    r7127 r7129  
    329329                         CALL ctl_stop( 'step: indic < 0' ) 
    330330                         CALL dia_wri_state( 'output.abort', kstp ) 
     331                         CALL ctl_stop('STOP','NEMO failure in stp') 
    331332      ENDIF 
    332333      IF( kstp == nit000 )   THEN 
Note: See TracChangeset for help on using the changeset viewer.