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 12724 for NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE – NEMO

Ignore:
Timestamp:
2020-04-08T21:37:59+02:00 (4 years ago)
Author:
techene
Message:

branch KERNEL-06 : merge with trunk@12698 #2385 - in duplcated files : changes to comply to the new trunk variables and some loop bug fixes

Location:
NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3
Files:
110 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3

    • Property svn:externals
      •  

        old new  
        33^/utils/build/mk@HEAD         mk 
        44^/utils/tools@HEAD            tools 
        5 ^/vendors/AGRIF/dev_r11615_ENHANCE-04_namelists_as_internalfiles_agrif@HEAD      ext/AGRIF 
         5^/vendors/AGRIF/dev@HEAD      ext/AGRIF 
        66^/vendors/FCM@HEAD            ext/FCM 
        77^/vendors/IOIPSL@HEAD         ext/IOIPSL 
         8 
         9# SETTE 
         10^/utils/CI/sette@HEAD         sette 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/ASM/asminc.F90

    r12680 r12724  
    489489      ENDIF 
    490490      ! 
    491       IF(lwp) WRITE(numout,*) '   ==>>>   Euler time step switch is ', neuler 
     491      IF(lwp) WRITE(numout,*) '   ==>>>   Euler time step switch is ', l_1st_euler 
    492492      ! 
    493493      IF( lk_asminc ) THEN                            !==  data assimilation  ==! 
     
    536536            ! 
    537537            it = kt - nit000 + 1 
    538             zincwgt = wgtiau(it) / rdt   ! IAU weight for the current time step 
     538            zincwgt = wgtiau(it) / rn_Dt   ! IAU weight for the current time step 
    539539            ! 
    540540            IF(lwp) THEN 
     
    579579         IF ( kt == nitdin_r ) THEN 
    580580            ! 
    581             neuler = 0  ! Force Euler forward step 
     581            l_1st_euler = .TRUE.  ! Force Euler forward step 
    582582            ! 
    583583            ! Initialize the now fields with the background + increment 
     
    653653            ! 
    654654            it = kt - nit000 + 1 
    655             zincwgt = wgtiau(it) / rdt   ! IAU weight for the current time step 
     655            zincwgt = wgtiau(it) / rn_Dt   ! IAU weight for the current time step 
    656656            ! 
    657657            IF(lwp) THEN 
     
    679679         IF ( kt == nitdin_r ) THEN 
    680680            ! 
    681             neuler = 0                    ! Force Euler forward step 
     681            l_1st_euler = .TRUE.                    ! Force Euler forward step 
    682682            ! 
    683683            ! Initialize the now fields with the background + increment 
     
    724724            ! 
    725725            it = kt - nit000 + 1 
    726             zincwgt = wgtiau(it) / rdt   ! IAU weight for the current time step 
     726            zincwgt = wgtiau(it) / rn_Dt   ! IAU weight for the current time step 
    727727            ! 
    728728            IF(lwp) THEN 
     
    755755         IF ( kt == nitdin_r ) THEN 
    756756            ! 
    757             neuler = 0                                   ! Force Euler forward step 
     757            l_1st_euler = .TRUE.                            ! Force Euler forward step 
    758758            ! 
    759759            ssh(:,:,Kmm) = ssh_bkg(:,:) + ssh_bkginc(:,:)   ! Initialize the now fields the background + increment 
     
    845845            it = kt - nit000 + 1 
    846846            zincwgt = wgtiau(it)      ! IAU weight for the current time step 
    847             ! note this is not a tendency so should not be divided by rdt (as with the tracer and other increments) 
     847            ! note this is not a tendency so should not be divided by rn_Dt (as with the tracer and other increments) 
    848848            ! 
    849849            IF(lwp) THEN 
     
    880880#if defined key_cice && defined key_asminc 
    881881            ! Sea-ice : CICE case. Pass ice increment tendency into CICE 
    882             ndaice_da(:,:) = seaice_bkginc(:,:) * zincwgt / rdt 
     882            ndaice_da(:,:) = seaice_bkginc(:,:) * zincwgt / rn_Dt 
    883883#endif 
    884884            ! 
     
    900900         IF ( kt == nitdin_r ) THEN 
    901901            ! 
    902             neuler = 0                    ! Force Euler forward step 
     902            l_1st_euler = 0              ! Force Euler forward step 
    903903            ! 
    904904            ! Sea-ice : SI3 case 
     
    930930#if defined key_cice && defined key_asminc 
    931931            ! Sea-ice : CICE case. Pass ice increment tendency into CICE 
    932            ndaice_da(:,:) = seaice_bkginc(:,:) / rdt 
     932           ndaice_da(:,:) = seaice_bkginc(:,:) / rn_Dt 
    933933#endif 
    934934            IF ( .NOT. PRESENT(kindic) ) THEN 
     
    963963!           ! fwf : ice formation and melting 
    964964! 
    965 !                 zfons = ( -nfresh_da(ji,jj)*soce + nfsalt_da(ji,jj) )*rdt 
     965!                 zfons = ( -nfresh_da(ji,jj)*soce + nfsalt_da(ji,jj) )*rn_Dt 
    966966! 
    967967!           ! change salinity down to mixed layer depth 
     
    10041004! 
    10051005!      !            !  salt exchanges at the ice/ocean interface 
    1006 !      !            zpmess         = zfons / rdt_ice    ! rdt_ice is ice timestep 
     1006!      !            zpmess         = zfons / rDt_ice    ! rDt_ice is ice timestep 
    10071007!      ! 
    10081008!      !! Adjust fsalt. A +ve fsalt means adding salt to ocean 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/BDY/bdydta.F90

    r12680 r12724  
    9393      INTEGER ::  ii, ij, ik, igrd, ipl               ! local integers 
    9494      INTEGER,   DIMENSION(jpbgrd)     ::   ilen1  
    95       INTEGER,   DIMENSION(:), POINTER ::   nblen, nblenrim  ! short cuts 
    9695      TYPE(OBC_DATA)         , POINTER ::   dta_alias        ! short cut 
    9796      TYPE(FLD), DIMENSION(:), POINTER ::   bf_alias 
     
    109108         DO jbdy = 1, nb_bdy 
    110109            ! 
    111             nblen    => idx_bdy(jbdy)%nblen 
    112             nblenrim => idx_bdy(jbdy)%nblenrim 
    113             ! 
    114110            IF( nn_dyn2d_dta(jbdy) == 0 ) THEN  
    115                ilen1(:) = nblen(:) 
    116111               IF( dta_bdy(jbdy)%lneed_ssh ) THEN  
    117112                  igrd = 1 
    118                   DO ib = 1, ilen1(igrd) 
     113                  DO ib = 1, idx_bdy(jbdy)%nblenrim(igrd)   ! ssh is allocated and used only on the rim 
    119114                     ii = idx_bdy(jbdy)%nbi(ib,igrd) 
    120115                     ij = idx_bdy(jbdy)%nbj(ib,igrd) 
     
    122117                  END DO 
    123118               ENDIF 
    124                IF( dta_bdy(jbdy)%lneed_dyn2d) THEN  
     119               IF( dta_bdy(jbdy)%lneed_dyn2d .AND. ASSOCIATED(dta_bdy(jbdy)%u2d) ) THEN   ! no SIZE with a unassociated pointer 
    125120                  igrd = 2 
    126                   DO ib = 1, ilen1(igrd) 
     121                  DO ib = 1, SIZE(dta_bdy(jbdy)%u2d)   ! u2d is used only on the rim except if ln_full_vel = T, see bdy_dta_init 
    127122                     ii = idx_bdy(jbdy)%nbi(ib,igrd) 
    128123                     ij = idx_bdy(jbdy)%nbj(ib,igrd) 
     
    130125                  END DO 
    131126                  igrd = 3 
    132                   DO ib = 1, ilen1(igrd) 
     127                  DO ib = 1, SIZE(dta_bdy(jbdy)%v2d)   ! v2d is used only on the rim except if ln_full_vel = T, see bdy_dta_init 
    133128                     ii = idx_bdy(jbdy)%nbi(ib,igrd) 
    134129                     ij = idx_bdy(jbdy)%nbj(ib,igrd) 
     
    139134            ! 
    140135            IF( nn_dyn3d_dta(jbdy) == 0 ) THEN  
    141                ilen1(:) = nblen(:) 
    142136               IF( dta_bdy(jbdy)%lneed_dyn3d ) THEN  
    143137                  igrd = 2  
    144                   DO ib = 1, ilen1(igrd) 
     138                  DO ib = 1, idx_bdy(jbdy)%nblen(igrd) 
    145139                     DO ik = 1, jpkm1 
    146140                        ii = idx_bdy(jbdy)%nbi(ib,igrd) 
     
    150144                  END DO 
    151145                  igrd = 3  
    152                   DO ib = 1, ilen1(igrd) 
     146                  DO ib = 1, idx_bdy(jbdy)%nblen(igrd) 
    153147                     DO ik = 1, jpkm1 
    154148                        ii = idx_bdy(jbdy)%nbi(ib,igrd) 
     
    161155 
    162156            IF( nn_tra_dta(jbdy) == 0 ) THEN  
    163                ilen1(:) = nblen(:) 
    164157               IF( dta_bdy(jbdy)%lneed_tra ) THEN 
    165158                  igrd = 1  
    166                   DO ib = 1, ilen1(igrd) 
     159                  DO ib = 1, idx_bdy(jbdy)%nblen(igrd) 
    167160                     DO ik = 1, jpkm1 
    168161                        ii = idx_bdy(jbdy)%nbi(ib,igrd) 
     
    177170#if defined key_si3 
    178171            IF( nn_ice_dta(jbdy) == 0 ) THEN    ! set ice to initial values 
    179                ilen1(:) = nblen(:) 
    180172               IF( dta_bdy(jbdy)%lneed_ice ) THEN 
    181173                  igrd = 1    
    182174                  DO jl = 1, jpl 
    183                      DO ib = 1, ilen1(igrd) 
     175                     DO ib = 1, idx_bdy(jbdy)%nblen(igrd) 
    184176                        ii = idx_bdy(jbdy)%nbi(ib,igrd) 
    185177                        ij = idx_bdy(jbdy)%nbj(ib,igrd) 
     
    237229         ! tidal harmonic forcing ONLY: initialise arrays 
    238230         IF( nn_dyn2d_dta(jbdy) == 2 ) THEN   ! we did not read ssh, u/v2d  
    239             IF( dta_alias%lneed_ssh   ) dta_alias%ssh(:) = 0._wp 
    240             IF( dta_alias%lneed_dyn2d ) dta_alias%u2d(:) = 0._wp 
    241             IF( dta_alias%lneed_dyn2d ) dta_alias%v2d(:) = 0._wp 
     231            IF( dta_alias%lneed_ssh   .AND. ASSOCIATED(dta_alias%ssh) ) dta_alias%ssh(:) = 0._wp 
     232            IF( dta_alias%lneed_dyn2d .AND. ASSOCIATED(dta_alias%u2d) ) dta_alias%u2d(:) = 0._wp 
     233            IF( dta_alias%lneed_dyn2d .AND. ASSOCIATED(dta_alias%v2d) ) dta_alias%v2d(:) = 0._wp 
    242234         ENDIF 
    243235 
     
    246238            ! 
    247239            igrd = 2                       ! zonal velocity 
    248             dta_alias%u2d(:) = 0._wp       ! compute barotrope zonal velocity and put it in u2d 
    249240            DO ib = 1, idx_bdy(jbdy)%nblen(igrd) 
    250241               ii   = idx_bdy(jbdy)%nbi(ib,igrd) 
    251242               ij   = idx_bdy(jbdy)%nbj(ib,igrd) 
     243               dta_alias%u2d(ib) = 0._wp   ! compute barotrope zonal velocity and put it in u2d 
    252244               DO ik = 1, jpkm1 
    253245                  dta_alias%u2d(ib) = dta_alias%u2d(ib)   & 
     
    260252            END DO 
    261253            igrd = 3                       ! meridional velocity 
    262             dta_alias%v2d(:) = 0._wp       ! compute barotrope meridional velocity and put it in v2d 
    263254            DO ib = 1, idx_bdy(jbdy)%nblen(igrd) 
    264255               ii   = idx_bdy(jbdy)%nbi(ib,igrd) 
    265256               ij   = idx_bdy(jbdy)%nbj(ib,igrd) 
     257               dta_alias%v2d(ib) = 0._wp   ! compute barotrope meridional velocity and put it in v2d 
    266258               DO ik = 1, jpkm1 
    267259                  dta_alias%v2d(ib) = dta_alias%v2d(ib)   & 
     
    286278 
    287279#if defined key_si3 
    288          IF( dta_alias%lneed_ice ) THEN 
     280         IF( dta_alias%lneed_ice .AND. idx_bdy(jbdy)%nblen(1) > 0 ) THEN 
    289281            ! fill temperature and salinity arrays 
    290282            IF( TRIM(bf_alias(jp_bdyt_i)%clrootname) == 'NOT USED' )   bf_alias(jp_bdyt_i)%fnow(:,1,:) = rice_tem (jbdy) 
     
    295287               &                                                                         bf_alias(jp_bdya_i)%fnow(:,1,:)     !   ( a_ip = rice_apnd * a_i ) 
    296288            IF( TRIM(bf_alias(jp_bdyhip)%clrootname) == 'NOT USED' )   bf_alias(jp_bdyhip)%fnow(:,1,:) = rice_hpnd(jbdy) 
     289             
     290            ! if T_i is read and not T_su, set T_su = T_i 
     291            IF( TRIM(bf_alias(jp_bdyt_i)%clrootname) /= 'NOT USED' .AND. TRIM(bf_alias(jp_bdytsu)%clrootname) == 'NOT USED' ) & 
     292               &   bf_alias(jp_bdytsu)%fnow(:,1,:) = bf_alias(jp_bdyt_i)%fnow(:,1,:) 
     293            ! if T_s is read and not T_su, set T_su = T_s 
     294            IF( TRIM(bf_alias(jp_bdyt_s)%clrootname) /= 'NOT USED' .AND. TRIM(bf_alias(jp_bdytsu)%clrootname) == 'NOT USED' ) & 
     295               &   bf_alias(jp_bdytsu)%fnow(:,1,:) = bf_alias(jp_bdyt_s)%fnow(:,1,:) 
     296            ! if T_i is read and not T_s, set T_s = T_i 
     297            IF( TRIM(bf_alias(jp_bdyt_i)%clrootname) /= 'NOT USED' .AND. TRIM(bf_alias(jp_bdyt_s)%clrootname) == 'NOT USED' ) & 
     298               &   bf_alias(jp_bdyt_s)%fnow(:,1,:) = bf_alias(jp_bdyt_i)%fnow(:,1,:) 
     299            ! if T_su is read and not T_s, set T_s = T_su 
     300            IF( TRIM(bf_alias(jp_bdytsu)%clrootname) /= 'NOT USED' .AND. TRIM(bf_alias(jp_bdyt_s)%clrootname) == 'NOT USED' ) & 
     301               &   bf_alias(jp_bdyt_s)%fnow(:,1,:) = bf_alias(jp_bdytsu)%fnow(:,1,:) 
    297302            ! if T_su is read and not T_i, set T_i = (T_su + T_freeze)/2 
    298303            IF( TRIM(bf_alias(jp_bdytsu)%clrootname) /= 'NOT USED' .AND. TRIM(bf_alias(jp_bdyt_i)%clrootname) == 'NOT USED' ) & 
    299304               &   bf_alias(jp_bdyt_i)%fnow(:,1,:) = 0.5_wp * ( bf_alias(jp_bdytsu)%fnow(:,1,:) + 271.15 ) 
    300             ! if T_su is read and not T_s, set T_s = T_su 
    301             IF( TRIM(bf_alias(jp_bdytsu)%clrootname) /= 'NOT USED' .AND. TRIM(bf_alias(jp_bdyt_s)%clrootname) == 'NOT USED' ) & 
    302                &   bf_alias(jp_bdyt_s)%fnow(:,1,:) = bf_alias(jp_bdytsu)%fnow(:,1,:) 
    303             ! if T_s is read and not T_su, set T_su = T_s 
    304             IF( TRIM(bf_alias(jp_bdyt_s)%clrootname) /= 'NOT USED' .AND. TRIM(bf_alias(jp_bdytsu)%clrootname) == 'NOT USED' ) & 
    305                &   bf_alias(jp_bdytsu)%fnow(:,1,:) = bf_alias(jp_bdyt_s)%fnow(:,1,:) 
    306305            ! if T_s is read and not T_i, set T_i = (T_s + T_freeze)/2 
    307306            IF( TRIM(bf_alias(jp_bdyt_s)%clrootname) /= 'NOT USED' .AND. TRIM(bf_alias(jp_bdyt_i)%clrootname) == 'NOT USED' ) & 
     
    334333            DO jbdy = 1, nb_bdy      ! Tidal component added in ts loop 
    335334               IF ( nn_dyn2d_dta(jbdy) .GE. 2 ) THEN 
    336                   nblen => idx_bdy(jbdy)%nblen 
    337                   nblenrim => idx_bdy(jbdy)%nblenrim 
    338                   IF( cn_dyn2d(jbdy) == 'frs' ) THEN   ;   ilen1(:)=nblen(:) 
    339                   ELSE                                 ;   ilen1(:)=nblenrim(:) 
     335                  IF( cn_dyn2d(jbdy) == 'frs' ) THEN   ;   ilen1(:)=idx_bdy(jbdy)%nblen(:) 
     336                  ELSE                                 ;   ilen1(:)=idx_bdy(jbdy)%nblenrim(:) 
    340337                  ENDIF 
    341338                  IF ( dta_bdy(jbdy)%lneed_ssh   ) dta_bdy_s(jbdy)%ssh(1:ilen1(1)) = dta_bdy(jbdy)%ssh(1:ilen1(1)) 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/BDY/bdyice.F90

    r11536 r12724  
    179179 
    180180            ! Then, a) transfer the snow excess into the ice (different from icethd_dh) 
    181             zdh = MAX( 0._wp, ( rhos * h_s(ji,jj,jl) + ( rhoi - rau0 ) * h_i(ji,jj,jl) ) * r1_rau0 ) 
     181            zdh = MAX( 0._wp, ( rhos * h_s(ji,jj,jl) + ( rhoi - rho0 ) * h_i(ji,jj,jl) ) * r1_rho0 ) 
    182182            ! Or, b) transfer all the snow into ice (if incoming ice is likely to melt as it comes into a warmer environment) 
    183183            !zdh = MAX( 0._wp, h_s(ji,jj,jl) * rhos / rhoi ) 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/BDY/bdylib.F90

    r12377 r12724  
    240240         ! Centred derivative is calculated as average of "left" and "right" derivatives for  
    241241         ! this reason.  
    242          ! Note no rdt factor in expression for zdt because it cancels in the expressions for  
     242         ! Note no rn_Dt factor in expression for zdt because it cancels in the expressions for  
    243243         ! zrx and zry. 
    244244         zdt   =     phia(iibm1   ,ijbm1   ) - phib(iibm1   ,ijbm1   ) 
     
    259259         zout = sign( 1., zrx ) 
    260260         zout = 0.5*( zout + abs(zout) ) 
    261          zwgt = 2.*rdt*( (1.-zout) * idx%nbd(jb,igrd) + zout * idx%nbdout(jb,igrd) ) 
     261         zwgt = 2.*rn_Dt*( (1.-zout) * idx%nbd(jb,igrd) + zout * idx%nbdout(jb,igrd) ) 
    262262         ! only apply radiation on outflow points  
    263263         if( ll_npo ) then     !! NPO version !! 
     
    425425            zout = sign( 1., zrx ) 
    426426            zout = 0.5*( zout + abs(zout) ) 
    427             zwgt = 2.*rdt*( (1.-zout) * idx%nbd(jb,igrd) + zout * idx%nbdout(jb,igrd) ) 
     427            zwgt = 2.*rn_Dt*( (1.-zout) * idx%nbd(jb,igrd) + zout * idx%nbdout(jb,igrd) ) 
    428428            ! only apply radiation on outflow points  
    429429            if( ll_npo ) then     !! NPO version !! 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/BDY/bdytides.F90

    r12377 r12724  
    297297      ! Absolute time from model initialization:    
    298298      IF( PRESENT(kit) ) THEN   
    299          z_arg = ( REAL(kt, wp) + ( REAL(kit, wp) + zt_offset - 1. ) / REAL(nn_baro, wp) ) * rdt 
     299         z_arg = ( REAL(kt, wp) + ( REAL(kit, wp) + zt_offset - 1. ) / REAL(nn_e, wp) ) * rn_Dt 
    300300      ELSE                               
    301          z_arg = ( REAL(kt, wp) + zt_offset ) * rdt 
     301         z_arg = ( REAL(kt, wp) + zt_offset ) * rn_Dt 
    302302      ENDIF 
    303303 
    304304      ! Linear ramp on tidal component at open boundaries  
    305305      zramp = 1. 
    306       IF (ln_tide_ramp) zramp = MIN(MAX( (z_arg - REAL(nit000,wp)*rdt)/(rn_tide_ramp_dt*rday),0.),1.) 
     306      IF (ln_tide_ramp) zramp = MIN(MAX( (z_arg - REAL(nit000,wp)*rn_Dt)/(rn_tide_ramp_dt*rday),0.),1.) 
    307307 
    308308      DO ib_bdy = 1,nb_bdy 
     
    319319            ! We refresh nodal factors every day below 
    320320            ! This should be done somewhere else 
    321             IF ( ( nsec_day == NINT(0.5_wp * rdt) .OR. kt==nit000 ) .AND. lk_first_btstp ) THEN 
    322                ! 
    323                kt_tide = kt - NINT((REAL(nsec_day,wp) - 0.5_wp * rdt)/rdt) 
     321            IF ( ( nsec_day == NINT(0.5_wp * rn_Dt) .OR. kt==nit000 ) .AND. lk_first_btstp ) THEN 
     322               ! 
     323               kt_tide = kt - NINT((REAL(nsec_day,wp) - 0.5_wp * rn_Dt)/rn_Dt) 
    324324               ! 
    325325               IF(lwp) THEN 
     
    333333               ! 
    334334            ENDIF 
    335             zoff = REAL(-kt_tide,wp) * rdt ! time offset relative to nodal factor computation time 
     335            zoff = REAL(-kt_tide,wp) * rn_Dt ! time offset relative to nodal factor computation time 
    336336            ! 
    337337            ! If time splitting, initialize arrays from slow varying open boundary data: 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/BDY/bdyvol.F90

    r12377 r12724  
    7777      ! Calculate the cumulate surface Flux z_cflxemp (m3/s) over all the domain 
    7878      ! ----------------------------------------------------------------------- 
    79       IF ( kc == 1 ) z_cflxemp = glob_sum( 'bdyvol', ( emp(:,:) - rnf(:,:) + fwfisf_cav(:,:) + fwfisf_par(:,:) ) * bdytmask(:,:) * e1e2t(:,:)  ) / rau0 
     79      IF ( kc == 1 ) z_cflxemp = glob_sum( 'bdyvol', ( emp(:,:) - rnf(:,:) + fwfisf_cav(:,:) + fwfisf_par(:,:) ) * bdytmask(:,:) * e1e2t(:,:)  ) / rho0 
    8080 
    8181      ! Compute bdy surface each cycle if non linear free surface 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/DIA/dia25h.F90

    r12377 r12724  
    140140      ! ----------------- 
    141141      ! Define frequency of summing to create 25 h mean 
    142       IF( MOD( 3600,NINT(rdt) ) == 0 ) THEN 
    143          i_steps = 3600/NINT(rdt) 
     142      IF( MOD( 3600,NINT(rn_Dt) ) == 0 ) THEN 
     143         i_steps = 3600/NINT(rn_Dt) 
    144144      ELSE 
    145          CALL ctl_stop('STOP', 'dia_wri_tide: timestep must give MOD(3600,rdt) = 0 otherwise no hourly values are possible') 
     145         CALL ctl_stop('STOP', 'dia_wri_tide: timestep must give MOD(3600,rn_Dt) = 0 otherwise no hourly values are possible') 
    146146      ENDIF 
    147147 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/DIA/diaar5.F90

    r12680 r12724  
    3232   REAL(wp)                         ::   vol0         ! ocean volume (interior domain) 
    3333   REAL(wp)                         ::   area_tot     ! total ocean surface (interior domain) 
    34    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:  ) ::   area         ! cell surface (interior domain) 
    3534   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:  ) ::   thick0       ! ocean thickness (interior domain) 
    3635   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sn0          ! initial salinity 
     
    5554      !!---------------------------------------------------------------------- 
    5655      ! 
    57       ALLOCATE( area(jpi,jpj), thick0(jpi,jpj) , sn0(jpi,jpj,jpk) , STAT=dia_ar5_alloc ) 
     56      ALLOCATE( thick0(jpi,jpj) , sn0(jpi,jpj,jpk) , STAT=dia_ar5_alloc ) 
    5857      ! 
    5958      CALL mpp_sum ( 'diaar5', dia_ar5_alloc ) 
     
    9190         ALLOCATE( zrhd(jpi,jpj,jpk) , zrhop(jpi,jpj,jpk) ) 
    9291         ALLOCATE( ztsn(jpi,jpj,jpk,jpts) ) 
    93          zarea_ssh(:,:) = area(:,:) * ssh(:,:,Kmm) 
    94       ENDIF 
    95       ! 
    96       CALL iom_put( 'e2u'      , e2u (:,:) ) 
    97       CALL iom_put( 'e1v'      , e1v (:,:) ) 
    98       CALL iom_put( 'areacello', area(:,:) ) 
     92         zarea_ssh(:,:) = e1e2t(:,:) * ssh(:,:,Kmm) 
     93      ENDIF 
     94      ! 
     95      CALL iom_put( 'e2u'      , e2u  (:,:) ) 
     96      CALL iom_put( 'e1v'      , e1v  (:,:) ) 
     97      CALL iom_put( 'areacello', e1e2t(:,:) ) 
    9998      ! 
    10099      IF( iom_use( 'volcello' ) .OR. iom_use( 'masscello' )  ) THEN   
    101100         zrhd(:,:,jpk) = 0._wp        ! ocean volume ; rhd is used as workspace 
    102101         DO jk = 1, jpkm1 
    103             zrhd(:,:,jk) = area(:,:) * e3t(:,:,jk,Kmm) * tmask(:,:,jk) 
     102            zrhd(:,:,jk) = e1e2t(:,:) * e3t(:,:,jk,Kmm) * tmask(:,:,jk) 
    104103         END DO 
    105104         DO jk = 1, jpk 
    106             z3d(:,:,jk) =  rau0 * e3t(:,:,jk,Kmm) * tmask(:,:,jk) 
     105            z3d(:,:,jk) =  rho0 * e3t(:,:,jk,Kmm) * tmask(:,:,jk) 
    107106         END DO  
    108107         CALL iom_put( 'volcello'  , zrhd(:,:,:)  )  ! WARNING not consistent with CMIP DR where volcello is at ca. 2000 
     
    155154         END IF 
    156155         !                                          
    157          zarho = glob_sum( 'diaar5', area(:,:) * zbotpres(:,:) )  
     156         zarho = glob_sum( 'diaar5', e1e2t(:,:) * zbotpres(:,:) )  
    158157         zssh_steric = - zarho / area_tot 
    159158         CALL iom_put( 'sshthster', zssh_steric ) 
     
    181180         END IF 
    182181         !     
    183          zarho = glob_sum( 'diaar5', area(:,:) * zbotpres(:,:) )  
     182         zarho = glob_sum( 'diaar5', e1e2t(:,:) * zbotpres(:,:) )  
    184183         zssh_steric = - zarho / area_tot 
    185184         CALL iom_put( 'sshsteric', zssh_steric ) 
    186185         !                                         ! ocean bottom pressure 
    187          zztmp = rau0 * grav * 1.e-4_wp               ! recover pressure from pressure anomaly and cover to dbar = 1.e4 Pa 
     186         zztmp = rho0 * grav * 1.e-4_wp               ! recover pressure from pressure anomaly and cover to dbar = 1.e4 Pa 
    188187         zbotpres(:,:) = zztmp * ( zbotpres(:,:) + ssh(:,:,Kmm) + thick0(:,:) ) 
    189188         CALL iom_put( 'botpres', zbotpres ) 
     
    195194          ztsn(:,:,:,:) = 0._wp                    ! ztsn(:,:,1,jp_tem/sal) is used here as 2D Workspace for temperature & salinity 
    196195          DO_3D_11_11( 1, jpkm1 ) 
    197              zztmp = area(ji,jj) * e3t(ji,jj,jk,Kmm) 
     196             zztmp = e1e2t(ji,jj) * e3t(ji,jj,jk,Kmm) 
    198197             ztsn(ji,jj,1,jp_tem) = ztsn(ji,jj,1,jp_tem) + zztmp * ts(ji,jj,jk,jp_tem,Kmm) 
    199198             ztsn(ji,jj,1,jp_sal) = ztsn(ji,jj,1,jp_sal) + zztmp * ts(ji,jj,jk,jp_sal,Kmm) 
     
    217216         ztemp = glob_sum( 'diaar5', ztsn(:,:,1,jp_tem) ) 
    218217         zsal  = glob_sum( 'diaar5', ztsn(:,:,1,jp_sal) ) 
    219          zmass = rau0 * ( zarho + zvol )       
     218         zmass = rho0 * ( zarho + zvol )       
    220219         ! 
    221220         CALL iom_put( 'masstot', zmass ) 
     
    241240               z2d(:,:) = 0._wp 
    242241               DO jk = 1, jpkm1 
    243                  z2d(:,:) = z2d(:,:) + area(:,:) * e3t(:,:,jk,Kmm) * ztpot(:,:,jk) 
     242                 z2d(:,:) = z2d(:,:) + e1e2t(:,:) * e3t(:,:,jk,Kmm) * ztpot(:,:,jk) 
    244243               END DO 
    245244               ztemp = glob_sum( 'diaar5', z2d(:,:)  )  
     
    248247             ! 
    249248             IF( iom_use( 'ssttot' ) ) THEN   ! Output potential temperature in case we use TEOS-10 
    250                zsst = glob_sum( 'diaar5',  area(:,:) * ztpot(:,:,1)  )  
     249               zsst = glob_sum( 'diaar5',  e1e2t(:,:) * ztpot(:,:,1)  )  
    251250               CALL iom_put( 'ssttot', zsst / area_tot ) 
    252251             ENDIF 
     
    255254               z2d(:,:) = 0._wp 
    256255               DO_3D_11_11( 1, jpkm1 ) 
    257                   z2d(ji,jj) = z2d(ji,jj) + rau0 * e3t(ji,jj,jk,Kmm) *  ztpot(ji,jj,jk) 
     256                  z2d(ji,jj) = z2d(ji,jj) + rho0 * e3t(ji,jj,jk,Kmm) *  ztpot(ji,jj,jk) 
    258257               END_3D 
    259258               CALL iom_put( 'tosmint_pot', z2d )  
     
    263262      ELSE        
    264263         IF( iom_use('ssttot') ) THEN   ! Output sst in case we use EOS-80 
    265             zsst  = glob_sum( 'diaar5', area(:,:) * ts(:,:,1,jp_tem,Kmm) ) 
     264            zsst  = glob_sum( 'diaar5', e1e2t(:,:) * ts(:,:,1,jp_tem,Kmm) ) 
    266265            CALL iom_put('ssttot', zsst / area_tot ) 
    267266         ENDIF 
     
    289288          ELSE 
    290289            DO_3D_11_11( 1, jpk ) 
    291                zpe(ji,jj) = zpe(ji,jj) + avt(ji,jj,jk) * MIN(0._wp,rn2(ji,jj,jk)) * rau0 * e3w(ji,jj,jk,Kmm) 
     290               zpe(ji,jj) = zpe(ji,jj) + avt(ji,jj,jk) * MIN(0._wp,rn2(ji,jj,jk)) * rho0 * e3w(ji,jj,jk,Kmm) 
    292291            END_3D 
    293292         ENDIF 
     
    329328       CALL lbc_lnk( 'diaar5', z2d, 'U', -1. ) 
    330329       IF( cptr == 'adv' ) THEN 
    331           IF( ktra == jp_tem ) CALL iom_put( 'uadv_heattr' , rau0_rcp * z2d )  ! advective heat transport in i-direction 
    332           IF( ktra == jp_sal ) CALL iom_put( 'uadv_salttr' , rau0     * z2d )  ! advective salt transport in i-direction 
     330          IF( ktra == jp_tem ) CALL iom_put( 'uadv_heattr' , rho0_rcp * z2d )  ! advective heat transport in i-direction 
     331          IF( ktra == jp_sal ) CALL iom_put( 'uadv_salttr' , rho0     * z2d )  ! advective salt transport in i-direction 
    333332       ENDIF 
    334333       IF( cptr == 'ldf' ) THEN 
    335           IF( ktra == jp_tem ) CALL iom_put( 'udiff_heattr' , rau0_rcp * z2d ) ! diffusive heat transport in i-direction 
    336           IF( ktra == jp_sal ) CALL iom_put( 'udiff_salttr' , rau0     * z2d ) ! diffusive salt transport in i-direction 
     334          IF( ktra == jp_tem ) CALL iom_put( 'udiff_heattr' , rho0_rcp * z2d ) ! diffusive heat transport in i-direction 
     335          IF( ktra == jp_sal ) CALL iom_put( 'udiff_salttr' , rho0     * z2d ) ! diffusive salt transport in i-direction 
    337336       ENDIF 
    338337       ! 
     
    343342       CALL lbc_lnk( 'diaar5', z2d, 'V', -1. ) 
    344343       IF( cptr == 'adv' ) THEN 
    345           IF( ktra == jp_tem ) CALL iom_put( 'vadv_heattr' , rau0_rcp * z2d )  ! advective heat transport in j-direction 
    346           IF( ktra == jp_sal ) CALL iom_put( 'vadv_salttr' , rau0     * z2d )  ! advective salt transport in j-direction 
     344          IF( ktra == jp_tem ) CALL iom_put( 'vadv_heattr' , rho0_rcp * z2d )  ! advective heat transport in j-direction 
     345          IF( ktra == jp_sal ) CALL iom_put( 'vadv_salttr' , rho0     * z2d )  ! advective salt transport in j-direction 
    347346       ENDIF 
    348347       IF( cptr == 'ldf' ) THEN 
    349           IF( ktra == jp_tem ) CALL iom_put( 'vdiff_heattr' , rau0_rcp * z2d ) ! diffusive heat transport in j-direction 
    350           IF( ktra == jp_sal ) CALL iom_put( 'vdiff_salttr' , rau0     * z2d ) ! diffusive salt transport in j-direction 
     348          IF( ktra == jp_tem ) CALL iom_put( 'vdiff_heattr' , rho0_rcp * z2d ) ! diffusive heat transport in j-direction 
     349          IF( ktra == jp_sal ) CALL iom_put( 'vdiff_salttr' , rho0     * z2d ) ! diffusive salt transport in j-direction 
    351350       ENDIF 
    352351           
     
    379378         IF( dia_ar5_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'dia_ar5_init : unable to allocate arrays' ) 
    380379 
    381          area(:,:) = e1e2t(:,:) 
    382          area_tot  = glob_sum( 'diaar5', area(:,:) ) 
     380         area_tot  = glob_sum( 'diaar5', e1e2t(:,:) ) 
    383381 
    384382         ALLOCATE( zvol0(jpi,jpj) ) 
     
    387385         DO_3D_11_11( 1, jpkm1 ) 
    388386            idep = tmask(ji,jj,jk) * e3t_0(ji,jj,jk) 
    389             zvol0 (ji,jj) = zvol0 (ji,jj) +  idep * area(ji,jj) 
     387            zvol0 (ji,jj) = zvol0 (ji,jj) +  idep * e1e2t(ji,jj) 
    390388            thick0(ji,jj) = thick0(ji,jj) +  idep     
    391389         END_3D 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/DIA/diacfl.F90

    r12622 r12724  
    5353      ! 
    5454      INTEGER                          ::   ji, jj, jk                       ! dummy loop indices 
    55       REAL(wp)                         ::   z2dt, zCu_max, zCv_max, zCw_max  ! local scalars 
     55      REAL(wp)                         ::   zCu_max, zCv_max, zCw_max        ! local scalars 
    5656      INTEGER , DIMENSION(3)           ::   iloc_u , iloc_v , iloc_w , iloc  ! workspace 
    5757      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zCu_cfl, zCv_cfl, zCw_cfl        ! workspace 
     
    6060      IF( ln_timing )   CALL timing_start('dia_cfl') 
    6161      ! 
    62       !                       ! setup timestep multiplier to account for initial Eulerian timestep 
    63       IF( neuler == 0 .AND. kt == nit000 ) THEN   ;    z2dt = rdt 
    64       ELSE                                        ;    z2dt = rdt * 2._wp 
    65       ENDIF 
    66       ! 
    67       !                 
    6862      DO_3D_11_11( 1, jpk ) 
    69          zCu_cfl(ji,jj,jk) = ABS( uu(ji,jj,jk,Kmm) ) * z2dt / e1u  (ji,jj)      ! for i-direction 
    70          zCv_cfl(ji,jj,jk) = ABS( vv(ji,jj,jk,Kmm) ) * z2dt / e2v  (ji,jj)      ! for j-direction 
    71          zCw_cfl(ji,jj,jk) = ABS( ww(ji,jj,jk) ) * z2dt / e3w(ji,jj,jk,Kmm)   ! for k-direction 
     63         zCu_cfl(ji,jj,jk) = ABS( uu(ji,jj,jk,Kmm) ) * rDt / e1u  (ji,jj)      ! for i-direction 
     64         zCv_cfl(ji,jj,jk) = ABS( vv(ji,jj,jk,Kmm) ) * rDt / e2v  (ji,jj)      ! for j-direction 
     65         zCw_cfl(ji,jj,jk) = ABS( ww(ji,jj,jk) ) * rDt / e3w(ji,jj,jk,Kmm)   ! for k-direction 
    7266      END_3D 
    7367      ! 
     
    119113         WRITE(numcfl,*) '******************************************' 
    120114         WRITE(numcfl,FMT='(3x,a12,6x,f7.4,1x,i4,1x,i4,1x,i4)') 'Run Max Cu', rCu_max, nCu_loc(1), nCu_loc(2), nCu_loc(3) 
    121          WRITE(numcfl,FMT='(3x,a8,11x,f15.1)') ' => dt/C', z2dt/rCu_max 
     115         WRITE(numcfl,FMT='(3x,a8,11x,f15.1)') ' => dt/C', rDt/rCu_max 
    122116         WRITE(numcfl,*) '******************************************' 
    123117         WRITE(numcfl,FMT='(3x,a12,6x,f7.4,1x,i4,1x,i4,1x,i4)') 'Run Max Cv', rCv_max, nCv_loc(1), nCv_loc(2), nCv_loc(3) 
    124          WRITE(numcfl,FMT='(3x,a8,11x,f15.1)') ' => dt/C', z2dt/rCv_max 
     118         WRITE(numcfl,FMT='(3x,a8,11x,f15.1)') ' => dt/C', rDt/rCv_max 
    125119         WRITE(numcfl,*) '******************************************' 
    126120         WRITE(numcfl,FMT='(3x,a12,6x,f7.4,1x,i4,1x,i4,1x,i4)') 'Run Max Cw', rCw_max, nCw_loc(1), nCw_loc(2), nCw_loc(3) 
    127          WRITE(numcfl,FMT='(3x,a8,11x,f15.1)') ' => dt/C', z2dt/rCw_max 
     121         WRITE(numcfl,FMT='(3x,a8,11x,f15.1)') ' => dt/C', rDt/rCw_max 
    128122         CLOSE( numcfl )  
    129123         ! 
     
    132126         WRITE(numout,*) 'dia_cfl : Maximum Courant number information for the run ' 
    133127         WRITE(numout,*) '~~~~~~~' 
    134          WRITE(numout,*) '   Max Cu = ', rCu_max, ' at (i,j,k) = (',nCu_loc(1),nCu_loc(2),nCu_loc(3),') => dt/C = ', z2dt/rCu_max 
    135          WRITE(numout,*) '   Max Cv = ', rCv_max, ' at (i,j,k) = (',nCv_loc(1),nCv_loc(2),nCv_loc(3),') => dt/C = ', z2dt/rCv_max 
    136          WRITE(numout,*) '   Max Cw = ', rCw_max, ' at (i,j,k) = (',nCw_loc(1),nCw_loc(2),nCw_loc(3),') => dt/C = ', z2dt/rCw_max 
     128         WRITE(numout,*) '   Max Cu = ', rCu_max, ' at (i,j,k) = (',nCu_loc(1),nCu_loc(2),nCu_loc(3),') => dt/C = ', rDt/rCu_max 
     129         WRITE(numout,*) '   Max Cv = ', rCv_max, ' at (i,j,k) = (',nCv_loc(1),nCv_loc(2),nCv_loc(3),') => dt/C = ', rDt/rCv_max 
     130         WRITE(numout,*) '   Max Cw = ', rCw_max, ' at (i,j,k) = (',nCw_loc(1),nCw_loc(2),nCw_loc(3),') => dt/C = ', rDt/rCw_max 
    137131      ENDIF 
    138132      ! 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/DIA/diadct.F90

    r12680 r12724  
    679679                  zsn   = interp(Kmm,k%I,k%J,jk,'V',ts(:,:,:,jp_sal,Kmm) )  
    680680                  zrhop = interp(Kmm,k%I,k%J,jk,'V',rhop)  
    681                   zrhoi = interp(Kmm,k%I,k%J,jk,'V',rhd*rau0+rau0)  
     681                  zrhoi = interp(Kmm,k%I,k%J,jk,'V',rhd*rho0+rho0)  
    682682                  zsshn =  0.5*( ssh(k%I,k%J,Kmm) + ssh(k%I,k%J+1,Kmm)    ) * vmask(k%I,k%J,1)  
    683683               CASE(2,3)  
     
    685685                  zsn   = interp(Kmm,k%I,k%J,jk,'U',ts(:,:,:,jp_sal,Kmm) )  
    686686                  zrhop = interp(Kmm,k%I,k%J,jk,'U',rhop)  
    687                   zrhoi = interp(Kmm,k%I,k%J,jk,'U',rhd*rau0+rau0)  
     687                  zrhoi = interp(Kmm,k%I,k%J,jk,'U',rhd*rho0+rho0)  
    688688                  zsshn =  0.5*( ssh(k%I,k%J,Kmm) + ssh(k%I+1,k%J,Kmm)    ) * umask(k%I,k%J,1)   
    689689               END SELECT  
     
    852852                 zsn   = interp(Kmm,k%I,k%J,jk,'V',ts(:,:,:,jp_sal,Kmm) )  
    853853                 zrhop = interp(Kmm,k%I,k%J,jk,'V',rhop)  
    854                  zrhoi = interp(Kmm,k%I,k%J,jk,'V',rhd*rau0+rau0)  
     854                 zrhoi = interp(Kmm,k%I,k%J,jk,'V',rhd*rho0+rho0)  
    855855 
    856856              CASE(2,3)  
     
    858858                 zsn   = interp(Kmm,k%I,k%J,jk,'U',ts(:,:,:,jp_sal,Kmm) )  
    859859                 zrhop = interp(Kmm,k%I,k%J,jk,'U',rhop)  
    860                  zrhoi = interp(Kmm,k%I,k%J,jk,'U',rhd*rau0+rau0)  
     860                 zrhoi = interp(Kmm,k%I,k%J,jk,'U',rhd*rho0+rho0)  
    861861                 zsshn =  0.5*( ssh(k%I,k%J,Kmm)    + ssh(k%I+1,k%J,Kmm)    ) * umask(k%I,k%J,1)   
    862862              END SELECT  
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/DIA/diadetide.F90

    r12377 r12724  
    99   USE in_out_manager , ONLY :   lwp, numout 
    1010   USE iom            , ONLY :   iom_put 
    11    USE dom_oce        , ONLY :   rdt, nsec_day 
     11   USE dom_oce        , ONLY :   rn_Dt, nsec_day 
    1212   USE phycst         , ONLY :   rpi 
    1313   USE tide_mod 
     
    100100      zwght = 0.0_wp 
    101101      DO jn = 1, ndiadetide 
    102          ztmp = ( tdiadetide(jn) - REAL( nsec_day, KIND=wp ) ) / rdt 
     102         ztmp = ( tdiadetide(jn) - REAL( nsec_day, KIND=wp ) ) / rn_Dt 
    103103         IF ( ( ztmp < 0.5_wp ).AND.( ztmp >= -0.5_wp ) ) THEN 
    104104            zwght = zwght + 1.0_wp / REAL( ndiadetide, KIND=wp ) 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/DIA/diahsb.F90

    r12680 r12724  
    9393      ! 1 - Trends due to forcing ! 
    9494      ! ------------------------- ! 
    95       z_frc_trd_v = r1_rau0 * glob_sum( 'diahsb', - ( emp(:,:) - rnf(:,:) + fwfisf_cav(:,:) + fwfisf_par(:,:) ) * surf(:,:) )   ! volume fluxes 
     95      z_frc_trd_v = r1_rho0 * glob_sum( 'diahsb', - ( emp(:,:) - rnf(:,:) + fwfisf_cav(:,:) + fwfisf_par(:,:) ) * surf(:,:) )   ! volume fluxes 
    9696      z_frc_trd_t =           glob_sum( 'diahsb', sbc_tsc(:,:,jp_tem) * surf(:,:) )                       ! heat fluxes 
    9797      z_frc_trd_s =           glob_sum( 'diahsb', sbc_tsc(:,:,jp_sal) * surf(:,:) )                       ! salt fluxes 
     
    103103         &                          + glob_sum( 'diahsb', ( risf_cav_tsc(:,:,jp_tem) + risf_par_tsc(:,:,jp_tem) ) * surf(:,:) ) 
    104104      !                    ! Add penetrative solar radiation 
    105       IF( ln_traqsr )   z_frc_trd_t = z_frc_trd_t + r1_rau0_rcp * glob_sum( 'diahsb', qsr     (:,:) * surf(:,:) ) 
     105      IF( ln_traqsr )   z_frc_trd_t = z_frc_trd_t + r1_rho0_rcp * glob_sum( 'diahsb', qsr     (:,:) * surf(:,:) ) 
    106106      !                    ! Add geothermal heat flux 
    107107      IF( ln_trabbc )   z_frc_trd_t = z_frc_trd_t +               glob_sum( 'diahsb', qgh_trd0(:,:) * surf(:,:) ) 
     
    123123      ENDIF 
    124124 
    125       frc_v = frc_v + z_frc_trd_v * rdt 
    126       frc_t = frc_t + z_frc_trd_t * rdt 
    127       frc_s = frc_s + z_frc_trd_s * rdt 
     125      frc_v = frc_v + z_frc_trd_v * rn_Dt 
     126      frc_t = frc_t + z_frc_trd_t * rn_Dt 
     127      frc_s = frc_s + z_frc_trd_s * rn_Dt 
    128128      !                                          ! Advection flux through fixed surface (z=0) 
    129129      IF( ln_linssh ) THEN 
    130          frc_wn_t = frc_wn_t + z_wn_trd_t * rdt 
    131          frc_wn_s = frc_wn_s + z_wn_trd_s * rdt 
     130         frc_wn_t = frc_wn_t + z_wn_trd_t * rn_Dt 
     131         frc_wn_s = frc_wn_s + z_wn_trd_s * rn_Dt 
    132132      ENDIF 
    133133 
     
    202202 
    203203      CALL iom_put(   'bgfrcvol' , frc_v    * 1.e-9    )              ! vol - surface forcing (km3)  
    204       CALL iom_put(   'bgfrctem' , frc_t    * rau0 * rcp * 1.e-20 )   ! hc  - surface forcing (1.e20 J)  
    205       CALL iom_put(   'bgfrchfx' , frc_t    * rau0 * rcp /  &         ! hc  - surface forcing (W/m2)  
    206          &                       ( surf_tot * kt * rdt )        ) 
     204      CALL iom_put(   'bgfrctem' , frc_t    * rho0 * rcp * 1.e-20 )   ! hc  - surface forcing (1.e20 J)  
     205      CALL iom_put(   'bgfrchfx' , frc_t    * rho0 * rcp /  &         ! hc  - surface forcing (W/m2)  
     206         &                       ( surf_tot * kt * rn_Dt )        ) 
    207207      CALL iom_put(   'bgfrcsal' , frc_s    * 1.e-9    )              ! sc  - surface forcing (psu*km3)  
    208208 
     
    210210         CALL iom_put( 'bgtemper' , zdiff_hc / zvol_tot )              ! Temperature drift     (C)  
    211211         CALL iom_put( 'bgsaline' , zdiff_sc / zvol_tot )              ! Salinity    drift     (PSU) 
    212          CALL iom_put( 'bgheatco' , zdiff_hc * 1.e-20 * rau0 * rcp )   ! Heat content drift    (1.e20 J)  
    213          CALL iom_put( 'bgheatfx' , zdiff_hc * rau0 * rcp /  &         ! Heat flux drift       (W/m2)  
    214             &                       ( surf_tot * kt * rdt )        ) 
     212         CALL iom_put( 'bgheatco' , zdiff_hc * 1.e-20 * rho0 * rcp )   ! Heat content drift    (1.e20 J)  
     213         CALL iom_put( 'bgheatfx' , zdiff_hc * rho0 * rcp /  &         ! Heat flux drift       (W/m2)  
     214            &                       ( surf_tot * kt * rn_Dt )        ) 
    215215         CALL iom_put( 'bgsaltco' , zdiff_sc * 1.e-9    )              ! Salt content drift    (psu*km3) 
    216216         CALL iom_put( 'bgvolssh' , zdiff_v1 * 1.e-9    )              ! volume ssh drift      (km3)   
     
    230230         CALL iom_put( 'bgtemper' , zdiff_hc1 / zvol_tot)              ! Heat content drift    (C)  
    231231         CALL iom_put( 'bgsaline' , zdiff_sc1 / zvol_tot)              ! Salt content drift    (PSU) 
    232          CALL iom_put( 'bgheatco' , zdiff_hc1 * 1.e-20 * rau0 * rcp )  ! Heat content drift    (1.e20 J)  
    233          CALL iom_put( 'bgheatfx' , zdiff_hc1 * rau0 * rcp /  &        ! Heat flux drift       (W/m2)  
    234             &                       ( surf_tot * kt * rdt )         ) 
     232         CALL iom_put( 'bgheatco' , zdiff_hc1 * 1.e-20 * rho0 * rcp )  ! Heat content drift    (1.e20 J)  
     233         CALL iom_put( 'bgheatfx' , zdiff_hc1 * rho0 * rcp /  &        ! Heat flux drift       (W/m2)  
     234            &                       ( surf_tot * kt * rn_Dt )         ) 
    235235         CALL iom_put( 'bgsaltco' , zdiff_sc1 * 1.e-9    )             ! Salt content drift    (psu*km3) 
    236236         CALL iom_put( 'bgvolssh' , zdiff_v1 * 1.e-9    )              ! volume ssh drift      (km3)   
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/DIA/diahth.F90

    r12622 r12724  
    262262            zzdep = 300. 
    263263            CALL  dia_hth_htc( Kmm, zzdep, ts(:,:,:,jp_tem,Kmm), htc3 ) 
    264             CALL iom_put( 'hc300', rau0_rcp * htc3 )  ! vertically integrated heat content (J/m2) 
     264            CALL iom_put( 'hc300', rho0_rcp * htc3 )  ! vertically integrated heat content (J/m2) 
    265265         ENDIF 
    266266         ! 
     
    271271            zzdep = 700. 
    272272            CALL  dia_hth_htc( Kmm, zzdep, ts(:,:,:,jp_tem,Kmm), htc7 ) 
    273             CALL iom_put( 'hc700', rau0_rcp * htc7 )  ! vertically integrated heat content (J/m2) 
     273            CALL iom_put( 'hc700', rho0_rcp * htc7 )  ! vertically integrated heat content (J/m2) 
    274274   
    275275         ENDIF 
     
    281281            zzdep = 2000. 
    282282            CALL  dia_hth_htc( Kmm, zzdep, ts(:,:,:,jp_tem,Kmm), htc20 ) 
    283             CALL iom_put( 'hc2000', rau0_rcp * htc20 )  ! vertically integrated heat content (J/m2)   
     283            CALL iom_put( 'hc2000', rho0_rcp * htc20 )  ! vertically integrated heat content (J/m2)   
    284284         ENDIF 
    285285         ! 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/DIA/diamlr.F90

    r12680 r12724  
    8787      INTEGER                                     ::   itide                       ! Number of available tidal components 
    8888      REAL(wp)                                    ::   ztide_phase                 ! Tidal-constituent phase at adatrj=0 
    89       CHARACTER (LEN=4), DIMENSION(jpmax_harmo)   ::   ctide_selected = ' n/a ' 
     89      CHARACTER (LEN=4), DIMENSION(jpmax_harmo)   ::   ctide_selected = 'n/a ' 
    9090      TYPE(tide_harmonic), DIMENSION(:), POINTER  ::   stideconst 
    9191 
     
    148148            ! Retrieve information (frequency, phase, nodal correction) about all 
    149149            ! available tidal constituents for placeholder substitution below 
    150             ctide_selected(1:34) = (/ 'Mf  ', 'Mm  ', 'Ssa ', 'Mtm ', 'Msf ',    & 
    151    &                      'Msqm', 'Sa  ', 'K1  ', 'O1  ', 'P1  ',     & 
    152    &                      'Q1  ', 'J1  ', 'S1  ', 'M2  ', 'S2  ', 'N2  ', & 
    153    &                      'K2  ', 'nu2 ', 'mu2 ', '2N2 ', 'L2  ',    & 
    154    &                      'T2  ', 'eps2', 'lam2', 'R2  ', 'M3  ',   & 
    155    &                      'MKS2', 'MN4 ', 'MS4 ', 'M4  ', 'N4  ',   & 
    156    &                      'S4  ', 'M6  ', 'M8  ' /) 
     150            ! Warning: we must use the same character length in an array constructor (at least for gcc compiler) 
     151            ctide_selected(1:34) = (/ 'Mf  ', 'Mm  ', 'Ssa ', 'Mtm ', 'Msf ',         & 
     152               &                      'Msqm', 'Sa  ', 'K1  ', 'O1  ', 'P1  ',         & 
     153               &                      'Q1  ', 'J1  ', 'S1  ', 'M2  ', 'S2  ', 'N2  ', & 
     154               &                      'K2  ', 'nu2 ', 'mu2 ', '2N2 ', 'L2  ',         & 
     155               &                      'T2  ', 'eps2', 'lam2', 'R2  ', 'M3  ',         & 
     156               &                      'MKS2', 'MN4 ', 'MS4 ', 'M4  ', 'N4  ',         & 
     157               &                      'S4  ', 'M6  ', 'M8  ' /) 
    157158            CALL tide_init_harmonics(ctide_selected, stideconst) 
    158159            itide = size(stideconst) 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/DIA/dianam.F90

    r10068 r12724  
    7272 
    7373      IF( llfsec .OR. kfreq < 0 ) THEN   ;   inbsec = kfreq                       ! output frequency already in seconds 
    74       ELSE                               ;   inbsec = kfreq * NINT( rdt )   ! from time-step to seconds 
     74      ELSE                               ;   inbsec = kfreq * NINT( rn_Dt )   ! from time-step to seconds 
    7575      ENDIF 
    7676      iddss = NINT( rday          )                                         ! number of seconds in 1 day 
     
    116116      ! date of the beginning and the end of the run 
    117117 
    118       zdrun = rdt / rday * REAL( nitend - nit000, wp )                ! length of the run in days 
    119       zjul  = fjulday - rdt / rday 
     118      zdrun = rn_Dt / rday * REAL( nitend - nit000, wp )                ! length of the run in days 
     119      zjul  = fjulday - rn_Dt / rday 
    120120      CALL ju2ymds( zjul        , iyear1, imonth1, iday1, zsec1 )           ! year/month/day of the beginning of run 
    121121      CALL ju2ymds( zjul + zdrun, iyear2, imonth2, iday2, zsec2 )           ! year/month/day of the end       of run 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/DIA/diaptr.F90

    r12680 r12724  
    5050 
    5151   REAL(wp) ::   rc_sv    = 1.e-6_wp   ! conversion from m3/s to Sverdrup 
    52    REAL(wp) ::   rc_pwatt = 1.e-15_wp  ! conversion from W    to PW (further x rau0 x Cp) 
    53    REAL(wp) ::   rc_ggram = 1.e-9_wp   ! conversion from g    to Gg  (further x rau0) 
     52   REAL(wp) ::   rc_pwatt = 1.e-15_wp  ! conversion from W    to PW (further x rho0 x Cp) 
     53   REAL(wp) ::   rc_ggram = 1.e-9_wp   ! conversion from g    to Gg  (further x rho0) 
    5454 
    5555   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: btmsk   ! T-point basin interior masks 
     
    348348         IF( dia_ptr_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'dia_ptr_init : unable to allocate arrays' ) 
    349349 
    350          rc_pwatt = rc_pwatt * rau0_rcp          ! conversion from K.s-1 to PetaWatt 
    351          rc_ggram = rc_ggram * rau0              ! conversion from m3/s to Gg/s 
     350         rc_pwatt = rc_pwatt * rho0_rcp          ! conversion from K.s-1 to PetaWatt 
     351         rc_ggram = rc_ggram * rho0              ! conversion from m3/s to Gg/s 
    352352 
    353353         IF( lk_mpp )   CALL mpp_ini_znl( numout )     ! Define MPI communicator for zonal sum 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/DIA/diawri.F90

    r12680 r12724  
    193193 
    194194      IF ( iom_use("taubot") ) THEN                ! bottom stress 
    195          zztmp = rau0 * 0.25 
     195         zztmp = rho0 * 0.25 
    196196         z2d(:,:) = 0._wp 
    197197         DO_2D_00_00 
     
    232232      IF( iom_use('w_masstr') .OR. iom_use('w_masstr2') ) THEN   ! vertical mass transport & its square value 
    233233         ! Caution: in the VVL case, it only correponds to the baroclinic mass transport. 
    234          z2d(:,:) = rau0 * e1e2t(:,:) 
     234         z2d(:,:) = rho0 * e1e2t(:,:) 
    235235         DO jk = 1, jpk 
    236236            z3d(:,:,jk) = ww(:,:,jk) * z2d(:,:) 
     
    269269            z2d(ji,jj) = z2d(ji,jj) + e3t(ji,jj,jk,Kmm) * ts(ji,jj,jk,jp_tem,Kmm) * tmask(ji,jj,jk) 
    270270         END_3D 
    271          CALL iom_put( "heatc", rau0_rcp * z2d )   ! vertically integrated heat content (J/m2) 
     271         CALL iom_put( "heatc", rho0_rcp * z2d )   ! vertically integrated heat content (J/m2) 
    272272      ENDIF 
    273273 
     
    277277            z2d(ji,jj) = z2d(ji,jj) + e3t(ji,jj,jk,Kmm) * ts(ji,jj,jk,jp_sal,Kmm) * tmask(ji,jj,jk) 
    278278         END_3D 
    279          CALL iom_put( "saltc", rau0 * z2d )          ! vertically integrated salt content (PSU*kg/m2) 
     279         CALL iom_put( "saltc", rho0 * z2d )          ! vertically integrated salt content (PSU*kg/m2) 
    280280      ENDIF 
    281281      ! 
     
    299299         z2d(:,:) = 0.e0 
    300300         DO jk = 1, jpkm1 
    301             z3d(:,:,jk) = rau0 * uu(:,:,jk,Kmm) * e2u(:,:) * e3u(:,:,jk,Kmm) * umask(:,:,jk) 
     301            z3d(:,:,jk) = rho0 * uu(:,:,jk,Kmm) * e2u(:,:) * e3u(:,:,jk,Kmm) * umask(:,:,jk) 
    302302            z2d(:,:) = z2d(:,:) + z3d(:,:,jk) 
    303303         END DO 
     
    328328         z3d(:,:,jpk) = 0.e0 
    329329         DO jk = 1, jpkm1 
    330             z3d(:,:,jk) = rau0 * vv(:,:,jk,Kmm) * e1v(:,:) * e3v(:,:,jk,Kmm) * vmask(:,:,jk) 
     330            z3d(:,:,jk) = rho0 * vv(:,:,jk,Kmm) * e1v(:,:) * e3v(:,:,jk,Kmm) * vmask(:,:,jk) 
    331331         END DO 
    332332         CALL iom_put( "v_masstr", z3d )              ! mass transport in j-direction 
     
    357357         END_3D 
    358358         CALL lbc_lnk( 'diawri', z2d, 'T', -1. ) 
    359          CALL iom_put( "tosmint", rau0 * z2d )        ! Vertical integral of temperature 
     359         CALL iom_put( "tosmint", rho0 * z2d )        ! Vertical integral of temperature 
    360360      ENDIF 
    361361      IF( iom_use("somint") ) THEN 
     
    365365         END_3D 
    366366         CALL lbc_lnk( 'diawri', z2d, 'T', -1. ) 
    367          CALL iom_put( "somint", rau0 * z2d )         ! Vertical integral of salinity 
     367         CALL iom_put( "somint", rho0 * z2d )         ! Vertical integral of salinity 
    368368      ENDIF 
    369369 
     
    386386      INTEGER, DIMENSION(2) :: ierr 
    387387      !!---------------------------------------------------------------------- 
    388       ierr = 0 
    389       ALLOCATE( ndex_hT(jpi*jpj) , ndex_T(jpi*jpj*jpk) ,     & 
    390          &      ndex_hU(jpi*jpj) , ndex_U(jpi*jpj*jpk) ,     & 
    391          &      ndex_hV(jpi*jpj) , ndex_V(jpi*jpj*jpk) , STAT=ierr(1) ) 
     388      IF( nn_write == -1 ) THEN 
     389         dia_wri_alloc = 0 
     390      ELSE     
     391         ierr = 0 
     392         ALLOCATE( ndex_hT(jpi*jpj) , ndex_T(jpi*jpj*jpk) ,     & 
     393            &      ndex_hU(jpi*jpj) , ndex_U(jpi*jpj*jpk) ,     & 
     394            &      ndex_hV(jpi*jpj) , ndex_V(jpi*jpj*jpk) , STAT=ierr(1) ) 
    392395         ! 
    393      dia_wri_alloc = MAXVAL(ierr) 
    394       CALL mpp_sum( 'diawri', dia_wri_alloc ) 
     396         dia_wri_alloc = MAXVAL(ierr) 
     397         CALL mpp_sum( 'diawri', dia_wri_alloc ) 
     398         ! 
     399      ENDIF 
    395400      ! 
    396401   END FUNCTION dia_wri_alloc 
     
    452457      clop = "x"         ! no use of the mask value (require less cpu time and otherwise the model crashes) 
    453458#if defined key_diainstant 
    454       zsto = nn_write * rdt 
     459      zsto = nn_write * rn_Dt 
    455460      clop = "inst("//TRIM(clop)//")" 
    456461#else 
    457       zsto=rdt 
     462      zsto=rn_Dt 
    458463      clop = "ave("//TRIM(clop)//")" 
    459464#endif 
    460       zout = nn_write * rdt 
    461       zmax = ( nitend - nit000 + 1 ) * rdt 
     465      zout = nn_write * rn_Dt 
     466      zmax = ( nitend - nit000 + 1 ) * rn_Dt 
    462467 
    463468      ! Define indices of the horizontal output zoom and vertical limit storage 
     
    485490 
    486491         ! Compute julian date from starting date of the run 
    487          CALL ymds2ju( nyear, nmonth, nday, rdt, zjulian ) 
     492         CALL ymds2ju( nyear, nmonth, nday, rn_Dt, zjulian ) 
    488493         zjulian = zjulian - adatrj   !   set calendar origin to the beginning of the experiment 
    489494         IF(lwp)WRITE(numout,*) 
     
    507512         CALL histbeg( clhstnam, jpi, glamt, jpj, gphit,           &  ! Horizontal grid: glamt and gphit 
    508513            &          iimi, iima-iimi+1, ijmi, ijma-ijmi+1,       & 
    509             &          nit000-1, zjulian, rdt, nh_T, nid_T, domain_id=nidom, snc4chunks=snc4set ) 
     514            &          nit000-1, zjulian, rn_Dt, nh_T, nid_T, domain_id=nidom, snc4chunks=snc4set ) 
    510515         CALL histvert( nid_T, "deptht", "Vertical T levels",      &  ! Vertical grid: gdept 
    511516            &           "m", ipk, gdept_1d, nz_T, "down" ) 
     
    543548         CALL histbeg( clhstnam, jpi, glamu, jpj, gphiu,           &  ! Horizontal grid: glamu and gphiu 
    544549            &          iimi, iima-iimi+1, ijmi, ijma-ijmi+1,       & 
    545             &          nit000-1, zjulian, rdt, nh_U, nid_U, domain_id=nidom, snc4chunks=snc4set ) 
     550            &          nit000-1, zjulian, rn_Dt, nh_U, nid_U, domain_id=nidom, snc4chunks=snc4set ) 
    546551         CALL histvert( nid_U, "depthu", "Vertical U levels",      &  ! Vertical grid: gdept 
    547552            &           "m", ipk, gdept_1d, nz_U, "down" ) 
     
    556561         CALL histbeg( clhstnam, jpi, glamv, jpj, gphiv,           &  ! Horizontal grid: glamv and gphiv 
    557562            &          iimi, iima-iimi+1, ijmi, ijma-ijmi+1,       & 
    558             &          nit000-1, zjulian, rdt, nh_V, nid_V, domain_id=nidom, snc4chunks=snc4set ) 
     563            &          nit000-1, zjulian, rn_Dt, nh_V, nid_V, domain_id=nidom, snc4chunks=snc4set ) 
    559564         CALL histvert( nid_V, "depthv", "Vertical V levels",      &  ! Vertical grid : gdept 
    560565            &          "m", ipk, gdept_1d, nz_V, "down" ) 
     
    569574         CALL histbeg( clhstnam, jpi, glamt, jpj, gphit,           &  ! Horizontal grid: glamt and gphit 
    570575            &          iimi, iima-iimi+1, ijmi, ijma-ijmi+1,       & 
    571             &          nit000-1, zjulian, rdt, nh_W, nid_W, domain_id=nidom, snc4chunks=snc4set ) 
     576            &          nit000-1, zjulian, rn_Dt, nh_W, nid_W, domain_id=nidom, snc4chunks=snc4set ) 
    572577         CALL histvert( nid_W, "depthw", "Vertical W levels",      &  ! Vertical grid: gdepw 
    573578            &          "m", ipk, gdepw_1d, nz_W, "down" ) 
     
    579584            CALL histbeg( clhstnam, jpi, glamt, jpj, gphit,           &  ! Horizontal grid: glamt and gphit 
    580585               &          iimi, iima-iimi+1, ijmi, ijma-ijmi+1,       & 
    581                &          nit000-1, zjulian, rdt, nh_A, nid_A, domain_id=nidom, snc4chunks=snc4set ) 
     586               &          nit000-1, zjulian, rn_Dt, nh_A, nid_A, domain_id=nidom, snc4chunks=snc4set ) 
    582587            CALL histvert( nid_A, "ght_abl", "Vertical T levels",      &  ! Vertical grid: gdept 
    583588               &           "m", ipka, ght_abl(2:jpka), nz_A, "up" ) 
     
    953958      END DO 
    954959      ! 
    955 #if defined key_si3 
    956      CALL iom_open( TRIM(cdfile_name), inum, ldwrt = .TRUE., kdlev = jpl ) 
    957 #else 
    958      CALL iom_open( TRIM(cdfile_name), inum, ldwrt = .TRUE. ) 
    959 #endif 
    960  
     960      CALL iom_open( TRIM(cdfile_name), inum, ldwrt = .TRUE. ) 
     961      ! 
    961962      CALL iom_rstput( 0, 0, inum, 'votemper', ts(:,:,:,jp_tem,Kmm) )    ! now temperature 
    962963      CALL iom_rstput( 0, 0, inum, 'vosaline', ts(:,:,:,jp_sal,Kmm) )    ! now salinity 
     
    971972      CALL iom_rstput( 0, 0, inum, 'risfdep', risfdep            )    ! now k-velocity 
    972973      CALL iom_rstput( 0, 0, inum, 'ht'     , ht                 )    ! now water column height 
    973  
     974      ! 
    974975      IF ( ln_isf ) THEN 
    975976         IF (ln_isfcav_mlt) THEN 
     
    977978            CALL iom_rstput( 0, 0, inum, 'rhisf_cav_tbl', rhisf_tbl_cav    )    ! now k-velocity 
    978979            CALL iom_rstput( 0, 0, inum, 'rfrac_cav_tbl', rfrac_tbl_cav    )    ! now k-velocity 
    979             CALL iom_rstput( 0, 0, inum, 'misfkb_cav', REAL(misfkb_cav,8)    )    ! now k-velocity 
    980             CALL iom_rstput( 0, 0, inum, 'misfkt_cav', REAL(misfkt_cav,8)    )    ! now k-velocity 
    981             CALL iom_rstput( 0, 0, inum, 'mskisf_cav', REAL(mskisf_cav,8), ktype = jp_i1 ) 
     980            CALL iom_rstput( 0, 0, inum, 'misfkb_cav', REAL(misfkb_cav,wp) )    ! now k-velocity 
     981            CALL iom_rstput( 0, 0, inum, 'misfkt_cav', REAL(misfkt_cav,wp) )    ! now k-velocity 
     982            CALL iom_rstput( 0, 0, inum, 'mskisf_cav', REAL(mskisf_cav,wp), ktype = jp_i1 ) 
    982983         END IF 
    983984         IF (ln_isfpar_mlt) THEN 
    984             CALL iom_rstput( 0, 0, inum, 'isfmsk_par', REAL(mskisf_par,8) )    ! now k-velocity 
     985            CALL iom_rstput( 0, 0, inum, 'isfmsk_par', REAL(mskisf_par,wp) )    ! now k-velocity 
    985986            CALL iom_rstput( 0, 0, inum, 'fwfisf_par', fwfisf_par          )    ! now k-velocity 
    986987            CALL iom_rstput( 0, 0, inum, 'rhisf_par_tbl', rhisf_tbl_par    )    ! now k-velocity 
    987988            CALL iom_rstput( 0, 0, inum, 'rfrac_par_tbl', rfrac_tbl_par    )    ! now k-velocity 
    988             CALL iom_rstput( 0, 0, inum, 'misfkb_par', REAL(misfkb_par,8)    )    ! now k-velocity 
    989             CALL iom_rstput( 0, 0, inum, 'misfkt_par', REAL(misfkt_par,8)    )    ! now k-velocity 
    990             CALL iom_rstput( 0, 0, inum, 'mskisf_par', REAL(mskisf_par,8), ktype = jp_i1 ) 
     989            CALL iom_rstput( 0, 0, inum, 'misfkb_par', REAL(misfkb_par,wp) )    ! now k-velocity 
     990            CALL iom_rstput( 0, 0, inum, 'misfkt_par', REAL(misfkt_par,wp) )    ! now k-velocity 
     991            CALL iom_rstput( 0, 0, inum, 'mskisf_par', REAL(mskisf_par,wp), ktype = jp_i1 ) 
    991992         END IF 
    992993      END IF 
    993  
     994      ! 
    994995      IF( ALLOCATED(ahtu) ) THEN 
    995996         CALL iom_rstput( 0, 0, inum,  'ahtu', ahtu              )    ! aht at u-point 
     
    10211022         CALL iom_rstput ( 0, 0, inum, "qz1_abl",  tq_abl(:,:,2,nt_a,2) )   ! now first level humidity 
    10221023      ENDIF 
    1023   
     1024      ! 
     1025      CALL iom_close( inum ) 
     1026      !  
    10241027#if defined key_si3 
    10251028      IF( nn_ice == 2 ) THEN   ! condition needed in case agrif + ice-model but no-ice in child grid 
     1029         CALL iom_open( TRIM(cdfile_name)//'_ice', inum, ldwrt = .TRUE., kdlev = jpl, cdcomp = 'ICE' ) 
    10261030         CALL ice_wri_state( inum ) 
     1031         CALL iom_close( inum ) 
    10271032      ENDIF 
    10281033#endif 
    1029       ! 
    1030       CALL iom_close( inum ) 
    1031       !  
     1034 
    10321035   END SUBROUTINE dia_wri_state 
    10331036 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/DIU/diu_coolskin.F90

    r12377 r12724  
    6767 
    6868 
    69    SUBROUTINE diurnal_sst_coolskin_step(psqflux, pstauflux, psrho, rdt) 
     69   SUBROUTINE diurnal_sst_coolskin_step(psqflux, pstauflux, psrho, pDt) 
    7070      !!---------------------------------------------------------------------- 
    7171      !! *** ROUTINE diurnal_sst_takaya_step *** 
     
    8181      REAL(wp), INTENT(IN), DIMENSION(jpi,jpj) :: pstauflux   ! Wind stress (kg/ m s^2) 
    8282      REAL(wp), INTENT(IN), DIMENSION(jpi,jpj) :: psrho       ! Water density (kg/m^3) 
    83       REAL(wp), INTENT(IN) :: rdt                             ! Time-step 
     83      REAL(wp), INTENT(IN) :: pDt                             ! Time-step 
    8484      
    8585      ! Local variables 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/DIU/diu_layers.F90

    r12377 r12724  
    3939      ! Cool skin 
    4040 
    41       CALL diurnal_sst_coolskin_step( qns, taum, rhop(:,:,1), rdt) 
     41      CALL diurnal_sst_coolskin_step( qns, taum, rhop(:,:,1), rn_Dt) 
    4242 
    4343      CALL iom_put( "sst_wl"   , x_dsst               )    ! warm layer (write out before update below). 
     
    4545 
    4646      ! Diurnal warm layer model        
    47       CALL diurnal_sst_takaya_step( kstp, qsr, qns, taum, rhop(:,:,1), rdt)  
     47      CALL diurnal_sst_takaya_step( kstp, qsr, qns, taum, rhop(:,:,1), rn_Dt)  
    4848 
    4949   END SUBROUTINE diurnal_layers   
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/DOM/daymod.F90

    r12377 r12724  
    2020   !!                    ------------------------------- 
    2121   !!   sbcmod assume that the time step is dividing the number of second of  
    22    !!   in a day, i.e. ===> MOD( rday, rdt ) == 0  
     22   !!   in a day, i.e. ===> MOD( rday, rn_Dt ) == 0  
    2323   !!   except when user defined forcing is used (see sbcmod.F90) 
    2424   !!---------------------------------------------------------------------- 
     
    7373      ! 
    7474      ! max number of seconds between each restart 
    75       IF( REAL( nitend - nit000 + 1 ) * rdt > REAL( HUGE( nsec1jan000 ) ) ) THEN 
     75      IF( REAL( nitend - nit000 + 1 ) * rn_Dt > REAL( HUGE( nsec1jan000 ) ) ) THEN 
    7676         CALL ctl_stop( 'The number of seconds between each restart exceeds the integer 4 max value: 2^31-1. ',   & 
    7777            &           'You must do a restart at higher frequency (or remove this stop and recompile the code in I8)' ) 
     
    7979      nsecd   = NINT(       rday ) 
    8080      nsecd05 = NINT( 0.5 * rday ) 
    81       ndt     = NINT(       rdt  ) 
    82       ndt05   = NINT( 0.5 * rdt  ) 
     81      ndt     = NINT(       rn_Dt  ) 
     82      ndt05   = NINT( 0.5 * rn_Dt  ) 
    8383 
    8484      IF( .NOT. l_offline )   CALL day_rst( nit000, 'READ' ) 
     
    239239      nsec_monday  = nsec_monday  + ndt 
    240240      nsec_day   = nsec_day   + ndt 
    241       adatrj  = adatrj  + rdt / rday 
    242       fjulday = fjulday + rdt / rday 
     241      adatrj  = adatrj  + rn_Dt / rday 
     242      fjulday = fjulday + rn_Dt / rday 
    243243      IF( ABS(fjulday - REAL(NINT(fjulday),wp)) < zprec )   fjulday = REAL(NINT(fjulday),wp)   ! avoid truncation error 
    244244      IF( ABS(adatrj  - REAL(NINT(adatrj ),wp)) < zprec )   adatrj  = REAL(NINT(adatrj ),wp)   ! avoid truncation error 
     
    309309      !!       In both those options, the  exact duration of the experiment 
    310310      !!       since the beginning (cumulated duration of all previous restart runs) 
    311       !!       is not stored in the restart and is assumed to be (nit000-1)*rdt. 
     311      !!       is not stored in the restart and is assumed to be (nit000-1)*rn_Dt. 
    312312      !!       This is valid is the time step has remained constant. 
    313313      !! 
     
    379379               isecond = ( nhour * NINT(rhhmm) + nminute ) * NINT(rmmss) 
    380380               IF( isecond - ndt05 .lt. 0 )   ndastp = ndastp - 1      ! Start hour is specified in the namelist (default 0) 
    381                adatrj = ( REAL( nit000-1, wp ) * rdt ) / rday 
     381               adatrj = ( REAL( nit000-1, wp ) * rn_Dt ) / rday 
    382382               ! note this is wrong if time step has changed during run 
    383383            ENDIF 
     
    389389            isecond = ( nhour * NINT(rhhmm) + nminute ) * NINT(rmmss) 
    390390            IF( isecond - ndt05 .LT. 0 )   ndastp = ndastp - 1         ! Start hour is specified in the namelist (default 0) 
    391             adatrj = ( REAL( nit000-1, wp ) * rdt ) / rday 
     391            adatrj = ( REAL( nit000-1, wp ) * rn_Dt ) / rday 
    392392         ENDIF 
    393393         IF( ABS(adatrj  - REAL(NINT(adatrj),wp)) < 0.1 / rday )   adatrj = REAL(NINT(adatrj),wp)   ! avoid truncation error 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/DOM/dom_oce.F90

    r12680 r12724  
    3333   LOGICAL , PUBLIC ::   ln_linssh      !: =T  linear free surface ==>> model level are fixed in time 
    3434   LOGICAL , PUBLIC ::   ln_meshmask    !: =T  create a mesh-mask file (mesh_mask.nc) 
    35    REAL(wp), PUBLIC ::   rn_rdt         !: time step for the dynamics and tracer 
     35   REAL(wp), PUBLIC ::   rn_Dt          !: time step for the dynamics and tracer 
    3636   REAL(wp), PUBLIC ::   rn_atfp        !: asselin time filter parameter 
    37    INTEGER , PUBLIC ::   nn_euler       !: =0 start with forward time step or not (=1) 
     37   LOGICAL , PUBLIC ::   ln_1st_euler   !: =T start with forward time step or not (=F) 
    3838   LOGICAL , PUBLIC ::   ln_crs         !: Apply grid coarsening to dynamical model output or online passive tracers 
    3939 
     
    4949   LOGICAL,  PUBLIC :: ln_bt_auto       !: Set number of barotropic iterations automatically 
    5050   INTEGER,  PUBLIC :: nn_bt_flt        !: Filter choice 
    51    INTEGER,  PUBLIC :: nn_baro          !: Number of barotropic iterations during one baroclinic step (rdt) 
     51   INTEGER,  PUBLIC :: nn_e          !: Number of barotropic iterations during one baroclinic step (rn_Dt) 
    5252   REAL(wp), PUBLIC :: rn_bt_cmax       !: Maximum allowed courant number (used if ln_bt_auto=T) 
    5353   REAL(wp), PUBLIC :: rn_bt_alpha      !: Time stepping diffusion parameter 
    5454 
    5555 
    56    !                                   !! old non-DOCTOR names still used in the model 
    57    REAL(wp), PUBLIC ::   atfp           !: asselin time filter parameter 
    58    REAL(wp), PUBLIC ::   rdt            !: time step for the dynamics and tracer 
    59  
    6056   !                                   !!! associated variables 
    61    INTEGER , PUBLIC ::   neuler         !: restart euler forward option (0=Euler) 
    62    REAL(wp), PUBLIC ::   r2dt           !: = 2*rdt except at nit000 (=rdt) if neuler=0 
     57   LOGICAL , PUBLIC ::   l_1st_euler    !: Euler 1st time-step flag (=T if ln_restart=F or ln_1st_euler=T) 
     58   REAL(wp), PUBLIC ::   rDt, r1_Dt     !: Current model timestep and reciprocal 
     59                                        !: rDt = 2 * rn_Dt if leapfrog and l_1st_euler = F 
     60                                        !:     =     rn_Dt if leapfrog and l_1st_euler = T 
     61                                        !:     =     rn_Dt if RK3 
    6362 
    6463   !!---------------------------------------------------------------------- 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/DOM/domain.F90

    r12680 r12724  
    309309         &             nn_no   , cn_exp   , cn_ocerst_in, cn_ocerst_out, ln_rstart , nn_rstctl ,     & 
    310310         &             nn_it000, nn_itend , nn_date0    , nn_time0     , nn_leapy  , nn_istate ,     & 
    311          &             nn_stock, nn_write , ln_mskland  , ln_clobber   , nn_chunksz, nn_euler  ,    & 
     311         &             nn_stock, nn_write , ln_mskland  , ln_clobber   , nn_chunksz, ln_1st_euler  , & 
    312312         &             ln_cfmeta, ln_xios_read, nn_wxios 
    313       NAMELIST/namdom/ ln_linssh, rn_rdt, rn_atfp, ln_crs, ln_meshmask 
     313      NAMELIST/namdom/ ln_linssh, rn_Dt, rn_atfp, ln_crs, ln_meshmask 
    314314#if defined key_netcdf4 
    315315      NAMELIST/namnc4/ nn_nchunks_i, nn_nchunks_j, nn_nchunks_k, ln_nc4zip 
     
    339339         WRITE(numout,*) '      restart output directory        cn_ocerst_outdir= ', TRIM( cn_ocerst_outdir ) 
    340340         WRITE(numout,*) '      restart logical                 ln_rstart       = ', ln_rstart 
    341          WRITE(numout,*) '      start with forward time step    nn_euler        = ', nn_euler 
     341         WRITE(numout,*) '      start with forward time step    ln_1st_euler    = ', ln_1st_euler 
    342342         WRITE(numout,*) '      control of time step            nn_rstctl       = ', nn_rstctl 
    343343         WRITE(numout,*) '      number of the first time step   nn_it000        = ', nn_it000 
     
    375375      nleapy = nn_leapy 
    376376      ninist = nn_istate 
    377       neuler = nn_euler 
    378       IF( neuler == 1 .AND. .NOT. ln_rstart ) THEN 
     377      l_1st_euler = ln_1st_euler 
     378      IF( .NOT. l_1st_euler .AND. .NOT. ln_rstart ) THEN 
    379379         IF(lwp) WRITE(numout,*) 
    380380         IF(lwp) WRITE(numout,*)'   ==>>>   Start from rest (ln_rstart=F)' 
    381          IF(lwp) WRITE(numout,*)'           an Euler initial time step is used : nn_euler is forced to 0 ' 
    382          neuler = 0 
     381         IF(lwp) WRITE(numout,*)'           an Euler initial time step is used : l_1st_euler is forced to .true. '    
     382         l_1st_euler = .true. 
    383383      ENDIF 
    384384      !                             ! control of output frequency 
     
    430430         WRITE(numout,*) '      linear free surface (=T)                ln_linssh   = ', ln_linssh 
    431431         WRITE(numout,*) '      create mesh/mask file                   ln_meshmask = ', ln_meshmask 
    432          WRITE(numout,*) '      ocean time step                         rn_rdt      = ', rn_rdt 
     432         WRITE(numout,*) '      ocean time step                         rn_Dt       = ', rn_Dt 
    433433         WRITE(numout,*) '      asselin time filter parameter           rn_atfp     = ', rn_atfp 
    434434         WRITE(numout,*) '      online coarsening of dynamical fields   ln_crs      = ', ln_crs 
    435435      ENDIF 
    436436      ! 
    437       !          ! conversion DOCTOR names into model names (this should disappear soon) 
    438       atfp = rn_atfp 
    439       rdt  = rn_rdt 
     437      !! Initialise current model timestep rDt = 2*rn_Dt if MLF or rDt = rn_Dt if RK3 
     438      rDt  = 2._wp * rn_Dt 
     439      r1_Dt = 1._wp / rDt 
    440440 
    441441      IF( TRIM(Agrif_CFixed()) == '0' ) THEN 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/DOM/domqe.F90

    r12680 r12724  
    556556      ! 
    557557      IF( ln_dynadv_vec ) THEN                     !- Vector Form   (thickness weighted averaging) 
    558          DO_2D_11_11 
     558         DO_2D_00_00 
    559559            pr3u(ji,jj) = 0.5_wp * (  e1e2t(ji  ,jj) * pssh(ji  ,jj)  & 
    560560               &                    + e1e2t(ji+1,jj) * pssh(ji+1,jj)  ) * r1_hu_0(ji,jj) * r1_e1e2u(ji,jj) 
     
    563563         END_2D 
    564564      ELSE                                         !- Flux Form   (simple averaging) 
    565          DO_2D_11_11 
     565         DO_2D_00_00 
    566566            pr3u(ji,jj) = 0.5_wp * (  pssh(ji  ,jj) + pssh(ji+1,jj)  ) * r1_hu_0(ji,jj) 
    567567            pr3v(ji,jj) = 0.5_wp * (  pssh(ji,jj  ) + pssh(ji,jj+1)  ) * r1_hv_0(ji,jj) 
     
    576576         ! 
    577577         IF( ln_dynadv_vec )   THEN                !- Vector Form   (thickness weighted averaging) 
    578             DO_2D_01_01                               ! start from 1 since lbc_lnk('F') doesn't update the 1st row/line 
     578            DO_2D_10_10                               ! start from 1 since lbc_lnk('F') doesn't update the 1st row/line 
    579579               pr3f(ji,jj) = 0.25_wp * (  e1e2t(ji  ,jj  ) * pssh(ji  ,jj  )  & 
    580580                  &                     + e1e2t(ji+1,jj  ) * pssh(ji+1,jj  )  & 
     
    583583            END_2D 
    584584         ELSE                                      !- Flux Form   (simple averaging) 
    585             DO_2D_01_01                               ! start from 1 since lbc_lnk('F') doesn't update the 1st row/line 
     585            DO_2D_10_10                               ! start from 1 since lbc_lnk('F') doesn't update the 1st row/line 
    586586               pr3f(ji,jj) = 0.25_wp * (  pssh(ji  ,jj  ) + pssh(ji+1,jj  )  & 
    587587                  &                     + pssh(ji  ,jj+1) + pssh(ji+1,jj+1)  ) * r1_hf_0(ji,jj) 
     
    632632                  ssh(:,:,Kbb) = 0._wp 
    633633               END WHERE 
    634                IF( neuler == 0 ) THEN 
     634               IF( l_1st_euler ) THEN 
    635635                  ssh(:,:,Kbb) = ssh(:,:,Kmm) 
    636636               ENDIF 
     
    641641               CALL iom_get( numror, jpdom_autoglo, 'sshb', ssh(:,:,Kbb), ldxios = lrxios ) 
    642642               ssh(:,:,Kmm) = ssh(:,:,Kbb) 
    643                neuler = 0 
     643               l_1st_euler = .TRUE. 
    644644            ELSE IF( id2 > 0 ) THEN 
    645645               IF(lwp) write(numout,*) 'qe_rst_read WARNING : ssh(:,:,Kbb) not found in restart files' 
     
    648648               CALL iom_get( numror, jpdom_autoglo, 'sshn', ssh(:,:,Kmm), ldxios = lrxios ) 
    649649               ssh(:,:,Kbb) = ssh(:,:,Kmm) 
    650                neuler = 0 
     650               l_1st_euler = .TRUE. 
    651651            ELSE 
    652652               IF(lwp) write(numout,*) 'qe_rst_read WARNING : ssh(:,:,Kmm) not found in restart file' 
     
    654654               IF(lwp) write(numout,*) 'neuler is forced to 0' 
    655655               ssh(:,:,:) = 0._wp 
    656                neuler = 0 
     656               l_1st_euler = .TRUE. 
    657657            ENDIF 
    658658            ! 
     
    741741            WRITE(numout,*) '                         rn_rst_e3t     = 0.e0' 
    742742            WRITE(numout,*) '            hard-wired : z-tilde cutoff frequency of low-pass filter (days)' 
    743             WRITE(numout,*) '                         rn_lf_cutoff   = 1.0/rdt' 
     743            WRITE(numout,*) '                         rn_lf_cutoff   = 1.0/rn_Dt' 
    744744         ELSE 
    745745            WRITE(numout,*) '      z-tilde to zstar restoration timescale (days)        rn_rst_e3t   = ', rn_rst_e3t 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/DOM/domvvl.F90

    r12680 r12724  
    247247         IF( ln_vvl_ztilde_as_zstar ) THEN   ! z-star emulation using z-tile 
    248248            frq_rst_e3t(:,:) = 0._wp               !Ignore namelist settings 
    249             frq_rst_hdv(:,:) = 1._wp / rdt 
     249            frq_rst_hdv(:,:) = 1._wp / rn_Dt 
    250250         ENDIF 
    251251         IF ( ln_vvl_zstar_at_eqtor ) THEN   ! use z-star in vicinity of the Equator 
     
    259259                  ! values inside the equatorial band (ztilde as zstar) 
    260260                  frq_rst_e3t(ji,jj) =  0.0_wp 
    261                   frq_rst_hdv(ji,jj) =  1.0_wp / rdt 
     261                  frq_rst_hdv(ji,jj) =  1.0_wp / rn_Dt 
    262262               ELSE                                      ! transition band (2.5 to 6 degrees N/S) 
    263263                  !                                      ! (linearly transition from z-tilde to z-star) 
     
    265265                     &            * (  1.0_wp - COS( rad*(ABS(gphit(ji,jj))-2.5_wp)  & 
    266266                     &                                          * 180._wp / 3.5_wp ) ) 
    267                   frq_rst_hdv(ji,jj) = (1.0_wp / rdt)                                & 
    268                      &            + (  frq_rst_hdv(ji,jj)-(1.e0_wp / rdt) )*0.5_wp   & 
     267                  frq_rst_hdv(ji,jj) = (1.0_wp / rn_Dt)                                & 
     268                     &            + (  frq_rst_hdv(ji,jj)-(1.e0_wp / rn_Dt) )*0.5_wp   & 
    269269                     &            * (  1._wp  - COS( rad*(ABS(gphit(ji,jj))-2.5_wp)  & 
    270270                     &                                          * 180._wp / 3.5_wp ) ) 
     
    276276                  ij0 = 128   ;   ij1 = 135   ; 
    277277                  frq_rst_e3t( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) =  0.0_wp 
    278                   frq_rst_hdv( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) =  1.e0_wp / rdt 
     278                  frq_rst_hdv( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) =  1.e0_wp / rn_Dt 
    279279               ENDIF 
    280280            ENDIF 
     
    331331      INTEGER                ::   ji, jj, jk            ! dummy loop indices 
    332332      INTEGER , DIMENSION(3) ::   ijk_max, ijk_min      ! temporary integers 
    333       REAL(wp)               ::   z2dt, z_tmin, z_tmax  ! local scalars 
     333      REAL(wp)               ::   z_tmin, z_tmax        ! local scalars 
    334334      LOGICAL                ::   ll_do_bclinic         ! local logical 
    335335      REAL(wp), DIMENSION(jpi,jpj)     ::   zht, z_scale, zwu, zwv, zhdiv 
     
    385385            IF( kt > nit000 ) THEN 
    386386               DO jk = 1, jpkm1 
    387                   hdiv_lf(:,:,jk) = hdiv_lf(:,:,jk) - rdt * frq_rst_hdv(:,:)   & 
     387                  hdiv_lf(:,:,jk) = hdiv_lf(:,:,jk) - rn_Dt * frq_rst_hdv(:,:)   & 
    388388                     &          * ( hdiv_lf(:,:,jk) - e3t(:,:,jk,Kmm) * ( hdiv(:,:,jk) - zhdiv(:,:) ) ) 
    389389               END DO 
     
    442442         ! 4 - Time stepping of baroclinic scale factors 
    443443         ! --------------------------------------------- 
    444          ! Leapfrog time stepping 
    445          ! ~~~~~~~~~~~~~~~~~~~~~~ 
    446          IF( neuler == 0 .AND. kt == nit000 ) THEN 
    447             z2dt =  rdt 
    448          ELSE 
    449             z2dt = 2.0_wp * rdt 
    450          ENDIF 
    451444         CALL lbc_lnk( 'domvvl', tilde_e3t_a(:,:,:), 'T', 1._wp ) 
    452          tilde_e3t_a(:,:,:) = tilde_e3t_b(:,:,:) + z2dt * tmask(:,:,:) * tilde_e3t_a(:,:,:) 
     445         tilde_e3t_a(:,:,:) = tilde_e3t_b(:,:,:) + rDt * tmask(:,:,:) * tilde_e3t_a(:,:,:) 
    453446 
    454447         ! Maximum deformation control 
     
    636629      ! - ML - e3(t/u/v)_b are allready computed in dynnxt. 
    637630      IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN 
    638          IF( neuler == 0 .AND. kt == nit000 ) THEN 
     631         IF( l_1st_euler ) THEN 
    639632            tilde_e3t_b(:,:,:) = tilde_e3t_n(:,:,:) 
    640633         ELSE 
    641634            tilde_e3t_b(:,:,:) = tilde_e3t_n(:,:,:) & 
    642             &         + atfp * ( tilde_e3t_b(:,:,:) - 2.0_wp * tilde_e3t_n(:,:,:) + tilde_e3t_a(:,:,:) ) 
     635            &         + rn_atfp * ( tilde_e3t_b(:,:,:) - 2.0_wp * tilde_e3t_n(:,:,:) + tilde_e3t_a(:,:,:) ) 
    643636         ENDIF 
    644637         tilde_e3t_n(:,:,:) = tilde_e3t_a(:,:,:) 
     
    833826                  e3t(:,:,:,Kbb) = e3t_0(:,:,:) 
    834827               END WHERE 
    835                IF( neuler == 0 ) THEN 
     828               IF( l_1st_euler ) THEN 
    836829                  e3t(:,:,:,Kbb) = e3t(:,:,:,Kmm) 
    837830               ENDIF 
     
    839832               IF(lwp) write(numout,*) 'dom_vvl_rst WARNING : e3t(:,:,:,Kmm) not found in restart files' 
    840833               IF(lwp) write(numout,*) 'e3t_n set equal to e3t_b.' 
    841                IF(lwp) write(numout,*) 'neuler is forced to 0' 
     834               IF(lwp) write(numout,*) 'l_1st_euler is forced to true' 
    842835               CALL iom_get( numror, jpdom_autoglo, 'e3t_b', e3t(:,:,:,Kbb), ldxios = lrxios ) 
    843836               e3t(:,:,:,Kmm) = e3t(:,:,:,Kbb) 
    844                neuler = 0 
     837               l_1st_euler = .true. 
    845838            ELSE IF( id2 > 0 ) THEN 
    846839               IF(lwp) write(numout,*) 'dom_vvl_rst WARNING : e3t(:,:,:,Kbb) not found in restart files' 
    847840               IF(lwp) write(numout,*) 'e3t_b set equal to e3t_n.' 
    848                IF(lwp) write(numout,*) 'neuler is forced to 0' 
     841               IF(lwp) write(numout,*) 'l_1st_euler is forced to true' 
    849842               CALL iom_get( numror, jpdom_autoglo, 'e3t_n', e3t(:,:,:,Kmm), ldxios = lrxios ) 
    850843               e3t(:,:,:,Kbb) = e3t(:,:,:,Kmm) 
    851                neuler = 0 
     844               l_1st_euler = .true. 
    852845            ELSE 
    853846               IF(lwp) write(numout,*) 'dom_vvl_rst WARNING : e3t(:,:,:,Kmm) not found in restart file' 
    854847               IF(lwp) write(numout,*) 'Compute scale factor from sshn' 
    855                IF(lwp) write(numout,*) 'neuler is forced to 0' 
     848               IF(lwp) write(numout,*) 'l_1st_euler is forced to true' 
    856849               DO jk = 1, jpk 
    857850                  e3t(:,:,jk,Kmm) =  e3t_0(:,:,jk) * ( ht_0(:,:) + ssh(:,:,Kmm) ) & 
     
    860853               END DO 
    861854               e3t(:,:,:,Kbb) = e3t(:,:,:,Kmm) 
    862                neuler = 0 
     855               l_1st_euler = .true. 
    863856            ENDIF 
    864857            !                             ! ----------- ! 
     
    10201013            WRITE(numout,*) '                         rn_rst_e3t     = 0.e0' 
    10211014            WRITE(numout,*) '            hard-wired : z-tilde cutoff frequency of low-pass filter (days)' 
    1022             WRITE(numout,*) '                         rn_lf_cutoff   = 1.0/rdt' 
     1015            WRITE(numout,*) '                         rn_lf_cutoff   = 1.0/rn_Dt' 
    10231016         ELSE 
    10241017            WRITE(numout,*) '      z-tilde to zstar restoration timescale (days)        rn_rst_e3t   = ', rn_rst_e3t 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/DOM/istate.F90

    r12680 r12724  
    9393         !                                    ! --------------- 
    9494         numror = 0                           ! define numror = 0 -> no restart file to read 
    95          neuler = 0                           ! Set time-step indicator at nit000 (euler forward) 
     95         l_1st_euler = .true.                 ! Set time-step indicator at nit000 (euler forward) 
    9696         CALL day_init                        ! model calendar (using both namelist and restart infos) 
    9797         !                                    ! Initialization of ocean to zero 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/DOM/phycst.F90

    r10068 r12724  
    3939   REAL(wp), PUBLIC ::   rt0      = 273.15_wp        !: freezing point of fresh water [Kelvin] 
    4040 
    41    REAL(wp), PUBLIC ::   rau0                        !: volumic mass of reference     [kg/m3] 
    42    REAL(wp), PUBLIC ::   r1_rau0                     !: = 1. / rau0                   [m3/kg] 
     41   REAL(wp), PUBLIC ::   rho0                        !: volumic mass of reference     [kg/m3] 
     42   REAL(wp), PUBLIC ::   r1_rho0                     !: = 1. / rho0                   [m3/kg] 
    4343   REAL(wp), PUBLIC ::   rcp                         !: ocean specific heat           [J/Kelvin] 
    4444   REAL(wp), PUBLIC ::   r1_rcp                      !: = 1. / rcp                    [Kelvin/J] 
    45    REAL(wp), PUBLIC ::   rau0_rcp                    !: = rau0 * rcp  
    46    REAL(wp), PUBLIC ::   r1_rau0_rcp                 !: = 1. / ( rau0 * rcp ) 
     45   REAL(wp), PUBLIC ::   rho0_rcp                    !: = rho0 * rcp  
     46   REAL(wp), PUBLIC ::   r1_rho0_rcp                 !: = 1. / ( rho0 * rcp ) 
    4747 
    4848   REAL(wp), PUBLIC ::   emic     =    0.97_wp       !: emissivity of snow or ice (not used?) 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/DYN/dynatf.F90

    r12680 r12724  
    104104      !!             arrays to start the next time step: 
    105105      !!                (puu(Kmm),pvv(Kmm)) = (puu(Kmm),pvv(Kmm)) 
    106       !!                                    + atfp [ (puu(Kbb),pvv(Kbb)) + (puu(Kaa),pvv(Kaa)) - 2 (puu(Kmm),pvv(Kmm)) ] 
     106      !!                                    + rn_atfp [ (puu(Kbb),pvv(Kbb)) + (puu(Kaa),pvv(Kaa)) - 2 (puu(Kmm),pvv(Kmm)) ] 
    107107      !!             Note that with flux form advection and non linear free surface, 
    108108      !!             the time filter is applied on thickness weighted velocity. 
     
    174174      ! 
    175175      IF( l_trddyn ) THEN             ! prepare the atf trend computation + some diagnostics 
    176          z1_2dt = 1._wp / (2. * rdt)        ! Euler or leap-frog time step 
    177          IF( neuler == 0 .AND. kt == nit000 )   z1_2dt = 1._wp / rdt 
    178176         ! 
    179177         !                                  ! Kinetic energy and Conversion 
     
    181179         ! 
    182180         IF( ln_dyn_trd ) THEN              ! 3D output: total momentum trends 
    183             zua(:,:,:) = ( puu(:,:,:,Kaa) - puu(:,:,:,Kbb) ) * z1_2dt 
    184             zva(:,:,:) = ( pvv(:,:,:,Kaa) - pvv(:,:,:,Kbb) ) * z1_2dt 
     181            zua(:,:,:) = ( puu(:,:,:,Kaa) - puu(:,:,:,Kbb) ) * r1_Dt 
     182            zva(:,:,:) = ( pvv(:,:,:,Kaa) - pvv(:,:,:,Kbb) ) * r1_Dt 
    185183            CALL iom_put( "utrd_tot", zua )        ! total momentum trends, except the asselin time filter 
    186184            CALL iom_put( "vtrd_tot", zva ) 
     
    194192      ! Time filter and swap of dynamics arrays 
    195193      ! ------------------------------------------ 
    196  
    197       IF( .NOT.( neuler == 0 .AND. kt == nit000 ) ) THEN    !* Leap-Frog : Asselin time filter 
     194          
     195      IF( .NOT. l_1st_euler ) THEN    !* Leap-Frog : Asselin time filter  
    198196         !                                ! =============! 
    199197         IF( ln_linssh ) THEN             ! Fixed volume ! 
    200198            !                             ! =============! 
    201199            DO_3D_11_11( 1, jpkm1 ) 
    202                puu(ji,jj,jk,Kmm) = puu(ji,jj,jk,Kmm) + atfp * ( puu(ji,jj,jk,Kbb) - 2._wp * puu(ji,jj,jk,Kmm) + puu(ji,jj,jk,Kaa) ) 
    203                pvv(ji,jj,jk,Kmm) = pvv(ji,jj,jk,Kmm) + atfp * ( pvv(ji,jj,jk,Kbb) - 2._wp * pvv(ji,jj,jk,Kmm) + pvv(ji,jj,jk,Kaa) ) 
     200               puu(ji,jj,jk,Kmm) = puu(ji,jj,jk,Kmm) + rn_atfp * ( puu(ji,jj,jk,Kbb) - 2._wp * puu(ji,jj,jk,Kmm) + puu(ji,jj,jk,Kaa) ) 
     201               pvv(ji,jj,jk,Kmm) = pvv(ji,jj,jk,Kmm) + rn_atfp * ( pvv(ji,jj,jk,Kbb) - 2._wp * pvv(ji,jj,jk,Kmm) + pvv(ji,jj,jk,Kaa) ) 
    204202            END_3D 
    205203            !                             ! ================! 
     
    210208            ALLOCATE( ze3t_f(jpi,jpj,jpk), zwfld(jpi,jpj) ) 
    211209            DO jk = 1, jpkm1 
    212                ze3t_f(:,:,jk) = pe3t(:,:,jk,Kmm) + atfp * ( pe3t(:,:,jk,Kbb) - 2._wp * pe3t(:,:,jk,Kmm) + pe3t(:,:,jk,Kaa) ) 
     210               ze3t_f(:,:,jk) = pe3t(:,:,jk,Kmm) + rn_atfp * ( pe3t(:,:,jk,Kbb) - 2._wp * pe3t(:,:,jk,Kmm) + pe3t(:,:,jk,Kaa) ) 
    213211            END DO 
    214212            ! Add volume filter correction: compatibility with tracer advection scheme 
    215213            ! => time filter + conservation correction 
    216             zcoef = atfp * rdt * r1_rau0 
     214            zcoef = rn_atfp * rn_Dt * r1_rho0 
    217215            zwfld(:,:) = emp_b(:,:) - emp(:,:) 
    218216            IF ( ln_rnf ) zwfld(:,:) =  zwfld(:,:) - ( rnf_b(:,:) - rnf(:,:) ) 
     
    226224            !     to manage rnf, isf and possibly in the futur icb, tide water glacier (...) 
    227225            !     ...(kt, coef, ktop, kbot, hz, fwf_b, fwf) 
    228             IF ( ln_isf ) CALL isf_dynatf( kt, Kmm, ze3t_f, atfp * rdt ) 
     226            IF ( ln_isf ) CALL isf_dynatf( kt, Kmm, ze3t_f, rn_atfp * rn_Dt ) 
    229227            ! 
    230228            pe3t(:,:,1:jpkm1,Kmm) = ze3t_f(:,:,1:jpkm1)        ! filtered scale factor at T-points 
     
    235233               CALL dom_vvl_interpol( pe3t(:,:,:,Kmm), pe3v(:,:,:,Kmm), 'V' ) 
    236234               DO_3D_11_11( 1, jpkm1 ) 
    237                   puu(ji,jj,jk,Kmm) = puu(ji,jj,jk,Kmm) + atfp * ( puu(ji,jj,jk,Kbb) - 2._wp * puu(ji,jj,jk,Kmm) + puu(ji,jj,jk,Kaa) ) 
    238                   pvv(ji,jj,jk,Kmm) = pvv(ji,jj,jk,Kmm) + atfp * ( pvv(ji,jj,jk,Kbb) - 2._wp * pvv(ji,jj,jk,Kmm) + pvv(ji,jj,jk,Kaa) ) 
     235                  puu(ji,jj,jk,Kmm) = puu(ji,jj,jk,Kmm) + rn_atfp * ( puu(ji,jj,jk,Kbb) - 2._wp * puu(ji,jj,jk,Kmm) + puu(ji,jj,jk,Kaa) ) 
     236                  pvv(ji,jj,jk,Kmm) = pvv(ji,jj,jk,Kmm) + rn_atfp * ( pvv(ji,jj,jk,Kbb) - 2._wp * pvv(ji,jj,jk,Kmm) + pvv(ji,jj,jk,Kaa) ) 
    239237               END_3D 
    240238               ! 
     
    253251                  zve3b = pe3v(ji,jj,jk,Kbb) * pvv(ji,jj,jk,Kbb) 
    254252                  ! 
    255                   puu(ji,jj,jk,Kmm) = ( zue3n + atfp * ( zue3b - 2._wp * zue3n  + zue3a ) ) / ze3u_f(ji,jj,jk) 
    256                   pvv(ji,jj,jk,Kmm) = ( zve3n + atfp * ( zve3b - 2._wp * zve3n  + zve3a ) ) / ze3v_f(ji,jj,jk) 
     253                  puu(ji,jj,jk,Kmm) = ( zue3n + rn_atfp * ( zue3b - 2._wp * zue3n  + zue3a ) ) / ze3u_f(ji,jj,jk) 
     254                  pvv(ji,jj,jk,Kmm) = ( zve3n + rn_atfp * ( zve3b - 2._wp * zve3n  + zve3a ) ) / ze3v_f(ji,jj,jk) 
    257255               END_3D 
    258256               pe3u(:,:,1:jpkm1,Kmm) = ze3u_f(:,:,1:jpkm1) 
     
    280278         ENDIF 
    281279         ! 
    282       ENDIF ! neuler /= 0 
     280      ENDIF ! .NOT. l_1st_euler 
    283281      ! 
    284282      ! Set "now" and "before" barotropic velocities for next time step: 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/DYN/dynatfQCO.F90

    r12656 r12724  
    1515   !!            2.3  !  2007-07  (D. Storkey) Calls to BDY routines. 
    1616   !!            3.2  !  2009-06  (G. Madec, R.Benshila)  re-introduce the vvl option 
    17    !!            3.3  !  2010-09  (D. Storkey, E.O'Dea) Bug fix for BDY module 
     17   !!            3.3  !  2010-09  D. Storkey, E.O'Dea) Bug fix for BDY module 
    1818   !!            3.3  !  2011-03  (P. Oddo) Bug fix for time-splitting+(BDY-OBC) and not VVL 
    1919   !!            3.5  !  2013-07  (J. Chanut) Compliant with time splitting changes 
     
    117117      ! 
    118118      IF( l_trddyn ) THEN             ! prepare the atf trend computation + some diagnostics 
    119          z1_2dt = 1._wp / (2. * rdt)        ! Euler or leap-frog time step 
    120          IF( neuler == 0 .AND. kt == nit000 )   z1_2dt = 1._wp / rdt 
    121119         ! 
    122120         !                                  ! Kinetic energy and Conversion 
     
    124122         ! 
    125123         IF( ln_dyn_trd ) THEN              ! 3D output: total momentum trends 
    126             zua(:,:,:) = ( puu(:,:,:,Kaa) - puu(:,:,:,Kbb) ) * z1_2dt 
    127             zva(:,:,:) = ( pvv(:,:,:,Kaa) - pvv(:,:,:,Kbb) ) * z1_2dt 
     124            zua(:,:,:) = ( puu(:,:,:,Kaa) - puu(:,:,:,Kbb) ) * r1_Dt 
     125            zva(:,:,:) = ( pvv(:,:,:,Kaa) - pvv(:,:,:,Kbb) ) * r1_Dt 
    128126            CALL iom_put( "utrd_tot", zua )        ! total momentum trends, except the asselin time filter 
    129127            CALL iom_put( "vtrd_tot", zva ) 
     
    138136      ! ------------------------------------------ 
    139137 
    140       IF( .NOT.( neuler == 0 .AND. kt == nit000 ) ) THEN    !* Leap-Frog : Asselin time filter 
     138      IF( .NOT. l_1st_euler ) THEN    !* Leap-Frog : Asselin time filter 
    141139         !                                ! =============! 
    142140         IF( ln_linssh ) THEN             ! Fixed volume ! 
    143141            !                             ! =============! 
    144142            DO_3D_11_11( 1, jpkm1 ) 
    145                puu(ji,jj,jk,Kmm) = puu(ji,jj,jk,Kmm) + atfp * ( puu(ji,jj,jk,Kbb) - 2._wp * puu(ji,jj,jk,Kmm) + puu(ji,jj,jk,Kaa) ) 
    146                pvv(ji,jj,jk,Kmm) = pvv(ji,jj,jk,Kmm) + atfp * ( pvv(ji,jj,jk,Kbb) - 2._wp * pvv(ji,jj,jk,Kmm) + pvv(ji,jj,jk,Kaa) ) 
     143               puu(ji,jj,jk,Kmm) = puu(ji,jj,jk,Kmm) + rn_atfp * ( puu(ji,jj,jk,Kbb) - 2._wp * puu(ji,jj,jk,Kmm) + puu(ji,jj,jk,Kaa) ) 
     144               pvv(ji,jj,jk,Kmm) = pvv(ji,jj,jk,Kmm) + rn_atfp * ( pvv(ji,jj,jk,Kbb) - 2._wp * pvv(ji,jj,jk,Kmm) + pvv(ji,jj,jk,Kaa) ) 
    147145            END_3D 
    148146            !                             ! ================! 
     
    164162               ! 
    165163               DO_3D_11_11( 1, jpkm1 ) 
    166                   puu(ji,jj,jk,Kmm) = puu(ji,jj,jk,Kmm) + atfp * ( puu(ji,jj,jk,Kbb) - 2._wp * puu(ji,jj,jk,Kmm) + puu(ji,jj,jk,Kaa) ) 
    167                   pvv(ji,jj,jk,Kmm) = pvv(ji,jj,jk,Kmm) + atfp * ( pvv(ji,jj,jk,Kbb) - 2._wp * pvv(ji,jj,jk,Kmm) + pvv(ji,jj,jk,Kaa) ) 
     164                  puu(ji,jj,jk,Kmm) = puu(ji,jj,jk,Kmm) + rn_atfp * ( puu(ji,jj,jk,Kbb) - 2._wp * puu(ji,jj,jk,Kmm) + puu(ji,jj,jk,Kaa) ) 
     165                  pvv(ji,jj,jk,Kmm) = pvv(ji,jj,jk,Kmm) + rn_atfp * ( pvv(ji,jj,jk,Kbb) - 2._wp * pvv(ji,jj,jk,Kmm) + pvv(ji,jj,jk,Kaa) ) 
    168166               END_3D 
    169167               ! 
     
    188186                  ! pe3v(ji,jj,jk,Kmm) = e3v_0(ji,jj,jk) * ( 1._wp + r3v_f(ji,jj) * vmask(ji,jj,jk) ) 
    189187                  ! 
    190                   puu(ji,jj,jk,Kmm) = ( zue3n + atfp * ( zue3b - 2._wp * zue3n  + zue3a ) ) / ( 1._wp + r3u_f(ji,jj)*umask(ji,jj,jk) ) !!st ze3u_f(ji,jj,jk) 
    191                   pvv(ji,jj,jk,Kmm) = ( zve3n + atfp * ( zve3b - 2._wp * zve3n  + zve3a ) ) / ( 1._wp + r3v_f(ji,jj)*vmask(ji,jj,jk) ) !!st ze3v_f(ji,jj,jk) 
     188                  puu(ji,jj,jk,Kmm) = ( zue3n + rn_atfp * ( zue3b - 2._wp * zue3n  + zue3a ) ) / ( 1._wp + r3u_f(ji,jj)*umask(ji,jj,jk) ) !!st ze3u_f(ji,jj,jk) 
     189                  pvv(ji,jj,jk,Kmm) = ( zve3n + rn_atfp * ( zve3b - 2._wp * zve3n  + zve3a ) ) / ( 1._wp + r3v_f(ji,jj)*vmask(ji,jj,jk) ) !!st ze3v_f(ji,jj,jk) 
    192190               END_3D 
    193191               ! 
     
    217215         ENDIF 
    218216         ! 
    219       ENDIF ! neuler /= 0 
     217      ENDIF ! .NOT. l_1st_euler 
    220218      ! 
    221219      ! Set "now" and "before" barotropic velocities for next time step: 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/DYN/dynspg.F90

    r12377 r12724  
    6767      !!              ln_apr_dyn=T : the atmospheric pressure forcing is applied  
    6868      !!             as the gradient of the inverse barometer ssh: 
    69       !!                apgu = - 1/rau0 di[apr] = 0.5*grav di[ssh_ib+ssh_ibb] 
    70       !!                apgv = - 1/rau0 dj[apr] = 0.5*grav dj[ssh_ib+ssh_ibb] 
    71       !!             Note that as all external forcing a time averaging over a two rdt 
     69      !!                apgu = - 1/rho0 di[apr] = 0.5*grav di[ssh_ib+ssh_ibb] 
     70      !!                apgv = - 1/rho0 dj[apr] = 0.5*grav dj[ssh_ib+ssh_ibb] 
     71      !!             Note that as all external forcing a time averaging over a two rn_Dt 
    7272      !!             period is used to prevent the divergence of odd and even time step. 
    7373      !!---------------------------------------------------------------------- 
     
    7878      ! 
    7979      INTEGER  ::   ji, jj, jk                   ! dummy loop indices 
    80       REAL(wp) ::   z2dt, zg_2, zintp, zgrau0r, zld   ! local scalars 
     80      REAL(wp) ::   z2dt, zg_2, zintp, zgrho0r, zld   ! local scalars 
    8181      REAL(wp), ALLOCATABLE, DIMENSION(:,:)   ::   zpice 
    8282      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   ztrdu, ztrdv 
     
    114114            ! 
    115115            ! Update tide potential at the beginning of current time step 
    116             zt0step = REAL(nsec_day, wp)-0.5_wp*rdt 
     116            zt0step = REAL(nsec_day, wp)-0.5_wp*rn_Dt 
    117117            CALL upd_tide(zt0step, Kmm) 
    118118            ! 
     
    134134            ALLOCATE( zpice(jpi,jpj) ) 
    135135            zintp = REAL( MOD( kt-1, nn_fsbc ) ) / REAL( nn_fsbc ) 
    136             zgrau0r     = - grav * r1_rau0 
    137             zpice(:,:) = (  zintp * snwice_mass(:,:) + ( 1.- zintp ) * snwice_mass_b(:,:)  ) * zgrau0r 
     136            zgrho0r     = - grav * r1_rho0 
     137            zpice(:,:) = (  zintp * snwice_mass(:,:) + ( 1.- zintp ) * snwice_mass_b(:,:)  ) * zgrho0r 
    138138            DO_2D_00_00 
    139139               spgu(ji,jj) = spgu(ji,jj) + ( zpice(ji+1,jj) - zpice(ji,jj) ) * r1_e1u(ji,jj) 
     
    183183      NAMELIST/namdyn_spg/ ln_dynspg_exp       , ln_dynspg_ts,   & 
    184184      &                    ln_bt_fw, ln_bt_av  , ln_bt_auto  ,   & 
    185       &                    nn_baro , rn_bt_cmax, nn_bt_flt, rn_bt_alpha 
     185      &                    nn_e , rn_bt_cmax, nn_bt_flt, rn_bt_alpha 
    186186      !!---------------------------------------------------------------------- 
    187187      ! 
     
    222222      ! 
    223223      IF( nspg == np_TS ) THEN   ! split-explicit scheme initialisation 
    224          CALL dyn_spg_ts_init          ! do it first: set nn_baro used to allocate some arrays later on 
     224         CALL dyn_spg_ts_init          ! do it first: set nn_e used to allocate some arrays later on 
    225225      ENDIF 
    226226      ! 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/DYN/dynspg_exp.F90

    r12377 r12724  
    4949      !!              momentum trend the surface pressure gradient : 
    5050      !!                      (uu(rhs),vv(rhs)) = (uu(rhs),vv(rhs)) + (spgu,spgv) 
    51       !!              where spgu = -1/rau0 d/dx(ps) = -g/e1u di( ssh(now) ) 
    52       !!                    spgv = -1/rau0 d/dy(ps) = -g/e2v dj( ssh(now) ) 
     51      !!              where spgu = -1/rho0 d/dx(ps) = -g/e1u di( ssh(now) ) 
     52      !!                    spgv = -1/rho0 d/dy(ps) = -g/e2v dj( ssh(now) ) 
    5353      !! 
    5454      !! ** Action :   (puu(:,:,:,Krhs),pvv(:,:,:,Krhs))   trend of horizontal velocity increased by  
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/DYN/dynspg_ts.F90

    r12616 r12724  
    7272   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   un_adv , vn_adv   !: Advection vel. at "now" barocl. step 
    7373   ! 
    74    INTEGER, SAVE :: icycle      ! Number of barotropic sub-steps for each internal step nn_baro <= 2.5 nn_baro 
    75    REAL(wp),SAVE :: rdtbt       ! Barotropic time step 
     74   INTEGER, SAVE :: icycle      ! Number of barotropic sub-steps for each internal step nn_e <= 2.5 nn_e 
     75   REAL(wp),SAVE :: rDt_e       ! Barotropic time step 
    7676   ! 
    7777   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:)   ::   wgtbtp1, wgtbtp2   ! 1st & 2nd weights used in time filtering of barotropic fields 
     
    103103      ierr(:) = 0 
    104104      ! 
    105       ALLOCATE( wgtbtp1(3*nn_baro), wgtbtp2(3*nn_baro), zwz(jpi,jpj), STAT=ierr(1) ) 
     105      ALLOCATE( wgtbtp1(3*nn_e), wgtbtp2(3*nn_e), zwz(jpi,jpj), STAT=ierr(1) ) 
    106106      IF( ln_dynvor_een .OR. ln_dynvor_eeT )   & 
    107107         &     ALLOCATE( ftnw(jpi,jpj) , ftne(jpi,jpj) , ftsw(jpi,jpj) , ftse(jpi,jpj), STAT=ierr(2)   ) 
     
    151151      LOGICAL  ::   ll_init               ! =T : special startup of 2d equations 
    152152      INTEGER  ::   noffset               ! local integers  : time offset for bdy update 
    153       REAL(wp) ::   r1_2dt_b, z1_hu, z1_hv          ! local scalars 
     153      REAL(wp) ::   r1_Dt_b, z1_hu, z1_hv          ! local scalars 
    154154      REAL(wp) ::   za0, za1, za2, za3              !   -      - 
    155155      REAL(wp) ::   zztmp, zldg               !   -      - 
     
    182182!     zwdramp = 1._wp / (rn_wdmin2 - rn_wdmin1) ! more general ramp 
    183183      !                                         ! inverse of baroclinic time step  
    184       IF( kt == nit000 .AND. neuler == 0 ) THEN   ;   r1_2dt_b = 1._wp / (         rdt ) 
    185       ELSE                                        ;   r1_2dt_b = 1._wp / ( 2._wp * rdt ) 
    186       ENDIF 
     184      r1_Dt_b = 1._wp / rDt  
    187185      ! 
    188186      ll_init     = ln_bt_av                    ! if no time averaging, then no specific restart  
    189187      ll_fw_start = .FALSE. 
    190188      !                                         ! time offset in steps for bdy data update 
    191       IF( .NOT.ln_bt_fw ) THEN   ;   noffset = - nn_baro 
     189      IF( .NOT.ln_bt_fw ) THEN   ;   noffset = - nn_e 
    192190      ELSE                       ;   noffset =   0  
    193191      ENDIF 
     
    200198         IF(lwp) WRITE(numout,*) 
    201199         ! 
    202          IF( neuler == 0 )   ll_init=.TRUE. 
    203          ! 
    204          IF( ln_bt_fw .OR. neuler == 0 ) THEN 
     200         IF( l_1st_euler )   ll_init=.TRUE. 
     201         ! 
     202         IF( ln_bt_fw .OR. l_1st_euler ) THEN 
    205203            ll_fw_start =.TRUE. 
    206204            noffset     = 0 
     
    211209         CALL ts_wgt( ln_bt_av, ll_fw_start, icycle, wgtbtp1, wgtbtp2 ) 
    212210         ! 
    213       ENDIF 
    214       ! 
    215       ! If forward start at previous time step, and centered integration,  
    216       ! then update averaging weights: 
    217       IF (.NOT.ln_bt_fw .AND.( neuler==0 .AND. kt==nit000+1 ) ) THEN 
    218          ll_fw_start=.FALSE. 
    219          CALL ts_wgt( ln_bt_av, ll_fw_start, icycle, wgtbtp1, wgtbtp2 ) 
    220       ENDIF 
    221       ! 
    222                            
     211      ELSEIF( kt == nit000 + 1 ) THEN           !* initialisation 2nd time-step 
     212         ! 
     213         IF( .NOT.ln_bt_fw ) THEN 
     214            ! If we did an Euler timestep on the first timestep we need to reset ll_fw_start 
     215            ! and the averaging weights. We don't have an easy way of telling whether we did 
     216            ! an Euler timestep on the first timestep (because l_1st_euler is reset to .false. 
     217            ! at the end of the first timestep) so just do this in all cases.  
     218            ll_fw_start = .FALSE. 
     219            CALL ts_wgt( ln_bt_av, ll_fw_start, icycle, wgtbtp1, wgtbtp2 ) 
     220         ENDIF 
     221         ! 
     222      ENDIF 
     223      ! 
    223224      ! ----------------------------------------------------------------------------- 
    224225      !  Phase 1 : Coupling between general trend and barotropic estimates (1st step) 
     
    309310      IF( ln_bt_fw ) THEN                        ! Add wind forcing 
    310311         DO_2D_00_00 
    311             zu_frc(ji,jj) =  zu_frc(ji,jj) + r1_rau0 * utau(ji,jj) * r1_hu(ji,jj,Kmm) 
    312             zv_frc(ji,jj) =  zv_frc(ji,jj) + r1_rau0 * vtau(ji,jj) * r1_hv(ji,jj,Kmm) 
     312            zu_frc(ji,jj) =  zu_frc(ji,jj) + r1_rho0 * utau(ji,jj) * r1_hu(ji,jj,Kmm) 
     313            zv_frc(ji,jj) =  zv_frc(ji,jj) + r1_rho0 * vtau(ji,jj) * r1_hv(ji,jj,Kmm) 
    313314         END_2D 
    314315      ELSE 
    315          zztmp = r1_rau0 * r1_2 
     316         zztmp = r1_rho0 * r1_2 
    316317         DO_2D_00_00 
    317318            zu_frc(ji,jj) =  zu_frc(ji,jj) + zztmp * ( utau_b(ji,jj) + utau(ji,jj) ) * r1_hu(ji,jj,Kmm) 
     
    326327      !                                   ! ---------------------------------------------------  ! 
    327328      IF (ln_bt_fw) THEN                          ! FORWARD integration: use kt+1/2 fluxes (NOW+1/2) 
    328          zssh_frc(:,:) = r1_rau0 * ( emp(:,:) - rnf(:,:) + fwfisf_cav(:,:) + fwfisf_par(:,:) ) 
     329         zssh_frc(:,:) = r1_rho0 * ( emp(:,:) - rnf(:,:) + fwfisf_cav(:,:) + fwfisf_par(:,:) ) 
    329330      ELSE                                        ! CENTRED integration: use kt-1/2 + kt+1/2 fluxes (NOW) 
    330          zztmp = r1_rau0 * r1_2 
     331         zztmp = r1_rho0 * r1_2 
    331332         zssh_frc(:,:) = zztmp * (  emp(:,:)        + emp_b(:,:)                    & 
    332333                &                 - rnf(:,:)        - rnf_b(:,:)                    & 
     
    435436         ! Update tide potential at the beginning of current time substep 
    436437         IF( ln_tide_pot .AND. ln_tide ) THEN 
    437             zt0substep = REAL(nsec_day, wp) - 0.5_wp*rdt + (jn + noffset - 1) * rdt / REAL(nn_baro, wp) 
     438            zt0substep = REAL(nsec_day, wp) - 0.5_wp*rn_Dt + (jn + noffset - 1) * rn_Dt / REAL(nn_e, wp) 
    438439            CALL upd_tide(zt0substep, Kmm) 
    439440         END IF 
     
    501502         IF( .NOT.Agrif_Root() .AND. ln_bt_fw ) CALL agrif_dyn_ts_flux( jn, zhU, zhV ) 
    502503#endif 
    503          IF( ln_wd_il )   CALL wad_lmt_bt(zhU, zhV, sshn_e, zssh_frc, rdtbt)    !!gm wad_lmt_bt use of lbc_lnk on zhU, zhV 
     504         IF( ln_wd_il )   CALL wad_lmt_bt(zhU, zhV, sshn_e, zssh_frc, rDt_e)    !!gm wad_lmt_bt use of lbc_lnk on zhU, zhV 
    504505 
    505506         IF( ln_wd_dl ) THEN           ! un_e and vn_e are set to zero at faces where  
     
    516517         DO_2D_00_00 
    517518            zhdiv = (   zhU(ji,jj) - zhU(ji-1,jj) + zhV(ji,jj) - zhV(ji,jj-1)   ) * r1_e1e2t(ji,jj) 
    518             ssha_e(ji,jj) = (  sshn_e(ji,jj) - rdtbt * ( zssh_frc(ji,jj) + zhdiv )  ) * ssmask(ji,jj) 
     519            ssha_e(ji,jj) = (  sshn_e(ji,jj) - rDt_e * ( zssh_frc(ji,jj) + zhdiv )  ) * ssmask(ji,jj) 
    519520         END_2D 
    520521         ! 
     
    606607            DO_2D_00_00 
    607608               ua_e(ji,jj) = (                                 un_e(ji,jj)   &  
    608                          &     + rdtbt * (                   zu_spg(ji,jj)   & 
     609                         &     + rDt_e * (                   zu_spg(ji,jj)   & 
    609610                         &                                 + zu_trd(ji,jj)   & 
    610611                         &                                 + zu_frc(ji,jj) ) &  
     
    612613 
    613614               va_e(ji,jj) = (                                 vn_e(ji,jj)   & 
    614                          &     + rdtbt * (                   zv_spg(ji,jj)   & 
     615                         &     + rDt_e * (                   zv_spg(ji,jj)   & 
    615616                         &                                 + zv_trd(ji,jj)   & 
    616617                         &                                 + zv_frc(ji,jj) ) & 
     
    631632               ! 
    632633               ua_e(ji,jj) = (               hu_e  (ji,jj) *   un_e (ji,jj)      &  
    633                     &            + rdtbt * (  zhu_bck        * zu_spg (ji,jj)  &   ! 
     634                    &            + rDt_e * (  zhu_bck        * zu_spg (ji,jj)  &   ! 
    634635                    &                       + zhup2_e(ji,jj) * zu_trd (ji,jj)  &   ! 
    635636                    &                       +  hu(ji,jj,Kmm) * zu_frc (ji,jj)  )   ) * z1_hu 
    636637               ! 
    637638               va_e(ji,jj) = (               hv_e  (ji,jj) *   vn_e (ji,jj)      & 
    638                     &            + rdtbt * (  zhv_bck        * zv_spg (ji,jj)  &   ! 
     639                    &            + rDt_e * (  zhv_bck        * zv_spg (ji,jj)  &   ! 
    639640                    &                       + zhvp2_e(ji,jj) * zv_trd (ji,jj)  &   ! 
    640641                    &                       +  hv(ji,jj,Kmm) * zv_frc (ji,jj)  )   ) * z1_hv 
     
    644645         IF ( ll_wd ) THEN ! revert to explicit for bit comparison tests in non wad runs 
    645646            DO_2D_00_00 
    646                   ua_e(ji,jj) =  ua_e(ji,jj) /(1.0 -   rdtbt * zCdU_u(ji,jj) * hur_e(ji,jj)) 
    647                   va_e(ji,jj) =  va_e(ji,jj) /(1.0 -   rdtbt * zCdU_v(ji,jj) * hvr_e(ji,jj)) 
     647                  ua_e(ji,jj) =  ua_e(ji,jj) /(1.0 -   rDt_e * zCdU_u(ji,jj) * hur_e(ji,jj)) 
     648                  va_e(ji,jj) =  va_e(ji,jj) /(1.0 -   rDt_e * zCdU_v(ji,jj) * hvr_e(ji,jj)) 
    648649            END_2D 
    649650         ENDIF 
     
    708709      ! Set advection velocity correction: 
    709710      IF (ln_bt_fw) THEN 
    710          IF( .NOT.( kt == nit000 .AND. neuler==0 ) ) THEN 
     711         IF( .NOT.( kt == nit000 .AND. l_1st_euler ) ) THEN 
    711712            DO_2D_11_11 
    712713               zun_save = un_adv(ji,jj) 
    713714               zvn_save = vn_adv(ji,jj) 
    714715               !                          ! apply the previously computed correction  
    715                un_adv(ji,jj) = r1_2 * ( ub2_b(ji,jj) + zun_save - atfp * un_bf(ji,jj) ) 
    716                vn_adv(ji,jj) = r1_2 * ( vb2_b(ji,jj) + zvn_save - atfp * vn_bf(ji,jj) ) 
     716               un_adv(ji,jj) = r1_2 * ( ub2_b(ji,jj) + zun_save - rn_atfp * un_bf(ji,jj) ) 
     717               vn_adv(ji,jj) = r1_2 * ( vb2_b(ji,jj) + zvn_save - rn_atfp * vn_bf(ji,jj) ) 
    717718               !                          ! Update corrective fluxes for next time step 
    718                un_bf(ji,jj)  = atfp * un_bf(ji,jj) + ( zun_save - ub2_b(ji,jj) ) 
    719                vn_bf(ji,jj)  = atfp * vn_bf(ji,jj) + ( zvn_save - vb2_b(ji,jj) ) 
     719               un_bf(ji,jj)  = rn_atfp * un_bf(ji,jj) + ( zun_save - ub2_b(ji,jj) ) 
     720               vn_bf(ji,jj)  = rn_atfp * vn_bf(ji,jj) + ( zvn_save - vb2_b(ji,jj) ) 
    720721               !                          ! Save integrated transport for next computation 
    721722               ub2_b(ji,jj) = zun_save 
     
    735736      IF( ln_dynadv_vec .OR. ln_linssh ) THEN 
    736737         DO jk=1,jpkm1 
    737             puu(:,:,jk,Krhs) = puu(:,:,jk,Krhs) + ( puu_b(:,:,Kaa) - puu_b(:,:,Kbb) ) * r1_2dt_b 
    738             pvv(:,:,jk,Krhs) = pvv(:,:,jk,Krhs) + ( pvv_b(:,:,Kaa) - pvv_b(:,:,Kbb) ) * r1_2dt_b 
     738            puu(:,:,jk,Krhs) = puu(:,:,jk,Krhs) + ( puu_b(:,:,Kaa) - puu_b(:,:,Kbb) ) * r1_Dt_b 
     739            pvv(:,:,jk,Krhs) = pvv(:,:,jk,Krhs) + ( pvv_b(:,:,Kaa) - pvv_b(:,:,Kbb) ) * r1_Dt_b 
    739740         END DO 
    740741      ELSE 
     
    751752         ! 
    752753         DO jk=1,jpkm1 
    753             puu(:,:,jk,Krhs) = puu(:,:,jk,Krhs) + r1_hu(:,:,Kmm) * ( puu_b(:,:,Kaa) - puu_b(:,:,Kbb) * hu(:,:,Kbb) ) * r1_2dt_b 
    754             pvv(:,:,jk,Krhs) = pvv(:,:,jk,Krhs) + r1_hv(:,:,Kmm) * ( pvv_b(:,:,Kaa) - pvv_b(:,:,Kbb) * hv(:,:,Kbb) ) * r1_2dt_b 
     754            puu(:,:,jk,Krhs) = puu(:,:,jk,Krhs) + r1_hu(:,:,Kmm) * ( puu_b(:,:,Kaa) - puu_b(:,:,Kbb) * hu(:,:,Kbb) ) * r1_Dt_b 
     755            pvv(:,:,jk,Krhs) = pvv(:,:,jk,Krhs) + r1_hv(:,:,Kmm) * ( pvv_b(:,:,Kaa) - pvv_b(:,:,Kbb) * hv(:,:,Kbb) ) * r1_Dt_b 
    755756         END DO 
    756757         ! Save barotropic velocities not transport: 
     
    815816      LOGICAL, INTENT(in) ::   ll_fw      ! forward time splitting =.true. 
    816817      INTEGER, INTENT(inout) :: jpit      ! cycle length     
    817       REAL(wp), DIMENSION(3*nn_baro), INTENT(inout) ::   zwgt1, & ! Primary weights 
     818      REAL(wp), DIMENSION(3*nn_e), INTENT(inout) ::   zwgt1, & ! Primary weights 
    818819                                                         zwgt2    ! Secondary weights 
    819820       
     
    827828      ! Set time index when averaged value is requested 
    828829      IF (ll_fw) THEN  
    829          jic = nn_baro 
     830         jic = nn_e 
    830831      ELSE 
    831          jic = 2 * nn_baro 
     832         jic = 2 * nn_e 
    832833      ENDIF 
    833834 
     
    835836      IF (ll_av) THEN 
    836837           ! Define simple boxcar window for primary weights  
    837            ! (width = nn_baro, centered around jic)      
     838           ! (width = nn_e, centered around jic)      
    838839         SELECT CASE ( nn_bt_flt ) 
    839840              CASE( 0 )  ! No averaging 
     
    841842                 jpit = jic 
    842843 
    843               CASE( 1 )  ! Boxcar, width = nn_baro 
    844                  DO jn = 1, 3*nn_baro 
    845                     za1 = ABS(float(jn-jic))/float(nn_baro)  
     844              CASE( 1 )  ! Boxcar, width = nn_e 
     845                 DO jn = 1, 3*nn_e 
     846                    za1 = ABS(float(jn-jic))/float(nn_e)  
    846847                    IF (za1 < 0.5_wp) THEN 
    847848                      zwgt1(jn) = 1._wp 
     
    850851                 ENDDO 
    851852 
    852               CASE( 2 )  ! Boxcar, width = 2 * nn_baro 
    853                  DO jn = 1, 3*nn_baro 
    854                     za1 = ABS(float(jn-jic))/float(nn_baro)  
     853              CASE( 2 )  ! Boxcar, width = 2 * nn_e 
     854                 DO jn = 1, 3*nn_e 
     855                    za1 = ABS(float(jn-jic))/float(nn_e)  
    855856                    IF (za1 < 1._wp) THEN 
    856857                      zwgt1(jn) = 1._wp 
     
    896897      IF( TRIM(cdrw) == 'READ' ) THEN        ! Read/initialise  
    897898         !                                   ! --------------- 
    898          IF( ln_rstart .AND. ln_bt_fw .AND. (neuler/=0) ) THEN    !* Read the restart file 
     899         IF( ln_rstart .AND. ln_bt_fw .AND. (.NOT.l_1st_euler) ) THEN    !* Read the restart file 
    899900            CALL iom_get( numror, jpdom_autoglo, 'ub2_b'  , ub2_b  (:,:), ldxios = lrxios )    
    900901            CALL iom_get( numror, jpdom_autoglo, 'vb2_b'  , vb2_b  (:,:), ldxios = lrxios )  
     
    982983 
    983984      ! Estimate number of iterations to satisfy a max courant number= rn_bt_cmax 
    984       IF( ln_bt_auto )   nn_baro = CEILING( rdt / rn_bt_cmax * zcmax) 
     985      IF( ln_bt_auto )   nn_e = CEILING( rn_Dt / rn_bt_cmax * zcmax) 
    985986       
    986       rdtbt = rdt / REAL( nn_baro , wp ) 
    987       zcmax = zcmax * rdtbt 
     987      rDt_e = rn_Dt / REAL( nn_e , wp ) 
     988      zcmax = zcmax * rDt_e 
    988989      ! Print results 
    989990      IF(lwp) WRITE(numout,*) 
     
    991992      IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~~~' 
    992993      IF( ln_bt_auto ) THEN 
    993          IF(lwp) WRITE(numout,*) '     ln_ts_auto =.true. Automatically set nn_baro ' 
     994         IF(lwp) WRITE(numout,*) '     ln_ts_auto =.true. Automatically set nn_e ' 
    994995         IF(lwp) WRITE(numout,*) '     Max. courant number allowed: ', rn_bt_cmax 
    995996      ELSE 
    996          IF(lwp) WRITE(numout,*) '     ln_ts_auto=.false.: Use nn_baro in namelist   nn_baro = ', nn_baro 
     997         IF(lwp) WRITE(numout,*) '     ln_ts_auto=.false.: Use nn_e in namelist   nn_e = ', nn_e 
    997998      ENDIF 
    998999 
    9991000      IF(ln_bt_av) THEN 
    1000          IF(lwp) WRITE(numout,*) '     ln_bt_av =.true.  ==> Time averaging over nn_baro time steps is on ' 
     1001         IF(lwp) WRITE(numout,*) '     ln_bt_av =.true.  ==> Time averaging over nn_e time steps is on ' 
    10011002      ELSE 
    10021003         IF(lwp) WRITE(numout,*) '     ln_bt_av =.false. => No time averaging of barotropic variables ' 
     
    10181019      SELECT CASE ( nn_bt_flt ) 
    10191020         CASE( 0 )      ;   IF(lwp) WRITE(numout,*) '           Dirac' 
    1020          CASE( 1 )      ;   IF(lwp) WRITE(numout,*) '           Boxcar: width = nn_baro' 
    1021          CASE( 2 )      ;   IF(lwp) WRITE(numout,*) '           Boxcar: width = 2*nn_baro'  
     1021         CASE( 1 )      ;   IF(lwp) WRITE(numout,*) '           Boxcar: width = nn_e' 
     1022         CASE( 2 )      ;   IF(lwp) WRITE(numout,*) '           Boxcar: width = 2*nn_e'  
    10221023         CASE DEFAULT   ;   CALL ctl_stop( 'unrecognised value for nn_bt_flt: should 0,1, or 2' ) 
    10231024      END SELECT 
    10241025      ! 
    10251026      IF(lwp) WRITE(numout,*) ' ' 
    1026       IF(lwp) WRITE(numout,*) '     nn_baro = ', nn_baro 
    1027       IF(lwp) WRITE(numout,*) '     Barotropic time step [s] is :', rdtbt 
     1027      IF(lwp) WRITE(numout,*) '     nn_e = ', nn_e 
     1028      IF(lwp) WRITE(numout,*) '     Barotropic time step [s] is :', rDt_e 
    10281029      IF(lwp) WRITE(numout,*) '     Maximum Courant number is   :', zcmax 
    10291030      ! 
     
    10371038      ENDIF 
    10381039      IF( zcmax>0.9_wp ) THEN 
    1039          CALL ctl_stop( 'dynspg_ts ERROR: Maximum Courant number is greater than 0.9: Inc. nn_baro !' )           
     1040         CALL ctl_stop( 'dynspg_ts ERROR: Maximum Courant number is greater than 0.9: Inc. nn_e !' )           
    10401041      ENDIF 
    10411042      ! 
     
    14361437      ! 
    14371438      IF( ln_wd_il ) THEN      ! W/D : use the "clipped" bottom friction   !!gm   explain WHY, please ! 
    1438          zztmp = -1._wp / rdtbt 
     1439         zztmp = -1._wp / rDt_e 
    14391440         DO_2D_00_00 
    14401441            pu_RHSi(ji,jj) = pu_RHSi(ji,jj) + zu_i(ji,jj) *  wdrampu(ji,jj) * MAX(                                 &  
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/DYN/dynzdf.F90

    r12616 r12724  
    9393         ENDIF 
    9494      ENDIF 
    95       !                             !* set time step 
    96       IF( neuler == 0 .AND. kt == nit000     ) THEN   ;   r2dt =      rdt   ! = rdt (restart with Euler time stepping) 
    97       ELSEIF(               kt <= nit000 + 1 ) THEN   ;   r2dt = 2. * rdt   ! = 2 rdt (leapfrog) 
    98       ENDIF 
    99       ! 
    10095      !                             !* explicit top/bottom drag case 
    10196      IF( .NOT.ln_drgimp )   CALL zdf_drg_exp( kt, Kmm, puu(:,:,:,Kbb), pvv(:,:,:,Kbb), puu(:,:,:,Krhs), pvv(:,:,:,Krhs) )  ! add top/bottom friction trend to (puu(Kaa),pvv(Kaa)) 
     
    113108      IF( ln_dynadv_vec .OR. ln_linssh ) THEN   ! applied on velocity 
    114109         DO jk = 1, jpkm1 
    115             puu(:,:,jk,Kaa) = ( puu(:,:,jk,Kbb) + r2dt * puu(:,:,jk,Krhs) ) * umask(:,:,jk) 
    116             pvv(:,:,jk,Kaa) = ( pvv(:,:,jk,Kbb) + r2dt * pvv(:,:,jk,Krhs) ) * vmask(:,:,jk) 
     110            puu(:,:,jk,Kaa) = ( puu(:,:,jk,Kbb) + rDt * puu(:,:,jk,Krhs) ) * umask(:,:,jk) 
     111            pvv(:,:,jk,Kaa) = ( pvv(:,:,jk,Kbb) + rDt * pvv(:,:,jk,Krhs) ) * vmask(:,:,jk) 
    117112         END DO 
    118113      ELSE                                      ! applied on thickness weighted velocity 
    119114         DO jk = 1, jpkm1 
    120             puu(:,:,jk,Kaa) = (    e3u(:,:,jk,Kbb) * puu(:,:,jk,Kbb)       & 
    121                &          + r2dt * e3u(:,:,jk,Kmm) * puu(:,:,jk,Krhs)  )   & 
    122                &                 / e3u(:,:,jk,Kaa) * umask(:,:,jk) 
    123             pvv(:,:,jk,Kaa) = (    e3v(:,:,jk,Kbb) * pvv(:,:,jk,Kbb)       & 
    124                &          + r2dt * e3v(:,:,jk,Kmm) * pvv(:,:,jk,Krhs)  )   & 
    125                &                 / e3v(:,:,jk,Kaa) * vmask(:,:,jk) 
     115            puu(:,:,jk,Kaa) =  (    e3u(:,:,jk,Kbb) * puu(:,:,jk,Kbb)       & 
     116               &            + rDt * e3u(:,:,jk,Kmm) * puu(:,:,jk,Krhs)  )   & 
     117               &                  / e3u(:,:,jk,Kaa) * umask(:,:,jk) 
     118            pvv(:,:,jk,Kaa) =  (    e3v(:,:,jk,Kbb) * pvv(:,:,jk,Kbb)       & 
     119               &            + rDt * e3v(:,:,jk,Kmm) * pvv(:,:,jk,Krhs)  )   & 
     120               &                  / e3v(:,:,jk,Kaa) * vmask(:,:,jk) 
    126121         END DO 
    127122      ENDIF 
     
    143138            ze3va =  ( 1._wp - r_vvl ) * e3v(ji,jj,ikv,Kmm)    & 
    144139               &             + r_vvl   * e3v(ji,jj,ikv,Kaa) 
    145             puu(ji,jj,iku,Kaa) = puu(ji,jj,iku,Kaa) + r2dt * 0.5*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) * uu_b(ji,jj,Kaa) / ze3ua 
    146             pvv(ji,jj,ikv,Kaa) = pvv(ji,jj,ikv,Kaa) + r2dt * 0.5*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) * vv_b(ji,jj,Kaa) / ze3va 
     140            puu(ji,jj,iku,Kaa) = puu(ji,jj,iku,Kaa) + rDt * 0.5*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) * uu_b(ji,jj,Kaa) / ze3ua 
     141            pvv(ji,jj,ikv,Kaa) = pvv(ji,jj,ikv,Kaa) + rDt * 0.5*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) * vv_b(ji,jj,Kaa) / ze3va 
    147142         END_2D 
    148143         IF( ln_isfcav ) THEN    ! Ocean cavities (ISF) 
     
    154149               ze3va =  ( 1._wp - r_vvl ) * e3v(ji,jj,ikv,Kmm)    & 
    155150                  &             + r_vvl   * e3v(ji,jj,ikv,Kaa) 
    156                puu(ji,jj,iku,Kaa) = puu(ji,jj,iku,Kaa) + r2dt * 0.5*( rCdU_top(ji+1,jj)+rCdU_top(ji,jj) ) * uu_b(ji,jj,Kaa) / ze3ua 
    157                pvv(ji,jj,ikv,Kaa) = pvv(ji,jj,ikv,Kaa) + r2dt * 0.5*( rCdU_top(ji,jj+1)+rCdU_top(ji,jj) ) * vv_b(ji,jj,Kaa) / ze3va 
     151               puu(ji,jj,iku,Kaa) = puu(ji,jj,iku,Kaa) + rDt * 0.5*( rCdU_top(ji+1,jj)+rCdU_top(ji,jj) ) * uu_b(ji,jj,Kaa) / ze3ua 
     152               pvv(ji,jj,ikv,Kaa) = pvv(ji,jj,ikv,Kaa) + rDt * 0.5*( rCdU_top(ji,jj+1)+rCdU_top(ji,jj) ) * vv_b(ji,jj,Kaa) / ze3va 
    158153            END_2D 
    159154         END IF 
     
    163158      ! 
    164159      !                    !* Matrix construction 
    165       zdt = r2dt * 0.5 
     160      zdt = rDt * 0.5 
    166161      IF( ln_zad_Aimp ) THEN   !! 
    167162         SELECT CASE( nldf_dyn ) 
     
    250245            ze3ua =  ( 1._wp - r_vvl ) * e3u(ji,jj,iku,Kmm)    & 
    251246               &             + r_vvl   * e3u(ji,jj,iku,Kaa)   ! after scale factor at T-point 
    252             zwd(ji,jj,iku) = zwd(ji,jj,iku) - r2dt * 0.5*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) / ze3ua 
     247            zwd(ji,jj,iku) = zwd(ji,jj,iku) - rDt * 0.5*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) / ze3ua 
    253248         END_2D 
    254249         IF ( ln_isfcav ) THEN   ! top friction (always implicit) 
     
    258253               ze3ua =  ( 1._wp - r_vvl ) * e3u(ji,jj,iku,Kmm)    & 
    259254                  &             + r_vvl   * e3u(ji,jj,iku,Kaa)   ! after scale factor at T-point 
    260                zwd(ji,jj,iku) = zwd(ji,jj,iku) - r2dt * 0.5*( rCdU_top(ji+1,jj)+rCdU_top(ji,jj) ) / ze3ua 
     255               zwd(ji,jj,iku) = zwd(ji,jj,iku) - rDt * 0.5*( rCdU_top(ji+1,jj)+rCdU_top(ji,jj) ) / ze3ua 
    261256            END_2D 
    262257         END IF 
     
    285280         ze3ua =  ( 1._wp - r_vvl ) * e3u(ji,jj,1,Kmm)    & 
    286281            &             + r_vvl   * e3u(ji,jj,1,Kaa)  
    287          puu(ji,jj,1,Kaa) = puu(ji,jj,1,Kaa) + r2dt * 0.5_wp * ( utau_b(ji,jj) + utau(ji,jj) )   & 
    288             &                                      / ( ze3ua * rau0 ) * umask(ji,jj,1)  
     282         puu(ji,jj,1,Kaa) = puu(ji,jj,1,Kaa) + rDt * 0.5_wp * ( utau_b(ji,jj) + utau(ji,jj) )   & 
     283            &                                      / ( ze3ua * rho0 ) * umask(ji,jj,1)  
    289284      END_2D 
    290285      DO_3D_00_00( 2, jpkm1 ) 
     
    302297      ! 
    303298      !                       !* Matrix construction 
    304       zdt = r2dt * 0.5 
     299      zdt = rDt * 0.5 
    305300      IF( ln_zad_Aimp ) THEN   !! 
    306301         SELECT CASE( nldf_dyn ) 
     
    388383            ze3va =  ( 1._wp - r_vvl ) * e3v(ji,jj,ikv,Kmm)    & 
    389384               &             + r_vvl   * e3v(ji,jj,ikv,Kaa)   ! after scale factor at T-point 
    390             zwd(ji,jj,ikv) = zwd(ji,jj,ikv) - r2dt * 0.5*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) / ze3va            
     385            zwd(ji,jj,ikv) = zwd(ji,jj,ikv) - rDt * 0.5*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) / ze3va            
    391386         END_2D 
    392387         IF ( ln_isfcav ) THEN 
     
    395390               ze3va =  ( 1._wp - r_vvl ) * e3v(ji,jj,ikv,Kmm)    & 
    396391                  &             + r_vvl   * e3v(ji,jj,ikv,Kaa)   ! after scale factor at T-point 
    397                zwd(ji,jj,ikv) = zwd(ji,jj,ikv) - r2dt * 0.5*( rCdU_top(ji,jj+1)+rCdU_top(ji,jj) ) / ze3va 
     392               zwd(ji,jj,ikv) = zwd(ji,jj,ikv) - rDt * 0.5*( rCdU_top(ji,jj+1)+rCdU_top(ji,jj) ) / ze3va 
    398393            END_2D 
    399394         ENDIF 
     
    422417         ze3va =  ( 1._wp - r_vvl ) * e3v(ji,jj,1,Kmm)    & 
    423418            &             + r_vvl   * e3v(ji,jj,1,Kaa)  
    424          pvv(ji,jj,1,Kaa) = pvv(ji,jj,1,Kaa) + r2dt * 0.5_wp * ( vtau_b(ji,jj) + vtau(ji,jj) )   & 
    425             &                                      / ( ze3va * rau0 ) * vmask(ji,jj,1)  
     419         pvv(ji,jj,1,Kaa) = pvv(ji,jj,1,Kaa) + rDt * 0.5_wp * ( vtau_b(ji,jj) + vtau(ji,jj) )   & 
     420            &                                      / ( ze3va * rho0 ) * vmask(ji,jj,1)  
    426421      END_2D 
    427422      DO_3D_00_00( 2, jpkm1 ) 
     
    437432      ! 
    438433      IF( l_trddyn )   THEN                      ! save the vertical diffusive trends for further diagnostics 
    439          ztrdu(:,:,:) = ( puu(:,:,:,Kaa) - puu(:,:,:,Kbb) ) / r2dt - ztrdu(:,:,:) 
    440          ztrdv(:,:,:) = ( pvv(:,:,:,Kaa) - pvv(:,:,:,Kbb) ) / r2dt - ztrdv(:,:,:) 
     434         ztrdu(:,:,:) = ( puu(:,:,:,Kaa) - puu(:,:,:,Kbb) ) / rDt - ztrdu(:,:,:) 
     435         ztrdv(:,:,:) = ( pvv(:,:,:,Kaa) - pvv(:,:,:,Kbb) ) / rDt - ztrdv(:,:,:) 
    441436         CALL trd_dyn( ztrdu, ztrdv, jpdyn_zdf, kt, Kmm ) 
    442437         DEALLOCATE( ztrdu, ztrdv )  
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/DYN/sshwzv.F90

    r12680 r12724  
    7777      REAL(wp), DIMENSION(jpi,jpj,jpt), INTENT(inout) ::   pssh           ! sea-surface height 
    7878      ! 
    79       INTEGER  ::   jk            ! dummy loop indice 
    80       REAL(wp) ::   z2dt, zcoef   ! local scalars 
     79      INTEGER  ::   jk      ! dummy loop index 
     80      REAL(wp) ::   zcoef   ! local scalar 
    8181      REAL(wp), DIMENSION(jpi,jpj) ::   zhdiv   ! 2D workspace 
    8282      !!---------------------------------------------------------------------- 
     
    9090      ENDIF 
    9191      ! 
    92       z2dt = 2._wp * rdt                          ! set time step size (Euler/Leapfrog) 
    93       IF( neuler == 0 .AND. kt == nit000 )   z2dt = rdt 
    94       zcoef = 0.5_wp * r1_rau0 
     92      zcoef = 0.5_wp * r1_rho0 
    9593 
    9694      !                                           !------------------------------! 
     
    9896      !                                           !------------------------------! 
    9997      IF(ln_wd_il) THEN 
    100          CALL wad_lmt(pssh(:,:,Kbb), zcoef * (emp_b(:,:) + emp(:,:)), z2dt, Kmm, uu, vv ) 
     98         CALL wad_lmt(pssh(:,:,Kbb), zcoef * (emp_b(:,:) + emp(:,:)), rDt, Kmm, uu, vv ) 
    10199      ENDIF 
    102100 
     
    111109      ! compute the vertical velocity which can be used to compute the non-linear terms of the momentum equations. 
    112110      ! 
    113       pssh(:,:,Kaa) = (  pssh(:,:,Kbb) - z2dt * ( zcoef * ( emp_b(:,:) + emp(:,:) ) + zhdiv(:,:) )  ) * ssmask(:,:) 
     111      pssh(:,:,Kaa) = (  pssh(:,:,Kbb) - rDt * ( zcoef * ( emp_b(:,:) + emp(:,:) ) + zhdiv(:,:) )  ) * ssmask(:,:) 
    114112      ! 
    115113#if defined key_agrif 
     
    155153      ! 
    156154      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
    157       REAL(wp) ::   z1_2dt       ! local scalars 
    158155      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   zhdiv 
    159156      !!---------------------------------------------------------------------- 
     
    168165         pww(:,:,jpk) = 0._wp           ! bottom boundary condition: w=0 (set once for all) 
    169166      ENDIF 
    170       ! 
    171       z1_2dt = 1. / ( 2. * rdt )        ! set time step size (Euler/Leapfrog) 
    172       IF( neuler == 0 .AND. kt == nit000 )   z1_2dt = 1. / rdt 
     167      !                                           !------------------------------! 
     168      !                                           !     Now Vertical Velocity    ! 
     169      !                                           !------------------------------! 
    173170      ! 
    174171      !                                               !===============================! 
     
    191188            pww(:,:,jk) = pww(:,:,jk+1) - (   e3t(:,:,jk,Kmm) * hdiv(:,:,jk)   & 
    192189               &                            +                  zhdiv(:,:,jk)   & 
    193                &                            + z1_2dt * ( e3t(:,:,jk,Kaa)       & 
     190               &                            + r1_Dt * ( e3t(:,:,jk,Kaa)       & 
    194191               &                                       - e3t(:,:,jk,Kbb) )   ) * tmask(:,:,jk) 
    195192         END DO 
     
    206203         !                                            !==========================================! 
    207204         DO jk = jpkm1, 1, -1                               ! integrate from the bottom the hor. divergence 
    208             pww(:,:,jk) = pww(:,:,jk+1) - (  e3t(:,:,jk,Kmm) * hdiv(:,:,jk)    & 
    209                &                         + z1_2dt * ( e3t(:,:,jk,Kaa)          & 
    210                &                                    - e3t(:,:,jk,Kbb) )  ) * tmask(:,:,jk) 
     205            pww(:,:,jk) = pww(:,:,jk+1) - (   e3t(:,:,jk,Kmm) * hdiv(:,:,jk)    & 
     206               &                            + r1_Dt * (  e3t(:,:,jk,Kaa)        & 
     207               &                                       - e3t(:,:,jk,Kbb)  )   ) * tmask(:,:,jk) 
    211208         END DO 
    212209      ENDIF 
     
    240237      !! ** Method  : - apply Asselin time fiter to now ssh (excluding the forcing 
    241238      !!              from the filter, see Leclair and Madec 2010) and swap : 
    242       !!                pssh(:,:,Kmm) = pssh(:,:,Kaa) + atfp * ( pssh(:,:,Kbb) -2 pssh(:,:,Kmm) + pssh(:,:,Kaa) ) 
    243       !!                            - atfp * rdt * ( emp_b - emp ) / rau0 
     239      !!                pssh(:,:,Kmm) = pssh(:,:,Kaa) + rn_atfp * ( pssh(:,:,Kbb) -2 pssh(:,:,Kmm) + pssh(:,:,Kaa) ) 
     240      !!                            - rn_atfp * rn_Dt * ( emp_b - emp ) / rho0 
    244241      !! 
    245242      !! ** action  : - pssh(:,:,Kmm) time filtered 
     
    262259      ENDIF 
    263260      !              !==  Euler time-stepping: no filter, just swap  ==! 
    264       IF ( .NOT.( neuler == 0 .AND. kt == nit000 ) ) THEN   ! Only do time filtering for leapfrog timesteps 
     261      IF ( .NOT.( l_1st_euler ) ) THEN   ! Only do time filtering for leapfrog timesteps 
    265262         !                                                  ! filtered "now" field 
    266          pssh(:,:,Kmm) = pssh(:,:,Kmm) + atfp * ( pssh(:,:,Kbb) - 2 * pssh(:,:,Kmm) + pssh(:,:,Kaa) ) 
     263         pssh(:,:,Kmm) = pssh(:,:,Kmm) + rn_atfp * ( pssh(:,:,Kbb) - 2 * pssh(:,:,Kmm) + pssh(:,:,Kaa) ) 
    267264         IF( .NOT.ln_linssh ) THEN                          ! "now" <-- with forcing removed 
    268             zcoef = atfp * rdt * r1_rau0 
     265            zcoef = rn_atfp * rn_Dt * r1_rho0 
    269266            pssh(:,:,Kmm) = pssh(:,:,Kmm) - zcoef * (     emp_b(:,:) - emp   (:,:)   & 
    270267               &                             - rnf_b(:,:)        + rnf   (:,:)       & 
     
    273270 
    274271            ! ice sheet coupling 
    275             IF ( ln_isf .AND. ln_isfcpl .AND. kt == nit000+1) pssh(:,:,Kbb) = pssh(:,:,Kbb) - atfp * rdt * ( risfcpl_ssh(:,:) - 0.0 ) * ssmask(:,:) 
     272            IF ( ln_isf .AND. ln_isfcpl .AND. kt == nit000+1) pssh(:,:,Kbb) = pssh(:,:,Kbb) - rn_atfp * rn_Dt * ( risfcpl_ssh(:,:) - 0.0 ) * ssmask(:,:) 
    276273 
    277274         ENDIF 
     
    325322            z1_e3t = 1._wp / e3t(ji,jj,jk,Kmm) 
    326323            ! 2*rdt and not r2dt (for restartability) 
    327             Cu_adv(ji,jj,jk) =  2._wp * rdt *   & 
     324            Cu_adv(ji,jj,jk) =  2._wp * rDt *   & 
    328325               &  ( ( MAX( ww(ji,jj,jk) , 0._wp ) - MIN( ww(ji,jj,jk+1) , 0._wp ) )            & 
    329326               &  + ( MAX( e2u(ji  ,jj) * e3u(ji  ,jj,jk,Kmm)                                  & 
     
    343340            z1_e3t = 1._wp / e3t(ji,jj,jk,Kmm) 
    344341            ! 2*rdt and not r2dt (for restartability) 
    345             Cu_adv(ji,jj,jk) =   2._wp * rdt *   & 
     342            Cu_adv(ji,jj,jk) =   2._wp * rDt *   & 
    346343               &  ( ( MAX( ww(ji,jj,jk) , 0._wp ) - MIN( ww(ji,jj,jk+1) , 0._wp ) )         & 
    347344               &  + ( MAX( e2u(ji  ,jj)*e3u(ji  ,jj,jk,Kmm)*uu(ji  ,jj,jk,Kmm), 0._wp ) -   & 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/DYN/wet_dry.F90

    r12622 r12724  
    271271 
    272272 
    273    SUBROUTINE wad_lmt_bt( zflxu, zflxv, sshn_e, zssh_frc, rdtbt ) 
     273   SUBROUTINE wad_lmt_bt( zflxu, zflxv, sshn_e, zssh_frc, rDt_e ) 
    274274      !!---------------------------------------------------------------------- 
    275275      !!                  ***  ROUTINE wad_lmt  *** 
     
    281281      !! ** Action  : - calculate flux limiter and W/D flag 
    282282      !!---------------------------------------------------------------------- 
    283       REAL(wp)                , INTENT(in   ) ::   rdtbt    ! ocean time-step index 
     283      REAL(wp)                , INTENT(in   ) ::   rDt_e    ! ocean time-step index 
    284284      REAL(wp), DIMENSION(:,:), INTENT(inout) ::   zflxu,  zflxv, sshn_e, zssh_frc   
    285285      ! 
     
    300300      zdepwd = 50._wp   ! maximum depth that ocean cells can have W/D processes 
    301301      ! 
    302       z2dt = rdtbt    
     302      z2dt = rDt_e    
    303303      ! 
    304304      zflxp(:,:)   = 0._wp 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/FLO/flo4rk.F90

    r12622 r12724  
    131131         ! computation of Runge-Kutta factor 
    132132         DO jfl = 1, jpnfl 
    133             zrkxfl(jfl,jind) = rdt*zufl(jfl) 
    134             zrkyfl(jfl,jind) = rdt*zvfl(jfl) 
    135             zrkzfl(jfl,jind) = rdt*zwfl(jfl) 
     133            zrkxfl(jfl,jind) = rn_Dt*zufl(jfl) 
     134            zrkyfl(jfl,jind) = rn_Dt*zvfl(jfl) 
     135            zrkzfl(jfl,jind) = rn_Dt*zwfl(jfl) 
    136136         END DO 
    137137         IF( jind /= 4 ) THEN 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/FLO/floblk.F90

    r12622 r12724  
    185185            zgidfl(jfl) = float(iioutfl(jfl) - iiinfl(jfl)) 
    186186            IF( zufl(jfl)*zuoutfl <= 0. ) THEN 
    187                ztxfl(jfl) = 1.E99 
     187               ztxfl(jfl) = HUGE(1._wp) 
    188188            ELSE 
    189189               IF( ABS(zudfl(jfl)) >= 1.E-5 ) THEN 
     
    201201            zgjdfl(jfl) = float(ijoutfl(jfl)-ijinfl(jfl)) 
    202202            IF( zvfl(jfl)*zvoutfl <= 0. ) THEN 
    203                ztyfl(jfl) = 1.E99 
     203               ztyfl(jfl) = HUGE(1._wp) 
    204204            ELSE 
    205205               IF( ABS(zvdfl(jfl)) >= 1.E-5 ) THEN 
     
    218218               zgkdfl(jfl) = float(ikoutfl(jfl) - ikinfl(jfl)) 
    219219               IF( zwfl(jfl)*zwoutfl <= 0. ) THEN 
    220                   ztzfl(jfl) = 1.E99 
     220                  ztzfl(jfl) = HUGE(1._wp) 
    221221               ELSE 
    222222                  IF( ABS(zwdfl(jfl)) >= 1.E-5 ) THEN 
     
    243243            ! test to know if the "age" of the float is not bigger than the 
    244244            ! time step 
    245             IF( zagenewfl(jfl) > rdt ) THEN 
    246                zttfl(jfl) = (rdt-zagefl(jfl)) / zvol 
    247                zagenewfl(jfl) = rdt 
     245            IF( zagenewfl(jfl) > rn_Dt ) THEN 
     246               zttfl(jfl) = (rn_Dt-zagefl(jfl)) / zvol 
     247               zagenewfl(jfl) = rn_Dt 
    248248            ENDIF 
    249249 
     
    350350         ifin = 1 
    351351         DO jfl = 1, jpnfl 
    352             IF( zagefl(jfl) < rdt )   ifin = 0 
     352            IF( zagefl(jfl) < rn_Dt )   ifin = 0 
    353353            tpifl(jfl) = zgifl(jfl) + 0.5 
    354354            tpjfl(jfl) = zgjfl(jfl) + 0.5 
     
    357357         ifin = 1 
    358358         DO jfl = 1, jpnfl 
    359             IF( zagefl(jfl) < rdt )   ifin = 0 
     359            IF( zagefl(jfl) < rn_Dt )   ifin = 0 
    360360            tpifl(jfl) = zgifl(jfl) + 0.5 
    361361            tpjfl(jfl) = zgjfl(jfl) + 0.5 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/FLO/flowri.F90

    r12377 r12724  
    122122               ztem(jfl) = ts(iafloc,ibfloc,icfl,jp_tem,Kmm) 
    123123               zsal (jfl) = ts(iafloc,ibfloc,icfl,jp_sal,Kmm) 
    124                zrho (jfl) = (rhd(iafloc,ibfloc,icfl)+1)*rau0 
     124               zrho (jfl) = (rhd(iafloc,ibfloc,icfl)+1)*rho0 
    125125 
    126126            ENDIF 
     
    142142            ztem(jfl) = ts(iafloc,ibfloc,icfl,jp_tem,Kmm) 
    143143            zsal(jfl) = ts(iafloc,ibfloc,icfl,jp_sal,Kmm) 
    144             zrho(jfl) = (rhd(iafloc,ibfloc,icfl)+1)*rau0 
     144            zrho(jfl) = (rhd(iafloc,ibfloc,icfl)+1)*rho0 
    145145           
    146146         ENDIF 
     
    245245            !------------------------------- 
    246246            irec =  INT( (kt-nn_it000+1)/nn_writefl ) +1 
    247             ztime = ( kt-nn_it000 + 1 ) * rdt 
     247            ztime = ( kt-nn_it000 + 1 ) * rn_Dt 
    248248 
    249249            CALL flioputv( numflo , 'time_counter', ztime , start=(/irec/) ) 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/ICB/icb_oce.F90

    r10702 r12724  
    124124   LOGICAL , PUBLIC ::   ln_time_average_weight          !: Time average the weight on the ocean    !!gm I don't understand that ! 
    125125   REAL(wp), PUBLIC ::   rn_speed_limit                  !: CFL speed limit for a berg 
     126   ! 
     127   ! restart 
     128   CHARACTER(len=256), PUBLIC :: cn_icbrst_indir , cn_icbrst_in  !:  in: restart directory, restart name 
     129   CHARACTER(len=256), PUBLIC :: cn_icbrst_outdir, cn_icbrst_out !: out: restart directory, restart name 
    126130   ! 
    127131   !                                     ! Mass thresholds between iceberg classes [kg] 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/ICB/icbini.F90

    r12377 r12724  
    6060      !!              - setup either test icebergs or calving file 
    6161      !!---------------------------------------------------------------------- 
    62       REAL(wp), INTENT(in) ::   pdt   ! iceberg time-step (rdt*nn_fsbc) 
     62      REAL(wp), INTENT(in) ::   pdt   ! iceberg time-step (rn_Dt*nn_fsbc) 
    6363      INTEGER , INTENT(in) ::   kt    ! time step number 
    6464      ! 
     
    383383         &              rn_bits_erosion_fraction        , rn_sicn_shift       , ln_passive_mode      ,   & 
    384384         &              ln_time_average_weight          , nn_test_icebergs    , rn_test_box          ,   & 
    385          &              ln_use_calving , rn_speed_limit , cn_dir, sn_icb 
     385         &              ln_use_calving , rn_speed_limit , cn_dir, sn_icb      ,                          & 
     386         &              cn_icbrst_indir, cn_icbrst_in   , cn_icbrst_outdir    , cn_icbrst_out 
    386387      !!---------------------------------------------------------------------- 
    387388 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/ICB/icbrst.F90

    r11536 r12724  
    6969      TYPE(point)                  ::   localpt   ! NOT a pointer but an actual local variable 
    7070      !!---------------------------------------------------------------------- 
    71  
    7271      ! Find a restart file. Assume iceberg restarts in same directory as ocean restarts 
    7372      ! and are called TRIM(cn_ocerst)//'_icebergs' 
    74       cl_path = TRIM(cn_ocerst_indir) 
     73      cl_path = TRIM(cn_icbrst_indir) 
    7574      IF( cl_path(LEN_TRIM(cl_path):) /= '/' ) cl_path = TRIM(cl_path) // '/' 
    76       cl_filename = TRIM(cn_ocerst_in)//'_icebergs' 
     75      cl_filename = TRIM(cn_icbrst_in) 
    7776      CALL iom_open( TRIM(cl_path)//cl_filename, ncid ) 
    7877 
     
    192191      CHARACTER(len=256)     :: cl_path 
    193192      CHARACTER(len=256)     :: cl_filename 
     193      CHARACTER(len=256)     :: cl_kt 
    194194      TYPE(iceberg), POINTER :: this 
    195195      TYPE(point)  , POINTER :: pt 
     
    204204         ! Only operate on the restart timestep itself. 
    205205         ! Assume we write iceberg restarts to same directory as ocean restarts. 
    206          cl_path = TRIM(cn_ocerst_outdir) 
     206         ! 
     207         ! directory name 
     208         cl_path = TRIM(cn_icbrst_outdir) 
    207209         IF( cl_path(LEN_TRIM(cl_path):) /= '/' ) cl_path = TRIM(cl_path) // '/' 
     210         ! 
     211         ! file name 
     212         WRITE(cl_kt, '(i8.8)') kt 
     213         cl_filename = TRIM(cexper)//"_"//TRIM(ADJUSTL(cl_kt))//"_"//TRIM(cn_icbrst_out) 
    208214         IF( lk_mpp ) THEN 
    209             WRITE(cl_filename,'(A,"_icebergs_",I8.8,"_restart_",I4.4,".nc")') TRIM(cexper), kt, narea-1 
     215            WRITE(cl_filename,'(A,"_",I4.4,".nc")') TRIM(cl_filename), narea-1 
    210216         ELSE 
    211             WRITE(cl_filename,'(A,"_icebergs_",I8.8,"_restart.nc")') TRIM(cexper), kt 
     217            WRITE(cl_filename,'(A,".nc")') TRIM(cl_filename) 
    212218         ENDIF 
     219 
    213220         IF ( lwp .AND. nn_verbose_level >= 0) WRITE(numout,'(2a)') 'icebergs, write_restart: creating ',  & 
    214221           &                                                         TRIM(cl_path)//TRIM(cl_filename) 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/ICB/icbtrj.F90

    r10068 r12724  
    7474 
    7575      ! compute end time step date 
    76       zfjulday = fjulday + rdt / rday * REAL( nitend - nit000 + 1 , wp) 
     76      zfjulday = fjulday + rn_Dt / rday * REAL( nitend - nit000 + 1 , wp) 
    7777      IF( ABS(zfjulday - REAL(NINT(zfjulday),wp)) < 0.1 / rday )   zfjulday = REAL(NINT(zfjulday),wp)   ! avoid truncation error 
    7878      CALL ju2ymds( zfjulday, iyear, imonth, iday, zsec ) 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/IOM/iom.F90

    r12377 r12724  
    111111      CHARACTER(len=lc) :: clname 
    112112      INTEGER             :: irefyear, irefmonth, irefday 
    113       INTEGER           :: ji, jkmin 
     113      INTEGER           :: ji 
    114114      LOGICAL :: llrst_context              ! is context related to restart 
    115115      ! 
     
    220220           
    221221          ! Add vertical grid bounds 
    222           jkmin = MIN(2,jpk)  ! in case jpk=1 (i.e. sas2D) 
    223           zt_bnds(2,:        ) = gdept_1d(:) 
    224           zt_bnds(1,jkmin:jpk) = gdept_1d(1:jpkm1) 
    225           zt_bnds(1,1        ) = gdept_1d(1) - e3w_1d(1) 
    226           zw_bnds(1,:        ) = gdepw_1d(:) 
    227           zw_bnds(2,1:jpkm1  ) = gdepw_1d(jkmin:jpk) 
    228           zw_bnds(2,jpk:     ) = gdepw_1d(jpk) + e3t_1d(jpk) 
     222          zt_bnds(2,:      ) = gdept_1d(:) 
     223          zt_bnds(1,2:jpk  ) = gdept_1d(1:jpkm1) 
     224          zt_bnds(1,1      ) = gdept_1d(1) - e3w_1d(1) 
     225          zw_bnds(1,:      ) = gdepw_1d(:) 
     226          zw_bnds(2,1:jpkm1) = gdepw_1d(2:jpk) 
     227          zw_bnds(2,jpk:   ) = gdepw_1d(jpk) + e3t_1d(jpk) 
    229228          CALL iom_set_axis_attr(  "deptht", bounds=zw_bnds ) 
    230229          CALL iom_set_axis_attr(  "depthu", bounds=zw_bnds ) 
     
    274273      ! 
    275274      ! set time step length 
    276       dtime%second = rdt 
     275      dtime%second = rn_Dt 
    277276      CALL xios_set_timestep( dtime ) 
    278277      ! 
     
    410409   IF(cdmdl == "OPA") THEN 
    411410!from restart.F90 
    412    CALL iom_set_rstw_var_active("rdt") 
     411   CALL iom_set_rstw_var_active("rn_Dt") 
    413412   IF ( .NOT. ln_diurnal_only ) THEN 
    414413        CALL iom_set_rstw_var_active('ub'  ) 
     
    448447 
    449448        i = 0 
    450         i = i + 1; fields(i)%vname="rdt";            fields(i)%grid="grid_scalar" 
     449        i = i + 1; fields(i)%vname="rn_Dt";            fields(i)%grid="grid_scalar" 
    451450        i = i + 1; fields(i)%vname="un";             fields(i)%grid="grid_N_3D" 
    452451        i = i + 1; fields(i)%vname="ub";             fields(i)%grid="grid_N_3D" 
     
    665664 
    666665 
    667    SUBROUTINE iom_open( cdname, kiomid, ldwrt, kdom, ldstop, ldiof, kdlev ) 
     666   SUBROUTINE iom_open( cdname, kiomid, ldwrt, kdom, ldstop, ldiof, kdlev, cdcomp ) 
    668667      !!--------------------------------------------------------------------- 
    669668      !!                   ***  SUBROUTINE  iom_open  *** 
     
    678677      LOGICAL         , INTENT(in   ), OPTIONAL ::   ldiof    ! Interp On the Fly, needed for AGRIF (default = .FALSE.) 
    679678      INTEGER         , INTENT(in   ), OPTIONAL ::   kdlev    ! number of vertical levels 
     679      CHARACTER(len=3), INTENT(in   ), OPTIONAL ::   cdcomp   ! name of component calling iom_nf90_open 
    680680      ! 
    681681      CHARACTER(LEN=256)    ::   clname    ! the name of the file based on cdname [[+clcpu]+clcpu] 
     
    823823      ENDIF 
    824824      IF( istop == nstop ) THEN   ! no error within this routine 
    825          CALL iom_nf90_open( clname, kiomid, llwrt, llok, idompar, kdlev = kdlev ) 
     825         CALL iom_nf90_open( clname, kiomid, llwrt, llok, idompar, kdlev = kdlev, cdcomp = cdcomp ) 
    826826      ENDIF 
    827827      ! 
     
    23582358            idx = INDEX(clname,'@startdate@') + INDEX(clname,'@STARTDATE@') 
    23592359            DO WHILE ( idx /= 0 )  
    2360                cldate = iom_sdate( fjulday - rdt / rday ) 
     2360               cldate = iom_sdate( fjulday - rn_Dt / rday ) 
    23612361               clname = clname(1:idx-1)//TRIM(cldate)//clname(idx+11:LEN_TRIM(clname)) 
    23622362               idx = INDEX(clname,'@startdate@') + INDEX(clname,'@STARTDATE@') 
     
    23652365            idx = INDEX(clname,'@startdatefull@') + INDEX(clname,'@STARTDATEFULL@') 
    23662366            DO WHILE ( idx /= 0 )  
    2367                cldate = iom_sdate( fjulday - rdt / rday, ldfull = .TRUE. ) 
     2367               cldate = iom_sdate( fjulday - rn_Dt / rday, ldfull = .TRUE. ) 
    23682368               clname = clname(1:idx-1)//TRIM(cldate)//clname(idx+15:LEN_TRIM(clname)) 
    23692369               idx = INDEX(clname,'@startdatefull@') + INDEX(clname,'@STARTDATEFULL@') 
     
    23722372            idx = INDEX(clname,'@enddate@') + INDEX(clname,'@ENDDATE@') 
    23732373            DO WHILE ( idx /= 0 )  
    2374                cldate = iom_sdate( fjulday + rdt / rday * REAL( nitend - nit000, wp ), ld24 = .TRUE. ) 
     2374               cldate = iom_sdate( fjulday + rn_Dt / rday * REAL( nitend - nit000, wp ), ld24 = .TRUE. ) 
    23752375               clname = clname(1:idx-1)//TRIM(cldate)//clname(idx+9:LEN_TRIM(clname)) 
    23762376               idx = INDEX(clname,'@enddate@') + INDEX(clname,'@ENDDATE@') 
     
    23792379            idx = INDEX(clname,'@enddatefull@') + INDEX(clname,'@ENDDATEFULL@') 
    23802380            DO WHILE ( idx /= 0 )  
    2381                cldate = iom_sdate( fjulday + rdt / rday * REAL( nitend - nit000, wp ), ld24 = .TRUE., ldfull = .TRUE. ) 
     2381               cldate = iom_sdate( fjulday + rn_Dt / rday * REAL( nitend - nit000, wp ), ld24 = .TRUE., ldfull = .TRUE. ) 
    23822382               clname = clname(1:idx-1)//TRIM(cldate)//clname(idx+13:LEN_TRIM(clname)) 
    23832383               idx = INDEX(clname,'@enddatefull@') + INDEX(clname,'@ENDDATEFULL@') 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/IOM/iom_def.F90

    r12377 r12724  
    5050   TYPE, PUBLIC ::   file_descriptor 
    5151      CHARACTER(LEN=240)                        ::   name     !: name of the file 
     52      CHARACTER(LEN=3  )                        ::   comp     !: name of component opening the file ('OCE', 'ICE'...) 
    5253      INTEGER                                   ::   nfid     !: identifier of the file (0 if closed) 
    5354                                                              !: jpioipsl option has been removed) 
     
    6465      REAL(kind=wp), DIMENSION(jpmax_vars)      ::   scf      !: scale_factor of the variables 
    6566      REAL(kind=wp), DIMENSION(jpmax_vars)      ::   ofs      !: add_offset of the variables 
    66       INTEGER                                   ::   nlev     ! number of vertical levels 
    6767   END TYPE file_descriptor 
    6868   TYPE(file_descriptor), DIMENSION(jpmax_files), PUBLIC ::   iom_file !: array containing the info for all opened files 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/IOM/iom_nf90.F90

    r12377 r12724  
    1919   !!---------------------------------------------------------------------- 
    2020   USE dom_oce         ! ocean space and time domain 
    21    USE sbc_oce, ONLY: jpka, ght_abl ! abl vertical level number and height 
     21   USE sbc_oce, ONLY: ght_abl ! abl vertical level number and height 
    2222   USE lbclnk          ! lateal boundary condition / mpp exchanges 
    2323   USE iom_def         ! iom variables definitions 
     
    4646CONTAINS 
    4747 
    48    SUBROUTINE iom_nf90_open( cdname, kiomid, ldwrt, ldok, kdompar, kdlev ) 
     48   SUBROUTINE iom_nf90_open( cdname, kiomid, ldwrt, ldok, kdompar, kdlev, cdcomp ) 
    4949      !!--------------------------------------------------------------------- 
    5050      !!                   ***  SUBROUTINE  iom_open  *** 
     
    5858      INTEGER, DIMENSION(2,5), INTENT(in   ), OPTIONAL ::   kdompar     ! domain parameters:  
    5959      INTEGER                , INTENT(in   ), OPTIONAL ::   kdlev       ! size of the ice/abl third dimension 
     60      CHARACTER(len=3)       , INTENT(in   ), OPTIONAL ::   cdcomp      ! name of component calling iom_nf90_open 
    6061 
    6162      CHARACTER(LEN=256) ::   clinfo           ! info character 
    6263      CHARACTER(LEN=256) ::   cltmp            ! temporary character 
     64      CHARACTER(LEN=3  ) ::   clcomp           ! name of component calling iom_nf90_open 
    6365      INTEGER            ::   iln              ! lengths of character 
    6466      INTEGER            ::   istop            ! temporary storage of nstop 
     
    7072      INTEGER            ::   ihdf5            ! local variable for retrieval of value for NF90_HDF5 
    7173      LOGICAL            ::   llclobber        ! local definition of ln_clobber 
    72       INTEGER            ::   ilevels          ! vertical levels 
    7374      !--------------------------------------------------------------------- 
    7475      ! 
     
    7778      ! 
    7879      !                 !number of vertical levels 
    79       IF( PRESENT(kdlev) )   THEN   ;   ilevels = kdlev    ! use input value (useful for sea-ice and abl) 
    80       ELSE                          ;   ilevels = jpk      ! by default jpk 
     80      IF( PRESENT(cdcomp) )   THEN 
     81         IF( .NOT. PRESENT(kdlev) ) CALL ctl_stop( 'iom_nf90_open: cdcomp and kdlev must both be present' ) 
     82         clcomp = cdcomp    ! use input value 
     83      ELSE 
     84         clcomp = 'OCE'     ! by default  
    8185      ENDIF 
    8286      ! 
     
    125129            CALL iom_nf90_check(NF90_SET_FILL( if90id, NF90_NOFILL,                   idmy ), clinfo) 
    126130            ! define dimensions 
    127             CALL iom_nf90_check(NF90_DEF_DIM( if90id,            'x',   kdompar(1,1), idmy ), clinfo) 
    128             CALL iom_nf90_check(NF90_DEF_DIM( if90id,            'y',   kdompar(2,1), idmy ), clinfo) 
    129             IF( PRESENT(kdlev) ) THEN 
    130               IF( kdlev == jpka ) THEN 
    131                  CALL iom_nf90_check(NF90_DEF_DIM( if90id, 'nav_lev',          kdlev, idmy ), clinfo) 
    132                  CALL iom_nf90_check(NF90_DEF_DIM( if90id, 'time_counter', NF90_UNLIMITED, idmy ), clinfo) 
    133               ELSE 
    134                  CALL iom_nf90_check(NF90_DEF_DIM( if90id, 'nav_lev',            jpk, idmy ), clinfo) 
    135                  CALL iom_nf90_check(NF90_DEF_DIM( if90id, 'time_counter', NF90_UNLIMITED, idmy ), clinfo) 
    136                  CALL iom_nf90_check(NF90_DEF_DIM( if90id,  'numcat',          kdlev, idmy ), clinfo) 
    137               ENDIF 
    138             ELSE 
    139                CALL iom_nf90_check(NF90_DEF_DIM( if90id, 'nav_lev',            jpk, idmy ), clinfo) 
    140                CALL iom_nf90_check(NF90_DEF_DIM( if90id, 'time_counter', NF90_UNLIMITED, idmy ), clinfo) 
    141             ENDIF 
     131                               CALL iom_nf90_check(NF90_DEF_DIM( if90id,            'x',   kdompar(1,1), idmy ), clinfo) 
     132                               CALL iom_nf90_check(NF90_DEF_DIM( if90id,            'y',   kdompar(2,1), idmy ), clinfo) 
     133            SELECT CASE (clcomp) 
     134            CASE ('OCE')   ;   CALL iom_nf90_check(NF90_DEF_DIM( if90id,      'nav_lev',            jpk, idmy ), clinfo) 
     135            CASE ('ICE')   ;   CALL iom_nf90_check(NF90_DEF_DIM( if90id,       'numcat',          kdlev, idmy ), clinfo) 
     136            CASE ('ABL')   ;   CALL iom_nf90_check(NF90_DEF_DIM( if90id,      'nav_lev',          kdlev, idmy ), clinfo) 
     137            CASE ('SED')   ;   CALL iom_nf90_check(NF90_DEF_DIM( if90id,       'numsed',          kdlev, idmy ), clinfo) 
     138            CASE DEFAULT   ;   CALL ctl_stop( 'iom_nf90_open unknown component type' ) 
     139            END SELECT 
     140                               CALL iom_nf90_check(NF90_DEF_DIM( if90id, 'time_counter', NF90_UNLIMITED, idmy ), clinfo) 
    142141            ! global attributes 
    143142            CALL iom_nf90_check(NF90_PUT_ATT( if90id, NF90_GLOBAL, 'DOMAIN_number_total'   , jpnij              ), clinfo) 
     
    165164         ENDDO 
    166165         iom_file(kiomid)%name   = TRIM(cdname) 
     166         iom_file(kiomid)%comp   = clcomp 
    167167         iom_file(kiomid)%nfid   = if90id 
    168168         iom_file(kiomid)%nvars  = 0 
    169169         iom_file(kiomid)%irec   = -1   ! useless for NetCDF files, used to know if the file is in define mode  
    170          iom_file(kiomid)%nlev   = ilevels 
    171170         CALL iom_nf90_check(NF90_Inquire(if90id, unlimitedDimId = iom_file(kiomid)%iduld), clinfo) 
    172171         IF( iom_file(kiomid)%iduld .GE. 0 ) THEN 
     
    529528      INTEGER, DIMENSION(4) :: idimid               ! dimensions id 
    530529      CHARACTER(LEN=256)    :: clinfo               ! info character 
    531       CHARACTER(LEN= 12), DIMENSION(5) :: cltmp     ! temporary character 
    532530      INTEGER               :: if90id               ! nf90 file identifier 
    533       INTEGER               :: idmy                 ! dummy variable 
    534531      INTEGER               :: itype                ! variable type 
    535532      INTEGER, DIMENSION(4) :: ichunksz             ! NetCDF4 chunk sizes. Will be computed using 
     
    540537      !                                             ! when appropriate (currently chunking is applied to 4d fields only) 
    541538      INTEGER               :: idlv                 ! local variable 
    542       INTEGER               :: idim3                ! id of the third dimension 
    543539      !--------------------------------------------------------------------- 
    544540      ! 
     
    554550         ENDIF 
    555551         ! define the dimension variables if it is not already done 
    556          ! Warning: we must use the same character length in an array constructor (at least for gcc compiler) 
    557          cltmp = (/ 'nav_lon     ', 'nav_lat     ', 'nav_lev     ', 'time_counter', 'numcat      ' /)    
    558          CALL iom_nf90_check(NF90_DEF_VAR( if90id, TRIM(cltmp(1)), NF90_FLOAT , (/ 1, 2 /), iom_file(kiomid)%nvid(1) ), clinfo) 
    559          CALL iom_nf90_check(NF90_DEF_VAR( if90id, TRIM(cltmp(2)), NF90_FLOAT , (/ 1, 2 /), iom_file(kiomid)%nvid(2) ), clinfo) 
    560          CALL iom_nf90_check(NF90_DEF_VAR( if90id, TRIM(cltmp(3)), NF90_FLOAT , (/ 3    /), iom_file(kiomid)%nvid(3) ), clinfo) 
    561          CALL iom_nf90_check(NF90_DEF_VAR( if90id, TRIM(cltmp(4)), NF90_DOUBLE, (/ 4    /), iom_file(kiomid)%nvid(4) ), clinfo) 
     552         DO jd = 1, 2 
     553            CALL iom_nf90_check(NF90_INQUIRE_DIMENSION(if90id,jd,iom_file(kiomid)%cn_var(jd),iom_file(kiomid)%dimsz(jd,jd)),clinfo) 
     554            CALL iom_nf90_check(NF90_DEF_VAR( if90id, TRIM(iom_file(kiomid)%cn_var(jd)), NF90_FLOAT , (/ 1, 2 /),   & 
     555               &                              iom_file(kiomid)%nvid(jd) ), clinfo) 
     556         END DO 
     557         iom_file(kiomid)%dimsz(2,1) = iom_file(kiomid)%dimsz(2,2)   ! second dim of first  variable 
     558         iom_file(kiomid)%dimsz(1,2) = iom_file(kiomid)%dimsz(1,1)   ! first  dim of second variable 
     559         DO jd = 3, 4 
     560            CALL iom_nf90_check(NF90_INQUIRE_DIMENSION(if90id,jd,iom_file(kiomid)%cn_var(jd),iom_file(kiomid)%dimsz(1,jd)), clinfo) 
     561            CALL iom_nf90_check(NF90_DEF_VAR( if90id, TRIM(iom_file(kiomid)%cn_var(jd)), NF90_FLOAT , (/ jd   /),   & 
     562               &                              iom_file(kiomid)%nvid(jd) ), clinfo) 
     563         END DO 
    562564         ! update informations structure related the dimension variable we just added... 
    563565         iom_file(kiomid)%nvars       = 4 
    564566         iom_file(kiomid)%luld(1:4)   = (/ .FALSE., .FALSE., .FALSE., .TRUE. /) 
    565          iom_file(kiomid)%cn_var(1:4) = cltmp(1:4) 
    566567         iom_file(kiomid)%ndims(1:4)  = (/ 2, 2, 1, 1 /) 
    567          IF( NF90_INQ_DIMID( if90id, 'numcat', idmy ) == nf90_noerr ) THEN   ! add a 5th variable corresponding to the 5th dimension 
    568             CALL iom_nf90_check(NF90_DEF_VAR( if90id, TRIM(cltmp(5)), NF90_FLOAT , (/ 5 /), iom_file(kiomid)%nvid(5) ), clinfo) 
    569             iom_file(kiomid)%nvars     = 5 
    570             iom_file(kiomid)%luld(5)   = .FALSE. 
    571             iom_file(kiomid)%cn_var(5) = cltmp(5) 
    572             iom_file(kiomid)%ndims(5)  = 1 
    573          ENDIF 
    574          ! trick: defined to 0 to say that dimension variables are defined but not yet written 
    575          iom_file(kiomid)%dimsz(1, 1)  = 0    
    576568         IF(lwp) WRITE(numout,*) TRIM(clinfo)//' define dimension variables done' 
    577569      ENDIF 
     
    594586         IF(     PRESENT(pv_r0d) ) THEN   ;   idims = 0 
    595587         ELSEIF( PRESENT(pv_r1d) ) THEN 
    596             IF(( SIZE(pv_r1d,1) == jpk ).OR.( SIZE(pv_r1d,1) == jpka )) THEN   ;   idim3 = 3 
    597             ELSE                                                               ;   idim3 = 5 
    598             ENDIF 
    599                                               idims = 2   ;   idimid(1:idims) = (/idim3,4/) 
    600          ELSEIF( PRESENT(pv_r2d) ) THEN   ;   idims = 3   ;   idimid(1:idims) = (/1,2  ,4/) 
     588                                              idims = 2   ;   idimid(1:idims) = (/3,4/) 
     589         ELSEIF( PRESENT(pv_r2d) ) THEN   ;   idims = 3   ;   idimid(1:idims) = (/1,2,4/) 
    601590         ELSEIF( PRESENT(pv_r3d) ) THEN 
    602             IF(( SIZE(pv_r3d,3) == jpk ).OR.( SIZE(pv_r3d,3) == jpka )) THEN   ;   idim3 = 3 
    603             ELSE                                                               ;   idim3 = 5 
    604             ENDIF 
    605                                               idims = 4   ;   idimid(1:idims) = (/1,2,idim3,4/) 
     591                                              idims = 4   ;   idimid(1:idims) = (/1,2,3,4/) 
    606592         ENDIF 
    607593         IF( PRESENT(ktype) ) THEN   ! variable external type 
     
    678664            ! ============= 
    679665            ! trick: is defined to 0 => dimension variable are defined but not yet written 
    680             IF( iom_file(kiomid)%dimsz(1, 1) == 0 ) THEN 
    681                CALL iom_nf90_check( NF90_INQ_VARID( if90id, 'nav_lon'     , idmy )         , clinfo ) 
    682                CALL iom_nf90_check( NF90_PUT_VAR  ( if90id, idmy, glamt(ix1:ix2, iy1:iy2) ), clinfo ) 
    683                CALL iom_nf90_check( NF90_INQ_VARID( if90id, 'nav_lat'     , idmy )         , clinfo ) 
    684                CALL iom_nf90_check( NF90_PUT_VAR  ( if90id, idmy, gphit(ix1:ix2, iy1:iy2) ), clinfo ) 
    685                CALL iom_nf90_check( NF90_INQ_VARID( if90id, 'nav_lev'     , idmy ), clinfo ) 
    686                IF (iom_file(kiomid)%nlev == jpka) THEN   ;   CALL iom_nf90_check( NF90_PUT_VAR  ( if90id, idmy,  ght_abl), clinfo ) 
    687                ELSE                                      ;   CALL iom_nf90_check( NF90_PUT_VAR  ( if90id, idmy, gdept_1d), clinfo ) 
    688                ENDIF 
    689                IF( NF90_INQ_VARID( if90id, 'numcat', idmy ) == nf90_noerr ) THEN 
    690                   CALL iom_nf90_check( NF90_PUT_VAR  ( if90id, idmy, (/ (idlv, idlv = 1,iom_file(kiomid)%nlev) /)), clinfo ) 
    691                ENDIF 
    692                ! +++ WRONG VALUE: to be improved but not really useful... 
    693                CALL iom_nf90_check( NF90_INQ_VARID( if90id, 'time_counter', idmy ), clinfo ) 
    694                CALL iom_nf90_check( NF90_PUT_VAR( if90id, idmy, kt                      ), clinfo )    
    695                ! update the values of the variables dimensions size 
    696                CALL iom_nf90_check( NF90_INQUIRE_DIMENSION( if90id, 1, len = iom_file(kiomid)%dimsz(1,1) ), clinfo ) 
    697                CALL iom_nf90_check( NF90_INQUIRE_DIMENSION( if90id, 2, len = iom_file(kiomid)%dimsz(2,1) ), clinfo ) 
    698                iom_file(kiomid)%dimsz(1:2, 2) = iom_file(kiomid)%dimsz(1:2, 1) 
    699                CALL iom_nf90_check( NF90_INQUIRE_DIMENSION( if90id, 3, len = iom_file(kiomid)%dimsz(1,3) ), clinfo ) 
    700                iom_file(kiomid)%dimsz(1  , 4) = 1   ! unlimited dimension 
     666            IF( iom_file(kiomid)%dimsz(1, 4) == 0 ) THEN   ! time_counter = 0 
     667               CALL iom_nf90_check(    NF90_PUT_VAR( if90id, 1,                            glamt(ix1:ix2, iy1:iy2) ), clinfo ) 
     668               CALL iom_nf90_check(    NF90_PUT_VAR( if90id, 2,                            gphit(ix1:ix2, iy1:iy2) ), clinfo ) 
     669               SELECT CASE (iom_file(kiomid)%comp) 
     670               CASE ('OCE')   
     671                  CALL iom_nf90_check( NF90_PUT_VAR( if90id, 3,                                           gdept_1d ), clinfo ) 
     672               CASE ('ABL') 
     673                  CALL iom_nf90_check( NF90_PUT_VAR( if90id, 3,                                            ght_abl ), clinfo ) 
     674               CASE DEFAULT 
     675                  CALL iom_nf90_check( NF90_PUT_VAR( if90id, 3, (/ (idlv, idlv = 1,iom_file(kiomid)%dimsz(1,3)) /) ), clinfo ) 
     676               END SELECT 
     677               ! "wrong" value: to be improved but not really useful... 
     678               CALL iom_nf90_check(   NF90_PUT_VAR( if90id, 4,                                                  kt ), clinfo )    
     679               ! update the size of the variable corresponding to the unlimited dimension 
     680               iom_file(kiomid)%dimsz(1, 4) = 1   ! so we don't enter this IF case any more... 
    701681               IF(lwp) WRITE(numout,*) TRIM(clinfo)//' write dimension variables done' 
    702682            ENDIF 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/IOM/restart.F90

    r12680 r12724  
    144144      !!---------------------------------------------------------------------- 
    145145                     IF(lwxios) CALL iom_swap(      cwxios_context          ) 
    146                      CALL iom_rstput( kt, nitrst, numrow, 'rdt'    , rdt       , ldxios = lwxios)   ! dynamics time step 
     146                     CALL iom_rstput( kt, nitrst, numrow, 'rdt'    , rn_Dt       , ldxios = lwxios)   ! dynamics time step 
    147147                     CALL iom_delay_rst( 'WRITE', 'OCE', numrow )   ! save only ocean delayed global communication variables 
    148148 
     
    247247      IF( iom_varid( numror, 'rdt', ldstop = .FALSE. ) > 0 )   THEN 
    248248         CALL iom_get( numror, 'rdt', zrdt, ldxios = lrxios ) 
    249          IF( zrdt /= rdt )   neuler = 0 
     249         IF( zrdt /= rn_Dt ) THEN 
     250            IF(lwp) WRITE( numout,*) 
     251            IF(lwp) WRITE( numout,*) 'rst_read:  rdt not equal to the read one' 
     252            IF(lwp) WRITE( numout,*) 
     253            IF(lwp) WRITE( numout,*) '      ==>>>   forced euler first time-step' 
     254            l_1st_euler =  .TRUE. 
     255         ENDIF 
    250256      ENDIF 
    251257 
     
    256262      IF ( ln_diurnal_only ) THEN  
    257263         IF(lwp) WRITE( numout, * ) & 
    258          &   "rst_read:- ln_diurnal_only set, setting rhop=rau0"  
    259          rhop = rau0 
     264         &   "rst_read:- ln_diurnal_only set, setting rhop=rho0"  
     265         rhop = rho0 
    260266         CALL iom_get( numror, jpdom_autoglo, 'tn'     , w3d, ldxios = lrxios )  
    261267         ts(:,:,1,jp_tem,Kmm) = w3d(:,:,1) 
     
    270276         CALL iom_get( numror, jpdom_autoglo, 'sshb'   ,ssh(:,:         ,Kbb), ldxios = lrxios ) 
    271277      ELSE 
    272          neuler = 0 
     278         l_1st_euler =  .TRUE.      ! before field not found, forced euler 1st time-step 
    273279      ENDIF 
    274280      ! 
     
    284290      ENDIF 
    285291      ! 
    286       IF( neuler == 0 ) THEN                                  ! Euler restart (neuler=0) 
     292      IF( l_1st_euler ) THEN                                  ! Euler restart  
    287293         ts (:,:,:,:,Kbb) = ts (:,:,:,:,Kmm)                  ! all before fields set to now values 
    288294         uu (:,:,:  ,Kbb) = uu (:,:,:  ,Kmm) 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/ISF/isfcav.F90

    r12343 r12724  
    2424   USE oce      , ONLY: ts                              ! ocean tracers 
    2525   USE par_oce  , ONLY: jpi,jpj                         ! ocean space and time domain 
    26    USE phycst   , ONLY: grav,rau0,rau0_rcp,r1_rau0_rcp  ! physical constants 
     26   USE phycst   , ONLY: grav,rho0,rho0_rcp,r1_rho0_rcp  ! physical constants 
    2727   USE eosbn2   , ONLY: ln_teos10                       ! use ln_teos10 or not 
    2828   ! 
     
    8585      ! 
    8686      ! initialisation 
    87       IF (TRIM(cn_gammablk) == 'vel_stab' ) zqoce_b (:,:) = ptsc(:,:,jp_tem) * rau0_rcp ! last time step total heat fluxes (to speed up convergence) 
     87      IF (TRIM(cn_gammablk) == 'vel_stab' ) zqoce_b (:,:) = ptsc(:,:,jp_tem) * rho0_rcp ! last time step total heat fluxes (to speed up convergence) 
    8888      ! 
    8989      ! compute ice shelf melting 
     
    142142      ! 
    143143      ! set temperature content 
    144       ptsc(:,:,jp_tem) = - zqh(:,:) * r1_rau0_rcp 
     144      ptsc(:,:,jp_tem) = - zqh(:,:) * r1_rho0_rcp 
    145145      ! 
    146146      ! write restart variables (qoceisf, qhcisf, fwfisf for now and before) 
     
    215215            risf_lamb1 =-0.0564_wp 
    216216            risf_lamb2 = 0.0773_wp 
    217             risf_lamb3 =-7.8633e-8 * grav * rau0 
     217            risf_lamb3 =-7.8633e-8 * grav * rho0 
    218218         ELSE                  ! linearisation from table 4 (Asay-Davis et al., 2015) 
    219219            risf_lamb1 =-0.0573_wp 
    220220            risf_lamb2 = 0.0832_wp 
    221             risf_lamb3 =-7.5300e-8 * grav * rau0 
     221            risf_lamb3 =-7.5300e-8 * grav * rho0 
    222222         ENDIF 
    223223 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/ISF/isfcavmlt.F90

    r12340 r12724  
    1717 
    1818   USE dom_oce                            ! ocean space and time domain 
    19    USE phycst , ONLY: rcp, rau0, rau0_rcp ! physical constants 
     19   USE phycst , ONLY: rcp, rho0, rho0_rcp ! physical constants 
    2020   USE eosbn2 , ONLY: eos_fzp             ! equation of state 
    2121 
     
    161161      ! 
    162162      ! compute ocean-ice heat flux and then derive fwf assuming that ocean heat flux equal latent heat 
    163       pqfwf(:,:) = - pgt(:,:) * rau0_rcp * zthd(:,:) / rLfusisf    ! fresh water flux  ( > 0 out ) 
     163      pqfwf(:,:) = - pgt(:,:) * rho0_rcp * zthd(:,:) / rLfusisf    ! fresh water flux  ( > 0 out ) 
    164164      pqoce(:,:) = - pqfwf(:,:) * rLfusisf                         ! ocea-ice flux     ( > 0 out ) 
    165165      pqhc (:,:) =   pqfwf(:,:) * ztfrz(:,:) * rcp                 ! heat content flux ( > 0 out ) 
     
    213213         ! 
    214214         ! compute coeficient to solve the 2nd order equation 
    215          zeps1 = rau0_rcp * pgt(ji,jj) 
    216          zeps2 = rLfusisf * rau0 * pgs(ji,jj) 
     215         zeps1 = rho0_rcp * pgt(ji,jj) 
     216         zeps2 = rLfusisf * rho0 * pgs(ji,jj) 
    217217         zeps3 = rhoisf * rcpisf * rkappa / MAX(risfdep(ji,jj),zeps) 
    218218         zeps4 = risf_lamb2 + risf_lamb3 * risfdep(ji,jj) 
     
    238238         ! 
    239239         ! compute the upward water and heat flux (eq. 24 and eq. 26) 
    240          pqfwf(ji,jj) = rau0     * pgs(ji,jj) * ( zsfrz - pstbl(ji,jj) ) / MAX(zsfrz,zeps) ! fresh water flux    (> 0 out) 
    241          pqoce(ji,jj) = rau0_rcp * pgt(ji,jj) * zthd (ji,jj)                               ! ocean-ice heat flux (> 0 out) 
     240         pqfwf(ji,jj) = rho0     * pgs(ji,jj) * ( zsfrz - pstbl(ji,jj) ) / MAX(zsfrz,zeps) ! fresh water flux    (> 0 out) 
     241         pqoce(ji,jj) = rho0_rcp * pgt(ji,jj) * zthd (ji,jj)                               ! ocean-ice heat flux (> 0 out) 
    242242         pqhc (ji,jj) = rcp      * pqfwf(ji,jj) * ztfrz(ji,jj)                             ! heat content   flux (> 0 out) 
    243243         ! 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/ISF/isfcpl.F90

    r12680 r12724  
    7373      ! 
    7474      ! start on an euler time step 
    75       neuler = 0 
     75      l_1st_euler = .TRUE. 
    7676      !  
    7777      ! allocation and initialisation to 0 
     
    525525      ! compute run length 
    526526      nstp_iscpl  = nitend - nit000 + 1 
    527       rdt_iscpl   = nstp_iscpl * rn_rdt 
     527      rdt_iscpl   = nstp_iscpl * rn_Dt 
    528528      z1_rdtiscpl = 1._wp / rdt_iscpl  
    529529 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/ISF/isfdynatf.F90

    r12616 r12724  
    1313   USE isf_oce 
    1414 
    15    USE phycst , ONLY: r1_rau0         ! physical constant 
     15   USE phycst , ONLY: r1_rho0         ! physical constant 
    1616   USE dom_oce                        ! time and space domain 
    1717 
     
    4040      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pe3t_f   ! time filtered scale factor to be corrected 
    4141      ! 
    42       REAL(wp)                        , INTENT(in   ) :: pcoef    ! atfp * rdt * r1_rau0 
     42      REAL(wp)                        , INTENT(in   ) :: pcoef    ! rn_atfp * rn_Dt * r1_rho0 
    4343      !!-------------------------------------------------------------------- 
    4444      INTEGER :: jk  ! loop index 
     
    7171      REAL(wp), DIMENSION(jpi,jpj)    , INTENT(in   ) :: pfrac, phtbl    ! fraction of bottom cell included in tbl, tbl thickness 
    7272      REAL(wp), DIMENSION(jpi,jpj)    , INTENT(in   ) :: pfwf , pfwf_b   ! now/before fwf 
    73       REAL(wp),                         INTENT(in   ) :: pcoef           ! atfp * rdt * r1_rau0 
     73      REAL(wp),                         INTENT(in   ) :: pcoef           ! rn_atfp * rn_Dt * r1_rho0 
    7474      !!---------------------------------------------------------------------- 
    7575      INTEGER :: ji,jj,jk 
     
    7878      ! 
    7979      ! compute fwf conservation correction 
    80       zfwfinc(:,:) = pcoef * ( pfwf_b(:,:) - pfwf(:,:) ) / ( ht(:,:) + 1._wp - ssmask(:,:) ) * r1_rau0 
     80      zfwfinc(:,:) = pcoef * ( pfwf_b(:,:) - pfwf(:,:) ) / ( ht(:,:) + 1._wp - ssmask(:,:) ) * r1_rho0 
    8181      ! 
    8282      ! add the increment 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/ISF/isfhdiv.F90

    r12616 r12724  
    1616 
    1717   USE dom_oce                ! time and space domain 
    18    USE phycst , ONLY: r1_rau0 ! physical constant 
     18   USE phycst , ONLY: r1_rho0 ! physical constant 
    1919   USE in_out_manager         ! 
    2020 
     
    9797      ! 
    9898      ! compute integrated divergence correction 
    99       zhdiv(:,:) = 0.5_wp * ( pfwf(:,:) + pfwf_b(:,:) ) * r1_rau0 / phtbl(:,:) 
     99      zhdiv(:,:) = 0.5_wp * ( pfwf(:,:) + pfwf_b(:,:) ) * r1_rho0 / phtbl(:,:) 
    100100      ! 
    101101      ! update divergence at each level affected by ice shelf top boundary layer 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/ISF/isfpar.F90

    r12077 r12724  
    2424   USE dom_oce  , ONLY: bathy          ! ocean space and time domain 
    2525   USE par_oce  , ONLY: jpi,jpj        ! ocean space and time domain 
    26    USE phycst   , ONLY: r1_rau0_rcp    ! physical constants 
     26   USE phycst   , ONLY: r1_rho0_rcp    ! physical constants 
    2727   ! 
    2828   USE in_out_manager ! I/O manager 
     
    8888      ! 
    8989      ! set temperature content 
    90       ptsc(:,:,jp_tem) = zqh(:,:) * r1_rau0_rcp 
     90      ptsc(:,:,jp_tem) = zqh(:,:) * r1_rho0_rcp 
    9191      ! 
    9292      ! write restart variables (qoceisf, qhcisf, fwfisf for now and before) 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/ISF/isfparmlt.F90

    r12077 r12724  
    1313   USE dom_oce                  ! ocean space and time domain 
    1414   USE oce    , ONLY: ts        ! ocean dynamics and tracers 
    15    USE phycst , ONLY: rcp, rau0 ! physical constants 
     15   USE phycst , ONLY: rcp, rho0 ! physical constants 
    1616   USE eosbn2 , ONLY: eos_fzp   ! equation of state 
    1717 
     
    148148      ! 
    149149      ! 2. ------------Net heat flux and fresh water flux due to the ice shelf 
    150       pqoce(:,:) =   rau0 * rcp * rn_gammat0 * risfLeff(:,:) * e1t(:,:) * ( ztavg(:,:) - ztfrz(:,:) ) * r1_e1e2t(:,:) 
     150      pqoce(:,:) =   rho0 * rcp * rn_gammat0 * risfLeff(:,:) * e1t(:,:) * ( ztavg(:,:) - ztfrz(:,:) ) * r1_e1e2t(:,:) 
    151151      pqfwf(:,:) = - pqoce(:,:) / rLfusisf             ! derived from the latent heat flux 
    152152      pqhc (:,:) =   pqfwf(:,:) * ztfrz(:,:) * rcp     ! heat content flux  
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/LBC/lib_mpp.F90

    r12377 r12724  
    402402# if defined key_mpi2 
    403403      IF( ln_timing ) CALL tic_tac( .TRUE., ld_global = .TRUE.) 
    404       CALL  mpi_allreduce( y_in(:), todelay(idvar)%y1d(:), isz, MPI_DOUBLE_COMPLEX, mpi_sumdd, ilocalcomm, ndelayid(idvar), ierr ) 
     404      CALL  mpi_allreduce( y_in(:), todelay(idvar)%y1d(:), isz, MPI_DOUBLE_COMPLEX, mpi_sumdd, ilocalcomm, ierr ) 
     405      ndelayid(idvar) = 1 
    405406      IF( ln_timing ) CALL tic_tac(.FALSE., ld_global = .TRUE.) 
    406407# else 
     
    469470# if defined key_mpi2 
    470471      IF( ln_timing ) CALL tic_tac( .TRUE., ld_global = .TRUE.) 
    471       CALL  mpi_allreduce( p_in(:), todelay(idvar)%z1d(:), isz, MPI_DOUBLE_PRECISION, mpi_max, ilocalcomm, ndelayid(idvar), ierr ) 
     472      CALL  mpi_allreduce( p_in(:), todelay(idvar)%z1d(:), isz, MPI_DOUBLE_PRECISION, mpi_max, ilocalcomm, ierr ) 
     473      ndelayid(idvar) = 1 
    472474      IF( ln_timing ) CALL tic_tac(.FALSE., ld_global = .TRUE.) 
    473475# else 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/LDF/ldfdyn.F90

    r12377 r12724  
    407407            zcmsmag   = (rn_csmc/rpi)**2                                            ! (C_smag/pi)^2 
    408408            zstabf_lo = rn_minfac * rn_minfac / ( 2._wp * 12._wp * 12._wp * zcmsmag ) ! lower limit stability factor scaling 
    409             zstabf_up = rn_maxfac / ( 4._wp * zcmsmag * 2._wp * rdt )               ! upper limit stability factor scaling 
     409            zstabf_up = rn_maxfac / ( 4._wp * zcmsmag * 2._wp * rn_Dt )               ! upper limit stability factor scaling 
    410410            IF( ln_dynldf_blp ) zstabf_lo = ( 16._wp / 9._wp ) * zstabf_lo          ! provide |U|L^3/12 lower limit instead  
    411411            !                                                                       ! of |U|L^3/16 in blp case 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/LDF/ldftra.F90

    r12622 r12724  
    821821      ! 
    822822      IF( iom_use('weiv_masstr') ) THEN   ! vertical mass transport & its square value 
    823          zw2d(:,:) = rau0 * e1e2t(:,:) 
     823         zw2d(:,:) = rho0 * e1e2t(:,:) 
    824824         DO jk = 1, jpk 
    825825            zw3d(:,:,jk) = zw3d(:,:,jk) * zw2d(:,:) 
     
    831831         zw3d(:,:,:) = 0.e0 
    832832         DO jk = 1, jpkm1 
    833             zw3d(:,:,jk) = rau0 * ( psi_uw(:,:,jk+1) - psi_uw(:,:,jk) )  
     833            zw3d(:,:,jk) = rho0 * ( psi_uw(:,:,jk+1) - psi_uw(:,:,jk) )  
    834834         END DO 
    835835         CALL iom_put( "ueiv_masstr", zw3d )                  ! mass transport in i-direction 
    836836      ENDIF 
    837837      ! 
    838       zztmp = 0.5_wp * rau0 * rcp  
     838      zztmp = 0.5_wp * rho0 * rcp  
    839839      IF( iom_use('ueiv_heattr') .OR. iom_use('ueiv_heattr3d') ) THEN 
    840840        zw2d(:,:)   = 0._wp  
     
    854854         zw3d(:,:,:) = 0.e0 
    855855         DO jk = 1, jpkm1 
    856             zw3d(:,:,jk) = rau0 * ( psi_vw(:,:,jk+1) - psi_vw(:,:,jk) )  
     856            zw3d(:,:,jk) = rho0 * ( psi_vw(:,:,jk+1) - psi_vw(:,:,jk) )  
    857857         END DO 
    858858         CALL iom_put( "veiv_masstr", zw3d )                  ! mass transport in i-direction 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/OBS/diaobs.F90

    r12377 r12724  
    539539      ENDIF 
    540540 
    541       idaystp = NINT( rday / rdt ) 
     541      idaystp = NINT( rday / rn_Dt ) 
    542542 
    543543      !----------------------------------------------------------------------- 
     
    774774         & rday 
    775775      USE dom_oce, ONLY : &           ! Ocean space and time domain variables 
    776          & rdt 
     776         & rn_Dt 
    777777 
    778778      IMPLICIT NONE 
     
    805805      !! Compute number of days + number of hours + min since initial time 
    806806      !!---------------------------------------------------------------------- 
    807       zdayfrc = kstp * rdt / rday 
     807      zdayfrc = kstp * rn_Dt / rday 
    808808      zdayfrc = zdayfrc - aint(zdayfrc) 
    809809      imin = imin + int( zdayfrc * 24 * 60 )  
     
    816816        iday=iday+1 
    817817      END DO  
    818       iday = iday + kstp * rdt / rday  
     818      iday = iday + kstp * rn_Dt / rday  
    819819 
    820820      !----------------------------------------------------------------------- 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/OBS/obs_prep.F90

    r12377 r12724  
    613613      !! * Modules used 
    614614      USE dom_oce, ONLY : &  ! Geographical information 
    615          & rdt 
     615         & rn_Dt 
    616616      USE phycst, ONLY : &   ! Physical constants 
    617617         & rday,  &              
     
    662662 
    663663      ! Intialize the number of time steps per day 
    664       idaystp = NINT( rday / rdt ) 
     664      idaystp = NINT( rday / rn_Dt ) 
    665665 
    666666      !--------------------------------------------------------------------- 
     
    732732 
    733733         ! Add in the number of time steps to the observation minute 
    734          zminstp = rmmss / rdt 
     734         zminstp = rmmss / rn_Dt 
    735735         zhoustp = rhhmm * zminstp 
    736736 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/SBC/cpl_oasis3.F90

    r12377 r12724  
    365365                     WRITE(numout,*) '     - Minimum value is ', MINVAL(pdata(nldi:nlei,nldj:nlej,jc)) 
    366366                     WRITE(numout,*) '     - Maximum value is ', MAXVAL(pdata(nldi:nlei,nldj:nlej,jc)) 
    367                      WRITE(numout,*) '     -     Sum value is ', SUM(pdata(nldi:nlei,nldj:nlej,jc)) 
     367                     WRITE(numout,*) '     -     Sum value is ',    SUM(pdata(nldi:nlei,nldj:nlej,jc)) 
    368368                     WRITE(numout,*) '****************' 
    369369                  ENDIF 
     
    444444                     WRITE(numout,*) 'oasis_get:   kstep', kstep 
    445445                     WRITE(numout,*) 'oasis_get:   info ', kinfo 
    446                      WRITE(numout,*) '     - Minimum value is ', MINVAL(pdata(:,:,jc)) 
    447                      WRITE(numout,*) '     - Maximum value is ', MAXVAL(pdata(:,:,jc)) 
    448                      WRITE(numout,*) '     -     Sum value is ', SUM(pdata(:,:,jc)) 
     446                     WRITE(numout,*) '     - Minimum value is ', MINVAL(pdata(nldi:nlei,nldj:nlej,jc)) 
     447                     WRITE(numout,*) '     - Maximum value is ', MAXVAL(pdata(nldi:nlei,nldj:nlej,jc)) 
     448                     WRITE(numout,*) '     -     Sum value is ',    SUM(pdata(nldi:nlei,nldj:nlej,jc)) 
    449449                     WRITE(numout,*) '****************' 
    450450                  ENDIF 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/SBC/fldread.F90

    r12622 r12724  
    173173      ! Note that all varibles starting by nsec_* are shifted time by +1/2 time step to be centrered 
    174174      IF( PRESENT(kit) ) THEN   ! ignore kn_fsbc in this case 
    175          isecsbc = nsec_year + nsec1jan000 + NINT( (     REAL(      kit,wp) + zt_offset ) * rdt / REAL(nn_baro,wp) ) 
     175         isecsbc = nsec_year + nsec1jan000 + NINT( (     REAL(      kit,wp) + zt_offset ) * rn_Dt / REAL(nn_e,wp) ) 
    176176      ELSE                      ! middle of sbc time step 
    177177         ! note: we use kn_fsbc-1 because nsec_year is defined at the middle of the current time step 
    178          isecsbc = nsec_year + nsec1jan000 + NINT( ( 0.5*REAL(kn_fsbc-1,wp) + zt_offset ) * rdt ) 
     178         isecsbc = nsec_year + nsec1jan000 + NINT( ( 0.5*REAL(kn_fsbc-1,wp) + zt_offset ) * rn_Dt ) 
    179179      ENDIF 
    180180      imf = SIZE( sd ) 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/SBC/sbc_ice.F90

    r10425 r12724  
    7070   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   wndm_ice       !: wind speed module at T-point                 [m/s] 
    7171   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   sstfrz         !: wind speed module at T-point                 [m/s] 
    72    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   tsfc_ice       !: sea ice surface skin temperature (on categories) 
    7372#endif 
    7473 
     
    132131         &      qemp_ice(jpi,jpj)     , qevap_ice(jpi,jpj,jpl) , qemp_oce   (jpi,jpj)     ,   & 
    133132         &      qns_oce (jpi,jpj)     , qsr_oce  (jpi,jpj)     , emp_oce    (jpi,jpj)     ,   & 
    134          &      emp_ice (jpi,jpj)     , tsfc_ice (jpi,jpj,jpl) , sstfrz     (jpi,jpj)     , STAT= ierr(2) ) 
     133         &      emp_ice (jpi,jpj)     , sstfrz   (jpi,jpj)     , STAT= ierr(2) ) 
    135134#endif 
    136135 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/SBC/sbcapr.F90

    r12377 r12724  
    3636    
    3737   REAL(wp) ::   tarea                ! whole domain mean masked ocean surface 
    38    REAL(wp) ::   r1_grau              ! = 1.e0 / (grav * rau0) 
     38   REAL(wp) ::   r1_grau              ! = 1.e0 / (grav * rho0) 
    3939    
    4040   TYPE(FLD), ALLOCATABLE, DIMENSION(:) ::   sf_apr   ! structure of input fields (file informations, fields read) 
     
    9898      ENDIF 
    9999      ! 
    100       r1_grau = 1.e0 / (grav * rau0)               !* constant for optimization 
     100      r1_grau = 1.e0 / (grav * rho0)               !* constant for optimization 
    101101      ! 
    102102      !                                            !* control check 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/SBC/sbcblk.F90

    r12377 r12724  
    259259      IF( ierror > 0 )   CALL ctl_stop( 'STOP', 'sbc_blk_init: unable to allocate sf structure' ) 
    260260      ! 
     261      !                                      !- fill the bulk structure with namelist informations 
     262      CALL fld_fill( sf, slf_i, cn_dir, 'sbc_blk_init', 'surface boundary condition -- bulk formulae', 'namsbc_blk' ) 
     263      ! 
    261264      DO jfpr= 1, jpfld 
    262265         ! 
     
    269272               &      jfpr == jp_hpgi .OR. jfpr == jp_hpgj .OR. jfpr == jp_tair     )  ) THEN   ! ABL: some fields are 3D input 
    270273               ALLOCATE( sf(jfpr)%fnow(jpi,jpj,jpka) ) 
    271                IF( slf_i(jfpr)%ln_tint )   ALLOCATE( sf(jfpr)%fdta(jpi,jpj,jpka,2) ) 
     274               IF( sf(jfpr)%ln_tint )   ALLOCATE( sf(jfpr)%fdta(jpi,jpj,jpka,2) ) 
    272275            ELSE                                                                                ! others or Bulk fields are 2D fiels 
    273276               ALLOCATE( sf(jfpr)%fnow(jpi,jpj,1) ) 
    274                IF( slf_i(jfpr)%ln_tint )   ALLOCATE( sf(jfpr)%fdta(jpi,jpj,1,2) ) 
     277               IF( sf(jfpr)%ln_tint )   ALLOCATE( sf(jfpr)%fdta(jpi,jpj,1,2) ) 
    275278            ENDIF 
    276279            ! 
    277             IF( slf_i(jfpr)%freqh > 0. .AND. MOD( NINT(3600. * slf_i(jfpr)%freqh), nn_fsbc * NINT(rdt) ) /= 0 )   & 
    278                &  CALL ctl_warn( 'sbc_blk_init: sbcmod timestep rdt*nn_fsbc is NOT a submultiple of atmospheric forcing frequency.',   & 
    279                &                 '               This is not ideal. You should consider changing either rdt or nn_fsbc value...' ) 
     280            IF( sf(jfpr)%freqh > 0. .AND. MOD( NINT(3600. * sf(jfpr)%freqh), nn_fsbc * NINT(rn_Dt) ) /= 0 )   & 
     281               &  CALL ctl_warn( 'sbc_blk_init: sbcmod timestep rn_Dt*nn_fsbc is NOT a submultiple of atmospheric forcing frequency.',   & 
     282               &                 '               This is not ideal. You should consider changing either rn_Dt or nn_fsbc value...' ) 
    280283         ENDIF 
    281284      END DO 
    282       !                                      !- fill the bulk structure with namelist informations 
    283       CALL fld_fill( sf, slf_i, cn_dir, 'sbc_blk_init', 'surface boundary condition -- bulk formulae', 'namsbc_blk' ) 
    284285      ! 
    285286      IF( ln_wave ) THEN 
     
    638639      END IF 
    639640 
    640       !!      CALL iom_put( "Cd_oce", zcd_oce)  ! output value of pure ocean-atm. transfer coef. 
    641       !!      CALL iom_put( "Ch_oce", zch_oce)  ! output value of pure ocean-atm. transfer coef. 
    642  
    643       IF( ABS(rn_zu - rn_zqt) < 0.1_wp ) THEN 
    644          !! If zu == zt, then ensuring once for all that: 
    645          t_zu(:,:) = ztpot(:,:) 
    646          q_zu(:,:) = zqair(:,:) 
    647       ENDIF 
    648  
    649  
    650641      !  Turbulent fluxes over ocean  => BULK_FORMULA @ sbcblk_phy.F90 
    651642      ! ------------------------------------------------------------- 
     
    662653      ELSE                      !==  BLK formulation  ==!   turbulent fluxes computation 
    663654         CALL BULK_FORMULA( rn_zu, ptsk(:,:), pssq(:,:), t_zu(:,:), q_zu(:,:), & 
    664             &               zcd_oce(:,:), zch_oce(:,:), zce_oce(:,:),         & 
    665             &               wndm(:,:), zU_zu(:,:), pslp(:,:),                 & 
    666             &               taum(:,:), psen(:,:), zqla(:,:),                  & 
    667             &               pEvap=pevp(:,:), prhoa=rhoa(:,:) ) 
     655            &               zcd_oce(:,:), zch_oce(:,:), zce_oce(:,:),          & 
     656            &               wndm(:,:), zU_zu(:,:), pslp(:,:),                  & 
     657            &               taum(:,:), psen(:,:), zqla(:,:),                   & 
     658            &               pEvap=pevp(:,:), prhoa=rhoa(:,:), pfact_evap=rn_efac ) 
    668659 
    669660         zqla(:,:) = zqla(:,:) * tmask(:,:,1) 
     
    10451036      evap_ice (:,:,:) = rn_efac * qla_ice (:,:,:) * z1_rLsub    ! sublimation 
    10461037      devap_ice(:,:,:) = rn_efac * dqla_ice(:,:,:) * z1_rLsub    ! d(sublimation)/dT 
    1047       zevap    (:,:)   = rn_efac * ( emp(:,:) + tprecip(:,:) )   ! evaporation over ocean 
     1038      zevap    (:,:)   = emp(:,:) + tprecip(:,:)   ! evaporation over ocean  !LB: removed rn_efac here, correct??? 
    10481039 
    10491040      ! --- evaporation minus precipitation --- ! 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/SBC/sbcblk_algo_coare3p0.F90

    r12377 r12724  
    194194      IF( kt == nit000 ) CALL SBCBLK_ALGO_COARE3P0_INIT(l_use_cs, l_use_wl) 
    195195 
    196       l_zt_equal_zu = .FALSE. 
    197       IF( ABS(zu - zt) < 0.01_wp )   l_zt_equal_zu = .TRUE.    ! testing "zu == zt" is risky with double precision 
     196      l_zt_equal_zu = ( ABS(zu - zt) < 0.01_wp ) ! testing "zu == zt" is risky with double precision 
    198197      IF( .NOT. l_zt_equal_zu )  ALLOCATE( zeta_t(jpi,jpj) ) 
    199198 
     
    396395      ! 
    397396      DO_2D_11_11 
    398          ! 
    399          zw = pwnd(ji,jj)   ! wind speed 
    400          ! 
    401          ! Charnock's constant, increases with the wind : 
    402          zgt10 = 0.5 + SIGN(0.5_wp,(zw - 10))  ! If zw<10. --> 0, else --> 1 
    403          zgt18 = 0.5 + SIGN(0.5_wp,(zw - 18.)) ! If zw<18. --> 0, else --> 1 
    404          ! 
    405          alfa_charn_3p0(ji,jj) =  (1. - zgt10)*0.011    &    ! wind is lower than 10 m/s 
    406             &     + zgt10*((1. - zgt18)*(0.011 + (0.018 - 0.011) & 
    407             &      *(zw - 10.)/(18. - 10.)) + zgt18*( 0.018 ) )    ! Hare et al. (1999) 
    408          ! 
     397      ! 
     398      zw = pwnd(ji,jj)   ! wind speed 
     399      ! 
     400      ! Charnock's constant, increases with the wind : 
     401      zgt10 = 0.5 + SIGN(0.5_wp,(zw - 10))  ! If zw<10. --> 0, else --> 1 
     402      zgt18 = 0.5 + SIGN(0.5_wp,(zw - 18.)) ! If zw<18. --> 0, else --> 1 
     403      ! 
     404      alfa_charn_3p0(ji,jj) =  (1. - zgt10)*0.011    &    ! wind is lower than 10 m/s 
     405         &     + zgt10*((1. - zgt18)*(0.011 + (0.018 - 0.011) & 
     406         &      *(zw - 10.)/(18. - 10.)) + zgt18*( 0.018 ) )    ! Hare et al. (1999) 
     407      ! 
    409408      END_2D 
    410409      ! 
     
    432431      ! 
    433432      DO_2D_11_11 
    434          ! 
    435          zta = pzeta(ji,jj) 
    436          ! 
    437          zphi_m = ABS(1. - 15.*zta)**.25    !!Kansas unstable 
    438          ! 
    439          zpsi_k = 2.*LOG((1. + zphi_m)/2.) + LOG((1. + zphi_m*zphi_m)/2.)   & 
    440             & - 2.*ATAN(zphi_m) + 0.5*rpi 
    441          ! 
    442          zphi_c = ABS(1. - 10.15*zta)**.3333                   !!Convective 
    443          ! 
    444          zpsi_c = 1.5*LOG((1. + zphi_c + zphi_c*zphi_c)/3.) & 
    445             &     - 1.7320508*ATAN((1. + 2.*zphi_c)/1.7320508) + 1.813799447 
    446          ! 
    447          zf = zta*zta 
    448          zf = zf/(1. + zf) 
    449          zc = MIN(50._wp, 0.35_wp*zta) 
    450          zstab = 0.5 + SIGN(0.5_wp, zta) 
    451          ! 
    452          psi_m_coare(ji,jj) = (1. - zstab) * ( (1. - zf)*zpsi_k + zf*zpsi_c ) & ! (zta < 0) 
    453             &                -   zstab     * ( 1. + 1.*zta     &                ! (zta > 0) 
    454             &                         + 0.6667*(zta - 14.28)/EXP(zc) + 8.525 )   !     " 
    455          ! 
     433      ! 
     434      zta = pzeta(ji,jj) 
     435      ! 
     436      zphi_m = ABS(1. - 15.*zta)**.25    !!Kansas unstable 
     437      ! 
     438      zpsi_k = 2.*LOG((1. + zphi_m)/2.) + LOG((1. + zphi_m*zphi_m)/2.)   & 
     439         & - 2.*ATAN(zphi_m) + 0.5*rpi 
     440      ! 
     441      zphi_c = ABS(1. - 10.15*zta)**.3333                   !!Convective 
     442      ! 
     443      zpsi_c = 1.5*LOG((1. + zphi_c + zphi_c*zphi_c)/3.) & 
     444         &     - 1.7320508*ATAN((1. + 2.*zphi_c)/1.7320508) + 1.813799447 
     445      ! 
     446      zf = zta*zta 
     447      zf = zf/(1. + zf) 
     448      zc = MIN(50._wp, 0.35_wp*zta) 
     449      zstab = 0.5 + SIGN(0.5_wp, zta) 
     450      ! 
     451      psi_m_coare(ji,jj) = (1. - zstab) * ( (1. - zf)*zpsi_k + zf*zpsi_c ) & ! (zta < 0) 
     452         &                -   zstab     * ( 1. + 1.*zta     &                ! (zta > 0) 
     453         &                         + 0.6667*(zta - 14.28)/EXP(zc) + 8.525 )   !     " 
     454      ! 
    456455      END_2D 
    457456      ! 
     
    483482      ! 
    484483      DO_2D_11_11 
    485          ! 
    486          zta = pzeta(ji,jj) 
    487          ! 
    488          zphi_h = (ABS(1. - 15.*zta))**.5  !! Kansas unstable   (zphi_h = zphi_m**2 when unstable, zphi_m when stable) 
    489          ! 
    490          zpsi_k = 2.*LOG((1. + zphi_h)/2.) 
    491          ! 
    492          zphi_c = (ABS(1. - 34.15*zta))**.3333   !! Convective 
    493          ! 
    494          zpsi_c = 1.5*LOG((1. + zphi_c + zphi_c*zphi_c)/3.) & 
    495             &    -1.7320508*ATAN((1. + 2.*zphi_c)/1.7320508) + 1.813799447 
    496          ! 
    497          zf = zta*zta 
    498          zf = zf/(1. + zf) 
    499          zc = MIN(50._wp,0.35_wp*zta) 
    500          zstab = 0.5 + SIGN(0.5_wp, zta) 
    501          ! 
    502          psi_h_coare(ji,jj) = (1. - zstab) * ( (1. - zf)*zpsi_k + zf*zpsi_c ) & 
    503             &                -   zstab     * ( (ABS(1. + 2.*zta/3.))**1.5     & 
    504             &                           + .6667*(zta - 14.28)/EXP(zc) + 8.525 ) 
    505          ! 
     484      ! 
     485      zta = pzeta(ji,jj) 
     486      ! 
     487      zphi_h = (ABS(1. - 15.*zta))**.5  !! Kansas unstable   (zphi_h = zphi_m**2 when unstable, zphi_m when stable) 
     488      ! 
     489      zpsi_k = 2.*LOG((1. + zphi_h)/2.) 
     490      ! 
     491      zphi_c = (ABS(1. - 34.15*zta))**.3333   !! Convective 
     492      ! 
     493      zpsi_c = 1.5*LOG((1. + zphi_c + zphi_c*zphi_c)/3.) & 
     494         &    -1.7320508*ATAN((1. + 2.*zphi_c)/1.7320508) + 1.813799447 
     495      ! 
     496      zf = zta*zta 
     497      zf = zf/(1. + zf) 
     498      zc = MIN(50._wp,0.35_wp*zta) 
     499      zstab = 0.5 + SIGN(0.5_wp, zta) 
     500      ! 
     501      psi_h_coare(ji,jj) = (1. - zstab) * ( (1. - zf)*zpsi_k + zf*zpsi_c ) & 
     502         &                -   zstab     * ( (ABS(1. + 2.*zta/3.))**1.5     & 
     503         &                           + .6667*(zta - 14.28)/EXP(zc) + 8.525 ) 
     504      ! 
    506505      END_2D 
    507506      ! 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/SBC/sbcblk_algo_coare3p6.F90

    r12377 r12724  
    194194      IF( kt == nit000 ) CALL SBCBLK_ALGO_COARE3P6_INIT(l_use_cs, l_use_wl) 
    195195 
    196       l_zt_equal_zu = .FALSE. 
    197       IF( ABS(zu - zt) < 0.01_wp )   l_zt_equal_zu = .TRUE.    ! testing "zu == zt" is risky with double precision 
     196      l_zt_equal_zu = ( ABS(zu - zt) < 0.01_wp ) ! testing "zu == zt" is risky with double precision 
    198197      IF( .NOT. l_zt_equal_zu )  ALLOCATE( zeta_t(jpi,jpj) ) 
    199198 
     
    432431      ! 
    433432      DO_2D_11_11 
    434          ! 
    435          zta = pzeta(ji,jj) 
    436          ! 
    437          zphi_m = ABS(1. - 15.*zta)**.25    !!Kansas unstable 
    438          ! 
    439          zpsi_k = 2.*LOG((1. + zphi_m)/2.) + LOG((1. + zphi_m*zphi_m)/2.)   & 
    440             & - 2.*ATAN(zphi_m) + 0.5*rpi 
    441          ! 
    442          zphi_c = ABS(1. - 10.15*zta)**.3333                   !!Convective 
    443          ! 
    444          zpsi_c = 1.5*LOG((1. + zphi_c + zphi_c*zphi_c)/3.) & 
    445             &     - 1.7320508*ATAN((1. + 2.*zphi_c)/1.7320508) + 1.813799447 
    446          ! 
    447          zf = zta*zta 
    448          zf = zf/(1. + zf) 
    449          zc = MIN(50._wp, 0.35_wp*zta) 
    450          zstab = 0.5 + SIGN(0.5_wp, zta) 
    451          ! 
    452          psi_m_coare(ji,jj) = (1. - zstab) * ( (1. - zf)*zpsi_k + zf*zpsi_c ) & ! (zta < 0) 
    453             &                -   zstab     * ( 1. + 1.*zta     &                ! (zta > 0) 
    454             &                         + 0.6667*(zta - 14.28)/EXP(zc) + 8.525 )   !     " 
    455          ! 
     433      ! 
     434      zta = pzeta(ji,jj) 
     435      ! 
     436      zphi_m = ABS(1. - 15.*zta)**.25    !!Kansas unstable 
     437      ! 
     438      zpsi_k = 2.*LOG((1. + zphi_m)/2.) + LOG((1. + zphi_m*zphi_m)/2.)   & 
     439         & - 2.*ATAN(zphi_m) + 0.5*rpi 
     440      ! 
     441      zphi_c = ABS(1. - 10.15*zta)**.3333                   !!Convective 
     442      ! 
     443      zpsi_c = 1.5*LOG((1. + zphi_c + zphi_c*zphi_c)/3.) & 
     444         &     - 1.7320508*ATAN((1. + 2.*zphi_c)/1.7320508) + 1.813799447 
     445      ! 
     446      zf = zta*zta 
     447      zf = zf/(1. + zf) 
     448      zc = MIN(50._wp, 0.35_wp*zta) 
     449      zstab = 0.5 + SIGN(0.5_wp, zta) 
     450      ! 
     451      psi_m_coare(ji,jj) = (1. - zstab) * ( (1. - zf)*zpsi_k + zf*zpsi_c ) & ! (zta < 0) 
     452         &                -   zstab     * ( 1. + 1.*zta     &                ! (zta > 0) 
     453         &                         + 0.6667*(zta - 14.28)/EXP(zc) + 8.525 )   !     " 
     454      ! 
    456455      END_2D 
    457456      ! 
     
    483482      ! 
    484483      DO_2D_11_11 
    485          ! 
    486          zta = pzeta(ji,jj) 
    487          ! 
    488          zphi_h = (ABS(1. - 15.*zta))**.5  !! Kansas unstable   (zphi_h = zphi_m**2 when unstable, zphi_m when stable) 
    489          ! 
    490          zpsi_k = 2.*LOG((1. + zphi_h)/2.) 
    491          ! 
    492          zphi_c = (ABS(1. - 34.15*zta))**.3333   !! Convective 
    493          ! 
    494          zpsi_c = 1.5*LOG((1. + zphi_c + zphi_c*zphi_c)/3.) & 
    495             &    -1.7320508*ATAN((1. + 2.*zphi_c)/1.7320508) + 1.813799447 
    496          ! 
    497          zf = zta*zta 
    498          zf = zf/(1. + zf) 
    499          zc = MIN(50._wp,0.35_wp*zta) 
    500          zstab = 0.5 + SIGN(0.5_wp, zta) 
    501          ! 
    502          psi_h_coare(ji,jj) = (1. - zstab) * ( (1. - zf)*zpsi_k + zf*zpsi_c ) & 
    503             &                -   zstab     * ( (ABS(1. + 2.*zta/3.))**1.5     & 
    504             &                           + .6667*(zta - 14.28)/EXP(zc) + 8.525 ) 
    505          ! 
     484      ! 
     485      zta = pzeta(ji,jj) 
     486      ! 
     487      zphi_h = (ABS(1. - 15.*zta))**.5  !! Kansas unstable   (zphi_h = zphi_m**2 when unstable, zphi_m when stable) 
     488      ! 
     489      zpsi_k = 2.*LOG((1. + zphi_h)/2.) 
     490      ! 
     491      zphi_c = (ABS(1. - 34.15*zta))**.3333   !! Convective 
     492      ! 
     493      zpsi_c = 1.5*LOG((1. + zphi_c + zphi_c*zphi_c)/3.) & 
     494         &    -1.7320508*ATAN((1. + 2.*zphi_c)/1.7320508) + 1.813799447 
     495      ! 
     496      zf = zta*zta 
     497      zf = zf/(1. + zf) 
     498      zc = MIN(50._wp,0.35_wp*zta) 
     499      zstab = 0.5 + SIGN(0.5_wp, zta) 
     500      ! 
     501      psi_h_coare(ji,jj) = (1. - zstab) * ( (1. - zf)*zpsi_k + zf*zpsi_c ) & 
     502         &                -   zstab     * ( (ABS(1. + 2.*zta/3.))**1.5     & 
     503         &                           + .6667*(zta - 14.28)/EXP(zc) + 8.525 ) 
     504      ! 
    506505      END_2D 
    507506      ! 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/SBC/sbcblk_algo_ecmwf.F90

    r12377 r12724  
    9898      &                      Qsw, rad_lw, slp, pdT_cs,                                & ! optionals for cool-skin (and warm-layer) 
    9999      &                      pdT_wl, pHz_wl )                                           ! optionals for warm-layer only 
    100       !!---------------------------------------------------------------------- 
     100      !!---------------------------------------------------------------------------------- 
    101101      !!                      ***  ROUTINE  turb_ecmwf  *** 
    102102      !! 
     
    184184      LOGICAL :: l_zt_equal_zu = .FALSE.      ! if q and t are given at same height as U 
    185185      ! 
    186       REAL(wp), DIMENSION(jpi,jpj) ::  u_star, t_star, q_star 
    187       REAL(wp), DIMENSION(jpi,jpj) :: dt_zu, dq_zu      
    188       REAL(wp), DIMENSION(jpi,jpj) :: znu_a !: Nu_air, Viscosity of air 
     186      REAL(wp), DIMENSION(jpi,jpj) :: u_star, t_star, q_star 
     187      REAL(wp), DIMENSION(jpi,jpj) :: dt_zu, dq_zu 
     188      REAL(wp), DIMENSION(jpi,jpj) :: znu_a         !: Nu_air, Viscosity of air 
    189189      REAL(wp), DIMENSION(jpi,jpj) :: Linv  !: 1/L (inverse of Monin Obukhov length... 
    190190      REAL(wp), DIMENSION(jpi,jpj) :: z0, z0t, z0q 
     
    196196      CHARACTER(len=40), PARAMETER :: crtnm = 'turb_ecmwf@sbcblk_algo_ecmwf.F90' 
    197197      !!---------------------------------------------------------------------------------- 
    198  
    199198      IF( kt == nit000 ) CALL SBCBLK_ALGO_ECMWF_INIT(l_use_cs, l_use_wl) 
    200199 
    201       l_zt_equal_zu = .FALSE. 
    202       IF( ABS(zu - zt) < 0.01_wp )   l_zt_equal_zu = .TRUE.    ! testing "zu == zt" is risky with double precision 
     200      l_zt_equal_zu = ( ABS(zu - zt) < 0.01_wp ) ! testing "zu == zt" is risky with double precision 
    203201 
    204202      !! Initializations for cool skin and warm layer: 
     
    413411      !!---------------------------------------------------------------------------------- 
    414412      DO_2D_11_11 
    415          ! 
    416          zzeta = MIN( pzeta(ji,jj) , 5._wp ) !! Very stable conditions (L positif and big!): 
    417          ! 
    418          ! Unstable (Paulson 1970): 
    419          !   eq.3.20, Chap.3, p.33, IFS doc - Cy31r1 
    420          zx = SQRT(ABS(1._wp - 16._wp*zzeta)) 
    421          ztmp = 1._wp + SQRT(zx) 
    422          ztmp = ztmp*ztmp 
    423          psi_unst = LOG( 0.125_wp*ztmp*(1._wp + zx) )   & 
    424             &       -2._wp*ATAN( SQRT(zx) ) + 0.5_wp*rpi 
    425          ! 
    426          ! Unstable: 
    427          ! eq.3.22, Chap.3, p.33, IFS doc - Cy31r1 
    428          psi_stab = -2._wp/3._wp*(zzeta - 5._wp/0.35_wp)*EXP(-0.35_wp*zzeta) & 
    429             &       - zzeta - 2._wp/3._wp*5._wp/0.35_wp 
    430          ! 
    431          ! Combining: 
    432          stab = 0.5_wp + SIGN(0.5_wp, zzeta) ! zzeta > 0 => stab = 1 
    433          ! 
    434          psi_m_ecmwf(ji,jj) = (1._wp - stab) * psi_unst & ! (zzeta < 0) Unstable 
    435             &                +      stab  * psi_stab      ! (zzeta > 0) Stable 
    436          ! 
     413      ! 
     414      zzeta = MIN( pzeta(ji,jj) , 5._wp ) !! Very stable conditions (L positif and big!): 
     415      ! 
     416      ! Unstable (Paulson 1970): 
     417      !   eq.3.20, Chap.3, p.33, IFS doc - Cy31r1 
     418      zx = SQRT(ABS(1._wp - 16._wp*zzeta)) 
     419      ztmp = 1._wp + SQRT(zx) 
     420      ztmp = ztmp*ztmp 
     421      psi_unst = LOG( 0.125_wp*ztmp*(1._wp + zx) )   & 
     422         &       -2._wp*ATAN( SQRT(zx) ) + 0.5_wp*rpi 
     423      ! 
     424      ! Unstable: 
     425      ! eq.3.22, Chap.3, p.33, IFS doc - Cy31r1 
     426      psi_stab = -2._wp/3._wp*(zzeta - 5._wp/0.35_wp)*EXP(-0.35_wp*zzeta) & 
     427         &       - zzeta - 2._wp/3._wp*5._wp/0.35_wp 
     428      ! 
     429      ! Combining: 
     430      stab = 0.5_wp + SIGN(0.5_wp, zzeta) ! zzeta > 0 => stab = 1 
     431      ! 
     432      psi_m_ecmwf(ji,jj) = (1._wp - stab) * psi_unst & ! (zzeta < 0) Unstable 
     433         &                +      stab  * psi_stab      ! (zzeta > 0) Stable 
     434      ! 
    437435      END_2D 
    438436   END FUNCTION psi_m_ecmwf 
     
    458456      ! 
    459457      DO_2D_11_11 
    460          ! 
    461          zzeta = MIN(pzeta(ji,jj) , 5._wp)   ! Very stable conditions (L positif and big!): 
    462          ! 
    463          zx  = ABS(1._wp - 16._wp*zzeta)**.25        ! this is actually (1/phi_m)**2  !!! 
    464          !                                     ! eq.3.19, Chap.3, p.33, IFS doc - Cy31r1 
    465          ! Unstable (Paulson 1970) : 
    466          psi_unst = 2._wp*LOG(0.5_wp*(1._wp + zx*zx))   ! eq.3.20, Chap.3, p.33, IFS doc - Cy31r1 
    467          ! 
    468          ! Stable: 
    469          psi_stab = -2._wp/3._wp*(zzeta - 5._wp/0.35_wp)*EXP(-0.35_wp*zzeta) & ! eq.3.22, Chap.3, p.33, IFS doc - Cy31r1 
    470             &       - ABS(1._wp + 2._wp/3._wp*zzeta)**1.5_wp - 2._wp/3._wp*5._wp/0.35_wp + 1._wp 
    471          ! LB: added ABS() to avoid NaN values when unstable, which contaminates the unstable solution... 
    472          ! 
    473          stab = 0.5_wp + SIGN(0.5_wp, zzeta) ! zzeta > 0 => stab = 1 
    474          ! 
    475          ! 
    476          psi_h_ecmwf(ji,jj) = (1._wp - stab) * psi_unst &   ! (zzeta < 0) Unstable 
    477             &                +    stab    * psi_stab        ! (zzeta > 0) Stable 
    478          ! 
     458      ! 
     459      zzeta = MIN(pzeta(ji,jj) , 5._wp)   ! Very stable conditions (L positif and big!): 
     460      ! 
     461      zx  = ABS(1._wp - 16._wp*zzeta)**.25        ! this is actually (1/phi_m)**2  !!! 
     462      !                                     ! eq.3.19, Chap.3, p.33, IFS doc - Cy31r1 
     463      ! Unstable (Paulson 1970) : 
     464      psi_unst = 2._wp*LOG(0.5_wp*(1._wp + zx*zx))   ! eq.3.20, Chap.3, p.33, IFS doc - Cy31r1 
     465      ! 
     466      ! Stable: 
     467      psi_stab = -2._wp/3._wp*(zzeta - 5._wp/0.35_wp)*EXP(-0.35_wp*zzeta) & ! eq.3.22, Chap.3, p.33, IFS doc - Cy31r1 
     468         &       - ABS(1._wp + 2._wp/3._wp*zzeta)**1.5_wp - 2._wp/3._wp*5._wp/0.35_wp + 1._wp 
     469      ! LB: added ABS() to avoid NaN values when unstable, which contaminates the unstable solution... 
     470      ! 
     471      stab = 0.5_wp + SIGN(0.5_wp, zzeta) ! zzeta > 0 => stab = 1 
     472      ! 
     473      ! 
     474      psi_h_ecmwf(ji,jj) = (1._wp - stab) * psi_unst &   ! (zzeta < 0) Unstable 
     475         &                +    stab    * psi_stab        ! (zzeta > 0) Stable 
     476      ! 
    479477      END_2D 
    480478   END FUNCTION psi_h_ecmwf 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/SBC/sbcblk_algo_ncar.F90

    r12377 r12724  
    112112      REAL(wp), DIMENSION(jpi,jpj) ::   stab          ! stability test integer 
    113113      !!---------------------------------------------------------------------------------- 
    114       ! 
    115       l_zt_equal_zu = .FALSE. 
    116       IF( ABS(zu - zt) < 0.01_wp )   l_zt_equal_zu = .TRUE.    ! testing "zu == zt" is risky with double precision 
     114      l_zt_equal_zu = ( ABS(zu - zt) < 0.01_wp ) ! testing "zu == zt" is risky with double precision 
    117115 
    118116      U_blk = MAX( 0.5_wp , U_zu )   !  relative wind speed at zu (normally 10m), we don't want to fall under 0.5 m/s 
     
    143141      ENDIF 
    144142 
    145       !! Initializing values at z_u with z_t values: 
    146       t_zu = t_zt   ;   q_zu = q_zt 
     143      !! First guess of temperature and humidity at height zu: 
     144      t_zu = MAX( t_zt ,  180._wp )   ! who knows what's given on masked-continental regions... 
     145      q_zu = MAX( q_zt , 1.e-6_wp )   !               " 
    147146 
    148147      !! ITERATION BLOCK 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/SBC/sbcblk_phy.F90

    r12377 r12724  
    520520         zCe = zz0*pqst(ji,jj)/zdq 
    521521 
    522          CALL BULK_FORMULA( pzu, pTs(ji,jj), pqs(ji,jj), pTa(ji,jj), pqa(ji,jj), & 
    523             &              zCd, zCh, zCe,                                        & 
    524             &              pwnd(ji,jj), pUb(ji,jj), pslp(ji,jj),                 & 
    525             &              pTau(ji,jj), zQsen, zQlat ) 
    526  
     522         CALL BULK_FORMULA_SCLR( pzu, pTs(ji,jj), pqs(ji,jj), pTa(ji,jj), pqa(ji,jj), & 
     523            &                    zCd, zCh, zCe,                                       & 
     524            &                    pwnd(ji,jj), pUb(ji,jj), pslp(ji,jj),                & 
     525            &                    pTau(ji,jj), zQsen, zQlat ) 
     526          
    527527         zTs2  = pTs(ji,jj)*pTs(ji,jj) 
    528528         zQlw  = emiss_w*(prlw(ji,jj) - stefan*zTs2*zTs2) ! Net longwave flux 
     
    535535 
    536536 
    537    SUBROUTINE BULK_FORMULA_VCTR( pzu, pTs, pqs, pTa, pqa,  & 
    538       &                          pCd, pCh, pCe,            & 
    539       &                          pwnd, pUb, pslp,          & 
    540       &                          pTau, pQsen, pQlat,  pEvap, prhoa ) 
     537   SUBROUTINE BULK_FORMULA_SCLR( pzu, pTs, pqs, pTa, pqa, & 
     538      &                          pCd, pCh, pCe,           & 
     539      &                          pwnd, pUb, pslp,         & 
     540      &                          pTau, pQsen, pQlat,      & 
     541      &                          pEvap, prhoa, pfact_evap ) 
     542      !!---------------------------------------------------------------------------------- 
     543      REAL(wp),                     INTENT(in)  :: pzu  ! height above the sea-level where all this takes place (normally 10m) 
     544      REAL(wp), INTENT(in)  :: pTs  ! water temperature at the air-sea interface [K] 
     545      REAL(wp), INTENT(in)  :: pqs  ! satur. spec. hum. at T=pTs   [kg/kg] 
     546      REAL(wp), INTENT(in)  :: pTa  ! potential air temperature at z=pzu [K] 
     547      REAL(wp), INTENT(in)  :: pqa  ! specific humidity at z=pzu [kg/kg] 
     548      REAL(wp), INTENT(in)  :: pCd 
     549      REAL(wp), INTENT(in)  :: pCh 
     550      REAL(wp), INTENT(in)  :: pCe 
     551      REAL(wp), INTENT(in)  :: pwnd ! wind speed module at z=pzu [m/s] 
     552      REAL(wp), INTENT(in)  :: pUb  ! bulk wind speed at z=pzu (inc. pot. effect of gustiness etc) [m/s] 
     553      REAL(wp), INTENT(in)  :: pslp ! sea-level atmospheric pressure [Pa] 
     554      !! 
     555      REAL(wp), INTENT(out) :: pTau  ! module of the wind stress [N/m^2] 
     556      REAL(wp), INTENT(out) :: pQsen !  [W/m^2] 
     557      REAL(wp), INTENT(out) :: pQlat !  [W/m^2] 
     558      !! 
     559      REAL(wp), INTENT(out), OPTIONAL :: pEvap ! Evaporation [kg/m^2/s] 
     560      REAL(wp), INTENT(out), OPTIONAL :: prhoa ! Air density at z=pzu [kg/m^3] 
     561      REAL(wp), INTENT(in) , OPTIONAL :: pfact_evap  ! ABOMINATION: corrective factor for evaporation (doing this against my will! /laurent) 
     562      !! 
     563      REAL(wp) :: ztaa, zgamma, zrho, zUrho, zevap, zfact_evap 
     564      INTEGER  :: jq 
     565      !!---------------------------------------------------------------------------------- 
     566      zfact_evap = 1._wp 
     567      IF( PRESENT(pfact_evap) ) zfact_evap = pfact_evap 
     568       
     569      !! Need ztaa, absolute temperature at pzu (formula to estimate rho_air needs absolute temperature, not the potential temperature "pTa") 
     570      ztaa = pTa ! first guess... 
     571      DO jq = 1, 4 
     572         zgamma = gamma_moist( 0.5*(ztaa+pTs) , pqa )  !LOLO: why not "0.5*(pqs+pqa)" rather then "pqa" ??? 
     573         ztaa = pTa - zgamma*pzu   ! Absolute temp. is slightly colder... 
     574      END DO 
     575      zrho = rho_air(ztaa, pqa, pslp) 
     576      zrho = rho_air(ztaa, pqa, pslp-zrho*grav*pzu) ! taking into account that we are pzu m above the sea level where SLP is given! 
     577 
     578      zUrho = pUb*MAX(zrho, 1._wp)     ! rho*U10 
     579 
     580      pTau = zUrho * pCd * pwnd ! Wind stress module 
     581 
     582      zevap = zUrho * pCe * (pqa - pqs) 
     583      pQsen = zUrho * pCh * (pTa - pTs) * cp_air(pqa) 
     584      pQlat = L_vap(pTs) * zevap 
     585 
     586      IF( PRESENT(pEvap) ) pEvap = - zfact_evap * zevap 
     587      IF( PRESENT(prhoa) ) prhoa = zrho 
     588 
     589   END SUBROUTINE BULK_FORMULA_SCLR 
     590 
     591   SUBROUTINE BULK_FORMULA_VCTR( pzu, pTs, pqs, pTa, pqa, & 
     592      &                          pCd, pCh, pCe,           & 
     593      &                          pwnd, pUb, pslp,         & 
     594      &                          pTau, pQsen, pQlat,      &  
     595      &                          pEvap, prhoa, pfact_evap )       
    541596      !!---------------------------------------------------------------------------------- 
    542597      REAL(wp),                     INTENT(in)  :: pzu  ! height above the sea-level where all this takes place (normally 10m) 
     
    558613      REAL(wp), DIMENSION(jpi,jpj), INTENT(out), OPTIONAL :: pEvap ! Evaporation [kg/m^2/s] 
    559614      REAL(wp), DIMENSION(jpi,jpj), INTENT(out), OPTIONAL :: prhoa ! Air density at z=pzu [kg/m^3] 
    560       !! 
    561       REAL(wp) :: ztaa, zgamma, zrho, zUrho, zevap 
    562       INTEGER  :: ji, jj, jq     ! dummy loop indices 
    563       !!---------------------------------------------------------------------------------- 
    564       DO_2D_11_11 
    565  
    566          !! Need ztaa, absolute temperature at pzu (formula to estimate rho_air needs absolute temperature, not the potential temperature "pTa") 
    567          ztaa = pTa(ji,jj) ! first guess... 
    568          DO jq = 1, 4 
    569             zgamma = gamma_moist( 0.5*(ztaa+pTs(ji,jj)) , pqa(ji,jj) ) 
    570             ztaa = pTa(ji,jj) - zgamma*pzu   ! Absolute temp. is slightly colder... 
    571          END DO 
    572          zrho = rho_air(ztaa, pqa(ji,jj), pslp(ji,jj)) 
    573          zrho = rho_air(ztaa, pqa(ji,jj), pslp(ji,jj)-zrho*grav*pzu) ! taking into account that we are pzu m above the sea level where SLP is given! 
    574  
    575          zUrho = pUb(ji,jj)*MAX(zrho, 1._wp)     ! rho*U10 
    576  
    577          pTau(ji,jj) = zUrho * pCd(ji,jj) * pwnd(ji,jj) ! Wind stress module 
    578  
    579          zevap        = zUrho * pCe(ji,jj) * (pqa(ji,jj) - pqs(ji,jj)) 
    580          pQsen(ji,jj) = zUrho * pCh(ji,jj) * (pTa(ji,jj) - pTs(ji,jj)) * cp_air(pqa(ji,jj)) 
    581          pQlat(ji,jj) = L_vap(pTs(ji,jj)) * zevap 
    582  
    583          IF( PRESENT(pEvap) ) pEvap(ji,jj) = - zevap 
     615      REAL(wp),                     INTENT(in) , OPTIONAL :: pfact_evap  ! ABOMINATION: corrective factor for evaporation (doing this against my will! /laurent) 
     616      !! 
     617      REAL(wp) :: ztaa, zgamma, zrho, zUrho, zevap, zfact_evap 
     618      INTEGER  :: ji, jj 
     619      !!---------------------------------------------------------------------------------- 
     620      zfact_evap = 1._wp 
     621      IF( PRESENT(pfact_evap) ) zfact_evap = pfact_evap 
     622 
     623      DO_2D_11_11 
     624 
     625         CALL BULK_FORMULA_SCLR( pzu, pTs(ji,jj), pqs(ji,jj), pTa(ji,jj), pqa(ji,jj), & 
     626            &                    pCd(ji,jj), pCh(ji,jj), pCe(ji,jj),                  & 
     627            &                    pwnd(ji,jj), pUb(ji,jj), pslp(ji,jj),                & 
     628            &                    pTau(ji,jj), pQsen(ji,jj), pQlat(ji,jj),             & 
     629            &                    pEvap=zevap, prhoa=zrho, pfact_evap=zfact_evap       ) 
     630 
     631         IF( PRESENT(pEvap) ) pEvap(ji,jj) = zevap 
    584632         IF( PRESENT(prhoa) ) prhoa(ji,jj) = zrho 
    585  
     633    
    586634      END_2D 
    587635   END SUBROUTINE BULK_FORMULA_VCTR 
    588  
    589  
    590    SUBROUTINE BULK_FORMULA_SCLR( pzu, pTs, pqs, pTa, pqa, & 
    591       &                          pCd, pCh, pCe,           & 
    592       &                          pwnd, pUb, pslp,         & 
    593       &                          pTau, pQsen, pQlat,  pEvap, prhoa ) 
    594       !!---------------------------------------------------------------------------------- 
    595       REAL(wp),                     INTENT(in)  :: pzu  ! height above the sea-level where all this takes place (normally 10m) 
    596       REAL(wp), INTENT(in)  :: pTs  ! water temperature at the air-sea interface [K] 
    597       REAL(wp), INTENT(in)  :: pqs  ! satur. spec. hum. at T=pTs   [kg/kg] 
    598       REAL(wp), INTENT(in)  :: pTa  ! potential air temperature at z=pzu [K] 
    599       REAL(wp), INTENT(in)  :: pqa  ! specific humidity at z=pzu [kg/kg] 
    600       REAL(wp), INTENT(in)  :: pCd 
    601       REAL(wp), INTENT(in)  :: pCh 
    602       REAL(wp), INTENT(in)  :: pCe 
    603       REAL(wp), INTENT(in)  :: pwnd ! wind speed module at z=pzu [m/s] 
    604       REAL(wp), INTENT(in)  :: pUb  ! bulk wind speed at z=pzu (inc. pot. effect of gustiness etc) [m/s] 
    605       REAL(wp), INTENT(in)  :: pslp ! sea-level atmospheric pressure [Pa] 
    606       !! 
    607       REAL(wp), INTENT(out) :: pTau  ! module of the wind stress [N/m^2] 
    608       REAL(wp), INTENT(out) :: pQsen !  [W/m^2] 
    609       REAL(wp), INTENT(out) :: pQlat !  [W/m^2] 
    610       !! 
    611       REAL(wp), INTENT(out), OPTIONAL :: pEvap ! Evaporation [kg/m^2/s] 
    612       REAL(wp), INTENT(out), OPTIONAL :: prhoa ! Air density at z=pzu [kg/m^3] 
    613       !! 
    614       REAL(wp) :: ztaa, zgamma, zrho, zUrho, zevap 
    615       INTEGER  :: jq 
    616       !!---------------------------------------------------------------------------------- 
    617  
    618       !! Need ztaa, absolute temperature at pzu (formula to estimate rho_air needs absolute temperature, not the potential temperature "pTa") 
    619       ztaa = pTa ! first guess... 
    620       DO jq = 1, 4 
    621          zgamma = gamma_moist( 0.5*(ztaa+pTs) , pqa ) 
    622          ztaa = pTa - zgamma*pzu   ! Absolute temp. is slightly colder... 
    623       END DO 
    624       zrho = rho_air(ztaa, pqa, pslp) 
    625       zrho = rho_air(ztaa, pqa, pslp-zrho*grav*pzu) ! taking into account that we are pzu m above the sea level where SLP is given! 
    626  
    627       zUrho = pUb*MAX(zrho, 1._wp)     ! rho*U10 
    628  
    629       pTau = zUrho * pCd * pwnd ! Wind stress module 
    630  
    631       zevap = zUrho * pCe * (pqa - pqs) 
    632       pQsen = zUrho * pCh * (pTa - pTs) * cp_air(pqa) 
    633       pQlat = L_vap(pTs) * zevap 
    634  
    635       IF( PRESENT(pEvap) ) pEvap = - zevap 
    636       IF( PRESENT(prhoa) ) prhoa = zrho 
    637  
    638    END SUBROUTINE BULK_FORMULA_SCLR 
    639  
    640  
    641636 
    642637 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/SBC/sbcblk_skin_coare.F90

    r12377 r12724  
    199199         ! Okay test on updated absorbed flux: 
    200200         !#LB: remove??? has a strong influence !!! 
    201          IF( (.NOT. l_exit).AND.(Qnt_ac(ji,jj) + zQabs*rdt <= 0._wp) ) THEN 
     201         IF( (.NOT. l_exit).AND.(Qnt_ac(ji,jj) + zQabs*rn_Dt <= 0._wp) ) THEN 
    202202            l_exit       = .TRUE. 
    203203            l_destroy_wl = .TRUE. 
     
    211211            ! 2/ Regardless of WL formed (dT==0 or dT>0), we are in the process to initiate one or warm further it ! 
    212212 
    213             ztac = Tau_ac(ji,jj) + MAX(.002_wp , pTau(ji,jj))*rdt      ! updated momentum integral 
     213            ztac = Tau_ac(ji,jj) + MAX(.002_wp , pTau(ji,jj))*rn_Dt      ! updated momentum integral 
    214214            !PRINT *, '#LBD: updated value for Tac=',  REAL(ztac,4) 
    215215 
     
    218218            DO jl = 1, 5 
    219219               zQabs = frac_solar_abs(zHwl)*pQsw(ji,jj) + pQnsol(ji,jj) 
    220                zqac  = Qnt_ac(ji,jj) + zQabs*rdt ! updated heat absorbed 
     220               zqac  = Qnt_ac(ji,jj) + zQabs*rn_Dt ! updated heat absorbed 
    221221               IF( zqac <= 0._wp ) EXIT 
    222222               zHwl = MAX( MIN( Hwl_max , zcd1*ztac/SQRT(zqac)) , 0.1_wp ) ! Warm-layer depth 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/SBC/sbcblk_skin_ecmwf.F90

    r12377 r12724  
    214214         zcst2 = zcst1 / ( 5._wp*zHwl*zusw2 )  !OR: zcst2 = zcst1*rNuwl0 / ( 5._wp*zHwl*zusw2 ) ??? 
    215215 
    216          zcst0 = rdt * (rNuwl0 + 1._wp) / zHwl 
     216         zcst0 = rn_Dt * (rNuwl0 + 1._wp) / zHwl 
    217217 
    218218         ZA = zcst0 * zQabs / ( rNuwl0 * zRhoCp_w ) 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/SBC/sbccpl.F90

    r12606 r12724  
    193193 
    194194   REAL(wp) ::   rpref = 101000._wp   ! reference atmospheric pressure[N/m2]  
    195    REAL(wp) ::   r1_grau              ! = 1.e0 / (grav * rau0)  
     195   REAL(wp) ::   r1_grau              ! = 1.e0 / (grav * rho0)  
    196196 
    197197   INTEGER , ALLOCATABLE, SAVE, DIMENSION(:) ::   nrcvinfo           ! OASIS info argument 
     
    11161116         IF( ln_dm2dc .AND. ncpl_qsr_freq /= 86400 )   & 
    11171117            &   CALL ctl_stop( 'sbc_cpl_rcv: diurnal cycle reconstruction (ln_dm2dc) needs daily couping for solar radiation' ) 
    1118          ncpl_qsr_freq = 86400 / ncpl_qsr_freq   ! used by top 
     1118 
     1119         IF( ncpl_qsr_freq /= 0) ncpl_qsr_freq = 86400 / ncpl_qsr_freq ! used by top 
     1120          
    11191121      ENDIF 
    11201122      ! 
     
    11241126      !                                                      ! Receive all the atmos. fields (including ice information) 
    11251127      !                                                      ! ======================================================= ! 
    1126       isec = ( kt - nit000 ) * NINT( rdt )                      ! date of exchanges 
     1128      isec = ( kt - nit000 ) * NINT( rn_Dt )                      ! date of exchanges 
    11271129      DO jn = 1, jprcv                                          ! received fields sent by the atmosphere 
    11281130         IF( srcv(jn)%laction )   CALL cpl_rcv( jn, isec, frcv(jn)%z3, xcplmask(:,:,1:nn_cplmodel), nrcvinfo(jn) ) 
     
    12511253          IF( kt /= nit000 )   ssh_ibb(:,:) = ssh_ib(:,:)    !* Swap of ssh_ib fields  
    12521254 
    1253           r1_grau = 1.e0 / (grav * rau0)               !* constant for optimization  
     1255          r1_grau = 1.e0 / (grav * rho0)               !* constant for optimization  
    12541256          ssh_ib(:,:) = - ( frcv(jpr_mslp)%z3(:,:,1) - rpref ) * r1_grau    ! equivalent ssh (inverse barometer)  
    12551257          apr   (:,:) =     frcv(jpr_mslp)%z3(:,:,1)                         !atmospheric pressure  
     
    21012103      !!---------------------------------------------------------------------- 
    21022104      ! 
    2103       isec = ( kt - nit000 ) * NINT( rdt )        ! date of exchanges 
     2105      isec = ( kt - nit000 ) * NINT( rn_Dt )        ! date of exchanges 
    21042106 
    21052107      zfr_l(:,:) = 1.- fr_i(:,:) 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/SBC/sbcdcy.F90

    r12377 r12724  
    8686      ! -------------- 
    8787      ! When are we during the day (from 0 to 1) 
    88       zlo = ( REAL(nsec_day, wp) - 0.5_wp * rdt ) / rday 
    89       zup = zlo + ( REAL(nn_fsbc, wp)     * rdt ) / rday 
     88      zlo = ( REAL(nsec_day, wp) - 0.5_wp * rn_Dt ) / rday 
     89      zup = zlo + ( REAL(nn_fsbc, wp)     * rn_Dt ) / rday 
    9090      ! 
    9191      IF( nday_qsr == -1 ) THEN       ! first time step only 
     
    251251         END_2D 
    252252         ! 
    253          ztmp = rday / ( rdt * REAL(nn_fsbc, wp) ) 
     253         ztmp = rday / ( rn_Dt * REAL(nn_fsbc, wp) ) 
    254254         rscal(:,:) = rscal(:,:) * ztmp 
    255255         ! 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/SBC/sbcfwb.F90

    r12377 r12724  
    126126         ENDIF    
    127127         !                                         ! Update fwfold if new year start 
    128          ikty = 365 * 86400 / rdt                  !!bug  use of 365 days leap year or 360d year !!!!!!! 
     128         ikty = 365 * 86400 / rn_Dt                  !!bug  use of 365 days leap year or 360d year !!!!!!! 
    129129         IF( MOD( kt, ikty ) == 0 ) THEN 
    130130            a_fwb_b = a_fwb                           ! mean sea level taking into account the ice+snow 
    131131                                                      ! sum over the global domain 
    132             a_fwb   = glob_sum( 'sbcfwb', e1e2t(:,:) * ( ssh(:,:,Kmm) + snwice_mass(:,:) * r1_rau0 ) ) 
     132            a_fwb   = glob_sum( 'sbcfwb', e1e2t(:,:) * ( ssh(:,:,Kmm) + snwice_mass(:,:) * r1_rho0 ) ) 
    133133            a_fwb   = a_fwb * 1.e+3 / ( area * rday * 365. )     ! convert in Kg/m3/s = mm/s 
    134134!!gm        !                                                      !!bug 365d year  
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/SBC/sbcice_cice.F90

    r12680 r12724  
    1313   USE dom_oce         ! ocean space and time domain 
    1414   USE domvvl 
    15    USE phycst, only : rcp, rau0, r1_rau0, rhos, rhoi 
     15   USE phycst, only : rcp, rho0, r1_rho0, rhos, rhoi 
    1616   USE in_out_manager  ! I/O manager 
    1717   USE iom, ONLY : iom_put,iom_use              ! I/O manager library !!Joakim edit 
     
    228228      IF( .NOT.ln_rstart ) THEN 
    229229         IF( ln_ice_embd ) THEN            ! embedded sea-ice: deplete the initial ssh below sea-ice area 
    230             ssh(:,:,Kmm) = ssh(:,:,Kmm) - snwice_mass(:,:) * r1_rau0 
    231             ssh(:,:,Kbb) = ssh(:,:,Kbb) - snwice_mass(:,:) * r1_rau0 
     230            ssh(:,:,Kmm) = ssh(:,:,Kmm) - snwice_mass(:,:) * r1_rho0 
     231            ssh(:,:,Kbb) = ssh(:,:,Kbb) - snwice_mass(:,:) * r1_rho0 
    232232 
    233233!!gm This should be put elsewhere....   (same remark for limsbc) 
     
    421421! Freezing/melting potential 
    422422! Calculated over NEMO leapfrog timestep (hence 2*dt) 
    423       nfrzmlt(:,:) = rau0 * rcp * e3t_m(:,:) * ( Tocnfrz-sst_m(:,:) ) / ( 2.0*dt ) 
     423      nfrzmlt(:,:) = rho0 * rcp * e3t_m(:,:) * ( Tocnfrz-sst_m(:,:) ) / ( 2.0*dt ) 
    424424 
    425425      ztmp(:,:) = nfrzmlt(:,:) 
     
    454454         zintb = REAL( nn_fsbc + 1 ) / REAL( nn_fsbc ) * 0.5_wp 
    455455          ! 
    456          zpice(:,:) = ssh_m(:,:) + (  zintn * snwice_mass(:,:) +  zintb * snwice_mass_b(:,:)  ) * r1_rau0 
     456         zpice(:,:) = ssh_m(:,:) + (  zintn * snwice_mass(:,:) +  zintb * snwice_mass_b(:,:)  ) * r1_rho0 
    457457          ! 
    458458         ! 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/SBC/sbcmod.F90

    r12377 r12724  
    187187      ! 
    188188      IF( .NOT.ln_usr ) THEN     ! the model calendar needs some specificities (except in user defined case) 
    189          IF( MOD( rday , rdt ) /= 0. )   CALL ctl_stop( 'the time step must devide the number of second of in a day' ) 
     189         IF( MOD( rday , rn_Dt ) /= 0. )   CALL ctl_stop( 'the time step must devide the number of second of in a day' ) 
    190190         IF( MOD( rday , 2.  ) /= 0. )   CALL ctl_stop( 'the number of second of in a day must be an even number'    ) 
    191          IF( MOD( rdt  , 2.  ) /= 0. )   CALL ctl_stop( 'the time step (in second) must be an even number'           ) 
     191         IF( MOD( rn_Dt  , 2.  ) /= 0. )   CALL ctl_stop( 'the time step (in second) must be an even number'           ) 
    192192      ENDIF 
    193193      !                       !**  check option consistency 
     
    309309      !     SAS time-step has to be declared in OASIS (mandatory) -> nn_fsbc has to be modified accordingly 
    310310      IF( nn_components /= jp_iam_nemo ) THEN 
    311          IF( nn_components == jp_iam_opa )   nn_fsbc = cpl_freq('O_SFLX') / NINT(rdt) 
    312          IF( nn_components == jp_iam_sas )   nn_fsbc = cpl_freq('I_SFLX') / NINT(rdt) 
     311         IF( nn_components == jp_iam_opa )   nn_fsbc = cpl_freq('O_SFLX') / NINT(rn_Dt) 
     312         IF( nn_components == jp_iam_sas )   nn_fsbc = cpl_freq('I_SFLX') / NINT(rn_Dt) 
    313313         ! 
    314314         IF(lwp)THEN 
     
    331331      ENDIF 
    332332      ! 
    333       IF( MOD( rday, REAL(nn_fsbc, wp) * rdt ) /= 0 )   & 
     333      IF( MOD( rday, REAL(nn_fsbc, wp) * rn_Dt ) /= 0 )   & 
    334334         &  CALL ctl_warn( 'sbc_init : nn_fsbc is NOT a multiple of the number of time steps in a day' ) 
    335335      ! 
    336       IF( ln_dm2dc .AND. NINT(rday) / ( nn_fsbc * NINT(rdt) ) < 8  )   & 
     336      IF( ln_dm2dc .AND. NINT(rday) / ( nn_fsbc * NINT(rn_Dt) ) < 8  )   & 
    337337         &   CALL ctl_warn( 'sbc_init : diurnal cycle for qsr: the sampling of the diurnal cycle is too small...' ) 
    338338      ! 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/SBC/sbcrnf.F90

    r12590 r12724  
    138138         !                                                           ! set temperature & salinity content of runoffs 
    139139         IF( ln_rnf_tem ) THEN                                       ! use runoffs temperature data 
    140             rnf_tsc(:,:,jp_tem) = ( sf_t_rnf(1)%fnow(:,:,1) ) * rnf(:,:) * r1_rau0 
     140            rnf_tsc(:,:,jp_tem) = ( sf_t_rnf(1)%fnow(:,:,1) ) * rnf(:,:) * r1_rho0 
    141141            CALL eos_fzp( sss_m(:,:), ztfrz(:,:) ) 
    142142            WHERE( sf_t_rnf(1)%fnow(:,:,1) == -999._wp )             ! if missing data value use SST as runoffs temperature 
    143                rnf_tsc(:,:,jp_tem) = sst_m(:,:) * rnf(:,:) * r1_rau0 
     143               rnf_tsc(:,:,jp_tem) = sst_m(:,:) * rnf(:,:) * r1_rho0 
    144144            END WHERE 
    145145         ELSE                                                        ! use SST as runoffs temperature 
    146146            !CEOD River is fresh water so must at least be 0 unless we consider ice 
    147             rnf_tsc(:,:,jp_tem) = MAX( sst_m(:,:), 0.0_wp ) * rnf(:,:) * r1_rau0 
     147            rnf_tsc(:,:,jp_tem) = MAX( sst_m(:,:), 0.0_wp ) * rnf(:,:) * r1_rho0 
    148148         ENDIF 
    149149         !                                                           ! use runoffs salinity data 
    150          IF( ln_rnf_sal )   rnf_tsc(:,:,jp_sal) = ( sf_s_rnf(1)%fnow(:,:,1) ) * rnf(:,:) * r1_rau0 
     150         IF( ln_rnf_sal )   rnf_tsc(:,:,jp_sal) = ( sf_s_rnf(1)%fnow(:,:,1) ) * rnf(:,:) * r1_rho0 
    151151         !                                                           ! else use S=0 for runoffs (done one for all in the init) 
    152152                                         CALL iom_put( 'runoffs'     , rnf(:,:)                         )   ! output runoff mass flux 
    153          IF( iom_use('hflx_rnf_cea') )   CALL iom_put( 'hflx_rnf_cea', rnf_tsc(:,:,jp_tem) * rau0 * rcp )   ! output runoff sensible heat (W/m2) 
     153         IF( iom_use('hflx_rnf_cea') )   CALL iom_put( 'hflx_rnf_cea', rnf_tsc(:,:,jp_tem) * rho0 * rcp )   ! output runoff sensible heat (W/m2) 
    154154      ENDIF 
    155155      ! 
     
    211211            DO_2D_11_11 
    212212               DO jk = 1, nk_rnf(ji,jj) 
    213                   phdivn(ji,jj,jk) = phdivn(ji,jj,jk) - ( rnf(ji,jj) + rnf_b(ji,jj) ) * zfact * r1_rau0 / h_rnf(ji,jj) 
     213                  phdivn(ji,jj,jk) = phdivn(ji,jj,jk) - ( rnf(ji,jj) + rnf_b(ji,jj) ) * zfact * r1_rho0 / h_rnf(ji,jj) 
    214214               END DO 
    215215            END_2D 
     
    222222               !                          ! apply the runoff input flow 
    223223               DO jk = 1, nk_rnf(ji,jj) 
    224                   phdivn(ji,jj,jk) = phdivn(ji,jj,jk) - ( rnf(ji,jj) + rnf_b(ji,jj) ) * zfact * r1_rau0 / h_rnf(ji,jj) 
     224                  phdivn(ji,jj,jk) = phdivn(ji,jj,jk) - ( rnf(ji,jj) + rnf_b(ji,jj) ) * zfact * r1_rho0 / h_rnf(ji,jj) 
    225225               END DO 
    226226            END_2D 
     
    228228      ELSE                       !==   runoff put only at the surface   ==! 
    229229         h_rnf (:,:)   = e3t (:,:,1,Kmm)        ! update h_rnf to be depth of top box 
    230          phdivn(:,:,1) = phdivn(:,:,1) - ( rnf(:,:)+rnf_b(:,:) ) * zfact * r1_rau0 / e3t(:,:,1,Kmm) 
     230         phdivn(:,:,1) = phdivn(:,:,1) - ( rnf(:,:)+rnf_b(:,:) ) * zfact * r1_rho0 / e3t(:,:,1,Kmm) 
    231231      ENDIF 
    232232      ! 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/STO/storng.F90

    r12377 r12724  
    5050 
    5151   ! Parameters to generate real random variates 
    52    REAL(KIND=wp), PARAMETER :: huge64=9223372036854775808.0  ! +1 
    5352   REAL(KIND=wp), PARAMETER :: zero=0.0, half=0.5, one=1.0, two=2.0 
    5453 
     
    275274      REAL(KIND=wp) :: uran 
    276275 
    277       uran = half * ( one + REAL(kiss(),wp) / huge64 ) 
     276      uran = half * ( one + REAL(kiss(),wp) / HUGE(1._wp) ) 
    278277 
    279278   END SUBROUTINE kiss_uniform 
     
    298297         rsq = two 
    299298         DO WHILE ( (rsq.GE.one).OR. (rsq.EQ.zero) ) 
    300             u1 = REAL(kiss(),wp) / huge64 
    301             u2 = REAL(kiss(),wp) / huge64 
     299            u1 = REAL(kiss(),wp) / HUGE(1._wp) 
     300            u2 = REAL(kiss(),wp) / HUGE(1._wp) 
    302301            rsq = u1*u1 + u2*u2 
    303302         ENDDO 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/TDE/tide_mod.F90

    r12343 r12724  
    171171      IF( ln_scal_load.AND.ln_read_load ) & 
    172172          &   CALL ctl_stop('Choose between ln_scal_load and ln_read_load') 
    173       IF( ln_tide_ramp.AND.((nitend-nit000+1)*rdt/rday < rn_tide_ramp_dt) )   & 
     173      IF( ln_tide_ramp.AND.((nitend-nit000+1)*rn_Dt/rday < rn_tide_ramp_dt) )   & 
    174174         &   CALL ctl_stop('rn_tide_ramp_dt must be lower than run duration') 
    175175      IF( ln_tide_ramp.AND.(rn_tide_ramp_dt<0.) ) & 
     
    424424      !!---------------------------------------------------------------------- 
    425425       
    426       IF( nsec_day == NINT(0.5_wp * rdt) .OR. kt == nit000 ) THEN      ! start a new day 
     426      IF( nsec_day == NINT(0.5_wp * rn_Dt) .OR. kt == nit000 ) THEN      ! start a new day 
    427427         ! 
    428428         CALL tide_harmo(tide_components, tide_harmonics, ndt05) ! Update oscillation parameters of tidal components for start of current day 
     
    441441         IF( ln_tide_pot )   CALL tide_init_potential 
    442442         ! 
    443          rn_tide_ramp_t = (kt - nit000)*rdt !   Elapsed time in seconds 
     443         rn_tide_ramp_t = (kt - nit000)*rn_Dt !   Elapsed time in seconds 
    444444      ENDIF 
    445445      ! 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/TRA/eosbn2.F90

    r12622 r12724  
    192192      !!                   ***  ROUTINE eos_insitu  *** 
    193193      !! 
    194       !! ** Purpose :   Compute the in situ density (ratio rho/rau0) from 
     194      !! ** Purpose :   Compute the in situ density (ratio rho/rho0) from 
    195195      !!       potential temperature and salinity using an equation of state 
    196196      !!       selected in the nameos namelist 
    197197      !! 
    198       !! ** Method  :   prd(t,s,z) = ( rho(t,s,z) - rau0 ) / rau0 
     198      !! ** Method  :   prd(t,s,z) = ( rho(t,s,z) - rho0 ) / rho0 
    199199      !!         with   prd    in situ density anomaly      no units 
    200200      !!                t      TEOS10: CT or EOS80: PT      Celsius 
     
    202202      !!                z      depth                        meters 
    203203      !!                rho    in situ density              kg/m^3 
    204       !!                rau0   reference density            kg/m^3 
     204      !!                rho0   reference density            kg/m^3 
    205205      !! 
    206206      !!     ln_teos10 : polynomial TEOS-10 equation of state is used for rho(t,s,z). 
     
    211211      !! 
    212212      !!     ln_seos : simplified equation of state 
    213       !!              prd(t,s,z) = ( -a0*(1+lambda/2*(T-T0)+mu*z+nu*(S-S0))*(T-T0) + b0*(S-S0) ) / rau0 
     213      !!              prd(t,s,z) = ( -a0*(1+lambda/2*(T-T0)+mu*z+nu*(S-S0))*(T-T0) + b0*(S-S0) ) / rho0 
    214214      !!              linear case function of T only: rn_alpha<>0, other coefficients = 0 
    215215      !!              linear eos function of T and S: rn_alpha and rn_beta<>0, other coefficients=0 
     
    268268            zn  = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 
    269269            ! 
    270             prd(ji,jj,jk) = (  zn * r1_rau0 - 1._wp  ) * ztm  ! density anomaly (masked) 
     270            prd(ji,jj,jk) = (  zn * r1_rho0 - 1._wp  ) * ztm  ! density anomaly (masked) 
    271271            ! 
    272272         END_3D 
     
    284284               &  - rn_nu * zt * zs 
    285285               !                                  
    286             prd(ji,jj,jk) = zn * r1_rau0 * ztm                ! density anomaly (masked) 
     286            prd(ji,jj,jk) = zn * r1_rho0 * ztm                ! density anomaly (masked) 
    287287         END_3D 
    288288         ! 
     
    300300      !!                  ***  ROUTINE eos_insitu_pot  *** 
    301301      !! 
    302       !! ** Purpose :   Compute the in situ density (ratio rho/rau0) and the 
     302      !! ** Purpose :   Compute the in situ density (ratio rho/rho0) and the 
    303303      !!      potential volumic mass (Kg/m3) from potential temperature and 
    304304      !!      salinity fields using an equation of state selected in the 
     
    380380                  prhop(ji,jj,jk) = prhop(ji,jj,jk) + zn0_sto(jsmp)                      ! potential density referenced at the surface 
    381381                  ! 
    382                   prd(ji,jj,jk) = prd(ji,jj,jk) + (  zn_sto(jsmp) * r1_rau0 - 1._wp  )   ! density anomaly (masked) 
     382                  prd(ji,jj,jk) = prd(ji,jj,jk) + (  zn_sto(jsmp) * r1_rho0 - 1._wp  )   ! density anomaly (masked) 
    383383               END DO 
    384384               prhop(ji,jj,jk) = 0.5_wp * prhop(ji,jj,jk) * ztm / nn_sto_eos 
     
    420420               prhop(ji,jj,jk) = zn0 * ztm                           ! potential density referenced at the surface 
    421421               ! 
    422                prd(ji,jj,jk) = (  zn * r1_rau0 - 1._wp  ) * ztm      ! density anomaly (masked) 
     422               prd(ji,jj,jk) = (  zn * r1_rho0 - 1._wp  ) * ztm      ! density anomaly (masked) 
    423423            END_3D 
    424424         ENDIF 
     
    435435               &  + rn_b0 * ( 1._wp - 0.5_wp*rn_lambda2*zs ) * zs   & 
    436436               &  - rn_nu * zt * zs 
    437             prhop(ji,jj,jk) = ( rau0 + zn ) * ztm 
     437            prhop(ji,jj,jk) = ( rho0 + zn ) * ztm 
    438438            !                                                     ! density anomaly (masked) 
    439439            zn = zn - ( rn_a0 * rn_mu1 * zt + rn_b0 * rn_mu2 * zs ) * zh 
    440             prd(ji,jj,jk) = zn * r1_rau0 * ztm 
     440            prd(ji,jj,jk) = zn * r1_rho0 * ztm 
    441441            ! 
    442442         END_3D 
     
    455455      !!                  ***  ROUTINE eos_insitu_2d  *** 
    456456      !! 
    457       !! ** Purpose :   Compute the in situ density (ratio rho/rau0) from 
     457      !! ** Purpose :   Compute the in situ density (ratio rho/rho0) from 
    458458      !!      potential temperature and salinity using an equation of state 
    459459      !!      selected in the nameos namelist. * 2D field case 
     
    509509            zn  = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 
    510510            ! 
    511             prd(ji,jj) = zn * r1_rau0 - 1._wp               ! unmasked in situ density anomaly 
     511            prd(ji,jj) = zn * r1_rho0 - 1._wp               ! unmasked in situ density anomaly 
    512512            ! 
    513513         END_2D 
     
    525525               &  - rn_nu * zt * zs 
    526526               ! 
    527             prd(ji,jj) = zn * r1_rau0               ! unmasked in situ density anomaly 
     527            prd(ji,jj) = zn * r1_rho0               ! unmasked in situ density anomaly 
    528528            ! 
    529529         END_2D 
     
    589589            zn  = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 
    590590            ! 
    591             pab(ji,jj,jk,jp_tem) = zn * r1_rau0 * ztm 
     591            pab(ji,jj,jk,jp_tem) = zn * r1_rho0 * ztm 
    592592            ! 
    593593            ! beta 
     
    610610            zn  = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 
    611611            ! 
    612             pab(ji,jj,jk,jp_sal) = zn / zs * r1_rau0 * ztm 
     612            pab(ji,jj,jk,jp_sal) = zn / zs * r1_rho0 * ztm 
    613613            ! 
    614614         END_3D 
     
    623623            ! 
    624624            zn  = rn_a0 * ( 1._wp + rn_lambda1*zt + rn_mu1*zh ) + rn_nu*zs 
    625             pab(ji,jj,jk,jp_tem) = zn * r1_rau0 * ztm   ! alpha 
     625            pab(ji,jj,jk,jp_tem) = zn * r1_rho0 * ztm   ! alpha 
    626626            ! 
    627627            zn  = rn_b0 * ( 1._wp - rn_lambda2*zs - rn_mu2*zh ) - rn_nu*zt 
    628             pab(ji,jj,jk,jp_sal) = zn * r1_rau0 * ztm   ! beta 
     628            pab(ji,jj,jk,jp_sal) = zn * r1_rho0 * ztm   ! beta 
    629629            ! 
    630630         END_3D 
     
    695695            zn  = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 
    696696            ! 
    697             pab(ji,jj,jp_tem) = zn * r1_rau0 
     697            pab(ji,jj,jp_tem) = zn * r1_rho0 
    698698            ! 
    699699            ! beta 
     
    716716            zn  = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 
    717717            ! 
    718             pab(ji,jj,jp_sal) = zn / zs * r1_rau0 
     718            pab(ji,jj,jp_sal) = zn / zs * r1_rho0 
    719719            ! 
    720720            ! 
     
    730730            ! 
    731731            zn  = rn_a0 * ( 1._wp + rn_lambda1*zt + rn_mu1*zh ) + rn_nu*zs 
    732             pab(ji,jj,jp_tem) = zn * r1_rau0   ! alpha 
     732            pab(ji,jj,jp_tem) = zn * r1_rho0   ! alpha 
    733733            ! 
    734734            zn  = rn_b0 * ( 1._wp - rn_lambda2*zs - rn_mu2*zh ) - rn_nu*zt 
    735             pab(ji,jj,jp_sal) = zn * r1_rau0   ! beta 
     735            pab(ji,jj,jp_sal) = zn * r1_rho0   ! beta 
    736736            ! 
    737737         END_2D 
     
    800800         zn  = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 
    801801         ! 
    802          pab(jp_tem) = zn * r1_rau0 
     802         pab(jp_tem) = zn * r1_rho0 
    803803         ! 
    804804         ! beta 
     
    821821         zn  = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 
    822822         ! 
    823          pab(jp_sal) = zn / zs * r1_rau0 
     823         pab(jp_sal) = zn / zs * r1_rho0 
    824824         ! 
    825825         ! 
     
    832832         ! 
    833833         zn  = rn_a0 * ( 1._wp + rn_lambda1*zt + rn_mu1*zh ) + rn_nu*zs 
    834          pab(jp_tem) = zn * r1_rau0   ! alpha 
     834         pab(jp_tem) = zn * r1_rho0   ! alpha 
    835835         ! 
    836836         zn  = rn_b0 * ( 1._wp - rn_lambda2*zs - rn_mu2*zh ) - rn_nu*zt 
    837          pab(jp_sal) = zn * r1_rau0   ! beta 
     837         pab(jp_sal) = zn * r1_rho0   ! beta 
    838838         ! 
    839839      CASE DEFAULT 
     
    10531053      !! ** Method  :   PE is defined analytically as the vertical  
    10541054      !!                   primitive of EOS times -g integrated between 0 and z>0. 
    1055       !!                pen is the nonlinear bsq-PE anomaly: pen = ( PE - rau0 gz ) / rau0 gz - rd 
     1055      !!                pen is the nonlinear bsq-PE anomaly: pen = ( PE - rho0 gz ) / rho0 gz - rd 
    10561056      !!                                                      = 1/z * /int_0^z rd dz - rd  
    10571057      !!                                where rd is the density anomaly (see eos_rhd function) 
    10581058      !!                ab_pe are partial derivatives of PE anomaly with respect to T and S: 
    1059       !!                    ab_pe(1) = - 1/(rau0 gz) * dPE/dT + drd/dT = - d(pen)/dT 
    1060       !!                    ab_pe(2) =   1/(rau0 gz) * dPE/dS + drd/dS =   d(pen)/dS 
     1059      !!                    ab_pe(1) = - 1/(rho0 gz) * dPE/dT + drd/dT = - d(pen)/dT 
     1060      !!                    ab_pe(2) =   1/(rho0 gz) * dPE/dS + drd/dS =   d(pen)/dS 
    10611061      !! 
    10621062      !! ** Action  : - pen         : PE anomaly given at T-points 
     
    11041104            zn  = ( zn2 * zh + zn1 ) * zh + zn0 
    11051105            ! 
    1106             ppen(ji,jj,jk)  = zn * zh * r1_rau0 * ztm 
     1106            ppen(ji,jj,jk)  = zn * zh * r1_rho0 * ztm 
    11071107            ! 
    11081108            ! alphaPE non-linear anomaly 
     
    11191119            zn  = ( zn2 * zh + zn1 ) * zh + zn0 
    11201120            !                               
    1121             pab_pe(ji,jj,jk,jp_tem) = zn * zh * r1_rau0 * ztm 
     1121            pab_pe(ji,jj,jk,jp_tem) = zn * zh * r1_rho0 * ztm 
    11221122            ! 
    11231123            ! betaPE non-linear anomaly 
     
    11341134            zn  = ( zn2 * zh + zn1 ) * zh + zn0 
    11351135            !                               
    1136             pab_pe(ji,jj,jk,jp_sal) = zn / zs * zh * r1_rau0 * ztm 
     1136            pab_pe(ji,jj,jk,jp_sal) = zn / zs * zh * r1_rho0 * ztm 
    11371137            ! 
    11381138         END_3D 
     
    11451145            zh  = gdept(ji,jj,jk,Kmm)              ! depth in meters  at t-point 
    11461146            ztm = tmask(ji,jj,jk)                ! tmask 
    1147             zn  = 0.5_wp * zh * r1_rau0 * ztm 
     1147            zn  = 0.5_wp * zh * r1_rho0 * ztm 
    11481148            !                                    ! Potential Energy 
    11491149            ppen(ji,jj,jk) = ( rn_a0 * rn_mu1 * zt + rn_b0 * rn_mu2 * zs ) * zn 
     
    11871187      IF(lwm) WRITE( numond, nameos ) 
    11881188      ! 
    1189       rau0        = 1026._wp                 !: volumic mass of reference     [kg/m3] 
     1189      rho0        = 1026._wp                 !: volumic mass of reference     [kg/m3] 
    11901190      rcp         = 3991.86795711963_wp      !: heat capacity     [J/K] 
    11911191      ! 
     
    15991599            WRITE(numout,*) '   ==>>>   use of simplified eos:    ' 
    16001600            WRITE(numout,*) '              rhd(dT=T-10,dS=S-35,Z) = [-a0*(1+lambda1/2*dT+mu1*Z)*dT ' 
    1601             WRITE(numout,*) '                                       + b0*(1+lambda2/2*dT+mu2*Z)*dS - nu*dT*dS] / rau0' 
     1601            WRITE(numout,*) '                                       + b0*(1+lambda2/2*dT+mu2*Z)*dS - nu*dT*dS] / rho0' 
    16021602            WRITE(numout,*) '              with the following coefficients :' 
    16031603            WRITE(numout,*) '                 thermal exp. coef.    rn_a0      = ', rn_a0 
     
    16181618      END SELECT 
    16191619      ! 
    1620       rau0_rcp    = rau0 * rcp  
    1621       r1_rau0     = 1._wp / rau0 
     1620      rho0_rcp    = rho0 * rcp  
     1621      r1_rho0     = 1._wp / rho0 
    16221622      r1_rcp      = 1._wp / rcp 
    1623       r1_rau0_rcp = 1._wp / rau0_rcp  
     1623      r1_rho0_rcp = 1._wp / rho0_rcp  
    16241624      ! 
    16251625      IF(lwp) THEN 
     
    16361636      IF(lwp) WRITE(numout,*) 
    16371637      IF(lwp) WRITE(numout,*) '   Associated physical constant' 
    1638       IF(lwp) WRITE(numout,*) '      volumic mass of reference           rau0  = ', rau0   , ' kg/m^3' 
    1639       IF(lwp) WRITE(numout,*) '      1. / rau0                        r1_rau0  = ', r1_rau0, ' m^3/kg' 
     1638      IF(lwp) WRITE(numout,*) '      volumic mass of reference           rho0  = ', rho0   , ' kg/m^3' 
     1639      IF(lwp) WRITE(numout,*) '      1. / rho0                        r1_rho0  = ', r1_rho0, ' m^3/kg' 
    16401640      IF(lwp) WRITE(numout,*) '      ocean specific heat                 rcp   = ', rcp    , ' J/Kelvin' 
    1641       IF(lwp) WRITE(numout,*) '      rau0 * rcp                       rau0_rcp = ', rau0_rcp 
    1642       IF(lwp) WRITE(numout,*) '      1. / ( rau0 * rcp )           r1_rau0_rcp = ', r1_rau0_rcp 
     1641      IF(lwp) WRITE(numout,*) '      rho0 * rcp                       rho0_rcp = ', rho0_rcp 
     1642      IF(lwp) WRITE(numout,*) '      1. / ( rho0 * rcp )           r1_rho0_rcp = ', r1_rho0_rcp 
    16431643      ! 
    16441644   END SUBROUTINE eos_init 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/TRA/traadv.F90

    r12624 r12724  
    9393      IF( ln_timing )   CALL timing_start('tra_adv') 
    9494      ! 
    95       !                                          ! set time step 
    96       IF( neuler == 0 .AND. kt == nit000 ) THEN   ;   r2dt =         rdt   ! at nit000             (Euler) 
    97       ELSEIF( kt <= nit000 + 1 )           THEN   ;   r2dt = 2._wp * rdt   ! at nit000 or nit000+1 (Leapfrog) 
    98       ENDIF 
    99       ! 
    10095      !                                         !==  effective transport  ==! 
    10196      zuu(:,:,jpk) = 0._wp 
     
    153148         CALL tra_adv_cen    ( kt, nit000, 'TRA',         zuu, zvv, zww, Kmm, pts, jpts, Krhs, nn_cen_h, nn_cen_v ) 
    154149      CASE ( np_FCT )                                 ! FCT scheme      : 2nd / 4th order 
    155          CALL tra_adv_fct    ( kt, nit000, 'TRA', r2dt, zuu, zvv, zww, Kbb, Kmm, pts, jpts, Krhs, nn_fct_h, nn_fct_v ) 
     150         CALL tra_adv_fct    ( kt, nit000, 'TRA', rDt, zuu, zvv, zww, Kbb, Kmm, pts, jpts, Krhs, nn_fct_h, nn_fct_v ) 
    156151      CASE ( np_MUS )                                 ! MUSCL 
    157          CALL tra_adv_mus    ( kt, nit000, 'TRA', r2dt, zuu, zvv, zww, Kbb, Kmm, pts, jpts, Krhs, ln_mus_ups )  
     152         CALL tra_adv_mus    ( kt, nit000, 'TRA', rDt, zuu, zvv, zww, Kbb, Kmm, pts, jpts, Krhs, ln_mus_ups )  
    158153      CASE ( np_UBS )                                 ! UBS 
    159          CALL tra_adv_ubs    ( kt, nit000, 'TRA', r2dt, zuu, zvv, zww, Kbb, Kmm, pts, jpts, Krhs, nn_ubs_v   ) 
     154         CALL tra_adv_ubs    ( kt, nit000, 'TRA', rDt, zuu, zvv, zww, Kbb, Kmm, pts, jpts, Krhs, nn_ubs_v   ) 
    160155      CASE ( np_QCK )                                 ! QUICKEST 
    161          CALL tra_adv_qck    ( kt, nit000, 'TRA', r2dt, zuu, zvv, zww, Kbb, Kmm, pts, jpts, Krhs ) 
     156         CALL tra_adv_qck    ( kt, nit000, 'TRA', rDt, zuu, zvv, zww, Kbb, Kmm, pts, jpts, Krhs ) 
    162157      ! 
    163158      END SELECT 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/TRA/traadv_fct.F90

    r12590 r12724  
    2020   USE diaptr         ! poleward transport diagnostics 
    2121   USE diaar5         ! AR5 diagnostics 
    22    USE phycst  , ONLY : rau0_rcp 
     22   USE phycst  , ONLY : rho0_rcp 
    2323   USE zdf_oce , ONLY : ln_zad_Aimp 
    2424   ! 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/TRA/traatf.F90

    r12680 r12724  
    114114      IF( ln_bdy )   CALL bdy_tra( kt, Kbb, pts, Kaa )  ! BDY open boundaries 
    115115 
    116       ! set time step size (Euler/Leapfrog) 
    117       IF( neuler == 0 .AND. kt == nit000 ) THEN   ;   r2dt =        rdt   ! at nit000             (Euler) 
    118       ELSEIF( kt <= nit000 + 1 )           THEN   ;   r2dt = 2._wp* rdt   ! at nit000 or nit000+1 (Leapfrog) 
    119       ENDIF 
    120  
    121116      ! trends computation initialisation 
    122117      IF( l_trdtra )   THEN 
     
    129124         ENDIF 
    130125         ! total trend for the non-time-filtered variables. 
    131          zfact = 1.0 / rdt 
     126         zfact = 1.0 / rn_Dt 
    132127         ! G Nurser 23 Mar 2017. Recalculate trend as Delta(e3t*T)/e3tn; e3tn cancel from pts(Kmm) terms 
    133128         DO jk = 1, jpkm1 
     
    145140      ENDIF 
    146141 
    147       IF( neuler == 0 .AND. kt == nit000 ) THEN       ! Euler time-stepping 
     142      IF( l_1st_euler ) THEN       ! Euler time-stepping  
    148143         ! 
    149144         IF (l_trdtra .AND. .NOT. ln_linssh ) THEN   ! Zero Asselin filter contribution must be explicitly written out since for vvl 
     
    157152      ELSE                                            ! Leap-Frog + Asselin filter time stepping 
    158153         ! 
    159          IF( ln_linssh ) THEN   ;   CALL tra_atf_fix( kt, Kbb, Kmm, Kaa, nit000,      'TRA', pts, jpts )  ! linear free surface 
    160          ELSE                   ;   CALL tra_atf_vvl( kt, Kbb, Kmm, Kaa, nit000, rdt, 'TRA', pts, sbc_tsc, sbc_tsc_b, jpts )  ! non-linear free surface 
     154         IF( ln_linssh ) THEN   ;   CALL tra_atf_fix( kt, Kbb, Kmm, Kaa, nit000,        'TRA', pts, jpts )  ! linear free surface  
     155         ELSE                   ;   CALL tra_atf_vvl( kt, Kbb, Kmm, Kaa, nit000, rn_Dt, 'TRA', pts, sbc_tsc, sbc_tsc_b, jpts )  ! non-linear free surface 
    161156         ENDIF 
    162157         ! 
     
    167162      ENDIF 
    168163      ! 
    169       IF( l_trdtra .AND. ln_linssh ) THEN      ! trend of the Asselin filter (tb filtered - tb)/dt 
    170          zfact = 1._wp / r2dt 
     164      IF( l_trdtra .AND. ln_linssh ) THEN      ! trend of the Asselin filter (tb filtered - tb)/dt      
    171165         DO jk = 1, jpkm1 
    172             ztrdt(:,:,jk) = ( pts(:,:,jk,jp_tem,Kmm) - ztrdt(:,:,jk) ) * zfact 
    173             ztrds(:,:,jk) = ( pts(:,:,jk,jp_sal,Kmm) - ztrds(:,:,jk) ) * zfact 
     166            ztrdt(:,:,jk) = ( pts(:,:,jk,jp_tem,Kmm) - ztrdt(:,:,jk) ) * r1_Dt 
     167            ztrds(:,:,jk) = ( pts(:,:,jk,jp_sal,Kmm) - ztrds(:,:,jk) ) * r1_Dt 
    174168         END DO 
    175169         CALL trd_tra( kt, Kmm, Kaa, 'TRA', jp_tem, jptra_atf, ztrdt ) 
     
    220214            ztd = pt(ji,jj,jk,jn,Kaa) - 2._wp * ztn + pt(ji,jj,jk,jn,Kbb)  ! time laplacian on tracers 
    221215            ! 
    222             pt(ji,jj,jk,jn,Kmm) = ztn + atfp * ztd                      ! pt <-- filtered pt 
     216            pt(ji,jj,jk,jn,Kmm) = ztn + rn_atfp * ztd                      ! pt <-- filtered pt 
    223217         END_3D 
    224218         ! 
     
    235229      !! 
    236230      !! ** Method  : - Apply a thickness weighted Asselin time filter on now fields. 
    237       !!             pt(Kmm)  = ( e3t_Kmm*pt(Kmm) + atfp*[ e3t_Kbb*pt(Kbb) - 2 e3t_Kmm*pt(Kmm) + e3t_Kaa*pt(Kaa) ] ) 
    238       !!                       /( e3t_Kmm         + atfp*[ e3t_Kbb         - 2 e3t_Kmm         + e3t_Kaa    ] ) 
     231      !!             pt(Kmm)  = ( e3t_Kmm*pt(Kmm) + rn_atfp*[ e3t_Kbb*pt(Kbb) - 2 e3t_Kmm*pt(Kmm) + e3t_Kaa*pt(Kaa) ] ) 
     232      !!                       /( e3t_Kmm         + rn_atfp*[ e3t_Kbb         - 2 e3t_Kmm         + e3t_Kaa    ] ) 
    239233      !! 
    240234      !! ** Action  : - pt(Kmm) ready for the next time step 
     
    278272      ENDIF 
    279273      zfact = 1._wp / p2dt 
    280       zfact1 = atfp * p2dt 
    281       zfact2 = zfact1 * r1_rau0 
     274      zfact1 = rn_atfp * p2dt 
     275      zfact2 = zfact1 * r1_rho0 
    282276      DO jn = 1, kjpt 
    283277         DO_3D_00_00( 1, jpkm1 ) 
     
    293287            ztc_d  = ztc_a  - 2. * ztc_n  + ztc_b 
    294288            ! 
    295             ze3t_f = ze3t_n + atfp * ze3t_d 
    296             ztc_f  = ztc_n  + atfp * ztc_d 
     289            ze3t_f = ze3t_n + rn_atfp * ze3t_d 
     290            ztc_f  = ztc_n  + rn_atfp * ztc_d 
    297291            ! 
    298292            ! Add asselin correction on scale factors: 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/TRA/traatfQCO.F90

    r12624 r12724  
    114114!       IF( ln_bdy )   CALL bdy_tra( kt, Kbb, pts, Kaa )  ! BDY open boundaries 
    115115 
    116       ! set time step size (Euler/Leapfrog) 
    117       IF( neuler == 0 .AND. kt == nit000 ) THEN   ;   r2dt =        rdt   ! at nit000             (Euler) 
    118       ELSEIF( kt <= nit000 + 1 )           THEN   ;   r2dt = 2._wp* rdt   ! at nit000 or nit000+1 (Leapfrog) 
    119       ENDIF 
    120  
    121116      ! trends computation initialisation 
    122117      IF( l_trdtra )   THEN 
     
    129124         ENDIF 
    130125         ! total trend for the non-time-filtered variables. 
    131          zfact = 1.0 / rdt 
     126         zfact = 1.0 / rn_Dt 
    132127         ! G Nurser 23 Mar 2017. Recalculate trend as Delta(e3t*T)/e3tn; e3tn cancel from pts(Kmm) terms 
    133128         DO jk = 1, jpkm1 
     
    149144      ENDIF 
    150145 
    151       IF( neuler == 0 .AND. kt == nit000 ) THEN       ! Euler time-stepping 
     146      IF( l_1st_euler ) THEN       ! Euler time-stepping 
    152147         ! 
    153148         IF (l_trdtra .AND. .NOT. ln_linssh ) THEN   ! Zero Asselin filter contribution must be explicitly written out since for vvl 
     
    161156      ELSE                                            ! Leap-Frog + Asselin filter time stepping 
    162157         ! 
    163          IF ( ln_linssh ) THEN   ;   CALL tra_atf_fix_lf( kt, Kbb, Kmm, Kaa, nit000,      'TRA', pts, jpts )  ! linear free surface 
    164          ELSE                    ;   CALL tra_atf_qco_lf( kt, Kbb, Kmm, Kaa, nit000, rdt, 'TRA', pts, sbc_tsc, sbc_tsc_b, jpts )  ! non-linear free surface 
     158         IF ( ln_linssh ) THEN   ;   CALL tra_atf_fix_lf( kt, Kbb, Kmm, Kaa, nit000,        'TRA', pts, jpts )  ! linear free surface 
     159         ELSE                    ;   CALL tra_atf_qco_lf( kt, Kbb, Kmm, Kaa, nit000, rn_Dt, 'TRA', pts, sbc_tsc, sbc_tsc_b, jpts )  ! non-linear free surface 
    165160         ENDIF 
    166161         ! 
     
    172167      ! 
    173168      IF( l_trdtra .AND. ln_linssh ) THEN      ! trend of the Asselin filter (tb filtered - tb)/dt 
    174          zfact = 1._wp / r2dt 
    175169         DO jk = 1, jpkm1 
    176             ztrdt(:,:,jk) = ( pts(:,:,jk,jp_tem,Kmm) - ztrdt(:,:,jk) ) * zfact 
    177             ztrds(:,:,jk) = ( pts(:,:,jk,jp_sal,Kmm) - ztrds(:,:,jk) ) * zfact 
     170            ztrdt(:,:,jk) = ( pts(:,:,jk,jp_tem,Kmm) - ztrdt(:,:,jk) ) * r1_Dt 
     171            ztrds(:,:,jk) = ( pts(:,:,jk,jp_sal,Kmm) - ztrds(:,:,jk) ) * r1_Dt 
    178172         END DO 
    179173         CALL trd_tra( kt, Kmm, Kaa, 'TRA', jp_tem, jptra_atf, ztrdt ) 
     
    224218            ztd = pt(ji,jj,jk,jn,Kaa) - 2._wp * ztn + pt(ji,jj,jk,jn,Kbb)  ! time laplacian on tracers 
    225219            ! 
    226             pt(ji,jj,jk,jn,Kmm) = ztn + atfp * ztd                      ! pt <-- filtered pt 
     220            pt(ji,jj,jk,jn,Kmm) = ztn + rn_atfp * ztd                      ! pt <-- filtered pt 
    227221         END_3D 
    228222         ! 
     
    239233      !! 
    240234      !! ** Method  : - Apply a thickness weighted Asselin time filter on now fields. 
    241       !!             pt(Kmm)  = ( e3t_m*pt(Kmm) + atfp*[ e3t_b*pt(Kbb) - 2 e3t_m*pt(Kmm) + e3t_a*pt(Kaa) ] ) 
    242       !!                       /( e3t_m         + atfp*[ e3t_b         - 2 e3t_m         + e3t_a    ] ) 
     235      !!             pt(Kmm)  = ( e3t_m*pt(Kmm) + rn_atfp*[ e3t_b*pt(Kbb) - 2 e3t_m*pt(Kmm) + e3t_a*pt(Kaa) ] ) 
     236      !!                       /( e3t_m         + rn_atfp*[ e3t_b         - 2 e3t_m         + e3t_a    ] ) 
    243237      !! 
    244238      !! ** Action  : - pt(Kmm) ready for the next time step 
     
    282276      ENDIF 
    283277      zfact = 1._wp / p2dt 
    284       zfact1 = atfp * p2dt 
    285       zfact2 = zfact1 * r1_rau0 
     278      zfact1 = rn_atfp * p2dt 
     279      zfact2 = zfact1 * r1_rho0 
    286280      DO jn = 1, kjpt 
    287281         DO_3D_00_00( 1, jpkm1 ) 
     
    297291            ztc_d  = ztc_a  - 2. * ztc_n  + ztc_b 
    298292            ! 
    299             ztc_f  = ztc_n  + atfp * ztc_d 
     293            ztc_f  = ztc_n  + rn_atfp * ztc_d 
    300294            ! 
    301295            ! Asselin correction on scale factors is done via ssh in r3t_f 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/TRA/trabbc.F90

    r12590 r12724  
    6767      !!       ocean bottom can be computed once and is added to the temperature 
    6868      !!       trend juste above the bottom at each time step: 
    69       !!            ta = ta + Qsf / (rau0 rcp e3T) for k= mbkt 
     69      !!            ta = ta + Qsf / (rho0 rcp e3T) for k= mbkt 
    7070      !!       Where Qsf is the geothermal heat flux. 
    7171      !! 
     
    104104      ENDIF 
    105105      ! 
    106       CALL iom_put ( "hfgeou" , rau0_rcp * qgh_trd0(:,:) ) 
     106      CALL iom_put ( "hfgeou" , rho0_rcp * qgh_trd0(:,:) ) 
    107107      IF(sn_cfctl%l_prtctl)   CALL prt_ctl( tab3d_1=pts(:,:,:,jp_tem,Krhs), clinfo1=' bbc  - Ta: ', mask1=tmask, clinfo3='tra-ta' ) 
    108108      ! 
     
    164164         CASE ( 1 )                          !* constant flux 
    165165            IF(lwp) WRITE(numout,*) '   ==>>>   constant heat flux  =   ', rn_geoflx_cst 
    166             qgh_trd0(:,:) = r1_rau0_rcp * rn_geoflx_cst 
     166            qgh_trd0(:,:) = r1_rho0_rcp * rn_geoflx_cst 
    167167            ! 
    168168         CASE ( 2 )                          !* variable geothermal heat flux : read the geothermal fluxes in mW/m2 
     
    181181 
    182182            CALL fld_read( nit000, 1, sf_qgh )                         ! Read qgh data 
    183             qgh_trd0(:,:) = r1_rau0_rcp * sf_qgh(1)%fnow(:,:,1) * 1.e-3 ! conversion in W/m2 
     183            qgh_trd0(:,:) = r1_rho0_rcp * sf_qgh(1)%fnow(:,:,1) * 1.e-3 ! conversion in W/m2 
    184184            ! 
    185185         CASE DEFAULT 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/TRA/traldf_iso.F90

    r12622 r12724  
    110110      REAL(wp) ::  zmsku, zahu_w, zabe1, zcof1, zcoef3   ! local scalars 
    111111      REAL(wp) ::  zmskv, zahv_w, zabe2, zcof2, zcoef4   !   -      - 
    112       REAL(wp) ::  zcoef0, ze3w_2, zsign, z2dt, z1_2dt   !   -      - 
     112      REAL(wp) ::  zcoef0, ze3w_2, zsign                 !   -      - 
    113113      REAL(wp), DIMENSION(jpi,jpj)     ::   zdkt, zdk1t, z2d 
    114114      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zdit, zdjt, zftu, zftv, ztfw 
     
    130130         &                        iom_use("uadv_salttr") .OR. iom_use("vadv_salttr")  ) )   l_hst = .TRUE. 
    131131      ! 
    132       !                                            ! set time step size (Euler/Leapfrog) 
    133       IF( neuler == 0 .AND. kt == nit000 ) THEN   ;   z2dt =     rdt      ! at nit000   (Euler) 
    134       ELSE                                        ;   z2dt = 2.* rdt      !             (Leapfrog) 
    135       ENDIF 
    136       z1_2dt = 1._wp / z2dt 
    137132      ! 
    138133      IF( kpass == 1 ) THEN   ;   zsign =  1._wp      ! bilaplacian operator require a minus sign (eddy diffusivity >0) 
     
    182177               DO_3D_10_10( 2, jpkm1 ) 
    183178                  ze3w_2 = e3w(ji,jj,jk,Kmm) * e3w(ji,jj,jk,Kmm) 
    184                   zcoef0 = z2dt * (  akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ze3w_2  ) 
    185                   akz(ji,jj,jk) = MAX( zcoef0 - 0.5_wp , 0._wp ) * ze3w_2 * z1_2dt 
     179                  zcoef0 = rDt * (  akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ze3w_2  ) 
     180                  akz(ji,jj,jk) = MAX( zcoef0 - 0.5_wp , 0._wp ) * ze3w_2 * r1_Dt 
    186181               END_3D 
    187182           ENDIF 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/TRA/traldf_triad.F90

    r12622 r12724  
    8787      INTEGER  ::  ip,jp,kp         ! dummy loop indices 
    8888      INTEGER  ::  ierr            ! local integer 
    89       REAL(wp) ::  zmsku, zabe1, zcof1, zcoef3          ! local scalars 
    90       REAL(wp) ::  zmskv, zabe2, zcof2, zcoef4          !   -      - 
    91       REAL(wp) ::  zcoef0, ze3w_2, zsign, z2dt, z1_2dt  !   -      - 
     89      REAL(wp) ::  zmsku, zabe1, zcof1, zcoef3    ! local scalars 
     90      REAL(wp) ::  zmskv, zabe2, zcof2, zcoef4    !   -      - 
     91      REAL(wp) ::  zcoef0, ze3w_2, zsign          !   -      - 
    9292      ! 
    9393      REAL(wp) ::   zslope_skew, zslope_iso, zslope2, zbu, zbv 
     
    112112      l_hst = .FALSE. 
    113113      l_ptr = .FALSE. 
    114       IF( cdtype == 'TRA' .AND. ( iom_use( 'sophtldf' ) .OR. iom_use( 'sopstldf' ) ) )      l_ptr = .TRUE. 
    115       IF( cdtype == 'TRA' .AND. ( iom_use("uadv_heattr") .OR. iom_use("vadv_heattr") .OR. & 
    116          &                        iom_use("uadv_salttr") .OR. iom_use("vadv_salttr")  ) )   l_hst = .TRUE. 
    117       ! 
    118       !                                                        ! set time step size (Euler/Leapfrog) 
    119       IF( neuler == 0 .AND. kt == kit000 ) THEN   ;   z2dt =     rdt      ! at nit000   (Euler) 
    120       ELSE                                        ;   z2dt = 2.* rdt      !             (Leapfrog) 
     114      IF( cdtype == 'TRA' ) THEN 
     115         IF( iom_use( 'sophtldf' ) .OR. iom_use( 'sopstldf') )      l_ptr = .TRUE.  
     116         IF( iom_use("uadv_heattr") .OR. iom_use("vadv_heattr") .OR.                   & 
     117         &   iom_use("uadv_salttr") .OR. iom_use("vadv_salttr")  )   l_hst = .TRUE. 
    121118      ENDIF 
    122       z1_2dt = 1._wp / z2dt 
    123119      ! 
    124120      IF( kpass == 1 ) THEN   ;   zsign =  1._wp      ! bilaplacian operator require a minus sign (eddy diffusivity >0) 
     
    193189               DO_3D_10_10( 2, jpkm1 ) 
    194190                  ze3w_2 = e3w(ji,jj,jk,Kmm) * e3w(ji,jj,jk,Kmm) 
    195                   zcoef0 = z2dt * (  akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ze3w_2  ) 
    196                   akz(ji,jj,jk) = MAX( zcoef0 - 0.5_wp , 0._wp ) * ze3w_2 * z1_2dt 
     191                  zcoef0 = rDt * (  akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ze3w_2  ) 
     192                  akz(ji,jj,jk) = MAX( zcoef0 - 0.5_wp , 0._wp ) * ze3w_2 * r1_Dt 
    197193               END_3D 
    198194           ENDIF 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/TRA/tramle.F90

    r12590 r12724  
    4141 
    4242   REAL(wp) ::   r5_21 = 5.e0 / 21.e0   ! factor used in mle streamfunction computation 
    43    REAL(wp) ::   rb_c                   ! ML buoyancy criteria = g rho_c /rau0 where rho_c is defined in zdfmld 
     43   REAL(wp) ::   rb_c                   ! ML buoyancy criteria = g rho_c /rho0 where rho_c is defined in zdfmld 
    4444   REAL(wp) ::   rc_f                   ! MLE coefficient (= rn_ce / (5 km * fo) ) in nn_mle=1 case 
    4545 
     
    113113         zc = e3t(ji,jj,jk,Kmm) * REAL( MIN( MAX( 0, inml_mle(ji,jj)-jk ) , 1  )  )    ! zc being 0 outside the ML t-points 
    114114         zmld(ji,jj) = zmld(ji,jj) + zc 
    115          zbm (ji,jj) = zbm (ji,jj) + zc * (rau0 - rhop(ji,jj,jk) ) * r1_rau0 
     115         zbm (ji,jj) = zbm (ji,jj) + zc * (rho0 - rhop(ji,jj,jk) ) * r1_rho0 
    116116         zn2 (ji,jj) = zn2 (ji,jj) + zc * (rn2(ji,jj,jk)+rn2(ji,jj,jk+1))*0.5_wp 
    117117      END_3D 
     
    274274      IF( ln_mle ) THEN                ! MLE initialisation 
    275275         ! 
    276          rb_c = grav * rn_rho_c_mle /rau0        ! Mixed Layer buoyancy criteria 
     276         rb_c = grav * rn_rho_c_mle /rho0        ! Mixed Layer buoyancy criteria 
    277277         IF(lwp) WRITE(numout,*) 
    278278         IF(lwp) WRITE(numout,*) '      ML buoyancy criteria = ', rb_c, ' m/s2 ' 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/TRA/tranpc.F90

    r12590 r12724  
    6868      LOGICAL  ::   l_bottom_reached, l_column_treated 
    6969      REAL(wp) ::   zta, zalfa, zsum_temp, zsum_alfa, zaw, zdz, zsum_z 
    70       REAL(wp) ::   zsa, zbeta, zsum_sali, zsum_beta, zbw, zrw, z1_r2dt 
     70      REAL(wp) ::   zsa, zbeta, zsum_sali, zsum_beta, zbw, zrw, z1_rDt 
    7171      REAL(wp), PARAMETER ::   zn2_zero = 1.e-14_wp             ! acceptance criteria for neutrality (N2==0) 
    7272      REAL(wp), DIMENSION(        jpk     )   ::   zvn2         ! vertical profile of N2 at 1 given point... 
     
    302302         ! 
    303303         IF( l_trdtra ) THEN         ! send the Non penetrative mixing trends for diagnostic 
    304             z1_r2dt = 1._wp / (2._wp * rdt) 
    305             ztrdt(:,:,:) = ( pts(:,:,:,jp_tem,Kaa) - ztrdt(:,:,:) ) * z1_r2dt 
    306             ztrds(:,:,:) = ( pts(:,:,:,jp_sal,Kaa) - ztrds(:,:,:) ) * z1_r2dt 
     304            z1_rDt = 1._wp / (2._wp * rn_Dt) 
     305            ztrdt(:,:,:) = ( pts(:,:,:,jp_tem,Kaa) - ztrdt(:,:,:) ) * z1_rDt 
     306            ztrds(:,:,:) = ( pts(:,:,:,jp_sal,Kaa) - ztrds(:,:,:) ) * z1_rDt 
    307307            CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_tem, jptra_npc, ztrdt ) 
    308308            CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_sal, jptra_npc, ztrds ) 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/TRA/traqsr.F90

    r12590 r12724  
    8888      !!         I(k) = Qsr*( rn_abs*EXP(z(k)/rn_si0) + (1.-rn_abs)*EXP(z(k)/rn_si1) ) 
    8989      !!         The temperature trend associated with the solar radiation penetration 
    90       !!         is given by : zta = 1/e3t dk[ I ] / (rau0*Cp) 
     90      !!         is given by : zta = 1/e3t dk[ I ] / (rho0*Cp) 
    9191      !!         At the bottom, boudary condition for the radiation is no flux : 
    9292      !!      all heat which has not been absorbed in the above levels is put 
     
    136136      !                         !-----------------------------------! 
    137137      IF( kt == nit000 ) THEN          !==  1st time step  ==! 
    138 !!gm case neuler  not taken into account.... 
    139          IF( ln_rstart .AND. iom_varid( numror, 'qsr_hc_b', ldstop = .FALSE. ) > 0 ) THEN    ! read in restart 
     138         IF( ln_rstart .AND. iom_varid( numror, 'qsr_hc_b', ldstop = .FALSE. ) > 0  .AND. .NOT.l_1st_euler ) THEN    ! read in restart 
    140139            IF(lwp) WRITE(numout,*) '          nit000-1 qsr tracer content forcing field read in the restart file' 
    141140            z1_2 = 0.5_wp 
     
    157156         ! 
    158157         DO jk = 1, nksr 
    159             qsr_hc(:,:,jk) = r1_rau0_rcp * ( etot3(:,:,jk) - etot3(:,:,jk+1) ) 
     158            qsr_hc(:,:,jk) = r1_rho0_rcp * ( etot3(:,:,jk) - etot3(:,:,jk+1) ) 
    160159         END DO 
    161160         ! 
     
    229228         ! 
    230229         DO_3D_00_00( 1, nksr ) 
    231             qsr_hc(ji,jj,jk) = r1_rau0_rcp * ( zea(ji,jj,jk) - zea(ji,jj,jk+1) ) 
     230            qsr_hc(ji,jj,jk) = r1_rho0_rcp * ( zea(ji,jj,jk) - zea(ji,jj,jk+1) ) 
    232231         END_3D 
    233232         ! 
     
    236235      CASE( np_2BD  )            !==  2-bands fluxes  ==! 
    237236         ! 
    238          zz0 =        rn_abs   * r1_rau0_rcp      ! surface equi-partition in 2-bands 
    239          zz1 = ( 1. - rn_abs ) * r1_rau0_rcp 
     237         zz0 =        rn_abs   * r1_rho0_rcp      ! surface equi-partition in 2-bands 
     238         zz1 = ( 1. - rn_abs ) * r1_rho0_rcp 
    240239         DO_3D_00_00( 1, nksr ) 
    241240            zc0 = zz0 * EXP( -gdepw(ji,jj,jk  ,Kmm)*xsi0r ) + zz1 * EXP( -gdepw(ji,jj,jk  ,Kmm)*xsi1r ) 
     
    255254      ! sea-ice: store the 1st ocean level attenuation coefficient 
    256255      DO_2D_00_00 
    257          IF( qsr(ji,jj) /= 0._wp ) THEN   ;   fraqsr_1lev(ji,jj) = qsr_hc(ji,jj,1) / ( r1_rau0_rcp * qsr(ji,jj) ) 
     256         IF( qsr(ji,jj) /= 0._wp ) THEN   ;   fraqsr_1lev(ji,jj) = qsr_hc(ji,jj,1) / ( r1_rho0_rcp * qsr(ji,jj) ) 
    258257         ELSE                             ;   fraqsr_1lev(ji,jj) = 1._wp 
    259258         ENDIF 
     
    265264         zetot(:,:,nksr+1:jpk) = 0._wp     ! below ~400m set to zero 
    266265         DO jk = nksr, 1, -1 
    267             zetot(:,:,jk) = zetot(:,:,jk+1) + qsr_hc(:,:,jk) * rau0_rcp 
     266            zetot(:,:,jk) = zetot(:,:,jk+1) + qsr_hc(:,:,jk) * rho0_rcp 
    268267         END DO 
    269268         CALL iom_put( 'qsr3d', zetot )   ! 3D distribution of shortwave Radiation 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/TRA/trasbc.F90

    r12590 r12724  
    125125      !                             !==  Now sbc tracer content fields  ==! 
    126126      DO_2D_01_00 
    127          sbc_tsc(ji,jj,jp_tem) = r1_rau0_rcp * qns(ji,jj)   ! non solar heat flux 
    128          sbc_tsc(ji,jj,jp_sal) = r1_rau0     * sfx(ji,jj)   ! salt flux due to freezing/melting 
     127         sbc_tsc(ji,jj,jp_tem) = r1_rho0_rcp * qns(ji,jj)   ! non solar heat flux 
     128         sbc_tsc(ji,jj,jp_sal) = r1_rho0     * sfx(ji,jj)   ! salt flux due to freezing/melting 
    129129      END_2D 
    130130      IF( ln_linssh ) THEN                !* linear free surface 
    131131         DO_2D_01_00 
    132             sbc_tsc(ji,jj,jp_tem) = sbc_tsc(ji,jj,jp_tem) + r1_rau0 * emp(ji,jj) * pts(ji,jj,1,jp_tem,Kmm) 
    133             sbc_tsc(ji,jj,jp_sal) = sbc_tsc(ji,jj,jp_sal) + r1_rau0 * emp(ji,jj) * pts(ji,jj,1,jp_sal,Kmm) 
     132            sbc_tsc(ji,jj,jp_tem) = sbc_tsc(ji,jj,jp_tem) + r1_rho0 * emp(ji,jj) * pts(ji,jj,1,jp_tem,Kmm) 
     133            sbc_tsc(ji,jj,jp_sal) = sbc_tsc(ji,jj,jp_sal) + r1_rho0 * emp(ji,jj) * pts(ji,jj,1,jp_sal,Kmm) 
    134134         END_2D 
    135135         IF( iom_use('emp_x_sst') )   CALL iom_put( "emp_x_sst", emp (:,:) * pts(:,:,1,jp_tem,Kmm) ) 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/TRA/trazdf.F90

    r12590 r12724  
    6767      ENDIF 
    6868      ! 
    69       IF( neuler == 0 .AND. kt == nit000 ) THEN   ;   r2dt =      rdt   ! at nit000, =   rdt (restarting with Euler time stepping) 
    70       ELSEIF( kt <= nit000 + 1           ) THEN   ;   r2dt = 2. * rdt   ! otherwise, = 2 rdt (leapfrog) 
    71       ENDIF 
    72       ! 
    7369      IF( l_trdtra )   THEN                  !* Save ta and sa trends 
    7470         ALLOCATE( ztrdt(jpi,jpj,jpk) , ztrds(jpi,jpj,jpk) ) 
     
    7874      ! 
    7975      !                                      !* compute lateral mixing trend and add it to the general trend 
    80       CALL tra_zdf_imp( kt, nit000, 'TRA', r2dt, Kbb, Kmm, Krhs, pts, Kaa, jpts ) 
     76      CALL tra_zdf_imp( kt, nit000, 'TRA', rDt, Kbb, Kmm, Krhs, pts, Kaa, jpts )  
    8177 
    8278!!gm WHY here !   and I don't like that ! 
     
    8985      IF( l_trdtra )   THEN                      ! save the vertical diffusive trends for further diagnostics 
    9086         DO jk = 1, jpkm1 
    91             ztrdt(:,:,jk) = ( ( pts(:,:,jk,jp_tem,Kaa)*e3t(:,:,jk,Kaa)    & 
    92                &              - pts(:,:,jk,jp_tem,Kbb)*e3t(:,:,jk,Kbb) )  & 
    93                &             / (e3t(:,:,jk,Kmm)*r2dt) ) - ztrdt(:,:,jk) 
    94             ztrds(:,:,jk) = ( ( pts(:,:,jk,jp_sal,Kaa)*e3t(:,:,jk,Kaa)    & 
    95                &              - pts(:,:,jk,jp_sal,Kbb)*e3t(:,:,jk,Kbb) ) & 
    96                &             / (e3t(:,:,jk,Kmm)*r2dt) ) - ztrds(:,:,jk) 
     87            ztrdt(:,:,jk) = (   (  pts(:,:,jk,jp_tem,Kaa)*e3t(:,:,jk,Kaa)     & 
     88               &                 - pts(:,:,jk,jp_tem,Kbb)*e3t(:,:,jk,Kbb)  )  & 
     89               &              / (  e3t(:,:,jk,Kmm)*rDt  )   )                 & 
     90               &          - ztrdt(:,:,jk) 
     91            ztrds(:,:,jk) = (   (  pts(:,:,jk,jp_sal,Kaa)*e3t(:,:,jk,Kaa)     & 
     92               &                 - pts(:,:,jk,jp_sal,Kbb)*e3t(:,:,jk,Kbb)  )  & 
     93               &             / (   e3t(:,:,jk,Kmm)*rDt  )   )                 & 
     94               &          - ztrds(:,:,jk) 
    9795         END DO 
    9896!!gm this should be moved in trdtra.F90 and done on all trends 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/TRD/trddyn.F90

    r12622 r12724  
    141141                              !                                    ! wind stress trends 
    142142                              ALLOCATE( z2dx(jpi,jpj) , z2dy(jpi,jpj) ) 
    143                               z2dx(:,:) = ( utau_b(:,:) + utau(:,:) ) / ( e3u(:,:,1,Kmm) * rau0 ) 
    144                               z2dy(:,:) = ( vtau_b(:,:) + vtau(:,:) ) / ( e3v(:,:,1,Kmm) * rau0 ) 
     143                              z2dx(:,:) = ( utau_b(:,:) + utau(:,:) ) / ( e3u(:,:,1,Kmm) * rho0 ) 
     144                              z2dy(:,:) = ( vtau_b(:,:) + vtau(:,:) ) / ( e3v(:,:,1,Kmm) * rho0 ) 
    145145                              CALL iom_put( "utrd_tau", z2dx ) 
    146146                              CALL iom_put( "vtrd_tau", z2dy ) 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/TRD/trdglo.F90

    r12616 r12724  
    7777      INTEGER ::   ji, jj, jk      ! dummy loop indices 
    7878      INTEGER ::   ikbu, ikbv      ! local integers 
    79       REAL(wp)::   zvm, zvt, zvs, z1_2rau0   ! local scalars 
     79      REAL(wp)::   zvm, zvt, zvs, z1_2rho0   ! local scalars 
    8080      REAL(wp), DIMENSION(jpi,jpj)  :: ztswu, ztswv, z2dx, z2dy   ! 2D workspace  
    8181      !!---------------------------------------------------------------------- 
     
    126126            !                  
    127127            IF( ktrd == jpdyn_zdf ) THEN      ! zdf trend: compute separately the surface forcing trend 
    128                z1_2rau0 = 0.5_wp / rau0 
     128               z1_2rho0 = 0.5_wp / rho0 
    129129               DO_2D_10_10 
    130130                  zvt = ( utau_b(ji,jj) + utau(ji,jj) ) * tmask_i(ji+1,jj) * tmask_i(ji,jj) * umask(ji,jj,jk)   & 
    131                      &                                                     * z1_2rau0       * e1e2u(ji,jj) 
     131                     &                                                     * z1_2rho0       * e1e2u(ji,jj) 
    132132                  zvs = ( vtau_b(ji,jj) + vtau(ji,jj) ) * tmask_i(ji,jj+1) * tmask_i(ji,jj) * vmask(ji,jj,jk)   & 
    133                      &                                                     * z1_2rau0       * e1e2v(ji,jj) 
     133                     &                                                     * z1_2rho0       * e1e2v(ji,jj) 
    134134                  umo(jpdyn_tau) = umo(jpdyn_tau) + zvt 
    135135                  vmo(jpdyn_tau) = vmo(jpdyn_tau) + zvs 
     
    142142!               ! 
    143143!               IF( ln_drgimp ) THEN                   ! implicit drag case: compute separately the bottom friction  
    144 !                  z1_2rau0 = 0.5_wp / rau0 
     144!                  z1_2rho0 = 0.5_wp / rho0 
    145145!                  DO jj = 1, jpjm1 
    146146!                     DO ji = 1, jpim1 
     
    204204         CALL eos( ts(:,:,:,:,Kmm), rhd, rhop )       ! now potential density 
    205205 
    206          zcof = 0.5_wp / rau0             ! Density flux at w-point 
     206         zcof = 0.5_wp / rho0             ! Density flux at w-point 
    207207         zkz(:,:,1) = 0._wp 
    208208         DO jk = 2, jpk 
     
    210210         END DO 
    211211          
    212          zcof   = 0.5_wp / rau0           ! Density flux at u and v-points 
     212         zcof   = 0.5_wp / rho0           ! Density flux at u and v-points 
    213213         DO_3D_10_10( 1, jpkm1 ) 
    214214            zkx(ji,jj,jk) = zcof * e2u(ji,jj) * e3u(ji,jj,jk,Kmm)   & 
     
    351351 9546    FORMAT(' 0 < horizontal diffusion                                  : ', e20.13) 
    352352 9547    FORMAT(' 0 < vertical diffusion                                    : ', e20.13) 
    353  9548    FORMAT(' pressure gradient u2 = - 1/rau0 u.dz(rhop)                : ', e20.13, '  u.dz(rhop) =', e20.13) 
     353 9548    FORMAT(' pressure gradient u2 = - 1/rho0 u.dz(rhop)                : ', e20.13, '  u.dz(rhop) =', e20.13) 
    354354         ! 
    355355         ! Save potential to kinetic energy conversion for next time step 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/TRD/trdken.F90

    r12616 r12724  
    103103      zke(:,1, : ) = 0._wp 
    104104      DO_3D_01_01( 1, jpkm1 ) 
    105          zke(ji,jj,jk) = 0.5_wp * rau0 *( uu(ji  ,jj,jk,Kmm) * putrd(ji  ,jj,jk) * bu(ji  ,jj,jk)  & 
     105         zke(ji,jj,jk) = 0.5_wp * rho0 *( uu(ji  ,jj,jk,Kmm) * putrd(ji  ,jj,jk) * bu(ji  ,jj,jk)  & 
    106106            &                           + uu(ji-1,jj,jk,Kmm) * putrd(ji-1,jj,jk) * bu(ji-1,jj,jk)  & 
    107107            &                           + vv(ji,jj  ,jk,Kmm) * pvtrd(ji,jj  ,jk) * bv(ji,jj  ,jk)  & 
     
    124124                           zke2d(1,:) = 0._wp   ;   zke2d(:,1) = 0._wp 
    125125                           DO_2D_01_01 
    126                               zke2d(ji,jj) = r1_rau0 * 0.5_wp * (   z2dx(ji,jj) + z2dx(ji-1,jj)   & 
     126                              zke2d(ji,jj) = r1_rho0 * 0.5_wp * (   z2dx(ji,jj) + z2dx(ji-1,jj)   & 
    127127                              &                                   + z2dy(ji,jj) + z2dy(ji,jj-1)   ) * r1_bt(ji,jj,1) 
    128128                           END_2D 
     
    208208      ! 
    209209      ! Local constant initialization  
    210       zcoef = - rau0 * grav * 0.5_wp       
     210      zcoef = - rho0 * grav * 0.5_wp       
    211211       
    212212      !  Surface value (also valid in partial step case) 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/TRD/trdtra.F90

    r12616 r12724  
    242242      !!---------------------------------------------------------------------- 
    243243 
    244       IF( neuler == 0 .AND. kt == nit000    ) THEN   ;   r2dt =      rdt      ! = rdt (restart with Euler time stepping) 
    245       ELSEIF(               kt <= nit000 + 1) THEN   ;   r2dt = 2. * rdt      ! = 2 rdt (leapfrog) 
    246       ENDIF 
    247  
    248244      !                   ! 3D output of tracers trends using IOM interface 
    249245      IF( ln_tra_trd )   CALL trd_tra_iom ( ptrdx, ptrdy, ktrd, kt, Kmm ) 
     
    253249 
    254250      !                   ! Potential ENergy trends 
    255       IF( ln_PE_trd  )   CALL trd_pen( ptrdx, ptrdy, ktrd, kt, r2dt, Kmm ) 
     251      IF( ln_PE_trd  )   CALL trd_pen( ptrdx, ptrdy, ktrd, kt, rDt, Kmm ) 
    256252 
    257253      !                   ! Mixed layer trends for active tracers 
     
    286282         CASE ( jptra_atf )        ;   CALL trd_mxl_zint( ptrdx, ptrdy, jpmxl_atf, '3D' )   ! asselin time filter (last trend) 
    287283                                   ! 
    288                                        CALL trd_mxl( kt, r2dt )                             ! trends: Mixed-layer (output) 
     284                                       CALL trd_mxl( kt, rDt )                             ! trends: Mixed-layer (output) 
    289285         END SELECT 
    290286         ! 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/TRD/trdvor.F90

    r12622 r12724  
    106106         ztswu(:,:) = 0.e0   ;   ztswv(:,:) = 0.e0 
    107107         DO_2D_00_00 
    108             ztswu(ji,jj) = 0.5 * ( utau_b(ji,jj) + utau(ji,jj) ) / ( e3u(ji,jj,1,Kmm) * rau0 ) 
    109             ztswv(ji,jj) = 0.5 * ( vtau_b(ji,jj) + vtau(ji,jj) ) / ( e3v(ji,jj,1,Kmm) * rau0 ) 
     108            ztswu(ji,jj) = 0.5 * ( utau_b(ji,jj) + utau(ji,jj) ) / ( e3u(ji,jj,1,Kmm) * rho0 ) 
     109            ztswv(ji,jj) = 0.5 * ( vtau_b(ji,jj) + vtau(ji,jj) ) / ( e3v(ji,jj,1,Kmm) * rho0 ) 
    110110         END_2D 
    111111         ! 
     
    390390         ! III.1 compute total trend 
    391391         ! ------------------------ 
    392          zmean = 1._wp / (  REAL( nmoydpvor, wp ) * 2._wp * rdt  ) 
     392         zmean = 1._wp / (  REAL( nmoydpvor, wp ) * 2._wp * rn_Dt  ) 
    393393         vor_avrtot(:,:) = (  vor_avr(:,:) - vor_avrbn(:,:) + vor_avrb(:,:) - vor_avrbb(:,:) ) * zmean 
    394394 
     
    509509      ENDIF 
    510510#if defined key_diainstant 
    511       zsto = nn_write*rdt 
     511      zsto = nn_write*rn_Dt 
    512512      clop = "inst("//TRIM(clop)//")" 
    513513#else 
    514       zsto = rdt 
     514      zsto = rn_Dt 
    515515      clop = "ave("//TRIM(clop)//")" 
    516516#endif 
    517       zout = nn_trd*rdt 
     517      zout = nn_trd*rn_Dt 
    518518 
    519519      IF(lwp) WRITE(numout,*) '               netCDF initialization' 
     
    521521      ! II.2 Compute julian date from starting date of the run 
    522522      ! ------------------------ 
    523       CALL ymds2ju( nyear, nmonth, nday, rdt, zjulian ) 
     523      CALL ymds2ju( nyear, nmonth, nday, rn_Dt, zjulian ) 
    524524      zjulian = zjulian - adatrj   !   set calendar origin to the beginning of the experiment 
    525525      IF(lwp) WRITE(numout,*)' '   
     
    533533      IF(lwp) WRITE(numout,*) ' Name of NETCDF file ', clhstnam 
    534534      CALL histbeg( clhstnam, jpi, glamf, jpj, gphif,1, jpi,   &  ! Horizontal grid : glamt and gphit 
    535          &          1, jpj, nit000-1, zjulian, rdt, nh_t, nidvor, domain_id=nidom, snc4chunks=snc4set ) 
     535         &          1, jpj, nit000-1, zjulian, rn_Dt, nh_t, nidvor, domain_id=nidom, snc4chunks=snc4set ) 
    536536      CALL wheneq( jpi*jpj, fmask, 1, 1., ndexvor1, ndimvor1 )    ! surface 
    537537 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/USR/usrdef_hgr.F90

    r12377 r12724  
    107107      IF( ln_bench ) THEN     ! benchmark: forced the resolution to be 106 km  
    108108         ze1 = 106000._wp     ! but keep (lat,lon) at the right nn_GYRE resolution 
    109          CALL ctl_warn( ' GYRE used as Benchmark: e1=e2=106km, no need to adjust rdt, ahm,aht ' ) 
     109         CALL ctl_warn( ' GYRE used as Benchmark: e1=e2=106km, no need to adjust rn_Dt, ahm,aht ' ) 
    110110      ENDIF 
    111111      IF( nprint==1 .AND. lwp )   THEN 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/USR/usrdef_sbc.F90

    r12377 r12724  
    8989 
    9090      ! current day (in hours) since january the 1st of the current year 
    91       ztime = REAL( kt ) * rdt / (rmmss * rhhmm)   &       !  total incrementation (in hours) 
     91      ztime = REAL( kt ) * rn_Dt / (rmmss * rhhmm)   &       !  total incrementation (in hours) 
    9292         &      - (nyear  - 1) * rjjhh * zyydd             !  minus years since beginning of experiment (in hours) 
    9393 
     
    154154      !accumulates days of previous months of this year 
    155155      ! day (in hours) since january the 1st 
    156       ztime = FLOAT( kt ) * rdt / (rmmss * rhhmm)  &  ! incrementation in hour 
     156      ztime = FLOAT( kt ) * rn_Dt / (rmmss * rhhmm)  &  ! incrementation in hour 
    157157         &     - (nyear - 1) * rjjhh * zyydd          !  - nber of hours the precedent years 
    158158      ztimemax = ((5.*30.)+21.)* 24.               ! 21th june     in hours 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/ZDF/zdfdrg.F90

    r12616 r12724  
    166166      !!--------------------------------------------------------------------- 
    167167      ! 
    168 !!gm bug : time step is only rdt (not 2 rdt if euler start !) 
    169       zm1_2dt = - 1._wp / ( 2._wp * rdt ) 
     168!!gm bug : time step is only rn_Dt (not 2 rn_Dt if euler start !) 
     169      zm1_2dt = - 1._wp / ( 2._wp * rn_Dt ) 
    170170 
    171171      IF( l_trddyn ) THEN      ! trends: store the input trends 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/ZDF/zdfgls.F90

    r12622 r12724  
    171171         ! 
    172172         ! surface friction 
    173          ustar2_surf(ji,jj) = r1_rau0 * taum(ji,jj) * tmask(ji,jj,1) 
     173         ustar2_surf(ji,jj) = r1_rho0 * taum(ji,jj) * tmask(ji,jj,1) 
    174174         !    
    175175!!gm Rq we may add here r_ke0(_top/_bot) ?  ==>> think about that... 
     
    270270            &                 / ( e3t(ji,jj,jk  ,Kmm) * e3w(ji,jj,jk,Kmm) ) 
    271271         !                                        ! diagonal 
    272          zdiag(ji,jj,jk) = 1._wp - zd_lw(ji,jj,jk) - zd_up(ji,jj,jk)  + rdt * zdiss * wmask(ji,jj,jk)  
     272         zdiag(ji,jj,jk) = 1._wp - zd_lw(ji,jj,jk) - zd_up(ji,jj,jk)  + rn_Dt * zdiss * wmask(ji,jj,jk)  
    273273         !                                        ! right hand side in en 
    274          en(ji,jj,jk) = en(ji,jj,jk) + rdt * zesh2 * wmask(ji,jj,jk) 
     274         en(ji,jj,jk) = en(ji,jj,jk) + rn_Dt * zesh2 * wmask(ji,jj,jk) 
    275275      END_3D 
    276276      ! 
     
    482482            &            / ( e3t(ji,jj,jk  ,Kmm) * e3w(ji,jj,jk,Kmm) ) 
    483483         !                                               ! diagonal 
    484          zdiag(ji,jj,jk) = 1._wp - zd_lw(ji,jj,jk) - zd_up(ji,jj,jk) + rdt * zdiss * wmask(ji,jj,jk) 
     484         zdiag(ji,jj,jk) = 1._wp - zd_lw(ji,jj,jk) - zd_up(ji,jj,jk) + rn_Dt * zdiss * wmask(ji,jj,jk) 
    485485         !                                               ! right hand side in psi 
    486          psi(ji,jj,jk) = psi(ji,jj,jk) + rdt * zesh2 * wmask(ji,jj,jk) 
     486         psi(ji,jj,jk) = psi(ji,jj,jk) + rn_Dt * zesh2 * wmask(ji,jj,jk) 
    487487      END_3D 
    488488      ! 
     
    10121012      rc04  = rc03 * rc0 
    10131013      rsbc_tke1 = -3._wp/2._wp*rn_crban*ra_sf*rl_sf                      ! Dirichlet + Wave breaking 
    1014       rsbc_tke2 = rdt * rn_crban / rl_sf                                 ! Neumann + Wave breaking  
     1014      rsbc_tke2 = rn_Dt * rn_crban / rl_sf                                 ! Neumann + Wave breaking  
    10151015      zcr = MAX(rsmall, rsbc_tke1**(1./(-ra_sf*3._wp/2._wp))-1._wp ) 
    10161016      rtrans = 0.2_wp / zcr                                              ! Ad. inverse transition length between log and wave layer  
    10171017      rsbc_zs1  = rn_charn/grav                                          ! Charnock formula for surface roughness 
    10181018      rsbc_zs2  = rn_frac_hs / 0.85_wp / grav * 665._wp                  ! Rascle formula for surface roughness  
    1019       rsbc_psi1 = -0.5_wp * rdt * rc0**(rpp-2._wp*rmm) / rsc_psi 
    1020       rsbc_psi2 = -0.5_wp * rdt * rc0**rpp * rnn * vkarmn**rnn / rsc_psi ! Neumann + NO Wave breaking  
    1021       ! 
    1022       rfact_tke = -0.5_wp / rsc_tke * rdt                                ! Cst used for the Diffusion term of tke 
    1023       rfact_psi = -0.5_wp / rsc_psi * rdt                                ! Cst used for the Diffusion term of tke 
     1019      rsbc_psi1 = -0.5_wp * rn_Dt * rc0**(rpp-2._wp*rmm) / rsc_psi 
     1020      rsbc_psi2 = -0.5_wp * rn_Dt * rc0**rpp * rnn * vkarmn**rnn / rsc_psi ! Neumann + NO Wave breaking  
     1021      ! 
     1022      rfact_tke = -0.5_wp / rsc_tke * rn_Dt                                ! Cst used for the Diffusion term of tke 
     1023      rfact_psi = -0.5_wp / rsc_psi * rn_Dt                                ! Cst used for the Diffusion term of tke 
    10241024      ! 
    10251025      !                                !* Wall proximity function 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/ZDF/zdfiwm.F90

    r12622 r12724  
    2323   USE phycst         ! physical constants 
    2424   ! 
     25   USE fldread        ! field read 
    2526   USE prtctl         ! Print control 
    2627   USE in_out_manager ! I/O manager 
     
    8889      !!              This is divided into three components: 
    8990      !!                 1. Bottom-intensified low-mode dissipation at critical slopes 
    90       !!                     zemx_iwm(z) = ( ecri_iwm / rau0 ) * EXP( -(H-z)/hcri_iwm ) 
     91      !!                     zemx_iwm(z) = ( ecri_iwm / rho0 ) * EXP( -(H-z)/hcri_iwm ) 
    9192      !!                                   / ( 1. - EXP( - H/hcri_iwm ) ) * hcri_iwm 
    9293      !!              where hcri_iwm is the characteristic length scale of the bottom  
    9394      !!              intensification, ecri_iwm a map of available power, and H the ocean depth. 
    9495      !!                 2. Pycnocline-intensified low-mode dissipation 
    95       !!                     zemx_iwm(z) = ( epyc_iwm / rau0 ) * ( sqrt(rn2(z))^nn_zpyc ) 
     96      !!                     zemx_iwm(z) = ( epyc_iwm / rho0 ) * ( sqrt(rn2(z))^nn_zpyc ) 
    9697      !!                                   / SUM( sqrt(rn2(z))^nn_zpyc * e3w[z) ) 
    9798      !!              where epyc_iwm is a map of available power, and nn_zpyc 
     
    99100      !!              energy dissipation. 
    100101      !!                 3. WKB-height dependent high mode dissipation 
    101       !!                     zemx_iwm(z) = ( ebot_iwm / rau0 ) * rn2(z) * EXP(-z_wkb(z)/hbot_iwm) 
     102      !!                     zemx_iwm(z) = ( ebot_iwm / rho0 ) * rn2(z) * EXP(-z_wkb(z)/hbot_iwm) 
    102103      !!                                   / SUM( rn2(z) * EXP(-z_wkb(z)/hbot_iwm) * e3w[z) ) 
    103104      !!              where hbot_iwm is the characteristic length scale of the WKB bottom  
     
    152153      DO_2D_11_11 
    153154         zhdep(ji,jj) = gdepw_0(ji,jj,mbkt(ji,jj)+1)       ! depth of the ocean 
    154          zfact(ji,jj) = rau0 * (  1._wp - EXP( -zhdep(ji,jj) / hcri_iwm(ji,jj) )  ) 
     155         zfact(ji,jj) = rho0 * (  1._wp - EXP( -zhdep(ji,jj) / hcri_iwm(ji,jj) )  ) 
    155156         IF( zfact(ji,jj) /= 0._wp )   zfact(ji,jj) = ecri_iwm(ji,jj) / zfact(ji,jj) 
    156157      END_2D 
     
    184185         ! 
    185186         DO_2D_11_11 
    186             IF( zfact(ji,jj) /= 0 )   zfact(ji,jj) = epyc_iwm(ji,jj) / ( rau0 * zfact(ji,jj) ) 
     187            IF( zfact(ji,jj) /= 0 )   zfact(ji,jj) = epyc_iwm(ji,jj) / ( rho0 * zfact(ji,jj) ) 
    187188         END_2D 
    188189         ! 
     
    199200         ! 
    200201         DO_2D_11_11 
    201             IF( zfact(ji,jj) /= 0 )   zfact(ji,jj) = epyc_iwm(ji,jj) / ( rau0 * zfact(ji,jj) ) 
     202            IF( zfact(ji,jj) /= 0 )   zfact(ji,jj) = epyc_iwm(ji,jj) / ( rho0 * zfact(ji,jj) ) 
    202203         END_2D 
    203204         ! 
     
    246247      ! 
    247248      DO_2D_11_11 
    248          IF( zfact(ji,jj) /= 0 )   zfact(ji,jj) = ebot_iwm(ji,jj) / ( rau0 * zfact(ji,jj) ) 
     249         IF( zfact(ji,jj) /= 0 )   zfact(ji,jj) = ebot_iwm(ji,jj) / ( rho0 * zfact(ji,jj) ) 
    249250      END_2D 
    250251      ! 
     
    258259      ! Calculate molecular kinematic viscosity 
    259260      znu_t(:,:,:) = 1.e-4_wp * (  17.91_wp - 0.53810_wp * ts(:,:,:,jp_tem,Kmm) + 0.00694_wp * ts(:,:,:,jp_tem,Kmm) * ts(:,:,:,jp_tem,Kmm)  & 
    260          &                                  + 0.02305_wp * ts(:,:,:,jp_sal,Kmm)  ) * tmask(:,:,:) * r1_rau0 
     261         &                                  + 0.02305_wp * ts(:,:,:,jp_sal,Kmm)  ) * tmask(:,:,:) * r1_rho0 
    261262      DO jk = 2, jpkm1 
    262263         znu_w(:,:,jk) = 0.5_wp * ( znu_t(:,:,jk-1) + znu_t(:,:,jk) ) * wmask(:,:,jk) 
     
    296297         END_3D 
    297298         CALL mpp_sum( 'zdfiwm', zztmp ) 
    298          zztmp = rau0 * zztmp ! Global integral of rauo * Kz * N^2 = power contributing to mixing  
     299         zztmp = rho0 * zztmp ! Global integral of rauo * Kz * N^2 = power contributing to mixing  
    299300         ! 
    300301         IF(lwp) THEN 
     
    340341                                    !* output useful diagnostics: Kz*N^2 ,  
    341342!!gm Kz*N2 should take into account the ratio avs/avt if it is used.... (see diaar5) 
    342                                     !  vertical integral of rau0 * Kz * N^2 , energy density (zemx_iwm) 
     343                                    !  vertical integral of rho0 * Kz * N^2 , energy density (zemx_iwm) 
    343344      IF( iom_use("bflx_iwm") .OR. iom_use("pcmap_iwm") ) THEN 
    344345         ALLOCATE( z2d(jpi,jpj) , z3d(jpi,jpj,jpk) ) 
     
    348349            z2d(:,:) = z2d(:,:) + e3w(:,:,jk,Kmm) * z3d(:,:,jk) * wmask(:,:,jk) 
    349350         END DO 
    350          z2d(:,:) = rau0 * z2d(:,:) 
     351         z2d(:,:) = rho0 * z2d(:,:) 
    351352         CALL iom_put( "bflx_iwm", z3d ) 
    352353         CALL iom_put( "pcmap_iwm", z2d ) 
     
    386387      !!              de Lavergne et al. in prep., 2017 
    387388      !!---------------------------------------------------------------------- 
    388       INTEGER  ::   inum         ! local integer 
     389      INTEGER  ::   ifpr               ! dummy loop indices 
     390      INTEGER  ::   inum               ! local integer 
    389391      INTEGER  ::   ios 
    390392      REAL(wp) ::   zbot, zpyc, zcri   ! local scalars 
    391       !! 
    392       NAMELIST/namzdf_iwm/ nn_zpyc, ln_mevar, ln_tsdiff 
     393      ! 
     394      CHARACTER(len=256)            ::   cn_dir                 ! Root directory for location of ssr files 
     395      INTEGER, PARAMETER            ::   jpiwm  = 5             ! maximum number of files to read 
     396      INTEGER, PARAMETER            ::   jp_mpb = 1 
     397      INTEGER, PARAMETER            ::   jp_mpp = 2 
     398      INTEGER, PARAMETER            ::   jp_mpc = 3 
     399      INTEGER, PARAMETER            ::   jp_dsb = 4 
     400      INTEGER, PARAMETER            ::   jp_dsc = 5 
     401      ! 
     402      TYPE(FLD_N), DIMENSION(jpiwm) ::   slf_iwm                ! array of namelist informations 
     403      TYPE(FLD_N)                   ::   sn_mpb, sn_mpp, sn_mpc ! informations about Mixing Power field to be read 
     404      TYPE(FLD_N)                   ::   sn_dsb, sn_dsc         ! informations about Decay Scale field to be read 
     405      TYPE(FLD  ), DIMENSION(jpiwm) ::   sf_iwm                 ! structure of input fields (file informations, fields read) 
     406      ! 
     407      NAMELIST/namzdf_iwm/ nn_zpyc, ln_mevar, ln_tsdiff, & 
     408         &                 cn_dir, sn_mpb, sn_mpp, sn_mpc, sn_dsb, sn_dsc 
    393409      !!---------------------------------------------------------------------- 
    394410      ! 
     
    425441      IF( zdf_iwm_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'zdf_iwm_init : unable to allocate iwm arrays' ) 
    426442      ! 
     443      ! store namelist information in an array 
     444      slf_iwm(jp_mpb) = sn_mpb ; slf_iwm(jp_mpp) = sn_mpp ; slf_iwm(jp_mpc) = sn_mpc 
     445      slf_iwm(jp_dsb) = sn_dsb ; slf_iwm(jp_dsc) = sn_dsc 
     446      ! 
     447      DO ifpr= 1, jpiwm 
     448         ALLOCATE( sf_iwm(ifpr)%fnow(jpi,jpj,1)   ) 
     449         IF( slf_iwm(ifpr)%ln_tint )ALLOCATE( sf_iwm(ifpr)%fdta(jpi,jpj,1,2) ) 
     450      END DO 
     451 
     452      ! fill sf_iwm with sf_iwm and control print 
     453      CALL fld_fill( sf_iwm, slf_iwm , cn_dir, 'zdfiwm_init', 'iwm input file', 'namiwm' ) 
     454 
     455      !                             ! hard-coded default definition (to be defined in namelist ?) 
     456      sf_iwm(jp_mpb)%fnow(:,:,1) = 1.e-6 
     457      sf_iwm(jp_mpp)%fnow(:,:,1) = 1.e-6 
     458      sf_iwm(jp_mpc)%fnow(:,:,1) = 1.e-10 
     459      sf_iwm(jp_dsb)%fnow(:,:,1) = 100. 
     460      sf_iwm(jp_dsc)%fnow(:,:,1) = 100. 
     461 
    427462      !                             ! read necessary fields 
    428       CALL iom_open('mixing_power_bot',inum)       ! energy flux for high-mode wave breaking [W/m2] 
    429       CALL iom_get  (inum, jpdom_data, 'field', ebot_iwm, 1 )  
    430       CALL iom_close(inum) 
    431       ! 
    432       CALL iom_open('mixing_power_pyc',inum)       ! energy flux for pynocline-intensified wave breaking [W/m2] 
    433       CALL iom_get  (inum, jpdom_data, 'field', epyc_iwm, 1 ) 
    434       CALL iom_close(inum) 
    435       ! 
    436       CALL iom_open('mixing_power_cri',inum)       ! energy flux for critical slope wave breaking [W/m2] 
    437       CALL iom_get  (inum, jpdom_data, 'field', ecri_iwm, 1 ) 
    438       CALL iom_close(inum) 
    439       ! 
    440       CALL iom_open('decay_scale_bot',inum)        ! spatially variable decay scale for high-mode wave breaking [m] 
    441       CALL iom_get  (inum, jpdom_data, 'field', hbot_iwm, 1 ) 
    442       CALL iom_close(inum) 
    443       ! 
    444       CALL iom_open('decay_scale_cri',inum)        ! spatially variable decay scale for critical slope wave breaking [m] 
    445       CALL iom_get  (inum, jpdom_data, 'field', hcri_iwm, 1 ) 
    446       CALL iom_close(inum) 
    447  
    448       ebot_iwm(:,:) = ebot_iwm(:,:) * ssmask(:,:) 
    449       epyc_iwm(:,:) = epyc_iwm(:,:) * ssmask(:,:) 
    450       ecri_iwm(:,:) = ecri_iwm(:,:) * ssmask(:,:) 
     463      CALL fld_read( nit000, 1, sf_iwm ) 
     464 
     465      ebot_iwm(:,:) = sf_iwm(1)%fnow(:,:,1) * ssmask(:,:) ! energy flux for high-mode wave breaking [W/m2] 
     466      epyc_iwm(:,:) = sf_iwm(2)%fnow(:,:,1) * ssmask(:,:) ! energy flux for pynocline-intensified wave breaking [W/m2] 
     467      ecri_iwm(:,:) = sf_iwm(3)%fnow(:,:,1) * ssmask(:,:) ! energy flux for critical slope wave breaking [W/m2] 
     468      hbot_iwm(:,:) = sf_iwm(4)%fnow(:,:,1)               ! spatially variable decay scale for high-mode wave breaking [m] 
     469      hcri_iwm(:,:) = sf_iwm(5)%fnow(:,:,1)               ! spatially variable decay scale for critical slope wave breaking [m] 
    451470 
    452471      zbot = glob_sum( 'zdfiwm', e1e2t(:,:) * ebot_iwm(:,:) ) 
    453472      zpyc = glob_sum( 'zdfiwm', e1e2t(:,:) * epyc_iwm(:,:) ) 
    454473      zcri = glob_sum( 'zdfiwm', e1e2t(:,:) * ecri_iwm(:,:) ) 
     474 
    455475      IF(lwp) THEN 
    456476         WRITE(numout,*) '      High-mode wave-breaking energy:             ', zbot * 1.e-12_wp, 'TW' 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/ZDF/zdfmxl.F90

    r12624 r12724  
    9898      nmln(:,:)  = nlb10               ! Initialization to the number of w ocean point 
    9999      hmlp(:,:)  = 0._wp               ! here hmlp used as a dummy variable, integrating vertically N^2 
    100       zN2_c = grav * rho_c * r1_rau0   ! convert density criteria into N^2 criteria 
     100      zN2_c = grav * rho_c * r1_rho0   ! convert density criteria into N^2 criteria 
    101101      DO_3D_11_11( nlb10, jpkm1 ) 
    102102         ikt = mbkt(ji,jj) 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/ZDF/zdfosm.F90

    r12625 r12724  
    302302     DO_2D_00_00 
    303303        ! Surface downward irradiance (so always +ve) 
    304         zrad0(ji,jj) = qsr(ji,jj) * r1_rau0_rcp 
     304        zrad0(ji,jj) = qsr(ji,jj) * r1_rho0_rcp 
    305305        ! Downwards irradiance at base of boundary layer 
    306306        zradh(ji,jj) = zrad0(ji,jj) * ( zz0 * EXP( -hbl(ji,jj)/rn_si0 ) + zz1 * EXP( -hbl(ji,jj)/rn_si1) ) 
     
    314314        zbeta    = rab_n(ji,jj,1,jp_sal) 
    315315        ! Upwards surface Temperature flux for non-local term 
    316         zwth0(ji,jj) = - qns(ji,jj) * r1_rau0_rcp * tmask(ji,jj,1) 
     316        zwth0(ji,jj) = - qns(ji,jj) * r1_rho0_rcp * tmask(ji,jj,1) 
    317317        ! Upwards surface salinity flux for non-local term 
    318         zws0(ji,jj) = - ( ( emp(ji,jj)-rnf(ji,jj) ) * ts(ji,jj,1,jp_sal,Kmm)  + sfx(ji,jj) ) * r1_rau0 * tmask(ji,jj,1) 
     318        zws0(ji,jj) = - ( ( emp(ji,jj)-rnf(ji,jj) ) * ts(ji,jj,1,jp_sal,Kmm)  + sfx(ji,jj) ) * r1_rho0 * tmask(ji,jj,1) 
    319319        ! Non radiative upwards surface buoyancy flux 
    320320        zwb0(ji,jj) = grav * zthermal * zwth0(ji,jj) -  grav * zbeta * zws0(ji,jj) 
     
    326326        zwbav(ji,jj) = grav  * zthermal * zwthav(ji,jj) - grav  * zbeta * zwsav(ji,jj) 
    327327        ! Surface upward velocity fluxes 
    328         zuw0(ji,jj) = -utau(ji,jj) * r1_rau0 * tmask(ji,jj,1) 
    329         zvw0(ji,jj) = -vtau(ji,jj) * r1_rau0 * tmask(ji,jj,1) 
     328        zuw0(ji,jj) = -utau(ji,jj) * r1_rho0 * tmask(ji,jj,1) 
     329        zvw0(ji,jj) = -vtau(ji,jj) * r1_rho0 * tmask(ji,jj,1) 
    330330        ! Friction velocity (zustar), at T-point : LMD94 eq. 2 
    331331        zustar(ji,jj) = MAX( SQRT( SQRT( zuw0(ji,jj) * zuw0(ji,jj) + zvw0(ji,jj) * zvw0(ji,jj) ) ), 1.0e-8 ) 
     
    443443                        &            + 0.135 * zla(ji,jj) * zwstrl(ji,jj)**3/hbl(ji,jj) ) 
    444444 
    445                    zvel_max =  - ( 1.0 + 1.0 * ( zwstrl(ji,jj)**3 + 0.5 * zwstrc(ji,jj)**3 )**pthird * rn_rdt / hbl(ji,jj) ) & 
     445                   zvel_max =  - ( 1.0 + 1.0 * ( zwstrl(ji,jj)**3 + 0.5 * zwstrc(ji,jj)**3 )**pthird * rn_Dt / hbl(ji,jj) ) & 
    446446                        &   * zwb_ent(ji,jj) / ( zwstrl(ji,jj)**3 + 0.5 * zwstrc(ji,jj)**3 )**pthird 
    447447! Entrainment including component due to shear turbulence. Modified Langmuir component, but gives same result for La=0.3 For testing uncomment. 
     
    449449!                           &            + ( 0.15 * ( 1.0 - EXP( -0.5 * zla(ji,jj) ) ) + 0.03 / zla(ji,jj)**2 ) * zustar(ji,jj)**3/hbl(ji,jj) ) 
    450450 
    451 !                      zvel_max = - ( 1.0 + 1.0 * ( zvstr(ji,jj)**3 + 0.5 * zwstrc(ji,jj)**3 )**pthird * rn_rdt / zhbl(ji,jj) ) * zwb_ent(ji,jj) / & 
     451!                      zvel_max = - ( 1.0 + 1.0 * ( zvstr(ji,jj)**3 + 0.5 * zwstrc(ji,jj)**3 )**pthird * rn_Dt / zhbl(ji,jj) ) * zwb_ent(ji,jj) / & 
    452452!                           &       ( zvstr(ji,jj)**3 + 0.5 * zwstrc(ji,jj)**3 )**pthird 
    453453                   zzdhdt = - zwb_ent(ji,jj) / ( zvel_max + MAX(zdb_bl(ji,jj),0.0) ) 
     
    460460                   IF ( zzdhdt < 0._wp ) THEN 
    461461                   ! For long timsteps factor in brackets slows the rapid collapse of the OSBL 
    462                       zpert   = 2.0 * ( 1.0 + 2.0 * zwstrl(ji,jj) * rn_rdt / hbl(ji,jj) ) * zwstrl(ji,jj)**2 / hbl(ji,jj) 
     462                      zpert   = 2.0 * ( 1.0 + 2.0 * zwstrl(ji,jj) * rn_Dt / hbl(ji,jj) ) * zwstrl(ji,jj)**2 / hbl(ji,jj) 
    463463                   ELSE 
    464                       zpert   = 2.0 * ( 1.0 + 2.0 * zwstrl(ji,jj) * rn_rdt / hbl(ji,jj) ) * zwstrl(ji,jj)**2 / hbl(ji,jj) & 
     464                      zpert   = 2.0 * ( 1.0 + 2.0 * zwstrl(ji,jj) * rn_Dt / hbl(ji,jj) ) * zwstrl(ji,jj)**2 / hbl(ji,jj) & 
    465465                           &  + MAX( zdb_bl(ji,jj), 0.0 ) 
    466466                   ENDIF 
     
    474474      ibld(:,:) = 3 
    475475 
    476       zhbl_t(:,:) = hbl(:,:) + (zdhdt(:,:) - ww(ji,jj,ibld(ji,jj)))* rn_rdt ! certainly need wb here, so subtract it 
     476      zhbl_t(:,:) = hbl(:,:) + (zdhdt(:,:) - ww(ji,jj,ibld(ji,jj)))* rn_Dt ! certainly need wb here, so subtract it 
    477477      zhbl_t(:,:) = MIN(zhbl_t(:,:), ht(:,:)) 
    478       zdhdt(:,:) = MIN(zdhdt(:,:), (zhbl_t(:,:) - hbl(:,:))/rn_rdt + ww(ji,jj,ibld(ji,jj))) ! adjustment to represent limiting by ocean bottom 
     478      zdhdt(:,:) = MIN(zdhdt(:,:), (zhbl_t(:,:) - hbl(:,:))/rn_Dt + ww(ji,jj,ibld(ji,jj))) ! adjustment to represent limiting by ocean bottom 
    479479 
    480480      DO_3D_00_00( 4, jpkm1 ) 
     
    498498            IF ( lconv(ji,jj) ) THEN 
    499499!unstable 
    500                zvel_max =  - ( 1.0 + 1.0 * ( zvstr(ji,jj)**3 + 0.5 * zwstrc(ji,jj)**3 )**pthird * rn_rdt / hbl(ji,jj) ) & 
     500               zvel_max =  - ( 1.0 + 1.0 * ( zvstr(ji,jj)**3 + 0.5 * zwstrc(ji,jj)**3 )**pthird * rn_Dt / hbl(ji,jj) ) & 
    501501                    &   * zwb_ent(ji,jj) / ( zvstr(ji,jj)**3 + 0.5 * zwstrc(ji,jj)**3 )**pthird 
    502502 
     
    505505                       & - zbeta * ( zs_bl(ji,jj) - ts(ji,jj,jm,jp_sal,Kmm) ) ), 0.0 ) + zvel_max 
    506506 
    507                   zhbl_s = zhbl_s + MIN( - zwb_ent(ji,jj) / zdb * rn_rdt / FLOAT(ibld(ji,jj)-imld(ji,jj) ),   & 
     507                  zhbl_s = zhbl_s + MIN( - zwb_ent(ji,jj) / zdb * rn_Dt / FLOAT(ibld(ji,jj)-imld(ji,jj) ),   & 
    508508                     &                     e3w(ji,jj,jk,Kmm) ) 
    509509                  zhbl_s = MIN(zhbl_s, ht(ji,jj)) 
     
    12551255            IF ( iom_use("us_x") ) CALL iom_put( "us_x", tmask(:,:,1)*zustke*zcos_wind )   ! x surface Stokes drift 
    12561256            IF ( iom_use("us_y") ) CALL iom_put( "us_y", tmask(:,:,1)*zustke*zsin_wind )  ! y surface Stokes drift 
    1257             IF ( iom_use("wind_wave_abs_power") ) CALL iom_put( "wind_wave_abs_power", 1000.*rau0*tmask(:,:,1)*zustar**2*zustke ) 
     1257            IF ( iom_use("wind_wave_abs_power") ) CALL iom_put( "wind_wave_abs_power", 1000.*rho0*tmask(:,:,1)*zustar**2*zustke ) 
    12581258         ! Stokes drift read in from sbcwave  (=2). 
    12591259         CASE(2) 
    12601260            IF ( iom_use("us_x") ) CALL iom_put( "us_x", ut0sd )               ! x surface Stokes drift 
    12611261            IF ( iom_use("us_y") ) CALL iom_put( "us_y", vt0sd )               ! y surface Stokes drift 
    1262             IF ( iom_use("wind_wave_abs_power") ) CALL iom_put( "wind_wave_abs_power", 1000.*rau0*tmask(:,:,1)*zustar**2* & 
     1262            IF ( iom_use("wind_wave_abs_power") ) CALL iom_put( "wind_wave_abs_power", 1000.*rho0*tmask(:,:,1)*zustar**2* & 
    12631263                 & SQRT(ut0sd**2 + vt0sd**2 ) ) 
    12641264         END SELECT 
     
    12761276         IF ( iom_use("zwstrl") ) CALL iom_put( "zwstrl", tmask(:,:,1)*zwstrl )         ! Langmuir velocity scale 
    12771277         IF ( iom_use("zustar") ) CALL iom_put( "zustar", tmask(:,:,1)*zustar )         ! friction velocity scale 
    1278          IF ( iom_use("wind_power") ) CALL iom_put( "wind_power", 1000.*rau0*tmask(:,:,1)*zustar**3 ) ! BL depth internal to zdf_osm routine 
    1279          IF ( iom_use("wind_wave_power") ) CALL iom_put( "wind_wave_power", 1000.*rau0*tmask(:,:,1)*zustar**2*zustke ) 
     1278         IF ( iom_use("wind_power") ) CALL iom_put( "wind_power", 1000.*rho0*tmask(:,:,1)*zustar**3 ) ! BL depth internal to zdf_osm routine 
     1279         IF ( iom_use("wind_wave_power") ) CALL iom_put( "wind_wave_power", 1000.*rho0*tmask(:,:,1)*zustar**2*zustke ) 
    12801280         IF ( iom_use("zhbl") ) CALL iom_put( "zhbl", tmask(:,:,1)*zhbl )               ! BL depth internal to zdf_osm routine 
    12811281         IF ( iom_use("zhml") ) CALL iom_put( "zhml", tmask(:,:,1)*zhml )               ! ML depth internal to zdf_osm routine 
     
    15051505     imld_rst(:,:)  = nlb10         ! Initialization to the number of w ocean point 
    15061506     hbl(:,:)  = 0._wp              ! here hbl used as a dummy variable, integrating vertically N^2 
    1507      zN2_c = grav * rho_c * r1_rau0 ! convert density criteria into N^2 criteria 
     1507     zN2_c = grav * rho_c * r1_rho0 ! convert density criteria into N^2 criteria 
    15081508     ! 
    15091509     hbl(:,:)  = 0._wp              ! here hbl used as a dummy variable, integrating vertically N^2 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/ZDF/zdfric.F90

    r12377 r12724  
    174174         ! 
    175175         DO_2D_00_00 
    176             zustar = SQRT( taum(ji,jj) * r1_rau0 ) 
     176            zustar = SQRT( taum(ji,jj) * r1_rho0 ) 
    177177            zhek   = rn_ekmfc * zustar / ( ABS( ff_t(ji,jj) ) + rsmall )   ! Ekman depth 
    178178            zh_ekm(ji,jj) = MAX(  rn_mldmin , MIN( zhek , rn_mldmax )  )   ! set allowed range 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/ZDF/zdftke.F90

    r12622 r12724  
    207207      !!-------------------------------------------------------------------- 
    208208      ! 
    209       zbbrau = rn_ebb / rau0       ! Local constant initialisation 
    210       zfact1 = -.5_wp * rdt  
    211       zfact2 = 1.5_wp * rdt * rn_ediss 
     209      zbbrau = rn_ebb / rho0       ! Local constant initialisation 
     210      zfact1 = -.5_wp * rn_Dt  
     211      zfact2 = 1.5_wp * rn_Dt * rn_ediss 
    212212      zfact3 = 0.5_wp       * rn_ediss 
    213213      ! 
     
    215215      !                     !  Surface/top/bottom boundary condition on tke 
    216216      !                     !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    217        
     217      !  
    218218      DO_2D_00_00 
    219219         en(ji,jj,1) = MAX( rn_emin0, zbbrau * taum(ji,jj) ) * tmask(ji,jj,1) 
    220220      END_2D 
    221       IF ( ln_isfcav ) THEN 
    222          DO_2D_00_00 
    223             en(ji,jj,mikt(ji,jj)) = rn_emin * tmask(ji,jj,1) 
    224          END_2D 
    225       ENDIF 
    226221      ! 
    227222      !                     !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
     
    229224      !                     !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    230225      ! 
    231       !   en(bot)   = (ebb0/rau0)*0.5*sqrt(u_botfr^2+v_botfr^2) (min value rn_emin) 
     226      !   en(bot)   = (ebb0/rho0)*0.5*sqrt(u_botfr^2+v_botfr^2) (min value rn_emin) 
    232227      ! where ebb0 does not includes surface wave enhancement (i.e. ebb0=3.75) 
    233228      ! Note that stress averaged is done using an wet-only calculation of u and v at t-point like in zdfsh2 
     
    238233            zmsku = ( 2. - umask(ji-1,jj,mbkt(ji,jj)) * umask(ji,jj,mbkt(ji,jj)) ) 
    239234            zmskv = ( 2. - vmask(ji,jj-1,mbkt(ji,jj)) * vmask(ji,jj,mbkt(ji,jj)) ) 
    240             !                       ! where 0.001875 = (rn_ebb0/rau0) * 0.5 = 3.75*0.5/1000. (CAUTION CdU<0) 
     235            !                       ! where 0.001875 = (rn_ebb0/rho0) * 0.5 = 3.75*0.5/1000. (CAUTION CdU<0) 
    241236            zebot = - 0.001875_wp * rCdU_bot(ji,jj) * SQRT(  ( zmsku*( uu(ji,jj,mbkt(ji,jj),Kbb)+uu(ji-1,jj,mbkt(ji,jj),Kbb) ) )**2  & 
    242237               &                                           + ( zmskv*( vv(ji,jj,mbkt(ji,jj),Kbb)+vv(ji,jj-1,mbkt(ji,jj),Kbb) ) )**2  ) 
     
    247242               zmsku = ( 2. - umask(ji-1,jj,mikt(ji,jj)) * umask(ji,jj,mikt(ji,jj)) ) 
    248243               zmskv = ( 2. - vmask(ji,jj-1,mikt(ji,jj)) * vmask(ji,jj,mikt(ji,jj)) ) 
    249                !                             ! where 0.001875 = (rn_ebb0/rau0) * 0.5 = 3.75*0.5/1000.  (CAUTION CdU<0) 
     244               !                             ! where 0.001875 = (rn_ebb0/rho0) * 0.5 = 3.75*0.5/1000.  (CAUTION CdU<0) 
    250245               zetop = - 0.001875_wp * rCdU_top(ji,jj) * SQRT(  ( zmsku*( uu(ji,jj,mikt(ji,jj),Kbb)+uu(ji-1,jj,mikt(ji,jj),Kbb) ) )**2  & 
    251246                  &                                           + ( zmskv*( vv(ji,jj,mikt(ji,jj),Kbb)+vv(ji,jj-1,mikt(ji,jj),Kbb) ) )**2  ) 
    252                en(ji,jj,mikt(ji,jj)) = MAX( zetop, rn_emin ) * (1._wp - tmask(ji,jj,1))   ! masked at ocean surface 
     247               en(ji,jj,mikt(ji,jj)) = en(ji,jj,1) * tmask(ji,jj,1) + MAX( zetop, rn_emin ) * (1._wp - tmask(ji,jj,1)) * ssmask(ji,jj)   ! masked at ocean surface 
    253248            END_2D 
    254249         ENDIF 
     
    290285                  zwlc = rn_lc * SIN( rpi * gdepw(ji,jj,jk,Kmm) / zhlc(ji,jj) )   ! warning: optimization: zus^3 is in zfr_i 
    291286                  !                                           ! TKE Langmuir circulation source term 
    292                   en(ji,jj,jk) = en(ji,jj,jk) + rdt * zfr_i(ji,jj) * ( zwlc * zwlc * zwlc ) / zhlc(ji,jj) 
     287                  en(ji,jj,jk) = en(ji,jj,jk) + rn_Dt * zfr_i(ji,jj) * ( zwlc * zwlc * zwlc ) / zhlc(ji,jj) 
    293288               ENDIF 
    294289            ENDIF 
     
    329324         ! 
    330325         !                                   ! right hand side in en 
    331          en(ji,jj,jk) = en(ji,jj,jk) + rdt * (  p_sh2(ji,jj,jk)                          &   ! shear 
     326         en(ji,jj,jk) = en(ji,jj,jk) + rn_Dt * (  p_sh2(ji,jj,jk)                        &   ! shear 
    332327            &                                 - p_avt(ji,jj,jk) * rn2(ji,jj,jk)          &   ! stratification 
    333328            &                                 + zfact3 * dissl(ji,jj,jk) * en(ji,jj,jk)  &   ! dissipation 
     
    443438      zmxld(:,:,:)  = rmxl_min 
    444439      ! 
    445       IF( ln_mxl0 ) THEN            ! surface mixing length = F(stress) : l=vkarmn*2.e5*taum/(rau0*g) 
    446          zraug = vkarmn * 2.e5_wp / ( rau0 * grav ) 
     440      IF( ln_mxl0 ) THEN            ! surface mixing length = F(stress) : l=vkarmn*2.e5*taum/(rho0*g) 
     441         zraug = vkarmn * 2.e5_wp / ( rho0 * grav ) 
    447442         DO_2D_00_00 
    448443            zmxlm(ji,jj,1) = MAX( rn_mxl0, zraug * taum(ji,jj) * tmask(ji,jj,1) ) 
     
    527522      IF( nn_pdl == 1 ) THEN      !* Prandtl number case: update avt 
    528523         DO_3D_00_00( 2, jpkm1 ) 
    529             p_avt(ji,jj,jk)   = MAX( apdlr(ji,jj,jk) * p_avt(ji,jj,jk), avtb_2d(ji,jj) * avtb(jk) ) * tmask(ji,jj,jk) 
     524            p_avt(ji,jj,jk)   = MAX( apdlr(ji,jj,jk) * p_avt(ji,jj,jk), avtb_2d(ji,jj) * avtb(jk) ) * wmask(ji,jj,jk) 
    530525         END_3D 
    531526      ENDIF 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/nemogcm.F90

    r12482 r12724  
    6060   USE diacfl         ! CFL diagnostics               (dia_cfl_init routine) 
    6161   USE diamlr         ! IOM context management for multiple-linear-regression analysis 
     62#if defined key_qco 
    6263   USE steplf         ! NEMO time-stepping               (stplf     routine) 
     64#else 
     65   USE step           ! NEMO time-stepping               (stp       routine) 
     66#endif 
    6367   USE isfstp         ! ice shelf                     (isf_stp_init routine) 
    6468   USE icbini         ! handle bergs, initialisation 
     
    8488#endif 
    8589   ! 
     90   USE in_out_manager ! I/O manager 
    8691   USE lib_mpp        ! distributed memory computing 
    8792   USE mppini         ! shared/distributed memory setting (mpp_init routine) 
     
    160165      !                            !==   time stepping   ==! 
    161166      !                            !-----------------------! 
     167      ! 
     168      !                                               !== set the model time-step  ==! 
     169      ! 
    162170      istp = nit000 
    163171      ! 
     
    178186      ! 
    179187      DO WHILE( istp <= nitend .AND. nstop == 0 ) 
     188#if defined key_qco 
    180189         CALL stplf 
     190#else 
     191         CALL stp 
     192#endif 
    181193         istp = istp + 1 
    182194      END DO 
     
    202214            ENDIF 
    203215 
     216#if defined key_qco 
    204217            CALL stplf        ( istp ) 
     218#else 
     219            CALL stp          ( istp ) 
     220#endif 
    205221            istp = istp + 1 
    206222 
     
    314330      IF( lwm )   CALL ctl_opn(     numond, 'output.namelist.dyn', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, -1, .FALSE. ) 
    315331      ! open /dev/null file to be able to supress output write easily 
     332      IF( Agrif_Root() ) THEN 
    316333                  CALL ctl_opn(     numnul,           '/dev/null', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, -1, .FALSE. ) 
    317       ! 
     334#ifdef key_agrif 
     335      ELSE 
     336                  numnul = Agrif_Parent(numnul)    
     337#endif 
     338      ENDIF 
    318339      !                             !--------------------! 
    319340      !                             ! Open listing units !  -> need sn_cfctl from namctl to define lwp 
     
    479500 
    480501      !                                      ! Icebergs 
    481                            CALL icb_init( rdt, nit000)   ! initialise icebergs instance 
     502                           CALL icb_init( rn_Dt, nit000)   ! initialise icebergs instance 
    482503 
    483504                                                ! ice shelf 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/oce.F90

    r12377 r12724  
    2828   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)     ::   rn2b ,  rn2    !: brunt-vaisala frequency**2     [s-2] 
    2929   ! 
    30    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   rhd    !: in situ density anomalie rhd=(rho-rau0)/rau0  [no units] 
     30   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   rhd    !: in situ density anomalie rhd=(rho-rho0)/rho0  [no units] 
    3131   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   rhop   !: potential volumic mass                           [kg/m3] 
    3232   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   Cu_adv                   !: vertical Courant number (adaptive-implicit) 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/step.F90

    r12680 r12724  
    9191      !! --------------------------------------------------------------------- 
    9292#if defined key_agrif 
     93      IF( nstop > 0 ) return   ! avoid to go further if an error was detected during previous time step  
    9394      kstp = nit000 + Agrif_Nb_Step() 
    9495      Kbb_a = Nbb; Kmm_a = Nnn; Krhs_a = Nrhs   ! agrif_oce module copies of time level indices 
     
    104105      ! 
    105106      IF( ln_timing )   CALL timing_start('stp') 
     107      ! 
     108      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
     109      ! model timestep 
     110      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
     111      ! 
     112      IF( l_1st_euler ) THEN   
     113         ! start or restart with Euler 1st time-step 
     114         rDt =  rn_Dt    
     115         r1_Dt = 1._wp / rDt 
     116      ENDIF 
    106117      ! 
    107118      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
     
    303314#if defined key_agrif 
    304315      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    305       ! AGRIF 
     316      ! AGRIF recursive integration 
    306317      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<       
    307318                         Kbb_a = Nbb; Kmm_a = Nnn; Krhs_a = Nrhs      ! agrif_oce module copies of time level indices 
    308319                         CALL Agrif_Integrate_ChildGrids( stp )       ! allows to finish all the Child Grids before updating 
    309  
    310                          IF( Agrif_NbStepint() == 0 ) THEN 
    311                             CALL Agrif_update_all( )                  ! Update all components 
    312                          ENDIF 
     320#endif 
     321      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
     322      ! Control 
     323      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
     324                         CALL stp_ctl      ( kstp, Nbb, Nnn, indic ) 
     325#if defined key_agrif 
     326      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
     327      ! AGRIF update 
     328      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<       
     329      IF( Agrif_NbStepint() == 0 .AND. nstop == 0 ) THEN 
     330                         CALL Agrif_update_all( )                  ! Update all components 
     331      ENDIF 
    313332#endif 
    314333      IF( ln_diaobs  )   CALL dia_obs      ( kstp, Nnn )      ! obs-minus-model (assimilation) diagnostics (call after dynamics update) 
    315334 
    316335      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    317       ! Control 
    318       !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    319                          CALL stp_ctl      ( kstp, Nbb, Nnn, indic ) 
    320                           
     336      ! File manipulation at the end of the first time step 
     337      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<                          
    321338      IF( kstp == nit000 ) THEN                          ! 1st time step only 
    322339                                        CALL iom_close( numror )   ! close input  ocean restart file 
     
    332349      ! 
    333350#if defined key_iomput 
     351      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
     352      ! Finalize contextes if end of simulation or error detected 
     353      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<                          
    334354      IF( kstp == nitend .OR. indic < 0 ) THEN  
    335355                      CALL iom_context_finalize(      cxios_context          ) ! needed for XIOS+AGRIF 
    336                       IF(lrxios) CALL iom_context_finalize(      crxios_context          ) 
     356         IF( lrxios ) CALL iom_context_finalize(      crxios_context         ) 
    337357         IF( ln_crs ) CALL iom_context_finalize( trim(cxios_context)//"_crs" ) !  
    338358      ENDIF 
    339359#endif 
     360      ! 
     361      IF( l_1st_euler ) THEN         ! recover Leap-frog timestep 
     362         rDt = 2._wp * rn_Dt    
     363         r1_Dt = 1._wp / rDt 
     364         l_1st_euler = .FALSE.       
     365      ENDIF 
    340366      ! 
    341367      IF( ln_timing )   CALL timing_stop('stp') 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/stepLF.F90

    r12680 r12724  
    107107      ! 
    108108      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
     109      ! model timestep 
     110      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
     111      ! 
     112      IF( l_1st_euler ) THEN   
     113         ! start or restart with Euler 1st time-step 
     114         rDt =  rn_Dt    
     115         r1_Dt = 1._wp / rDt 
     116      ENDIF 
     117      ! 
     118      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
     119 
    109120      ! update I/O and calendar 
    110121      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
     
    356367      IF( kstp == nitend .OR. indic < 0 ) THEN 
    357368                      CALL iom_context_finalize(      cxios_context          ) ! needed for XIOS+AGRIF 
    358                       IF(lrxios) CALL iom_context_finalize(      crxios_context          ) 
     369         IF(lrxios) CALL iom_context_finalize(      crxios_context          ) 
    359370         IF( ln_crs ) CALL iom_context_finalize( trim(cxios_context)//"_crs" ) ! 
    360371      ENDIF 
    361372#endif 
     373      ! 
     374      IF( l_1st_euler ) THEN         ! recover Leap-frog timestep 
     375         rDt = 2._wp * rn_Dt    
     376         r1_Dt = 1._wp / rDt 
     377         l_1st_euler = .FALSE.       
     378      ENDIF 
    362379      ! 
    363380      IF( ln_timing )   CALL timing_stop('stplf') 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/timing.F90

    r11536 r12724  
    390390            WRITE(numtime,'(A28,F11.6,A2, F4.1,A3,A25,I8)') 'Waiting  global time : ',timing_glob(4*ji-1)   & 
    391391               &                                                         , ' (',      zperc,' %)',   ' on MPI rank : ', ji 
    392             zsypd = rn_rdt * REAL(nitend-nit000-1, wp) / (timing_glob(4*ji) * 365.) 
     392            zsypd = rn_Dt * REAL(nitend-nit000-1, wp) / (timing_glob(4*ji) * 365.) 
    393393            WRITE(numtime,'(A28,F11.6,A7,F10.3,A2,A15,I8)') 'Total           time : ',timing_glob(4*ji  )   & 
    394394               &                                                         , ' (SYPD: ', zsypd, ')',   ' on MPI rank : ', ji 
Note: See TracChangeset for help on using the changeset viewer.