Changeset 10392


Ignore:
Timestamp:
2018-12-14T15:18:47+01:00 (2 years ago)
Author:
jcastill
Message:

Merge branch r6232_hadgem3_mct@7457

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

Legend:

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

    r8058 r10392  
    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/AMM15_v3_6_STABLE_package_collate_coupling/NEMOGCM/NEMO/OPA_SRC/LBC/lib_mpp.F90

    r8058 r10392  
    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/AMM15_v3_6_STABLE_package_collate_coupling/NEMOGCM/NEMO/OPA_SRC/SBC/cpl_oasis3.F90

    r8058 r10392  
    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/AMM15_v3_6_STABLE_package_collate_coupling/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_oce.F90

    r8059 r10392  
    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/AMM15_v3_6_STABLE_package_collate_coupling/NEMOGCM/NEMO/OPA_SRC/SBC/sbccpl.F90

    r8058 r10392  
    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/AMM15_v3_6_STABLE_package_collate_coupling/NEMOGCM/NEMO/OPA_SRC/step.F90

    r9189 r10392  
    397397                               CALL ctl_stop( 'step: indic < 0' ) 
    398398                               CALL dia_wri_state( 'output.abort', kstp ) 
     399                               CALL ctl_stop('STOP','NEMO failure in stp') 
    399400      ENDIF 
    400401      IF( ln_harm_ana_store   )   CALL harm_ana( kstp )        ! Harmonic analysis of tides  
Note: See TracChangeset for help on using the changeset viewer.