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 9939 for NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/TRA – NEMO

Ignore:
Timestamp:
2018-07-13T09:28:50+02:00 (6 years ago)
Author:
gm
Message:

#1911 (ENHANCE-04): RK3 branche phased with MLF@9937 branche

Location:
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3
Files:
15 edited
1 copied

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/TRA/eosbn2.F90

    r9757 r9939  
    190190      !!                   ***  ROUTINE eos_insitu  *** 
    191191      !! 
    192       !! ** Purpose :   Compute the in situ density (ratio rho/rau0) from 
     192      !! ** Purpose :   Compute the in situ density (ratio rho/rho0) from 
    193193      !!       potential temperature and salinity using an equation of state 
    194194      !!       selected in the nameos namelist 
    195195      !! 
    196       !! ** Method  :   prd(t,s,z) = ( rho(t,s,z) - rau0 ) / rau0 
     196      !! ** Method  :   prd(t,s,z) = ( rho(t,s,z) - rho0 ) / rho0 
    197197      !!         with   prd    in situ density anomaly      no units 
    198198      !!                t      TEOS10: CT or EOS80: PT      Celsius 
     
    200200      !!                z      depth                        meters 
    201201      !!                rho    in situ density              kg/m^3 
    202       !!                rau0   reference density            kg/m^3 
     202      !!                rho0   reference density            kg/m^3 
    203203      !! 
    204204      !!     ln_teos10 : polynomial TEOS-10 equation of state is used for rho(t,s,z). 
     
    209209      !! 
    210210      !!     ln_seos : simplified equation of state 
    211       !!              prd(t,s,z) = ( -a0*(1+lambda/2*(T-T0)+mu*z+nu*(S-S0))*(T-T0) + b0*(S-S0) ) / rau0 
     211      !!              prd(t,s,z) = ( -a0*(1+lambda/2*(T-T0)+mu*z+nu*(S-S0))*(T-T0) + b0*(S-S0) ) / rho0 
    212212      !!              linear case function of T only: rn_alpha<>0, other coefficients = 0 
    213213      !!              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 DO 
     
    288288                     &  - rn_nu * zt * zs 
    289289                     !                                  
    290                   prd(ji,jj,jk) = zn * r1_rau0 * ztm                ! density anomaly (masked) 
     290                  prd(ji,jj,jk) = zn * r1_rho0 * ztm                ! density anomaly (masked) 
    291291               END DO 
    292292            END DO 
     
    306306      !!                  ***  ROUTINE eos_insitu_pot  *** 
    307307      !! 
    308       !! ** Purpose :   Compute the in situ density (ratio rho/rau0) and the 
     308      !! ** Purpose :   Compute the in situ density (ratio rho/rho0) and the 
    309309      !!      potential volumic mass (Kg/m3) from potential temperature and 
    310310      !!      salinity fields using an equation of state selected in the 
     
    388388                        prhop(ji,jj,jk) = prhop(ji,jj,jk) + zn0_sto(jsmp)                      ! potential density referenced at the surface 
    389389                        ! 
    390                         prd(ji,jj,jk) = prd(ji,jj,jk) + (  zn_sto(jsmp) * r1_rau0 - 1._wp  )   ! density anomaly (masked) 
     390                        prd(ji,jj,jk) = prd(ji,jj,jk) + (  zn_sto(jsmp) * r1_rho0 - 1._wp  )   ! density anomaly (masked) 
    391391                     END DO 
    392392                     prhop(ji,jj,jk) = 0.5_wp * prhop(ji,jj,jk) * ztm / nn_sto_eos 
     
    432432                     prhop(ji,jj,jk) = zn0 * ztm                           ! potential density referenced at the surface 
    433433                     ! 
    434                      prd(ji,jj,jk) = (  zn * r1_rau0 - 1._wp  ) * ztm      ! density anomaly (masked) 
     434                     prd(ji,jj,jk) = (  zn * r1_rho0 - 1._wp  ) * ztm      ! density anomaly (masked) 
    435435                  END DO 
    436436               END DO 
     
    451451                     &  + rn_b0 * ( 1._wp - 0.5_wp*rn_lambda2*zs ) * zs   & 
    452452                     &  - rn_nu * zt * zs 
    453                   prhop(ji,jj,jk) = ( rau0 + zn ) * ztm 
     453                  prhop(ji,jj,jk) = ( rho0 + zn ) * ztm 
    454454                  !                                                     ! density anomaly (masked) 
    455455                  zn = zn - ( rn_a0 * rn_mu1 * zt + rn_b0 * rn_mu2 * zs ) * zh 
    456                   prd(ji,jj,jk) = zn * r1_rau0 * ztm 
     456                  prd(ji,jj,jk) = zn * r1_rho0 * ztm 
    457457                  ! 
    458458               END DO 
     
    473473      !!                  ***  ROUTINE eos_insitu_2d  *** 
    474474      !! 
    475       !! ** Purpose :   Compute the in situ density (ratio rho/rau0) from 
     475      !! ** Purpose :   Compute the in situ density (ratio rho/rho0) from 
    476476      !!      potential temperature and salinity using an equation of state 
    477477      !!      selected in the nameos namelist. * 2D field case 
     
    528528               zn  = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 
    529529               ! 
    530                prd(ji,jj) = zn * r1_rau0 - 1._wp               ! unmasked in situ density anomaly 
     530               prd(ji,jj) = zn * r1_rho0 - 1._wp               ! unmasked in situ density anomaly 
    531531               ! 
    532532            END DO 
     
    548548                  &  - rn_nu * zt * zs 
    549549                  ! 
    550                prd(ji,jj) = zn * r1_rau0               ! unmasked in situ density anomaly 
     550               prd(ji,jj) = zn * r1_rho0               ! unmasked in situ density anomaly 
    551551               ! 
    552552            END DO 
     
    616616                  zn  = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 
    617617                  ! 
    618                   pab(ji,jj,jk,jp_tem) = zn * r1_rau0 * ztm 
     618                  pab(ji,jj,jk,jp_tem) = zn * r1_rho0 * ztm 
    619619                  ! 
    620620                  ! beta 
     
    637637                  zn  = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 
    638638                  ! 
    639                   pab(ji,jj,jk,jp_sal) = zn / zs * r1_rau0 * ztm 
     639                  pab(ji,jj,jk,jp_sal) = zn / zs * r1_rho0 * ztm 
    640640                  ! 
    641641               END DO 
     
    654654                  ! 
    655655                  zn  = rn_a0 * ( 1._wp + rn_lambda1*zt + rn_mu1*zh ) + rn_nu*zs 
    656                   pab(ji,jj,jk,jp_tem) = zn * r1_rau0 * ztm   ! alpha 
     656                  pab(ji,jj,jk,jp_tem) = zn * r1_rho0 * ztm   ! alpha 
    657657                  ! 
    658658                  zn  = rn_b0 * ( 1._wp - rn_lambda2*zs - rn_mu2*zh ) - rn_nu*zt 
    659                   pab(ji,jj,jk,jp_sal) = zn * r1_rau0 * ztm   ! beta 
     659                  pab(ji,jj,jk,jp_sal) = zn * r1_rho0 * ztm   ! beta 
    660660                  ! 
    661661               END DO 
     
    729729               zn  = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 
    730730               ! 
    731                pab(ji,jj,jp_tem) = zn * r1_rau0 
     731               pab(ji,jj,jp_tem) = zn * r1_rho0 
    732732               ! 
    733733               ! beta 
     
    750750               zn  = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 
    751751               ! 
    752                pab(ji,jj,jp_sal) = zn / zs * r1_rau0 
     752               pab(ji,jj,jp_sal) = zn / zs * r1_rho0 
    753753               ! 
    754754               ! 
     
    768768               ! 
    769769               zn  = rn_a0 * ( 1._wp + rn_lambda1*zt + rn_mu1*zh ) + rn_nu*zs 
    770                pab(ji,jj,jp_tem) = zn * r1_rau0   ! alpha 
     770               pab(ji,jj,jp_tem) = zn * r1_rho0   ! alpha 
    771771               ! 
    772772               zn  = rn_b0 * ( 1._wp - rn_lambda2*zs - rn_mu2*zh ) - rn_nu*zt 
    773                pab(ji,jj,jp_sal) = zn * r1_rau0   ! beta 
     773               pab(ji,jj,jp_sal) = zn * r1_rho0   ! beta 
    774774               ! 
    775775            END DO 
     
    841841         zn  = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 
    842842         ! 
    843          pab(jp_tem) = zn * r1_rau0 
     843         pab(jp_tem) = zn * r1_rho0 
    844844         ! 
    845845         ! beta 
     
    862862         zn  = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 
    863863         ! 
    864          pab(jp_sal) = zn / zs * r1_rau0 
     864         pab(jp_sal) = zn / zs * r1_rho0 
    865865         ! 
    866866         ! 
     
    873873         ! 
    874874         zn  = rn_a0 * ( 1._wp + rn_lambda1*zt + rn_mu1*zh ) + rn_nu*zs 
    875          pab(jp_tem) = zn * r1_rau0   ! alpha 
     875         pab(jp_tem) = zn * r1_rho0   ! alpha 
    876876         ! 
    877877         zn  = rn_b0 * ( 1._wp - rn_lambda2*zs - rn_mu2*zh ) - rn_nu*zt 
    878          pab(jp_sal) = zn * r1_rau0   ! beta 
     878         pab(jp_sal) = zn * r1_rho0   ! beta 
    879879         ! 
    880880      CASE DEFAULT 
     
    11041104      !! ** Method  :   PE is defined analytically as the vertical  
    11051105      !!                   primitive of EOS times -g integrated between 0 and z>0. 
    1106       !!                pen is the nonlinear bsq-PE anomaly: pen = ( PE - rau0 gz ) / rau0 gz - rd 
     1106      !!                pen is the nonlinear bsq-PE anomaly: pen = ( PE - rho0 gz ) / rho0 gz - rd 
    11071107      !!                                                      = 1/z * /int_0^z rd dz - rd  
    11081108      !!                                where rd is the density anomaly (see eos_rhd function) 
    11091109      !!                ab_pe are partial derivatives of PE anomaly with respect to T and S: 
    1110       !!                    ab_pe(1) = - 1/(rau0 gz) * dPE/dT + drd/dT = - d(pen)/dT 
    1111       !!                    ab_pe(2) =   1/(rau0 gz) * dPE/dS + drd/dS =   d(pen)/dS 
     1110      !!                    ab_pe(1) = - 1/(rho0 gz) * dPE/dT + drd/dT = - d(pen)/dT 
     1111      !!                    ab_pe(2) =   1/(rho0 gz) * dPE/dS + drd/dS =   d(pen)/dS 
    11121112      !! 
    11131113      !! ** Action  : - pen         : PE anomaly given at T-points 
     
    11561156                  zn  = ( zn2 * zh + zn1 ) * zh + zn0 
    11571157                  ! 
    1158                   ppen(ji,jj,jk)  = zn * zh * r1_rau0 * ztm 
     1158                  ppen(ji,jj,jk)  = zn * zh * r1_rho0 * ztm 
    11591159                  ! 
    11601160                  ! alphaPE non-linear anomaly 
     
    11711171                  zn  = ( zn2 * zh + zn1 ) * zh + zn0 
    11721172                  !                               
    1173                   pab_pe(ji,jj,jk,jp_tem) = zn * zh * r1_rau0 * ztm 
     1173                  pab_pe(ji,jj,jk,jp_tem) = zn * zh * r1_rho0 * ztm 
    11741174                  ! 
    11751175                  ! betaPE non-linear anomaly 
     
    11861186                  zn  = ( zn2 * zh + zn1 ) * zh + zn0 
    11871187                  !                               
    1188                   pab_pe(ji,jj,jk,jp_sal) = zn / zs * zh * r1_rau0 * ztm 
     1188                  pab_pe(ji,jj,jk,jp_sal) = zn / zs * zh * r1_rho0 * ztm 
    11891189                  ! 
    11901190               END DO 
     
    12011201                  zh  = gdept_n(ji,jj,jk)              ! depth in meters  at t-point 
    12021202                  ztm = tmask(ji,jj,jk)                ! tmask 
    1203                   zn  = 0.5_wp * zh * r1_rau0 * ztm 
     1203                  zn  = 0.5_wp * zh * r1_rho0 * ztm 
    12041204                  !                                    ! Potential Energy 
    12051205                  ppen(ji,jj,jk) = ( rn_a0 * rn_mu1 * zt + rn_b0 * rn_mu2 * zs ) * zn 
     
    12481248      IF(lwm) WRITE( numond, nameos ) 
    12491249      ! 
    1250       rau0        = 1026._wp                 !: volumic mass of reference     [kg/m3] 
     1250      rho0        = 1026._wp                 !: volumic mass of reference     [kg/m3] 
    12511251      rcp         = 3991.86795711963_wp      !: heat capacity     [J/K] 
    12521252      ! 
     
    16571657            WRITE(numout,*) '   ==>>>   use of simplified eos:    ' 
    16581658            WRITE(numout,*) '              rhd(dT=T-10,dS=S-35,Z) = [-a0*(1+lambda1/2*dT+mu1*Z)*dT ' 
    1659             WRITE(numout,*) '                                       + b0*(1+lambda2/2*dT+mu2*Z)*dS - nu*dT*dS] / rau0' 
     1659            WRITE(numout,*) '                                       + b0*(1+lambda2/2*dT+mu2*Z)*dS - nu*dT*dS] / rho0' 
    16601660            WRITE(numout,*) '              with the following coefficients :' 
    16611661            WRITE(numout,*) '                 thermal exp. coef.    rn_a0      = ', rn_a0 
     
    16761676      END SELECT 
    16771677      ! 
    1678       rau0_rcp    = rau0 * rcp  
    1679       r1_rau0     = 1._wp / rau0 
     1678      rho0_rcp    = rho0 * rcp  
     1679      r1_rho0     = 1._wp / rho0 
    16801680      r1_rcp      = 1._wp / rcp 
    1681       r1_rau0_rcp = 1._wp / rau0_rcp  
     1681      r1_rho0_rcp = 1._wp / rho0_rcp  
    16821682      ! 
    16831683      IF(lwp) THEN 
     
    16941694      IF(lwp) WRITE(numout,*) 
    16951695      IF(lwp) WRITE(numout,*) '   Associated physical constant' 
    1696       IF(lwp) WRITE(numout,*) '      volumic mass of reference           rau0  = ', rau0   , ' kg/m^3' 
    1697       IF(lwp) WRITE(numout,*) '      1. / rau0                        r1_rau0  = ', r1_rau0, ' m^3/kg' 
     1696      IF(lwp) WRITE(numout,*) '      volumic mass of reference           rho0  = ', rho0   , ' kg/m^3' 
     1697      IF(lwp) WRITE(numout,*) '      1. / rho0                        r1_rho0  = ', r1_rho0, ' m^3/kg' 
    16981698      IF(lwp) WRITE(numout,*) '      ocean specific heat                 rcp   = ', rcp    , ' J/Kelvin' 
    1699       IF(lwp) WRITE(numout,*) '      rau0 * rcp                       rau0_rcp = ', rau0_rcp 
    1700       IF(lwp) WRITE(numout,*) '      1. / ( rau0 * rcp )           r1_rau0_rcp = ', r1_rau0_rcp 
     1699      IF(lwp) WRITE(numout,*) '      rho0 * rcp                       rho0_rcp = ', rho0_rcp 
     1700      IF(lwp) WRITE(numout,*) '      1. / ( rho0 * rcp )           r1_rho0_rcp = ', r1_rho0_rcp 
    17011701      ! 
    17021702   END SUBROUTINE eos_init 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/TRA/traadv.F90

    r9598 r9939  
    8787      INTEGER ::   jk   ! dummy loop index 
    8888      REAL(wp), DIMENSION(jpi,jpj,jpk)        :: zun, zvn, zwn   ! 3D workspace 
    89       REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::   ztrdt, ztrds 
     89      REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE ::   ztrd 
    9090      !!---------------------------------------------------------------------- 
    9191      ! 
    9292      IF( ln_timing )   CALL timing_start('tra_adv') 
    93       ! 
    94       !                                          ! set time step 
    95       IF( neuler == 0 .AND. kt == nit000 ) THEN   ;   r2dt =         rdt   ! at nit000             (Euler) 
    96       ELSEIF( kt <= nit000 + 1 )           THEN   ;   r2dt = 2._wp * rdt   ! at nit000 or nit000+1 (Leapfrog) 
    97       ENDIF 
    9893      ! 
    9994      !                                         !==  effective transport  ==! 
     
    138133      ! 
    139134      IF( l_trdtra )   THEN                    !* Save ta and sa trends 
    140          ALLOCATE( ztrdt(jpi,jpj,jpk), ztrds(jpi,jpj,jpk) ) 
    141          ztrdt(:,:,:) = tsa(:,:,:,jp_tem) 
    142          ztrds(:,:,:) = tsa(:,:,:,jp_sal) 
     135         ALLOCATE( ztrd(jpi,jpj,jpk,jpts) ) 
     136         ztrd(:,:,:,:) = tsa(:,:,:,:) 
    143137      ENDIF 
    144138      ! 
     
    146140      ! 
    147141      CASE ( np_CEN )                                 ! Centered scheme : 2nd / 4th order 
    148          CALL tra_adv_cen    ( kt, nit000, 'TRA',         zun, zvn, zwn     , tsn, tsa, jpts, nn_cen_h, nn_cen_v ) 
     142         CALL tra_adv_cen    ( kt, nit000, 'TRA',      zun, zvn, zwn     , tsn, tsa, jpts, nn_cen_h, nn_cen_v ) 
    149143      CASE ( np_FCT )                                 ! FCT scheme      : 2nd / 4th order 
    150          CALL tra_adv_fct    ( kt, nit000, 'TRA', r2dt, zun, zvn, zwn, tsb, tsn, tsa, jpts, nn_fct_h, nn_fct_v ) 
     144         CALL tra_adv_fct    ( kt, nit000, 'TRA', rDt, zun, zvn, zwn, tsb, tsn, tsa, jpts, nn_fct_h, nn_fct_v ) 
    151145      CASE ( np_MUS )                                 ! MUSCL 
    152          CALL tra_adv_mus    ( kt, nit000, 'TRA', r2dt, zun, zvn, zwn, tsb,      tsa, jpts        , ln_mus_ups )  
     146         CALL tra_adv_mus    ( kt, nit000, 'TRA', rDt, zun, zvn, zwn, tsb,      tsa, jpts        , ln_mus_ups )  
    153147      CASE ( np_UBS )                                 ! UBS 
    154          CALL tra_adv_ubs    ( kt, nit000, 'TRA', r2dt, zun, zvn, zwn, tsb, tsn, tsa, jpts        , nn_ubs_v   ) 
     148         CALL tra_adv_ubs    ( kt, nit000, 'TRA', rDt, zun, zvn, zwn, tsb, tsn, tsa, jpts        , nn_ubs_v   ) 
    155149      CASE ( np_QCK )                                 ! QUICKEST 
    156          CALL tra_adv_qck    ( kt, nit000, 'TRA', r2dt, zun, zvn, zwn, tsb, tsn, tsa, jpts                     ) 
     150         CALL tra_adv_qck    ( kt, nit000, 'TRA', rDt, zun, zvn, zwn, tsb, tsn, tsa, jpts                     ) 
    157151      ! 
    158152      END SELECT 
     
    160154      IF( l_trdtra )   THEN                      ! save the advective trends for further diagnostics 
    161155         DO jk = 1, jpkm1 
    162             ztrdt(:,:,jk) = tsa(:,:,jk,jp_tem) - ztrdt(:,:,jk) 
    163             ztrds(:,:,jk) = tsa(:,:,jk,jp_sal) - ztrds(:,:,jk) 
     156            ztrd(:,:,jk,:) = tsa(:,:,jk,:) - ztrd(:,:,jk,:) 
    164157         END DO 
    165          CALL trd_tra( kt, 'TRA', jp_tem, jptra_totad, ztrdt ) 
    166          CALL trd_tra( kt, 'TRA', jp_sal, jptra_totad, ztrds ) 
    167          DEALLOCATE( ztrdt, ztrds ) 
     158         CALL trd_tra( kt, 'TRA', jp_tem, jptra_totad, ztrd(:,:,:,jp_tem) ) 
     159         CALL trd_tra( kt, 'TRA', jp_sal, jptra_totad, ztrd(:,:,:,jp_sal) ) 
     160         DEALLOCATE( ztrd ) 
    168161      ENDIF 
    169162      !                                              ! print mean trends (used for debugging) 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/TRA/traadv_fct.F90

    r9598 r9939  
    2020   USE diaptr         ! poleward transport diagnostics 
    2121   USE diaar5         ! AR5 diagnostics 
    22    USE phycst  , ONLY : rau0_rcp 
    2322   ! 
    2423   USE in_out_manager ! I/O manager 
     
    131130                  zwx(ji,jj,jk) = 0.5 * ( zfp_ui * ptb(ji,jj,jk,jn) + zfm_ui * ptb(ji+1,jj  ,jk,jn) ) 
    132131                  zwy(ji,jj,jk) = 0.5 * ( zfp_vj * ptb(ji,jj,jk,jn) + zfm_vj * ptb(ji  ,jj+1,jk,jn) ) 
     132!!gm faster coding ?   ===>>> to be tested : 
     133!                  zwx(ji,jj,jk) = MAX( pun(ji,jj,jk) , 0._wp ) * ptb(ji  ,jj,jk,jn)   & 
     134!                     &          + MIN( pun(ji,jj,jk) , 0._wp ) * ptb(ji+1,jj,jk,jn) 
     135!                  zwy(ji,jj,jk) = MAX( pvn(ji,jj,jk) , 0._wp ) * ptb(ji,jj  ,jk,jn)   & 
     136!                     &          + MIN( pvn(ji,jj,jk) , 0._wp ) * ptb(ji,jj+1,jk,jn) 
     137!!gm 
     138                   
    133139               END DO 
    134140            END DO 
     
    141147                  zfm_wk = pwn(ji,jj,jk) - ABS( pwn(ji,jj,jk) ) 
    142148                  zwz(ji,jj,jk) = 0.5 * ( zfp_wk * ptb(ji,jj,jk,jn) + zfm_wk * ptb(ji,jj,jk-1,jn) ) * wmask(ji,jj,jk) 
     149!!gm faster coding ?   ===>>> to be tested : 
     150!                  zwx(ji,jj,jk) = MAX( pwn(ji,jj,jk) , 0._wp ) * pwn(ji,jj,jk  ,jn)   & 
     151!                     &          + MIN( pwn(ji,jj,jk) , 0._wp ) * pwn(ji,jj,jk-1,jn) 
     152!!gm 
    143153               END DO 
    144154            END DO 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/TRA/trabbc.F90

    r9598 r9939  
    6464      !!       ocean bottom can be computed once and is added to the temperature 
    6565      !!       trend juste above the bottom at each time step: 
    66       !!            ta = ta + Qsf / (rau0 rcp e3T) for k= mbkt 
     66      !!            ta = ta + Qsf / (rho0 rcp e3T) for k= mbkt 
    6767      !!       Where Qsf is the geothermal heat flux. 
    6868      !! 
     
    7676      ! 
    7777      INTEGER  ::   ji, jj    ! dummy loop indices 
    78       REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   ztrdt   ! 3D workspace 
     78      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   ztrd   ! 3D workspace 
    7979      !!---------------------------------------------------------------------- 
    8080      ! 
     
    8282      ! 
    8383      IF( l_trdtra )   THEN         ! Save the input temperature trend 
    84          ALLOCATE( ztrdt(jpi,jpj,jpk) ) 
    85          ztrdt(:,:,:) = tsa(:,:,:,jp_tem) 
     84         ALLOCATE( ztrd(jpi,jpj,jpk) ) 
     85         ztrd(:,:,:) = tsa(:,:,:,jp_tem) 
    8686      ENDIF 
    8787      !                             !  Add the geothermal trend on temperature 
     
    9595      ! 
    9696      IF( l_trdtra ) THEN        ! Send the trend for diagnostics 
    97          ztrdt(:,:,:) = tsa(:,:,:,jp_tem) - ztrdt(:,:,:) 
    98          CALL trd_tra( kt, 'TRA', jp_tem, jptra_bbc, ztrdt ) 
    99          DEALLOCATE( ztrdt ) 
     97         ztrd(:,:,:) = tsa(:,:,:,jp_tem) - ztrd(:,:,:) 
     98         CALL trd_tra( kt, 'TRA', jp_tem, jptra_bbc, ztrd ) 
     99         DEALLOCATE( ztrd ) 
    100100      ENDIF 
    101101      ! 
     
    157157         ALLOCATE( qgh_trd0(jpi,jpj) )    ! allocation 
    158158         ! 
    159          SELECT CASE ( nn_geoflx )        ! geothermal heat flux / (rauO * Cp) 
     159         SELECT CASE ( nn_geoflx )        ! geothermal heat flux / (rhoO * Cp) 
    160160         ! 
    161161         CASE ( 1 )                          !* constant flux 
    162162            IF(lwp) WRITE(numout,*) '   ==>>>   constant heat flux  =   ', rn_geoflx_cst 
    163             qgh_trd0(:,:) = r1_rau0_rcp * rn_geoflx_cst 
     163            qgh_trd0(:,:) = r1_rho0_rcp * rn_geoflx_cst 
    164164            ! 
    165165         CASE ( 2 )                          !* variable geothermal heat flux : read the geothermal fluxes in mW/m2 
     
    178178 
    179179            CALL fld_read( nit000, 1, sf_qgh )                         ! Read qgh data 
    180             qgh_trd0(:,:) = r1_rau0_rcp * sf_qgh(1)%fnow(:,:,1) * 1.e-3 ! conversion in W/m2 
     180            qgh_trd0(:,:) = r1_rho0_rcp * sf_qgh(1)%fnow(:,:,1) * 1.e-3 ! conversion in W/m2 
    181181            ! 
    182182         CASE DEFAULT 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/TRA/trabbl.F90

    r9598 r9939  
    103103      INTEGER, INTENT( in ) ::   kt   ! ocean time-step 
    104104      ! 
    105       REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   ztrdt, ztrds 
     105      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:,:) ::   ztrd 
    106106      !!---------------------------------------------------------------------- 
    107107      ! 
     
    109109      ! 
    110110      IF( l_trdtra )   THEN                         !* Save the T-S input trends 
    111          ALLOCATE( ztrdt(jpi,jpj,jpk) , ztrds(jpi,jpj,jpk) ) 
    112          ztrdt(:,:,:) = tsa(:,:,:,jp_tem) 
    113          ztrds(:,:,:) = tsa(:,:,:,jp_sal) 
     111         ALLOCATE( ztrd(jpi,jpj,jpk,jpts) ) 
     112         ztrd(:,:,:,:) = tsa(:,:,:,:) 
    114113      ENDIF 
    115114 
     
    143142 
    144143      IF( l_trdtra )   THEN                      ! send the trends for further diagnostics 
    145          ztrdt(:,:,:) = tsa(:,:,:,jp_tem) - ztrdt(:,:,:) 
    146          ztrds(:,:,:) = tsa(:,:,:,jp_sal) - ztrds(:,:,:) 
    147          CALL trd_tra( kt, 'TRA', jp_tem, jptra_bbl, ztrdt ) 
    148          CALL trd_tra( kt, 'TRA', jp_sal, jptra_bbl, ztrds ) 
    149          DEALLOCATE( ztrdt, ztrds ) 
     144         ztrd(:,:,:,:) = tsa(:,:,:,:) - ztrd(:,:,:,:) 
     145         CALL trd_tra( kt, 'TRA', jp_tem, jptra_bbl, ztrd(:,:,:,jp_tem) ) 
     146         CALL trd_tra( kt, 'TRA', jp_sal, jptra_bbl, ztrd(:,:,:,jp_sal) ) 
     147         DEALLOCATE( ztrd ) 
    150148      ENDIF 
    151149      ! 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/TRA/tradmp.F90

    r9598 r9939  
    9494      INTEGER ::   ji, jj, jk, jn   ! dummy loop indices 
    9595      REAL(wp), DIMENSION(jpi,jpj,jpk,jpts)     ::  zts_dta 
    96       REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE ::  ztrdts 
     96      REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE ::  ztrd 
    9797      !!---------------------------------------------------------------------- 
    9898      ! 
     
    100100      ! 
    101101      IF( l_trdtra )   THEN                    !* Save ta and sa trends 
    102          ALLOCATE( ztrdts(jpi,jpj,jpk,jpts) )  
    103          ztrdts(:,:,:,:) = tsa(:,:,:,:)  
     102         ALLOCATE( ztrd(jpi,jpj,jpk,jpts) )  
     103         ztrd(:,:,:,:) = tsa(:,:,:,:)  
    104104      ENDIF 
    105105      !                           !==  input T-S data at kt  ==! 
     
    150150      ! 
    151151      IF( l_trdtra )   THEN       ! trend diagnostic 
    152          ztrdts(:,:,:,:) = tsa(:,:,:,:) - ztrdts(:,:,:,:) 
    153          CALL trd_tra( kt, 'TRA', jp_tem, jptra_dmp, ztrdts(:,:,:,jp_tem) ) 
    154          CALL trd_tra( kt, 'TRA', jp_sal, jptra_dmp, ztrdts(:,:,:,jp_sal) ) 
    155          DEALLOCATE( ztrdts )  
     152         ztrd(:,:,:,:) = tsa(:,:,:,:) - ztrd(:,:,:,:) 
     153         CALL trd_tra( kt, 'TRA', jp_tem, jptra_dmp, ztrd(:,:,:,jp_tem) ) 
     154         CALL trd_tra( kt, 'TRA', jp_sal, jptra_dmp, ztrd(:,:,:,jp_sal) ) 
     155         DEALLOCATE( ztrd )  
    156156      ENDIF 
    157157      !                           ! Control print 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/TRA/traldf.F90

    r9598 r9939  
    5555      INTEGER, INTENT( in ) ::   kt   ! ocean time-step index 
    5656      !! 
    57       REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   ztrdt, ztrds 
     57      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:,:) ::   ztrd   ! 4D workspace 
    5858      !!---------------------------------------------------------------------- 
    5959      ! 
     
    6161      ! 
    6262      IF( l_trdtra )   THEN                    !* Save ta and sa trends 
    63          ALLOCATE( ztrdt(jpi,jpj,jpk) , ztrds(jpi,jpj,jpk) )  
    64          ztrdt(:,:,:) = tsa(:,:,:,jp_tem)  
    65          ztrds(:,:,:) = tsa(:,:,:,jp_sal) 
     63         ALLOCATE( ztrd(jpi,jpj,jpk,jpts) )  
     64         ztrd(:,:,:,:) = tsa(:,:,:,:)  
    6665      ENDIF 
    6766      ! 
     
    7877      ! 
    7978      IF( l_trdtra )   THEN                    !* save the horizontal diffusive trends for further diagnostics 
    80          ztrdt(:,:,:) = tsa(:,:,:,jp_tem) - ztrdt(:,:,:) 
    81          ztrds(:,:,:) = tsa(:,:,:,jp_sal) - ztrds(:,:,:) 
    82          CALL trd_tra( kt, 'TRA', jp_tem, jptra_ldf, ztrdt ) 
    83          CALL trd_tra( kt, 'TRA', jp_sal, jptra_ldf, ztrds ) 
    84          DEALLOCATE( ztrdt, ztrds )  
     79         ztrd(:,:,:,:) = tsa(:,:,:,:) - ztrd(:,:,:,:) 
     80         CALL trd_tra( kt, 'TRA', jp_tem, jptra_ldf, ztrd(:,:,:,jp_tem) ) 
     81         CALL trd_tra( kt, 'TRA', jp_sal, jptra_ldf, ztrd(:,:,:,jp_sal) ) 
     82         DEALLOCATE( ztrd )  
    8583      ENDIF 
    8684      !                                        !* print mean trends (used for debugging) 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/TRA/traldf_iso.F90

    r9779 r9939  
    108108      REAL(wp) ::  zmsku, zahu_w, zabe1, zcof1, zcoef3   ! local scalars 
    109109      REAL(wp) ::  zmskv, zahv_w, zabe2, zcof2, zcoef4   !   -      - 
    110       REAL(wp) ::  zcoef0, ze3w_2, zsign, z2dt, z1_2dt   !   -      - 
     110      REAL(wp) ::  zcoef0, ze3w_2, zsign                 !   -      - 
    111111      REAL(wp), DIMENSION(jpi,jpj)     ::   zdkt, zdk1t, z2d 
    112112      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zdit, zdjt, zftu, zftv, ztfw  
     
    127127      IF( cdtype == 'TRA' .AND. ( iom_use("uadv_heattr") .OR. iom_use("vadv_heattr") .OR. & 
    128128         &                        iom_use("uadv_salttr") .OR. iom_use("vadv_salttr")  ) )   l_hst = .TRUE. 
    129       ! 
    130       !                                            ! set time step size (Euler/Leapfrog) 
    131       IF( neuler == 0 .AND. kt == nit000 ) THEN   ;   z2dt =     rdt      ! at nit000   (Euler) 
    132       ELSE                                        ;   z2dt = 2.* rdt      !             (Leapfrog) 
    133       ENDIF 
    134       z1_2dt = 1._wp / z2dt 
    135129      ! 
    136130      IF( kpass == 1 ) THEN   ;   zsign =  1._wp      ! bilaplacian operator require a minus sign (eddy diffusivity >0) 
     
    191185                     DO ji = 1, fs_jpim1 
    192186                        ze3w_2 = e3w_n(ji,jj,jk) * e3w_n(ji,jj,jk) 
    193                         zcoef0 = z2dt * (  akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ze3w_2  ) 
    194                         akz(ji,jj,jk) = MAX( zcoef0 - 0.5_wp , 0._wp ) * ze3w_2 * z1_2dt 
     187                        zcoef0 = rDt * (  akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ze3w_2  ) 
     188                        akz(ji,jj,jk) = MAX( zcoef0 - 0.5_wp , 0._wp ) * ze3w_2 * r1_Dt 
    195189                     END DO 
    196190                  END DO 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/TRA/traldf_triad.F90

    r9598 r9939  
    8585      INTEGER  ::  ip,jp,kp         ! dummy loop indices 
    8686      INTEGER  ::  ierr            ! local integer 
    87       REAL(wp) ::  zmsku, zabe1, zcof1, zcoef3          ! local scalars 
    88       REAL(wp) ::  zmskv, zabe2, zcof2, zcoef4          !   -      - 
    89       REAL(wp) ::  zcoef0, ze3w_2, zsign, z2dt, z1_2dt  !   -      - 
     87      REAL(wp) ::  zmsku, zabe1, zcof1, zcoef3   ! local scalars 
     88      REAL(wp) ::  zmskv, zabe2, zcof2, zcoef4   !   -      - 
     89      REAL(wp) ::  zcoef0, ze3w_2, zsign         !   -      - 
    9090      ! 
    9191      REAL(wp) ::   zslope_skew, zslope_iso, zslope2, zbu, zbv 
     
    110110      l_hst = .FALSE. 
    111111      l_ptr = .FALSE. 
    112       IF( cdtype == 'TRA' .AND. ln_diaptr )                                                 l_ptr = .TRUE.  
    113       IF( cdtype == 'TRA' .AND. ( iom_use("uadv_heattr") .OR. iom_use("vadv_heattr") .OR. & 
    114          &                        iom_use("uadv_salttr") .OR. iom_use("vadv_salttr")  ) )   l_hst = .TRUE. 
    115       ! 
    116       !                                                        ! set time step size (Euler/Leapfrog) 
    117       IF( neuler == 0 .AND. kt == kit000 ) THEN   ;   z2dt =     rdt      ! at nit000   (Euler) 
    118       ELSE                                        ;   z2dt = 2.* rdt      !             (Leapfrog) 
     112      IF( cdtype == 'TRA' ) THEN 
     113         IF ( ln_diaptr )                                                 l_ptr = .TRUE.  
     114         IF ( iom_use("uadv_heattr") .OR. iom_use("vadv_heattr") .OR. & 
     115            & iom_use("uadv_salttr") .OR. iom_use("vadv_salttr")      )   l_hst = .TRUE. 
    119116      ENDIF 
    120       z1_2dt = 1._wp / z2dt 
    121117      ! 
    122118      IF( kpass == 1 ) THEN   ;   zsign =  1._wp      ! bilaplacian operator require a minus sign (eddy diffusivity >0) 
     
    202198                     DO ji = 1, fs_jpim1 
    203199                        ze3w_2 = e3w_n(ji,jj,jk) * e3w_n(ji,jj,jk) 
    204                         zcoef0 = z2dt * (  akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ze3w_2  ) 
    205                         akz(ji,jj,jk) = MAX( zcoef0 - 0.5_wp , 0._wp ) * ze3w_2 * z1_2dt 
     200                        zcoef0 = rDt * (  akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ze3w_2  ) 
     201                        akz(ji,jj,jk) = MAX( zcoef0 - 0.5_wp , 0._wp ) * ze3w_2 * r1_Dt 
    206202                     END DO 
    207203                  END DO 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/TRA/tramle.F90

    r9598 r9939  
    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 
     
    115115               zc = e3t_n(ji,jj,jk) * REAL( MIN( MAX( 0, inml_mle(ji,jj)-jk ) , 1  )  )    ! zc being 0 outside the ML t-points 
    116116               zmld(ji,jj) = zmld(ji,jj) + zc 
    117                zbm (ji,jj) = zbm (ji,jj) + zc * (rau0 - rhop(ji,jj,jk) ) * r1_rau0 
     117               zbm (ji,jj) = zbm (ji,jj) + zc * (rho0 - rhop(ji,jj,jk) ) * r1_rho0 
    118118               zn2 (ji,jj) = zn2 (ji,jj) + zc * (rn2(ji,jj,jk)+rn2(ji,jj,jk+1))*0.5_wp 
    119119            END DO 
     
    302302      IF( ln_mle ) THEN                ! MLE initialisation 
    303303         ! 
    304          rb_c = grav * rn_rho_c_mle /rau0        ! Mixed Layer buoyancy criteria 
     304         rb_c = grav * rn_rho_c_mle / rho0       ! Mixed Layer buoyancy criteria 
    305305         IF(lwp) WRITE(numout,*) 
    306306         IF(lwp) WRITE(numout,*) '      ML buoyancy criteria = ', rb_c, ' m/s2 ' 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/TRA/tranpc.F90

    r9598 r9939  
    6565      LOGICAL  ::   l_bottom_reached, l_column_treated 
    6666      REAL(wp) ::   zta, zalfa, zsum_temp, zsum_alfa, zaw, zdz, zsum_z 
    67       REAL(wp) ::   zsa, zbeta, zsum_sali, zsum_beta, zbw, zrw, z1_r2dt 
     67      REAL(wp) ::   zsa, zbeta, zsum_sali, zsum_beta, zbw, zrw 
    6868      REAL(wp), PARAMETER ::   zn2_zero = 1.e-14_wp      ! acceptance criteria for neutrality (N2==0) 
    6969      REAL(wp), DIMENSION(        jpk     ) ::   zvn2         ! vertical profile of N2 at 1 given point... 
     
    7171      REAL(wp), DIMENSION(jpi,jpj,jpk     ) ::   zn2          ! N^2  
    7272      REAL(wp), DIMENSION(jpi,jpj,jpk,jpts) ::   zab          ! alpha and beta 
    73       REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   ztrdt, ztrds   ! 3D workspace 
     73      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:,:) ::   ztrd   ! 4D workspace 
    7474      ! 
    7575      LOGICAL, PARAMETER :: l_LB_debug = .FALSE. ! set to true if you want to follow what is 
     
    8282      IF( MOD( kt, nn_npc ) == 0 ) THEN 
    8383         ! 
    84          IF( l_trdtra )   THEN                    !* Save initial after fields 
    85             ALLOCATE( ztrdt(jpi,jpj,jpk) , ztrds(jpi,jpj,jpk) ) 
    86             ztrdt(:,:,:) = tsa(:,:,:,jp_tem)  
    87             ztrds(:,:,:) = tsa(:,:,:,jp_sal) 
     84         IF( l_trdtra )   THEN                    !* Save input after fields 
     85            ALLOCATE( ztrd(jpi,jpj,jpk,jpts) ) 
     86            ztrd(:,:,:,:) = tsa(:,:,:,:)  
    8887         ENDIF 
    8988         ! 
     
    301300         ! 
    302301         IF( l_trdtra ) THEN         ! send the Non penetrative mixing trends for diagnostic 
    303             z1_r2dt = 1._wp / (2._wp * rdt) 
    304             ztrdt(:,:,:) = ( tsa(:,:,:,jp_tem) - ztrdt(:,:,:) ) * z1_r2dt 
    305             ztrds(:,:,:) = ( tsa(:,:,:,jp_sal) - ztrds(:,:,:) ) * z1_r2dt 
    306             CALL trd_tra( kt, 'TRA', jp_tem, jptra_npc, ztrdt ) 
    307             CALL trd_tra( kt, 'TRA', jp_sal, jptra_npc, ztrds ) 
    308             DEALLOCATE( ztrdt, ztrds ) 
     302            ztrd(:,:,:,:) = ( tsa(:,:,:,:) - ztrd(:,:,:,:) ) * r1_Dt 
     303            CALL trd_tra( kt, 'TRA', jp_tem, jptra_npc, ztrd(:,:,:,jp_tem) ) 
     304            CALL trd_tra( kt, 'TRA', jp_sal, jptra_npc, ztrd(:,:,:,jp_sal) ) 
     305            DEALLOCATE( ztrd ) 
    309306         ENDIF 
    310307         ! 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/TRA/tranxt.F90

    r9598 r9939  
    9090      INTEGER  ::   ji, jj, jk, jn   ! dummy loop indices 
    9191      REAL(wp) ::   zfact            ! local scalars 
    92       REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   ztrdt, ztrds 
     92      REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE ::   ztrd   ! 4D workspace 
    9393      !!---------------------------------------------------------------------- 
    9494      ! 
     
    111111      IF( ln_bdy )   CALL bdy_tra( kt )  ! BDY open boundaries 
    112112  
    113       ! set time step size (Euler/Leapfrog) 
    114       IF( neuler == 0 .AND. kt == nit000 ) THEN   ;   r2dt =        rdt   ! at nit000             (Euler) 
    115       ELSEIF( kt <= nit000 + 1 )           THEN   ;   r2dt = 2._wp* rdt   ! at nit000 or nit000+1 (Leapfrog) 
    116       ENDIF 
    117  
    118       ! trends computation initialisation 
    119       IF( l_trdtra )   THEN                     
    120          ALLOCATE( ztrdt(jpi,jpj,jpk) , ztrds(jpi,jpj,jpk) ) 
    121          ztrdt(:,:,jpk) = 0._wp 
    122          ztrds(:,:,jpk) = 0._wp 
     113      IF( l_trdtra )   THEN               ! trends computation initialisation 
     114         ALLOCATE( ztrd(jpi,jpj,jpk,jpts) ) 
     115         ztrd(:,:,jpk,:) = 0._wp 
    123116         IF( ln_traldf_iso ) THEN              ! diagnose the "pure" Kz diffusive trend  
    124             CALL trd_tra( kt, 'TRA', jp_tem, jptra_zdfp, ztrdt ) 
    125             CALL trd_tra( kt, 'TRA', jp_sal, jptra_zdfp, ztrds ) 
     117            CALL trd_tra( kt, 'TRA', jp_tem, jptra_zdfp, ztrd(:,:,:,jp_tem) ) 
     118            CALL trd_tra( kt, 'TRA', jp_sal, jptra_zdfp, ztrd(:,:,:,jp_sal) ) 
    126119         ENDIF 
    127120         ! total trend for the non-time-filtered variables.  
    128          zfact = 1.0 / rdt 
     121         zfact = 1.0 / rn_Dt 
    129122         ! G Nurser 23 Mar 2017. Recalculate trend as Delta(e3t*T)/e3tn; e3tn cancel from tsn terms 
    130          DO jk = 1, jpkm1 
    131             ztrdt(:,:,jk) = ( tsa(:,:,jk,jp_tem)*e3t_a(:,:,jk) / e3t_n(:,:,jk) - tsn(:,:,jk,jp_tem)) * zfact 
    132             ztrds(:,:,jk) = ( tsa(:,:,jk,jp_sal)*e3t_a(:,:,jk) / e3t_n(:,:,jk) - tsn(:,:,jk,jp_sal)) * zfact 
    133          END DO 
    134          CALL trd_tra( kt, 'TRA', jp_tem, jptra_tot, ztrdt ) 
    135          CALL trd_tra( kt, 'TRA', jp_sal, jptra_tot, ztrds ) 
    136          IF( ln_linssh ) THEN       ! linear sea surface height only 
    137             ! Store now fields before applying the Asselin filter  
    138             ! in order to calculate Asselin filter trend later. 
    139             ztrdt(:,:,:) = tsn(:,:,:,jp_tem)  
    140             ztrds(:,:,:) = tsn(:,:,:,jp_sal) 
    141          ENDIF 
    142       ENDIF 
    143  
    144       IF( neuler == 0 .AND. kt == nit000 ) THEN       ! Euler time-stepping at first time-step (only swap) 
     123         DO jn = 1, jpts 
     124            DO jk = 1, jpkm1 
     125               ztrd(:,:,jk,jn) = ( tsa(:,:,jk,jn)*e3t_a(:,:,jk) / e3t_n(:,:,jk) - tsn(:,:,jk,jn)) * zfact 
     126            END DO 
     127         END DO 
     128         CALL trd_tra( kt, 'TRA', jp_tem, jptra_tot, ztrd(:,:,:,jp_tem) ) 
     129         CALL trd_tra( kt, 'TRA', jp_sal, jptra_tot, ztrd(:,:,:,jp_sal) ) 
     130         IF( ln_linssh ) THEN       ! linear sea surface height only Store now fields before applying  
     131            !                       ! the Asselin filter in order to calculate Asselin filter trend later. 
     132            ztrd(:,:,:,:) = tsn(:,:,:,:)  
     133         ENDIF 
     134      ENDIF 
     135 
     136      IF( l_1st_euler ) THEN        ! Euler time-stepping at first time-step (only swap) 
    145137         DO jn = 1, jpts 
    146138            DO jk = 1, jpkm1 
     
    150142         IF (l_trdtra .AND. .NOT. ln_linssh ) THEN   ! Zero Asselin filter contribution must be explicitly written out since for vvl 
    151143            !                                        ! Asselin filter is output by tra_nxt_vvl that is not called on this time step 
    152             ztrdt(:,:,:) = 0._wp 
    153             ztrds(:,:,:) = 0._wp 
    154             CALL trd_tra( kt, 'TRA', jp_tem, jptra_atf, ztrdt ) 
    155             CALL trd_tra( kt, 'TRA', jp_sal, jptra_atf, ztrds ) 
     144            ztrd(:,:,:,:) = 0._wp 
     145            CALL trd_tra( kt, 'TRA', jp_tem, jptra_atf, ztrd(:,:,:,jp_tem) ) 
     146            CALL trd_tra( kt, 'TRA', jp_sal, jptra_atf, ztrd(:,:,:,jp_sal) ) 
    156147         END IF 
    157148         ! 
    158       ELSE                                            ! Leap-Frog + Asselin filter time stepping 
    159          ! 
    160          IF( ln_linssh ) THEN   ;   CALL tra_nxt_fix( kt, nit000,      'TRA', tsb, tsn, tsa, jpts )  ! linear free surface  
    161          ELSE                   ;   CALL tra_nxt_vvl( kt, nit000, rdt, 'TRA', tsb, tsn, tsa,   & 
    162            &                                                                sbc_tsc, sbc_tsc_b, jpts )  ! non-linear free surface 
    163          ENDIF 
    164          ! 
    165          CALL lbc_lnk_multi( tsb(:,:,:,jp_tem), 'T', 1., tsb(:,:,:,jp_sal), 'T', 1., & 
    166                   &          tsn(:,:,:,jp_tem), 'T', 1., tsn(:,:,:,jp_sal), 'T', 1., & 
    167                   &          tsa(:,:,:,jp_tem), 'T', 1., tsa(:,:,:,jp_sal), 'T', 1.  ) 
     149      ELSE                          ! Leap-Frog + Asselin filter time stepping 
     150         ! 
     151         IF( ln_linssh ) THEN   ;   CALL tra_nxt_fix( kt, nit000,       'TRA', tsb, tsn, tsa, jpts )  ! linear free surface  
     152         ELSE                   ;   CALL tra_nxt_vvl( kt, nit000, rn_Dt,'TRA', tsb, tsn, tsa,   & 
     153           &                                                               sbc_tsc, sbc_tsc_b, jpts )  ! non-linear free surface 
     154         ENDIF 
     155         ! 
     156         CALL lbc_lnk_multi( tsb, 'T', 1., tsn, 'T', 1., tsa, 'T', 1.  ) 
    168157         ! 
    169158      ENDIF      
    170159      ! 
    171160      IF( l_trdtra .AND. ln_linssh ) THEN      ! trend of the Asselin filter (tb filtered - tb)/dt      
    172          zfact = 1._wp / r2dt              
    173161         DO jk = 1, jpkm1 
    174             ztrdt(:,:,jk) = ( tsb(:,:,jk,jp_tem) - ztrdt(:,:,jk) ) * zfact 
    175             ztrds(:,:,jk) = ( tsb(:,:,jk,jp_sal) - ztrds(:,:,jk) ) * zfact 
    176          END DO 
    177          CALL trd_tra( kt, 'TRA', jp_tem, jptra_atf, ztrdt ) 
    178          CALL trd_tra( kt, 'TRA', jp_sal, jptra_atf, ztrds ) 
     162            ztrd(:,:,jk,:) = ( tsb(:,:,jk,:) - ztrd(:,:,jk,:) ) * r1_Dt 
     163         END DO 
     164         CALL trd_tra( kt, 'TRA', jp_tem, jptra_atf, ztrd(:,:,:,jp_tem) ) 
     165         CALL trd_tra( kt, 'TRA', jp_sal, jptra_atf, ztrd(:,:,:,jp_sal) ) 
    179166      END IF 
    180       IF( l_trdtra )   DEALLOCATE( ztrdt , ztrds ) 
     167      IF( l_trdtra )   DEALLOCATE( ztrd ) 
    181168      ! 
    182169      !                        ! control print 
     
    227214                  ztd = pta(ji,jj,jk,jn) - 2._wp * ztn + ptb(ji,jj,jk,jn)  ! time laplacian on tracers 
    228215                  ! 
    229                   ptb(ji,jj,jk,jn) = ztn + atfp * ztd                      ! ptb <-- filtered ptn  
     216                  ptb(ji,jj,jk,jn) = ztn + rn_atfp * ztd                   ! ptb <-- filtered ptn  
    230217                  ptn(ji,jj,jk,jn) = pta(ji,jj,jk,jn)                      ! ptn <-- pta 
    231218               END DO 
     
    238225 
    239226 
    240    SUBROUTINE tra_nxt_vvl( kt, kit000, p2dt, cdtype, ptb, ptn, pta, psbc_tc, psbc_tc_b, kjpt ) 
     227   SUBROUTINE tra_nxt_vvl( kt, kit000, pdt, cdtype, ptb, ptn, pta, psbc_tc, psbc_tc_b, kjpt ) 
    241228      !!---------------------------------------------------------------------- 
    242229      !!                   ***  ROUTINE tra_nxt_vvl  *** 
     
    247234      !! ** Method  : - Apply a thickness weighted Asselin time filter on now fields. 
    248235      !!              - swap tracer fields to prepare the next time_step. 
    249       !!             tb  = ( e3t_n*tn + atfp*[ e3t_b*tb - 2 e3t_n*tn + e3t_a*ta ] ) 
    250       !!                  /( e3t_n    + atfp*[ e3t_b    - 2 e3t_n    + e3t_a    ] ) 
     236      !!             tb  = ( e3t_n*tn + rn_atfp*[ e3t_b*tb - 2 e3t_n*tn + e3t_a*ta ] ) 
     237      !!                  /( e3t_n    + rn_atfp*[ e3t_b    - 2 e3t_n    + e3t_a    ] ) 
    251238      !!             tn  = ta  
    252239      !! 
     
    255242      INTEGER                              , INTENT(in   ) ::  kt        ! ocean time-step index 
    256243      INTEGER                              , INTENT(in   ) ::  kit000    ! first time step index 
    257       REAL(wp)                             , INTENT(in   ) ::  p2dt      ! time-step 
     244      REAL(wp)                             , INTENT(in   ) ::  pdt       ! time-step 
    258245      CHARACTER(len=3)                     , INTENT(in   ) ::  cdtype    ! =TRA or TRC (tracer indicator) 
    259246      INTEGER                              , INTENT(in   ) ::  kjpt      ! number of tracers 
     
    289276      IF( ( l_trdtra .AND. cdtype == 'TRA' ) .OR. ( l_trdtrc .AND. cdtype == 'TRC' ) )   THEN 
    290277         ALLOCATE( ztrd_atf(jpi,jpj,jpk,kjpt) ) 
    291          ztrd_atf(:,:,:,:) = 0.0_wp 
    292       ENDIF 
    293       zfact = 1._wp / r2dt 
    294       zfact1 = atfp * p2dt 
    295       zfact2 = zfact1 * r1_rau0 
    296       DO jn = 1, kjpt       
     278         ztrd_atf(:,:,:,:) = 0._wp 
     279      ENDIF 
     280      ! 
     281      zfact = r1_Dt 
     282      zfact1 = rn_atfp * pdt 
     283      zfact2 = zfact1 * r1_rho0 
     284      DO jn = 1, kjpt 
    297285         DO jk = 1, jpkm1 
    298286            DO jj = 2, jpjm1 
     
    309297                  ztc_d  = ztc_a  - 2. * ztc_n  + ztc_b 
    310298                  ! 
    311                   ze3t_f = ze3t_n + atfp * ze3t_d 
    312                   ztc_f  = ztc_n  + atfp * ztc_d 
     299                  ze3t_f = ze3t_n + rn_atfp * ze3t_d 
     300                  ztc_f  = ztc_n  + rn_atfp * ztc_d 
    313301                  ! 
    314302                  IF( jk == mikt(ji,jj) ) THEN           ! first level  
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/TRA/traqsr.F90

    r9598 r9939  
    8787      !!         I(k) = Qsr*( rn_abs*EXP(z(k)/rn_si0) + (1.-rn_abs)*EXP(z(k)/rn_si1) ) 
    8888      !!         The temperature trend associated with the solar radiation penetration  
    89       !!         is given by : zta = 1/e3t dk[ I ] / (rau0*Cp) 
     89      !!         is given by : zta = 1/e3t dk[ I ] / (rho0*Cp) 
    9090      !!         At the bottom, boudary condition for the radiation is no flux : 
    9191      !!      all heat which has not been absorbed in the above levels is put 
     
    112112      REAL(wp) ::   zlogc, zlogc2, zlogc3  
    113113      REAL(wp), ALLOCATABLE, DIMENSION(:,:)   :: zekb, zekg, zekr 
    114       REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: ze0, ze1, ze2, ze3, zea, ztrdt 
     114      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: ze0, ze1, ze2, ze3, zea, ztrd 
    115115      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zetot, zchl3d 
    116116      !!---------------------------------------------------------------------- 
     
    125125      ! 
    126126      IF( l_trdtra ) THEN      ! trends diagnostic: save the input temperature trend 
    127          ALLOCATE( ztrdt(jpi,jpj,jpk) )  
    128          ztrdt(:,:,:) = tsa(:,:,:,jp_tem) 
     127         ALLOCATE( ztrd(jpi,jpj,jpk) )  
     128         ztrd(:,:,:) = tsa(:,:,:,jp_tem) 
    129129      ENDIF 
    130130      ! 
     
    133133      !                         !-----------------------------------! 
    134134      IF( kt == nit000 ) THEN          !==  1st time step  ==! 
    135 !!gm case neuler  not taken into account.... 
    136          IF( ln_rstart .AND. iom_varid( numror, 'qsr_hc_b', ldstop = .FALSE. ) > 0 ) THEN    ! read in restart 
     135         IF( ln_rstart .AND. iom_varid( numror, 'qsr_hc_b', ldstop = .FALSE. ) > 0  .AND. .NOT.l_1st_euler ) THEN    ! read in restart 
    137136            IF(lwp) WRITE(numout,*) '          nit000-1 qsr tracer content forcing field read in the restart file' 
    138137            z1_2 = 0.5_wp 
     
    154153         ! 
    155154         DO jk = 1, nksr 
    156             qsr_hc(:,:,jk) = r1_rau0_rcp * ( etot3(:,:,jk) - etot3(:,:,jk+1) ) 
     155            qsr_hc(:,:,jk) = r1_rho0_rcp * ( etot3(:,:,jk) - etot3(:,:,jk+1) ) 
    157156         END DO 
    158157         ! 
     
    234233            DO jj = 2, jpjm1 
    235234               DO ji = fs_2, fs_jpim1 
    236                   qsr_hc(ji,jj,jk) = r1_rau0_rcp * ( zea(ji,jj,jk) - zea(ji,jj,jk+1) ) 
     235                  qsr_hc(ji,jj,jk) = r1_rho0_rcp * ( zea(ji,jj,jk) - zea(ji,jj,jk+1) ) 
    237236               END DO 
    238237            END DO 
     
    243242      CASE( np_2BD  )            !==  2-bands fluxes  ==! 
    244243         ! 
    245          zz0 =        rn_abs   * r1_rau0_rcp      ! surface equi-partition in 2-bands 
    246          zz1 = ( 1. - rn_abs ) * r1_rau0_rcp 
     244         zz0 =        rn_abs   * r1_rho0_rcp      ! surface equi-partition in 2-bands 
     245         zz1 = ( 1. - rn_abs ) * r1_rho0_rcp 
    247246         DO jk = 1, nksr                          ! solar heat absorbed at T-point in the top 400m  
    248247            DO jj = 2, jpjm1 
     
    270269      DO jj = 2, jpjm1  
    271270         DO ji = fs_2, fs_jpim1   ! vector opt. 
    272             IF( qsr(ji,jj) /= 0._wp ) THEN   ;   fraqsr_1lev(ji,jj) = qsr_hc(ji,jj,1) / ( r1_rau0_rcp * qsr(ji,jj) ) 
     271            IF( qsr(ji,jj) /= 0._wp ) THEN   ;   fraqsr_1lev(ji,jj) = qsr_hc(ji,jj,1) / ( r1_rho0_rcp * qsr(ji,jj) ) 
    273272            ELSE                             ;   fraqsr_1lev(ji,jj) = 1._wp 
    274273            ENDIF 
     
    281280         zetot(:,:,nksr+1:jpk) = 0._wp     ! below ~400m set to zero 
    282281         DO jk = nksr, 1, -1 
    283             zetot(:,:,jk) = zetot(:,:,jk+1) + qsr_hc(:,:,jk) * rau0_rcp 
     282            zetot(:,:,jk) = zetot(:,:,jk+1) + qsr_hc(:,:,jk) * rho0_rcp 
    284283         END DO          
    285284         CALL iom_put( 'qsr3d', zetot )   ! 3D distribution of shortwave Radiation 
     
    295294      ! 
    296295      IF( l_trdtra ) THEN     ! qsr tracers trends saved for diagnostics 
    297          ztrdt(:,:,:) = tsa(:,:,:,jp_tem) - ztrdt(:,:,:) 
    298          CALL trd_tra( kt, 'TRA', jp_tem, jptra_qsr, ztrdt ) 
    299          DEALLOCATE( ztrdt )  
     296         ztrd(:,:,:) = tsa(:,:,:,jp_tem) - ztrd(:,:,:) 
     297         CALL trd_tra( kt, 'TRA', jp_tem, jptra_qsr, ztrd ) 
     298         DEALLOCATE( ztrd )  
    300299      ENDIF 
    301300      !                       ! print mean trends (used for debugging) 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/TRA/trasbc.F90

    r9598 r9939  
    7878      INTEGER  ::   ikt, ikb                    ! local integers 
    7979      REAL(wp) ::   zfact, z1_e3t, zdep, ztim   ! local scalar 
    80       REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::  ztrdt, ztrds 
     80      REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE ::   ztrd   ! 4D workspace 
    8181      !!---------------------------------------------------------------------- 
    8282      ! 
     
    8989      ENDIF 
    9090      ! 
    91       IF( l_trdtra ) THEN                    !* Save ta and sa trends 
    92          ALLOCATE( ztrdt(jpi,jpj,jpk) , ztrds(jpi,jpj,jpk) )  
    93          ztrdt(:,:,:) = tsa(:,:,:,jp_tem) 
    94          ztrds(:,:,:) = tsa(:,:,:,jp_sal) 
     91      IF( l_trdtra ) THEN                    !* Save input tsa trends 
     92         ALLOCATE( ztrd(jpi,jpj,jpk,jpts) )  
     93         ztrd(:,:,:,:) = tsa(:,:,:,:) 
    9594      ENDIF 
    9695      ! 
     
    9897      IF( .NOT.ln_traqsr ) THEN     ! no solar radiation penetration 
    9998         qns(:,:) = qns(:,:) + qsr(:,:)      ! total heat flux in qns 
    100          qsr(:,:) = 0._wp                     ! qsr set to zero 
     99         qsr(:,:) = 0._wp                    ! qsr set to zero 
    101100      ENDIF 
    102101 
     
    127126            IF ( ll_wd ) THEN     ! If near WAD point limit the flux for now 
    128127               IF ( sshn(ji,jj) + ht_0(ji,jj) >  2._wp * rn_wdmin1 ) THEN 
    129                   sbc_tsc(ji,jj,jp_tem) = r1_rau0_rcp * qns(ji,jj)   ! non solar heat flux 
     128                  sbc_tsc(ji,jj,jp_tem) = r1_rho0_rcp * qns(ji,jj)   ! non solar heat flux 
    130129               ELSE IF ( sshn(ji,jj) + ht_0(ji,jj) >  rn_wdmin1 ) THEN 
    131                   sbc_tsc(ji,jj,jp_tem) = r1_rau0_rcp * qns(ji,jj) & 
     130                  sbc_tsc(ji,jj,jp_tem) = r1_rho0_rcp * qns(ji,jj) & 
    132131                       &                * tanh ( 5._wp * ( ( sshn(ji,jj) + ht_0(ji,jj) -  rn_wdmin1 ) * r_rn_wdmin1 ) ) 
    133132               ELSE 
     
    135134               ENDIF 
    136135            ELSE  
    137                sbc_tsc(ji,jj,jp_tem) = r1_rau0_rcp * qns(ji,jj)   ! non solar heat flux 
     136               sbc_tsc(ji,jj,jp_tem) = r1_rho0_rcp * qns(ji,jj)   ! non solar heat flux 
    138137            ENDIF 
    139138 
    140             sbc_tsc(ji,jj,jp_sal) = r1_rau0     * sfx(ji,jj)   ! salt flux due to freezing/melting 
     139            sbc_tsc(ji,jj,jp_sal) = r1_rho0     * sfx(ji,jj)   ! salt flux due to freezing/melting 
    141140         END DO 
    142141      END DO 
     
    144143         DO jj = 2, jpj                         !==>> add concentration/dilution effect due to constant volume cell 
    145144            DO ji = fs_2, fs_jpim1   ! vector opt. 
    146                sbc_tsc(ji,jj,jp_tem) = sbc_tsc(ji,jj,jp_tem) + r1_rau0 * emp(ji,jj) * tsn(ji,jj,1,jp_tem) 
    147                sbc_tsc(ji,jj,jp_sal) = sbc_tsc(ji,jj,jp_sal) + r1_rau0 * emp(ji,jj) * tsn(ji,jj,1,jp_sal) 
     145               sbc_tsc(ji,jj,jp_tem) = sbc_tsc(ji,jj,jp_tem) + r1_rho0 * emp(ji,jj) * tsn(ji,jj,1,jp_tem) 
     146               sbc_tsc(ji,jj,jp_sal) = sbc_tsc(ji,jj,jp_sal) + r1_rho0 * emp(ji,jj) * tsn(ji,jj,1,jp_sal) 
    148147            END DO 
    149148         END DO                                 !==>> output c./d. term 
     
    272271 
    273272      IF( l_trdtra )   THEN                      ! save the horizontal diffusive trends for further diagnostics 
    274          ztrdt(:,:,:) = tsa(:,:,:,jp_tem) - ztrdt(:,:,:) 
    275          ztrds(:,:,:) = tsa(:,:,:,jp_sal) - ztrds(:,:,:) 
    276          CALL trd_tra( kt, 'TRA', jp_tem, jptra_nsr, ztrdt ) 
    277          CALL trd_tra( kt, 'TRA', jp_sal, jptra_nsr, ztrds ) 
    278          DEALLOCATE( ztrdt , ztrds )  
     273         ztrd(:,:,:,:) = tsa(:,:,:,:) - ztrd(:,:,:,:) 
     274         CALL trd_tra( kt, 'TRA', jp_tem, jptra_nsr, ztrd(:,:,:,jp_tem) ) 
     275         CALL trd_tra( kt, 'TRA', jp_sal, jptra_nsr, ztrd(:,:,:,jp_sal) ) 
     276         DEALLOCATE( ztrd )  
    279277      ENDIF 
    280278      ! 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/TRA/trazdf.F90

    r9598 r9939  
    5252      INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
    5353      ! 
    54       INTEGER  ::   jk   ! Dummy loop indices 
    55       REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::   ztrdt, ztrds   ! 3D workspace 
     54      INTEGER  ::   jk, jts   ! Dummy loop indices 
     55      REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE ::   ztrd   ! 4D workspace 
    5656      !!--------------------------------------------------------------------- 
    5757      ! 
     
    6464      ENDIF 
    6565      ! 
    66       IF( neuler == 0 .AND. kt == nit000 ) THEN   ;   r2dt =      rdt   ! at nit000, =   rdt (restarting with Euler time stepping) 
    67       ELSEIF( kt <= nit000 + 1           ) THEN   ;   r2dt = 2. * rdt   ! otherwise, = 2 rdt (leapfrog) 
     66      IF( l_trdtra )   THEN                  !* Save input tsa  trend 
     67         ALLOCATE( ztrd(jpi,jpj,jpk,jpts) ) 
     68         ztrd(:,:,:,:) = tsa(:,:,:,:) 
    6869      ENDIF 
    6970      ! 
    70       IF( l_trdtra )   THEN                  !* Save ta and sa trends 
    71          ALLOCATE( ztrdt(jpi,jpj,jpk) , ztrds(jpi,jpj,jpk) ) 
    72          ztrdt(:,:,:) = tsa(:,:,:,jp_tem) 
    73          ztrds(:,:,:) = tsa(:,:,:,jp_sal) 
    74       ENDIF 
    75       ! 
    7671      !                                      !* compute lateral mixing trend and add it to the general trend 
    77       CALL tra_zdf_imp( kt, nit000, 'TRA', r2dt, tsb, tsa, jpts )  
     72      CALL tra_zdf_imp( kt, nit000, 'TRA', rDt, tsb, tsa, jpts )  
    7873 
    7974!!gm WHY here !   and I don't like that ! 
     
    8580 
    8681      IF( l_trdtra )   THEN                      ! save the vertical diffusive trends for further diagnostics 
    87          DO jk = 1, jpkm1 
    88             ztrdt(:,:,jk) = ( ( tsa(:,:,jk,jp_tem)*e3t_a(:,:,jk) - tsb(:,:,jk,jp_tem)*e3t_b(:,:,jk) ) & 
    89                &          / (e3t_n(:,:,jk)*r2dt) ) - ztrdt(:,:,jk) 
    90             ztrds(:,:,jk) = ( ( tsa(:,:,jk,jp_sal)*e3t_a(:,:,jk) - tsb(:,:,jk,jp_sal)*e3t_b(:,:,jk) ) & 
    91               &           / (e3t_n(:,:,jk)*r2dt) ) - ztrds(:,:,jk) 
     82         DO jts = 1, jpts 
     83            DO jk = 1, jpkm1 
     84               ztrd(:,:,jk,jts) = ( ( tsa(:,:,jk,jts)*e3t_a(:,:,jk) - tsb(:,:,jk,jts)*e3t_b(:,:,jk) ) / (e3t_n(:,:,jk)*rDt) )   & 
     85                  &            - ztrd(:,:,jk,jts) 
     86            END DO 
    9287         END DO 
    9388!!gm this should be moved in trdtra.F90 and done on all trends 
    94          CALL lbc_lnk_multi( ztrdt, 'T', 1. , ztrds, 'T', 1. ) 
     89         CALL lbc_lnk( ztrd, 'T', 1. ) 
    9590!!gm 
    96          CALL trd_tra( kt, 'TRA', jp_tem, jptra_zdf, ztrdt ) 
    97          CALL trd_tra( kt, 'TRA', jp_sal, jptra_zdf, ztrds ) 
    98          DEALLOCATE( ztrdt , ztrds ) 
     91         CALL trd_tra( kt, 'TRA', jp_tem, jptra_zdf, ztrd(:,:,:,jp_tem) ) 
     92         CALL trd_tra( kt, 'TRA', jp_sal, jptra_zdf, ztrd(:,:,:,jp_sal) ) 
     93         DEALLOCATE( ztrd ) 
    9994      ENDIF 
    10095      !                                          ! print mean trends (used for debugging) 
     
    180175               DO jj = 2, jpjm1 
    181176                  DO ji = fs_2, fs_jpim1   ! vector opt. 
    182 !!gm BUG  I think, use e3w_a instead of e3w_n, not sure of that 
    183177                     zwi(ji,jj,jk) = - p2dt * zwt(ji,jj,jk  ) / e3w_n(ji,jj,jk  ) 
    184178                     zws(ji,jj,jk) = - p2dt * zwt(ji,jj,jk+1) / e3w_n(ji,jj,jk+1) 
Note: See TracChangeset for help on using the changeset viewer.