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 11804 for NEMO/branches/2019/dev_r11085_ASINTER-05_Brodeau_Advanced_Bulk/src/OCE/SBC/sbcblk_skin_ecmwf.F90 – NEMO

Ignore:
Timestamp:
2019-10-25T17:25:19+02:00 (5 years ago)
Author:
laurent
Message:

Use of "TURB_FLUXES@…" inside sbcblk.F90, positive latent HF & positive cool-skin temperature now allowed!

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  
    8888         DO ji = 1, jpi 
    8989 
    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... 
    9392 
    9493            zdelta = delta_skin_layer( alpha_sw(pSST(ji,jj)), zQabs, pustar(ji,jj) ) 
    9594 
    9695            DO jc = 1, 4 ! because implicit in terms of zdelta... 
    97                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 
     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 
    9897               !              =>  (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) 
    10199               zdelta = delta_skin_layer( alpha_sw(pSST(ji,jj)), zQabs, pustar(ji,jj) ) 
    102100            END DO 
    103101 
    104             dT_cs(ji,jj) = MIN( zQabs*zdelta/rk0_w , 0._wp )   ! temperature increment 
     102            dT_cs(ji,jj) = zQabs*zdelta/rk0_w   ! temperature increment, yes dT_cs can actually > 0, if Qabs > 0 (rare but possible!) 
    105103 
    106104         END DO 
     
    142140         & zalpha, & !: thermal expansion coefficient of sea-water [1/K] 
    143141         & zdTwl_b, zdTwl_n, & ! temp. diff. between "almost surface (right below viscous layer) and bottom of WL 
    144          & zfr, zeta, ztmp, & 
     142         & zfr, zeta, & 
    145143         & zusw, zusw2, & 
    146144         & zLa, zfLa, & 
     
    239237 
    240238 
    241    FUNCTION delta_skin_layer( palpha, pQabs, pustar_a ) 
     239   FUNCTION delta_skin_layer( palpha, pQd, pustar_a ) 
    242240      !!--------------------------------------------------------------------- 
    243241      !! Computes the thickness (m) of the viscous skin layer. 
     
    253251      REAL(wp)                :: delta_skin_layer 
    254252      REAL(wp), INTENT(in)    :: palpha   ! thermal expansion coefficient of sea-water (SST accurate enough!) 
    255       REAL(wp), INTENT(in)    :: pQabs    ! < 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 
     253      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 
    256254      REAL(wp), INTENT(in)    :: pustar_a ! friction velocity in the air (u*) [m/s] 
    257255      !!--------------------------------------------------------------------- 
    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      ! 
    267261      zusw  = MAX(pustar_a, 1.E-4_wp) * sq_radrw    ! u* in the water 
    268262      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 
    277270   END FUNCTION delta_skin_layer 
    278  
    279271 
    280272 
Note: See TracChangeset for help on using the changeset viewer.