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 12654 for branches/UKMO – NEMO

Changeset 12654 for branches/UKMO


Ignore:
Timestamp:
2020-04-03T10:35:56+02:00 (4 years ago)
Author:
jcastill
Message:

Further change for Met Office utils ticket 334: assume that the wind forcing components are in the U,V grid instead of the T grid

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/AMM15_v3_6_STABLE_package_collate/NEMOGCM/NEMO/OPA_SRC/SBC/sbcflx.F90

    r12599 r12654  
    9292      REAL     ::   cs                    ! UKMO SHELF: Friction co-efficient at surface 
    9393      REAL     ::   totwindspd            ! UKMO SHELF: Magnitude of wind speed vector 
    94       REAL(wp), DIMENSION(:,:), POINTER ::   zwnd_i, zwnd_j    ! wind speed components at T-point 
     94      REAL(wp), DIMENSION(:,:), POINTER ::   zwnd_i, zwnd_j    ! wind speed components at U,V-points 
    9595 
    9696      REAL(wp) ::   rhoa  = 1.22         ! Air density kg/m3 
     
    167167         ENDIF 
    168168 
    169          !!UKMO SHELF wind speed relative to surface currents - put here to allow merging with coupling branch 
     169         !! UKMO SHELF flux files contain wind speed not wind stress 
    170170         IF( ln_shelf_flx ) THEN 
    171171            CALL wrk_alloc( jpi,jpj, zwnd_i, zwnd_j ) 
     
    176176                  !! UKMO SHELF - need atmospheric pressure to calculate Haney forcing 
    177177                  pressnow(ji,jj) = sf(jp_press)%fnow(ji,jj,1) 
    178                   !! UKMO SHELF flux files contain wind speed not wind stress 
     178 
     179                  qsr (ji,jj) = sf(jp_qsr )%fnow(ji,jj,1) 
     180                  !! UKMO FOAM flux files contain non-solar heat flux (qns) rather than total heat flux (qtot) 
     181                  qns (ji,jj) = sf(jp_qtot)%fnow(ji,jj,1) 
     182                  !! UKMO FOAM flux files contain the net DOWNWARD freshwater flux P-E rather then E-P 
     183                  emp (ji,jj) = -1. * sf(jp_emp )%fnow(ji,jj,1) 
     184 
     185                  !!UKMO SHELF wind speed relative to surface currents - put here to allow merging with coupling branch 
    179186                  IF( ln_rel_wind ) THEN 
    180187                     zwnd_i(ji,jj) = sf(jp_utau)%fnow(ji,jj,1) - rn_wfac * ssu_m(ji,jj) 
     
    184191                     zwnd_j(ji,jj) = sf(jp_vtau)%fnow(ji,jj,1) 
    185192                  ENDIF 
    186                   wndm(ji,jj) = sqrt(zwnd_i(ji,jj)*zwnd_i(ji,jj) + zwnd_j(ji,jj)*zwnd_j(ji,jj)) 
    187  
    188                   ! add modification due to drag coefficient read from wave forcing  
     193               END DO 
     194            END DO 
     195 
     196            ! Calculate wind speed from the wind components  
     197            DO jj = 2, jpjm1 
     198               DO ji = fs_2, fs_jpim1   ! vect. opt. 
     199                  ztx = zwnd_i(ji-1,jj  ) + zwnd_i(ji,jj)  
     200                  zty = zwnd_j(ji  ,jj-1) + zwnd_j(ji,jj)  
     201                  wndm(ji,jj) = 0.5 * SQRT( ztx * ztx + zty * zty ) 
     202               END DO 
     203            END DO 
     204 
     205            ! add modification due to drag coefficient read from wave forcing  
     206            DO jj = 1, jpjm1 
     207               DO ji = 1, jpim1 
    189208                  IF( ln_cdgw .AND. nn_drag == jp_std ) THEN  
    190209                     IF( cpl_wdrag ) THEN   
     
    194213                        vtau(ji,jj) = zwnd_j(ji,jj)  
    195214                     ELSE  
    196                         utau(ji,jj) = zrhoa * cdn_wave(ji,jj) * zwnd_i(ji,jj) * wndm(ji,jj) 
    197                         vtau(ji,jj) = zrhoa * cdn_wave(ji,jj) * zwnd_j(ji,jj) * wndm(ji,jj) 
     215                        utau(ji,jj) = zrhoa * 0.25 * ( cdn_wave(ji,jj) + cdn_wave(ji+1,jj) ) * zwnd_i(ji,jj) * & 
     216                                                     ( wndm(ji,jj)     + wndm(ji+1,jj) ) 
     217                        vtau(ji,jj) = zrhoa * 0.25 * ( cdn_wave(ji,jj) + cdn_wave(ji,jj+1) ) * zwnd_j(ji,jj) * & 
     218                                                     ( wndm(ji,jj)     + wndm(ji,jj+1) ) 
    198219                     ENDIF  
    199220                  ELSE IF( nn_drag == jp_const ) THEN  
    200                      utau(ji,jj) = zrhoa * zcdrag * zwnd_i(ji,jj) * wndm(ji,jj) 
    201                      vtau(ji,jj) = zrhoa * zcdrag * zwnd_j(ji,jj) * wndm(ji,jj) 
     221                     utau(ji,jj) = zrhoa * zcdrag * zwnd_i(ji,jj) * 0.5 * ( wndm(ji,jj) + wndm(ji+1,jj) ) 
     222                     vtau(ji,jj) = zrhoa * zcdrag * zwnd_j(ji,jj) * 0.5 * ( wndm(ji,jj) + wndm(ji,jj+1) ) 
    202223                  ELSE IF( nn_drag == jp_ukmo ) THEN  
    203                      cs = 0.63 + (0.066 * wndm(ji,jj)) 
    204                      utau(ji,jj) = cs * (rhoa/rau0) * zwnd_i(ji,jj) * wndm(ji,jj) 
    205                      vtau(ji,jj) = cs * (rhoa/rau0) * zwnd_j(ji,jj) * wndm(ji,jj) 
     224                     totwindspd = sqrt(zwnd_i(ji,jj)*zwnd_i(ji,jj) + zwnd_j(ji,jj)*zwnd_j(ji,jj)) 
     225                     cs = 0.63 + (0.066 * totwindspd) 
     226                     utau(ji,jj) = cs * (rhoa/rau0) * zwnd_i(ji,jj) * totwindspd 
     227                     vtau(ji,jj) = cs * (rhoa/rau0) * zwnd_j(ji,jj) * totwindspd 
    206228                  ENDIF  
    207                   taum(ji,jj) = sqrt(utau(ji,jj)*utau(ji,jj) + vtau(ji,jj)*vtau(ji,jj)) 
    208  
    209                   qsr (ji,jj) = sf(jp_qsr )%fnow(ji,jj,1) 
    210                   !! UKMO FOAM flux files contain non-solar heat flux (qns) rather than total heat flux (qtot) 
    211                   qns (ji,jj) = sf(jp_qtot)%fnow(ji,jj,1) 
    212                   !! UKMO FOAM flux files contain the net DOWNWARD freshwater flux P-E rather then E-P 
    213                   emp (ji,jj) = -1. * sf(jp_emp )%fnow(ji,jj,1) 
    214                END DO 
    215             END DO 
    216             ! Move tau components to the right grid 
    217             DO jj = 1, jpjm1 
    218                DO ji = 1, jpim1 
    219                   utau(ji,jj) = 0.5 * ( utau(ji,jj) + utau(ji+1,jj) ) 
    220                   vtau(ji,jj) = 0.5 * ( vtau(ji,jj) + vtau(ji,jj+1) ) 
    221229 
    222230                  !!UKMO SHELF effect of atmospheric pressure on SSH 
     
    228236               END DO 
    229237            END DO 
     238 
     239            CALL wrk_dealloc( jpi,jpj, zwnd_i, zwnd_j ) 
    230240         ELSE 
    231241            DO jj = 1, jpj                                           ! set the ocean fluxes from read fields 
     
    245255               END DO 
    246256            END DO 
     257         ENDIF 
    247258            !                                                        ! module of wind stress and wind speed at T-point 
    248             zcoef = 1. / ( zrhoa * zcdrag ) 
     259         zcoef = 1. / ( zrhoa * zcdrag ) 
    249260!CDIR NOVERRCHK 
    250             DO jj = 2, jpjm1 
     261         DO jj = 2, jpjm1 
    251262!CDIR NOVERRCHK 
    252                DO ji = fs_2, fs_jpim1   ! vect. opt. 
    253                   ztx = utau(ji-1,jj  ) + utau(ji,jj)  
    254                   zty = vtau(ji  ,jj-1) + vtau(ji,jj)  
    255                   zmod = 0.5 * SQRT( ztx * ztx + zty * zty ) 
    256                   taum(ji,jj) = zmod 
    257                   wndm(ji,jj) = SQRT( zmod * zcoef ) 
    258                END DO 
    259             END DO 
    260          ENDIF 
     263            DO ji = fs_2, fs_jpim1   ! vect. opt. 
     264               ztx = utau(ji-1,jj  ) + utau(ji,jj)  
     265               zty = vtau(ji  ,jj-1) + vtau(ji,jj)  
     266               zmod = 0.5 * SQRT( ztx * ztx + zty * zty ) 
     267               taum(ji,jj) = zmod 
     268               IF( .NOT. ln_shelf_flx ) wndm(ji,jj) = SQRT( zmod * zcoef ) 
     269            END DO 
     270         END DO 
    261271         !                                                        ! add to qns the heat due to e-p 
    262272         qns(:,:) = qns(:,:) - emp(:,:) * sst_m(:,:) * rcp        ! mass flux is at SST 
     
    284294         ENDIF 
    285295         ! 
    286          IF( ln_shelf_flx ) THEN 
    287             CALL wrk_dealloc( jpi,jpj, zwnd_i, zwnd_j ) 
    288          ENDIF 
    289          ! 
    290296      ENDIF 
    291297      ! 
Note: See TracChangeset for help on using the changeset viewer.