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 13830 – NEMO

Changeset 13830


Ignore:
Timestamp:
2020-11-19T13:31:18+01:00 (3 years ago)
Author:
laurent
Message:

Sea-ice bulk algorithm "AN05" (Andreas et al. 2005) now operational!

Location:
NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice
Files:
1 added
10 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/cfgs/SHARED/namelist_ref

    r13806 r13830  
    282282   ln_tair_pot = .false. !  air temperature read in "sn_tair" is already POTENTIAL TEMPERATURE, NOT ABSOLUTE (ECMWF => ln_tair_pot=.false.) 
    283283   !!    
    284    ! Sea-ice specific: (IF: nn_ice >=1 ) 
    285    ln_Cx_ice_cst = .true.   ! use constant ice-air bulk transfer coefficients (value given below) 
    286       rn_Cd_i  = 1.4e-3     ! sea-ice drag coefficient 
    287       rn_Ce_i  = 1.4e-3     !    "    sublimation coefficient 
    288       rn_Ch_i  = 1.4e-3     !    "    sensible heat flux coefficient       
    289    ln_Cx_ice_LU12  = .false.  !  air-ice drag = F(ice conc.) (Lupkes et al. 2012) 
    290    ln_Cx_ice_LG15  = .false.  !  air-ice drag = F(ice conc.) (Lupkes & Gryanik 2015) 
     284   !! Bulk transfer coefficients over sea-ice: (relevant IF: nn_ice >=1 ) 
     285   ln_Cx_ice_cst = .true.     ! use constant ice-air bulk transfer coefficients (value given below) 
     286      rn_Cd_i  = 1.4e-3       ! sea-ice drag coefficient 
     287      rn_Ce_i  = 1.4e-3       !    "    sublimation coefficient 
     288      rn_Ch_i  = 1.4e-3       !    "    sensible heat flux coefficient 
     289   ln_Cx_ice_AN05  = .false.  !  (Andreas et al. 2005) 
     290   ln_Cx_ice_LU12  = .false.  !  (Lupkes et al. 2012) 
     291   ln_Cx_ice_LG15  = .false.  !  (Lupkes & Gryanik 2015) 
    291292   ! 
    292293   cn_dir      = './'      !  root directory for the bulk data location 
  • NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/src/OCE/SBC/sbcblk.F90

    r13806 r13830  
    4545   USE ice     , ONLY :   u_ice, v_ice, jpl, a_i_b, at_i_b, t_su, rn_cnd_s, hfx_err_dif, nn_qtrice 
    4646   USE icevar         ! for CALL ice_var_snwblow 
     47   USE sbcblk_algo_ice_an05 
    4748   USE sbcblk_algo_ice_lu12 
    4849   USE sbcblk_algo_ice_lg15 
     
    109110   LOGICAL  ::   ln_Cx_ice_cst             ! use constant air-ice bulk transfer coefficients (value given in namelist's rn_Cd_i, rn_Ce_i & rn_Ch_i) 
    110111   REAL(wp) ::   rn_Cd_i, rn_Ce_i, rn_Ch_i ! values for  "    " 
    111    LOGICAL  ::   ln_Cx_ice_LU12            ! air-ice bulk transfer coefficients based on Lupkes et al., 2012) 
    112    LOGICAL  ::   ln_Cx_ice_LG15            ! air-ice bulk transfer coefficients based on Lupkes & Gryanik, 2015) 
     112   LOGICAL  ::   ln_Cx_ice_AN05            ! air-ice bulk transfer coefficients based on Andreas et al., 2005 
     113   LOGICAL  ::   ln_Cx_ice_LU12            ! air-ice bulk transfer coefficients based on Lupkes et al., 2012 
     114   LOGICAL  ::   ln_Cx_ice_LG15            ! air-ice bulk transfer coefficients based on Lupkes & Gryanik, 2015 
    113115   !#LB. 
    114116   ! 
     
    159161   !                            ! associated indices: 
    160162   INTEGER, PARAMETER ::   np_ice_cst  = 1   ! constant transfer coefficients 
    161    INTEGER, PARAMETER ::   np_ice_lu12 = 2   ! Lupkes, 2012 
    162    INTEGER, PARAMETER ::   np_ice_lg15 = 3   ! Lupkes & Gryanik, 2015 
     163   INTEGER, PARAMETER ::   np_ice_an05 = 2   ! Andreas et al., 2005 
     164   INTEGER, PARAMETER ::   np_ice_lu12 = 3   ! Lupkes el al., 2012 
     165   INTEGER, PARAMETER ::   np_ice_lg15 = 4   ! Lupkes & Gryanik, 2015 
    163166#endif 
    164167   !LB. 
     
    222225         &                 ln_humi_sph, ln_humi_dpt, ln_humi_rlh, ln_tair_pot,        & 
    223226         &                 ln_Cx_ice_cst, rn_Cd_i, rn_Ce_i, rn_Ch_i,                  & 
    224          &                 ln_Cx_ice_LU12, ln_Cx_ice_LG15,                            & 
     227         &                 ln_Cx_ice_AN05, ln_Cx_ice_LU12, ln_Cx_ice_LG15,            & 
    225228         &                 cn_dir,                                                    & 
    226229         &                 sn_wndi, sn_wndj, sn_qsr, sn_qlw ,                         &   ! input fields 
     
    312315         nblk_ice =  np_ice_cst     ;   ioptio = ioptio + 1 
    313316      ENDIF 
     317      IF( ln_Cx_ice_AN05 ) THEN 
     318         nblk_ice =  np_ice_an05   ;   ioptio = ioptio + 1 
     319      ENDIF       
    314320      IF( ln_Cx_ice_LU12 ) THEN 
    315321         nblk_ice =  np_ice_lu12    ;   ioptio = ioptio + 1 
     
    456462            WRITE(numout,*) 
    457463            WRITE(numout,*) '      use constant ice-atm bulk transfer coeff.           ln_Cx_ice_cst  = ', ln_Cx_ice_cst 
    458             WRITE(numout,*) '      use ice-atm bulk coeff. from Lupkes, 2012           ln_Cx_ice_LU12 = ', ln_Cx_ice_LU12 
     464            WRITE(numout,*) '      use ice-atm bulk coeff. from Andreas et al., 2005   ln_Cx_ice_AN05 = ', ln_Cx_ice_AN05 
     465            WRITE(numout,*) '      use ice-atm bulk coeff. from Lupkes et al., 2012    ln_Cx_ice_LU12 = ', ln_Cx_ice_LU12 
    459466            WRITE(numout,*) '      use ice-atm bulk coeff. from Lupkes & Gryanik, 2015 ln_Cx_ice_LG15 = ', ln_Cx_ice_LG15 
    460467         ENDIF 
     
    466473            IF( (rn_Cd_i<0._wp).OR.(rn_Cd_i>1.E-2_wp).OR.(rn_Ce_i<0._wp).OR.(rn_Ce_i>1.E-2_wp).OR.(rn_Ch_i<0._wp).OR.(rn_Ch_i>1.E-2_wp) ) & 
    467474               & CALL ctl_stop( 'Be realistic in your pick of Cd_ice, Ce_ice & Ch_ice ! (0 < Cx < 1.E-2)') 
     475         CASE( np_ice_an05 )   ;   WRITE(numout,*) '   ==>>> bulk algo over ice: Andreas et al, 2005' 
    468476         CASE( np_ice_lu12 )   ;   WRITE(numout,*) '   ==>>> bulk algo over ice: Lupkes et al, 2012' 
    469477         CASE( np_ice_lg15 )   ;   WRITE(numout,*) '   ==>>> bulk algo over ice: Lupkes & Gryanik, 2015' 
     
    10241032         q_zu_i(:,:)     = pqair(:,:) 
    10251033 
     1034      CASE( np_ice_an05 )  ! calculate new drag from Lupkes(2015) equations 
     1035         ztmp(:,:) = q_sat( ptsui(:,:), pslp(:,:), l_ice=.TRUE. ) ! temporary array for SSQ 
     1036         CALL turb_ice_an05( rn_zqt, rn_zu, ptsui, ptair, ztmp, pqair, wndm_ice,       & 
     1037            &                      Cd_ice, Ch_ice, Ce_ice, theta_zu_i, q_zu_i ) 
     1038         !!          
    10261039      CASE( np_ice_lu12 ) 
    10271040         ztmp(:,:) = q_sat( ptsui(:,:), pslp(:,:), l_ice=.TRUE. ) ! temporary array for SSQ 
  • NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/src/OCE/SBC/sbcblk_algo_ice_an05.F90

    r13820 r13830  
    1919   !!---------------------------------------------------------------------- 
    2020   USE par_kind, ONLY: wp 
    21    USE par_oce,  ONLY: jpi, jpj 
     21   USE par_oce,  ONLY: jpi, jpj, Nis0, Nie0, Njs0, Nje0, nn_hls 
     22   USE lib_mpp,  ONLY: ctl_stop         ! distribued memory computing library 
    2223   USE phycst          ! physical constants 
    2324   USE sbc_phy         ! Catalog of functions for physical/meteorological parameters in the marine boundary layer 
    24    !USE sbcblk_algo_ice_cdn 
    2525 
    2626   IMPLICIT NONE 
     
    3131   INTEGER , PARAMETER ::   nbit = 8        ! number of itterations 
    3232 
     33   !! * Substitutions 
     34#  include "do_loop_substitute.h90" 
    3335   !!---------------------------------------------------------------------- 
    3436CONTAINS 
    3537 
    36    SUBROUTINE turb_ice_an05( zt, zu, Ts_i, t_zt, qs_i, q_zt, U_zu,         & 
    37       &                      Cd_i, Ch_i, Ce_i, t_zu_i, q_zu_i,             & 
     38   SUBROUTINE turb_ice_an05( zt, zu, Ts_i, t_zt, qs_i, q_zt, U_zu,        & 
     39      &                      Cd_i, Ch_i, Ce_i, t_zu_i, q_zu_i,            & 
    3840      &                      CdN, ChN, CeN, xz0, xu_star, xL, xUN10 ) 
    3941      !!---------------------------------------------------------------------- 
     
    100102      !!---------------------------------------------------------------------------------- 
    101103      REAL(wp), DIMENSION(:,:), ALLOCATABLE :: Ubzu 
     104      REAL(wp), DIMENSION(:,:), ALLOCATABLE :: ztmp0, ztmp1, ztmp2      ! temporary stuff 
     105      REAL(wp), DIMENSION(:,:), ALLOCATABLE :: z0, dt_zu, dq_zu 
    102106      REAL(wp), DIMENSION(:,:), ALLOCATABLE :: u_star, t_star, q_star 
    103       REAL(wp), DIMENSION(:,:), ALLOCATABLE :: dt_zu, dq_zu 
    104       REAL(wp), DIMENSION(:,:), ALLOCATABLE :: znu_a !: Nu_air = kinematic viscosity of air 
    105       REAL(wp), DIMENSION(:,:), ALLOCATABLE :: z0 
     107      REAL(wp), DIMENSION(:,:), ALLOCATABLE :: znu_a                    !: Nu_air = kinematic viscosity of air 
     108      REAL(wp), DIMENSION(:,:), ALLOCATABLE :: zeta_u, zeta_t           ! stability parameter at height zu 
    106109      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: z0tq 
    107       REAL(wp), DIMENSION(:,:), ALLOCATABLE :: zeta_u        ! stability parameter at height zu 
    108       REAL(wp), DIMENSION(:,:), ALLOCATABLE :: zeta_t        ! stability parameter at height zt 
    109       REAL(wp), DIMENSION(:,:), ALLOCATABLE :: ztmp0, ztmp1, ztmp2 
    110110      !! 
    111111      INTEGER :: jit 
     
    117117      CHARACTER(len=40), PARAMETER :: crtnm = 'turb_ice_an05@sbcblk_algo_ice_an05.f90' 
    118118      !!---------------------------------------------------------------------------------- 
    119       ALLOCATE ( Ubzu(jpi,jpj), u_star(jpi,jpj), t_star(jpi,jpj),  q_star(jpi,jpj),  & 
    120          &       zeta_u(jpi,jpj),  dt_zu(jpi,jpj),   dq_zu(jpi,jpj),  & 
    121          &        znu_a(jpi,jpj),  ztmp1(jpi,jpj),   ztmp2(jpi,jpj),  & 
    122          &           z0(jpi,jpj),   z0tq(jpi,jpj,2), ztmp0(jpi,jpj)   ) 
    123  
    124       IF( PRESENT(CdN) )     lreturn_cdn   = .TRUE. 
    125       IF( PRESENT(ChN) )     lreturn_chn   = .TRUE. 
    126       IF( PRESENT(CeN) )     lreturn_cen   = .TRUE. 
    127       IF( PRESENT(xz0) )     lreturn_z0    = .TRUE. 
    128       IF( PRESENT(xu_star) ) lreturn_ustar = .TRUE. 
    129       IF( PRESENT(xL) )      lreturn_L     = .TRUE. 
    130       IF( PRESENT(xUN10) )   lreturn_UN10  = .TRUE. 
     119      ALLOCATE (  Ubzu(jpi,jpj), u_star(jpi,jpj), t_star(jpi,jpj),  q_star(jpi,jpj),  & 
     120         &      zeta_u(jpi,jpj),  dt_zu(jpi,jpj),   dq_zu(jpi,jpj),  & 
     121         &       znu_a(jpi,jpj),  ztmp1(jpi,jpj),   ztmp2(jpi,jpj),  & 
     122         &          z0(jpi,jpj),   z0tq(jpi,jpj,2), ztmp0(jpi,jpj)   ) 
     123 
     124      lreturn_cdn   = PRESENT(CdN) 
     125      lreturn_chn   = PRESENT(ChN) 
     126      lreturn_cen   = PRESENT(CeN) 
     127      lreturn_z0    = PRESENT(xz0) 
     128      lreturn_ustar = PRESENT(xu_star) 
     129      lreturn_L     = PRESENT(xL) 
     130      lreturn_UN10  = PRESENT(xUN10) 
    131131 
    132132      l_zt_equal_zu = ( ABS(zu - zt) < 0.01_wp ) 
    133133      IF( .NOT. l_zt_equal_zu )  ALLOCATE( zeta_t(jpi,jpj) ) 
    134  
    135134 
    136135      !! Scalar wind speed cannot be below 0.2 m/s 
     
    162161      t_star = dt_zu*vkarmn/(LOG(zu/z0tq(:,:,1))) 
    163162      q_star = dq_zu*vkarmn/(LOG(zu/z0tq(:,:,2))) 
    164  
    165  
    166  
     163       
     164       
    167165      !! ITERATION BLOCK 
    168166      DO jit = 1, nbit 
     
    217215      IF( lreturn_UN10 )  xUN10   = u_star/vkarmn*LOG(10./z0) 
    218216 
    219       DEALLOCATE ( u_star, t_star, q_star, zeta_u, dt_zu, dq_zu, z0, z0tq, znu_a, ztmp0, ztmp1, ztmp2 ) 
     217      DEALLOCATE ( Ubzu, u_star, t_star, q_star, zeta_u, dt_zu, dq_zu, z0, z0tq, znu_a, ztmp0, ztmp1, ztmp2 ) 
    220218      IF( .NOT. l_zt_equal_zu ) DEALLOCATE( zeta_t ) 
    221219 
     
    243241 
    244242            rough_leng_m(ji,jj) = 0.135*pnua(ji,jj)/zus + 0.035*zus*zus/grav*( 5.*EXP(-zz*zz) + 1._wp ) ! Eq.(19) Andreas et al., 2005 
    245  
    246243      END_2D 
    247244      !! 
  • NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/src/OCE/SBC/sbcblk_algo_ice_cdn.F90

    r13719 r13830  
    1313   !!==================================================================================== 
    1414   USE par_kind, ONLY: wp 
    15    USE par_oce, ONLY: jpi, jpj, Nis0, Nie0, Njs0, Nje0, nn_hls 
     15   USE par_oce,  ONLY: jpi, jpj, Nis0, Nie0, Njs0, Nje0, nn_hls 
    1616   USE phycst          ! physical constants 
    1717   USE sbc_phy         ! Catalog of functions for physical/meteorological parameters in the marine boundary layer 
  • NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/src/OCE/SBC/sbcblk_algo_ice_lg15.F90

    r13719 r13830  
    116116      !!---------------------------------------------------------------------------------- 
    117117      REAL(wp), DIMENSION(:,:), ALLOCATABLE :: Ubzu 
    118       REAL(wp), DIMENSION(:,:), ALLOCATABLE :: xtmp1, xtmp2      ! temporary stuff 
     118      REAL(wp), DIMENSION(:,:), ALLOCATABLE :: ztmp1, ztmp2      ! temporary stuff 
    119119      REAL(wp), DIMENSION(:,:), ALLOCATABLE :: dt_zu, dq_zu 
    120120      REAL(wp), DIMENSION(:,:), ALLOCATABLE :: zz0_s, zz0_f, RiB ! third dimensions (size=2): 
     
    130130      !!---------------------------------------------------------------------------------- 
    131131      ALLOCATE ( Ubzu(jpi,jpj) ) 
    132       ALLOCATE ( xtmp1(jpi,jpj),  xtmp2(jpi,jpj) ) 
     132      ALLOCATE ( ztmp1(jpi,jpj),  ztmp2(jpi,jpj) ) 
    133133      ALLOCATE ( dt_zu(jpi,jpj),  dq_zu(jpi,jpj) ) 
    134134      ALLOCATE ( zz0_s(jpi,jpj),  zz0_f(jpi,jpj),    RiB(jpi,jpj), & 
     
    197197         IF( .NOT. l_zt_equal_zu ) THEN 
    198198            ! U_zt = U_zu + u_star/vkarmn*(LOG(zt/zu) + psi_m_coare(zu/L) - psi_m_coare(zt/L)) 
    199             xtmp1(:,:) = zCdN_s(:,:) + zCdN_f(:,:)    ! total neutral drag coeff! 
    200             xtmp2(:,:) = zz0_s(:,:) + zz0_f(:,:)      ! total roughness length z0 
    201             xtmp1 = LOG(zt/zu) + f_h_louis( zu, RiB(:,:), xtmp1(:,:), xtmp2(:,:) ) & 
    202                &               - f_h_louis( zt, RiB(:,:), xtmp1(:,:), xtmp2(:,:) ) 
    203             xtmp2(:,:) = MAX( Ubzu(:,:) + (SQRT(Cd_i(:,:))*Ubzu)*xtmp1 , wspd_thrshld_ice ) ! wind at zt ( SQRT(Cd_i(:,:))*Ubzu == u* !) 
    204             xtmp2(:,:) = MIN( xtmp2(:,:) , Ubzu(:,:) ) 
    205             IF(l_dbg_print) PRINT *, 'LOLO: ADJUSTED WIND AT ZT =', xtmp2 
     199            ztmp1(:,:) = zCdN_s(:,:) + zCdN_f(:,:)    ! total neutral drag coeff! 
     200            ztmp2(:,:) = zz0_s(:,:) + zz0_f(:,:)      ! total roughness length z0 
     201            ztmp1 = LOG(zt/zu) + f_h_louis( zu, RiB(:,:), ztmp1(:,:), ztmp2(:,:) ) & 
     202               &               - f_h_louis( zt, RiB(:,:), ztmp1(:,:), ztmp2(:,:) ) 
     203            ztmp2(:,:) = MAX( Ubzu(:,:) + (SQRT(Cd_i(:,:))*Ubzu)*ztmp1 , wspd_thrshld_ice ) ! wind at zt ( SQRT(Cd_i(:,:))*Ubzu == u* !) 
     204            ztmp2(:,:) = MIN( ztmp2(:,:) , Ubzu(:,:) ) 
     205            IF(l_dbg_print) PRINT *, 'LOLO: ADJUSTED WIND AT ZT =', ztmp2 
    206206         ELSE 
    207             xtmp2(:,:) = Ubzu(:,:) 
     207            ztmp2(:,:) = Ubzu(:,:) 
    208208         END IF 
    209          RiB(:,:) = Ri_bulk( zt, Ts_i(:,:), t_zt(:,:), qs_i(:,:), q_zt(:,:), xtmp2(:,:) )  ! over ice (index=1) 
     209         RiB(:,:) = Ri_bulk( zt, Ts_i(:,:), t_zt(:,:), qs_i(:,:), q_zt(:,:), ztmp2(:,:) )  ! over ice (index=1) 
    210210         IF(l_dbg_print) PRINT *, 'LOLO: RiB_zt =', RiB(:,:) 
    211211 
     
    213213         ! Momentum and Heat transfer coefficients WITHOUT FORM DRAG / (Eq.6) and (Eq.10): 
    214214         Cd_i(:,:) = zCdN_s(:,:) * f_m_louis( zu, RiB(:,:), zCdN_s(:,:), zz0_s(:,:) ) ! (Eq.6) 
    215          Ch_i(:,:) = zChN_s(:,:) * f_h_louis( zu, RiB(:,:), zCdN_s(:,:), zz0_s(:,:) ) ! (Eq.10) / LOLO: why "zCdN_s" (xtmp1) and not "zChn" ??? 
     215         Ch_i(:,:) = zChN_s(:,:) * f_h_louis( zu, RiB(:,:), zCdN_s(:,:), zz0_s(:,:) ) ! (Eq.10) / LOLO: why "zCdN_s" (ztmp1) and not "zChn" ??? 
    216216         IF(l_dbg_print) PRINT *, 'LOLO: f_m_louis_s =', f_m_louis( zu, RiB(:,:), zCdN_s(:,:), zz0_s(:,:) ) 
    217217         IF(l_dbg_print) PRINT *, 'LOLO: f_h_louis_s =', f_h_louis( zu, RiB(:,:), zCdN_s(:,:), zz0_s(:,:) ) 
     
    238238 
    239239            !! Over ice: 
    240             xtmp1(:,:) = zCdN_s(:,:) + zCdN_f(:,:)    ! total neutral drag coeff! 
    241             xtmp2(:,:) = zz0_s(:,:) + zz0_f(:,:)      ! total roughness length z0 
    242             xtmp1 = LOG(zt/zu) + f_h_louis( zu, RiB(:,:), xtmp1(:,:), xtmp2(:,:) ) & 
    243                &               - f_h_louis( zt, RiB(:,:), xtmp1(:,:), xtmp2(:,:) ) 
    244             xtmp2 = 1._wp/SQRT(Cd_i(:,:)) 
    245  
    246             t_zu_i(:,:) = t_zt - (Ch_i(:,:) * dt_zu(:,:) * xtmp2) / vkarmn * xtmp1   ! t_star = Ch * dt_zu / SQRT(Cd) 
    247             q_zu_i(:,:) = q_zt - (Ch_i(:,:) * dq_zu(:,:) * xtmp2) / vkarmn * xtmp1   ! q_star = Ce * dq_zu / SQRT(Cd) 
     240            ztmp1(:,:) = zCdN_s(:,:) + zCdN_f(:,:)    ! total neutral drag coeff! 
     241            ztmp2(:,:) = zz0_s(:,:) + zz0_f(:,:)      ! total roughness length z0 
     242            ztmp1 = LOG(zt/zu) + f_h_louis( zu, RiB(:,:), ztmp1(:,:), ztmp2(:,:) ) & 
     243               &               - f_h_louis( zt, RiB(:,:), ztmp1(:,:), ztmp2(:,:) ) 
     244            ztmp2 = 1._wp/SQRT(Cd_i(:,:)) 
     245 
     246            t_zu_i(:,:) = t_zt - (Ch_i(:,:) * dt_zu(:,:) * ztmp2) / vkarmn * ztmp1   ! t_star = Ch * dt_zu / SQRT(Cd) 
     247            q_zu_i(:,:) = q_zt - (Ch_i(:,:) * dq_zu(:,:) * ztmp2) / vkarmn * ztmp1   ! q_star = Ce * dq_zu / SQRT(Cd) 
    248248            q_zu_i(:,:) = MAX(0._wp, q_zu_i(:,:)) 
    249249 
     
    270270 
    271271      IF( lreturn_L ) THEN 
    272          xtmp1 = SQRT(Cd_i) 
    273          xL    = 1./One_on_L( t_zu_i, q_zu_i, xtmp1*Ubzu, Ch_i*dt_zu(:,:)/xtmp1, Ce_i*dq_zu(:,:)/xtmp1 ) 
     272         ztmp1 = SQRT(Cd_i) 
     273         xL    = 1./One_on_L( t_zu_i, q_zu_i, ztmp1*Ubzu, Ch_i*dt_zu(:,:)/ztmp1, Ce_i*dq_zu(:,:)/ztmp1 ) 
    274274      END IF 
    275275 
    276276      IF( lreturn_UN10 ) THEN 
    277          xtmp1 = zCdN_s(:,:) + zCdN_f(:,:)  ! => CdN 
    278          xUN10 = SQRT(Cd_i) * Ubzu/vkarmn * LOG( 10._wp / z0_from_Cd(zu, xtmp1) ) 
     277         ztmp1 = zCdN_s(:,:) + zCdN_f(:,:)  ! => CdN 
     278         xUN10 = SQRT(Cd_i) * Ubzu/vkarmn * LOG( 10._wp / z0_from_Cd(zu, ztmp1) ) 
    279279      END IF 
    280280 
    281281      DEALLOCATE ( Ubzu ) 
    282       DEALLOCATE ( xtmp1, xtmp2 ) 
     282      DEALLOCATE ( ztmp1, ztmp2 ) 
    283283      DEALLOCATE ( dt_zu, dq_zu ) 
    284284      DEALLOCATE ( zz0_s, zz0_f, RiB, zCdN_s, zChN_s, zCdN_f, zChN_f ) 
  • NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/src/OCE/SBC/sbcblk_algo_ice_lu12.F90

    r13719 r13830  
    102102      REAL(wp), INTENT(out), DIMENSION(jpi,jpj), OPTIONAL :: xUN10  ! Neutral wind at zu 
    103103      !!---------------------------------------------------------------------------------- 
    104       REAL(wp), DIMENSION(:,:), ALLOCATABLE :: dt_zu, dq_zu, z0_i 
     104      REAL(wp), DIMENSION(:,:), ALLOCATABLE :: dt_zu, dq_zu, z0 
    105105      REAL(wp), DIMENSION(:,:), ALLOCATABLE :: Ubzu 
    106106      !! 
     
    111111      !!---------------------------------------------------------------------------------- 
    112112      ALLOCATE ( Ubzu(jpi,jpj) ) 
    113       ALLOCATE ( dt_zu(jpi,jpj), dq_zu(jpi,jpj), z0_i(jpi,jpj) ) 
     113      ALLOCATE ( dt_zu(jpi,jpj), dq_zu(jpi,jpj), z0(jpi,jpj) ) 
    114114 
    115115      lreturn_cdn   = PRESENT(CdN) 
     
    158158      !! Method #4: 
    159159      !! using eq.21 of LG15 instead: 
    160       z0_i(:,:) = rz0_i_f_0 
    161       !Cd_i(:,:)   = Cd_from_z0( zu, Ce_i(:,:) )  + CdN_f_LG15( zu, frice(:,:), z0_i(:,:) ) / frice(:,:) 
    162       Cd_i(:,:)   = Cd_from_z0( zu, Ce_i(:,:) )  + CdN_f_LG15( zu, frice(:,:), z0_i(:,:) ) !/ frice(:,:) 
    163       !IF( lreturn_cdfrm ) CdN_frm = CdN_f_LG15( zu, frice(:,:), z0_i(:,:) ) 
     160      z0(:,:) = rz0_i_f_0 
     161      !Cd_i(:,:)   = Cd_from_z0( zu, Ce_i(:,:) )  + CdN_f_LG15( zu, frice(:,:), z0(:,:) ) / frice(:,:) 
     162      Cd_i(:,:)   = Cd_from_z0( zu, Ce_i(:,:) )  + CdN_f_LG15( zu, frice(:,:), z0(:,:) ) !/ frice(:,:) 
     163      !IF( lreturn_cdfrm ) CdN_frm = CdN_f_LG15( zu, frice(:,:), z0(:,:) ) 
    164164 
    165165 
     
    177177      IF( lreturn_UN10 )  xUN10   = SQRT(Cd_i)*Ubzu/vkarmn * LOG( 10._wp / z0_from_Cd( zu, Cd_i ) ) 
    178178 
    179       DEALLOCATE ( dt_zu, dq_zu, z0_i ) 
     179      DEALLOCATE ( dt_zu, dq_zu, z0 ) 
    180180      DEALLOCATE ( Ubzu ) 
    181181 
  • NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/tests/STATION_ASF/EXPREF/ERA5_arctic/oce+ice/namelist_ecmwf-cstc_cfg

    r13806 r13830  
    123123   ln_tair_pot = .false. !  air temperature read in "sn_tair" is already POTENTIAL TEMPERATURE, NOT ABSOLUTE (ECMWF => ln_tair_pot=.false.) 
    124124   !!    
    125    ! Sea-ice specific: (IF: nn_ice >=1 ) 
    126    ln_Cx_ice_cst = .true.   ! use constant ice-air bulk transfer coefficients (value given below) 
    127       rn_Cd_i  = 1.4e-3     ! sea-ice drag coefficient 
    128       rn_Ce_i  = 1.4e-3     !    "    sublimation coefficient 
    129       rn_Ch_i  = 1.4e-3     !    "    sensible heat flux coefficient       
    130    ln_Cx_ice_LU12  = .false.  !  air-ice drag = F(ice conc.) (Lupkes et al. 2012) 
    131    ln_Cx_ice_LG15  = .false.  !  air-ice drag = F(ice conc.) (Lupkes & Gryanik 2015) 
    132    !! 
     125   !! Bulk transfer coefficients over sea-ice: (relevant IF: nn_ice >=1 ) 
     126   ln_Cx_ice_cst = .true.     ! use constant ice-air bulk transfer coefficients (value given below) 
     127      rn_Cd_i  = 1.4e-3       ! sea-ice drag coefficient 
     128      rn_Ce_i  = 1.4e-3       !    "    sublimation coefficient 
     129      rn_Ch_i  = 1.4e-3       !    "    sensible heat flux coefficient 
     130   ln_Cx_ice_AN05  = .false.  !  (Andreas et al. 2005) 
     131   ln_Cx_ice_LU12  = .false.  !  (Lupkes et al. 2012) 
     132   ln_Cx_ice_LG15  = .false.  !  (Lupkes & Gryanik 2015) 
    133133   ! 
    134134   cn_dir      = './'      !  root directory for the bulk data location 
  • NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/tests/STATION_ASF/EXPREF/ERA5_arctic/oce+ice/namelist_ecmwf-lg15_cfg

    r13806 r13830  
    123123   ln_tair_pot = .false. !  air temperature read in "sn_tair" is already POTENTIAL TEMPERATURE, NOT ABSOLUTE (ECMWF => ln_tair_pot=.false.) 
    124124   !!    
    125    ! Sea-ice specific: (IF: nn_ice >=1 ) 
    126    ln_Cx_ice_cst = .false.  ! use constant ice-air bulk transfer coefficients (value given below) 
    127       rn_Cd_i  = 1.4e-3     ! sea-ice drag coefficient 
    128       rn_Ce_i  = 1.4e-3     !    "    sublimation coefficient 
    129       rn_Ch_i  = 1.4e-3     !    "    sensible heat flux coefficient       
    130    ln_Cx_ice_LU12  = .false.  !  air-ice drag = F(ice conc.) (Lupkes et al. 2012) 
    131    ln_Cx_ice_LG15  = .true.   !  air-ice drag = F(ice conc.) (Lupkes & Gryanik 2015) 
    132    !! 
     125   !! Bulk transfer coefficients over sea-ice: (relevant IF: nn_ice >=1 ) 
     126   ln_Cx_ice_cst = .false.    ! use constant ice-air bulk transfer coefficients (value given below) 
     127      rn_Cd_i  = 1.4e-3       ! sea-ice drag coefficient 
     128      rn_Ce_i  = 1.4e-3       !    "    sublimation coefficient 
     129      rn_Ch_i  = 1.4e-3       !    "    sensible heat flux coefficient 
     130   ln_Cx_ice_AN05  = .false.  !  (Andreas et al. 2005) 
     131   ln_Cx_ice_LU12  = .false.  !  (Lupkes et al. 2012) 
     132   ln_Cx_ice_LG15  = .true.   !  (Lupkes & Gryanik 2015) 
    133133   ! 
    134134   cn_dir      = './'      !  root directory for the bulk data location 
  • NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/tests/STATION_ASF/EXPREF/ERA5_arctic/oce+ice/namelist_ecmwf-lu12_cfg

    r13806 r13830  
    123123   ln_tair_pot = .false. !  air temperature read in "sn_tair" is already POTENTIAL TEMPERATURE, NOT ABSOLUTE (ECMWF => ln_tair_pot=.false.) 
    124124   !!    
    125    ! Sea-ice specific: (IF: nn_ice >=1 ) 
    126    ln_Cx_ice_cst = .false.  ! use constant ice-air bulk transfer coefficients (value given below) 
    127       rn_Cd_i  = 1.4e-3     ! sea-ice drag coefficient 
    128       rn_Ce_i  = 1.4e-3     !    "    sublimation coefficient 
    129       rn_Ch_i  = 1.4e-3     !    "    sensible heat flux coefficient       
    130    ln_Cx_ice_LU12  = .true. !  air-ice drag = F(ice conc.) (Lupkes et al. 2012) 
    131    ln_Cx_ice_LG15  = .false.!  air-ice drag = F(ice conc.) (Lupkes & Gryanik 2015) 
    132    !! 
     125   !! Bulk transfer coefficients over sea-ice: (relevant IF: nn_ice >=1 ) 
     126   ln_Cx_ice_cst = .false.    ! use constant ice-air bulk transfer coefficients (value given below) 
     127      rn_Cd_i  = 1.4e-3       ! sea-ice drag coefficient 
     128      rn_Ce_i  = 1.4e-3       !    "    sublimation coefficient 
     129      rn_Ch_i  = 1.4e-3       !    "    sensible heat flux coefficient 
     130   ln_Cx_ice_AN05  = .false.  !  (Andreas et al. 2005) 
     131   ln_Cx_ice_LU12  = .true.   !  (Lupkes et al. 2012) 
     132   ln_Cx_ice_LG15  = .false.  !  (Lupkes & Gryanik 2015) 
    133133   ! 
    134134   cn_dir      = './'      !  root directory for the bulk data location 
  • NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/tests/STATION_ASF/EXPREF/launch_sasf.sh

    r13806 r13830  
    8080    #   - simpler if we only use one Open-ocean/air algo (ECMWF) 
    8181    LIST_OA_ALGOS="ECMWF" ;          # list of air-sea algorithms to test 
    82     LIST_IA_ALGOS="LG15 LU12 CSTC" ; # list of air-ice algorithms to test 
     82    LIST_IA_ALGOS="AN05 LG15 LU12 CSTC" ; # list of air-ice algorithms to test 
    8383    DIR_NL=${FORCING}/oce+ice ; # where to fetch the namelists from... 
    8484else 
Note: See TracChangeset for help on using the changeset viewer.