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 13741 for NEMO/branches/2020/dev_r13383_HPC-02_Daley_Tiling/src/OCE – NEMO

Ignore:
Timestamp:
2020-11-06T14:50:17+01:00 (4 years ago)
Author:
hadcv
Message:

#2365: Merge in trunk changes to [13688] for src/cfgs

Location:
NEMO/branches/2020/dev_r13383_HPC-02_Daley_Tiling/src/OCE
Files:
24 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/dev_r13383_HPC-02_Daley_Tiling/src/OCE/BDY/bdyice.F90

    r13553 r13741  
    6161      !!---------------------------------------------------------------------- 
    6262      ! controls 
    63       IF( ln_timing    )   CALL timing_start('bdy_ice_thd')                                                            ! timing 
    64       IF( ln_icediachk )   CALL ice_cons_hsm(0,'bdy_ice_thd', rdiag_v, rdiag_s, rdiag_t, rdiag_fv, rdiag_fs, rdiag_ft) ! conservation 
    65       IF( ln_icediachk )   CALL ice_cons2D  (0,'bdy_ice_thd',  diag_v,  diag_s,  diag_t,  diag_fv,  diag_fs,  diag_ft) ! conservation 
     63      IF( ln_timing )   CALL timing_start('bdy_ice_thd')   ! timing 
    6664      ! 
    6765      CALL ice_var_glo2eqv 
     
    110108      ! 
    111109      ! controls 
    112       IF( ln_icectl    )   CALL ice_prt     ( kt, iiceprt, jiceprt, 1, ' - ice thermo bdy - ' )                        ! prints 
    113       IF( ln_icediachk )   CALL ice_cons_hsm(1,'bdy_ice_thd', rdiag_v, rdiag_s, rdiag_t, rdiag_fv, rdiag_fs, rdiag_ft) ! conservation 
    114       IF( ln_icediachk )   CALL ice_cons2D  (1,'bdy_ice_thd',  diag_v,  diag_s,  diag_t,  diag_fv,  diag_fs,  diag_ft) ! conservation 
    115       IF( ln_timing    )   CALL timing_stop ('bdy_ice_thd')                                                            ! timing 
     110      IF( ln_icectl )   CALL ice_prt     ( kt, iiceprt, jiceprt, 1, ' - ice thermo bdy - ' )   ! prints 
     111      IF( ln_timing )   CALL timing_stop ('bdy_ice_thd')                                       ! timing 
    116112      ! 
    117113   END SUBROUTINE bdy_ice 
  • NEMO/branches/2020/dev_r13383_HPC-02_Daley_Tiling/src/OCE/DIA/diaptr.F90

    r13552 r13741  
    4242   END INTERFACE 
    4343 
    44    PUBLIC   ptr_sj         ! call by tra_ldf & tra_adv routines 
    45    PUBLIC   ptr_sjk        !  
    46    PUBLIC   dia_ptr_init   ! call in memogcm 
    4744   PUBLIC   dia_ptr        ! call in step module 
    4845   PUBLIC   dia_ptr_hst    ! called from tra_ldf/tra_adv routines 
    4946 
    50    !                                  !!** namelist  namptr  ** 
    5147   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)   ::   hstr_adv, hstr_ldf, hstr_eiv   !: Heat/Salt TRansports(adv, diff, Bolus.) 
    5248   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)   ::   hstr_ove, hstr_btr, hstr_vtr   !: heat Salt TRansports(overturn, baro, merional) 
    5349   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) ::   pvtr_int, pzon_int             !: Other zonal integrals 
    5450 
    55    LOGICAL , PUBLIC ::   l_diaptr        !: tracers  trend flag (set from namelist in trdini) 
    56    INTEGER, PARAMETER, PUBLIC ::   nptr = 5  ! (glo, atl, pac, ind, ipc) 
    57    INTEGER, PARAMETER         ::   jp_msk = 3 
    58    INTEGER, PARAMETER         ::   jp_vtr = 4 
     51   LOGICAL, PUBLIC    ::   l_diaptr       !: tracers  trend flag 
     52   INTEGER, PARAMETER ::   jp_msk = 3 
     53   INTEGER, PARAMETER ::   jp_vtr = 4 
    5954 
    6055   REAL(wp) ::   rc_sv    = 1.e-6_wp   ! conversion from m3/s to Sverdrup 
     
    6560   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: btmsk34 ! mask out Southern Ocean (=0 south of 34°S) 
    6661 
    67    LOGICAL ::   ll_init = .TRUE.        !: tracers  trend flag (set from namelist in trdini) 
    68     
     62   LOGICAL ::   ll_init = .TRUE.        !: tracers  trend flag 
     63 
    6964   !! * Substitutions 
    7065#  include "do_loop_substitute.h90" 
     
    8984      IF( ln_timing )   CALL timing_start('dia_ptr') 
    9085 
    91       IF( kt == nit000 .AND. ll_init )   CALL dia_ptr_init 
     86      IF( kt == nit000 .AND. ll_init )   CALL dia_ptr_init    ! -> will define l_diaptr and nbasin 
    9287      ! 
    9388      IF( l_diaptr ) THEN 
     
    123118      ! 
    124119      !overturning calculation 
    125       REAL(wp), DIMENSION(jpj,jpk,nptr) :: sjk, r1_sjk, v_msf  ! i-mean i-k-surface and its inverse 
    126       REAL(wp), DIMENSION(jpj,jpk,nptr) :: zt_jk, zs_jk ! i-mean T and S, j-Stream-Function 
    127  
    128       REAL(wp), DIMENSION(jpi,jpj,jpk,nptr)  :: z4d1, z4d2 
    129       REAL(wp), DIMENSION(jpi,jpj,nptr)      :: z3dtr ! i-mean T and S, j-Stream-Function 
    130       !!---------------------------------------------------------------------- 
    131  
     120      REAL(wp), DIMENSION(:,:,:  ), ALLOCATABLE ::   sjk, r1_sjk, v_msf  ! i-mean i-k-surface and its inverse 
     121      REAL(wp), DIMENSION(:,:,:  ), ALLOCATABLE ::   zt_jk, zs_jk        ! i-mean T and S, j-Stream-Function 
     122 
     123      REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE ::   z4d1, z4d2 
     124      REAL(wp), DIMENSION(:,:,:  ), ALLOCATABLE ::   z3dtr 
     125      !!---------------------------------------------------------------------- 
     126      ! 
     127      ALLOCATE( z3dtr(jpi,jpj,nbasin) ) 
     128      ! 
    132129      IF( PRESENT( pvtr ) ) THEN 
    133130         IF( iom_use( 'zomsf' ) ) THEN    ! effective MSF 
    134             DO jn = 1, nptr                                    ! by sub-basins 
     131            ALLOCATE( z4d1(jpi,jpj,jpk,nbasin) ) 
     132            ! 
     133            DO jn = 1, nbasin                                    ! by sub-basins 
    135134               z4d1(1,:,:,jn) =  pvtr_int(:,:,jp_vtr,jn)                  ! zonal cumulative effective transport excluding closed seas 
    136135               DO jk = jpkm1, 1, -1 
     
    142141            END DO 
    143142            CALL iom_put( 'zomsf', z4d1 * rc_sv ) 
     143            ! 
     144            DEALLOCATE( z4d1 ) 
    144145         ENDIF 
    145146         IF( iom_use( 'sopstove' ) .OR. iom_use( 'sophtove' ) ) THEN 
    146             DO jn = 1, nptr 
     147            ALLOCATE( sjk(jpj,jpk,nbasin), r1_sjk(jpj,jpk,nbasin), v_msf(jpj,jpk,nbasin),   & 
     148               &      zt_jk(jpj,jpk,nbasin), zs_jk(jpj,jpk,nbasin) ) 
     149            ! 
     150            DO jn = 1, nbasin 
    147151               sjk(:,:,jn) = pvtr_int(:,:,jp_msk,jn) 
    148152               r1_sjk(:,:,jn) = 0._wp 
     
    156160               ! 
    157161            ENDDO 
    158             DO jn = 1, nptr 
     162            DO jn = 1, nbasin 
    159163               z3dtr(1,:,jn) = hstr_ove(:,jp_tem,jn) * rc_pwatt  !  (conversion in PW) 
    160164               DO ji = 1, jpi 
     
    163167            ENDDO 
    164168            CALL iom_put( 'sophtove', z3dtr ) 
    165             DO jn = 1, nptr 
     169            DO jn = 1, nbasin 
    166170               z3dtr(1,:,jn) = hstr_ove(:,jp_sal,jn) * rc_ggram !  (conversion in Gg) 
    167171               DO ji = 1, jpi 
     
    170174            ENDDO 
    171175            CALL iom_put( 'sopstove', z3dtr ) 
     176            ! 
     177            DEALLOCATE( sjk, r1_sjk, v_msf, zt_jk, zs_jk ) 
    172178         ENDIF 
    173179 
    174180         IF( iom_use( 'sopstbtr' ) .OR. iom_use( 'sophtbtr' ) ) THEN 
    175181            ! Calculate barotropic heat and salt transport here  
    176             DO jn = 1, nptr 
     182            ALLOCATE( sjk(jpj,1,nbasin), r1_sjk(jpj,1,nbasin) ) 
     183            ! 
     184            DO jn = 1, nbasin 
    177185               sjk(:,1,jn) = SUM( pvtr_int(:,:,jp_msk,jn), 2 ) 
    178186               r1_sjk(:,1,jn) = 0._wp 
     
    186194               ! 
    187195            ENDDO 
    188             DO jn = 1, nptr 
     196            DO jn = 1, nbasin 
    189197               z3dtr(1,:,jn) = hstr_btr(:,jp_tem,jn) * rc_pwatt  !  (conversion in PW) 
     198               ! TODO: Change these loop indices in the next commit 
    190199               DO ji = 1, jpi 
    191200                  z3dtr(ji,:,jn) = z3dtr(1,:,jn) 
     
    193202            ENDDO 
    194203            CALL iom_put( 'sophtbtr', z3dtr ) 
    195             DO jn = 1, nptr 
     204            DO jn = 1, nbasin 
    196205               z3dtr(1,:,jn) = hstr_btr(:,jp_sal,jn) * rc_ggram !  (conversion in Gg) 
    197206               DO ji = 1, jpi 
     
    200209            ENDDO 
    201210            CALL iom_put( 'sopstbtr', z3dtr ) 
    202          ENDIF  
     211            ! 
     212            DEALLOCATE( sjk, r1_sjk ) 
     213         ENDIF 
    203214         ! 
    204215         hstr_ove(:,:,:) = 0._wp       ! Zero before next timestep 
     
    207218      ELSE 
    208219         IF( iom_use( 'zotem' ) .OR. iom_use( 'zosal' ) .OR. iom_use( 'zosrf' )  ) THEN    ! i-mean i-k-surface 
    209             ! 
    210             DO jn = 1, nptr 
     220            ALLOCATE( z4d1(jpi,jpj,jpk,nbasin), z4d2(jpi,jpj,jpk,nbasin) ) 
     221            ! 
     222            DO jn = 1, nbasin 
    211223               z4d1(1,:,:,jn) = pzon_int(:,:,jp_msk,jn) 
    212224               DO ji = 2, jpi 
     
    216228            CALL iom_put( 'zosrf', z4d1 ) 
    217229            ! 
    218             DO jn = 1, nptr 
     230            DO jn = 1, nbasin 
    219231               z4d2(1,:,:,jn) = pzon_int(:,:,jp_tem,jn) / MAX( z4d1(1,:,:,jn), 10.e-15 ) 
    220232               DO ji = 2, jpi 
     
    224236            CALL iom_put( 'zotem', z4d2 ) 
    225237            ! 
    226             DO jn = 1, nptr 
     238            DO jn = 1, nbasin 
    227239               z4d2(1,:,:,jn) = pzon_int(:,:,jp_sal,jn) / MAX( z4d1(1,:,:,jn), 10.e-15 ) 
    228240               DO ji = 2, jpi 
     
    232244            CALL iom_put( 'zosal', z4d2 ) 
    233245            ! 
     246            DEALLOCATE( z4d1, z4d2 ) 
    234247         ENDIF 
    235248         ! 
     
    237250         IF( iom_use( 'sophtadv' ) .OR. iom_use( 'sopstadv' ) ) THEN   
    238251            !  
    239             DO jn = 1, nptr 
     252            DO jn = 1, nbasin 
    240253               z3dtr(1,:,jn) = hstr_adv(:,jp_tem,jn) * rc_pwatt  !  (conversion in PW) 
    241254               DO ji = 1, jpi 
     
    244257            ENDDO 
    245258            CALL iom_put( 'sophtadv', z3dtr ) 
    246             DO jn = 1, nptr 
     259            DO jn = 1, nbasin 
    247260               z3dtr(1,:,jn) = hstr_adv(:,jp_sal,jn) * rc_ggram !  (conversion in Gg) 
    248261               DO ji = 1, jpi 
     
    255268         IF( iom_use( 'sophtldf' ) .OR. iom_use( 'sopstldf' ) ) THEN   
    256269            !  
    257             DO jn = 1, nptr 
     270            DO jn = 1, nbasin 
    258271               z3dtr(1,:,jn) = hstr_ldf(:,jp_tem,jn) * rc_pwatt  !  (conversion in PW) 
    259272               DO ji = 1, jpi 
     
    262275            ENDDO 
    263276            CALL iom_put( 'sophtldf', z3dtr ) 
    264             DO jn = 1, nptr 
     277            DO jn = 1, nbasin 
    265278               z3dtr(1,:,jn) = hstr_ldf(:,jp_sal,jn) * rc_ggram !  (conversion in Gg) 
    266279               DO ji = 1, jpi 
     
    273286         IF( iom_use( 'sophteiv' ) .OR. iom_use( 'sopsteiv' ) ) THEN   
    274287            !  
    275             DO jn = 1, nptr 
     288            DO jn = 1, nbasin 
    276289               z3dtr(1,:,jn) = hstr_eiv(:,jp_tem,jn) * rc_pwatt  !  (conversion in PW) 
    277290               DO ji = 1, jpi 
     
    280293            ENDDO 
    281294            CALL iom_put( 'sophteiv', z3dtr ) 
    282             DO jn = 1, nptr 
     295            DO jn = 1, nbasin 
    283296               z3dtr(1,:,jn) = hstr_eiv(:,jp_sal,jn) * rc_ggram !  (conversion in Gg) 
    284297               DO ji = 1, jpi 
     
    290303         ! 
    291304         IF( iom_use( 'sopstvtr' ) .OR. iom_use( 'sophtvtr' ) ) THEN 
    292              DO jn = 1, nptr 
     305             DO jn = 1, nbasin 
    293306                z3dtr(1,:,jn) = hstr_vtr(:,jp_tem,jn) * rc_pwatt  !  (conversion in PW) 
    294307                DO ji = 1, jpi 
     
    297310             ENDDO 
    298311             CALL iom_put( 'sophtvtr', z3dtr ) 
    299              DO jn = 1, nptr 
     312             DO jn = 1, nbasin 
    300313               z3dtr(1,:,jn) = hstr_vtr(:,jp_sal,jn) * rc_ggram !  (conversion in Gg) 
    301314               DO ji = 1, jpi 
     
    322335         pzon_int(:,:,:,:) = 0._wp 
    323336      ENDIF 
     337      ! 
     338      DEALLOCATE( z3dtr ) 
     339      ! 
    324340   END SUBROUTINE dia_ptr_iom 
    325341 
     
    339355      INTEGER                     , INTENT(in)           :: Kmm          ! time level index 
    340356      REAL(wp), DIMENSION(ST_2D(nn_hls),jpk), INTENT(in), OPTIONAL :: pvtr         ! j-effective transport 
    341       REAL(wp), DIMENSION(ST_2D(nn_hls),jpk)                       :: zmask        ! 3D workspace 
    342       REAL(wp), DIMENSION(ST_2D(nn_hls),jpk,jpts)                  :: zts          ! 4D workspace 
    343       REAL(wp), DIMENSION(ST_1Dj(nn_hls),jpk,nptr)                 :: sjk, v_msf   ! Zonal sum: i-k surface area, j-effective transport 
    344       REAL(wp), DIMENSION(ST_1Dj(nn_hls),jpk,nptr)                 :: zt_jk, zs_jk ! Zonal sum: i-k surface area * (T, S) 
     357      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE            :: zmask        ! 3D workspace 
     358      REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE          :: zts          ! 4D workspace 
     359      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE            :: sjk, v_msf   ! Zonal sum: i-k surface area, j-effective transport 
     360      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE            :: zt_jk, zs_jk ! Zonal sum: i-k surface area * (T, S) 
    345361      REAL(wp)                                           :: zsfc, zvfc   ! i-k surface area 
    346362      INTEGER  ::   ji, jj, jk, jn                                       ! dummy loop indices 
     
    350366         ! i sum of effective j transport excluding closed seas 
    351367         IF( iom_use( 'zomsf' ) .OR. iom_use( 'sopstove' ) .OR. iom_use( 'sophtove' ) ) THEN 
    352             DO jn = 1, nptr 
     368            ALLOCATE( v_msf(ST_1Dj(nn_hls),jpk,nbasin) ) 
     369 
     370            DO jn = 1, nbasin 
    353371               v_msf(:,:,jn) = ptr_sjk( pvtr(:,:,:), btmsk34(:,:,jn) ) 
    354372            ENDDO 
    355373 
    356374            CALL ptr_sum( pvtr_int(:,:,jp_vtr,:), v_msf(:,:,:) ) 
     375 
     376            DEALLOCATE( v_msf ) 
    357377         ENDIF 
    358378 
     
    360380         IF(  iom_use( 'sopstove' ) .OR. iom_use( 'sophtove' ) .OR.   & 
    361381            & iom_use( 'sopstbtr' ) .OR. iom_use( 'sophtbtr' ) ) THEN 
     382            ALLOCATE( zmask(ST_2D(nn_hls),jpk), zts(ST_2D(nn_hls),jpk,jpts), & 
     383               &      sjk(ST_1Dj(nn_hls),jpk,nbasin), & 
     384               &      zt_jk(ST_1Dj(nn_hls),jpk,nbasin), zs_jk(ST_1Dj(nn_hls),jpk,nbasin) ) 
     385 
    362386            zmask(:,:,:) = 0._wp 
    363387            zts(:,:,:,:) = 0._wp 
     
    370394            END_3D 
    371395 
    372             DO jn = 1, nptr 
     396            DO jn = 1, nbasin 
    373397               sjk(:,:,jn)   = ptr_sjk( zmask(:,:,:)     , btmsk(:,:,jn) ) 
    374398               zt_jk(:,:,jn) = ptr_sjk( zts(:,:,:,jp_tem), btmsk(:,:,jn) ) 
     
    379403            CALL ptr_sum( pvtr_int(:,:,jp_tem,:), zt_jk(:,:,:) ) 
    380404            CALL ptr_sum( pvtr_int(:,:,jp_sal,:), zs_jk(:,:,:) ) 
     405 
     406            DEALLOCATE( zmask, zts, sjk, zt_jk, zs_jk ) 
    381407         ENDIF 
    382408      ELSE 
    383409         ! i sum of j surface area - temperature/salinity product on T grid 
    384410         IF( iom_use( 'zotem' ) .OR. iom_use( 'zosal' ) .OR. iom_use( 'zosrf' )  ) THEN 
     411            ALLOCATE( zmask(ST_2D(nn_hls),jpk), zts(ST_2D(nn_hls),jpk,jpts), & 
     412               &      sjk(ST_1Dj(nn_hls),jpk,nbasin), & 
     413               &      zt_jk(ST_1Dj(nn_hls),jpk,nbasin), zs_jk(ST_1Dj(nn_hls),jpk,nbasin) ) 
     414 
    385415            zmask(:,:,:) = 0._wp 
    386416            zts(:,:,:,:) = 0._wp 
     
    393423            END_3D 
    394424 
    395             DO jn = 1, nptr 
     425            DO jn = 1, nbasin 
    396426               sjk(:,:,jn)   = ptr_sjk( zmask(:,:,:)     , btmsk(:,:,jn) ) 
    397427               zt_jk(:,:,jn) = ptr_sjk( zts(:,:,:,jp_tem), btmsk(:,:,jn) ) 
     
    402432            CALL ptr_sum( pzon_int(:,:,jp_tem,:), zt_jk(:,:,:) ) 
    403433            CALL ptr_sum( pzon_int(:,:,jp_sal,:), zs_jk(:,:,:) ) 
     434 
     435            DEALLOCATE( zmask, zts, sjk, zt_jk, zs_jk ) 
    404436         ENDIF 
    405437 
    406438         ! i-k sum of j surface area - temperature/salinity product on V grid 
    407439         IF( iom_use( 'sopstvtr' ) .OR. iom_use( 'sophtvtr' ) ) THEN 
     440            ALLOCATE( zts(ST_2D(nn_hls),jpk,jpts) ) 
     441 
    408442            zts(:,:,:,:) = 0._wp 
    409443 
     
    416450            CALL dia_ptr_hst( jp_tem, 'vtr', zts(:,:,:,jp_tem) ) 
    417451            CALL dia_ptr_hst( jp_sal, 'vtr', zts(:,:,:,jp_sal) ) 
     452 
     453            DEALLOCATE( zts ) 
    418454         ENDIF 
    419455      ENDIF 
     
    425461      !!                  ***  ROUTINE dia_ptr_init  *** 
    426462      !!                    
    427       !! ** Purpose :   Initialization, namelist read 
     463      !! ** Purpose :   Initialization 
    428464      !!---------------------------------------------------------------------- 
    429465      INTEGER ::  inum, jn           ! local integers 
     
    432468      !!---------------------------------------------------------------------- 
    433469 
    434       l_diaptr = .FALSE. 
    435       IF(   iom_use( 'zomsf'    ) .OR. iom_use( 'zotem'    ) .OR. iom_use( 'zosal'    ) .OR.  & 
    436          &  iom_use( 'zosrf'    ) .OR. iom_use( 'sopstove' ) .OR. iom_use( 'sophtove' ) .OR.  & 
    437          &  iom_use( 'sopstbtr' ) .OR. iom_use( 'sophtbtr' ) .OR. iom_use( 'sophtadv' ) .OR.  & 
    438          &  iom_use( 'sopstadv' ) .OR. iom_use( 'sophtldf' ) .OR. iom_use( 'sopstldf' ) .OR.  &  
    439          &  iom_use( 'sophteiv' ) .OR. iom_use( 'sopsteiv' ) .OR. iom_use( 'sopstvtr' ) .OR.  & 
    440          &  iom_use( 'sophtvtr' ) .OR. iom_use( 'uocetr_vsum_cumul' ) )  l_diaptr  = .TRUE. 
    441  
     470      ! l_diaptr is defined with iom_use 
     471      !   --> dia_ptr_init must be done after the call to iom_init 
     472      !   --> cannot be .TRUE. without cpp key: key_iom -->  nbasin define by iom_init is initialized 
     473      l_diaptr = iom_use( 'zomsf'    ) .OR. iom_use( 'zotem'    ) .OR. iom_use( 'zosal'    ) .OR.  & 
     474         &       iom_use( 'zosrf'    ) .OR. iom_use( 'sopstove' ) .OR. iom_use( 'sophtove' ) .OR.  & 
     475         &       iom_use( 'sopstbtr' ) .OR. iom_use( 'sophtbtr' ) .OR. iom_use( 'sophtadv' ) .OR.  & 
     476         &       iom_use( 'sopstadv' ) .OR. iom_use( 'sophtldf' ) .OR. iom_use( 'sopstldf' ) .OR.  & 
     477         &       iom_use( 'sophteiv' ) .OR. iom_use( 'sopsteiv' ) .OR. iom_use( 'sopstvtr' ) .OR.  & 
     478         &       iom_use( 'sophtvtr' ) .OR. iom_use( 'uocetr_vsum_cumul' ) 
    442479  
    443480      IF(lwp) THEN                     ! Control print 
     
    445482         WRITE(numout,*) 'dia_ptr_init : poleward transport and msf initialization' 
    446483         WRITE(numout,*) '~~~~~~~~~~~~' 
    447          WRITE(numout,*) '   Namelist namptr : set ptr parameters' 
    448484         WRITE(numout,*) '      Poleward heat & salt transport (T) or not (F)      l_diaptr  = ', l_diaptr 
    449485      ENDIF 
     
    452488         ! 
    453489         IF( dia_ptr_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'dia_ptr_init : unable to allocate arrays' ) 
    454  
     490         ! 
    455491         rc_pwatt = rc_pwatt * rho0_rcp          ! conversion from K.s-1 to PetaWatt 
    456492         rc_ggram = rc_ggram * rho0              ! conversion from m3/s to Gg/s 
     
    458494         IF( lk_mpp )   CALL mpp_ini_znl( numout )     ! Define MPI communicator for zonal sum 
    459495 
    460          btmsk(:,:,:) = 0._wp 
    461          btmsk(:,:,1) = tmask_i(:,:) 
    462          CALL iom_open( 'subbasins', inum,  ldstop = .FALSE.  ) 
    463          CALL iom_get( inum, jpdom_global, 'atlmsk', btmsk(:,:,2) )   ! Atlantic basin 
    464          CALL iom_get( inum, jpdom_global, 'pacmsk', btmsk(:,:,3) )   ! Pacific  basin 
    465          CALL iom_get( inum, jpdom_global, 'indmsk', btmsk(:,:,4) )   ! Indian   basin 
    466          CALL iom_close( inum ) 
    467          btmsk(:,:,5) = MAX ( btmsk(:,:,3), btmsk(:,:,4) )          ! Indo-Pacific basin 
    468          DO jn = 2, nptr 
    469             btmsk(:,:,jn) = btmsk(:,:,jn) * tmask_i(:,:)               ! interior domain only 
     496         btmsk(:,:,1) = tmask_i(:,:)                  
     497         IF( nbasin == 5 ) THEN   ! nbasin has been initialized in iom_init to define the axis "basin" 
     498            CALL iom_open( 'subbasins', inum ) 
     499            CALL iom_get( inum, jpdom_global, 'atlmsk', btmsk(:,:,2) )   ! Atlantic basin 
     500            CALL iom_get( inum, jpdom_global, 'pacmsk', btmsk(:,:,3) )   ! Pacific  basin 
     501            CALL iom_get( inum, jpdom_global, 'indmsk', btmsk(:,:,4) )   ! Indian   basin 
     502            CALL iom_close( inum ) 
     503            btmsk(:,:,5) = MAX ( btmsk(:,:,3), btmsk(:,:,4) )            ! Indo-Pacific basin 
     504         ENDIF 
     505         DO jn = 2, nbasin 
     506            btmsk(:,:,jn) = btmsk(:,:,jn) * tmask_i(:,:)                 ! interior domain only 
    470507         END DO 
    471508         ! JD : modification so that overturning streamfunction is available in Atlantic at 34S to compare with observations 
     
    476513         END WHERE 
    477514         btmsk34(:,:,1) = btmsk(:,:,1)                  
    478          DO jn = 2, nptr 
    479             btmsk34(:,:,jn) = btmsk(:,:,jn) * zmsk(:,:)               ! interior domain only 
     515         DO jn = 2, nbasin 
     516            btmsk34(:,:,jn) = btmsk(:,:,jn) * zmsk(:,:)                  ! interior domain only 
    480517         ENDDO 
    481518 
     
    508545      CHARACTER(len=3)                , INTENT(in)   :: cptr  ! transport type  'adv'/'ldf'/'eiv' 
    509546      REAL(wp), DIMENSION(ST_2D(nn_hls),jpk)    , INTENT(in)   :: pvflx ! 3D input array of advection/diffusion 
    510       REAL(wp), DIMENSION(ST_1Dj(nn_hls),nptr)                 :: zsj   ! 
     547      REAL(wp), DIMENSION(ST_1Dj(nn_hls),nbasin)                 :: zsj   ! 
    511548      INTEGER                                        :: jn    ! 
    512549 
    513       DO jn = 1, nptr 
     550      DO jn = 1, nbasin 
    514551         zsj(:,jn) = ptr_sj( pvflx(:,:,:), btmsk(:,:,jn) ) 
    515552      ENDDO 
     
    536573      !!                    ***  ROUTINE ptr_sum_2d *** 
    537574      !!---------------------------------------------------------------------- 
    538       !! ** Purpose : Add two 2D arrays with (j,nptr) dimensions 
     575      !! ** Purpose : Add two 2D arrays with (j,nbasin) dimensions 
    539576      !! 
    540577      !! ** Method  : - phstr = phstr + pva 
     
    543580      !! ** Action  : phstr 
    544581      !!---------------------------------------------------------------------- 
    545       REAL(wp), DIMENSION(jpj,nptr) , INTENT(inout)         ::  phstr  ! 
    546       REAL(wp), DIMENSION(ST_1Dj(nn_hls),nptr), INTENT(in)            ::  pva    ! 
     582      REAL(wp), DIMENSION(jpj,nbasin) , INTENT(inout)         ::  phstr  ! 
     583      REAL(wp), DIMENSION(ST_1Dj(nn_hls),nbasin), INTENT(in)            ::  pva    ! 
    547584      INTEGER                                               ::  jj 
    548585#if defined key_mpp_mpi 
    549       INTEGER, DIMENSION(1)          ::  ish1d 
    550       INTEGER, DIMENSION(2)          ::  ish2d 
    551       REAL(wp), DIMENSION(jpj*nptr) ::  zwork 
     586      INTEGER, DIMENSION(1)           ::  ish1d 
     587      INTEGER, DIMENSION(2)           ::  ish2d 
     588      REAL(wp), DIMENSION(jpj*nbasin) ::  zwork 
    552589#endif 
    553590 
     
    558595#if defined key_mpp_mpi 
    559596      IF( ntile == 0 .OR. ntile == nijtile ) THEN 
    560          ish1d(1) = jpj*nptr 
    561          ish2d(1) = jpj ; ish2d(2) = nptr 
     597         ish1d(1) = jpj*nbasin 
     598         ish2d(1) = jpj ; ish2d(2) = nbasin 
    562599         zwork(:) = RESHAPE( phstr(:,:), ish1d ) 
    563600         CALL mpp_sum( 'diaptr', zwork, ish1d(1), ncomm_znl ) 
     
    572609      !!                    ***  ROUTINE ptr_sum_3d *** 
    573610      !!---------------------------------------------------------------------- 
    574       !! ** Purpose : Add two 3D arrays with (j,k,nptr) dimensions 
     611      !! ** Purpose : Add two 3D arrays with (j,k,nbasin) dimensions 
    575612      !! 
    576613      !! ** Method  : - phstr = phstr + pva 
     
    579616      !! ** Action  : phstr 
    580617      !!---------------------------------------------------------------------- 
    581       REAL(wp), DIMENSION(jpj,jpk,nptr) , INTENT(inout)     ::  phstr  ! 
    582       REAL(wp), DIMENSION(ST_1Dj(nn_hls),jpk,nptr), INTENT(in)        ::  pva    ! 
     618      REAL(wp), DIMENSION(jpj,jpk,nbasin) , INTENT(inout)     ::  phstr  ! 
     619      REAL(wp), DIMENSION(ST_1Dj(nn_hls),jpk,nbasin), INTENT(in)        ::  pva    ! 
    583620      INTEGER                                               ::  jj, jk 
    584621#if defined key_mpp_mpi 
    585622      INTEGER, DIMENSION(1)              ::  ish1d 
    586623      INTEGER, DIMENSION(3)              ::  ish3d 
    587       REAL(wp), DIMENSION(jpj*jpk*nptr)  ::  zwork 
     624      REAL(wp), DIMENSION(jpj*jpk*nbasin)  ::  zwork 
    588625#endif 
    589626 
     
    596633#if defined key_mpp_mpi 
    597634      IF( ntile == 0 .OR. ntile == nijtile ) THEN 
    598          ish1d(1) = jpj*jpk*nptr 
    599          ish3d(1) = jpj ; ish3d(2) = jpk ; ish3d(3) = nptr 
     635         ish1d(1) = jpj*jpk*nbasin 
     636         ish3d(1) = jpj ; ish3d(2) = jpk ; ish3d(3) = nbasin 
    600637         zwork(:) = RESHAPE( phstr(:,:,:), ish1d ) 
    601638         CALL mpp_sum( 'diaptr', zwork, ish1d(1), ncomm_znl ) 
     
    615652      ierr(:) = 0 
    616653      ! 
     654      ! nbasin has been initialized in iom_init to define the axis "basin" 
     655      ! 
    617656      IF( .NOT. ALLOCATED( btmsk ) ) THEN 
    618          ALLOCATE( btmsk(jpi,jpj,nptr)    , btmsk34(jpi,jpj,nptr),   & 
    619             &      hstr_adv(jpj,jpts,nptr), hstr_eiv(jpj,jpts,nptr), & 
    620             &      hstr_ove(jpj,jpts,nptr), hstr_btr(jpj,jpts,nptr), & 
    621             &      hstr_ldf(jpj,jpts,nptr), hstr_vtr(jpj,jpts,nptr), STAT=ierr(1)  ) 
    622             ! 
    623          ALLOCATE( pvtr_int(jpj,jpk,jpts+2,nptr), & 
    624             &      pzon_int(jpj,jpk,jpts+1,nptr), STAT=ierr(2) ) 
     657         ALLOCATE( btmsk(jpi,jpj,nbasin)    , btmsk34(jpi,jpj,nbasin),   & 
     658            &      hstr_adv(jpj,jpts,nbasin), hstr_eiv(jpj,jpts,nbasin), & 
     659            &      hstr_ove(jpj,jpts,nbasin), hstr_btr(jpj,jpts,nbasin), & 
     660            &      hstr_ldf(jpj,jpts,nbasin), hstr_vtr(jpj,jpts,nbasin), STAT=ierr(1)  ) 
     661            ! 
     662         ALLOCATE( pvtr_int(jpj,jpk,jpts+2,nbasin), & 
     663            &      pzon_int(jpj,jpk,jpts+1,nbasin), STAT=ierr(2) ) 
    625664         ! 
    626665         dia_ptr_alloc = MAXVAL( ierr ) 
  • NEMO/branches/2020/dev_r13383_HPC-02_Daley_Tiling/src/OCE/DIU/diu_bulk.F90

    r13295 r13741  
    2222    
    2323   ! Namelist parameters 
    24    LOGICAL, PUBLIC :: ln_diurnal 
    25    LOGICAL, PUBLIC :: ln_diurnal_only 
     24   LOGICAL, PUBLIC :: ln_diurnal      = .false.   ! force definition if diurnal_sst_bulk_init is not called 
     25   LOGICAL, PUBLIC :: ln_diurnal_only = .false.   ! force definition if diurnal_sst_bulk_init is not called 
    2626 
    2727   ! Parameters 
  • NEMO/branches/2020/dev_r13383_HPC-02_Daley_Tiling/src/OCE/DOM/closea.F90

    r13286 r13741  
    3838   LOGICAL, PUBLIC :: ln_clo_rnf       !: closed sea treated as runoff (update rnf mask) 
    3939 
    40    LOGICAL, PUBLIC :: l_sbc_clo  !: T => net evap/precip over closed seas spread outover the globe/river mouth 
    41    LOGICAL, PUBLIC :: l_clo_rnf  !: T => Some closed seas output freshwater (RNF) to specified runoff points. 
    42  
    43    INTEGER, PUBLIC :: ncsg      !: number of closed seas global mappings (inferred from closea_mask_glo field) 
    44    INTEGER, PUBLIC :: ncsr      !: number of closed seas rnf    mappings (inferred from closea_mask_rnf field) 
    45    INTEGER, PUBLIC :: ncse      !: number of closed seas empmr  mappings (inferred from closea_mask_emp field) 
     40   ! WARNING: keep default definitions in the following lines as dom_clo is called only if ln_closea = .true. 
     41   LOGICAL, PUBLIC :: l_sbc_clo = .FALSE.   !: T => net evap/precip over closed seas spread outover the globe/river mouth 
     42   LOGICAL, PUBLIC :: l_clo_rnf = .FALSE.   !: T => Some closed seas output freshwater (RNF) to specified runoff points. 
     43 
     44   INTEGER, PUBLIC :: ncsg = 0   !: number of closed seas global mappings (inferred from closea_mask_glo field) 
     45   INTEGER, PUBLIC :: ncsr = 0   !: number of closed seas rnf    mappings (inferred from closea_mask_rnf field) 
     46   INTEGER, PUBLIC :: ncse = 0   !: number of closed seas empmr  mappings (inferred from closea_mask_emp field) 
    4647 
    4748   INTEGER, PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:,:) :: mask_opnsea, mask_csundef  !: mask defining the open sea and the undefined closed sea 
  • NEMO/branches/2020/dev_r13383_HPC-02_Daley_Tiling/src/OCE/DOM/daymod.F90

    r13286 r13741  
    8282      ndt05   = NINT( 0.5 * rn_Dt  ) 
    8383 
    84       IF( .NOT. l_offline )   CALL day_rst( nit000, 'READ' ) 
    85  
     84      lrst_oce = .NOT. l_offline   ! force definition of offline 
     85      IF( lrst_oce )   CALL day_rst( nit000, 'READ' ) 
     86       
    8687      ! set the calandar from ndastp (read in restart file and namelist) 
    8788      nyear   =   ndastp / 10000 
  • NEMO/branches/2020/dev_r13383_HPC-02_Daley_Tiling/src/OCE/DOM/dom_oce.F90

    r13514 r13741  
    230230 
    231231   !!---------------------------------------------------------------------- 
     232   !! variable defined here to avoid circular dependencies... 
     233   !! --------------------------------------------------------------------- 
     234   INTEGER, PUBLIC ::   nbasin         ! number of basin to be considered in diaprt (glo, atl, pac, ind, ipc) 
     235 
     236   !!---------------------------------------------------------------------- 
    232237   !! agrif domain 
    233238   !!---------------------------------------------------------------------- 
  • NEMO/branches/2020/dev_r13383_HPC-02_Daley_Tiling/src/OCE/DOM/domain.F90

    r13553 r13741  
    121121         WRITE(numout,*)     '         cn_cfg = ', TRIM( cn_cfg ), '   nn_cfg = ', nn_cfg 
    122122      ENDIF 
    123       nn_wxios = 0 
    124       ln_xios_read = .FALSE. 
    125123      ! 
    126124      !           !==  Reference coordinate system  ==! 
  • NEMO/branches/2020/dev_r13383_HPC-02_Daley_Tiling/src/OCE/DYN/divhor.F90

    r13553 r13741  
    7878      ! 
    7979      DO_3D( 0, 0, 0, 0, 1, jpkm1 )                                    !==  Horizontal divergence  ==! 
    80          hdiv(ji,jj,jk) = (  e2u(ji  ,jj) * e3u(ji  ,jj,jk,Kmm) * uu(ji  ,jj,jk,Kmm)      & 
     80         hdiv(ji,jj,jk) = (   e2u(ji  ,jj) * e3u(ji  ,jj,jk,Kmm) * uu(ji  ,jj,jk,Kmm)      & 
    8181            &               - e2u(ji-1,jj) * e3u(ji-1,jj,jk,Kmm) * uu(ji-1,jj,jk,Kmm)      & 
    8282            &               + e1v(ji,jj  ) * e3v(ji,jj  ,jk,Kmm) * vv(ji,jj  ,jk,Kmm)      & 
  • NEMO/branches/2020/dev_r13383_HPC-02_Daley_Tiling/src/OCE/DYN/wet_dry.F90

    r13553 r13741  
    5757   REAL(wp), PUBLIC  ::   ssh_ref     !: height of z=0 with respect to the geoid;  
    5858 
    59    LOGICAL,  PUBLIC  ::   ll_wd       !: Wetting/drying activation switch if either ln_wd_il or ln_wd_dl 
     59   LOGICAL,  PUBLIC  ::   ll_wd = .FALSE. !: Wetting/drying activation switch (ln_wd_il or ln_wd_dl) <- default def if wad_init not called 
    6060 
    6161   PUBLIC   wad_init                  ! initialisation routine called by step.F90 
     
    111111 
    112112      r_rn_wdmin1 = 1 / rn_wdmin1 
    113       ll_wd = .FALSE. 
    114113      IF( ln_wd_il .OR. ln_wd_dl ) THEN 
    115114         ll_wd = .TRUE. 
  • NEMO/branches/2020/dev_r13383_HPC-02_Daley_Tiling/src/OCE/FLO/flo_oce.F90

    r11536 r13741  
    1919   !! ---------------- 
    2020   LOGICAL, PUBLIC ::   ln_floats   !: Activate floats or not 
    21    INTEGER, PUBLIC ::   jpnfl       !: total number of floats during the run 
     21   INTEGER, PUBLIC ::   jpnfl = 0   !: total number of floats during the run 
    2222   INTEGER, PUBLIC ::   jpnnewflo   !: number of floats added in a new run 
    2323   INTEGER, PUBLIC ::   jpnrstflo   !: number of floats for the restart 
  • NEMO/branches/2020/dev_r13383_HPC-02_Daley_Tiling/src/OCE/ICB/icbtrj.F90

    r13062 r13741  
    3535   PUBLIC   icb_trj_end     ! routine called in icbstp.F90 module 
    3636 
    37    INTEGER ::   num_traj 
     37   INTEGER ::   num_traj = 0 
    3838   INTEGER ::   n_dim, m_dim 
    3939   INTEGER ::   ntrajid 
  • NEMO/branches/2020/dev_r13383_HPC-02_Daley_Tiling/src/OCE/IOM/iom.F90

    r13553 r13741  
    123123      REAL(wp), DIMENSION(2,jpkam1)         :: za_bnds   ! ABL vertical boundaries 
    124124      LOGICAL ::   ll_closedef = .TRUE. 
     125      LOGICAL ::   ll_exist 
    125126      !!---------------------------------------------------------------------- 
    126127      ! 
     
    230231          CALL iom_set_axis_attr( "ghw_abl", bounds=za_bnds ) 
    231232 
    232           CALL iom_set_axis_attr( "nfloat", (/ (REAL(ji,wp), ji=1,jpnfl) /) ) 
     233          CALL iom_set_axis_attr(  "nfloat", (/ (REAL(ji,wp), ji=1,jpnfl) /) ) 
    233234# if defined key_si3 
    234235          CALL iom_set_axis_attr( "ncatice", (/ (REAL(ji,wp), ji=1,jpl) /) ) 
     
    243244          CALL iom_set_axis_attr( "iax_26C", (/ REAL(26,wp) /) )   ! strange syntaxe and idea... 
    244245          CALL iom_set_axis_attr( "iax_28C", (/ REAL(28,wp) /) )   ! strange syntaxe and idea... 
    245           CALL iom_set_axis_attr( "basin"  , (/ (REAL(ji,wp), ji=1,5) /) ) 
     246          ! for diaprt, we need to define an axis which size can be 1 (default) or 5 (if the file subbasins.nc exists) 
     247          INQUIRE( FILE = 'subbasins.nc', EXIST = ll_exist ) 
     248          nbasin = 1 + 4 * COUNT( (/ll_exist/) ) 
     249          CALL iom_set_axis_attr( "basin"  , (/ (REAL(ji,wp), ji=1,nbasin) /) ) 
    246250      ENDIF 
    247251      ! 
  • NEMO/branches/2020/dev_r13383_HPC-02_Daley_Tiling/src/OCE/IOM/iom_def.F90

    r13286 r13741  
    3333   INTEGER, PUBLIC            ::   iom_open_init = 0   !: used to initialize iom_file(:)%nfid to 0 
    3434!XIOS write restart    
    35    LOGICAL, PUBLIC            ::   lwxios          !: write single file restart using XIOS 
    36    INTEGER, PUBLIC            ::   nxioso          !: type of restart file when writing using XIOS 1 - single, 2 - multiple 
     35   LOGICAL, PUBLIC            ::   lwxios = .FALSE.    !: write single file restart using XIOS 
     36   INTEGER, PUBLIC            ::   nxioso = 0          !: type of restart file when writing using XIOS 1 - single, 2 - multiple 
    3737!XIOS read restart    
    38    LOGICAL, PUBLIC            ::   lrxios          !: read single file restart using XIOS 
     38   LOGICAL, PUBLIC            ::   lrxios = .FALSE.     !: read single file restart using XIOS 
    3939   LOGICAL, PUBLIC            ::   lxios_sini = .FALSE. ! is restart in a single file 
    4040   LOGICAL, PUBLIC            ::   lxios_set  = .FALSE.  
  • NEMO/branches/2020/dev_r13383_HPC-02_Daley_Tiling/src/OCE/ISF/isf_oce.F90

    r12077 r13741  
    7474   ! 
    7575   ! 2.1 -------- ice shelf cavity parameter -------------- 
    76    LOGICAL , PUBLIC            :: l_isfoasis 
     76   LOGICAL , PUBLIC            :: l_isfoasis = .FALSE. 
    7777   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)    ::   risfload                    !: ice shelf load 
    7878   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)    ::   fwfisf_oasis 
  • NEMO/branches/2020/dev_r13383_HPC-02_Daley_Tiling/src/OCE/LBC/lib_mpp.F90

    r13553 r13741  
    511511            ALLOCATE(todelay(idvar)%y1d(isz)) 
    512512            todelay(idvar)%y1d(:) = CMPLX(todelay(idvar)%z1d(:), 0., wp)   ! create %y1d, complex variable needed by mpi_sumdd 
     513            ndelayid(idvar) = MPI_REQUEST_NULL                             ! initialised request to a valid value 
    513514         END IF 
    514515      ENDIF 
     
    518519         ALLOCATE(todelay(idvar)%z1d(isz), todelay(idvar)%y1d(isz))   ! allocate also %z1d as used for the restart 
    519520         CALL mpi_allreduce( y_in(:), todelay(idvar)%y1d(:), isz, MPI_DOUBLE_COMPLEX, mpi_sumdd, ilocalcomm, ierr )   ! get %y1d 
    520          todelay(idvar)%z1d(:) = REAL(todelay(idvar)%y1d(:), wp)      ! define %z1d from %y1d 
    521       ENDIF 
    522  
    523       IF( ndelayid(idvar) > 0 )   CALL mpp_delay_rcv( idvar )         ! make sure %z1d is received 
     521         ndelayid(idvar) = MPI_REQUEST_NULL 
     522      ENDIF 
     523 
     524      CALL mpp_delay_rcv( idvar )         ! make sure %z1d is received 
    524525 
    525526      ! send back pout from todelay(idvar)%z1d defined at previous call 
     
    530531      IF( ln_timing ) CALL tic_tac( .TRUE., ld_global = .TRUE.) 
    531532      CALL  mpi_allreduce( y_in(:), todelay(idvar)%y1d(:), isz, MPI_DOUBLE_COMPLEX, mpi_sumdd, ilocalcomm, ierr ) 
    532       ndelayid(idvar) = 1 
     533      ndelayid(idvar) = MPI_REQUEST_NULL 
    533534      IF( ln_timing ) CALL tic_tac(.FALSE., ld_global = .TRUE.) 
    534535# else 
     
    591592            DEALLOCATE(todelay(idvar)%z1d) 
    592593            ndelayid(idvar) = -1                                      ! do as if we had no restart 
     594         ELSE 
     595            ndelayid(idvar) = MPI_REQUEST_NULL 
    593596         END IF 
    594597      ENDIF 
     
    598601         ALLOCATE(todelay(idvar)%z1d(isz)) 
    599602         CALL mpi_allreduce( p_in(:), todelay(idvar)%z1d(:), isz, MPI_DOUBLE_PRECISION, mpi_max, ilocalcomm, ierr )   ! get %z1d 
    600       ENDIF 
    601  
    602       IF( ndelayid(idvar) > 0 )   CALL mpp_delay_rcv( idvar )         ! make sure %z1d is received 
     603         ndelayid(idvar) = MPI_REQUEST_NULL 
     604      ENDIF 
     605 
     606      CALL mpp_delay_rcv( idvar )         ! make sure %z1d is received 
    603607 
    604608      ! send back pout from todelay(idvar)%z1d defined at previous call 
     
    606610 
    607611      ! send p_in into todelay(idvar)%z1d with a non-blocking communication 
     612      ! (PM) Should we get rid of MPI2 option ? MPI3 was release in 2013. Who is still using MPI2 ? 
    608613# if defined key_mpi2 
    609614      IF( ln_timing ) CALL tic_tac( .TRUE., ld_global = .TRUE.) 
    610       CALL  mpi_allreduce( p_in(:), todelay(idvar)%z1d(:), isz, MPI_TYPE, mpi_max, ilocalcomm, ndelayid(idvar), ierr ) 
     615      CALL  mpi_allreduce( p_in(:), todelay(idvar)%z1d(:), isz, MPI_TYPE, mpi_max, ilocalcomm, ierr ) 
    611616      IF( ln_timing ) CALL tic_tac(.FALSE., ld_global = .TRUE.) 
    612617# else 
     
    631636      !!---------------------------------------------------------------------- 
    632637#if defined key_mpp_mpi 
    633       IF( ndelayid(kid) /= -2 ) THEN   
    634 #if ! defined key_mpi2 
    635          IF( ln_timing ) CALL tic_tac( .TRUE., ld_global = .TRUE.) 
    636          CALL mpi_wait( ndelayid(kid), MPI_STATUS_IGNORE, ierr )                        ! make sure todelay(kid) is received 
    637          IF( ln_timing ) CALL tic_tac(.FALSE., ld_global = .TRUE.) 
    638 #endif 
    639          IF( ASSOCIATED(todelay(kid)%y1d) )   todelay(kid)%z1d(:) = REAL(todelay(kid)%y1d(:), wp)  ! define %z1d from %y1d 
    640          ndelayid(kid) = -2   ! add flag to know that mpi_wait was already called on kid 
    641       ENDIF 
     638      IF( ln_timing ) CALL tic_tac( .TRUE., ld_global = .TRUE.) 
     639      ! test on ndelayid(kid) useless as mpi_wait return immediatly if the request handle is MPI_REQUEST_NULL 
     640      CALL mpi_wait( ndelayid(kid), MPI_STATUS_IGNORE, ierr ) ! after this ndelayid(kid) = MPI_REQUEST_NULL 
     641      IF( ln_timing ) CALL tic_tac( .FALSE., ld_global = .TRUE.) 
     642      IF( ASSOCIATED(todelay(kid)%y1d) )   todelay(kid)%z1d(:) = REAL(todelay(kid)%y1d(:), wp)  ! define %z1d from %y1d 
    642643#endif 
    643644   END SUBROUTINE mpp_delay_rcv 
  • NEMO/branches/2020/dev_r13383_HPC-02_Daley_Tiling/src/OCE/LDF/ldftra.F90

    r13553 r13741  
    246246      ENDIF 
    247247      ! 
    248       IF( ln_ldfeiv .AND. .NOT.( ln_traldf_iso .OR. ln_traldf_triad ) )                & 
    249            &            CALL ctl_stop( 'ln_ldfeiv=T requires iso-neutral laplacian diffusion' ) 
    250       IF( ln_isfcav .AND. ln_traldf_triad ) & 
    251            &            CALL ctl_stop( ' ice shelf cavity and traldf_triad not tested' ) 
     248      IF( ln_isfcav .AND. ln_traldf_triad )   CALL ctl_stop( ' ice shelf cavity and traldf_triad not tested' ) 
    252249           ! 
    253250      IF(  nldf_tra == np_lap_i .OR. nldf_tra == np_lap_it .OR. & 
     
    541538         IF( ln_traldf_blp )   CALL ctl_stop( 'ldf_eiv_init: eddy induced velocity ONLY with laplacian diffusivity' ) 
    542539         ! 
     540         IF( .NOT.( ln_traldf_iso .OR. ln_traldf_triad ) )   & 
     541           &                  CALL ctl_stop( 'ln_ldfeiv=T requires iso-neutral laplacian diffusion' ) 
    543542         !                                != allocate the aei arrays 
    544543         ALLOCATE( aeiu(jpi,jpj,jpk), aeiv(jpi,jpj,jpk), STAT=ierr ) 
  • NEMO/branches/2020/dev_r13383_HPC-02_Daley_Tiling/src/OCE/SBC/sbcfwb.F90

    r13286 r13741  
    9494         snwice_mass_b(:,:) = 0.e0               ! no sea-ice model is being used : no snow+ice mass 
    9595         snwice_mass  (:,:) = 0.e0 
     96         snwice_fmass (:,:) = 0.e0 
    9697#endif 
    9798         ! 
  • NEMO/branches/2020/dev_r13383_HPC-02_Daley_Tiling/src/OCE/ZDF/zdfdrg.F90

    r13553 r13741  
    383383      IF(ll_bot)   zmsk_boost(:,:) = zmsk_boost(:,:) * ssmask(:,:)                         ! x seafloor mask 
    384384      ! 
     385      l_log_not_linssh = .FALSE.    ! default definition 
    385386      ! 
    386387      SELECT CASE( ndrg ) 
  • NEMO/branches/2020/dev_r13383_HPC-02_Daley_Tiling/src/OCE/ZDF/zdfgls.F90

    r13553 r13741  
    815815         WRITE(numout,*) '      Ice-ocean roughness (used if nn_z0_ice/=0)    rn_hsri        = ', rn_hsri 
    816816         WRITE(numout,*) 
    817          WRITE(numout,*) '   Namelist namdrg_top/_bot:   used values:' 
    818          WRITE(numout,*) '      top    ocean cavity roughness (m)             rn_z0(_top)   = ', r_z0_top 
    819          WRITE(numout,*) '      Bottom seafloor     roughness (m)             rn_z0(_bot)   = ', r_z0_bot 
    820          WRITE(numout,*) 
    821817      ENDIF 
    822818 
  • NEMO/branches/2020/dev_r13383_HPC-02_Daley_Tiling/src/OCE/ZDF/zdfphy.F90

    r13553 r13741  
    337337      ! 
    338338   END SUBROUTINE zdf_phy 
     339 
     340 
    339341   INTEGER FUNCTION zdf_phy_alloc() 
    340342      !!---------------------------------------------------------------------- 
  • NEMO/branches/2020/dev_r13383_HPC-02_Daley_Tiling/src/OCE/ZDF/zdftke.F90

    r13553 r13741  
    678678            CALL ctl_stop( 'zdf_tke_init: wrong value for nn_eice, should be 0,1,2, or 3') 
    679679         END SELECT       
    680          IF( .NOT.ln_drg_OFF ) THEN 
    681             WRITE(numout,*) 
    682             WRITE(numout,*) '   Namelist namdrg_top/_bot:   used values:' 
    683             WRITE(numout,*) '      top    ocean cavity roughness (m)          rn_z0(_top)= ', r_z0_top 
    684             WRITE(numout,*) '      Bottom seafloor     roughness (m)          rn_z0(_bot)= ', r_z0_bot 
    685          ENDIF 
    686680         WRITE(numout,*) 
    687681         WRITE(numout,*) '   ==>>>   critical Richardson nb with your parameters  ri_cri = ', ri_cri 
  • NEMO/branches/2020/dev_r13383_HPC-02_Daley_Tiling/src/OCE/nemogcm.F90

    r13286 r13741  
    5454   USE asminc         ! assimilation increments      
    5555   USE asmbkg         ! writing out state trajectory 
    56    USE diaptr         ! poleward transports           (dia_ptr_init routine) 
    5756   USE diadct         ! sections transports           (dia_dct_init routine) 
    5857   USE diaobs         ! Observation diagnostics       (dia_obs_init routine) 
     
    472471      !                                         ! Lateral physics 
    473472                           CALL ldf_tra_init      ! Lateral ocean tracer physics 
    474                            CALL ldf_eiv_init      ! eddy induced velocity param. 
     473                           CALL ldf_eiv_init      ! eddy induced velocity param. must be done after ldf_tra_init 
    475474                           CALL ldf_dyn_init      ! Lateral ocean momentum physics 
    476475 
     
    510509                           CALL     flo_init( Nnn )    ! drifting Floats 
    511510      IF( ln_diacfl    )   CALL dia_cfl_init    ! Initialise CFL diagnostics 
    512 !                           CALL dia_ptr_init    ! Poleward TRansports initialization 
    513511                           CALL dia_dct_init    ! Sections tranports 
    514512                           CALL dia_hsb_init( Nnn )    ! heat content, salt content and volume budgets 
  • NEMO/branches/2020/dev_r13383_HPC-02_Daley_Tiling/src/OCE/stpctl.F90

    r13553 r13741  
    6767      REAL(wp)                        ::   zzz                                   ! local real  
    6868      REAL(wp), DIMENSION(9)          ::   zmax, zmaxlocal 
    69       LOGICAL                         ::   ll_wrtstp, ll_colruns, ll_wrtruns 
     69      LOGICAL                         ::   ll_wrtstp, ll_colruns, ll_wrtruns, ll_0oce 
    7070      LOGICAL, DIMENSION(jpi,jpj,jpk) ::   llmsk 
    7171      CHARACTER(len=20)               ::   clname 
     
    125125      ! 
    126126      llmsk(Nis0:Nie0,Njs0:Nje0,1) = ssmask(Nis0:Nie0,Njs0:Nje0) == 1._wp         ! define only the inner domain 
     127      ! 
     128      ll_0oce = .NOT. ANY( llmsk(:,:,1) )                                         ! no ocean point in the inner domain? 
     129      ! 
    127130      IF( ll_wd ) THEN 
    128131         zmax(1) = MAXVAL( ABS( ssh(:,:,Kmm) + ssh_ref ), mask = llmsk(:,:,1) )   ! ssh max 
     
    149152      ENDIF 
    150153      zmax(9) = REAL( nstop, wp )                                                 ! stop indicator 
     154      ! 
    151155      !                                   !==               get global extrema             ==! 
    152156      !                                   !==  done by all processes if writting run.stat  ==! 
    153157      IF( ll_colruns ) THEN 
    154158         zmaxlocal(:) = zmax(:) 
    155          CALL mpp_max( "stpctl", zmax )          ! max over the global domain 
     159         CALL mpp_max( "stpctl", zmax )          ! max over the global domain: ok even of ll_0oce = .true.  
    156160         nstop = NINT( zmax(9) )                 ! update nstop indicator (now sheared among all local domains) 
    157       ENDIF 
     161      ELSE 
     162         ! if no ocean point: MAXVAL returns -HUGE => we must overwrite this value to avoid error handling bellow. 
     163         IF( ll_0oce )   zmax(1:4) = (/ 0._wp, 0._wp, -1._wp, 1._wp /)   ! default "valid" values... 
     164      ENDIF 
     165      ! 
     166      zmax(3) = -zmax(3)                         ! move back from max(-zz) to min(zz) : easier to manage!  
     167      zmax(5) = -zmax(5)                         ! move back from max(-zz) to min(zz) : easier to manage! 
     168      IF( ll_colruns ) THEN 
     169         zmaxlocal(3) = -zmaxlocal(3)            ! move back from max(-zz) to min(zz) : easier to manage!  
     170         zmaxlocal(5) = -zmaxlocal(5)            ! move back from max(-zz) to min(zz) : easier to manage! 
     171      ENDIF 
     172      ! 
    158173      !                                   !==              write "run.stat" files              ==! 
    159174      !                                   !==  done only by 1st subdomain at writting timestep  ==! 
    160175      IF( ll_wrtruns ) THEN 
    161          WRITE(numrun,9500) kt, zmax(1), zmax(2), -zmax(3), zmax(4) 
    162          istatus = NF90_PUT_VAR( nrunid, nvarid(1), (/ zmax(1)/), (/kt/), (/1/) ) 
    163          istatus = NF90_PUT_VAR( nrunid, nvarid(2), (/ zmax(2)/), (/kt/), (/1/) ) 
    164          istatus = NF90_PUT_VAR( nrunid, nvarid(3), (/-zmax(3)/), (/kt/), (/1/) ) 
    165          istatus = NF90_PUT_VAR( nrunid, nvarid(4), (/ zmax(4)/), (/kt/), (/1/) ) 
    166          istatus = NF90_PUT_VAR( nrunid, nvarid(5), (/-zmax(5)/), (/kt/), (/1/) ) 
    167          istatus = NF90_PUT_VAR( nrunid, nvarid(6), (/ zmax(6)/), (/kt/), (/1/) ) 
    168          IF( ln_zad_Aimp ) THEN 
    169             istatus = NF90_PUT_VAR( nrunid, nvarid(7), (/ zmax(7)/), (/kt/), (/1/) ) 
    170             istatus = NF90_PUT_VAR( nrunid, nvarid(8), (/ zmax(8)/), (/kt/), (/1/) ) 
    171          ENDIF 
     176         WRITE(numrun,9500) kt, zmax(1), zmax(2), zmax(3), zmax(4) 
     177         DO ji = 1, 6 + 2 * COUNT( (/ln_zad_Aimp/) ) 
     178            istatus = NF90_PUT_VAR( nrunid, nvarid(ji), (/zmax(ji)/), (/kt/), (/1/) ) 
     179         END DO 
    172180         IF( kt == nitend )   istatus = NF90_CLOSE(nrunid) 
    173181      END IF 
     
    175183      !                                   !==  done by all processes at every time step  ==! 
    176184      ! 
    177       IF(   zmax(1) >   20._wp .OR.   &                   ! too large sea surface height ( > 20 m ) 
    178          &  zmax(2) >   10._wp .OR.   &                   ! too large velocity ( > 10 m/s) 
    179          &  zmax(3) >=   0._wp .OR.   &                   ! negative or zero sea surface salinity 
    180          &  zmax(4) >= 100._wp .OR.   &                   ! too large sea surface salinity ( > 100 ) 
    181          &  zmax(4) <    0._wp .OR.   &                   ! too large sea surface salinity (keep this line for sea-ice) 
    182          &  ISNAN( zmax(1) + zmax(2) + zmax(3) ) .OR.   &               ! NaN encounter in the tests 
    183          &  ABS(   zmax(1) + zmax(2) + zmax(3) ) > HUGE(1._wp) ) THEN   ! Infinity encounter in the tests 
     185      IF(  zmax(1) >   20._wp .OR.   &                   ! too large sea surface height ( > 20 m ) 
     186         & zmax(2) >   10._wp .OR.   &                   ! too large velocity ( > 10 m/s) 
     187         & zmax(3) <=   0._wp .OR.   &                   ! negative or zero sea surface salinity 
     188         & zmax(4) >= 100._wp .OR.   &                   ! too large sea surface salinity ( > 100 ) 
     189         & zmax(4) <    0._wp .OR.   &                   ! too large sea surface salinity (keep this line for sea-ice) 
     190         & ISNAN( zmax(1) + zmax(2) + zmax(3) ) .OR.   &               ! NaN encounter in the tests 
     191         & ABS(   zmax(1) + zmax(2) + zmax(3) ) > HUGE(1._wp) ) THEN   ! Infinity encounter in the tests 
    184192         ! 
    185193         iloc(:,:) = 0 
     
    221229         ! 
    222230         WRITE(ctmp1,*) ' stp_ctl: |ssh| > 20 m  or  |U| > 10 m/s  or  S <= 0  or  S >= 100  or  NaN encounter in the tests' 
    223          CALL wrt_line( ctmp2, kt, '|ssh| max',  zmax(1), iloc(:,1), iareasum(1), iareamin(1), iareamax(1) ) 
    224          CALL wrt_line( ctmp3, kt, '|U|   max',  zmax(2), iloc(:,2), iareasum(2), iareamin(2), iareamax(2) ) 
    225          CALL wrt_line( ctmp4, kt, 'Sal   min', -zmax(3), iloc(:,3), iareasum(3), iareamin(3), iareamax(3) ) 
    226          CALL wrt_line( ctmp5, kt, 'Sal   max',  zmax(4), iloc(:,4), iareasum(4), iareamin(4), iareamax(4) ) 
     231         CALL wrt_line( ctmp2, kt, '|ssh| max', zmax(1), iloc(:,1), iareasum(1), iareamin(1), iareamax(1) ) 
     232         CALL wrt_line( ctmp3, kt, '|U|   max', zmax(2), iloc(:,2), iareasum(2), iareamin(2), iareamax(2) ) 
     233         CALL wrt_line( ctmp4, kt, 'Sal   min', zmax(3), iloc(:,3), iareasum(3), iareamin(3), iareamax(3) ) 
     234         CALL wrt_line( ctmp5, kt, 'Sal   max', zmax(4), iloc(:,4), iareasum(4), iareamin(4), iareamax(4) ) 
    227235         IF( Agrif_Root() ) THEN 
    228236            WRITE(ctmp6,*) '      ===> output of last computed fields in output.abort* files' 
  • NEMO/branches/2020/dev_r13383_HPC-02_Daley_Tiling/src/OCE/timing.F90

    r13553 r13741  
    424424         s_timer => s_timer_root 
    425425         DO WHILE ( ASSOCIATED( s_timer%next ) ) 
    426          IF (.NOT. ASSOCIATED(s_timer%next)) EXIT 
     426            IF (.NOT. ASSOCIATED(s_timer%next)) EXIT 
    427427            IF ( s_timer%tsum_clock < s_timer%next%tsum_clock ) THEN  
    428428               ALLOCATE(s_wrk) 
     
    432432               ll_ord = .FALSE. 
    433433               CYCLE             
    434             ENDIF            
    435          IF( ASSOCIATED(s_timer%next) ) s_timer => s_timer%next 
    436          END DO          
     434            ENDIF 
     435            IF( ASSOCIATED(s_timer%next) ) s_timer => s_timer%next 
     436         END DO 
    437437         IF( ll_ord ) EXIT 
    438438      END DO 
     
    447447      clfmt = '(1x,a,4x,f12.3,6x,f12.3,x,f12.3,2x,f12.3,6x,f7.3,2x,i9)' 
    448448      DO WHILE ( ASSOCIATED(s_timer) ) 
    449          WRITE(numtime,TRIM(clfmt))   s_timer%cname,   & 
    450          &   s_timer%tsum_clock,s_timer%tsum_clock*100./t_elaps(2),            & 
    451          &   s_timer%tsum_cpu  ,s_timer%tsum_cpu*100./t_cpu(2)    ,            & 
    452          &   s_timer%tsum_cpu/s_timer%tsum_clock, s_timer%niter 
     449         IF( s_timer%tsum_clock > 0._wp )                                & 
     450            WRITE(numtime,TRIM(clfmt))   s_timer%cname,                  & 
     451            &   s_timer%tsum_clock,s_timer%tsum_clock*100./t_elaps(2),   & 
     452            &   s_timer%tsum_cpu  ,s_timer%tsum_cpu*100./t_cpu(2)    ,   & 
     453            &   s_timer%tsum_cpu/s_timer%tsum_clock, s_timer%niter 
    453454         s_timer => s_timer%next 
    454455      END DO 
     
    613614         clfmt = '((A),E15.7,2x,f6.2,5x,f12.2,5x,f6.2,5x,f7.2,2x,f12.2,4x,f6.2,2x,f9.2)' 
    614615         DO WHILE ( ASSOCIATED(sl_timer_ave) ) 
    615             WRITE(numtime,TRIM(clfmt))   sl_timer_ave%cname(1:18),                            & 
    616             &   sl_timer_ave%tsum_clock,sl_timer_ave%tsum_clock*100.*jpnij/tot_etime,   & 
    617             &   sl_timer_ave%tsum_cpu  ,sl_timer_ave%tsum_cpu*100.*jpnij/tot_ctime  ,   & 
    618             &   sl_timer_ave%tsum_cpu/sl_timer_ave%tsum_clock,                          & 
    619             &   sl_timer_ave%tmax_clock*100.*jpnij/tot_etime,                           & 
    620             &   sl_timer_ave%tmin_clock*100.*jpnij/tot_etime,                           &                                                
    621             &   sl_timer_ave%niter/REAL(jpnij) 
     616            IF( sl_timer_ave%tsum_clock > 0. )                                             &  
     617               WRITE(numtime,TRIM(clfmt))   sl_timer_ave%cname(1:18),                      & 
     618               &   sl_timer_ave%tsum_clock,sl_timer_ave%tsum_clock*100.*jpnij/tot_etime,   & 
     619               &   sl_timer_ave%tsum_cpu  ,sl_timer_ave%tsum_cpu*100.*jpnij/tot_ctime  ,   & 
     620               &   sl_timer_ave%tsum_cpu/sl_timer_ave%tsum_clock,                          & 
     621               &   sl_timer_ave%tmax_clock*100.*jpnij/tot_etime,                           & 
     622               &   sl_timer_ave%tmin_clock*100.*jpnij/tot_etime,                           & 
     623               &   sl_timer_ave%niter/REAL(jpnij) 
    622624            sl_timer_ave => sl_timer_ave%next 
    623625         END DO 
Note: See TracChangeset for help on using the changeset viewer.