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/SBC/sbcblk_algo_ice_lg15.F90 – NEMO

Ignore:
Timestamp:
2021-11-26T12:27:56+01:00 (3 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/SBC/sbcblk_algo_ice_lg15.F90

    r14072 r15540  
    3131   PUBLIC :: turb_ice_lg15 
    3232 
    33    REAL(wp), PARAMETER ::   ralpha_0  = 0.2_wp     ! (Eq.12) (ECHAM6 value) 
     33   REAL(dp), PARAMETER ::   ralpha_0  = 0.2_wp     ! (Eq.12) (ECHAM6 value) 
    3434 
    3535   !! To be namelist parameters in NEMO: 
    36    REAL(wp), PARAMETER :: rz0_i_s_0  = 0.69e-3_wp  !           Eq. 43 [m] 
    37    REAL(wp), PARAMETER :: rz0_i_f_0  = 4.54e-4_wp  ! bottom p.562 MIZ [m] 
     36   REAL(dp), PARAMETER :: rz0_i_s_0  = 0.69e-3_wp  !           Eq. 43 [m] 
     37   REAL(dp), PARAMETER :: rz0_i_f_0  = 4.54e-4_wp  ! bottom p.562 MIZ [m] 
    3838 
    3939   LOGICAL,  PARAMETER :: l_add_form_drag = .TRUE. 
     
    4444 
    4545   !!---------------------------------------------------------------------- 
     46#  include "single_precision_substitute.h90" 
    4647CONTAINS 
    4748 
     
    101102      REAL(wp), INTENT(in ), DIMENSION(jpi,jpj) :: U_zu  ! relative wind module at zu                [m/s] 
    102103      REAL(wp), INTENT(in ), DIMENSION(jpi,jpj) :: frice ! sea-ice concentration        (fraction) 
    103       REAL(wp), INTENT(out), DIMENSION(jpi,jpj) :: Cd_i  ! drag coefficient over sea-ice 
    104       REAL(wp), INTENT(out), DIMENSION(jpi,jpj) :: Ch_i  ! transfert coefficient for heat over ice 
    105       REAL(wp), INTENT(out), DIMENSION(jpi,jpj) :: Ce_i  ! transfert coefficient for sublimation over ice 
    106       REAL(wp), INTENT(out), DIMENSION(jpi,jpj) :: t_zu_i ! pot. air temp. adjusted at zu               [K] 
    107       REAL(wp), INTENT(out), DIMENSION(jpi,jpj) :: q_zu_i ! spec. humidity adjusted at zu           [kg/kg] 
    108       !!---------------------------------------------------------------------------------- 
    109       REAL(wp), INTENT(out), DIMENSION(jpi,jpj), OPTIONAL :: CdN 
    110       REAL(wp), INTENT(out), DIMENSION(jpi,jpj), OPTIONAL :: ChN 
    111       REAL(wp), INTENT(out), DIMENSION(jpi,jpj), OPTIONAL :: CeN 
    112       REAL(wp), INTENT(out), DIMENSION(jpi,jpj), OPTIONAL :: xz0  ! Aerodynamic roughness length   [m] 
    113       REAL(wp), INTENT(out), DIMENSION(jpi,jpj), OPTIONAL :: xu_star  ! u*, friction velocity 
    114       REAL(wp), INTENT(out), DIMENSION(jpi,jpj), OPTIONAL :: xL  ! zeta (zu/L) 
    115       REAL(wp), INTENT(out), DIMENSION(jpi,jpj), OPTIONAL :: xUN10  ! Neutral wind at zu 
    116       !!---------------------------------------------------------------------------------- 
    117       REAL(wp), DIMENSION(:,:), ALLOCATABLE :: Ubzu 
    118       REAL(wp), DIMENSION(:,:), ALLOCATABLE :: ztmp1, ztmp2      ! temporary stuff 
    119       REAL(wp), DIMENSION(:,:), ALLOCATABLE :: dt_zu, dq_zu 
    120       REAL(wp), DIMENSION(:,:), ALLOCATABLE :: zz0_s, zz0_f, RiB ! third dimensions (size=2): 
    121       REAL(wp), DIMENSION(:,:), ALLOCATABLE :: zCdN_s, zChN_s, zCdN_f, zChN_f 
     104      REAL(dp), INTENT(out), DIMENSION(jpi,jpj) :: Cd_i  ! drag coefficient over sea-ice 
     105      REAL(dp), INTENT(out), DIMENSION(jpi,jpj) :: Ch_i  ! transfert coefficient for heat over ice 
     106      REAL(dp), INTENT(out), DIMENSION(jpi,jpj) :: Ce_i  ! transfert coefficient for sublimation over ice 
     107      REAL(dp), INTENT(out), DIMENSION(jpi,jpj) :: t_zu_i ! pot. air temp. adjusted at zu               [K] 
     108      REAL(dp), INTENT(out), DIMENSION(jpi,jpj) :: q_zu_i ! spec. humidity adjusted at zu           [kg/kg] 
     109      !!---------------------------------------------------------------------------------- 
     110      REAL(dp), INTENT(out), DIMENSION(jpi,jpj), OPTIONAL :: CdN 
     111      REAL(dp), INTENT(out), DIMENSION(jpi,jpj), OPTIONAL :: ChN 
     112      REAL(dp), INTENT(out), DIMENSION(jpi,jpj), OPTIONAL :: CeN 
     113      REAL(dp), INTENT(out), DIMENSION(jpi,jpj), OPTIONAL :: xz0  ! Aerodynamic roughness length   [m] 
     114      REAL(dp), INTENT(out), DIMENSION(jpi,jpj), OPTIONAL :: xu_star  ! u*, friction velocity 
     115      REAL(dp), INTENT(out), DIMENSION(jpi,jpj), OPTIONAL :: xL  ! zeta (zu/L) 
     116      REAL(dp), INTENT(out), DIMENSION(jpi,jpj), OPTIONAL :: xUN10  ! Neutral wind at zu 
     117      !!---------------------------------------------------------------------------------- 
     118      REAL(dp), DIMENSION(:,:), ALLOCATABLE :: Ubzu 
     119      REAL(dp), DIMENSION(:,:), ALLOCATABLE :: ztmp1, ztmp2      ! temporary stuff 
     120      REAL(dp), DIMENSION(:,:), ALLOCATABLE :: dt_zu, dq_zu 
     121      REAL(dp), DIMENSION(:,:), ALLOCATABLE :: zz0_s, zz0_f, RiB ! third dimensions (size=2): 
     122      REAL(dp), DIMENSION(:,:), ALLOCATABLE :: zCdN_s, zChN_s, zCdN_f, zChN_f 
    122123      !! 
    123124      INTEGER :: jit 
     
    179180      Cd_i(:,:) = zCdN_s(:,:) + zCdN_f(:,:) 
    180181      Ch_i(:,:) = zChN_s(:,:) + zChN_f(:,:) 
    181       RiB(:,:) = Ri_bulk( zt, Ts_i(:,:), t_zt(:,:), qs_i(:,:), q_zt(:,:), Ubzu(:,:) )  ! over ice (index=1) 
     182      RiB(:,:) =Ri_bulk( zt, CASTDP(Ts_i(:,:)), CASTDP(t_zt(:,:)), CASTDP(qs_i(:,:)), CASTDP(q_zt(:,:)), Ubzu(:,:) )  ! over ice (index=1) 
    182183 
    183184 
     
    207208            ztmp2(:,:) = Ubzu(:,:) 
    208209         END IF 
    209          RiB(:,:) = Ri_bulk( zt, Ts_i(:,:), t_zt(:,:), qs_i(:,:), q_zt(:,:), ztmp2(:,:) )  ! over ice (index=1) 
     210         RiB(:,:) =Ri_bulk( zt, CASTDP(Ts_i(:,:)), CASTDP(t_zt(:,:)), CASTDP(qs_i(:,:)), CASTDP(q_zt(:,:)), ztmp2(:,:) )  ! over ice (index=1) 
    210211         IF(l_dbg_print) PRINT *, 'LOLO: RiB_zt =', RiB(:,:) 
    211212 
Note: See TracChangeset for help on using the changeset viewer.