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 1695 for trunk – NEMO

Changeset 1695 for trunk


Ignore:
Timestamp:
2009-10-30T17:42:38+01:00 (15 years ago)
Author:
smasson
Message:

wind stress module directly at T-point, see ticket:577

Location:
trunk/NEMO
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/LIM_SRC_2/limsbc_2.F90

    r1694 r1695  
    9090      REAL(wp), DIMENSION(jpi,jpj,1) ::   zalb     ! albedo of ice under overcast sky 
    9191      REAL(wp), DIMENSION(jpi,jpj,1) ::   zalbp    ! albedo of ice under clear sky 
    92       REAL(wp) ::   zsang, zmod, zfm 
    93       REAL(wp), DIMENSION(jpi,jpj) ::   ztio_u, ztio_v   ! ocean stress below sea-ice 
     92      REAL(wp) ::   zsang, zmod, zztmp, zfm 
     93      REAL(wp), DIMENSION(jpi,jpj) ::   ztio_u, ztio_v   ! component of ocean stress below sea-ice at I-point 
     94      REAL(wp), DIMENSION(jpi,jpj) ::   ztiomi           ! module    of ocean stress below sea-ice at I-point 
    9495      REAL(wp), DIMENSION(jpi,jpj) ::   zqnsoce          ! save qns before its modification by ice model 
    9596 
     
    249250               zu_io  = u_ice(ji,jj) - u_oce(ji,jj) 
    250251               zv_io  = v_ice(ji,jj) - v_oce(ji,jj) 
    251                zmod   = rhoco * SQRT( zu_io * zu_io + zv_io * zv_io ) 
    252                ! ... ice stress over ocean with a ice-ocean rotation angle (at I-point) 
    253                ztio_u(ji,jj) = zmod * ( cangvg * zu_io - zsang * zv_io ) 
    254                ztio_v(ji,jj) = zmod * ( cangvg * zv_io + zsang * zu_io ) 
     252               zmod   = SQRT( zu_io * zu_io + zv_io * zv_io ) 
     253               zztmp  = rhoco * zmod 
     254               ! ... components of ice stress over ocean with a ice-ocean rotation angle (at I-point) 
     255               ztio_u(ji,jj) = zztmp * ( cangvg * zu_io - zsang * zv_io ) 
     256               ztio_v(ji,jj) = zztmp * ( cangvg * zv_io + zsang * zu_io ) 
     257               ! ... module of ice stress over ocean (at I-point) 
     258               ztiomi(ji,jj) = zztmp * zmod 
    255259               !  
    256260            END DO 
     
    259263         DO jj = 2, jpjm1 
    260264            DO ji = 2, jpim1   ! NO vector opt. 
    261                ! ... ice-cover wheighted ice-ocean stress at U and V-points  (from I-point values) 
     265               ! ... components of ice-ocean stress at U and V-points  (from I-point values) 
    262266               zutau  = 0.5 * ( ztio_u(ji+1,jj) + ztio_u(ji+1,jj+1) ) 
    263267               zvtau  = 0.5 * ( ztio_v(ji,jj+1) + ztio_v(ji+1,jj+1) ) 
    264268               ! ... open-ocean (lead) fraction at U- & V-points (from T-point values) 
    265                zfrldu = 0.5 * ( frld (ji,jj) + frld (ji+1,jj  ) ) 
    266                zfrldv = 0.5 * ( frld (ji,jj) + frld (ji  ,jj+1) ) 
    267                ! update surface ocean stress 
     269               zfrldu = 0.5 * ( frld(ji,jj) + frld(ji+1,jj  ) ) 
     270               zfrldv = 0.5 * ( frld(ji,jj) + frld(ji  ,jj+1) ) 
     271               ! ... update components of surface ocean stress (ice-cover wheighted) 
    268272               utau(ji,jj) = zfrldu * utau(ji,jj) + ( 1. - zfrldu ) * zutau 
    269273               vtau(ji,jj) = zfrldv * vtau(ji,jj) + ( 1. - zfrldv ) * zvtau 
     274               ! ... module of ice-ocean stress at T-points (from I-point values) 
     275               zztmp = 0.25 * ( ztiomi(ji,jj) + ztiomi(ji+1,jj) + ztiomi(ji,jj+1) + ztiomi(ji+1,jj+1) ) 
     276               ! ... update module of surface ocean stress (ice-cover wheighted) 
     277               taum(ji,jj) = frld(ji,jj) * taum(ji,jj) + ( 1. - frld(ji,jj) ) * zztmp 
    270278               ! 
    271279            END DO 
    272280         END DO 
    273281 
    274          ! boundary condition on the stress (utau,vtau) 
     282         ! boundary condition on the stress (utau,vtau,taum) 
    275283         CALL lbc_lnk( utau, 'U', -1. ) 
    276284         CALL lbc_lnk( vtau, 'V', -1. ) 
     285         CALL lbc_lnk( taum, 'T',  1. ) 
    277286 
    278287      ENDIF 
  • trunk/NEMO/LIM_SRC_3/limsbc.F90

    r1684 r1695  
    8080      REAL(wp) ::   zfrldu, zat_u, zu_ico, zutaui, zu_u, zu_ij, zu_im1j   ! temporary scalar 
    8181      REAL(wp) ::   zfrldv, zat_v, zv_ico, zvtaui, zv_v, zv_ij, zv_ijm1   !    -         - 
    82       REAL(wp) ::   zsang                                                 !    -         - 
     82      REAL(wp) ::   zsang, zztmp                                          !    -         - 
    8383      REAL(wp), DIMENSION(jpi,jpj) ::   ztio_u, ztio_v   ! ocean stress below sea-ice 
    8484#if defined key_coupled     
     
    9494      ENDIF 
    9595 
    96       SELECT CASE( kcpl ) 
    97          !                                        !--------------------------------! 
    98       CASE( 0 )                                   !  LIM 3 old stress computation  !  (at ice timestep only) 
    99          !                                        !--------------------------------!  
    100          DO jj = 2, jpjm1                             !* modulus of the ice-ocean velocity 
     96      IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN 
     97!CDIR NOVERRCHK 
     98         DO jj = 2, jpjm1                         !* modulus of the ice-ocean velocity 
     99!CDIR NOVERRCHK 
    101100            DO ji = fs_2, fs_jpim1 
    102101               zu_ij   = u_ice(ji  ,jj) - ssu_m(ji  ,jj)               ! (i  ,j) 
     
    104103               zv_ij   = v_ice(ji,jj  ) - ssv_m(ji,jj  )               ! (i,j  ) 
    105104               zv_ijm1 = v_ice(ji,jj-1) - ssv_m(ji,jj-1)               ! (i,j-1) 
    106                tmod_io(ji,jj) = SQRT(  0.5 * ( zu_ij * zu_ij + zu_im1j * zu_im1j   & 
    107                   &                          + zv_ij * zv_ij + zv_ijm1 * zv_ijm1  ) ) 
     105               zztmp =  0.5 * ( zu_ij * zu_ij + zu_im1j * zu_im1j   &  ! mean of the square values instead 
     106                  &           + zv_ij * zv_ij + zv_ijm1 * zv_ijm1 )    ! of the square of the mean values... 
     107               ! WARNING, here we make an approximation for case 1 and 2: taum is not computed at each time 
     108               ! step but only every nn_fsbc time step. This avoid mutiple avarage to pass from T -> U,V grids 
     109               ! and next from U,V grids to T grid. Taum is used in tke, which should not be too sensitive to 
     110               ! this approximaton... 
     111               taum(ji,jj) = ( 1. - at_i(ji,jj) ) * taum(ji,jj) + at_i(ji,jj) * rhoco * zztmp 
     112               tmod_io(ji,jj) = SQRT( zztmp )  
    108113            END DO 
    109114         END DO 
    110          CALL lbc_lnk( tmod_io, 'T', 1. )   ! lateral boundary condition 
    111          ! 
     115         CALL lbc_lnk( taum, 'T', 1. )   ;   CALL lbc_lnk( tmod_io, 'T', 1. ) 
     116      ENDIF 
     117 
     118      SELECT CASE( kcpl ) 
     119         !                                        !--------------------------------! 
     120      CASE( 0 )                                   !  LIM 3 old stress computation  !  (at ice timestep only) 
     121         !                                        !--------------------------------!  
    112122         !                                             !* ice stress over ocean with a ice-ocean rotation angle 
    113123         DO jj = 1, jpjm1 
     
    145155            utau_oce(:,:) = utau(:,:)                 !* save the air-ocean stresses at ice time-step 
    146156            vtau_oce(:,:) = vtau(:,:) 
    147             DO jj = 2, jpjm1                          !* modulus of the ice-ocean velocity 
    148                DO ji = fs_2, fs_jpim1 
    149                   zu_ij   = u_ice(ji  ,jj) - ssu_m(ji  ,jj)               ! (i  ,j) 
    150                   zu_im1j = u_ice(ji-1,jj) - ssu_m(ji-1,jj)               ! (i-1,j) 
    151                   zv_ij   = v_ice(ji,jj  ) - ssv_m(ji,jj  )               ! (i,j  ) 
    152                   zv_ijm1 = v_ice(ji,jj-1) - ssv_m(ji,jj-1)               ! (i,j-1) 
    153                   tmod_io(ji,jj) = SQRT( 0.5 * (  zu_ij * zu_ij + zu_im1j * zu_im1j   & 
    154                      &                          + zv_ij * zv_ij + zv_ijm1 * zv_ijm1 ) ) 
    155                END DO 
    156             END DO 
    157             CALL lbc_lnk( tmod_io, 'T', 1. )          ! lateral boundary condition 
    158157         ENDIF 
    159158         ! 
     
    186185            ssu_mb  (:,:) = ssu_m(:,:)               !* save the ice-ocean velocity at ice time-step 
    187186            ssv_mb  (:,:) = ssv_m(:,:) 
    188             DO jj = 2, jpjm1                         !* modulus of the ice-ocean velocity 
    189                DO ji = fs_2, fs_jpim1 
    190                   zu_ij   = u_ice(ji  ,jj) - ssu_m(ji  ,jj)               ! (i  ,j) 
    191                   zu_im1j = u_ice(ji-1,jj) - ssu_m(ji-1,jj)               ! (i-1,j) 
    192                   zv_ij   = v_ice(ji,jj  ) - ssv_m(ji,jj  )               ! (i,j  ) 
    193                   zv_ijm1 = v_ice(ji,jj-1) - ssv_m(ji,jj-1)               ! (i,j-1) 
    194                   tmod_io(ji,jj) = SQRT( 0.5 * ( zu_ij * zu_ij + zu_im1j * zu_im1j   & 
    195                      &                         + zv_ij * zv_ij + zv_ijm1 * zv_ijm1 ) ) 
    196                END DO 
    197             END DO 
    198             CALL lbc_lnk( tmod_io, 'T', 1. ) 
    199187         ENDIF 
    200188         DO jj = 2, jpjm1                            !* ice stress over ocean with a ice-ocean rotation angle 
  • trunk/NEMO/OPA_SRC/SBC/sbc_oce.F90

    r1534 r1695  
    1111   IMPLICIT NONE 
    1212   PRIVATE 
    13     
    14    PUBLIC sbc_tau2wnd   ! compute wind speed based on the wind stress 
    1513    
    1614   !!---------------------------------------------------------------------- 
     
    4139   REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   utau      !: sea surface i-stress (ocean referential)     [N/m2] 
    4240   REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   vtau      !: sea surface j-stress (ocean referential)     [N/m2] 
    43    REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   wndm      !: wind speed module at T-point (=|U10m-Uoce|)  [m/s] 
     41   REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   taum      !: module of sea surface stress (at T-point)    [N/m2]  
     42   REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   wndm      !: wind speed module at T-point (=|U10m-Uoce|)  [m/s] Used only in PISCES 
    4443   REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   qsr       !: sea heat flux:     solar                     [W/m2] 
    4544   REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   qns       !: sea heat flux: non solar                     [W/m2] 
     
    7372   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 
    7473   !!====================================================================== 
    75 CONTAINS 
    76  
    77    SUBROUTINE sbc_tau2wnd 
    78       !!--------------------------------------------------------------------- 
    79       !!                    ***  ROUTINE sbc_tau2wnd  *** 
    80       !!                    
    81       !! ** Purpose : Estimation of wind speed as a function of wind stress    
    82       !! 
    83       !! ** Method  : |tau|=rhoa*Cd*|U|^2 
    84       !!--------------------------------------------------------------------- 
    85       USE dom_oce         ! ocean space and time domain 
    86       USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    87       REAL(wp) ::   zrhoa  = 1.22         ! Air density kg/m3 
    88       REAL(wp) ::   zcdrag = 1.5e-3       ! drag coefficient 
    89       REAL(wp) ::   ztx, zty, ztau, zcoef ! temporary variables 
    90       INTEGER  ::   ji, jj                ! dummy indices 
    91       !! * Substitutions 
    92 #  include "vectopt_loop_substitute.h90" 
    93       !!--------------------------------------------------------------------- 
    94       zcoef = 0.5 / ( zrhoa * zcdrag )  
    95 !CDIR NOVERRCHK 
    96       DO jj = 2, jpjm1 
    97 !CDIR NOVERRCHK 
    98          DO ji = fs_2, fs_jpim1   ! vect. opt. 
    99             ztx = utau(ji-1,jj  ) + utau(ji,jj)  
    100             zty = vtau(ji  ,jj-1) + vtau(ji,jj)  
    101             ztau = SQRT( ztx * ztx + zty * zty ) 
    102             wndm(ji,jj) = SQRT ( ztau * zcoef ) * tmask(ji,jj,1) 
    103          END DO 
    104       END DO 
    105       CALL lbc_lnk( wndm(:,:) , 'T', 1. ) 
    106  
    107    END SUBROUTINE sbc_tau2wnd 
    10874 
    10975END MODULE sbc_oce 
  • trunk/NEMO/OPA_SRC/SBC/sbcana.F90

    r1559 r1695  
    6161      !! 
    6262      !! ** Action  : - set the ocean surface boundary condition, i.e.   
    63       !!                   utau, vtau, qns, qsr, emp, emps 
     63      !!                   utau, vtau, taum, wndm, qns, qsr, emp, emps 
    6464      !!---------------------------------------------------------------------- 
    6565      INTEGER, INTENT(in) ::   kt       ! ocean time step 
    6666      !! 
    67       REAL(wp)            ::   zfacto          ! local scalar 
     67      REAL(wp)            ::   zfacto                ! local scalar 
     68      REAL(wp)            ::   zrhoa  = 1.22         ! Air density kg/m3 
     69      REAL(wp)            ::   zcdrag = 1.5e-3       ! drag coefficient 
     70      REAL(wp)            ::   ztx, zty, zmod, zcoef ! temporary variables 
    6871      !! 
    6972      NAMELIST/namsbc_ana/ nn_tau000, rn_utau0, rn_vtau0, rn_qns0, rn_qsr0, rn_emp0 
     
    9699      IF( kt <= nn_tau000 ) THEN 
    97100         zfacto = 0.5 * (  1. - COS( rpi * FLOAT( kt ) / FLOAT( nn_tau000 ) )  ) 
    98          utau(:,:) = zfacto * rn_utau0 
    99          vtau(:,:) = zfacto * rn_vtau0 
     101         zcoef = 1. / ( zrhoa * zcdrag )  
     102         ztx = zfacto * rn_utau0 
     103         zty = zfacto * rn_vtau0 
     104         zmod = SQRT( ztx * ztx + zty * zty ) 
     105         utau(:,:) = ztx 
     106         vtau(:,:) = zty 
     107         taum(:,:) = zmod 
     108         zmod = SQRT( zmod * zcoef ) 
     109         wndm(:,:) = zmod 
    100110      ENDIF 
    101  
    102       CALL sbc_tau2wnd      ! Estimation of wind speed as a function of wind stress ( |tau|=rhoa*Cd*|U|^2 ) 
    103111      ! 
    104112   END SUBROUTINE sbc_ana 
     
    116124      !! 
    117125      !! ** Action  : - set the ocean surface boundary condition, i.e.    
    118       !!                   utau, vtau, qns, qsr, emp, emps 
     126      !!                   utau, vtau, taum, wndm, qns, qsr, emp, emps 
    119127      !! 
    120128      !! Reference : Hazeleger, W., and S. Drijfhout, JPO, 30, 677-695, 2000. 
     
    136144      REAL(wp) ::   zcos_sais1, zcos_sais2, ztrp, zconv, t_star 
    137145      REAL(wp) ::   zsumemp, zsurf 
     146      REAL(wp) ::   zrhoa  = 1.22         ! Air density kg/m3 
     147      REAL(wp) ::   zcdrag = 1.5e-3       ! drag coefficient 
     148      REAL(wp) ::   ztx, zty, zmod, zcoef ! temporary variables 
    138149      !!--------------------------------------------------------------------- 
    139150          
     
    252263      END DO 
    253264 
    254       ! Estimation of wind speed as a function of wind stress ( |tau|=rhoa*Cd*|U|^2 ) 
    255       CALL sbc_tau2wnd 
     265      ! module of wind stress and wind speed at T-point 
     266      zcoef = 1. / ( zrhoa * zcdrag )  
     267!CDIR NOVERRCHK 
     268      DO jj = 2, jpjm1 
     269!CDIR NOVERRCHK 
     270         DO ji = fs_2, fs_jpim1   ! vect. opt. 
     271            ztx = utau(ji-1,jj  ) + utau(ji,jj)  
     272            zty = vtau(ji  ,jj-1) + vtau(ji,jj)  
     273            zmod = 0.5 * SQRT( ztx * ztx + zty * zty ) 
     274            taum(ji,jj) = zmod 
     275            wndm(ji,jj) = SQRT( zmod * zcoef ) 
     276         END DO 
     277      END DO 
     278      CALL lbc_lnk( taum(:,:), 'T', 1. )   ;   CALL lbc_lnk( wndm(:,:), 'T', 1. ) 
    256279 
    257280      ! ---------------------------------- ! 
  • trunk/NEMO/OPA_SRC/SBC/sbcblk_clio.F90

    r1482 r1695  
    4848   INTEGER , PARAMETER ::   jp_vtau = 2           ! index of wind stress (j-component)      (N/m2)    at V-point 
    4949   INTEGER , PARAMETER ::   jp_wndm = 3           ! index of 10m wind module                 (m/s)    at T-point 
    50    INTEGER , PARAMETER ::   jp_humi = 4           ! index of specific humidity               ( % ) 
    51    INTEGER , PARAMETER ::   jp_ccov = 5           ! index of cloud cover                     ( % ) 
     50   INTEGER , PARAMETER ::   jp_humi = 4           ! index of specific humidity               ( - ) 
     51   INTEGER , PARAMETER ::   jp_ccov = 5           ! index of cloud cover                     ( - ) 
    5252   INTEGER , PARAMETER ::   jp_tair = 6           ! index of 10m air temperature             (Kelvin) 
    5353   INTEGER , PARAMETER ::   jp_prec = 7           ! index of total precipitation (rain+snow) (Kg/m2/s) 
     
    9797      !!      (momentum, heat, freshwater and runoff)  
    9898      !! 
    99       !! ** Method  :   READ each fluxes in NetCDF files 
    100       !!      The i-component of the stress                utau   (N/m2) 
    101       !!      The j-component of the stress                vtau   (N/m2) 
    102       !!      the net downward heat flux                   qtot   (watt/m2) 
    103       !!      the net downward radiative flux              qsr    (watt/m2) 
    104       !!      the net upward water (evapo - precip)        emp    (kg/m2/s) 
    105       !!                Assumptions made: 
    106       !!       - each file content an entire year (read record, not the time axis) 
    107       !!       - first and last record are part of the previous and next year 
    108       !!         (useful for time interpolation) 
    109       !!       - the number of records is 2 + 365*24 / freqh(jf) 
    110       !!         or 366 in leap year case 
     99      !! ** Method  : (1) READ each fluxes in NetCDF files: 
     100      !!      the i-component of the stress                (N/m2) 
     101      !!      the j-component of the stress                (N/m2) 
     102      !!      the 10m wind pseed module                    (m/s) 
     103      !!      the 10m air temperature                      (Kelvin) 
     104      !!      the 10m specific humidity                    (-) 
     105      !!      the cloud cover                              (-) 
     106      !!      the total precipitation (rain+snow)          (Kg/m2/s) 
     107      !!              (2) CALL blk_oce_clio 
    111108      !! 
    112109      !!      C A U T I O N : never mask the surface stress fields 
     
    115112      !! 
    116113      !! ** Action  :   defined at each time-step at the air-sea interface 
    117       !!              - utau  &  vtau   : stress components in geographical ref. 
    118       !!              - qns   &  qsr    : non solar and solar heat fluxes 
    119       !!              - emp             : evap - precip (volume flux) 
    120       !!              - emps            : evap - precip (concentration/dillution) 
     114      !!              - utau, vtau  i- and j-component of the wind stress 
     115      !!              - taum        wind stress module at T-point 
     116      !!              - wndm        10m wind module at T-point 
     117      !!              - qns, qsr    non-slor and solar heat flux 
     118      !!              - emp, emps   evaporation minus precipitation 
    121119      !!---------------------------------------------------------------------- 
    122120      INTEGER, INTENT( in  ) ::   kt   ! ocean time step 
     
    241239      !!  ** Action  :   Fluxes over the ocean: 
    242240      !!               - utau, vtau  i- and j-component of the wind stress 
     241      !!               - taum        wind stress module at T-point 
     242      !!               - wndm        10m wind module at T-point 
    243243      !!               - qns, qsr    non-slor and solar heat flux 
    244244      !!               - emp, emps   evaporation minus precipitation 
     
    259259      REAL(wp) ::   zsst, ztatm, zcco1, zpatm, zcmax, zrmax     !    -         - 
    260260      REAL(wp) ::   zrhoa, zev, zes, zeso, zqatm, zevsqr        !    -         - 
     261      REAL(wp) ::   ztx2, zty2                                  !    -         - 
    261262      !! 
    262263      REAL(wp), DIMENSION(jpi,jpj) ::   zqlw        ! long-wave heat flux over ocean 
     
    277278         END DO 
    278279      END DO 
     280 
     281      !------------------------------------! 
     282      !   wind stress module (taum )       ! 
     283      !------------------------------------! 
     284!CDIR NOVERRCHK 
     285      DO jj = 2, jpjm1 
     286!CDIR NOVERRCHK 
     287         DO ji = fs_2, fs_jpim1   ! vector opt. 
     288            ztx2 = utau(ji-1,jj  ) + utau(ji,jj) 
     289            zty2 = vtau(ji  ,jj-1) + vtau(ji,jj) 
     290            taum(ji,jj) = 0.5 * SQRT( ztx2 * ztx2 + zty2 * zty2 ) 
     291         END DO 
     292      END DO 
     293      CALL lbc_lnk( taum, 'T', 1. ) 
    279294 
    280295      !------------------------------------! 
  • trunk/NEMO/OPA_SRC/SBC/sbcblk_core.F90

    r1601 r1695  
    4646   INTEGER , PARAMETER ::   jp_wndi = 1           ! index of 10m wind velocity (i-component) (m/s)    at T-point 
    4747   INTEGER , PARAMETER ::   jp_wndj = 2           ! index of 10m wind velocity (j-component) (m/s)    at T-point 
    48    INTEGER , PARAMETER ::   jp_humi = 3           ! index of specific humidity               ( % ) 
     48   INTEGER , PARAMETER ::   jp_humi = 3           ! index of specific humidity               ( - ) 
    4949   INTEGER , PARAMETER ::   jp_qsr  = 4           ! index of solar heat                      (W/m2) 
    5050   INTEGER , PARAMETER ::   jp_qlw  = 5           ! index of Long wave                       (W/m2) 
     
    8484      !!      (momentum, heat, freshwater and runoff)  
    8585      !! 
    86       !! ** Method  :   READ each fluxes in NetCDF files 
    87       !!      The i-component of the stress                utau   (N/m2) 
    88       !!      The j-component of the stress                vtau   (N/m2) 
    89       !!      the net downward heat flux                   qtot   (watt/m2) 
    90       !!      the net downward radiative flux              qsr    (watt/m2) 
    91       !!      the net upward water (evapo - precip)        emp    (kg/m2/s) 
    92       !!                Assumptions made: 
    93       !!       - each file content an entire year (read record, not the time axis) 
    94       !!       - first and last record are part of the previous and next year 
    95       !!         (useful for time interpolation) 
    96       !!       - the number of records is 2 + 365*24 / freqh(jf) 
    97       !!         or 366 in leap year case 
     86      !! ** Method  : (1) READ each fluxes in NetCDF files: 
     87      !!      the 10m wind velocity (i-component) (m/s)    at T-point 
     88      !!      the 10m wind velocity (j-component) (m/s)    at T-point 
     89      !!      the specific humidity               ( - ) 
     90      !!      the solar heat                      (W/m2) 
     91      !!      the Long wave                       (W/m2) 
     92      !!      the 10m air temperature             (Kelvin) 
     93      !!      the total precipitation (rain+snow) (Kg/m2/s) 
     94      !!      the snow (solid prcipitation)       (kg/m2/s) 
     95      !!              (2) CALL blk_oce_core 
    9896      !! 
    9997      !!      C A U T I O N : never mask the surface stress fields 
     
    102100      !! 
    103101      !! ** Action  :   defined at each time-step at the air-sea interface 
    104       !!              - utau  &  vtau   : stress components in geographical ref. 
    105       !!              - qns   &  qsr    : non solar and solar heat fluxes 
    106       !!              - emp             : evap - precip (volume flux) 
    107       !!              - emps            : evap - precip (concentration/dillution) 
     102      !!              - utau, vtau  i- and j-component of the wind stress 
     103      !!              - taum        wind stress module at T-point 
     104      !!              - wndm        10m wind module at T-point 
     105      !!              - qns, qsr    non-slor and solar heat flux 
     106      !!              - emp, emps   evaporation minus precipitation 
    108107      !!---------------------------------------------------------------------- 
    109108      INTEGER, INTENT( in  ) ::   kt   ! ocean time step 
     
    187186      !! ** Outputs : - utau    : i-component of the stress at U-point  (N/m2) 
    188187      !!              - vtau    : j-component of the stress at V-point  (N/m2) 
     188      !!              - taum    : Wind stress module at T-point         (N/m2) 
     189      !!              - wndm    : Wind speed module at T-point          (m/s) 
    189190      !!              - qsr     : Solar heat flux over the ocean        (W/m2) 
    190191      !!              - qns     : Non Solar heat flux over the ocean    (W/m2) 
     
    201202      INTEGER  ::   ji, jj     ! dummy loop indices 
    202203      REAL(wp) ::   zcoef_qsatw 
     204      REAL(wp) ::   zztmp                                 ! temporary variable 
    203205      REAL(wp), DIMENSION(jpi,jpj) ::   zwnd_i, zwnd_j    ! wind speed components at T-point 
    204206      REAL(wp), DIMENSION(jpi,jpj) ::   zqsatw            ! specific humidity at pst 
     
    280282      ENDIF 
    281283 
     284      ! ... tau module, i and j component 
     285      DO jj = 1, jpj 
     286         DO ji = 1, jpi 
     287            zztmp = rhoa * wndm(ji,jj) * Cd(ji,jj) 
     288            taum  (ji,jj) = zztmp * wndm  (ji,jj) 
     289            zwnd_i(ji,jj) = zztmp * zwnd_i(ji,jj) 
     290            zwnd_j(ji,jj) = zztmp * zwnd_j(ji,jj) 
     291         END DO 
     292      END DO 
    282293      ! ... utau, vtau at U- and V_points, resp. 
    283294      !     Note the use of 0.5*(2-umask) in order to unmask the stress along coastlines 
    284       zwnd_i(:,:) = rhoa * wndm(:,:) * Cd(:,:) * zwnd_i(:,:) 
    285       zwnd_j(:,:) = rhoa * wndm(:,:) * Cd(:,:) * zwnd_j(:,:) 
    286295      DO jj = 1, jpjm1 
    287296         DO ji = 1, fs_jpim1 
  • trunk/NEMO/OPA_SRC/SBC/sbccpl.F90

    r1694 r1695  
    545545      !! 
    546546      !! ** Action  :   update  utau, vtau   ocean stress at U,V grid  
     547      !!                        taum, wndm   wind stres and wind speed module at T-point 
    547548      !!                        qns , qsr    non solar and solar ocean heat fluxes   ('ocean only case) 
    548549      !!                        emp = emps   evap. - precip. (- runoffs) (- calving) ('ocean only case) 
     
    557558      REAL(wp) ::   zcumulneg, zcumulpos   ! temporary scalars      
    558559      REAL(wp) ::   zcoef                  ! temporary scalar 
     560      REAL(wp) ::   zrhoa  = 1.22          ! Air density kg/m3 
     561      REAL(wp) ::   zcdrag = 1.5e-3        ! drag coefficient 
     562      REAL(wp) ::   zzx, zzy               ! temporary variables 
    559563      REAL(wp), DIMENSION(jpi,jpj) ::   ztx, zty   ! 2D workspace  
    560564      !!---------------------------------------------------------------------- 
     
    625629      ! u(v)tau will be modified by ice model -> need to be reset before each call of the ice/fsbc       
    626630      IF( MOD( kt-1, k_fsbc ) == 0 ) THEN 
     631         ! 
    627632         utau(:,:) = frcv(:,:,jpr_otx1)                    
    628633         vtau(:,:) = frcv(:,:,jpr_oty1) 
    629          IF( .NOT. srcv(jpr_w10m)%laction )   CALL sbc_tau2wnd 
     634         ! 
     635         ! wind stress module at T-point 
     636!CDIR NOVERRCHK 
     637         DO jj = 2, jpjm1 
     638!CDIR NOVERRCHK 
     639            DO ji = fs_2, fs_jpim1   ! vect. opt. 
     640               zzx = utau(ji-1,jj  ) + utau(ji,jj)  
     641               zzy = vtau(ji  ,jj-1) + vtau(ji,jj)  
     642               taum(ji,jj) = 0.5 * SQRT( zzx * zzx + zzy * zzy ) 
     643            END DO 
     644         END DO 
     645         CALL lbc_lnk( taum(:,:), 'T', 1. ) 
     646         ! 
     647         ! wind speed module at T-point 
     648         IF( .NOT. srcv(jpr_w10m)%laction ) THEN  
     649            zcoef = 1. / ( zrhoa * zcdrag )  
     650            !CDIR NOVERRCHK 
     651            DO jj = 1, jpj 
     652               !CDIR NOVERRCHK 
     653               DO ji = 1, jpi  
     654                  wndm(ji,jj) = SQRT( taum(ji,jj) * zcoef ) 
     655               END DO 
     656            END DO 
     657         ENDIF 
     658         !   
    630659      ENDIF 
    631660      !                                                      ! ========================= ! 
     
    678707         !                                                           ! 10 m wind speed 
    679708         IF( srcv(jpr_w10m)%laction )   wndm(:,:) = frcv(:,:,jpr_w10m) 
    680          ! it not, we call sbc_tau2wnd in sbc_cpl_rcv (or later, after the ice???) 
    681709         ! 
    682710#if defined  key_cpl_carbon_cycle 
  • trunk/NEMO/OPA_SRC/SBC/sbcflx.F90

    r1275 r1695  
    7373      !!                   net downward radiative flux            qsr   (watt/m2) 
    7474      !!                   net upward freshwater (evapo - precip) emp   (kg/m2/s) 
    75       !!                Assumptions made: 
    76       !!                 - each file content an entire year (read record, not the time axis) 
    77       !!                 - first and last record are part of the previous and next year 
    78       !!                   (useful for time interpolation) 
    79       !!                 - the number of records is 2 + 365*24 / freqh(jf) 
    80       !!                   or 366 in leap year case 
    8175      !! 
    8276      !!      CAUTION :  - never mask the surface stress fields 
     
    8579      !! 
    8680      !! ** Action  :   update at each time-step 
    87       !!              - utau  & vtau    : stress components in (i,j) referential 
    88       !!              - qns             : non solar heat flux 
    89       !!              - qsr             : solar heat flux 
    90       !!              - emp             : evap - precip (volume flux) 
    91       !!              - emps            : evap - precip (concentration/dillution) 
     81      !!              - utau, vtau  i- and j-component of the wind stress 
     82      !!              - taum        wind stress module at T-point 
     83      !!              - wndm        10m wind module at T-point 
     84      !!              - qns, qsr    non-slor and solar heat flux 
     85      !!              - emp, emps   evaporation minus precipitation 
    9286      !!---------------------------------------------------------------------- 
    9387      INTEGER, INTENT(in) ::   kt   ! ocean time step 
    9488      !! 
    95       INTEGER  ::   ji, jj, jf   ! dummy indices 
    96       INTEGER  ::   ierror       ! return error code 
    97       REAL(wp) ::   zfact        ! temporary scalar 
     89      INTEGER  ::   ji, jj, jf            ! dummy indices 
     90      INTEGER  ::   ierror                ! return error code 
     91      REAL(wp) ::   zfact                 ! temporary scalar 
     92      REAL(wp) ::   zrhoa  = 1.22         ! Air density kg/m3 
     93      REAL(wp) ::   zcdrag = 1.5e-3       ! drag coefficient 
     94      REAL(wp) ::   ztx, zty, zmod, zcoef ! temporary variables 
    9895      !! 
    9996      CHARACTER(len=100) ::  cn_dir                               ! Root directory for location of flx files 
     
    157154         END DO 
    158155          
     156         ! module of wind stress and wind speed at T-point 
     157         zcoef = 1. / ( zrhoa * zcdrag )  
     158!CDIR NOVERRCHK 
     159         DO jj = 2, jpjm1 
     160!CDIR NOVERRCHK 
     161            DO ji = fs_2, fs_jpim1   ! vect. opt. 
     162               ztx = utau(ji-1,jj  ) + utau(ji,jj)  
     163               zty = vtau(ji  ,jj-1) + vtau(ji,jj)  
     164               zmod = 0.5 * SQRT( ztx * ztx + zty * zty ) 
     165               taum(ji,jj) = zmod 
     166               wndm(ji,jj) = SQRT( zmod * zcoef ) 
     167            END DO 
     168         END DO 
     169         CALL lbc_lnk( taum(:,:), 'T', 1. )   ;   CALL lbc_lnk( wndm(:,:), 'T', 1. ) 
     170 
    159171         ! Initialization of emps (when no ice model) 
    160172         emps(:,:) = emp (:,:)  
    161           
    162          ! Estimation of wind speed as a function of wind stress ( |tau|=rhoa*Cd*|U|^2 ) 
    163          CALL sbc_tau2wnd 
    164           
     173                   
    165174         ! control print (if less than 100 time-step asked) 
    166175         IF( nitend-nit000 <= 100 .AND. lwp ) THEN 
  • trunk/NEMO/OPA_SRC/SBC/sbcice_if.F90

    r1275 r1695  
    4848      !! 
    4949      !! ** Action  :   utau, vtau : remain unchanged 
     50      !!                taum, wndm : remain unchanged 
    5051      !!                qns, qsr   : update heat flux below sea-ice 
    5152      !!                emp, emps  : update freshwater flux below sea-ice 
  • trunk/NEMO/OPA_SRC/SBC/sbcice_lim.F90

    r1481 r1695  
    8989      !! ** Action  : - time evolution of the LIM sea-ice model 
    9090      !!              - update all sbc variables below sea-ice: 
    91       !!                utau, vtau, qns , qsr, emp , emps 
     91      !!                utau, vtau, taum, wndm, qns , qsr, emp , emps 
    9292      !!--------------------------------------------------------------------- 
    9393      INTEGER, INTENT(in) ::   kt      ! ocean time step 
  • trunk/NEMO/OPA_SRC/SBC/sbcice_lim_2.F90

    r1482 r1695  
    8585      !! ** Action  : - time evolution of the LIM sea-ice model 
    8686      !!              - update all sbc variables below sea-ice: 
    87       !!                utau, vtau, qns , qsr, emp , emps 
     87      !!                utau, vtau, taum, wndm, qns , qsr, emp , emps 
    8888      !!--------------------------------------------------------------------- 
    8989      INTEGER, INTENT(in) ::   kt      ! ocean time step 
  • trunk/NEMO/OPA_SRC/ZDF/zdfkpp.F90

    r1601 r1695  
    200200                      ! 
    201201      REAL(wp) ::                       &  ! 
    202          ztx, zty, ztau, zflageos,      &  ! 
     202         ztx, zty, zflageos,            &  ! 
    203203         zstabl, zbuofdep,zucube,       &  ! 
    204204         zrhos, zalbet, zbeta,          &  ! 
     
    469469            zrhos         = rhop(ji,jj,1) + zflageos * rau0 * ( 1. - tmask(ji,jj,1) )   
    470470            ! Friction velocity (zustar), at T-point : LMD94 eq. 2 
    471             ztx           = 0.5 * ( utau(ji,jj) + utau(ji - 1, jj    ) ) 
    472             zty           = 0.5 * ( vtau(ji,jj) + vtau(ji    , jj - 1) ) 
    473             ztau          = SQRT( ztx * ztx + zty * zty ) 
    474             zustar(ji,jj) = SQRT( ztau / ( zrhos +  epsln ) ) 
     471            zustar(ji,jj) = SQRT( taum(ji,jj) / ( zrhos +  epsln ) ) 
    475472         ENDDO 
    476473      ENDDO 
  • trunk/NEMO/OPA_SRC/ZDF/zdftke.F90

    r1662 r1695  
    113113      !!                  - rn_ediss / emxl en**(2/3)    ! Kolmogoroff dissipation 
    114114      !!      with the boundary conditions: 
    115       !!         surface: en = max( rn_emin0, rn_ebb sqrt(utau^2 + vtau^2) ) 
     115      !!         surface: en = max( rn_emin0, rn_ebb * taum ) 
    116116      !!         bottom : en = rn_emin 
    117117      !!      The associated critical Richardson number is: ri_cri = 2/(2+rn_ediss/rn_ediff)  
     
    178178      !! 
    179179      INTEGER  ::   ji, jj, jk                ! dummy loop arguments 
    180       REAL(wp) ::   zbbrau, zesurf, zesh2     ! temporary scalars 
     180      REAL(wp) ::   zbbrau, zesh2             ! temporary scalars 
    181181      REAL(wp) ::   zfact1, zfact2, zfact3    !    -         - 
    182182      REAL(wp) ::   ztx2  , zty2  , zcof      !    -         - 
     
    191191      !!-------------------------------------------------------------------- 
    192192      ! 
    193       zbbrau =  .5 * rn_ebb / rau0       ! Local constant initialisation 
     193      zbbrau = rn_ebb / rau0       ! Local constant initialisation 
    194194      zfact1 = -.5 * rdt  
    195195      zfact2 = 1.5 * rdt * rn_ediss 
     
    199199      !                     !  Surface boundary condition on tke 
    200200      !                     !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    201 !CDIR NOVERRCHK 
    202       DO jj = 2, jpjm1         ! en(1)   = rn_ebb sqrt(utau^2+vtau^2) / rau0  (min value rn_emin0) 
    203 !CDIR NOVERRCHK 
     201      DO jj = 2, jpjm1            ! en(1)   = rn_ebb taum / rau0  (min value rn_emin0) 
    204202         DO ji = fs_2, fs_jpim1   ! vector opt. 
    205             ztx2   = utau(ji-1,jj  ) + utau(ji,jj) 
    206             zty2   = vtau(ji  ,jj-1) + vtau(ji,jj) 
    207             zesurf = zbbrau * SQRT( ztx2 * ztx2 + zty2 * zty2 ) 
    208             en(ji,jj,1) = MAX( zesurf, rn_emin0 ) * tmask(ji,jj,1) 
     203            en(ji,jj,1) = MAX( rn_emin0, zbbrau * taum(ji,jj) ) * tmask(ji,jj,1) 
    209204         END DO 
    210205      END DO 
     
    441436      INTEGER  ::   ji, jj, jk            ! dummy loop arguments 
    442437      REAL(wp) ::   zrn2, zraug           ! temporary scalars 
    443       REAL(wp) ::   ztx2, zdku            !    -         - 
    444       REAL(wp) ::   zty2, zdkv            !    -         - 
     438      REAL(wp) ::   zdku                  !    -         - 
     439      REAL(wp) ::   zdkv                  !    -         - 
    445440      REAL(wp) ::   zcoef, zav            !    -         - 
    446441      REAL(wp) ::   zpdlr, zri, zsqen     !    -         - 
     
    454449      !                     !* Buoyancy length scale: l=sqrt(2*e/n**2) 
    455450      ! 
    456       IF( ln_mxl0 ) THEN         ! surface mixing length = F(stress) : l=vkarmn*2.e5*sqrt(utau^2 + vtau^2)/(rau0*g) 
     451      IF( ln_mxl0 ) THEN         ! surface mixing length = F(stress) : l=vkarmn*2.e5*taum/(rau0*g) 
    457452!!gm  this should be useless 
    458453         zmxlm(:,:,1) = 0.e0 
    459454!!gm end 
    460          zraug = 0.5 * vkarmn * 2.e5 / ( rau0 * grav ) 
    461          DO jj = 2, jpjm1 
    462 !CDIR NOVERRCHK 
     455         zraug = vkarmn * 2.e5 / ( rau0 * grav ) 
     456         DO jj = 2, jpjm1 
    463457            DO ji = fs_2, fs_jpim1   ! vector opt. 
    464                ztx2 = utau(ji-1,jj  ) + utau(ji,jj) 
    465                zty2 = vtau(ji  ,jj-1) + vtau(ji,jj) 
    466                zmxlm(ji,jj,1) = MAX(  rn_lmin0,  zraug * SQRT( ztx2 * ztx2 + zty2 * zty2 )  ) 
     458               zmxlm(ji,jj,1) = MAX(  rn_lmin0,  zraug * taum(ji,jj)  ) 
    467459            END DO 
    468460         END DO 
Note: See TracChangeset for help on using the changeset viewer.