Changeset 1025


Ignore:
Timestamp:
2008-05-30T13:26:09+02:00 (13 years ago)
Author:
cetlod
Message:

adding wind speed module variable, see ticket 172

Location:
trunk/NEMO/OPA_SRC/SBC
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/OPA_SRC/SBC/sbcana.F90

    r1000 r1025  
    6666      !!---------------------------------------------------------------------- 
    6767      INTEGER, INTENT(in) ::   kt       ! ocean time step 
    68       ! 
     68      !! 
    6969      INTEGER             ::   ji, jj          ! dummy loop indices 
    7070      REAL(wp)            ::   zfacto          ! local scalar 
    7171      REAL(wp)            ::   ztx, zty, ztau  ! local scalar 
     72      !! 
     73      NAMELIST/namsbc_ana/ nn_tau000, rn_utau0, rn_vtau0, rn_qns0, rn_qsr0, rn_emp0 
    7274      !!--------------------------------------------------------------------- 
    73       NAMELIST/namsbc_ana/ nn_tau000, rn_utau0, rn_vtau0, rn_qns0, rn_qsr0, rn_emp0 
    7475      ! 
    7576      IF( kt == nit000 ) THEN 
     
    7778         REWIND ( numnam )                   ! Read Namelist namsbc : surface fluxes 
    7879         READ   ( numnam, namsbc_ana ) 
    79  
     80         ! 
    8081         IF(lwp) WRITE(numout,*)' ' 
    8182         IF(lwp) WRITE(numout,*)' sbc_ana : Constant surface fluxes read in namsbc_ana namelist' 
     
    8788         IF(lwp) WRITE(numout,*)'              solar heat flux        rn_qsr0   = ', rn_qsr0  , ' W/m2' 
    8889         IF(lwp) WRITE(numout,*)'              net heat flux          rn_emp0   = ', rn_emp0  , ' Kg/m2/s' 
    89  
     90         ! 
    9091         nn_tau000 = MAX( nn_tau000, 1 )   ! must be >= 1 
    9192         qns   (:,:) = rn_qns0 
     
    9798    
    9899      ! Increase the surface stress to its nominal value during the first nn_tau000 time-steps 
    99           
    100100      IF( kt <= nn_tau000 ) THEN 
    101101         zfacto = 0.5 * (  1. - COS( rpi * FLOAT( kt ) / FLOAT( nn_tau000 ) )  ) 
     
    103103         vtau(:,:) = zfacto * rn_vtau0 
    104104      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. ) 
    105119      ! 
    106     
    107       ! Estimation of wind speed as a function of wind stress 
    108 !CDIR NOVERRCHK 
    109       DO jj = 1, jpj 
    110 !CDIR NOVERRCHK 
    111          DO ji = 1, jpi 
    112             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          ENDDO 
    117       ENDDO 
    118  
    119120   END SUBROUTINE sbc_ana 
    120121 
     
    151152      REAL(wp) ::   zcos_sais1, zcos_sais2, ztrp, zconv, t_star 
    152153      REAL(wp) ::   zsumemp, zsurf 
    153       REAL(wp) ::   ztx, zty 
     154      REAL(wp) ::   ztx, zty, zfacto 
    154155      !!--------------------------------------------------------------------- 
    155156          
     
    268269      END DO 
    269270 
    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 ) 
    271273!CDIR NOVERRCHK 
    272       DO jj = 1, jpj 
     274      DO jj = 2, jpjm1 
    273275!CDIR NOVERRCHK 
    274          DO ji = 1, jpi 
    275             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) 
    277279            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. ) 
    281284 
    282285      ! ---------------------------------- ! 
  • trunk/NEMO/OPA_SRC/SBC/sbcblk_core.F90

    r1000 r1025  
    227227      REAL(wp) ::   zcoef_qsatw 
    228228      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 | ) 
    230229      REAL(wp), DIMENSION(jpi,jpj) ::   zqsatw            ! specific humidity at pst 
    231230      REAL(wp), DIMENSION(jpi,jpj) ::   zqlw, zqsb        ! long wave and sensible heat fluxes 
     
    247246      !      0   Wind components and module at T-point relative to the moving ocean   ! 
    248247      ! ----------------------------------------------------------------------------- ! 
    249  
    250       ! Store the wind speed U10m 
    251 !CDIR NOVERRCHK 
    252 !CDIR COLLAPSE 
    253       DO jj = 1, jpj 
    254          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          ENDDO 
    258       ENDDO 
    259248 
    260249      ! ... components ( U10m - U_oce ) at T-point (unmasked) 
     
    275264!CDIR NOVERRCHK 
    276265!CDIR COLLAPSE 
    277       zwind_speed_t(:,:) = SQRT(  zwnd_i(:,:) * zwnd_i(:,:)   & 
    278          &                      + zwnd_j(:,:) * zwnd_j(:,:)  ) * tmask(:,:,1) 
     266      wndm(:,:) = SQRT(  zwnd_i(:,:) * zwnd_i(:,:)   & 
     267         &             + zwnd_j(:,:) * zwnd_j(:,:)  ) * tmask(:,:,1) 
    279268 
    280269      ! ----------------------------------------------------------------------------- ! 
     
    300289      IF( ln_2m ) THEN 
    301290         !! 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                   ) 
    305295      ELSE 
    306296         !! If air temp. and spec. hum. are given at same height than wind (10m) : 
    307297!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  (:,:) ) 
    311301!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    ) 
    315305      ENDIF 
    316306 
    317307      ! ... utau, vtau at U- and V_points, resp. 
    318308      !     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(:,:) 
    321311      DO jj = 1, jpjm1 
    322312         DO ji = 1, fs_jpim1 
     
    332322      IF( ln_2m ) THEN 
    333323         ! 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(:,:) )   ! Evaporation 
    335          zqsb (:,:) =            rhoa*cpa*Ch(:,:)*( zst   (:,:) - zt_zu(:,:) ) * zwind_speed_t(:,:)     ! Sensible Heat 
     324         zevap(:,:) = MAX( 0.e0, rhoa    *Ce(:,:)*( zqsatw(:,:) - zq_zu(:,:) ) * wndm(:,:) )   ! Evaporation 
     325         zqsb (:,:) =            rhoa*cpa*Ch(:,:)*( zst   (:,:) - zt_zu(:,:) ) * wndm(:,:)     ! Sensible Heat 
    336326      ELSE 
    337327!CDIR COLLAPSE 
    338          zevap(:,:) = MAX( 0.e0, rhoa    *Ce(:,:)*( zqsatw(:,:) - sf(jp_humi)%fnow(:,:) ) * zwind_speed_t(:,:) )   ! Evaporation 
    339 !CDIR COLLAPSE 
    340          zqsb (:,:) =            rhoa*cpa*Ch(:,:)*( zst   (:,:) - sf(jp_tair)%fnow(:,:) ) * zwind_speed_t(:,:)     ! Sensible Heat 
     328         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 
    341331      ENDIF 
    342332!CDIR COLLAPSE 
     
    344334 
    345335      IF(ln_ctl) THEN 
    346          CALL prt_ctl( tab2d_1=zqla   , clinfo1=' blk_oce_core: zqla   : ', tab2d_2=Ce , clinfo2=' Ce  : ' ) 
    347          CALL prt_ctl( tab2d_1=zqsb   , clinfo1=' blk_oce_core: zqsb   : ', tab2d_2=Ch , clinfo2=' Ch  : ' ) 
    348          CALL prt_ctl( tab2d_1=zqlw   , clinfo1=' blk_oce_core: zqlw   : ', tab2d_2=qsr, clinfo2=' qsr : ' ) 
    349          CALL prt_ctl( tab2d_1=zqsatw , clinfo1=' blk_oce_core: zqsatw : ', tab2d_2=zst, clinfo2=' zst : ' ) 
    350          CALL prt_ctl( tab2d_1=utau   , clinfo1=' blk_oce_core: utau   : ', mask1=umask,   & 
    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    , clinfo1=' blk_oce_core: 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    : ') 
    354344      ENDIF 
    355345        
  • trunk/NEMO/OPA_SRC/SBC/sbcflx.F90

    r1000 r1025  
    9999      INTEGER  ::   ierror       ! return error code 
    100100      REAL(wp) ::   zfact        ! temporary scalar 
    101       REAL(wp) ::   ztx, zty, ztau 
     101      REAL(wp) ::   ztx, zty, ztau, zcoef 
    102102      !! 
    103103      CHARACTER(len=100) ::  cn_dir                               ! Root directory for location of flx files 
     
    183183      END DO 
    184184 
    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 )  
    186187!CDIR NOVERRCHK 
    187       DO jj = 1, jpj 
     188      DO jj = 2, jpjm1 
    188189!CDIR NOVERRCHK 
    189          DO ji = 1, jpi 
    190             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)  
    192193            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. ) 
    196198 
    197199      ! control print (if less than 100 time-step asked) 
Note: See TracChangeset for help on using the changeset viewer.