Changeset 11266 for NEMO/branches/2019/dev_r11085_ASINTER-05_Brodeau_Advanced_Bulk/src/OCE/SBC/sbcblk_algo_coare.F90
- Timestamp:
- 2019-07-15T12:09:30+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_algo_coare.F90
r11215 r11266 57 57 & Cd, Ch, Ce, t_zu, q_zu, U_blk, & 58 58 & Cdn, Chn, Cen, & 59 & Qsw, rad_lw, slp 59 & Qsw, rad_lw, slp, Tsk_b ) 60 60 !!---------------------------------------------------------------------- 61 61 !! *** ROUTINE turb_coare *** … … 81 81 !! INPUT/OUTPUT: 82 82 !! ------------- 83 !! * T_s : SST or skin temperature [K] 83 !! * T_s : always "bulk SST" as input [K] 84 !! -> unchanged "bulk SST" as output if CSWL not used [K] 85 !! -> skin temperature as output if CSWL used [K] 86 !! 84 87 !! * q_s : SSQ aka saturation specific humidity at temp. T_s [kg/kg] 85 88 !! -> doesn't need to be given a value if skin temp computed (in case l_use_skin=True) … … 91 94 !! * rad_lw : downwelling longwave radiation at the surface (>0) [W/m^2] 92 95 !! * slp : sea-level pressure [Pa] 96 !! * Tsk_b : estimate of skin temperature at previous time-step [K] 93 97 !! 94 98 !! OUTPUT : … … 122 126 REAL(wp), INTENT(in ), OPTIONAL, DIMENSION(jpi,jpj) :: rad_lw ! [W/m^2] 123 127 REAL(wp), INTENT(in ), OPTIONAL, DIMENSION(jpi,jpj) :: slp ! [Pa] 128 REAL(wp), INTENT(in ), OPTIONAL, DIMENSION(jpi,jpj) :: Tsk_b ! [Pa] 124 129 ! 125 130 INTEGER :: j_itt … … 152 157 153 158 !! Initialization for cool skin: 159 zsst = T_s ! save the bulk SST 154 160 IF( l_use_skin ) THEN 155 zsst = T_s ! save the bulk SST 156 T_s = T_s - 0.25 ! First guess of correction 161 ! First guess for skin temperature: 162 IF( PRESENT(Tsk_b) ) THEN 163 T_s = Tsk_b 164 ELSE 165 T_s = T_s - 0.25 ! sst - 0.25 166 END IF 157 167 q_s = rdct_qsat_salt*q_sat(MAX(T_s, 200._wp), slp) ! First guess of q_s 158 168 END IF … … 202 212 q_star = dq_zu*ztmp0 203 213 204 ! What 's needto be done if zt /= zu:214 ! What needs to be done if zt /= zu: 205 215 IF( .NOT. l_zt_equal_zu ) THEN 206 216 !! First update of values at zu (or zt for wind) … … 275 285 ztmp1 = U_blk*MAX(rho_air(t_zu, q_zu, slp), 1._wp) ! rho*U10 276 286 ztmp2 = T_s*T_s 277 ztmp1 = ztmp1 * ( Ce*rLevap*(q_zu - q_s) + Ch*rCp_dry*(t_zu - T_s) ) & ! Total turb. heat flux 278 & + (rad_lw - emiss_w*stefan*ztmp2*ztmp2) ! Net longwave flux 287 ztmp1 = ztmp1 * ( Ce*L_vap(T_s)*(q_zu - q_s) + Ch*cp_air(q_zu)*(t_zu - T_s) ) & ! Total turb. heat flux 288 & + rad_lw - emiss_w*stefan*ztmp2*ztmp2 ! Net longwave flux 289 !! => "ztmp1" is the net non-solar surface heat flux ! 279 290 !! Updating the values of the skin temperature T_s and q_s : 280 291 CALL CSWL_ECMWF( Qsw, ztmp1, u_star, zsst, T_s ) ! yes ECMWF, because more advanced than COARE (warm-layer added!)
Note: See TracChangeset
for help on using the changeset viewer.