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 10478 for branches/UKMO/AMM15_v3_6_STABLE_package_collate_coupling/NEMOGCM/NEMO/OPA_SRC/SBC/sbcflx.F90 – NEMO

Ignore:
Timestamp:
2019-01-09T12:11:55+01:00 (5 years ago)
Author:
jcastill
Message:

Merged branch UKMO/r6232_HZG_WAVE-coupling@9868

File:
1 edited

Legend:

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

    r8918 r10478  
    2020   USE iom             ! IOM library 
    2121   USE in_out_manager  ! I/O manager 
     22   USE sbcwave         ! wave physics 
    2223   USE lib_mpp         ! distribued memory computing library 
    2324   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
     
    8788      REAL(wp) ::   zrhoa  = 1.22         ! Air density kg/m3 
    8889      REAL(wp) ::   zcdrag = 1.5e-3       ! drag coefficient 
     90      REAL(wp) ::   totwind               ! UKMO SHELF: Module of wind speed 
    8991      REAL(wp) ::   ztx, zty, zmod, zcoef ! temporary variables 
    9092      REAL     ::   cs                    ! UKMO SHELF: Friction co-efficient at surface 
     
    115117         IF(lwm) WRITE ( numond, namsbc_flx )  
    116118         ! 
     119         IF(lwp) THEN                        ! Namelist print  
     120            WRITE(numout,*)  
     121            WRITE(numout,*) 'sbc_flx : Flux forcing'  
     122            WRITE(numout,*) '~~~~~~~~~~~'  
     123            WRITE(numout,*) '       Namelist namsbc_flx : shelf seas configuration (force with winds instead of momentum)'  
     124            WRITE(numout,*) '          shelf seas configuration    ln_shelf_flx    = ', ln_shelf_flx  
     125            WRITE(numout,*) '          relative wind speed         ln_rel_wind     = ', ln_rel_wind  
     126            WRITE(numout,*) '          wind multiplication factor  rn_wfac         = ', rn_wfac  
     127         ENDIF 
    117128         !                                         ! check: do we plan to use ln_dm2dc with non-daily forcing? 
    118129         IF( ln_dm2dc .AND. sn_qsr%nfreqh /= 24 )   & 
     
    210221            END DO 
    211222         END DO 
     223         !                                                        ! add modification due to drag coefficient read from wave forcing  
     224         !                                                        ! this code is inefficient but put here to allow merging with another UKMO branch  
     225         IF( ln_shelf_flx ) THEN  
     226            ! calculate first the wind module, as it will be used later  
     227            DO jj = 2, jpjm1  
     228               DO ji = fs_2, fs_jpim1    ! vect. opt.  
     229                  ztx = zwnd_i(ji-1,jj  ) + zwnd_i(ji,jj)  
     230                  zty = zwnd_j(ji  ,jj-1) + zwnd_j(ji,jj)  
     231                  wndm(ji,jj) = 0.5 * SQRT( ztx * ztx + zty * zty )  
     232               END DO  
     233            END DO  
     234            CALL lbc_lnk( wndm(:,:), 'T', 1. )  
     235         
     236            IF( ln_cdgw .AND. nn_drag == jp_std ) THEN  
     237               IF( cpl_wdrag ) THEN   
     238                  ! reset utau and vtau to the wind components: the momentum will  
     239                  ! be calculated from the coupled value of the drag coefficient  
     240                  DO jj = 1, jpj  
     241                     DO ji = 1, jpi  
     242                        utau(ji,jj) = zwnd_i(ji,jj)  
     243                        vtau(ji,jj) = zwnd_j(ji,jj)  
     244                     END DO  
     245                  END DO  
     246               ELSE  
     247                  DO jj = 1, jpjm1  
     248                     DO ji = 1, jpim1  
     249                        utau(ji,jj) = zrhoa * 0.5 * ( cdn_wave(ji,jj) + cdn_wave(ji+1,jj) ) * zwnd_i(ji,jj) * &  
     250                                                                        0.5 * ( wndm(ji,jj) + wndm(ji+1,jj) )  
     251                        vtau(ji,jj) = zrhoa * 0.5 * ( cdn_wave(ji,jj) + cdn_wave(ji,jj+1) ) * zwnd_j(ji,jj) * &  
     252                                                                        0.5 * ( wndm(ji,jj) + wndm(ji,jj+1) )  
     253                     END DO  
     254                  END DO  
     255                  CALL lbc_lnk_multi( utau(:,:), 'U', -1., vtau(:,:), 'V', -1. )  
     256               ENDIF  
     257            ELSE IF( nn_drag == jp_const ) THEN  
     258               DO jj = 1, jpjm1  
     259                  DO ji = 1, jpim1  
     260                     utau(ji,jj) = zrhoa * zcdrag * zwnd_i(ji,jj) * 0.5 * ( wndm(ji,jj) + wndm(ji+1,jj) )  
     261                     vtau(ji,jj) = zrhoa * zcdrag * zwnd_j(ji,jj) * 0.5 * ( wndm(ji,jj) + wndm(ji,jj+1) )  
     262                  END DO  
     263               END DO  
     264               CALL lbc_lnk_multi( utau(:,:), 'U', -1., vtau(:,:), 'V', -1. )  
     265            ENDIF  
     266         ENDIF 
    212267         !                                                        ! add to qns the heat due to e-p 
    213268         qns(:,:) = qns(:,:) - emp(:,:) * sst_m(:,:) * rcp        ! mass flux is at SST 
     
    230285               zmod = 0.5 * SQRT( ztx * ztx + zty * zty ) 
    231286               taum(ji,jj) = zmod 
     287               IF( .NOT. ln_shelf_flx ) THEN 
    232288               wndm(ji,jj) = SQRT( zmod * zcoef ) 
     289               ENDIF 
    233290            END DO 
    234291         END DO 
Note: See TracChangeset for help on using the changeset viewer.