Changeset 11804 for NEMO/branches/2019/dev_r11085_ASINTER-05_Brodeau_Advanced_Bulk/src/OCE/SBC/sbcblk_skin_coare.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_coare.F90
r11775 r11804 63 63 !!--------------------------------------------------------------------- 64 64 !! 65 !! Cool-Skin scheme according to Fairall et al.1996, revisited for COARE 3.6 (Fairall et al., 2019)65 !! Cool-skin parameterization, based on Fairall et al., 1996, revisited for COARE 3.6 (Fairall et al., 2019) 66 66 !! 67 67 !! Fairall, C. W., Bradley, E. F., Godfrey, J. S., Wick, G. A., … … 78 78 !! *pSST* bulk SST (taken at depth gdept_1d(1)) [K] 79 79 !! *pQlat* surface latent heat flux [K] 80 !!81 80 !!------------------------------------------------------------------ 82 REAL(wp), DIMENSION(jpi,jpj), INTENT(in) 83 REAL(wp), DIMENSION(jpi,jpj), INTENT(in) 84 REAL(wp), DIMENSION(jpi,jpj), INTENT(in) 85 REAL(wp), DIMENSION(jpi,jpj), INTENT(in) 86 REAL(wp), DIMENSION(jpi,jpj), INTENT(in) 81 REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: pQsw ! net solar a.k.a shortwave radiation into the ocean (after albedo) [W/m^2] 82 REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: pQnsol ! non-solar heat flux to the ocean [W/m^2] 83 REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: pustar ! friction velocity, temperature and humidity (u*,t*,q*) 84 REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: pSST ! bulk SST [K] 85 REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: pQlat ! latent heat flux [W/m^2] 87 86 !!--------------------------------------------------------------------- 88 87 INTEGER :: ji, jj, jc … … 92 91 DO ji = 1, jpi 93 92 94 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$95 ! ! also, we ONLY consider when the viscous layer is loosing heat to the atmosphere, we only deal with cool-skin! => hence the "MIN( -0$93 zQabs = pQnsol(ji,jj) ! first guess of heat flux absorbed within the viscous sublayer of thicknes delta, 94 ! ! => we DO not miss a lot assuming 0 solar flux absorbed in the tiny layer of thicknes zdelta... 96 95 97 96 zdelta = delta_skin_layer( alpha_sw(pSST(ji,jj)), zQabs, pQlat(ji,jj), pustar(ji,jj) ) 98 97 99 98 DO jc = 1, 4 ! because implicit in terms of zdelta... 100 zfr 101 zQabs = MIN( -0.1_wp , pQnsol(ji,jj) + zfr*pQsw(ji,jj) ) ! Total cooling at the interface99 zfr = MAX( 0.137_wp + 11._wp*zdelta - 6.6E-5_wp/zdelta*(1._wp - EXP(-zdelta/8.E-4_wp)) , 0.01_wp ) ! Solar absorption, Eq.16 (Fairall al. 1996b) / !LB: why 0.065 and not 0.137 like in the paper??? Beljaars & Zeng use 0.065, not 0.137 ! 100 zQabs = pQnsol(ji,jj) + zfr*pQsw(ji,jj) 102 101 zdelta = delta_skin_layer( alpha_sw(pSST(ji,jj)), zQabs, pQlat(ji,jj), pustar(ji,jj) ) 103 102 END DO 104 103 105 dT_cs(ji,jj) = MIN( zQabs*zdelta/rk0_w , 0._wp ) ! temperature increment104 dT_cs(ji,jj) = zQabs*zdelta/rk0_w ! temperature increment, yes dT_cs can actually > 0, if Qabs > 0 (rare but possible!) 106 105 107 106 END DO … … 189 188 & + 0.45*12.82*(1-EXP(-zHwl/12.82)) ) / zHwl 190 189 zQabs = zfr*pQsw(ji,jj) + pQnsol(ji,jj) ! first guess of tot. heat flux absorbed in warm layer !LOLO: depends of zfr, which is wild guess... Wrong!!! 191 !PRINT *, '#LBD: Initial Qsw & Qnsol:', NINT(pQsw(ji,jj)), NINT(pQnsol(ji,jj))192 !PRINT *, '#LBD: =>Qabs:', zQabs,' zfr=', zfr193 190 194 191 IF ( (ABS(zdTwl) < 1.E-6_wp) .AND. (zQabs <= 0._wp) ) THEN … … 196 193 ! since zQabs <= 0._wp 197 194 ! => no need to go further 198 !PRINT *, '#LBD: we have not started to to build a WL yet (dT==0)'199 !PRINT *, '#LBD: and theres no way it can occur now since zQabs=', zQabs200 !PRINT *, '#LBD: => leaving without changing anything...'201 195 l_exit = .TRUE. 202 196 END IF … … 207 201 !LOLO: remove??? has a strong influence !!! 208 202 IF ( (.NOT.(l_exit)) .AND. (Qnt_ac(ji,jj) + zQabs*rdt <= 0._wp) ) THEN 209 !PRINT *, '#LBD: Oh boy! Next Qnt_ac looking weak! =>', Qnt_ac(ji,jj) + zQabs*rdt210 !PRINT *, '#LBD: => time to destroy the warm-layer!'211 203 l_exit = .TRUE. 212 204 l_destroy_wl = .TRUE. … … 219 211 ! 1/ A warm layer already exists (dT>0) but it is cooling down because Qabs<0 220 212 ! 2/ Regardless of WL formed (dT==0 or dT>0), we are in the process to initiate one or warm further it ! 221 222 !PRINT *, '#LBD:======================================================'223 !PRINT *, '#LBD: WL action makes sense now! => zQabs,dT_wl=', REAL(zQabs,4), REAL(zdTwl,4)224 !PRINT *, '#LBD:======================================================'225 !PRINT *, '#LBD: current values for Qac and Tac=', REAL(Qnt_ac(ji,jj),4), REAL(Tau_ac(ji,jj),4)226 213 227 214 ztac = Tau_ac(ji,jj) + MAX(.002_wp , pTau(ji,jj))*rdt ! updated momentum integral … … 238 225 zHwl = MAX( MIN( Hwl_max , zcd1*ztac/SQRT(zqac)) , 0.1_wp ) ! Warm-layer depth 239 226 END DO 240 !PRINT *, '#LBD: updated absorption and WL depth=', REAL(zfr,4), REAL(zHwl,4)241 !PRINT *, '#LBD: updated value for Qabs=', REAL(zQabs,4), 'W/m2'242 !PRINT *, '#LBD: updated value for Qac =', REAL(zqac,4), 'J'243 227 244 228 IF ( zqac <= 0._wp ) THEN … … 263 247 END IF 264 248 265 !PRINT *, '#LBD: exit values for Qac & Tac:', REAL(zqac,4), REAL(ztac,4)266 267 249 IF ( iwait == 0 ) THEN 268 250 !! Iteration loop within bulk algo is over, time to update what needs to be updated: 269 251 dT_wl(ji,jj) = zdTwl 270 252 Hz_wl(ji,jj) = zHwl 271 !PRINT *, '#LBD: FINAL EXIT values for dT_wl & Hz_wl:', REAL(dT_wl(ji,jj),4), REAL(Hz_wl(ji,jj),4)272 253 Qnt_ac(ji,jj) = zqac ! Updating Qnt_ac, heat integral 273 254 Tau_ac(ji,jj) = ztac 274 !PRINT *, '#LBD: FINAL EXIT values for Qac & Tac:', REAL(Qnt_ac(ji,jj),4), REAL(Tau_ac(ji,jj),4)275 !PRINT *, '#LBD'276 255 END IF 277 256 … … 284 263 285 264 286 FUNCTION delta_skin_layer( palpha, pQ abs, pQlat, pustar_a )265 FUNCTION delta_skin_layer( palpha, pQd, pQlat, pustar_a ) 287 266 !!--------------------------------------------------------------------- 288 267 !! Computes the thickness (m) of the viscous skin layer. … … 298 277 REAL(wp) :: delta_skin_layer 299 278 REAL(wp), INTENT(in) :: palpha ! thermal expansion coefficient of sea-water (SST accurate enough!) 300 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. 1996279 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 301 280 REAL(wp), INTENT(in) :: pQlat ! latent heat flux [W/m^2] 302 281 REAL(wp), INTENT(in) :: pustar_a ! friction velocity in the air (u*) [m/s] 303 282 !!--------------------------------------------------------------------- 304 REAL(wp) :: zusw, zusw2, zlamb, zQb 305 !!--------------------------------------------------------------------- 306 307 zQb = pQabs + 0.026*MIN(pQlat,0._wp)*rCp0_w/rLevap/palpha ! LOLO: Double check sign + division by palpha !!! units are okay! 308 283 REAL(wp) :: zusw, zusw2, zlamb, zQd, ztf, ztmp 284 !!--------------------------------------------------------------------- 285 286 zQd = pQd + 0.026*MIN(pQlat,0._wp)*rCp0_w/rLevap/palpha ! LOLO: Double check sign + division by palpha !!! units are okay! 287 288 ztf = 0.5_wp + SIGN(0.5_wp, zQd) ! Qabs < 0 => cooling of the viscous layer => ztf = 0 (regular case) 289 ! ! Qabs > 0 => warming of the viscous layer => ztf = 1 (ex: weak evaporation and strong positive sensible heat flux) 290 ! 309 291 zusw = MAX(pustar_a, 1.E-4_wp) * sq_radrw ! u* in the water 310 292 zusw2 = zusw*zusw 311 312 zlamb = 6._wp*( 1._wp + (palpha*zcon0/(zusw2*zusw2)*zQb)**0.75 )**(-1./3.) ! see eq.(14) in Fairall et al., 1996 313 314 delta_skin_layer = zlamb*rnu0_w/zusw 315 293 ! 294 zlamb = 6._wp*( 1._wp + MAX(palpha*zcon0/(zusw2*zusw2)*zQd, 0._wp)**0.75 )**(-1./3.) ! see Eq.(14) in Fairall et al., 1996 295 ! => zlamb is not used when Qd > 0, and since zcon0 < 0, we just use this "MAX" to prevent FPE errors (something_negative)**0.75 296 ! 297 ztmp = rnu0_w/zusw 298 delta_skin_layer = (1._wp-ztf) * zlamb*ztmp & ! regular case, Qd < 0, see Eq.(12) in Fairall et al., 1996 299 & + ztf * MIN(6._wp*ztmp , 0.007_wp) ! when Qd > 0 316 300 END FUNCTION delta_skin_layer 317 301
Note: See TracChangeset
for help on using the changeset viewer.