Changeset 11845 for NEMO/branches
- Timestamp:
- 2019-11-04T11:11:58+01:00 (4 years ago)
- Location:
- NEMO/branches/2019/dev_r11085_ASINTER-05_Brodeau_Advanced_Bulk/src/OCE/SBC
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r11085_ASINTER-05_Brodeau_Advanced_Bulk/src/OCE/SBC/sbcblk_algo_coare3p0.F90
r11817 r11845 178 178 LOGICAL :: l_zt_equal_zu = .FALSE. ! if q and t are given at same height as U 179 179 ! 180 REAL(wp), DIMENSION(jpi,jpj) :: & 181 & u_star, t_star, q_star, & 182 & dt_zu, dq_zu, & 183 & znu_a, & !: Nu_air, Viscosity of air 184 & z0, z0t 185 REAL(wp), DIMENSION(jpi,jpj) :: zeta_u ! stability parameter at height zu 186 REAL(wp), DIMENSION(jpi,jpj) :: ztmp0, ztmp1, ztmp2 187 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: zeta_t ! stability parameter at height zt 180 REAL(wp), DIMENSION(jpi,jpj) :: u_star, t_star, q_star 181 REAL(wp), DIMENSION(jpi,jpj) :: dt_zu, dq_zu 182 REAL(wp), DIMENSION(jpi,jpj) :: znu_a, !: Nu_air, Viscosity of air 183 REAL(wp), DIMENSION(jpi,jpj) :: z0, z0t 184 REAL(wp), DIMENSION(jpi,jpj) :: zeta_u ! stability parameter at height zu 185 REAL(wp), DIMENSION(jpi,jpj) :: ztmp0, ztmp1, ztmp2 188 186 ! 189 187 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: & 188 & zeta_t, & ! stability parameter at height zt 190 189 & zsst, & ! to back up the initial bulk SST 191 190 & pdTc, & ! SST increment "dT" for cool-skin correction [K] … … 299 298 !! Roughness lengthes z0, z0t (z0q = z0t) : 300 299 ztmp2 = u_star/vkarmn*LOG(10./z0) ! Neutral wind speed at 10m 301 z0 = alfa_charn_3p0(ztmp2)*ztmp1/grav + 0.11_wp*znu_a/u_star ! Roughness length (eq.6) 300 z0 = alfa_charn_3p0(ztmp2)*ztmp1/grav + 0.11_wp*znu_a/u_star ! Roughness length (eq.6) [ ztmp1==u*^2 ] 302 301 z0 = MIN( MAX(ABS(z0), 1.E-9) , 1._wp ) ! (prevents FPE from stupid values from masked region later on) 303 302 -
NEMO/branches/2019/dev_r11085_ASINTER-05_Brodeau_Advanced_Bulk/src/OCE/SBC/sbcblk_algo_coare3p6.F90
r11817 r11845 178 178 LOGICAL :: l_zt_equal_zu = .FALSE. ! if q and t are given at same height as U 179 179 ! 180 REAL(wp), DIMENSION(jpi,jpj) :: & 181 & u_star, t_star, q_star, & 182 & dt_zu, dq_zu, & 183 & znu_a, & !: Nu_air, Viscosity of air 184 & z0, z0t 185 REAL(wp), DIMENSION(jpi,jpj) :: zeta_u ! stability parameter at height zu 186 REAL(wp), DIMENSION(jpi,jpj) :: ztmp0, ztmp1, ztmp2 187 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: zeta_t ! stability parameter at height zt 180 REAL(wp), DIMENSION(jpi,jpj) :: u_star, t_star, q_star 181 REAL(wp), DIMENSION(jpi,jpj) :: dt_zu, dq_zu 182 REAL(wp), DIMENSION(jpi,jpj) :: znu_a, !: Nu_air, Viscosity of air 183 REAL(wp), DIMENSION(jpi,jpj) :: z0, z0t 184 REAL(wp), DIMENSION(jpi,jpj) :: zeta_u ! stability parameter at height zu 185 REAL(wp), DIMENSION(jpi,jpj) :: ztmp0, ztmp1, ztmp2 188 186 ! 189 187 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: & 188 & zeta_t, & ! stability parameter at height zt 190 189 & zsst, & ! to back up the initial bulk SST 191 190 & pdTc, & ! SST increment "dT" for cool-skin correction [K] -
NEMO/branches/2019/dev_r11085_ASINTER-05_Brodeau_Advanced_Bulk/src/OCE/SBC/sbcblk_algo_ecmwf.F90
r11816 r11845 414 414 REAL(wp) :: zzeta, zx, ztmp, psi_unst, psi_stab, stab 415 415 !!---------------------------------------------------------------------------------- 416 !417 416 DO jj = 1, jpj 418 417 DO ji = 1, jpi … … 441 440 END DO 442 441 END DO 443 !444 442 END FUNCTION psi_m_ecmwf 445 443 … … 486 484 END DO 487 485 END DO 488 !489 486 END FUNCTION psi_h_ecmwf 490 487 -
NEMO/branches/2019/dev_r11085_ASINTER-05_Brodeau_Advanced_Bulk/src/OCE/SBC/sbcblk_algo_ncar.F90
r11631 r11845 42 42 PRIVATE 43 43 44 PUBLIC :: 45 46 INTEGER , PARAMETER :: nb_itt = 4! number of itterations44 PUBLIC :: TURB_NCAR ! called by sbcblk.F90 45 46 INTEGER , PARAMETER :: nb_itt = 5 ! number of itterations 47 47 48 48 !!---------------------------------------------------------------------- … … 52 52 & Cd, Ch, Ce, t_zu, q_zu, U_blk, & 53 53 & Cdn, Chn, Cen ) 54 !!---------------------------------------------------------------------- ------------54 !!---------------------------------------------------------------------- 55 55 !! *** ROUTINE turb_ncar *** 56 56 !! … … 64 64 !! ------- 65 65 !! * zt : height for temperature and spec. hum. of air [m] 66 !! * zu : height for wind speed (generally 10m) [m] 67 !! * U_zu : scalar wind speed at 10m [m/s] 68 !! * sst : SST [K] 66 !! * zu : height for wind speed (usually 10m) [m] 67 !! * sst : bulk SST [K] 69 68 !! * t_zt : potential air temperature at zt [K] 70 69 !! * ssq : specific humidity at saturation at SST [kg/kg] 71 70 !! * q_zt : specific humidity of air at zt [kg/kg] 71 !! * U_zu : scalar wind speed at zu [m/s] 72 72 !! 73 73 !! … … 79 79 !! * t_zu : pot. air temperature adjusted at wind height zu [K] 80 80 !! * q_zu : specific humidity of air // [kg/kg] 81 !! * U_blk : bulk wind speed at 10m[m/s]81 !! * U_blk : bulk wind speed at zu [m/s] 82 82 !! 83 83 !! … … 89 89 REAL(wp), INTENT(in ), DIMENSION(jpi,jpj) :: t_zt ! potential air temperature [Kelvin] 90 90 REAL(wp), INTENT(in ), DIMENSION(jpi,jpj) :: ssq ! sea surface specific humidity [kg/kg] 91 REAL(wp), INTENT(in ), DIMENSION(jpi,jpj) :: q_zt ! specific air humidity 91 REAL(wp), INTENT(in ), DIMENSION(jpi,jpj) :: q_zt ! specific air humidity at zt [kg/kg] 92 92 REAL(wp), INTENT(in ), DIMENSION(jpi,jpj) :: U_zu ! relative wind module at zu [m/s] 93 93 REAL(wp), INTENT( out), DIMENSION(jpi,jpj) :: Cd ! transfer coefficient for momentum (tau) … … 96 96 REAL(wp), INTENT( out), DIMENSION(jpi,jpj) :: t_zu ! pot. air temp. adjusted at zu [K] 97 97 REAL(wp), INTENT( out), DIMENSION(jpi,jpj) :: q_zu ! spec. humidity adjusted at zu [kg/kg] 98 REAL(wp), INTENT( out), DIMENSION(jpi,jpj) :: U_blk ! bulk wind at 10m[m/s]98 REAL(wp), INTENT( out), DIMENSION(jpi,jpj) :: U_blk ! bulk wind speed at zu [m/s] 99 99 REAL(wp), INTENT( out), DIMENSION(jpi,jpj) :: Cdn, Chn, Cen ! neutral transfer coefficients 100 100 ! … … 111 111 ! 112 112 l_zt_equal_zu = .FALSE. 113 IF( ABS(zu - zt) < 0.01 ) l_zt_equal_zu = .TRUE. ! testing "zu == zt" is risky with double precision113 IF( ABS(zu - zt) < 0.01_wp ) l_zt_equal_zu = .TRUE. ! testing "zu == zt" is risky with double precision 114 114 115 115 U_blk = MAX( 0.5_wp , U_zu ) ! relative wind speed at zu (normally 10m), we don't want to fall under 0.5 m/s … … 143 143 t_zu = t_zt ; q_zu = q_zt 144 144 145 !! * Now starting iteration loop146 DO j_itt =1, nb_itt145 !! ITERATION BLOCK 146 DO j_itt = 1, nb_itt 147 147 ! 148 148 ztmp1 = t_zu - sst ! Updating air/sea differences … … 217 217 Ce = Cx_n10*ztmp2 / ztmp1 ! L&Y 2004 eq. (10c) 218 218 ENDIF 219 ! 220 END DO 221 ! 219 220 END DO !DO j_itt = 1, nb_itt 221 222 222 END SUBROUTINE turb_ncar 223 223 … … 265 265 !! Universal profile stability function for momentum 266 266 !! !! Psis, L&Y 2004 eq. (8c), (8d), (8e) 267 !! 268 !! pzet 0 : stability paramenter, z/L where z is altitude measurement267 !! 268 !! pzeta : stability paramenter, z/L where z is altitude measurement 269 269 !! and L is M-O length 270 270 !! 271 !! ** Author: L. Brodeau, june 2016 / AeroBulk (https://github.com/brodeau/aerobulk/)272 !!---------------------------------------------------------------------------------- 273 REAL(wp), DIMENSION(jpi,jpj) , INTENT(in) :: pzeta274 REAL(wp), DIMENSION(jpi,jpj) :: psi_m275 ! 276 INTEGER :: ji, jj 271 !! ** Author: L. Brodeau, June 2016 / AeroBulk (https://github.com/brodeau/aerobulk/) 272 !!---------------------------------------------------------------------------------- 273 REAL(wp), DIMENSION(jpi,jpj) :: psi_m 274 REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: pzeta 275 ! 276 INTEGER :: ji, jj ! dummy loop indices 277 277 REAL(wp) :: zx2, zx, zstab ! local scalars 278 278 !!---------------------------------------------------------------------------------- 279 !280 279 DO jj = 1, jpj 281 280 DO ji = 1, jpi … … 291 290 END DO 292 291 END DO 293 !294 292 END FUNCTION psi_m 295 293 … … 300 298 !! !! Psis, L&Y 2004 eq. (8c), (8d), (8e) 301 299 !! 302 !! pzet 0 : stability paramenter, z/L where z is altitude measurement300 !! pzeta : stability paramenter, z/L where z is altitude measurement 303 301 !! and L is M-O length 304 302 !! 305 !! ** Author: L. Brodeau, june 2016 / AeroBulk (https://github.com/brodeau/aerobulk/) 306 !!---------------------------------------------------------------------------------- 303 !! ** Author: L. Brodeau, June 2016 / AeroBulk (https://github.com/brodeau/aerobulk/) 304 !!---------------------------------------------------------------------------------- 305 REAL(wp), DIMENSION(jpi,jpj) :: psi_h 307 306 REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: pzeta 308 REAL(wp), DIMENSION(jpi,jpj) :: psi_h 309 ! 310 INTEGER :: ji, jj ! dummy loop indices 307 ! 308 INTEGER :: ji, jj ! dummy loop indices 311 309 REAL(wp) :: zx2, zstab ! local scalars 312 310 !!---------------------------------------------------------------------------------- … … 323 321 END DO 324 322 END DO 325 !326 323 END FUNCTION psi_h 327 324 -
NEMO/branches/2019/dev_r11085_ASINTER-05_Brodeau_Advanced_Bulk/src/OCE/SBC/sbcblk_phy.F90
r11841 r11845 269 269 ! 270 270 INTEGER :: ji, jj ! dummy loop indices 271 REAL(wp) :: zta, zqa, zwa, ziRT ! local scalar 272 !!---------------------------------------------------------------------------------- 273 ! 274 DO jj = 1, jpj 275 DO ji = 1, jpi 276 zta = MAX( ptak(ji,jj), 180._wp) ! prevents screw-up over masked regions where field == 0. 277 zqa = MAX( pqa(ji,jj), 1.E-6_wp) ! " " " 278 ! 279 zwa = zqa / (1. - zqa) ! w is mixing ratio w = q/(1-q) | q = w/(1+w) 280 ziRT = 1._wp/(R_dry*zta) ! 1/RT 281 gamma_moist_vctr(ji,jj) = grav * ( 1._wp + rLevap*zwa*ziRT ) / ( rCp_dry + rLevap*rLevap*zwa*reps0*ziRT/zta ) 282 END DO 283 END DO 284 ! 271 !!---------------------------------------------------------------------------------- 272 DO jj = 1, jpj 273 DO ji = 1, jpi 274 gamma_moist_vctr(ji,jj) = gamma_moist_sclr( ptak(ji,jj), pqa(ji,jj) ) 275 END DO 276 END DO 285 277 END FUNCTION gamma_moist_vctr 286 278
Note: See TracChangeset
for help on using the changeset viewer.