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 15249 for NEMO/trunk/src/OCE/DIA – NEMO

Ignore:
Timestamp:
2021-09-13T11:59:09+02:00 (3 years ago)
Author:
hadcv
Message:

#2721: Fix SETTE debug failures

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/trunk/src/OCE/DIA/dia25h.F90

    r12489 r15249  
    3232   REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:,:,:) ::   en_25h  , rmxln_25h 
    3333 
     34!! * Substitutions 
     35#  include "do_loop_substitute.h90" 
    3436   !!---------------------------------------------------------------------- 
    3537   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    5153      INTEGER ::   ios                 ! Local integer output status for namelist read 
    5254      INTEGER ::   ierror              ! Local integer for memory allocation 
     55      INTEGER ::   ji, jj, jk 
    5356      ! 
    5457      NAMELIST/nam_dia25h/ ln_dia25h 
     
    7376      ! ------------------- ! 
    7477      !                                ! ocean arrays 
    75       ALLOCATE( tn_25h (jpi,jpj,jpk), sn_25h (jpi,jpj,jpk), sshn_25h(jpi,jpj)  ,     & 
    76          &      un_25h (jpi,jpj,jpk), vn_25h (jpi,jpj,jpk), wn_25h(jpi,jpj,jpk),     & 
    77          &      avt_25h(jpi,jpj,jpk), avm_25h(jpi,jpj,jpk),                      STAT=ierror ) 
     78      ALLOCATE( tn_25h (A2D(0),jpk), sn_25h (A2D(0),jpk), sshn_25h(A2D(0))  ,     & 
     79         &      un_25h (A2D(0),jpk), vn_25h (A2D(0),jpk), wn_25h(A2D(0),jpk),     & 
     80         &      avt_25h(A2D(0),jpk), avm_25h(A2D(0),jpk),                      STAT=ierror ) 
    7881      IF( ierror > 0 ) THEN 
    7982         CALL ctl_stop( 'dia_25h: unable to allocate ocean arrays' )   ;   RETURN 
    8083      ENDIF 
    8184      IF( ln_zdftke ) THEN             ! TKE physics 
    82          ALLOCATE( en_25h(jpi,jpj,jpk), STAT=ierror ) 
     85         ALLOCATE( en_25h(A2D(0),jpk), STAT=ierror ) 
    8386         IF( ierror > 0 ) THEN 
    8487            CALL ctl_stop( 'dia_25h: unable to allocate en_25h' )   ;   RETURN 
     
    8689      ENDIF 
    8790      IF( ln_zdfgls ) THEN             ! GLS physics 
    88          ALLOCATE( en_25h(jpi,jpj,jpk), rmxln_25h(jpi,jpj,jpk), STAT=ierror ) 
     91         ALLOCATE( en_25h(A2D(0),jpk), rmxln_25h(A2D(0),jpk), STAT=ierror ) 
    8992         IF( ierror > 0 ) THEN 
    9093            CALL ctl_stop( 'dia_25h: unable to allocate en_25h and rmxln_25h' )   ;   RETURN 
     
    9497      ! 2 - Assign Initial Values ! 
    9598      ! ------------------------- ! 
    96       cnt_25h = 1  ! sets the first value of sum at timestep 1 (note - should strictly be at timestep zero so before values used where possible)  
    97       tn_25h  (:,:,:) = ts (:,:,:,jp_tem,Kbb) 
    98       sn_25h  (:,:,:) = ts (:,:,:,jp_sal,Kbb) 
    99       sshn_25h(:,:)   = ssh(:,:,Kbb) 
    100       un_25h  (:,:,:) = uu  (:,:,:,Kbb) 
    101       vn_25h  (:,:,:) = vv  (:,:,:,Kbb) 
    102       avt_25h (:,:,:) = avt (:,:,:) 
    103       avm_25h (:,:,:) = avm (:,:,:) 
     99      cnt_25h = 1  ! sets the first value of sum at timestep 1 (note - should strictly be at timestep zero so before values used where possible) 
     100      DO_3D( 0, 0, 0, 0, 1, jpk ) 
     101         tn_25h (ji,jj,jk) = ts (ji,jj,jk,jp_tem,Kbb) 
     102         sn_25h (ji,jj,jk) = ts (ji,jj,jk,jp_sal,Kbb) 
     103         un_25h (ji,jj,jk) = uu (ji,jj,jk,Kbb) 
     104         vn_25h (ji,jj,jk) = vv (ji,jj,jk,Kbb) 
     105         avt_25h(ji,jj,jk) = avt(ji,jj,jk) 
     106         avm_25h(ji,jj,jk) = avm(ji,jj,jk) 
     107      END_3D 
     108      DO_2D( 0, 0, 0, 0 ) 
     109         sshn_25h(ji,jj) = ssh(ji,jj,Kbb) 
     110      END_2D 
    104111      IF( ln_zdftke ) THEN 
    105          en_25h(:,:,:) = en(:,:,:) 
     112         DO_3D( 0, 0, 0, 0, 1, jpk ) 
     113            en_25h(ji,jj,jk) = en(ji,jj,jk) 
     114         END_3D 
    106115      ENDIF 
    107116      IF( ln_zdfgls ) THEN 
    108          en_25h   (:,:,:) = en    (:,:,:) 
    109          rmxln_25h(:,:,:) = hmxl_n(:,:,:) 
     117         DO_3D( 0, 0, 0, 0, 1, jpk ) 
     118            en_25h   (ji,jj,jk) = en    (ji,jj,jk) 
     119            rmxln_25h(ji,jj,jk) = hmxl_n(ji,jj,jk) 
     120         END_3D 
    110121      ENDIF 
    111122#if defined key_si3 
     
    132143      REAL(wp)                         ::   zsto, zout, zmax, zjulian, zmdi   ! local scalars 
    133144      INTEGER                          ::   i_steps                           ! no of timesteps per hour 
    134       REAL(wp), DIMENSION(jpi,jpj    ) ::   zw2d, un_dm, vn_dm                ! workspace 
    135       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zw3d                              ! workspace 
    136       REAL(wp), DIMENSION(jpi,jpj,3)   ::   zwtmb                             ! workspace 
     145      REAL(wp), DIMENSION(A2D(0)    ) ::   zw2d, un_dm, vn_dm                ! workspace 
     146      REAL(wp), DIMENSION(A2D(0),jpk) ::   zw3d                              ! workspace 
     147      REAL(wp), DIMENSION(A2D(0),3)    ::   zwtmb                             ! workspace 
    137148      !!---------------------------------------------------------------------- 
    138149 
     
    151162      ! wn_25h could not be initialised in dia_25h_init, so we do it here instead 
    152163      IF( kt == nn_it000 ) THEN 
    153          wn_25h(:,:,:) = ww(:,:,:) 
     164         DO_3D( 0, 0, 0, 0, 1, jpk ) 
     165            wn_25h(ji,jj,jk) = ww(ji,jj,jk) 
     166         END_3D 
    154167      ENDIF 
    155168 
     
    162175         ENDIF 
    163176 
    164          tn_25h  (:,:,:)     = tn_25h  (:,:,:) + ts (:,:,:,jp_tem,Kmm) 
    165          sn_25h  (:,:,:)     = sn_25h  (:,:,:) + ts (:,:,:,jp_sal,Kmm) 
    166          sshn_25h(:,:)       = sshn_25h(:,:)   + ssh(:,:,Kmm) 
    167          un_25h  (:,:,:)     = un_25h  (:,:,:) + uu  (:,:,:,Kmm) 
    168          vn_25h  (:,:,:)     = vn_25h  (:,:,:) + vv  (:,:,:,Kmm) 
    169          wn_25h  (:,:,:)     = wn_25h  (:,:,:) + ww  (:,:,:) 
    170          avt_25h (:,:,:)     = avt_25h (:,:,:) + avt (:,:,:) 
    171          avm_25h (:,:,:)     = avm_25h (:,:,:) + avm (:,:,:) 
     177         DO_3D( 0, 0, 0, 0, 1, jpk ) 
     178            tn_25h  (ji,jj,jk) = tn_25h  (ji,jj,jk) + ts (ji,jj,jk,jp_tem,Kmm) 
     179            sn_25h  (ji,jj,jk) = sn_25h  (ji,jj,jk) + ts (ji,jj,jk,jp_sal,Kmm) 
     180            un_25h  (ji,jj,jk) = un_25h  (ji,jj,jk) + uu (ji,jj,jk,Kmm) 
     181            vn_25h  (ji,jj,jk) = vn_25h  (ji,jj,jk) + vv (ji,jj,jk,Kmm) 
     182            wn_25h  (ji,jj,jk) = wn_25h  (ji,jj,jk) + ww (ji,jj,jk) 
     183            avt_25h (ji,jj,jk) = avt_25h (ji,jj,jk) + avt(ji,jj,jk) 
     184            avm_25h (ji,jj,jk) = avm_25h (ji,jj,jk) + avm(ji,jj,jk) 
     185         END_3D 
     186         DO_2D( 0, 0, 0, 0 ) 
     187            sshn_25h(ji,jj)    = sshn_25h(ji,jj)    + ssh(ji,jj,Kmm) 
     188         END_2D 
    172189         IF( ln_zdftke ) THEN 
    173             en_25h(:,:,:)    = en_25h  (:,:,:) + en(:,:,:) 
     190            DO_3D( 0, 0, 0, 0, 1, jpk ) 
     191               en_25h(ji,jj,jk) = en_25h(ji,jj,jk) + en(ji,jj,jk) 
     192            END_3D 
    174193         ENDIF 
    175194         IF( ln_zdfgls ) THEN 
    176             en_25h   (:,:,:) = en_25h   (:,:,:) + en    (:,:,:) 
    177             rmxln_25h(:,:,:) = rmxln_25h(:,:,:) + hmxl_n(:,:,:) 
     195            DO_3D( 0, 0, 0, 0, 1, jpk ) 
     196               en_25h   (ji,jj,jk) = en_25h   (ji,jj,jk) + en    (ji,jj,jk) 
     197               rmxln_25h(ji,jj,jk) = rmxln_25h(ji,jj,jk) + hmxl_n(ji,jj,jk) 
     198            END_3D 
    178199         ENDIF 
    179200         cnt_25h = cnt_25h + 1 
     
    212233         zmdi=1.e+20 !missing data indicator for masking 
    213234         ! write tracers (instantaneous) 
    214          zw3d(:,:,:) = tn_25h(:,:,:)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 
     235         DO_3D( 0, 0, 0, 0, 1, jpk ) 
     236            zw3d(ji,jj,jk) = tn_25h(ji,jj,jk)*tmask(ji,jj,jk) + zmdi*(1.0-tmask(ji,jj,jk)) 
     237         END_3D 
    215238         CALL iom_put("temper25h", zw3d)   ! potential temperature 
    216          zw3d(:,:,:) = sn_25h(:,:,:)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 
     239         DO_3D( 0, 0, 0, 0, 1, jpk ) 
     240            zw3d(ji,jj,jk) = sn_25h(ji,jj,jk)*tmask(ji,jj,jk) + zmdi*(1.0-tmask(ji,jj,jk)) 
     241         END_3D 
    217242         CALL iom_put( "salin25h", zw3d  )   ! salinity 
    218          zw2d(:,:) = sshn_25h(:,:)*tmask(:,:,1) + zmdi*(1.0-tmask(:,:,1)) 
     243         DO_2D( 0, 0, 0, 0 ) 
     244            zw2d(ji,jj) = sshn_25h(ji,jj)*tmask(ji,jj,1) + zmdi*(1.0-tmask(ji,jj,1)) 
     245         END_2D 
    219246         IF( ll_wd ) THEN 
    220247            CALL iom_put( "ssh25h", zw2d+ssh_ref )   ! sea surface  
     
    223250         ENDIF 
    224251         ! Write velocities (instantaneous) 
    225          zw3d(:,:,:) = un_25h(:,:,:)*umask(:,:,:) + zmdi*(1.0-umask(:,:,:)) 
     252         DO_3D( 0, 0, 0, 0, 1, jpk ) 
     253            zw3d(ji,jj,jk) = un_25h(ji,jj,jk)*umask(ji,jj,jk) + zmdi*(1.0-umask(ji,jj,jk)) 
     254         END_3D 
    226255         CALL iom_put("vozocrtx25h", zw3d)    ! i-current 
    227          zw3d(:,:,:) = vn_25h(:,:,:)*vmask(:,:,:) + zmdi*(1.0-vmask(:,:,:)) 
     256         DO_3D( 0, 0, 0, 0, 1, jpk ) 
     257            zw3d(ji,jj,jk) = vn_25h(ji,jj,jk)*vmask(ji,jj,jk) + zmdi*(1.0-vmask(ji,jj,jk)) 
     258         END_3D 
    228259         CALL iom_put("vomecrty25h", zw3d  )   ! j-current 
    229          zw3d(:,:,:) = wn_25h(:,:,:)*wmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 
     260         DO_3D( 0, 0, 0, 0, 1, jpk ) 
     261            zw3d(ji,jj,jk) = wn_25h(ji,jj,jk)*wmask(ji,jj,jk) + zmdi*(1.0-tmask(ji,jj,jk)) 
     262         END_3D 
    230263         CALL iom_put("vovecrtz25h", zw3d )   ! k-current 
    231264         ! Write vertical physics 
    232          zw3d(:,:,:) = avt_25h(:,:,:)*wmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 
     265         DO_3D( 0, 0, 0, 0, 1, jpk ) 
     266            zw3d(ji,jj,jk) = avt_25h(ji,jj,jk)*wmask(ji,jj,jk) + zmdi*(1.0-tmask(ji,jj,jk)) 
     267         END_3D 
    233268         CALL iom_put("avt25h", zw3d )   ! diffusivity 
    234          zw3d(:,:,:) = avm_25h(:,:,:)*wmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 
     269         DO_3D( 0, 0, 0, 0, 1, jpk ) 
     270            zw3d(ji,jj,jk) = avm_25h(ji,jj,jk)*wmask(ji,jj,jk) + zmdi*(1.0-tmask(ji,jj,jk)) 
     271         END_3D 
    235272         CALL iom_put("avm25h", zw3d)   ! viscosity 
    236273         IF( ln_zdftke ) THEN 
    237             zw3d(:,:,:) = en_25h(:,:,:)*wmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 
     274            DO_3D( 0, 0, 0, 0, 1, jpk ) 
     275               zw3d(ji,jj,jk) = en_25h(ji,jj,jk)*wmask(ji,jj,jk) + zmdi*(1.0-tmask(ji,jj,jk)) 
     276            END_3D 
    238277            CALL iom_put("tke25h", zw3d)   ! tke 
    239278         ENDIF 
    240279         IF( ln_zdfgls ) THEN 
    241             zw3d(:,:,:) = en_25h(:,:,:)*wmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 
     280            DO_3D( 0, 0, 0, 0, 1, jpk ) 
     281               zw3d(ji,jj,jk) = en_25h(ji,jj,jk)*wmask(ji,jj,jk) + zmdi*(1.0-tmask(ji,jj,jk)) 
     282            END_3D 
    242283            CALL iom_put("tke25h", zw3d)   ! tke 
    243             zw3d(:,:,:) = rmxln_25h(:,:,:)*wmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 
     284            DO_3D( 0, 0, 0, 0, 1, jpk ) 
     285               zw3d(ji,jj,jk) = rmxln_25h(ji,jj,jk)*wmask(ji,jj,jk) + zmdi*(1.0-tmask(ji,jj,jk)) 
     286            END_3D 
    244287            CALL iom_put( "mxln25h",zw3d) 
    245288         ENDIF 
    246289         ! 
    247290         ! After the write reset the values to cnt=1 and sum values equal current value  
    248          tn_25h  (:,:,:) = ts (:,:,:,jp_tem,Kmm) 
    249          sn_25h  (:,:,:) = ts (:,:,:,jp_sal,Kmm) 
    250          sshn_25h(:,:)   = ssh(:,:,Kmm) 
    251          un_25h  (:,:,:) = uu  (:,:,:,Kmm) 
    252          vn_25h  (:,:,:) = vv  (:,:,:,Kmm) 
    253          wn_25h  (:,:,:) = ww  (:,:,:) 
    254          avt_25h (:,:,:) = avt (:,:,:) 
    255          avm_25h (:,:,:) = avm (:,:,:) 
     291         DO_3D( 0, 0, 0, 0, 1, jpk ) 
     292            tn_25h  (ji,jj,jk) = ts (ji,jj,jk,jp_tem,Kmm) 
     293            sn_25h  (ji,jj,jk) = ts (ji,jj,jk,jp_sal,Kmm) 
     294            un_25h  (ji,jj,jk) = uu (ji,jj,jk,Kmm) 
     295            vn_25h  (ji,jj,jk) = vv (ji,jj,jk,Kmm) 
     296            wn_25h  (ji,jj,jk) = ww (ji,jj,jk) 
     297            avt_25h (ji,jj,jk) = avt(ji,jj,jk) 
     298            avm_25h (ji,jj,jk) = avm(ji,jj,jk) 
     299         END_3D 
     300         DO_2D( 0, 0, 0, 0 ) 
     301            sshn_25h(ji,jj)    = ssh(ji,jj,Kmm) 
     302         END_2D 
    256303         IF( ln_zdftke ) THEN 
    257             en_25h(:,:,:) = en(:,:,:) 
     304            DO_3D( 0, 0, 0, 0, 1, jpk ) 
     305               en_25h(ji,jj,jk) = en(ji,jj,jk) 
     306            END_3D 
    258307         ENDIF 
    259308         IF( ln_zdfgls ) THEN 
    260             en_25h   (:,:,:) = en    (:,:,:) 
    261             rmxln_25h(:,:,:) = hmxl_n(:,:,:) 
     309            DO_3D( 0, 0, 0, 0, 1, jpk ) 
     310               en_25h   (ji,jj,jk) = en    (ji,jj,jk) 
     311               rmxln_25h(ji,jj,jk) = hmxl_n(ji,jj,jk) 
     312            END_3D 
    262313         ENDIF 
    263314         cnt_25h = 1 
Note: See TracChangeset for help on using the changeset viewer.