Changeset 7457


Ignore:
Timestamp:
2016-12-06T15:40:58+01:00 (5 years ago)
Author:
jcastill
Message:

Changes as in /branches/UKMO/dev_r5107_hadgem3_mct

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

Legend:

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

    r7456 r7457  
    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/r6232_hadgem3_mct/NEMOGCM/NEMO/OPA_SRC/LBC/lib_mpp.F90

    r7456 r7457  
    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/r6232_hadgem3_mct/NEMOGCM/NEMO/OPA_SRC/SBC/cpl_oasis3.F90

    r7456 r7457  
    2424   !!   cpl_finalize : finalize the coupled mode communication 
    2525   !!---------------------------------------------------------------------- 
    26 #if defined key_oasis3 
     26#if defined key_oasis3 || defined key_oasis3mct 
    2727   USE mod_oasis                    ! OASIS3-MCT module 
    2828#endif 
     
    3232   USE lbclnk                       ! ocean lateral boundary conditions (or mpp link) 
    3333 
     34#if defined key_cpl_rootexchg   
     35   USE lib_mpp, only : mppsync   
     36   USE lib_mpp, only : mppscatter,mppgather   
     37#endif    
     38 
    3439   IMPLICIT NONE 
    3540   PRIVATE 
     
    4146   PUBLIC   cpl_freq 
    4247   PUBLIC   cpl_finalize 
     48#if defined key_mpp_mpi   
     49   INCLUDE 'mpif.h'   
     50#endif   
     51      
     52   INTEGER, PARAMETER         :: localRoot  = 0   
     53   LOGICAL                    :: commRank            ! true for ranks doing OASIS communication   
     54#if defined key_cpl_rootexchg   
     55   LOGICAL                    :: rootexchg =.true.   ! logical switch    
     56#else   
     57   LOGICAL                    :: rootexchg =.false.  ! logical switch    
     58#endif    
    4359 
    4460   INTEGER, PUBLIC            ::   OASIS_Rcv  = 1    !: return code if received field 
     
    4662   INTEGER                    ::   ncomp_id          ! id returned by oasis_init_comp 
    4763   INTEGER                    ::   nerror            ! return error code 
    48 #if ! defined key_oasis3 
     64#if ! defined key_oasis3 && ! defined key_oasis3mct 
    4965   ! OASIS Variables not used. defined only for compilation purpose 
    5066   INTEGER                    ::   OASIS_Out         = -1 
     
    8298 
    8399   REAL(wp), DIMENSION(:,:), ALLOCATABLE ::   exfld   ! Temporary buffer for receiving 
     100   REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::   tbuf  ! Temporary buffer for sending / receiving    
     101   INTEGER, PUBLIC :: localComm    
    84102 
    85103   !!---------------------------------------------------------------------- 
     
    120138      IF ( nerror /= OASIS_Ok ) & 
    121139         CALL oasis_abort (ncomp_id, 'cpl_init','Failure in oasis_get_localcomm' ) 
     140      localComm = kl_comm 
    122141      ! 
    123142   END SUBROUTINE cpl_init 
     
    149168      IF(lwp) WRITE(numout,*) 
    150169 
     170      commRank = .false.   
     171      IF ( rootexchg ) THEN   
     172         IF ( nproc == localRoot ) commRank = .true.   
     173      ELSE   
     174         commRank = .true.   
     175      ENDIF   
     176 
    151177      ncplmodel = kcplmodel 
    152178      IF( kcplmodel > nmaxcpl ) THEN 
     
    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      ! ----------------------------------------------------------------- 
     
    183203      ! ----------------------------------------------------------------- 
    184204       
     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    
    185214      paral(1) = 2                                              ! box partitioning 
    186215      paral(2) = jpiglo * (nldj-1+njmpp-1) + (nldi-1+nimpp-1)   ! NEMO lower left corner global offset     
     
    196225      ENDIF 
    197226       
    198       CALL oasis_def_partition ( id_part, paral, nerror ) 
     227      ENDIF 
     228      IF ( commRank )  CALL oasis_def_partition ( id_part, paral, nerror )   
     229       
     230      ! ... Allocate memory for data exchange   
     231      !   
     232      ALLOCATE(exfld(paral(3), paral(4)), stat = nerror)   
     233      IF( nerror > 0 ) THEN   
     234         CALL oasis_abort ( ncomp_id, 'cpl_define', 'Failure in allocating exfld')   ;   RETURN   
     235      ENDIF   
     236      IF ( rootexchg ) THEN   
     237         ! Should possibly use one of the work arrays for tbuf really   
     238         ALLOCATE(tbuf(jpi, jpj, jpnij), stat = nerror)   
     239         IF( nerror > 0 ) THEN   
     240            CALL oasis_abort ( ncomp_id, 'cpl_define', 'Failure in allocating tbuf') ; RETURN   
     241         ENDIF   
     242      ENDIF                
     243      !   
     244      IF (commRank ) THEN   
    199245      ! 
    200246      ! ... Announce send variables.  
     
    288334         ENDIF 
    289335      END DO 
     336      !  
     337      ENDIF  ! commRank=true   
    290338       
    291339      !------------------------------------------------------------------ 
     
    293341      !------------------------------------------------------------------ 
    294342       
    295       CALL oasis_enddef(nerror) 
    296       IF( nerror /= OASIS_Ok )   CALL oasis_abort ( ncomp_id, 'cpl_define', 'Failure in oasis_enddef') 
     343      IF ( commRank ) THEN        
     344         CALL oasis_enddef(nerror)   
     345         IF( nerror /= OASIS_Ok )   CALL oasis_abort ( ncomp_id, 'cpl_define', 'Failure in oasis_enddef')   
     346      ENDIF   
    297347      ! 
    298348   END SUBROUTINE cpl_define 
     
    311361      REAL(wp), DIMENSION(:,:,:), INTENT(in   ) ::   pdata 
    312362      !! 
    313       INTEGER                                   ::   jc,jm    ! local loop index 
     363      INTEGER                                   ::   jn, jc,jm ! local loop index 
    314364      !!-------------------------------------------------------------------- 
    315365      ! 
     
    320370         
    321371            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 ) 
     372               IF ( rootexchg ) THEN   
     373                  !   
     374                  ! collect data on the local root process   
     375                  !   
     376                  CALL mppgather (pdata(:,:,jc),localRoot,tbuf)    
     377                  CALL mppsync    
     378                         
     379                  IF ( nproc == localRoot ) THEN   
     380                     DO jn = 1, jpnij   
     381                        exfld(nimppt(jn)-1+nldit(jn):nimppt(jn)+nleit(jn)-1,njmppt(jn)-1+nldjt(jn):njmppt(jn)+nlejt(jn)-1)= &   
     382                          tbuf(nldit(jn):nleit(jn),nldjt(jn):nlejt(jn),jn)   
     383                     ENDDO   
     384                     ! snd data to OASIS3   
     385                     CALL oasis_put ( ssnd(kid)%nid(jc,jm), kstep, exfld, kinfo )   
     386                  ENDIF   
     387               ELSE   
     388                  ! snd data to OASIS3   
     389                  CALL oasis_put ( ssnd(kid)%nid(jc,jm), kstep, pdata(nldi:nlei, nldj:nlej,jc), kinfo )   
     390               ENDIF   
    323391                
    324392               IF ( ln_ctl ) THEN         
     
    358426      INTEGER                   , INTENT(  out) ::   kinfo     ! OASIS3 info argument 
    359427      !! 
    360       INTEGER                                   ::   jc,jm    ! local loop index 
     428      INTEGER                                   ::   jn, jc,jm ! local loop index 
    361429      LOGICAL                                   ::   llaction, llfisrt 
    362430      !!-------------------------------------------------------------------- 
     
    372440 
    373441            IF( srcv(kid)%nid(jc,jm) /= -1 ) THEN 
    374  
    375                CALL oasis_get ( srcv(kid)%nid(jc,jm), kstep, exfld, kinfo )          
     442               !   
     443               ! receive data from OASIS3   
     444               !   
     445               IF ( commRank )   CALL oasis_get ( srcv(kid)%nid(jc,jm), kstep, exfld, kinfo )   
     446               IF ( rootexchg )  CALL MPI_BCAST ( kinfo, 1, MPI_INTEGER, localRoot, localComm, nerror )  
    376447                
    377448               llaction =  kinfo == OASIS_Recvd   .OR. kinfo == OASIS_FromRest .OR.   & 
     
    384455                  kinfo = OASIS_Rcv 
    385456                  IF( llfisrt ) THEN  
    386                      pdata(nldi:nlei,nldj:nlej,jc) =                                 exfld(:,:) * pmask(nldi:nlei,nldj:nlej,jm) 
     457                     IF ( rootexchg ) THEN   
     458                        ! distribute data to processes   
     459                        !   
     460                        IF ( nproc == localRoot ) THEN   
     461                           DO jn = 1, jpnij   
     462                              tbuf(nldit(jn):nleit(jn),nldjt(jn):nlejt(jn),jn)=          &   
     463                              exfld(nimppt(jn)-1+nldit(jn):nimppt(jn)+nleit(jn)-1,njmppt(jn)-1+nldjt(jn):njmppt(jn)+nlejt(jn)-1)   
     464                              ! NOTE: we are missing combining this with pmask (see else below)   
     465                           ENDDO   
     466                        ENDIF   
     467                        CALL mppscatter(tbuf,localRoot,pdata(:,:,jc))    
     468                        CALL mppsync   
     469                     ELSE   
     470                        pdata(nldi:nlei, nldj:nlej, jc) = exfld(:,:) * pmask(nldi:nlei,nldj:nlej,jm)   
     471                     ENDIF   
    387472                     llfisrt = .FALSE. 
    388473                  ELSE 
     
    462547#if defined key_oa3mct_v3 
    463548         CALL oasis_get_freqs(id, mop, 1, itmp, info) 
    464 #else 
     549#endif  
     550#if defined key_oasis3  
    465551         CALL oasis_get_freqs(id,      1, itmp, info) 
    466552#endif 
    467553         cpl_freq = itmp(1) 
     554#if defined key_oasis3mct  
     555         cpl_freq = namflddti( id )  
     556#endif  
    468557      ENDIF 
    469558      ! 
     
    481570      ! 
    482571      DEALLOCATE( exfld ) 
     572      IF ( rootexchg ) DEALLOCATE ( tbuf ) 
    483573      IF (nstop == 0) THEN 
    484574         CALL oasis_terminate( nerror )          
     
    489579   END SUBROUTINE cpl_finalize 
    490580 
    491 #if ! defined key_oasis3 
     581#if ! defined key_oasis3 && ! defined key_oasis3mct 
    492582 
    493583   !!---------------------------------------------------------------------- 
  • branches/UKMO/r6232_hadgem3_mct/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_oce.F90

    r7456 r7457  
    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/r6232_hadgem3_mct/NEMOGCM/NEMO/OPA_SRC/SBC/sbccpl.F90

    r7456 r7457  
    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/r6232_hadgem3_mct/NEMOGCM/NEMO/OPA_SRC/step.F90

    r7456 r7457  
    360360                               CALL ctl_stop( 'step: indic < 0' ) 
    361361                               CALL dia_wri_state( 'output.abort', kstp ) 
     362                               CALL ctl_stop('STOP','NEMO failure in stp') 
    362363      ENDIF 
    363364      IF( kstp == nit000   )   THEN 
Note: See TracChangeset for help on using the changeset viewer.