Changeset 13830
- Timestamp:
- 2020-11-19T13:31:18+01:00 (4 years ago)
- 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 282 282 ln_tair_pot = .false. ! air temperature read in "sn_tair" is already POTENTIAL TEMPERATURE, NOT ABSOLUTE (ECMWF => ln_tair_pot=.false.) 283 283 !! 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) 291 292 ! 292 293 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 45 45 USE ice , ONLY : u_ice, v_ice, jpl, a_i_b, at_i_b, t_su, rn_cnd_s, hfx_err_dif, nn_qtrice 46 46 USE icevar ! for CALL ice_var_snwblow 47 USE sbcblk_algo_ice_an05 47 48 USE sbcblk_algo_ice_lu12 48 49 USE sbcblk_algo_ice_lg15 … … 109 110 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) 110 111 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 113 115 !#LB. 114 116 ! … … 159 161 ! ! associated indices: 160 162 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 163 166 #endif 164 167 !LB. … … 222 225 & ln_humi_sph, ln_humi_dpt, ln_humi_rlh, ln_tair_pot, & 223 226 & 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, & 225 228 & cn_dir, & 226 229 & sn_wndi, sn_wndj, sn_qsr, sn_qlw , & ! input fields … … 312 315 nblk_ice = np_ice_cst ; ioptio = ioptio + 1 313 316 ENDIF 317 IF( ln_Cx_ice_AN05 ) THEN 318 nblk_ice = np_ice_an05 ; ioptio = ioptio + 1 319 ENDIF 314 320 IF( ln_Cx_ice_LU12 ) THEN 315 321 nblk_ice = np_ice_lu12 ; ioptio = ioptio + 1 … … 456 462 WRITE(numout,*) 457 463 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 459 466 WRITE(numout,*) ' use ice-atm bulk coeff. from Lupkes & Gryanik, 2015 ln_Cx_ice_LG15 = ', ln_Cx_ice_LG15 460 467 ENDIF … … 466 473 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) ) & 467 474 & 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' 468 476 CASE( np_ice_lu12 ) ; WRITE(numout,*) ' ==>>> bulk algo over ice: Lupkes et al, 2012' 469 477 CASE( np_ice_lg15 ) ; WRITE(numout,*) ' ==>>> bulk algo over ice: Lupkes & Gryanik, 2015' … … 1024 1032 q_zu_i(:,:) = pqair(:,:) 1025 1033 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 !! 1026 1039 CASE( np_ice_lu12 ) 1027 1040 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 19 19 !!---------------------------------------------------------------------- 20 20 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 22 23 USE phycst ! physical constants 23 24 USE sbc_phy ! Catalog of functions for physical/meteorological parameters in the marine boundary layer 24 !USE sbcblk_algo_ice_cdn25 25 26 26 IMPLICIT NONE … … 31 31 INTEGER , PARAMETER :: nbit = 8 ! number of itterations 32 32 33 !! * Substitutions 34 # include "do_loop_substitute.h90" 33 35 !!---------------------------------------------------------------------- 34 36 CONTAINS 35 37 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, & 38 40 & CdN, ChN, CeN, xz0, xu_star, xL, xUN10 ) 39 41 !!---------------------------------------------------------------------- … … 100 102 !!---------------------------------------------------------------------------------- 101 103 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 102 106 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 106 109 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: z0tq 107 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: zeta_u ! stability parameter at height zu108 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: zeta_t ! stability parameter at height zt109 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: ztmp0, ztmp1, ztmp2110 110 !! 111 111 INTEGER :: jit … … 117 117 CHARACTER(len=40), PARAMETER :: crtnm = 'turb_ice_an05@sbcblk_algo_ice_an05.f90' 118 118 !!---------------------------------------------------------------------------------- 119 ALLOCATE ( Ubzu(jpi,jpj), u_star(jpi,jpj),t_star(jpi,jpj), q_star(jpi,jpj), &120 & 121 & 122 & 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) 131 131 132 132 l_zt_equal_zu = ( ABS(zu - zt) < 0.01_wp ) 133 133 IF( .NOT. l_zt_equal_zu ) ALLOCATE( zeta_t(jpi,jpj) ) 134 135 134 136 135 !! Scalar wind speed cannot be below 0.2 m/s … … 162 161 t_star = dt_zu*vkarmn/(LOG(zu/z0tq(:,:,1))) 163 162 q_star = dq_zu*vkarmn/(LOG(zu/z0tq(:,:,2))) 164 165 166 163 164 167 165 !! ITERATION BLOCK 168 166 DO jit = 1, nbit … … 217 215 IF( lreturn_UN10 ) xUN10 = u_star/vkarmn*LOG(10./z0) 218 216 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 ) 220 218 IF( .NOT. l_zt_equal_zu ) DEALLOCATE( zeta_t ) 221 219 … … 243 241 244 242 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 246 243 END_2D 247 244 !! -
NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/src/OCE/SBC/sbcblk_algo_ice_cdn.F90
r13719 r13830 13 13 !!==================================================================================== 14 14 USE par_kind, ONLY: wp 15 USE par_oce, ONLY: jpi, jpj, Nis0, Nie0, Njs0, Nje0, nn_hls15 USE par_oce, ONLY: jpi, jpj, Nis0, Nie0, Njs0, Nje0, nn_hls 16 16 USE phycst ! physical constants 17 17 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 116 116 !!---------------------------------------------------------------------------------- 117 117 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: Ubzu 118 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: xtmp1, xtmp2 ! temporary stuff118 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: ztmp1, ztmp2 ! temporary stuff 119 119 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: dt_zu, dq_zu 120 120 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: zz0_s, zz0_f, RiB ! third dimensions (size=2): … … 130 130 !!---------------------------------------------------------------------------------- 131 131 ALLOCATE ( Ubzu(jpi,jpj) ) 132 ALLOCATE ( xtmp1(jpi,jpj), xtmp2(jpi,jpj) )132 ALLOCATE ( ztmp1(jpi,jpj), ztmp2(jpi,jpj) ) 133 133 ALLOCATE ( dt_zu(jpi,jpj), dq_zu(jpi,jpj) ) 134 134 ALLOCATE ( zz0_s(jpi,jpj), zz0_f(jpi,jpj), RiB(jpi,jpj), & … … 197 197 IF( .NOT. l_zt_equal_zu ) THEN 198 198 ! 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 z0201 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 =', xtmp2199 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 206 206 ELSE 207 xtmp2(:,:) = Ubzu(:,:)207 ztmp2(:,:) = Ubzu(:,:) 208 208 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) 210 210 IF(l_dbg_print) PRINT *, 'LOLO: RiB_zt =', RiB(:,:) 211 211 … … 213 213 ! Momentum and Heat transfer coefficients WITHOUT FORM DRAG / (Eq.6) and (Eq.10): 214 214 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" ??? 216 216 IF(l_dbg_print) PRINT *, 'LOLO: f_m_louis_s =', f_m_louis( zu, RiB(:,:), zCdN_s(:,:), zz0_s(:,:) ) 217 217 IF(l_dbg_print) PRINT *, 'LOLO: f_h_louis_s =', f_h_louis( zu, RiB(:,:), zCdN_s(:,:), zz0_s(:,:) ) … … 238 238 239 239 !! Over ice: 240 xtmp1(:,:) = zCdN_s(:,:) + zCdN_f(:,:) ! total neutral drag coeff!241 xtmp2(:,:) = zz0_s(:,:) + zz0_f(:,:) ! total roughness length z0242 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) 248 248 q_zu_i(:,:) = MAX(0._wp, q_zu_i(:,:)) 249 249 … … 270 270 271 271 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 ) 274 274 END IF 275 275 276 276 IF( lreturn_UN10 ) THEN 277 xtmp1 = zCdN_s(:,:) + zCdN_f(:,:) ! => CdN278 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) ) 279 279 END IF 280 280 281 281 DEALLOCATE ( Ubzu ) 282 DEALLOCATE ( xtmp1, xtmp2 )282 DEALLOCATE ( ztmp1, ztmp2 ) 283 283 DEALLOCATE ( dt_zu, dq_zu ) 284 284 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 102 102 REAL(wp), INTENT(out), DIMENSION(jpi,jpj), OPTIONAL :: xUN10 ! Neutral wind at zu 103 103 !!---------------------------------------------------------------------------------- 104 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: dt_zu, dq_zu, z0 _i104 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: dt_zu, dq_zu, z0 105 105 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: Ubzu 106 106 !! … … 111 111 !!---------------------------------------------------------------------------------- 112 112 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) ) 114 114 115 115 lreturn_cdn = PRESENT(CdN) … … 158 158 !! Method #4: 159 159 !! using eq.21 of LG15 instead: 160 z0 _i(:,:) = rz0_i_f_0161 !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(:,:) ) 164 164 165 165 … … 177 177 IF( lreturn_UN10 ) xUN10 = SQRT(Cd_i)*Ubzu/vkarmn * LOG( 10._wp / z0_from_Cd( zu, Cd_i ) ) 178 178 179 DEALLOCATE ( dt_zu, dq_zu, z0 _i)179 DEALLOCATE ( dt_zu, dq_zu, z0 ) 180 180 DEALLOCATE ( Ubzu ) 181 181 -
NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/tests/STATION_ASF/EXPREF/ERA5_arctic/oce+ice/namelist_ecmwf-cstc_cfg
r13806 r13830 123 123 ln_tair_pot = .false. ! air temperature read in "sn_tair" is already POTENTIAL TEMPERATURE, NOT ABSOLUTE (ECMWF => ln_tair_pot=.false.) 124 124 !! 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 coefficient128 rn_Ce_i = 1.4e-3 ! " sublimation coefficient129 rn_Ch_i = 1.4e-3 ! " sensible heat flux coefficient130 ln_Cx_ice_ LU12 = .false. ! air-ice drag = F(ice conc.) (Lupkes et al. 2012)131 ln_Cx_ice_L G15 = .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) 133 133 ! 134 134 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 123 123 ln_tair_pot = .false. ! air temperature read in "sn_tair" is already POTENTIAL TEMPERATURE, NOT ABSOLUTE (ECMWF => ln_tair_pot=.false.) 124 124 !! 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 coefficient128 rn_Ce_i = 1.4e-3 ! " sublimation coefficient129 rn_Ch_i = 1.4e-3 ! " sensible heat flux coefficient130 ln_Cx_ice_ LU12 = .false. ! air-ice drag = F(ice conc.) (Lupkes et al. 2012)131 ln_Cx_ice_L G15 = .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) 133 133 ! 134 134 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 123 123 ln_tair_pot = .false. ! air temperature read in "sn_tair" is already POTENTIAL TEMPERATURE, NOT ABSOLUTE (ECMWF => ln_tair_pot=.false.) 124 124 !! 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 coefficient128 rn_Ce_i = 1.4e-3 ! " sublimation coefficient129 rn_Ch_i = 1.4e-3 ! " sensible heat flux coefficient130 ln_Cx_ice_ LU12 = .true. ! air-ice drag = F(ice conc.) (Lupkes et al. 2012)131 ln_Cx_ice_L G15 = .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) 133 133 ! 134 134 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 80 80 # - simpler if we only use one Open-ocean/air algo (ECMWF) 81 81 LIST_OA_ALGOS="ECMWF" ; # list of air-sea algorithms to test 82 LIST_IA_ALGOS=" LG15 LU12 CSTC" ; # list of air-ice algorithms to test82 LIST_IA_ALGOS="AN05 LG15 LU12 CSTC" ; # list of air-ice algorithms to test 83 83 DIR_NL=${FORCING}/oce+ice ; # where to fetch the namelists from... 84 84 else
Note: See TracChangeset
for help on using the changeset viewer.