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 8425 – NEMO

Changeset 8425


Ignore:
Timestamp:
2017-08-08T16:57:45+02:00 (7 years ago)
Author:
jcastill
Message:

Calculate wind velocity relative to currents if needed for flux forcing in shelf seas configuration

File:
1 edited

Legend:

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

    r6610 r8425  
    2222   USE lib_mpp         ! distribued memory computing library 
    2323   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
     24   USE wrk_nemo        ! work arrays 
    2425 
    2526   IMPLICIT NONE 
     
    3738   TYPE(FLD), ALLOCATABLE, DIMENSION(:) ::   sf    ! structure of input fields (file informations, fields read) 
    3839   LOGICAL , PUBLIC    ::   ln_shelf_flx = .FALSE. ! UKMO SHELF specific flux flag 
     40   LOGICAL , PUBLIC    ::   ln_rel_wind = .FALSE.  ! UKMO SHELF specific flux flag - relative winds 
     41   REAL(wp)            ::   rn_wfac                ! multiplication factor for ice/ocean velocity in the calculation of wind stress (clem) 
    3942   INTEGER             ::   jpfld_local   ! maximum number of files to read (locally modified depending on ln_shelf_flx)  
    4043 
     
    8790      REAL     ::   cs                    ! UKMO SHELF: Friction co-efficient at surface 
    8891      REAL     ::   totwindspd            ! UKMO SHELF: Magnitude of wind speed vector 
     92      REAL(wp), DIMENSION(:,:), POINTER ::   zwnd_i, zwnd_j    ! wind speed components at T-point 
    8993 
    9094      REAL(wp) ::   rhoa  = 1.22         ! Air density kg/m3 
     
    9599      TYPE(FLD_N) ::   sn_utau, sn_vtau, sn_qtot, sn_qsr, sn_emp, sn_press  !  informations about the fields to be read 
    96100      LOGICAL     ::   ln_foam_flx  = .FALSE.                     ! UKMO FOAM specific flux flag 
    97       NAMELIST/namsbc_flx/ cn_dir, sn_utau, sn_vtau, sn_qtot, sn_qsr, sn_emp,   & 
    98       &                    ln_foam_flx, sn_press, ln_shelf_flx 
     101      NAMELIST/namsbc_flx/ cn_dir, sn_utau, sn_vtau, sn_qtot, sn_qsr, sn_emp,   &   
     102      &                    ln_foam_flx, sn_press, ln_shelf_flx, ln_rel_wind,    &  
     103      &                    rn_wfac  
    99104      !!--------------------------------------------------------------------- 
    100105      ! 
     
    146151      
    147152      IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN                        ! update ocean fluxes at each SBC frequency 
     153 
     154         !!UKMO SHELF wind speed relative to surface currents - put here to allow merging with coupling branch 
     155         IF( ln_shelf_flx ) THEN 
     156            CALL wrk_alloc( jpi,jpj, zwnd_i, zwnd_j ) 
     157 
     158            IF( ln_rel_wind ) THEN 
     159               DO jj = 2, jpjm1 
     160                  DO ji = fs_2, fs_jpim1   ! vect. opt. 
     161                     zwnd_i(ji,jj) = ( sf(jp_utau)%fnow(ji,jj,1) - rn_wfac * 0.5 * ( ssu_m(ji-1,jj  ) + ssu_m(ji,jj) )) 
     162                     zwnd_j(ji,jj) = ( sf(jp_vtau)%fnow(ji,jj,1) - rn_wfac * 0.5 * ( ssv_m(ji  ,jj-1) + ssv_m(ji,jj) )) 
     163                  END DO 
     164               END DO 
     165               CALL lbc_lnk( zwnd_i(:,:) , 'T', -1. ) 
     166               CALL lbc_lnk( zwnd_j(:,:) , 'T', -1. ) 
     167            ELSE 
     168               zwnd_i(:,:) = sf(jp_utau)%fnow(:,:,1) 
     169               zwnd_j(:,:) = sf(jp_vtau)%fnow(:,:,1) 
     170            ENDIF 
     171         ENDIF 
    148172 
    149173         IF( ln_dm2dc ) THEN   ;   qsr(:,:) = sbc_dcy( sf(jp_qsr)%fnow(:,:,1) )   ! modify now Qsr to include the diurnal cycle 
     
    168192                      pressnow(ji,jj) = sf(jp_press)%fnow(ji,jj,1) 
    169193                      !! UKMO SHELF flux files contain wind speed not wind stress 
    170                       totwindspd = sqrt((sf(jp_utau)%fnow(ji,jj,1))**2.0 + (sf(jp_vtau)%fnow(ji,jj,1))**2.0) 
     194                      totwindspd = sqrt(zwnd_i(ji,jj)*zwnd_i(ji,jj) + zwnd_j(ji,jj)*zwnd_j(ji,jj)) 
    171195                      cs = 0.63 + (0.066 * totwindspd) 
    172                       utau(ji,jj) = cs * (rhoa/rau0) * sf(jp_utau)%fnow(ji,jj,1) * totwindspd 
    173                       vtau(ji,jj) = cs * (rhoa/rau0) * sf(jp_vtau)%fnow(ji,jj,1) * totwindspd 
     196                      utau(ji,jj) = cs * (rhoa/rau0) * zwnd_i(ji,jj) * totwindspd  
     197                      vtau(ji,jj) = cs * (rhoa/rau0) * zwnd_j(ji,jj) * totwindspd  
    174198                   ELSE 
    175199                      utau(ji,jj) = sf(jp_utau)%fnow(ji,jj,1) 
     
    228252         ENDIF 
    229253         ! 
     254         IF( ln_shelf_flx ) THEN 
     255            CALL wrk_dealloc( jpi,jpj, zwnd_i, zwnd_j ) 
     256         ENDIF 
     257         ! 
    230258      ENDIF 
    231259      ! 
Note: See TracChangeset for help on using the changeset viewer.