Changeset 15079
- Timestamp:
- 2021-07-05T12:59:50+02:00 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/trunk/src/OCE/SBC/sbcblk_algo_ice_cdn.F90
r14072 r15079 35 35 !!============================================================ 36 36 REAL(wp), PARAMETER :: rce10_i_0 = 3.46e-3_wp ! (Eq.48) MIZ 37 38 37 REAL(wp), PARAMETER :: ralpha_0 = 0.2_wp ! (Eq.12) (ECHAM6 value) 39 38 … … 61 60 !! 62 61 !!---------------------------------------------------------------------- 63 REAL(wp), DIMENSION(jpi,jpj) :: CdN10_f_LU12 ! neutral FORM drag coefficient contribution over sea-ice64 REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: pfrice ! ice concentration [fraction] => at_i_b ! NOT USED if pSc, phf and pDi all provided...65 REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: pz0w ! roughness length over water [m]66 REAL(wp), DIMENSION(jpi,jpj), INTENT(in), OPTIONAL :: pSc ! shletering function [0-1] (Sc->1 for large distance between floes, ->0 for small distances)67 REAL(wp), DIMENSION(jpi,jpj), INTENT(in), OPTIONAL :: phf ! mean freeboard of floes [m]68 REAL(wp), DIMENSION(jpi,jpj), INTENT(in), OPTIONAL :: pDi ! cross wind dimension of the floe (aka effective edge length for form drag) [m]69 !!---------------------------------------------------------------------- 70 LOGICAL ::l_known_Sc=.FALSE., l_known_hf=.FALSE., l_known_Di=.FALSE.71 REAL(wp) :: ztmp, zrlog, zfri, zfrw, zSc, zhf, zDi72 INTEGER :: ji, jj62 REAL(wp), DIMENSION(jpi,jpj) :: CdN10_f_LU12 ! neutral FORM drag coefficient contribution over sea-ice 63 REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: pfrice ! ice concentration [fraction] => at_i_b ! NOT USED if pSc, phf and pDi all provided... 64 REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: pz0w ! roughness length over water [m] 65 REAL(wp), DIMENSION(jpi,jpj), INTENT(in), OPTIONAL :: pSc ! shletering function [0-1] (Sc->1 for large distance between floes, ->0 for small distances) 66 REAL(wp), DIMENSION(jpi,jpj), INTENT(in), OPTIONAL :: phf ! mean freeboard of floes [m] 67 REAL(wp), DIMENSION(jpi,jpj), INTENT(in), OPTIONAL :: pDi ! cross wind dimension of the floe (aka effective edge length for form drag) [m] 68 !!---------------------------------------------------------------------- 69 LOGICAL :: l_known_Sc=.FALSE., l_known_hf=.FALSE., l_known_Di=.FALSE. 70 REAL(wp) :: ztmp, zrlog, zfri, zfrw, zSc, zhf, zDi 71 INTEGER :: ji, jj 73 72 !!---------------------------------------------------------------------- 74 73 l_known_Sc = PRESENT(pSc) … … 78 77 DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 79 78 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 CdN10_f_LU12(:,:) = 0.5_wp* 0.3_wp * zrlog*zrlog * zSc*zSc * zhf/zDi * zfri ! Eq.(22)109 !!1/2 Ce79 zfri = pfrice(ji,jj) 80 zfrw = (1._wp - zfri) 81 82 IF(l_known_Sc) THEN 83 zSc = pSc(ji,jj) 84 ELSE 85 !! Sc parameterized in terms of A (ice fraction): 86 zSc = zfrw**(1._wp / ( 10._wp * rBeta_0 )) ! Eq.(31) 87 END IF 88 89 IF(l_known_hf) THEN 90 zhf = phf(ji,jj) 91 ELSE 92 !! hf parameterized in terms of A (ice fraction): 93 zhf = rhmax_0*zfri + rhmin_0*zfrw ! Eq.(25) 94 END IF 95 96 IF(l_known_Di) THEN 97 zDi = pDi(ji,jj) 98 ELSE 99 !! Di parameterized in terms of A (ice fraction): 100 ztmp = 1._wp / ( 1._wp - (rDmin_0/rDmax_0)**(1._wp/rBeta_0) ) ! A* Eq.(27) 101 zDi = rDmin_0 * ( ztmp/(ztmp - zfri) )**rBeta_0 ! Eq.(26) 102 END IF 103 104 ztmp = 1._wp/pz0w(ji,jj) 105 zrlog = LOG(zhf*ztmp) / LOG(10._wp*ztmp) 106 107 CdN10_f_LU12(ji,jj) = 0.5_wp* 0.3_wp * zrlog*zrlog * zSc*zSc * zhf/zDi * zfri ! Eq.(22) 108 !! 1/2 Ce 110 109 111 110 END_2D … … 114 113 115 114 FUNCTION CdN_f_LU12_eq36( pzu, pfrice ) 116 REAL(wp), DIMENSION(jpi,jpj) :: CdN_f_LU12_eq36 ! neutral FORM drag coefficient contribution over sea-ice 117 REAL(wp), INTENT(in) :: pzu ! reference height [m] 118 REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: pfrice ! ice concentration [fraction] => at_i_b ! NOT USED if pSc, phf and pDi all provided... 115 !!---------------------------------------------------------------------- 116 REAL(wp), DIMENSION(jpi,jpj) :: CdN_f_LU12_eq36 ! neutral FORM drag coefficient contribution over sea-ice 117 REAL(wp), INTENT(in) :: pzu ! reference height [m] 118 REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: pfrice ! ice concentration [fraction] => at_i_b ! NOT USED if pSc, phf and pDi all provided... 119 119 !!---------------------------------------------------------------------- 120 120 REAL(wp) :: ztmp, zrlog, zfri, zhf, zDi … … 129 129 130 130 DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 131 132 zfri = pfrice(ji,jj) 133 134 CdN_f_LU12_eq36(:,:) = 0.5_wp* 0.3_wp * zrlog*zrlog * zhf/zDi * (1._wp - zfri)**rBeta_0 ! Eq.(35) & (36) 135 !! 1/2 Ce 131 zfri = pfrice(ji,jj) 132 CdN_f_LU12_eq36(ji,jj) = 0.5_wp* 0.3_wp * zrlog*zrlog * zhf/zDi * (1._wp - zfri)**rBeta_0 ! Eq.(35) & (36) 133 !! 1/2 Ce 136 134 END_2D 137 135 END FUNCTION CdN_f_LU12_eq36 138 139 140 136 141 137 … … 172 168 !! 173 169 !!---------------------------------------------------------------------- 174 REAL(wp), DIMENSION(jpi,jpj) :: CdN10_f_LU13 ! neutral FORM drag coefficient contribution over sea-ice175 REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: pfrice ! ice concentration [fraction] => at_i_b176 177 !!----------------------------------------------------------------------178 REAL(wp) 170 REAL(wp), DIMENSION(jpi,jpj) :: CdN10_f_LU13 ! neutral FORM drag coefficient contribution over sea-ice 171 REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: pfrice ! ice concentration [fraction] => at_i_b 172 !!---------------------------------------------------------------------- 173 INTEGER :: ji, jj 174 REAL(wp) :: zcoef 179 175 !!---------------------------------------------------------------------- 180 176 zcoef = rNu_0 + 1._wp / ( 10._wp * rBeta_0 ) … … 183 179 !! => so we keep only the last rhs terms of Eq.(1) of Lupkes et al, 2013 that we divide by "A": 184 180 !! (we multiply Cd_i_s and Cd_i_f by A later, when applying ocean-ice partitioning... 185 186 CdN10_f_LU13(:,:) = rCe_0 * pfrice(:,:)**(rMu_0 - 1._wp) * (1._wp - pfrice(:,:))**zcoef 181 DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 182 CdN10_f_LU13(ji,jj) = rCe_0 * pfrice(ji,jj)**(rMu_0 - 1._wp) * (1._wp - pfrice(ji,jj))**zcoef 183 END_2D 187 184 !! => seems okay for winter 100% sea-ice as second rhs term vanishes as pfrice == 1.... 188 185 … … 207 204 !! 208 205 !!---------------------------------------------------------------------- 209 REAL(wp), DIMENSION(jpi,jpj) :: CdN_f_LG15 ! neutral FORM drag coefficient contribution over sea-ice210 REAL(wp), INTENT(in ) :: pzu ! reference height [m]211 REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: pfrice ! ice concentration [fraction] => at_i_b ! NOT USED if pSc, phf and pDi all provided...212 REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: pz0i ! roughness length over ICE [m] (in LU12, it's over water ???)213 REAL(wp), DIMENSION(jpi,jpj), INTENT(in), OPTIONAL :: pSc ! shletering function [0-1] (Sc->1 for large distance between floes, ->0 for small distances)214 REAL(wp), DIMENSION(jpi,jpj), INTENT(in), OPTIONAL :: phf ! mean freeboard of floes [m]215 REAL(wp), DIMENSION(jpi,jpj), INTENT(in), OPTIONAL :: pDi ! cross wind dimension of the floe (aka effective edge length for form drag) [m]216 !!---------------------------------------------------------------------- 217 LOGICAL ::l_known_Sc=.FALSE., l_known_hf=.FALSE., l_known_Di=.FALSE.218 REAL(wp) :: ztmp, zrlog, zfri, zfrw, zSc, zhf, zDi219 INTEGER :: ji, jj206 REAL(wp), DIMENSION(jpi,jpj) :: CdN_f_LG15 ! neutral FORM drag coefficient contribution over sea-ice 207 REAL(wp), INTENT(in ) :: pzu ! reference height [m] 208 REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: pfrice ! ice concentration [fraction] => at_i_b ! NOT USED if pSc, phf and pDi all provided... 209 REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: pz0i ! roughness length over ICE [m] (in LU12, it's over water ???) 210 REAL(wp), DIMENSION(jpi,jpj), INTENT(in), OPTIONAL :: pSc ! shletering function [0-1] (Sc->1 for large distance between floes, ->0 for small distances) 211 REAL(wp), DIMENSION(jpi,jpj), INTENT(in), OPTIONAL :: phf ! mean freeboard of floes [m] 212 REAL(wp), DIMENSION(jpi,jpj), INTENT(in), OPTIONAL :: pDi ! cross wind dimension of the floe (aka effective edge length for form drag) [m] 213 !!---------------------------------------------------------------------- 214 LOGICAL :: l_known_Sc=.FALSE., l_known_hf=.FALSE., l_known_Di=.FALSE. 215 REAL(wp) :: ztmp, zrlog, zfri, zfrw, zSc, zhf, zDi 216 INTEGER :: ji, jj 220 217 !!---------------------------------------------------------------------- 221 218 l_known_Sc = PRESENT(pSc) … … 225 222 DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 226 223 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 CdN_f_LG15(:,:) = 0.5_wp* 0.4_wp * zrlog*zrlog * zSc*zSc * zhf/zDi * zfri ! Eq.(21) Lukes & Gryanik (2015)256 257 224 zfri = pfrice(ji,jj) 225 zfrw = (1._wp - zfri) 226 227 IF(l_known_Sc) THEN 228 zSc = pSc(ji,jj) 229 ELSE 230 !! Sc parameterized in terms of A (ice fraction): 231 zSc = zfrw**(1._wp / ( 10._wp * rBeta_0 )) ! Eq.(31) 232 END IF 233 234 IF(l_known_hf) THEN 235 zhf = phf(ji,jj) 236 ELSE 237 !! hf parameterized in terms of A (ice fraction): 238 zhf = rhmax_0*zfri + rhmin_0*zfrw ! Eq.(25) 239 END IF 240 241 IF(l_known_Di) THEN 242 zDi = pDi(ji,jj) 243 ELSE 244 !! Di parameterized in terms of A (ice fraction): 245 ztmp = 1._wp / ( 1._wp - (rDmin_0/rDmax_0)**(1._wp/rBeta_0) ) ! A* Eq.(27) 246 zDi = rDmin_0 * ( ztmp/(ztmp - zfri) )**rBeta_0 ! Eq.(26) 247 END IF 248 249 ztmp = 1._wp/pz0i(ji,jj) 250 zrlog = LOG(zhf*ztmp/2.718_wp) / LOG(pzu*ztmp) !LOLO: adding number "e" !!! 251 252 CdN_f_LG15(ji,jj) = 0.5_wp* 0.4_wp * zrlog*zrlog * zSc*zSc * zhf/zDi * zfri ! Eq.(21) Lukes & Gryanik (2015) 253 !! 1/2 Ce 254 258 255 END_2D 259 256 END FUNCTION CdN_f_LG15 260 257 261 258 262 263 259 FUNCTION CdN_f_LG15_light( pzu, pfrice, pz0w ) 264 260 !!---------------------------------------------------------------------- … … 275 271 !! 276 272 !!---------------------------------------------------------------------- 277 REAL(wp), DIMENSION(jpi,jpj) :: CdN_f_LG15_light ! neutral FORM drag coefficient contribution over sea-ice278 REAL(wp), INTENT(in) :: pzu ! reference height [m]279 REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: pfrice ! ice concentration [fraction] => at_i_b280 REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: pz0w ! roughness length over water [m]281 !!---------------------------------------------------------------------- 282 REAL(wp) :: ztmp, zrlog, zfri283 INTEGER :: ji, jj284 !!---------------------------------------------------------------------- 285 DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 286 287 288 289 290 291 292 CdN_f_LG15_light(:,:) = rce10_i_0 *zrlog*zrlog * zfri * (1._wp - zfri)**rbeta_0 ! (Eq.46) [ index 1 is for ice, 2 for water ]273 REAL(wp), DIMENSION(jpi,jpj) :: CdN_f_LG15_light ! neutral FORM drag coefficient contribution over sea-ice 274 REAL(wp), INTENT(in) :: pzu ! reference height [m] 275 REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: pfrice ! ice concentration [fraction] => at_i_b 276 REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: pz0w ! roughness length over water [m] 277 !!---------------------------------------------------------------------- 278 REAL(wp) :: ztmp, zrlog, zfri 279 INTEGER :: ji, jj 280 !!---------------------------------------------------------------------- 281 DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 282 283 zfri = pfrice(ji,jj) 284 285 ztmp = 1._wp / pz0w(ji,jj) 286 zrlog = LOG( 10._wp * ztmp ) / LOG( pzu * ztmp ) ! part of (Eq.46) 287 288 CdN_f_LG15_light(ji,jj) = rce10_i_0 *zrlog*zrlog * zfri * (1._wp - zfri)**rbeta_0 ! (Eq.46) [ index 1 is for ice, 2 for water ] 293 289 294 290 END_2D 295 291 END FUNCTION CdN_f_LG15_light 296 297 292 298 293
Note: See TracChangeset
for help on using the changeset viewer.