Changeset 1025
- Timestamp:
- 2008-05-30T13:26:09+02:00 (16 years ago)
- Location:
- trunk/NEMO/OPA_SRC/SBC
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/OPA_SRC/SBC/sbcana.F90
r1000 r1025 66 66 !!---------------------------------------------------------------------- 67 67 INTEGER, INTENT(in) :: kt ! ocean time step 68 ! 68 !! 69 69 INTEGER :: ji, jj ! dummy loop indices 70 70 REAL(wp) :: zfacto ! local scalar 71 71 REAL(wp) :: ztx, zty, ztau ! local scalar 72 !! 73 NAMELIST/namsbc_ana/ nn_tau000, rn_utau0, rn_vtau0, rn_qns0, rn_qsr0, rn_emp0 72 74 !!--------------------------------------------------------------------- 73 NAMELIST/namsbc_ana/ nn_tau000, rn_utau0, rn_vtau0, rn_qns0, rn_qsr0, rn_emp074 75 ! 75 76 IF( kt == nit000 ) THEN … … 77 78 REWIND ( numnam ) ! Read Namelist namsbc : surface fluxes 78 79 READ ( numnam, namsbc_ana ) 79 80 ! 80 81 IF(lwp) WRITE(numout,*)' ' 81 82 IF(lwp) WRITE(numout,*)' sbc_ana : Constant surface fluxes read in namsbc_ana namelist' … … 87 88 IF(lwp) WRITE(numout,*)' solar heat flux rn_qsr0 = ', rn_qsr0 , ' W/m2' 88 89 IF(lwp) WRITE(numout,*)' net heat flux rn_emp0 = ', rn_emp0 , ' Kg/m2/s' 89 90 ! 90 91 nn_tau000 = MAX( nn_tau000, 1 ) ! must be >= 1 91 92 qns (:,:) = rn_qns0 … … 97 98 98 99 ! Increase the surface stress to its nominal value during the first nn_tau000 time-steps 99 100 100 IF( kt <= nn_tau000 ) THEN 101 101 zfacto = 0.5 * ( 1. - COS( rpi * FLOAT( kt ) / FLOAT( nn_tau000 ) ) ) … … 103 103 vtau(:,:) = zfacto * rn_vtau0 104 104 ENDIF 105 106 ! Estimation of wind speed as a function of wind stress ( |tau|=rhoa*Cd*|U|^2 ) 107 zfacto = 0.5 / ( rhoa * cdrag ) 108 !CDIR NOVERRCHK 109 DO jj = 2, jpjm1 110 !CDIR NOVERRCHK 111 DO ji = fs_2, fs_jpim1 ! vect. opt. 112 ztx = utau(ji-1,jj ) + utau(ji,jj) 113 zty = vtau(ji ,jj-1) + vtau(ji,jj) 114 ztau = SQRT( ztx * ztx + zty * zty ) 115 wndm(ji,jj) = SQRT ( ztau * zfacto ) * tmask(ji,jj,1) 116 END DO 117 END DO 118 CALL lbc_lnk( wndm(:,:) , 'T', 1. ) 105 119 ! 106 107 ! Estimation of wind speed as a function of wind stress108 !CDIR NOVERRCHK109 DO jj = 1, jpj110 !CDIR NOVERRCHK111 DO ji = 1, jpi112 ztx = utau(ji,jj) * umask(ji,jj,1)113 zty = vtau(ji,jj) * vmask(ji,jj,1)114 ztau = SQRT( ztx * ztx + zty * zty )115 wndm(ji,jj) = SQRT ( ztau / ( rhoa * cdrag ) )116 ENDDO117 ENDDO118 119 120 END SUBROUTINE sbc_ana 120 121 … … 151 152 REAL(wp) :: zcos_sais1, zcos_sais2, ztrp, zconv, t_star 152 153 REAL(wp) :: zsumemp, zsurf 153 REAL(wp) :: ztx, zty 154 REAL(wp) :: ztx, zty, zfacto 154 155 !!--------------------------------------------------------------------- 155 156 … … 268 269 END DO 269 270 270 ! Estimation of wind speed as a function of wind stress 271 ! Estimation of wind speed as a function of wind stress ( |tau|=rhoa*Cd*|U|^2 ) 272 zfacto = 0.5 / ( rhoa * cdrag ) 271 273 !CDIR NOVERRCHK 272 DO jj = 1, jpj274 DO jj = 2, jpjm1 273 275 !CDIR NOVERRCHK 274 DO ji = 1, jpi275 ztx = utau(ji,jj) * umask(ji,jj,1)276 zty = vtau(ji,jj) * vmask(ji,jj,1)276 DO ji = fs_2, fs_jpim1 ! vect. opt. 277 ztx = utau(ji-1,jj ) + utau(ji,jj) 278 zty = vtau(ji ,jj-1) + vtau(ji,jj) 277 279 ztau = SQRT( ztx * ztx + zty * zty ) 278 wndm(ji,jj) = SQRT ( ztau / ( rhoa * cdrag ) ) 279 ENDDO 280 ENDDO 280 wndm(ji,jj) = SQRT ( ztau * zfacto ) * tmask(ji,jj,1) 281 END DO 282 END DO 283 CALL lbc_lnk( wndm(:,:) , 'T', 1. ) 281 284 282 285 ! ---------------------------------- ! -
trunk/NEMO/OPA_SRC/SBC/sbcblk_core.F90
r1000 r1025 227 227 REAL(wp) :: zcoef_qsatw 228 228 REAL(wp), DIMENSION(jpi,jpj) :: zwnd_i, zwnd_j ! wind speed components at T-point 229 REAL(wp), DIMENSION(jpi,jpj) :: zwind_speed_t ! wind speed module at T-point ( = | U10m - Uoce | )230 229 REAL(wp), DIMENSION(jpi,jpj) :: zqsatw ! specific humidity at pst 231 230 REAL(wp), DIMENSION(jpi,jpj) :: zqlw, zqsb ! long wave and sensible heat fluxes … … 247 246 ! 0 Wind components and module at T-point relative to the moving ocean ! 248 247 ! ----------------------------------------------------------------------------- ! 249 250 ! Store the wind speed U10m251 !CDIR NOVERRCHK252 !CDIR COLLAPSE253 DO jj = 1, jpj254 DO ji = 1, jpi ! vect. opt.255 wndm(ji,jj) = SQRT( sf(jp_wndi)%fnow(ji,jj) * sf(jp_wndi)%fnow(ji,jj) &256 & + sf(jp_wndj)%fnow(ji,jj) * sf(jp_wndj)%fnow(ji,jj) )257 ENDDO258 ENDDO259 248 260 249 ! ... components ( U10m - U_oce ) at T-point (unmasked) … … 275 264 !CDIR NOVERRCHK 276 265 !CDIR COLLAPSE 277 zwind_speed_t(:,:) = SQRT( zwnd_i(:,:) * zwnd_i(:,:) &278 & 266 wndm(:,:) = SQRT( zwnd_i(:,:) * zwnd_i(:,:) & 267 & + zwnd_j(:,:) * zwnd_j(:,:) ) * tmask(:,:,1) 279 268 280 269 ! ----------------------------------------------------------------------------- ! … … 300 289 IF( ln_2m ) THEN 301 290 !! If air temp. and spec. hum. are given at different height (2m) than wind (10m) : 302 CALL TURB_CORE_2Z(2.,10., zst , sf(jp_tair)%fnow, & 303 & zqsatw, sf(jp_humi)%fnow, zwind_speed_t, & 304 & Cd, Ch, Ce, zt_zu, zq_zu ) 291 CALL TURB_CORE_2Z(2.,10., zst , sf(jp_tair)%fnow, & 292 & zqsatw, sf(jp_humi)%fnow, wndm, & 293 & Cd , Ch , Ce , & 294 & zt_zu , zq_zu ) 305 295 ELSE 306 296 !! If air temp. and spec. hum. are given at same height than wind (10m) : 307 297 !gm bug? at the compiling phase, add a copy in temporary arrays... ==> check perf 308 ! CALL TURB_CORE_1Z( 10., zst (:,:), sf(jp_tair)%fnow(:,:), 309 ! & zqsatw(:,:), sf(jp_humi)%fnow(:,:), zwind_speed_t(:,:), &310 ! & Cd (:,:), Ch(:,:), Ce(:,:))298 ! CALL TURB_CORE_1Z( 10., zst (:,:), sf(jp_tair)%fnow(:,:), & 299 ! & zqsatw(:,:), sf(jp_humi)%fnow(:,:), wndm(:,:), & 300 ! & Cd (:,:), Ch (:,:), Ce (:,:) ) 311 301 !gm bug 312 CALL TURB_CORE_1Z( 10., zst , sf(jp_tair)%fnow, 313 & zqsatw, sf(jp_humi)%fnow, zwind_speed_t, &314 & Cd , Ch, Ce)302 CALL TURB_CORE_1Z( 10., zst , sf(jp_tair)%fnow, & 303 & zqsatw, sf(jp_humi)%fnow, wndm, & 304 & Cd , Ch , Ce ) 315 305 ENDIF 316 306 317 307 ! ... utau, vtau at U- and V_points, resp. 318 308 ! Note the use of 0.5*(2-umask) in order to unmask the stress along coastlines 319 zwnd_i(:,:) = rhoa * zwind_speed_t(:,:) * Cd(:,:) * zwnd_i(:,:)320 zwnd_j(:,:) = rhoa * zwind_speed_t(:,:) * Cd(:,:) * zwnd_j(:,:)309 zwnd_i(:,:) = rhoa * wndm(:,:) * Cd(:,:) * zwnd_i(:,:) 310 zwnd_j(:,:) = rhoa * wndm(:,:) * Cd(:,:) * zwnd_j(:,:) 321 311 DO jj = 1, jpjm1 322 312 DO ji = 1, fs_jpim1 … … 332 322 IF( ln_2m ) THEN 333 323 ! Values of temp. and hum. adjusted to 10m must be used instead of 2m values 334 zevap(:,:) = MAX( 0.e0, rhoa *Ce(:,:)*( zqsatw(:,:) - zq_zu(:,:) ) * zwind_speed_t(:,:) ) ! Evaporation335 zqsb (:,:) = rhoa*cpa*Ch(:,:)*( zst (:,:) - zt_zu(:,:) ) * zwind_speed_t(:,:) ! Sensible Heat324 zevap(:,:) = MAX( 0.e0, rhoa *Ce(:,:)*( zqsatw(:,:) - zq_zu(:,:) ) * wndm(:,:) ) ! Evaporation 325 zqsb (:,:) = rhoa*cpa*Ch(:,:)*( zst (:,:) - zt_zu(:,:) ) * wndm(:,:) ! Sensible Heat 336 326 ELSE 337 327 !CDIR COLLAPSE 338 zevap(:,:) = MAX( 0.e0, rhoa *Ce(:,:)*( zqsatw(:,:) - sf(jp_humi)%fnow(:,:) ) * zwind_speed_t(:,:) ) ! Evaporation339 !CDIR COLLAPSE 340 zqsb (:,:) = rhoa*cpa*Ch(:,:)*( zst (:,:) - sf(jp_tair)%fnow(:,:) ) * zwind_speed_t(:,:) ! Sensible Heat328 zevap(:,:) = MAX( 0.e0, rhoa *Ce(:,:)*( zqsatw(:,:) - sf(jp_humi)%fnow(:,:) ) * wndm(:,:) ) ! Evaporation 329 !CDIR COLLAPSE 330 zqsb (:,:) = rhoa*cpa*Ch(:,:)*( zst (:,:) - sf(jp_tair)%fnow(:,:) ) * wndm(:,:) ! Sensible Heat 341 331 ENDIF 342 332 !CDIR COLLAPSE … … 344 334 345 335 IF(ln_ctl) THEN 346 CALL prt_ctl( tab2d_1=zqla 347 CALL prt_ctl( tab2d_1=zqsb 348 CALL prt_ctl( tab2d_1=zqlw 349 CALL prt_ctl( tab2d_1=zqsatw 350 CALL prt_ctl( tab2d_1=utau 351 & tab2d_2=vtau , clinfo2=' vtau : ', mask2=vmask )352 CALL prt_ctl( tab2d_1= zwind_speed_t, clinfo1=' blk_oce_core: zwind_speed_t: ')353 CALL prt_ctl( tab2d_1=zst 336 CALL prt_ctl( tab2d_1=zqla , clinfo1=' blk_oce_core: zqla : ', tab2d_2=Ce , clinfo2=' Ce : ' ) 337 CALL prt_ctl( tab2d_1=zqsb , clinfo1=' blk_oce_core: zqsb : ', tab2d_2=Ch , clinfo2=' Ch : ' ) 338 CALL prt_ctl( tab2d_1=zqlw , clinfo1=' blk_oce_core: zqlw : ', tab2d_2=qsr, clinfo2=' qsr : ' ) 339 CALL prt_ctl( tab2d_1=zqsatw, clinfo1=' blk_oce_core: zqsatw : ', tab2d_2=zst, clinfo2=' zst : ' ) 340 CALL prt_ctl( tab2d_1=utau , clinfo1=' blk_oce_core: utau : ', mask1=umask, & 341 & tab2d_2=vtau , clinfo2= ' vtau : ' , mask2=vmask ) 342 CALL prt_ctl( tab2d_1=wndm , clinfo1=' blk_oce_core: wndm : ') 343 CALL prt_ctl( tab2d_1=zst , clinfo1=' blk_oce_core: zst : ') 354 344 ENDIF 355 345 -
trunk/NEMO/OPA_SRC/SBC/sbcflx.F90
r1000 r1025 99 99 INTEGER :: ierror ! return error code 100 100 REAL(wp) :: zfact ! temporary scalar 101 REAL(wp) :: ztx, zty, ztau 101 REAL(wp) :: ztx, zty, ztau, zcoef 102 102 !! 103 103 CHARACTER(len=100) :: cn_dir ! Root directory for location of flx files … … 183 183 END DO 184 184 185 ! Estimation of wind speed as a function of wind stress 185 ! Estimation of wind speed as a function of wind stress ( |tau|=rhoa*Cd*|U|^2 ) 186 zcoef = 0.5 / ( rhoa * cdrag ) 186 187 !CDIR NOVERRCHK 187 DO jj = 1, jpj188 DO jj = 2, jpjm1 188 189 !CDIR NOVERRCHK 189 DO ji = 1, jpi190 ztx = utau(ji,jj) * umask(ji,jj,1)191 zty = vtau(ji,jj) * vmask(ji,jj,1)190 DO ji = fs_2, fs_jpim1 ! vect. opt. 191 ztx = utau(ji-1,jj ) + utau(ji,jj) 192 zty = vtau(ji ,jj-1) + vtau(ji,jj) 192 193 ztau = SQRT( ztx * ztx + zty * zty ) 193 wndm(ji,jj) = SQRT ( ztau / ( rhoa * cdrag ) ) 194 ENDDO 195 ENDDO 194 wndm(ji,jj) = SQRT ( ztau * zcoef ) * tmask(ji,jj,1) 195 END DO 196 END DO 197 CALL lbc_lnk( wndm(:,:) , 'T', 1. ) 196 198 197 199 ! control print (if less than 100 time-step asked)
Note: See TracChangeset
for help on using the changeset viewer.