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 15540 for NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/ZDF/zdfosm.F90 – NEMO

Ignore:
Timestamp:
2021-11-26T12:27:56+01:00 (2 years ago)
Author:
sparonuz
Message:

Mixed precision version, tested up to 30 years on ORCA2.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/ZDF/zdfosm.F90

    r15066 r15540  
    101101   !                                                                       !     parameterisation, needed by tra_mle_init in 
    102102   !                                                                       !     tramle.F90 
    103    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ghamu        !: Non-local u-momentum flux 
    104    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ghamv        !: Non-local v-momentum flux 
    105    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ghamt        !: Non-local temperature flux (gamma/<ws>o) 
    106    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ghams        !: Non-local salinity flux (gamma/<ws>o) 
    107    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   hbl          !: Boundary layer depth 
    108    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   hml          !: ML depth 
    109    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   hmle         !: Depth of layer affexted by mixed layer eddies in Fox-Kemper parametrization 
    110    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   dbdx_mle     !: Zonal buoyancy gradient in ML 
    111    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   dbdy_mle     !: Meridional buoyancy gradient in ML 
     103   REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ghamu        !: Non-local u-momentum flux 
     104   REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ghamv        !: Non-local v-momentum flux 
     105   REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ghamt        !: Non-local temperature flux (gamma/<ws>o) 
     106   REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ghams        !: Non-local salinity flux (gamma/<ws>o) 
     107   REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   hbl          !: Boundary layer depth 
     108   REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   hml          !: ML depth 
     109   REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   hmle         !: Depth of layer affexted by mixed layer eddies in Fox-Kemper parametrization 
     110   REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   dbdx_mle     !: Zonal buoyancy gradient in ML 
     111   REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   dbdy_mle     !: Meridional buoyancy gradient in ML 
    112112   INTEGER,  PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   mld_prof     !: Level of base of MLE layer 
    113113 
     
    128128   END INTERFACE 
    129129 
    130    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   etmean      ! Averaging operator for avt 
    131    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   dh          ! Depth of pycnocline 
    132    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   r1_ft       ! Inverse of the modified Coriolis parameter at t-pts 
     130   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   etmean      ! Averaging operator for avt 
     131   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   dh          ! Depth of pycnocline 
     132   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   r1_ft       ! Inverse of the modified Coriolis parameter at t-pts 
    133133   ! Layer indices 
    134134   INTEGER,  ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   nbld        ! Level of boundary layer base 
     
    147147   LOGICAL,  ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   l_mle       ! MLE layer increases in hickness. 
    148148   ! Scales 
    149    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   swth0       ! Surface heat flux (Kinematic) 
    150    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   sws0        ! Surface freshwater flux 
    151    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   swb0        ! Surface buoyancy flux 
    152    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   suw0        ! Surface u-momentum flux 
    153    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   sustar      ! Friction velocity 
    154    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   scos_wind   ! Cos angle of surface stress 
    155    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   ssin_wind   ! Sin angle of surface stress 
    156    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   swthav      ! Heat flux - bl average 
    157    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   swsav       ! Freshwater flux - bl average 
    158    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   swbav       ! Buoyancy flux - bl average 
    159    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   sustke      ! Surface Stokes drift 
    160    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   dstokes     ! Penetration depth of the Stokes drift 
    161    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   swstrl      ! Langmuir velocity scale 
    162    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   swstrc      ! Convective velocity scale 
    163    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   sla         ! Trubulent Langmuir number 
    164    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   svstr       ! Velocity scale that tends to sustar for large Langmuir number 
    165    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   shol        ! Stability parameter for boundary layer 
     149   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   swth0       ! Surface heat flux (Kinematic) 
     150   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   sws0        ! Surface freshwater flux 
     151   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   swb0        ! Surface buoyancy flux 
     152   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   suw0        ! Surface u-momentum flux 
     153   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   sustar      ! Friction velocity 
     154   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   scos_wind   ! Cos angle of surface stress 
     155   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   ssin_wind   ! Sin angle of surface stress 
     156   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   swthav      ! Heat flux - bl average 
     157   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   swsav       ! Freshwater flux - bl average 
     158   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   swbav       ! Buoyancy flux - bl average 
     159   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   sustke      ! Surface Stokes drift 
     160   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   dstokes     ! Penetration depth of the Stokes drift 
     161   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   swstrl      ! Langmuir velocity scale 
     162   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   swstrc      ! Convective velocity scale 
     163   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   sla         ! Trubulent Langmuir number 
     164   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   svstr       ! Velocity scale that tends to sustar for large Langmuir number 
     165   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   shol        ! Stability parameter for boundary layer 
    166166   ! Layer averages: BL 
    167    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_t_bl     ! Temperature average 
    168    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_s_bl     ! Salinity average 
    169    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_u_bl     ! Velocity average (u) 
    170    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_v_bl     ! Velocity average (v) 
    171    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_b_bl     ! Buoyancy average 
     167   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_t_bl     ! Temperature average 
     168   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_s_bl     ! Salinity average 
     169   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_u_bl     ! Velocity average (u) 
     170   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_v_bl     ! Velocity average (v) 
     171   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_b_bl     ! Buoyancy average 
    172172   ! Difference between layer average and parameter at the base of the layer: BL 
    173    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_dt_bl    ! Temperature difference 
    174    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_ds_bl    ! Salinity difference 
    175    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_du_bl    ! Velocity difference (u) 
    176    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_dv_bl    ! Velocity difference (v) 
    177    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_db_bl    ! Buoyancy difference 
     173   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_dt_bl    ! Temperature difference 
     174   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_ds_bl    ! Salinity difference 
     175   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_du_bl    ! Velocity difference (u) 
     176   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_dv_bl    ! Velocity difference (v) 
     177   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_db_bl    ! Buoyancy difference 
    178178   ! Layer averages: ML 
    179    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_t_ml     ! Temperature average 
    180    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_s_ml     ! Salinity average 
    181    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_u_ml     ! Velocity average (u) 
    182    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_v_ml     ! Velocity average (v) 
    183    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_b_ml     ! Buoyancy average 
     179   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_t_ml     ! Temperature average 
     180   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_s_ml     ! Salinity average 
     181   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_u_ml     ! Velocity average (u) 
     182   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_v_ml     ! Velocity average (v) 
     183   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_b_ml     ! Buoyancy average 
    184184   ! Difference between layer average and parameter at the base of the layer: ML 
    185    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_dt_ml    ! Temperature difference 
    186    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_ds_ml    ! Salinity difference 
    187    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_du_ml    ! Velocity difference (u) 
    188    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_dv_ml    ! Velocity difference (v) 
    189    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_db_ml    ! Buoyancy difference 
     185   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_dt_ml    ! Temperature difference 
     186   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_ds_ml    ! Salinity difference 
     187   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_du_ml    ! Velocity difference (u) 
     188   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_dv_ml    ! Velocity difference (v) 
     189   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_db_ml    ! Buoyancy difference 
    190190   ! Layer averages: MLE 
    191    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_t_mle    ! Temperature average 
    192    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_s_mle    ! Salinity average 
    193    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_u_mle    ! Velocity average (u) 
    194    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_v_mle    ! Velocity average (v) 
    195    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_b_mle    ! Buoyancy average 
     191   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_t_mle    ! Temperature average 
     192   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_s_mle    ! Salinity average 
     193   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_u_mle    ! Velocity average (u) 
     194   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_v_mle    ! Velocity average (v) 
     195   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   av_b_mle    ! Buoyancy average 
    196196   ! Diagnostic output 
    197    REAL(WP), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   osmdia2d    ! Auxiliary array for diagnostic output 
    198    REAL(WP), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   osmdia3d    ! Auxiliary array for diagnostic output 
     197   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   osmdia2d    ! Auxiliary array for diagnostic output 
     198   REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   osmdia3d    ! Auxiliary array for diagnostic output 
    199199   LOGICAL  ::   ln_dia_pyc_scl = .FALSE.                         ! Output of pycnocline scalar-gradient profiles 
    200200   LOGICAL  ::   ln_dia_pyc_shr = .FALSE.                         ! Output of pycnocline velocity-shear  profiles 
     
    202202   !                                               !!* namelist namzdf_osm * 
    203203   LOGICAL  ::   ln_use_osm_la                      ! Use namelist rn_osm_la 
    204    REAL(wp) ::   rn_osm_la                          ! Turbulent Langmuir number 
    205    REAL(wp) ::   rn_osm_dstokes                     ! Depth scale of Stokes drift 
    206    REAL(wp) ::   rn_zdfosm_adjust_sd   = 1.0_wp     ! Factor to reduce Stokes drift by 
    207    REAL(wp) ::   rn_osm_hblfrac        = 0.1_wp     ! For nn_osm_wave = 3/4 specify fraction in top of hbl 
     204   REAL(dp) ::   rn_osm_la                          ! Turbulent Langmuir number 
     205   REAL(dp) ::   rn_osm_dstokes                     ! Depth scale of Stokes drift 
     206   REAL(dp) ::   rn_zdfosm_adjust_sd   = 1.0_wp     ! Factor to reduce Stokes drift by 
     207   REAL(dp) ::   rn_osm_hblfrac        = 0.1_wp     ! For nn_osm_wave = 3/4 specify fraction in top of hbl 
    208208   LOGICAL  ::   ln_zdfosm_ice_shelter              ! Flag to activate ice sheltering 
    209    REAL(wp) ::   rn_osm_hbl0           = 10.0_wp    ! Initial value of hbl for 1D runs 
     209   REAL(dp) ::   rn_osm_hbl0           = 10.0_wp    ! Initial value of hbl for 1D runs 
    210210   INTEGER  ::   nn_ave                             ! = 0/1 flag for horizontal average on avt 
    211211   INTEGER  ::   nn_osm_wave = 0                    ! = 0/1/2 flag for getting stokes drift from La# / PM wind-waves/Inputs into 
     
    214214   LOGICAL  ::   ln_dia_osm                         ! Use namelist  rn_osm_la 
    215215   LOGICAL  ::   ln_kpprimix           = .TRUE.     ! Shear instability mixing 
    216    REAL(wp) ::   rn_riinfty            = 0.7_wp     ! Local Richardson Number limit for shear instability 
    217    REAL(wp) ::   rn_difri              = 0.005_wp   ! Maximum shear mixing at Rig = 0    (m2/s) 
     216   REAL(dp) ::   rn_riinfty            = 0.7_wp     ! Local Richardson Number limit for shear instability 
     217   REAL(dp) ::   rn_difri              = 0.005_wp   ! Maximum shear mixing at Rig = 0    (m2/s) 
    218218   LOGICAL  ::   ln_convmix            = .TRUE.     ! Convective instability mixing 
    219    REAL(wp) ::   rn_difconv            = 1.0_wp     ! Diffusivity when unstable below BL  (m2/s) 
     219   REAL(dp) ::   rn_difconv            = 1.0_wp     ! Diffusivity when unstable below BL  (m2/s) 
    220220   ! OSMOSIS mixed layer eddy parametrization constants 
    221221   INTEGER  ::   nn_osm_mle                         ! = 0/1 flag for horizontal average on avt 
    222    REAL(wp) ::   rn_osm_mle_ce                      ! MLE coefficient 
     222   REAL(dp) ::   rn_osm_mle_ce                      ! MLE coefficient 
    223223   !    Parameters used in nn_osm_mle = 0 case 
    224    REAL(wp) ::   rn_osm_mle_lf                      ! Typical scale of mixed layer front 
    225    REAL(wp) ::   rn_osm_mle_time                    ! Time scale for mixing momentum across the mixed layer 
     224   REAL(dp) ::   rn_osm_mle_lf                      ! Typical scale of mixed layer front 
     225   REAL(dp) ::   rn_osm_mle_time                    ! Time scale for mixing momentum across the mixed layer 
    226226   !    Parameters used in nn_osm_mle = 1 case 
    227    REAL(wp) ::   rn_osm_mle_lat                     ! Reference latitude for a 5 km scale of ML front 
     227   REAL(dp) ::   rn_osm_mle_lat                     ! Reference latitude for a 5 km scale of ML front 
    228228   LOGICAL  ::   ln_osm_hmle_limit                  ! If true arbitrarily restrict hmle to rn_osm_hmle_limit*zmld 
    229    REAL(wp) ::   rn_osm_hmle_limit                  ! If ln_osm_hmle_limit true arbitrarily restrict hmle to rn_osm_hmle_limit*zmld 
    230    REAL(wp) ::   rn_osm_mle_rho_c                   ! Density criterion for definition of MLD used by FK 
    231    REAL(wp) ::   rb_c                               ! ML buoyancy criteria = g rho_c /rho0 where rho_c is defined in zdfmld 
    232    REAL(wp) ::   rc_f                               ! MLE coefficient (= rn_ce / (5 km * fo) ) in nn_osm_mle=1 case 
    233    REAL(wp) ::   rn_osm_mle_thresh                  ! Threshold buoyancy for deepening of MLE layer below OSBL base 
    234    REAL(wp) ::   rn_osm_bl_thresh                   ! Threshold buoyancy for deepening of OSBL base 
    235    REAL(wp) ::   rn_osm_mle_tau                     ! Adjustment timescale for MLE 
     229   REAL(dp) ::   rn_osm_hmle_limit                  ! If ln_osm_hmle_limit true arbitrarily restrict hmle to rn_osm_hmle_limit*zmld 
     230   REAL(dp) ::   rn_osm_mle_rho_c                   ! Density criterion for definition of MLD used by FK 
     231   REAL(dp) ::   rb_c                               ! ML buoyancy criteria = g rho_c /rho0 where rho_c is defined in zdfmld 
     232   REAL(dp) ::   rc_f                               ! MLE coefficient (= rn_ce / (5 km * fo) ) in nn_osm_mle=1 case 
     233   REAL(dp) ::   rn_osm_mle_thresh                  ! Threshold buoyancy for deepening of MLE layer below OSBL base 
     234   REAL(dp) ::   rn_osm_bl_thresh                   ! Threshold buoyancy for deepening of OSBL base 
     235   REAL(dp) ::   rn_osm_mle_tau                     ! Adjustment timescale for MLE 
    236236 
    237237   ! General constants 
    238    REAL(wp) ::   epsln     = 1.0e-20_wp      ! A small positive number to ensure no div by zero 
    239    REAL(wp) ::   depth_tol = 1.0e-6_wp       ! A small-ish positive number to give a hbl slightly shallower than gdepw 
    240    REAL(wp) ::   pthird    = 1.0_wp/3.0_wp   ! 1/3 
    241    REAL(wp) ::   p2third   = 2.0_wp/3.0_wp   ! 2/3 
     238   REAL(dp) ::   epsln     = 1.0e-20_wp      ! A small positive number to ensure no div by zero 
     239   REAL(dp) ::   depth_tol = 1.0e-6_wp       ! A small-ish positive number to give a hbl slightly shallower than gdepw 
     240   REAL(dp) ::   pthird    = 1.0_wp/3.0_wp   ! 1/3 
     241   REAL(dp) ::   p2third   = 2.0_wp/3.0_wp   ! 2/3 
    242242 
    243243   !! * Substitutions 
     
    353353      INTEGER                   , INTENT(in   ) ::  kt               ! Ocean time step 
    354354      INTEGER                   , INTENT(in   ) ::  Kbb, Kmm, Krhs   ! Ocean time level indices 
    355       REAL(wp), DIMENSION(:,:,:), INTENT(inout) ::  p_avm, p_avt     ! Momentum and tracer Kz (w-points) 
     355      REAL(dp), DIMENSION(:,:,:), INTENT(inout) ::  p_avm, p_avt     ! Momentum and tracer Kz (w-points) 
    356356      !! 
    357357      INTEGER ::   ji, jj, jk, jl, jm, jkflt   ! Dummy loop indices 
    358358      !! 
    359       REAL(wp) ::   zthermal, zbeta 
    360       REAL(wp) ::   zesh2, zri, zfri   ! Interior Richardson mixing 
     359      REAL(dp) ::   zthermal, zbeta 
     360      REAL(dp) ::   zesh2, zri, zfri   ! Interior Richardson mixing 
    361361      !! Scales 
    362       REAL(wp), DIMENSION(A2D(nn_hls-1)) ::   zrad0       ! Surface solar temperature flux (deg m/s) 
    363       REAL(wp), DIMENSION(A2D(nn_hls-1)) ::   zradh       ! Radiative flux at bl base (Buoyancy units) 
    364       REAL(wp)                           ::   zradav      ! Radiative flux, bl average (Buoyancy Units) 
    365       REAL(wp)                           ::   zvw0        ! Surface v-momentum flux 
    366       REAL(wp), DIMENSION(A2D(nn_hls-1)) ::   zwb0tot     ! Total surface buoyancy flux including insolation 
    367       REAL(wp), DIMENSION(A2D(nn_hls-1)) ::   zwb_ent     ! Buoyancy entrainment flux 
    368       REAL(wp), DIMENSION(A2D(nn_hls-1)) ::   zwb_min 
    369       REAL(wp), DIMENSION(A2D(nn_hls-1)) ::   zwb_fk_b    ! MLE buoyancy flux averaged over OSBL 
    370       REAL(wp), DIMENSION(A2D(nn_hls-1)) ::   zwb_fk      ! Max MLE buoyancy flux 
    371       REAL(wp), DIMENSION(A2D(nn_hls-1)) ::   zdiff_mle   ! Extra MLE vertical diff 
    372       REAL(wp), DIMENSION(A2D(nn_hls-1)) ::   zvel_mle    ! Velocity scale for dhdt with stable ML and FK 
     362      REAL(dp), DIMENSION(A2D(nn_hls-1)) ::   zrad0       ! Surface solar temperature flux (deg m/s) 
     363      REAL(dp), DIMENSION(A2D(nn_hls-1)) ::   zradh       ! Radiative flux at bl base (Buoyancy units) 
     364      REAL(dp)                           ::   zradav      ! Radiative flux, bl average (Buoyancy Units) 
     365      REAL(dp)                           ::   zvw0        ! Surface v-momentum flux 
     366      REAL(dp), DIMENSION(A2D(nn_hls-1)) ::   zwb0tot     ! Total surface buoyancy flux including insolation 
     367      REAL(dp), DIMENSION(A2D(nn_hls-1)) ::   zwb_ent     ! Buoyancy entrainment flux 
     368      REAL(dp), DIMENSION(A2D(nn_hls-1)) ::   zwb_min 
     369      REAL(dp), DIMENSION(A2D(nn_hls-1)) ::   zwb_fk_b    ! MLE buoyancy flux averaged over OSBL 
     370      REAL(dp), DIMENSION(A2D(nn_hls-1)) ::   zwb_fk      ! Max MLE buoyancy flux 
     371      REAL(dp), DIMENSION(A2D(nn_hls-1)) ::   zdiff_mle   ! Extra MLE vertical diff 
     372      REAL(dp), DIMENSION(A2D(nn_hls-1)) ::   zvel_mle    ! Velocity scale for dhdt with stable ML and FK 
    373373      !! Mixed-layer variables 
    374374      INTEGER,  DIMENSION(A2D(nn_hls-1)) ::   jk_nlev  ! Number of levels 
    375375      INTEGER,  DIMENSION(A2D(nn_hls-1)) ::   jk_ext   ! Offset for external level 
    376376      !! 
    377       REAL(wp), DIMENSION(A2D(nn_hls-1)) ::   zhbl   ! BL depth - grid 
    378       REAL(wp), DIMENSION(A2D(nn_hls-1)) ::   zhml   ! ML depth - grid 
    379       !! 
    380       REAL(wp), DIMENSION(A2D(nn_hls-1)) ::   zhmle   ! MLE depth - grid 
    381       REAL(wp), DIMENSION(A2D(nn_hls))   ::   zmld    ! ML depth on grid 
    382       !! 
    383       REAL(wp), DIMENSION(A2D(nn_hls-1)) ::   zdh                          ! Pycnocline depth - grid 
    384       REAL(wp), DIMENSION(A2D(nn_hls-1)) ::   zdhdt                        ! BL depth tendency 
    385       REAL(wp), DIMENSION(A2D(nn_hls-1)) ::   zdtdz_bl_ext, zdsdz_bl_ext   ! External temperature/salinity gradients 
    386       REAL(wp), DIMENSION(A2D(nn_hls-1)) ::   zdbdz_bl_ext                 ! External buoyancy gradients 
    387       REAL(wp), DIMENSION(A2D(nn_hls))   ::   zdtdx, zdtdy, zdsdx, zdsdy   ! Horizontal gradients for Fox-Kemper parametrization 
    388       !! 
    389       REAL(wp), DIMENSION(A2D(nn_hls-1)) ::   zdbds_mle   ! Magnitude of horizontal buoyancy gradient 
     377      REAL(dp), DIMENSION(A2D(nn_hls-1)) ::   zhbl   ! BL depth - grid 
     378      REAL(dp), DIMENSION(A2D(nn_hls-1)) ::   zhml   ! ML depth - grid 
     379      !! 
     380      REAL(dp), DIMENSION(A2D(nn_hls-1)) ::   zhmle   ! MLE depth - grid 
     381      REAL(dp), DIMENSION(A2D(nn_hls))   ::   zmld    ! ML depth on grid 
     382      !! 
     383      REAL(dp), DIMENSION(A2D(nn_hls-1)) ::   zdh                          ! Pycnocline depth - grid 
     384      REAL(dp), DIMENSION(A2D(nn_hls-1)) ::   zdhdt                        ! BL depth tendency 
     385      REAL(dp), DIMENSION(A2D(nn_hls-1)) ::   zdtdz_bl_ext, zdsdz_bl_ext   ! External temperature/salinity gradients 
     386      REAL(dp), DIMENSION(A2D(nn_hls-1)) ::   zdbdz_bl_ext                 ! External buoyancy gradients 
     387      REAL(dp), DIMENSION(A2D(nn_hls))   ::   zdtdx, zdtdy, zdsdx, zdsdy   ! Horizontal gradients for Fox-Kemper parametrization 
     388      !! 
     389      REAL(dp), DIMENSION(A2D(nn_hls-1)) ::   zdbds_mle   ! Magnitude of horizontal buoyancy gradient 
    390390      !! Flux-gradient relationship variables 
    391       REAL(wp), DIMENSION(A2D(nn_hls-1)) ::   zshear   ! Shear production 
    392       !! 
    393       REAL(wp), DIMENSION(A2D(nn_hls-1)) ::   zhbl_t   ! Holds boundary layer depth updated by full timestep 
     391      REAL(dp), DIMENSION(A2D(nn_hls-1)) ::   zshear   ! Shear production 
     392      !! 
     393      REAL(dp), DIMENSION(A2D(nn_hls-1)) ::   zhbl_t   ! Holds boundary layer depth updated by full timestep 
    394394      !! For calculating Ri#-dependent mixing 
    395       REAL(wp), DIMENSION(A2D(nn_hls)) ::   z2du     ! u-shear^2 
    396       REAL(wp), DIMENSION(A2D(nn_hls)) ::   z2dv     ! v-shear^2 
    397       REAL(wp)                         ::   zrimix   ! Spatial form of ri#-induced diffusion 
     395      REAL(dp), DIMENSION(A2D(nn_hls)) ::   z2du     ! u-shear^2 
     396      REAL(dp), DIMENSION(A2D(nn_hls)) ::   z2dv     ! v-shear^2 
     397      REAL(dp)                         ::   zrimix   ! Spatial form of ri#-induced diffusion 
    398398      !! Temporary variables 
    399       REAL(wp)                                 ::   znd              ! Temporary non-dimensional depth 
    400       REAL(wp)                                 ::   zz0, zz1, zfac 
    401       REAL(wp)                                 ::   zus_x, zus_y     ! Temporary Stokes drift 
    402       REAL(wp), DIMENSION(A2D(nn_hls-1),jpk)   ::   zviscos          ! Viscosity 
    403       REAL(wp), DIMENSION(A2D(nn_hls-1),jpk)   ::   zdiffut          ! t-diffusivity 
    404       REAL(wp)                                 ::   zabsstke 
    405       REAL(wp)                                 ::   zsqrtpi, z_two_thirds, zthickness 
    406       REAL(wp)                                 ::   z2k_times_thickness, zsqrt_depth, zexp_depth, zf, zexperfc 
     399      REAL(dp)                                 ::   znd              ! Temporary non-dimensional depth 
     400      REAL(dp)                                 ::   zz0, zz1, zfac 
     401      REAL(dp)                                 ::   zus_x, zus_y     ! Temporary Stokes drift 
     402      REAL(dp), DIMENSION(A2D(nn_hls-1),jpk)   ::   zviscos          ! Viscosity 
     403      REAL(dp), DIMENSION(A2D(nn_hls-1),jpk)   ::   zdiffut          ! t-diffusivity 
     404      REAL(dp)                                 ::   zabsstke 
     405      REAL(dp)                                 ::   zsqrtpi, z_two_thirds, zthickness 
     406      REAL(dp)                                 ::   z2k_times_thickness, zsqrt_depth, zexp_depth, zf, zexperfc 
    407407      !! For debugging 
    408       REAL(wp), PARAMETER ::   pp_large = -1e10_wp 
     408      REAL(dp), PARAMETER ::   pp_large = -1e10_wp 
    409409      !!---------------------------------------------------------------------- 
    410410      ! 
     
    10411041      INTEGER,                            INTENT(in   )           ::   Kbb, Kmm   ! Ocean time-level indices 
    10421042      INTEGER,  DIMENSION(A2D(nn_hls-1)), INTENT(in   )           ::   knlev      ! Number of levels to average over. 
    1043       REAL(wp), DIMENSION(jpi,jpj),       INTENT(  out)           ::   pt, ps     ! Average temperature and salinity 
    1044       REAL(wp), DIMENSION(jpi,jpj),       INTENT(  out)           ::   pb         ! Average buoyancy 
    1045       REAL(wp), DIMENSION(jpi,jpj),       INTENT(  out)           ::   pu, pv     ! Average current components 
     1043      REAL(dp), DIMENSION(jpi,jpj),       INTENT(  out)           ::   pt, ps     ! Average temperature and salinity 
     1044      REAL(dp), DIMENSION(jpi,jpj),       INTENT(  out)           ::   pb         ! Average buoyancy 
     1045      REAL(dp), DIMENSION(jpi,jpj),       INTENT(  out)           ::   pu, pv     ! Average current components 
    10461046      INTEGER,  DIMENSION(A2D(nn_hls-1)), INTENT(in   ), OPTIONAL ::   kp_ext     ! External-level offsets 
    1047       REAL(wp), DIMENSION(jpi,jpj),       INTENT(  out), OPTIONAL ::   pdt        ! Difference between average temperature, 
    1048       REAL(wp), DIMENSION(jpi,jpj),       INTENT(  out), OPTIONAL ::   pds        !    salinity, 
    1049       REAL(wp), DIMENSION(jpi,jpj),       INTENT(  out), OPTIONAL ::   pdb        !    buoyancy, and 
    1050       REAL(wp), DIMENSION(jpi,jpj),       INTENT(  out), OPTIONAL ::   pdu, pdv   !    velocity components and the OSBL 
     1047      REAL(dp), DIMENSION(jpi,jpj),       INTENT(  out), OPTIONAL ::   pdt        ! Difference between average temperature, 
     1048      REAL(dp), DIMENSION(jpi,jpj),       INTENT(  out), OPTIONAL ::   pds        !    salinity, 
     1049      REAL(dp), DIMENSION(jpi,jpj),       INTENT(  out), OPTIONAL ::   pdb        !    buoyancy, and 
     1050      REAL(dp), DIMENSION(jpi,jpj),       INTENT(  out), OPTIONAL ::   pdu, pdv   !    velocity components and the OSBL 
    10511051      !! 
    10521052      INTEGER                              ::   jk, jkflt, jkmax, ji, jj   ! Loop indices 
    10531053      INTEGER                              ::   ibld_ext                   ! External-layer index 
    1054       REAL(wp), DIMENSION(A2D(nn_hls-1)) ::   zthick                     ! Layer thickness 
    1055       REAL(wp)                             ::   zthermal                   ! Thermal expansion coefficient 
    1056       REAL(wp)                             ::   zbeta                      ! Haline contraction coefficient 
     1054      REAL(dp), DIMENSION(A2D(nn_hls-1)) ::   zthick                     ! Layer thickness 
     1055      REAL(dp)                             ::   zthermal                   ! Thermal expansion coefficient 
     1056      REAL(dp)                             ::   zbeta                      ! Haline contraction coefficient 
    10571057      !!---------------------------------------------------------------------- 
    10581058      ! 
     
    11441144      !! 
    11451145      !!----------------------------------------------------------------------       
    1146       REAL(wp),           INTENT(inout), DIMENSION(jpi,jpj) ::   pu, pv   ! Components of current 
     1146      REAL(dp),           INTENT(inout), DIMENSION(jpi,jpj) ::   pu, pv   ! Components of current 
    11471147      LOGICAL,  OPTIONAL, INTENT(in   )                     ::   fwd      ! Forward (default) or reverse rotation 
    11481148      !! 
    11491149      INTEGER  ::   ji, jj       ! Loop indices 
    1150       REAL(wp) ::   ztmp, zfwd   ! Auxiliary variables 
     1150      REAL(dp) ::   ztmp, zfwd   ! Auxiliary variables 
    11511151      !!----------------------------------------------------------------------       
    11521152      ! 
     
    11751175      !! 
    11761176      !!----------------------------------------------------------------------       
    1177       REAL(wp),           INTENT(inout), DIMENSION(jpi,jpj,jpk)   ::   pu, pv   ! Components of current 
     1177      REAL(dp),           INTENT(inout), DIMENSION(jpi,jpj,jpk)   ::   pu, pv   ! Components of current 
    11781178      LOGICAL,  OPTIONAL, INTENT(in   )                           ::   fwd      ! Forward (default) or reverse rotation 
    11791179      INTEGER,  OPTIONAL, INTENT(in   )                           ::   ktop     ! Minimum depth index 
     
    11811181      !! 
    11821182      INTEGER  ::   ji, jj, jk, jktop, jkmax   ! Loop indices 
    1183       REAL(wp) ::   ztmp, zfwd                 ! Auxiliary variables 
     1183      REAL(dp) ::   ztmp, zfwd                 ! Auxiliary variables 
    11841184      LOGICAL  ::   llkbot                     ! Auxiliary variable 
    11851185      !!----------------------------------------------------------------------       
     
    12231223      !!---------------------------------------------------------------------- 
    12241224      INTEGER,                            INTENT(in   ) ::   Kmm       ! Ocean time-level index 
    1225       REAL(wp), DIMENSION(A2D(nn_hls-1)), INTENT(  out) ::   pwb_ent   ! Buoyancy fluxes at base 
    1226       REAL(wp), DIMENSION(A2D(nn_hls-1)), INTENT(  out) ::   pwb_min   !    of well-mixed layer 
    1227       REAL(wp), DIMENSION(A2D(nn_hls-1)), INTENT(  out) ::   pshear    ! Production of TKE due to shear across the pycnocline 
    1228       REAL(wp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   phbl      ! BL depth 
    1229       REAL(wp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   phml      ! ML depth 
    1230       REAL(wp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   pdh       ! Pycnocline depth 
     1225      REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(  out) ::   pwb_ent   ! Buoyancy fluxes at base 
     1226      REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(  out) ::   pwb_min   !    of well-mixed layer 
     1227      REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(  out) ::   pshear    ! Production of TKE due to shear across the pycnocline 
     1228      REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   phbl      ! BL depth 
     1229      REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   phml      ! ML depth 
     1230      REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   pdh       ! Pycnocline depth 
    12311231      !! 
    12321232      INTEGER :: jj, ji   ! Loop indices 
    12331233      !! 
    1234       REAL(wp), DIMENSION(A2D(nn_hls-1)) ::   zekman 
    1235       REAL(wp), DIMENSION(A2D(nn_hls-1)) ::   zri_p, zri_b   ! Richardson numbers 
    1236       REAL(wp)                           ::   zshear_u, zshear_v, zwb_shr 
    1237       REAL(wp)                           ::   zwcor, zrf_conv, zrf_shear, zrf_langmuir, zr_stokes 
    1238       !! 
    1239       REAL(wp), PARAMETER ::   pp_a_shr         = 0.4_wp,  pp_b_shr    = 6.5_wp,  pp_a_wb_s = 0.8_wp 
    1240       REAL(wp), PARAMETER ::   pp_alpha_c       = 0.2_wp,  pp_alpha_lc = 0.03_wp 
    1241       REAL(wp), PARAMETER ::   pp_alpha_ls      = 0.06_wp, pp_alpha_s  = 0.15_wp 
    1242       REAL(wp), PARAMETER ::   pp_ri_p_thresh   = 27.0_wp 
    1243       REAL(wp), PARAMETER ::   pp_ri_c          = 0.25_wp 
    1244       REAL(wp), PARAMETER ::   pp_ek            = 4.0_wp 
    1245       REAL(wp), PARAMETER ::   pp_large         = -1e10_wp 
     1234      REAL(dp), DIMENSION(A2D(nn_hls-1)) ::   zekman 
     1235      REAL(dp), DIMENSION(A2D(nn_hls-1)) ::   zri_p, zri_b   ! Richardson numbers 
     1236      REAL(dp)                           ::   zshear_u, zshear_v, zwb_shr 
     1237      REAL(dp)                           ::   zwcor, zrf_conv, zrf_shear, zrf_langmuir, zr_stokes 
     1238      !! 
     1239      REAL(dp), PARAMETER ::   pp_a_shr         = 0.4_wp,  pp_b_shr    = 6.5_wp,  pp_a_wb_s = 0.8_wp 
     1240      REAL(dp), PARAMETER ::   pp_alpha_c       = 0.2_wp,  pp_alpha_lc = 0.03_wp 
     1241      REAL(dp), PARAMETER ::   pp_alpha_ls      = 0.06_wp, pp_alpha_s  = 0.15_wp 
     1242      REAL(dp), PARAMETER ::   pp_ri_p_thresh   = 27.0_wp 
     1243      REAL(dp), PARAMETER ::   pp_ri_c          = 0.25_wp 
     1244      REAL(dp), PARAMETER ::   pp_ek            = 4.0_wp 
     1245      REAL(dp), PARAMETER ::   pp_large         = -1e10_wp 
    12461246      !!---------------------------------------------------------------------- 
    12471247      ! 
     
    13871387      INTEGER,                            INTENT(in   ) ::   Kmm            ! Ocean time-level index 
    13881388      INTEGER,  DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   kbase          ! OSBL base layer index 
    1389       REAL(wp), DIMENSION(A2D(nn_hls-1)), INTENT(  out) ::   pdtdz, pdsdz   ! External gradients of temperature, salinity 
    1390       REAL(wp), DIMENSION(A2D(nn_hls-1)), INTENT(  out) ::   pdbdz          !    and buoyancy 
     1389      REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(  out) ::   pdtdz, pdsdz   ! External gradients of temperature, salinity 
     1390      REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(  out) ::   pdbdz          !    and buoyancy 
    13911391      !! 
    13921392      INTEGER  ::   ji, jj, jkb, jkb1 
    1393       REAL(wp) ::   zthermal, zbeta 
    1394       !! 
    1395       REAL(wp), PARAMETER ::   pp_large = -1e10_wp 
     1393      REAL(dp) ::   zthermal, zbeta 
     1394      !! 
     1395      REAL(dp), PARAMETER ::   pp_large = -1e10_wp 
    13961396      !!----------------------------------------------------------------------    
    13971397      ! 
     
    14301430      !! 
    14311431      !!---------------------------------------------------------------------- 
    1432       REAL(wp), DIMENSION(A2D(nn_hls-1)), INTENT(  out) ::   pdhdt          ! Rate of change of hbl 
    1433       REAL(wp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   phbl           ! BL depth 
    1434       REAL(wp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   pdh            ! Pycnocline depth 
    1435       REAL(wp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   pwb_ent        ! Buoyancy entrainment flux 
    1436       REAL(wp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   pwb_min 
    1437       REAL(wp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   pdbdz_bl_ext   ! External buoyancy gradients 
    1438       REAL(wp), DIMENSION(A2D(nn_hls-1)), INTENT(  out) ::   pwb_fk_b       ! MLE buoyancy flux averaged over OSBL 
    1439       REAL(wp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   pwb_fk         ! Max MLE buoyancy flux 
    1440       REAL(wp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   pvel_mle       ! Vvelocity scale for dhdt with stable ML and FK 
     1432      REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(  out) ::   pdhdt          ! Rate of change of hbl 
     1433      REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   phbl           ! BL depth 
     1434      REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   pdh            ! Pycnocline depth 
     1435      REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   pwb_ent        ! Buoyancy entrainment flux 
     1436      REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   pwb_min 
     1437      REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   pdbdz_bl_ext   ! External buoyancy gradients 
     1438      REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(  out) ::   pwb_fk_b       ! MLE buoyancy flux averaged over OSBL 
     1439      REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   pwb_fk         ! Max MLE buoyancy flux 
     1440      REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   pvel_mle       ! Vvelocity scale for dhdt with stable ML and FK 
    14411441      !! 
    14421442      INTEGER  ::   jj, ji 
    1443       REAL(wp) ::   zgamma_b_nd, zgamma_dh_nd, zpert, zpsi, zari 
    1444       REAL(wp) ::   zvel_max, zddhdt 
    1445       !! 
    1446       REAL(wp), PARAMETER ::   pp_alpha_b = 0.3_wp 
    1447       REAL(wp), PARAMETER ::   pp_ddh     = 2.5_wp, pp_ddh_2 = 3.5_wp   ! Also in pycnocline_depth 
    1448       REAL(wp), PARAMETER ::   pp_large   = -1e10_wp 
     1443      REAL(dp) ::   zgamma_b_nd, zgamma_dh_nd, zpert, zpsi, zari 
     1444      REAL(dp) ::   zvel_max, zddhdt 
     1445      !! 
     1446      REAL(dp), PARAMETER ::   pp_alpha_b = 0.3_wp 
     1447      REAL(dp), PARAMETER ::   pp_ddh     = 2.5_wp, pp_ddh_2 = 3.5_wp   ! Also in pycnocline_depth 
     1448      REAL(dp), PARAMETER ::   pp_large   = -1e10_wp 
    14491449      !!---------------------------------------------------------------------- 
    14501450      ! 
     
    16001600      !!---------------------------------------------------------------------- 
    16011601      INTEGER,                            INTENT(in   ) ::   Kmm        ! Ocean time-level index 
    1602       REAL(wp), DIMENSION(A2D(nn_hls-1)), INTENT(inout) ::   pdhdt      ! Rates of change of hbl 
    1603       REAL(wp), DIMENSION(A2D(nn_hls-1)), INTENT(inout) ::   phbl       ! BL depth 
    1604       REAL(wp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   phbl_t     ! BL depth 
    1605       REAL(wp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   pwb_ent    ! Buoyancy entrainment flux 
    1606       REAL(wp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   pwb_fk_b   ! MLE buoyancy flux averaged over OSBL 
     1602      REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(inout) ::   pdhdt      ! Rates of change of hbl 
     1603      REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(inout) ::   phbl       ! BL depth 
     1604      REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   phbl_t     ! BL depth 
     1605      REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   pwb_ent    ! Buoyancy entrainment flux 
     1606      REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   pwb_fk_b   ! MLE buoyancy flux averaged over OSBL 
    16071607      !! 
    16081608      INTEGER  ::   jk, jj, ji, jm 
    1609       REAL(wp) ::   zhbl_s, zvel_max, zdb 
    1610       REAL(wp) ::   zthermal, zbeta 
     1609      REAL(dp) ::   zhbl_s, zvel_max, zdb 
     1610      REAL(dp) ::   zthermal, zbeta 
    16111611      !!---------------------------------------------------------------------- 
    16121612      ! 
     
    17001700      !!---------------------------------------------------------------------- 
    17011701      INTEGER,                            INTENT(in   ) ::   Kmm            ! Ocean time-level index 
    1702       REAL(wp), DIMENSION(A2D(nn_hls-1)), INTENT(inout) ::   pdh            ! Pycnocline thickness 
    1703       REAL(wp), DIMENSION(A2D(nn_hls-1)), INTENT(inout) ::   phml           ! ML depth 
    1704       REAL(wp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   pdhdt          ! BL depth tendency 
    1705       REAL(wp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   phbl           ! BL depth 
    1706       REAL(wp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   pwb_ent        ! Buoyancy entrainment flux 
    1707       REAL(wp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   pdbdz_bl_ext   ! External buoyancy gradients 
    1708       REAL(wp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   pwb_fk_b       ! MLE buoyancy flux averaged over OSBL 
     1702      REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(inout) ::   pdh            ! Pycnocline thickness 
     1703      REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(inout) ::   phml           ! ML depth 
     1704      REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   pdhdt          ! BL depth tendency 
     1705      REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   phbl           ! BL depth 
     1706      REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   pwb_ent        ! Buoyancy entrainment flux 
     1707      REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   pdbdz_bl_ext   ! External buoyancy gradients 
     1708      REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   pwb_fk_b       ! MLE buoyancy flux averaged over OSBL 
    17091709      !! 
    17101710      INTEGER  ::   jj, ji 
    17111711      INTEGER  ::   inhml 
    1712       REAL(wp) ::   zari, ztau, zdh_ref, zddhdt, zvel_max 
    1713       REAL(wp) ::   ztmp   ! Auxiliary variable 
    1714       !! 
    1715       REAL, PARAMETER ::   pp_ddh = 2.5_wp, pp_ddh_2 = 3.5_wp   ! Also in pycnocline_depth 
     1712      REAL(dp) ::   zari, ztau, zdh_ref, zddhdt, zvel_max 
     1713      REAL(dp) ::   ztmp   ! Auxiliary variable 
     1714      !! 
     1715      REAL(dp), PARAMETER ::   pp_ddh = 2.5, pp_ddh_2 = 3.5   ! Also in pycnocline_depth 
    17161716      !!---------------------------------------------------------------------- 
    17171717      ! 
     
    18611861      INTEGER,                                 INTENT(in   ) ::   Kmm            ! Ocean time-level index 
    18621862      INTEGER,  DIMENSION(A2D(nn_hls-1)),      INTENT(in   ) ::   kp_ext         ! External-level offsets 
    1863       REAL(wp), DIMENSION(A2D(nn_hls-1),jpk),  INTENT(  out) ::   pdbdz          ! Gradients in the pycnocline 
    1864       REAL(wp), DIMENSION(A2D(nn_hls-1)),      INTENT(  out) ::   palpha 
    1865       REAL(wp), DIMENSION(A2D(nn_hls-1)),      INTENT(in   ) ::   pdh            ! Pycnocline thickness 
    1866       REAL(wp), DIMENSION(A2D(nn_hls-1)),      INTENT(in   ) ::   phbl           ! BL depth 
    1867       REAL(wp), DIMENSION(A2D(nn_hls-1)),      INTENT(in   ) ::   pdbdz_bl_ext   ! External buoyancy gradients 
    1868       REAL(wp), DIMENSION(A2D(nn_hls-1)),      INTENT(in   ) ::   phml           ! ML depth 
    1869       REAL(wp), DIMENSION(A2D(nn_hls-1)),      INTENT(in   ) ::   pdhdt          ! Rates of change of hbl 
     1863      REAL(dp), DIMENSION(A2D(nn_hls-1),jpk),  INTENT(  out) ::   pdbdz          ! Gradients in the pycnocline 
     1864      REAL(dp), DIMENSION(A2D(nn_hls-1)),      INTENT(  out) ::   palpha 
     1865      REAL(dp), DIMENSION(A2D(nn_hls-1)),      INTENT(in   ) ::   pdh            ! Pycnocline thickness 
     1866      REAL(dp), DIMENSION(A2D(nn_hls-1)),      INTENT(in   ) ::   phbl           ! BL depth 
     1867      REAL(dp), DIMENSION(A2D(nn_hls-1)),      INTENT(in   ) ::   pdbdz_bl_ext   ! External buoyancy gradients 
     1868      REAL(dp), DIMENSION(A2D(nn_hls-1)),      INTENT(in   ) ::   phml           ! ML depth 
     1869      REAL(dp), DIMENSION(A2D(nn_hls-1)),      INTENT(in   ) ::   pdhdt          ! Rates of change of hbl 
    18701870      !! 
    18711871      INTEGER  ::   jk, jj, ji 
    1872       REAL(wp) ::   zbgrad 
    1873       REAL(wp) ::   zgamma_b_nd, znd 
    1874       REAL(wp) ::   zzeta_m 
    1875       REAL(wp) ::   ztmp   ! Auxiliary variable 
    1876       !! 
    1877       REAL(wp), PARAMETER ::   pp_gamma_b = 2.25_wp 
    1878       REAL(wp), PARAMETER ::   pp_large   = -1e10_wp 
     1872      REAL(dp) ::   zbgrad 
     1873      REAL(dp) ::   zgamma_b_nd, znd 
     1874      REAL(dp) ::   zzeta_m 
     1875      REAL(dp) ::   ztmp   ! Auxiliary variable 
     1876      !! 
     1877      REAL(dp), PARAMETER ::   pp_gamma_b = 2.25_wp 
     1878      REAL(dp), PARAMETER ::   pp_large   = -1e10_wp 
    18791879      !!---------------------------------------------------------------------- 
    18801880      ! 
     
    19711971      !!---------------------------------------------------------------------- 
    19721972      INTEGER,                                 INTENT(in   ) ::   Kbb, Kmm       ! Ocean time-level indices 
    1973       REAL(wp), DIMENSION(A2D(nn_hls-1),jpk),  INTENT(inout) ::   pdiffut        ! t-diffusivity 
    1974       REAL(wp), DIMENSION(A2D(nn_hls-1),jpk),  INTENT(inout) ::   pviscos        ! Viscosity 
    1975       REAL(wp), DIMENSION(A2D(nn_hls-1)),      INTENT(in   ) ::   phbl           ! BL depth 
    1976       REAL(wp), DIMENSION(A2D(nn_hls-1)),      INTENT(in   ) ::   phml           ! ML depth 
    1977       REAL(wp), DIMENSION(A2D(nn_hls-1)),      INTENT(in   ) ::   pdh            ! Pycnocline depth 
    1978       REAL(wp), DIMENSION(A2D(nn_hls-1)),      INTENT(in   ) ::   pdhdt          ! BL depth tendency 
    1979       REAL(wp), DIMENSION(A2D(nn_hls-1)),      INTENT(in   ) ::   pshear         ! Shear production 
    1980       REAL(wp), DIMENSION(A2D(nn_hls-1)),      INTENT(in   ) ::   pwb_ent        ! Buoyancy entrainment flux 
    1981       REAL(wp), DIMENSION(A2D(nn_hls-1)),      INTENT(in   ) ::   pwb_min 
     1973      REAL(dp), DIMENSION(A2D(nn_hls-1),jpk),  INTENT(inout) ::   pdiffut        ! t-diffusivity 
     1974      REAL(dp), DIMENSION(A2D(nn_hls-1),jpk),  INTENT(inout) ::   pviscos        ! Viscosity 
     1975      REAL(dp), DIMENSION(A2D(nn_hls-1)),      INTENT(in   ) ::   phbl           ! BL depth 
     1976      REAL(dp), DIMENSION(A2D(nn_hls-1)),      INTENT(in   ) ::   phml           ! ML depth 
     1977      REAL(dp), DIMENSION(A2D(nn_hls-1)),      INTENT(in   ) ::   pdh            ! Pycnocline depth 
     1978      REAL(dp), DIMENSION(A2D(nn_hls-1)),      INTENT(in   ) ::   pdhdt          ! BL depth tendency 
     1979      REAL(dp), DIMENSION(A2D(nn_hls-1)),      INTENT(in   ) ::   pshear         ! Shear production 
     1980      REAL(dp), DIMENSION(A2D(nn_hls-1)),      INTENT(in   ) ::   pwb_ent        ! Buoyancy entrainment flux 
     1981      REAL(dp), DIMENSION(A2D(nn_hls-1)),      INTENT(in   ) ::   pwb_min 
    19821982      !! 
    19831983      INTEGER ::   ji, jj, jk   ! Loop indices 
    19841984      !! Scales used to calculate eddy diffusivity and viscosity profiles 
    1985       REAL(wp), DIMENSION(A2D(nn_hls-1)) ::   zdifml_sc,    zvisml_sc 
    1986       REAL(wp), DIMENSION(A2D(nn_hls-1)) ::   zdifpyc_n_sc, zdifpyc_s_sc 
    1987       REAL(wp), DIMENSION(A2D(nn_hls-1)) ::   zvispyc_n_sc, zvispyc_s_sc 
    1988       REAL(wp), DIMENSION(A2D(nn_hls-1)) ::   zbeta_d_sc,   zbeta_v_sc 
    1989       REAL(wp), DIMENSION(A2D(nn_hls-1)) ::   zb_coup,      zc_coup_vis,  zc_coup_dif 
    1990       !! 
    1991       REAL(wp) ::   zvel_sc_pyc, zvel_sc_ml, zstab_fac, zz_b 
    1992       REAL(wp) ::   za_cubic, zb_d_cubic, zc_d_cubic, zd_d_cubic,   &   ! Coefficients in cubic polynomial specifying diffusivity 
     1985      REAL(dp), DIMENSION(A2D(nn_hls-1)) ::   zdifml_sc,    zvisml_sc 
     1986      REAL(dp), DIMENSION(A2D(nn_hls-1)) ::   zdifpyc_n_sc, zdifpyc_s_sc 
     1987      REAL(dp), DIMENSION(A2D(nn_hls-1)) ::   zvispyc_n_sc, zvispyc_s_sc 
     1988      REAL(dp), DIMENSION(A2D(nn_hls-1)) ::   zbeta_d_sc,   zbeta_v_sc 
     1989      REAL(dp), DIMENSION(A2D(nn_hls-1)) ::   zb_coup,      zc_coup_vis,  zc_coup_dif 
     1990      !! 
     1991      REAL(dp) ::   zvel_sc_pyc, zvel_sc_ml, zstab_fac, zz_b 
     1992      REAL(dp) ::   za_cubic, zb_d_cubic, zc_d_cubic, zd_d_cubic,   &   ! Coefficients in cubic polynomial specifying diffusivity 
    19931993         &                    zb_v_cubic, zc_v_cubic, zd_v_cubic        ! and viscosity in pycnocline 
    1994       REAL(wp) ::   zznd_ml, zznd_pyc, ztmp 
    1995       REAL(wp) ::   zmsku, zmskv 
    1996       !! 
    1997       REAL(wp), PARAMETER ::   pp_dif_ml     = 0.8_wp,  pp_vis_ml  = 0.375_wp 
    1998       REAL(wp), PARAMETER ::   pp_dif_pyc    = 0.15_wp, pp_vis_pyc = 0.142_wp 
    1999       REAL(wp), PARAMETER ::   pp_vispyc_shr = 0.15_wp 
     1994      REAL(dp) ::   zznd_ml, zznd_pyc, ztmp 
     1995      REAL(dp) ::   zmsku, zmskv 
     1996      !! 
     1997      REAL(dp), PARAMETER ::   pp_dif_ml     = 0.8_wp,  pp_vis_ml  = 0.375_wp 
     1998      REAL(dp), PARAMETER ::   pp_dif_pyc    = 0.15_wp, pp_vis_pyc = 0.142_wp 
     1999      REAL(dp), PARAMETER ::   pp_vispyc_shr = 0.15_wp 
    20002000      !!---------------------------------------------------------------------- 
    20012001      ! 
     
    21672167      INTEGER,                                 INTENT(in   ) ::   Kmm            ! Time-level index 
    21682168      INTEGER,  DIMENSION(A2D(nn_hls-1)),      INTENT(in   ) ::   kp_ext         ! Offset for external level 
    2169       REAL(wp), DIMENSION(A2D(nn_hls-1)),      INTENT(in   ) ::   phbl           ! BL depth 
    2170       REAL(wp), DIMENSION(A2D(nn_hls-1)),      INTENT(in   ) ::   phml           ! ML depth 
    2171       REAL(wp), DIMENSION(A2D(nn_hls-1)),      INTENT(in   ) ::   pdh            ! Pycnocline depth 
    2172       REAL(wp), DIMENSION(A2D(nn_hls-1)),      INTENT(in   ) ::   pdhdt          ! BL depth tendency 
    2173       REAL(wp), DIMENSION(A2D(nn_hls-1)),      INTENT(in   ) ::   pshear         ! Shear production 
    2174       REAL(wp), DIMENSION(A2D(nn_hls-1)),      INTENT(in   ) ::   pdtdz_bl_ext   ! External temperature gradients 
    2175       REAL(wp), DIMENSION(A2D(nn_hls-1)),      INTENT(in   ) ::   pdsdz_bl_ext   ! External salinity gradients 
    2176       REAL(wp), DIMENSION(A2D(nn_hls-1)),      INTENT(in   ) ::   pdbdz_bl_ext   ! External buoyancy gradients 
    2177       REAL(wp), DIMENSION(A2D(nn_hls-1),jpk),  INTENT(in   ) ::   pdiffut        ! t-diffusivity 
    2178       REAL(wp), DIMENSION(A2D(nn_hls-1),jpk),  INTENT(in   ) ::   pviscos        ! Viscosity 
    2179       !! 
    2180       REAL(wp), DIMENSION(A2D(nn_hls-1))     ::   zalpha_pyc   ! 
    2181       REAL(wp), DIMENSION(A2D(nn_hls-1),jpk) ::   zdbdz_pyc    ! Parametrised gradient of buoyancy in the pycnocline 
    2182       REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::   z3ddz_pyc_1, z3ddz_pyc_2   ! Pycnocline gradient/shear profiles 
     2169      REAL(dp), DIMENSION(A2D(nn_hls-1)),      INTENT(in   ) ::   phbl           ! BL depth 
     2170      REAL(dp), DIMENSION(A2D(nn_hls-1)),      INTENT(in   ) ::   phml           ! ML depth 
     2171      REAL(dp), DIMENSION(A2D(nn_hls-1)),      INTENT(in   ) ::   pdh            ! Pycnocline depth 
     2172      REAL(dp), DIMENSION(A2D(nn_hls-1)),      INTENT(in   ) ::   pdhdt          ! BL depth tendency 
     2173      REAL(dp), DIMENSION(A2D(nn_hls-1)),      INTENT(in   ) ::   pshear         ! Shear production 
     2174      REAL(dp), DIMENSION(A2D(nn_hls-1)),      INTENT(in   ) ::   pdtdz_bl_ext   ! External temperature gradients 
     2175      REAL(dp), DIMENSION(A2D(nn_hls-1)),      INTENT(in   ) ::   pdsdz_bl_ext   ! External salinity gradients 
     2176      REAL(dp), DIMENSION(A2D(nn_hls-1)),      INTENT(in   ) ::   pdbdz_bl_ext   ! External buoyancy gradients 
     2177      REAL(dp), DIMENSION(A2D(nn_hls-1),jpk),  INTENT(in   ) ::   pdiffut        ! t-diffusivity 
     2178      REAL(dp), DIMENSION(A2D(nn_hls-1),jpk),  INTENT(in   ) ::   pviscos        ! Viscosity 
     2179      !! 
     2180      REAL(dp), DIMENSION(A2D(nn_hls-1))     ::   zalpha_pyc   ! 
     2181      REAL(dp), DIMENSION(A2D(nn_hls-1),jpk) ::   zdbdz_pyc    ! Parametrised gradient of buoyancy in the pycnocline 
     2182      REAL(dp), DIMENSION(:,:,:), ALLOCATABLE ::   z3ddz_pyc_1, z3ddz_pyc_2   ! Pycnocline gradient/shear profiles 
    21832183      !! 
    21842184      INTEGER                            ::   ji, jj, jk, jkm_bld, jkf_mld, jkm_mld   ! Loop indices 
    21852185      INTEGER                            ::   istat                                   ! Memory allocation status 
    2186       REAL(wp)                           ::   zznd_d, zznd_ml, zznd_pyc, znd          ! Temporary non-dimensional depths 
    2187       REAL(wp), DIMENSION(A2D(nn_hls-1)) ::   zsc_wth_1,zsc_ws_1                      ! Temporary scales 
    2188       REAL(wp), DIMENSION(A2D(nn_hls-1)) ::   zsc_uw_1, zsc_uw_2                      ! Temporary scales 
    2189       REAL(wp), DIMENSION(A2D(nn_hls-1)) ::   zsc_vw_1, zsc_vw_2                      ! Temporary scales 
    2190       REAL(wp), DIMENSION(A2D(nn_hls-1)) ::   ztau_sc_u                               ! Dissipation timescale at base of WML 
    2191       REAL(wp)                           ::   zbuoy_pyc_sc, zdelta_pyc                ! 
    2192       REAL(wp)                           ::   zl_c,zl_l,zl_eps                        ! Used to calculate turbulence length scale 
    2193       REAL(wp), DIMENSION(A2D(nn_hls-1)) ::   za_cubic, zb_cubic                      ! Coefficients in cubic polynomial specifying 
    2194       REAL(wp), DIMENSION(A2D(nn_hls-1)) ::   zc_cubic, zd_cubic                      !    diffusivity in pycnocline 
    2195       REAL(wp), DIMENSION(A2D(nn_hls-1)) ::   zwt_pyc_sc_1, zws_pyc_sc_1              ! 
    2196       REAL(wp), DIMENSION(A2D(nn_hls-1)) ::   zzeta_pyc                               ! 
    2197       REAL(wp)                           ::   zomega, zvw_max                         ! 
    2198       REAL(wp), DIMENSION(A2D(nn_hls-1)) ::   zuw_bse,zvw_bse                         ! Momentum, heat, and salinity fluxes 
    2199       REAL(wp), DIMENSION(A2D(nn_hls-1)) ::   zwth_ent,zws_ent                        !    at the top of the pycnocline 
    2200       REAL(wp), DIMENSION(A2D(nn_hls-1)) ::   zsc_wth_pyc, zsc_ws_pyc                 ! Scales for pycnocline transport term 
    2201       REAL(wp)                           ::   ztmp                                    ! 
    2202       REAL(wp)                           ::   ztgrad, zsgrad, zbgrad                  ! Variables used to calculate pycnocline 
     2186      REAL(dp)                           ::   zznd_d, zznd_ml, zznd_pyc, znd          ! Temporary non-dimensional depths 
     2187      REAL(dp), DIMENSION(A2D(nn_hls-1)) ::   zsc_wth_1,zsc_ws_1                      ! Temporary scales 
     2188      REAL(dp), DIMENSION(A2D(nn_hls-1)) ::   zsc_uw_1, zsc_uw_2                      ! Temporary scales 
     2189      REAL(dp), DIMENSION(A2D(nn_hls-1)) ::   zsc_vw_1, zsc_vw_2                      ! Temporary scales 
     2190      REAL(dp), DIMENSION(A2D(nn_hls-1)) ::   ztau_sc_u                               ! Dissipation timescale at base of WML 
     2191      REAL(dp)                           ::   zbuoy_pyc_sc, zdelta_pyc                ! 
     2192      REAL(dp)                           ::   zl_c,zl_l,zl_eps                        ! Used to calculate turbulence length scale 
     2193      REAL(dp), DIMENSION(A2D(nn_hls-1)) ::   za_cubic, zb_cubic                      ! Coefficients in cubic polynomial specifying 
     2194      REAL(dp), DIMENSION(A2D(nn_hls-1)) ::   zc_cubic, zd_cubic                      !    diffusivity in pycnocline 
     2195      REAL(dp), DIMENSION(A2D(nn_hls-1)) ::   zwt_pyc_sc_1, zws_pyc_sc_1              ! 
     2196      REAL(dp), DIMENSION(A2D(nn_hls-1)) ::   zzeta_pyc                               ! 
     2197      REAL(dp)                           ::   zomega, zvw_max                         ! 
     2198      REAL(dp), DIMENSION(A2D(nn_hls-1)) ::   zuw_bse,zvw_bse                         ! Momentum, heat, and salinity fluxes 
     2199      REAL(dp), DIMENSION(A2D(nn_hls-1)) ::   zwth_ent,zws_ent                        !    at the top of the pycnocline 
     2200      REAL(dp), DIMENSION(A2D(nn_hls-1)) ::   zsc_wth_pyc, zsc_ws_pyc                 ! Scales for pycnocline transport term 
     2201      REAL(dp)                           ::   ztmp                                    ! 
     2202      REAL(dp)                           ::   ztgrad, zsgrad, zbgrad                  ! Variables used to calculate pycnocline 
    22032203      !!                                                                              !    gradients 
    2204       REAL(wp)                           ::   zugrad, zvgrad                          ! Variables for calculating pycnocline shear 
    2205       REAL(wp)                           ::   zdtdz_pyc                               ! Parametrized gradient of temperature in 
     2204      REAL(dp)                           ::   zugrad, zvgrad                          ! Variables for calculating pycnocline shear 
     2205      REAL(dp)                           ::   zdtdz_pyc                               ! Parametrized gradient of temperature in 
    22062206      !!                                                                              !    pycnocline 
    2207       REAL(wp)                           ::   zdsdz_pyc                               ! Parametrised gradient of salinity in 
     2207      REAL(dp)                           ::   zdsdz_pyc                               ! Parametrised gradient of salinity in 
    22082208      !!                                                                              !    pycnocline 
    2209       REAL(wp)                           ::   zdudz_pyc                               ! u-shear across the pycnocline 
    2210       REAL(wp)                           ::   zdvdz_pyc                               ! v-shear across the pycnocline 
     2209      REAL(dp)                           ::   zdudz_pyc                               ! u-shear across the pycnocline 
     2210      REAL(dp)                           ::   zdvdz_pyc                               ! v-shear across the pycnocline 
    22112211      !!---------------------------------------------------------------------- 
    22122212      ! 
     
    27042704      !!---------------------------------------------------------------------- 
    27052705      INTEGER,                            INTENT(in   ) ::   Kmm          ! Time-level index 
    2706       REAL(wp), DIMENSION(A2D(nn_hls)),   INTENT(  out) ::   pmld         ! == Estimated FK BLD used for MLE horizontal gradients == ! 
    2707       REAL(wp), DIMENSION(A2D(nn_hls)),   INTENT(inout) ::   pdtdx        ! Horizontal gradient for Fox-Kemper parametrization 
    2708       REAL(wp), DIMENSION(A2D(nn_hls)),   INTENT(inout) ::   pdtdy        ! Horizontal gradient for Fox-Kemper parametrization 
    2709       REAL(wp), DIMENSION(A2D(nn_hls)),   INTENT(inout) ::   pdsdx        ! Horizontal gradient for Fox-Kemper parametrization 
    2710       REAL(wp), DIMENSION(A2D(nn_hls)),   INTENT(inout) ::   pdsdy        ! Horizontal gradient for Fox-Kemper parametrization 
    2711       REAL(wp), DIMENSION(A2D(nn_hls-1)), INTENT(inout) ::   pdbds_mle    ! Magnitude of horizontal buoyancy gradient 
     2706      REAL(dp), DIMENSION(A2D(nn_hls)),   INTENT(  out) ::   pmld         ! == Estimated FK BLD used for MLE horizontal gradients == ! 
     2707      REAL(dp), DIMENSION(A2D(nn_hls)),   INTENT(inout) ::   pdtdx        ! Horizontal gradient for Fox-Kemper parametrization 
     2708      REAL(dp), DIMENSION(A2D(nn_hls)),   INTENT(inout) ::   pdtdy        ! Horizontal gradient for Fox-Kemper parametrization 
     2709      REAL(dp), DIMENSION(A2D(nn_hls)),   INTENT(inout) ::   pdsdx        ! Horizontal gradient for Fox-Kemper parametrization 
     2710      REAL(dp), DIMENSION(A2D(nn_hls)),   INTENT(inout) ::   pdsdy        ! Horizontal gradient for Fox-Kemper parametrization 
     2711      REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(inout) ::   pdbds_mle    ! Magnitude of horizontal buoyancy gradient 
    27122712      !! 
    27132713      INTEGER                               ::   ji, jj, jk   ! Dummy loop indices 
    27142714      INTEGER,  DIMENSION(A2D(nn_hls))      ::   jk_mld_prof  ! Base level of MLE layer 
    27152715      INTEGER                               ::   ikt, ikmax   ! Local integers       
    2716       REAL(wp)                              ::   zc 
    2717       REAL(wp)                              ::   zN2_c        ! Local buoyancy difference from 10m value 
    2718       REAL(wp), DIMENSION(A2D(nn_hls))      ::   ztm 
    2719       REAL(wp), DIMENSION(A2D(nn_hls))      ::   zsm 
    2720       REAL(wp), DIMENSION(A2D(nn_hls),jpts) ::   ztsm_midu 
    2721       REAL(wp), DIMENSION(A2D(nn_hls),jpts) ::   ztsm_midv 
    2722       REAL(wp), DIMENSION(A2D(nn_hls),jpts) ::   zabu 
    2723       REAL(wp), DIMENSION(A2D(nn_hls),jpts) ::   zabv 
    2724       REAL(wp), DIMENSION(A2D(nn_hls))      ::   zmld_midu 
    2725       REAL(wp), DIMENSION(A2D(nn_hls))      ::   zmld_midv 
     2716      REAL(dp)                              ::   zc 
     2717      REAL(dp)                              ::   zN2_c        ! Local buoyancy difference from 10m value 
     2718      REAL(dp), DIMENSION(A2D(nn_hls))      ::   ztm 
     2719      REAL(dp), DIMENSION(A2D(nn_hls))      ::   zsm 
     2720      REAL(dp), DIMENSION(A2D(nn_hls),jpts) ::   ztsm_midu 
     2721      REAL(dp), DIMENSION(A2D(nn_hls),jpts) ::   ztsm_midv 
     2722      REAL(dp), DIMENSION(A2D(nn_hls),jpts) ::   zabu 
     2723      REAL(dp), DIMENSION(A2D(nn_hls),jpts) ::   zabv 
     2724      REAL(dp), DIMENSION(A2D(nn_hls))      ::   zmld_midu 
     2725      REAL(dp), DIMENSION(A2D(nn_hls))      ::   zmld_midv 
    27262726      !!---------------------------------------------------------------------- 
    27272727      ! 
     
    28132813      !!----------------------------------------------------------------------       
    28142814      INTEGER,                            INTENT(in   ) ::   Kmm         ! Time-level index 
    2815       REAL(wp), DIMENSION(A2D(nn_hls-1)), INTENT(inout) ::   pwb_fk 
    2816       REAL(wp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   phbl        ! BL depth 
    2817       REAL(wp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   phmle       ! MLE depth 
    2818       REAL(wp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   pwb_ent     ! Buoyancy entrainment flux 
    2819       REAL(wp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   pdbds_mle   ! Magnitude of horizontal buoyancy gradient 
     2815      REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(inout) ::   pwb_fk 
     2816      REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   phbl        ! BL depth 
     2817      REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   phmle       ! MLE depth 
     2818      REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   pwb_ent     ! Buoyancy entrainment flux 
     2819      REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   pdbds_mle   ! Magnitude of horizontal buoyancy gradient 
    28202820      !! 
    28212821      INTEGER                            ::   ji, jj, jk        ! Dummy loop indices 
    2822       REAL(wp), DIMENSION(A2D(nn_hls-1)) ::   znd_param 
    2823       REAL(wp)                           ::   zthermal, zbeta 
    2824       REAL(wp)                           ::   zbuoy 
    2825       REAL(wp)                           ::   ztmp 
    2826       REAL(wp)                           ::   zpe_mle_layer 
    2827       REAL(wp)                           ::   zpe_mle_ref 
    2828       REAL(wp)                           ::   zdbdz_mle_int 
     2822      REAL(dp), DIMENSION(A2D(nn_hls-1)) ::   znd_param 
     2823      REAL(dp)                           ::   zthermal, zbeta 
     2824      REAL(dp)                           ::   zbuoy 
     2825      REAL(dp)                           ::   ztmp 
     2826      REAL(dp)                           ::   zpe_mle_layer 
     2827      REAL(dp)                           ::   zpe_mle_ref 
     2828      REAL(dp)                           ::   zdbdz_mle_int 
    28292829      !!----------------------------------------------------------------------       
    28302830      ! 
     
    29252925      !!---------------------------------------------------------------------- 
    29262926      INTEGER,                            INTENT(in   ) ::   Kmm         ! Time-level index 
    2927       REAL(wp), DIMENSION(A2D(nn_hls)),   INTENT(in   ) ::   pmld        ! == Estimated FK BLD used for MLE horiz gradients == ! 
    2928       REAL(wp), DIMENSION(A2D(nn_hls-1)), INTENT(inout) ::   phmle       ! MLE depth 
    2929       REAL(wp), DIMENSION(A2D(nn_hls-1)), INTENT(inout) ::   pvel_mle    ! Velocity scale for dhdt with stable ML and FK 
    2930       REAL(wp), DIMENSION(A2D(nn_hls-1)), INTENT(inout) ::   pdiff_mle   ! Extra MLE vertical diff 
    2931       REAL(wp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   pdbds_mle   ! Magnitude of horizontal buoyancy gradient 
    2932       REAL(wp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   phbl        ! BL depth 
    2933       REAL(wp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   pwb0tot     ! Total surface buoyancy flux including insolation 
     2927      REAL(dp), DIMENSION(A2D(nn_hls)),   INTENT(in   ) ::   pmld        ! == Estimated FK BLD used for MLE horiz gradients == ! 
     2928      REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(inout) ::   phmle       ! MLE depth 
     2929      REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(inout) ::   pvel_mle    ! Velocity scale for dhdt with stable ML and FK 
     2930      REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(inout) ::   pdiff_mle   ! Extra MLE vertical diff 
     2931      REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   pdbds_mle   ! Magnitude of horizontal buoyancy gradient 
     2932      REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   phbl        ! BL depth 
     2933      REAL(dp), DIMENSION(A2D(nn_hls-1)), INTENT(in   ) ::   pwb0tot     ! Total surface buoyancy flux including insolation 
    29342934      !! 
    29352935      INTEGER  ::   ji, jj, jk   ! Dummy loop indices 
    2936       REAL(wp) ::   ztmp 
    2937       REAL(wp) ::   zdbdz 
    2938       REAL(wp) ::   zdtdz 
    2939       REAL(wp) ::   zdsdz 
    2940       REAL(wp) ::   zthermal 
    2941       REAL(wp) ::   zbeta 
    2942       REAL(wp) ::   zbuoy 
    2943       REAL(wp) ::   zdb_mle 
     2936      REAL(dp) ::   ztmp 
     2937      REAL(dp) ::   zdbdz 
     2938      REAL(dp) ::   zdtdz 
     2939      REAL(dp) ::   zdsdz 
     2940      REAL(dp) ::   zthermal 
     2941      REAL(dp) ::   zbeta 
     2942      REAL(dp) ::   zbuoy 
     2943      REAL(dp) ::   zdb_mle 
    29442944      !!---------------------------------------------------------------------- 
    29452945      ! 
     
    30023002      INTEGER  ::   ios            ! Local integer 
    30033003      INTEGER  ::   ji, jj, jk     ! Dummy loop indices 
    3004       REAL(wp) ::   z1_t2 
    3005       !! 
    3006       REAL(wp), PARAMETER ::   pp_large = -1e10_wp 
     3004      REAL(dp) ::   z1_t2 
     3005      !! 
     3006      REAL(dp), PARAMETER ::   pp_large = -1e10_wp 
    30073007      !! 
    30083008      NAMELIST/namzdf_osm/ ln_use_osm_la,    rn_osm_la,      rn_osm_dstokes,      nn_ave,                nn_osm_wave,        & 
     
    32333233      INTEGER  ::   ji, jj, jk                    ! Dummy loop indices 
    32343234      INTEGER  ::   iiki, ikt                     ! Local integer 
    3235       REAL(wp) ::   zhbf                          ! Tempory scalars 
    3236       REAL(wp) ::   zN2_c                         ! Local scalar 
    3237       REAL(wp) ::   rho_c = 0.01_wp               ! Density criterion for mixed layer depth 
     3235      REAL(dp) ::   zhbf                          ! Tempory scalars 
     3236      REAL(dp) ::   zN2_c                         ! Local scalar 
     3237      REAL(dp) ::   rho_c = 0.01_wp               ! Density criterion for mixed layer depth 
    32383238      INTEGER, DIMENSION(jpi,jpj) ::   imld_rst   ! Level of mixed-layer depth (pycnocline top) 
    32393239      !!---------------------------------------------------------------------- 
     
    32943294      IF( lwp ) WRITE(numout,*) ' ===>>>> : calculating hbl computed from stratification' 
    32953295      ! w-level of the mixing and mixed layers 
    3296       CALL eos_rab( CASTWP(ts(:,:,:,:,Kmm)), rab_n, Kmm ) 
     3296      CALL eos_rab( ts(:,:,:,:,Kmm), rab_n, Kmm ) 
    32973297      CALL bn2( ts(:,:,:,:,Kmm), rab_n, rn2, Kmm ) 
    32983298      imld_rst(:,:) = nlb10            ! Initialization to the number of w ocean point 
     
    33403340      !! 
    33413341      INTEGER                                 ::   ji, jj, jk 
    3342       REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::   ztrdt, ztrds   ! 3D workspace 
     3342      REAL(dp), DIMENSION(:,:,:), ALLOCATABLE ::   ztrdt, ztrds   ! 3D workspace 
    33433343      !!---------------------------------------------------------------------- 
    33443344      ! 
     
    33753375      ! 
    33763376      IF ( sn_cfctl%l_prtctl ) THEN 
    3377          CALL prt_ctl( tab3d_1=CASTWP(pts(:,:,:,jp_tem,Krhs)), clinfo1=' osm  - Ta: ', mask1=tmask,   & 
    3378             &          tab3d_2=CASTWP(pts(:,:,:,jp_sal,Krhs)), clinfo2=       ' Sa: ', mask2=tmask, clinfo3='tra' ) 
     3377         CALL prt_ctl( tab3d_1=pts(:,:,:,jp_tem,Krhs), clinfo1=' osm  - Ta: ', mask1=tmask,   & 
     3378            &          tab3d_2=pts(:,:,:,jp_sal,Krhs), clinfo2=       ' Sa: ', mask2=tmask, clinfo3='tra' ) 
    33793379      END IF 
    33803380      ! 
     
    34443444      !!---------------------------------------------------------------------- 
    34453445      CHARACTER(LEN=*),         INTENT(in   ) ::   cdname 
    3446       REAL(wp), DIMENSION(:,:), INTENT(in   ) ::   posmdia2d 
     3446      REAL(dp), DIMENSION(:,:), INTENT(in   ) ::   posmdia2d 
    34473447      !!---------------------------------------------------------------------- 
    34483448      ! 
     
    34673467      !!---------------------------------------------------------------------- 
    34683468      CHARACTER(LEN=*),           INTENT(in   ) ::   cdname 
    3469       REAL(wp), DIMENSION(:,:,:), INTENT(in   ) ::   posmdia3d 
     3469      REAL(dp), DIMENSION(:,:,:), INTENT(in   ) ::   posmdia3d 
    34703470      !!---------------------------------------------------------------------- 
    34713471      ! 
Note: See TracChangeset for help on using the changeset viewer.