Changeset 11804 for NEMO/branches/2019/dev_r11085_ASINTER-05_Brodeau_Advanced_Bulk/src/OCE/SBC/sbcblk_skin_ecmwf.F90
- Timestamp:
- 2019-10-25T17:25:19+02:00 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r11085_ASINTER-05_Brodeau_Advanced_Bulk/src/OCE/SBC/sbcblk_skin_ecmwf.F90
r11772 r11804 88 88 DO ji = 1, jpi 89 89 90 zQabs = MIN( -0.1_wp , pQnsol(ji,jj) ) ! first guess, we do not miss a lot assuming 0 solar flux absorbed in the tiny layer of thicknes$ 91 ! ! also, we ONLY consider when the viscous layer is loosing heat to the atmosphere, we only deal with cool-skin! => hence the "MIN( -0$ 92 !zQabs = pQnsol(ji,jj) 90 zQabs = pQnsol(ji,jj) ! first guess of heat flux absorbed within the viscous sublayer of thicknes delta, 91 ! ! => we DO not miss a lot assuming 0 solar flux absorbed in the tiny layer of thicknes zdelta... 93 92 94 93 zdelta = delta_skin_layer( alpha_sw(pSST(ji,jj)), zQabs, pustar(ji,jj) ) 95 94 96 95 DO jc = 1, 4 ! because implicit in terms of zdelta... 97 zfr 96 zfr = MAX( 0.065_wp + 11._wp*zdelta - 6.6E-5_wp/zdelta*(1._wp - EXP(-zdelta/8.E-4_wp)) , 0.01_wp ) ! Solar absorption, Eq.(5) Zeng & Beljaars, 2005 98 97 ! => (WARNING: 0.065 rather than 0.137 in Fairal et al. 1996) 99 zQabs = MIN( -0.1_wp , pQnsol(ji,jj) + zfr*pQsw(ji,jj) ) ! Total cooling at the interface 100 !zQabs = pQnsol(ji,jj) + zfr*pQsw(ji,jj) 98 zQabs = pQnsol(ji,jj) + zfr*pQsw(ji,jj) 101 99 zdelta = delta_skin_layer( alpha_sw(pSST(ji,jj)), zQabs, pustar(ji,jj) ) 102 100 END DO 103 101 104 dT_cs(ji,jj) = MIN( zQabs*zdelta/rk0_w , 0._wp ) ! temperature increment102 dT_cs(ji,jj) = zQabs*zdelta/rk0_w ! temperature increment, yes dT_cs can actually > 0, if Qabs > 0 (rare but possible!) 105 103 106 104 END DO … … 142 140 & zalpha, & !: thermal expansion coefficient of sea-water [1/K] 143 141 & zdTwl_b, zdTwl_n, & ! temp. diff. between "almost surface (right below viscous layer) and bottom of WL 144 & zfr, zeta, ztmp,&142 & zfr, zeta, & 145 143 & zusw, zusw2, & 146 144 & zLa, zfLa, & … … 239 237 240 238 241 FUNCTION delta_skin_layer( palpha, pQ abs, pustar_a )239 FUNCTION delta_skin_layer( palpha, pQd, pustar_a ) 242 240 !!--------------------------------------------------------------------- 243 241 !! Computes the thickness (m) of the viscous skin layer. … … 253 251 REAL(wp) :: delta_skin_layer 254 252 REAL(wp), INTENT(in) :: palpha ! thermal expansion coefficient of sea-water (SST accurate enough!) 255 REAL(wp), INTENT(in) :: pQ abs! < 0 !!! part of the net heat flux actually absorbed in the WL [W/m^2] => term "Q + Rs*fs" in eq.6 of Fairall et al. 1996253 REAL(wp), INTENT(in) :: pQd ! < 0 !!! part of the net heat flux actually absorbed in the WL [W/m^2] => term "Q + Rs*fs" in eq.6 of Fairall et al. 1996 256 254 REAL(wp), INTENT(in) :: pustar_a ! friction velocity in the air (u*) [m/s] 257 255 !!--------------------------------------------------------------------- 258 REAL(wp) :: zusw, zusw2, zlamb, zQb 259 !!--------------------------------------------------------------------- 260 261 zQb = pQabs 262 263 !zQ = MIN( -0.1_wp , pQabs ) 264 265 !ztf = 0.5_wp + SIGN(0.5_wp, zQ) ! Qabs < 0 => cooling of the layer => ztf = 0 (normal case) 266 ! ! Qabs > 0 => warming of the layer => ztf = 1 (ex: weak evaporation and strong positive sensible heat flux) 256 REAL(wp) :: zusw, zusw2, zlamb, ztf, ztmp 257 !!--------------------------------------------------------------------- 258 ztf = 0.5_wp + SIGN(0.5_wp, pQd) ! Qabs < 0 => cooling of the viscous layer => ztf = 0 (regular case) 259 ! ! Qabs > 0 => warming of the viscous layer => ztf = 1 (ex: weak evaporation and strong positive sensible heat flux) 260 ! 267 261 zusw = MAX(pustar_a, 1.E-4_wp) * sq_radrw ! u* in the water 268 262 zusw2 = zusw*zusw 269 270 zlamb = 6._wp*( 1._wp + (palpha*zcon0/(zusw2*zusw2)*zQb)**0.75 )**(-1./3.) ! see eq.(14) in Fairall et al., 1996 271 !zlamb = 6._wp*( 1._wp + MAX(palpha*zcon0/(zusw2*zusw2)*zQ, 0._wp)**0.75 )**(-1./3.) ! see eq.(14) in Fairall et al., 1996 272 273 delta_skin_layer = zlamb*rnu0_w/zusw 274 275 !delta_skin_layer = (1._wp - ztf) * zlamb*rnu0_w/zusw & ! see eq.(12) in Fairall et al., 1996 276 ! & + ztf * MIN(6._wp*rnu0_w/zusw , 0.007_wp) 263 ! 264 zlamb = 6._wp*( 1._wp + MAX(palpha*zcon0/(zusw2*zusw2)*pQd, 0._wp)**0.75 )**(-1./3.) ! see Eq.(14) in Fairall et al., 1996 265 ! => zlamb is not used when Qd > 0, and since zcon0 < 0, we just use this "MAX" to prevent FPE errors (something_negative)**0.75 266 ! 267 ztmp = rnu0_w/zusw 268 delta_skin_layer = (1._wp-ztf) * zlamb*ztmp & ! regular case, Qd < 0, see Eq.(12) in Fairall et al., 1996 269 & + ztf * MIN(6._wp*ztmp , 0.007_wp) ! when Qd > 0 277 270 END FUNCTION delta_skin_layer 278 279 271 280 272
Note: See TracChangeset
for help on using the changeset viewer.