Changeset 7334
- Timestamp:
- 2016-11-25T10:51:35+01:00 (7 years ago)
- Location:
- branches/UKMO/r5936_INGV1_WAVE-coupling/NEMOGCM
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/r5936_INGV1_WAVE-coupling/NEMOGCM/CONFIG/cfg.txt
r7166 r7334 11 11 ORCA2_LIM OPA_SRC LIM_SRC_2 NST_SRC 12 12 ORCA2_OFF_PISCES OPA_SRC OFF_SRC TOP_SRC 13 GYRE_LONG OPA_SRC -
branches/UKMO/r5936_INGV1_WAVE-coupling/NEMOGCM/NEMO/OPA_SRC/DYN/sshwzv.F90
r7193 r7334 39 39 USE wrk_nemo ! Memory Allocation 40 40 USE timing ! Timing 41 USE sbcwave , ONLY: usd3dt, vsd3dt,wsd3d41 USE sbcwave ! Stokes velocities 42 42 43 43 IMPLICIT NONE … … 162 162 REAL(wp), POINTER, DIMENSION(:,: ) :: z2d 163 163 REAL(wp), POINTER, DIMENSION(:,:,:) :: z3d, zhdiv 164 REAL(wp) :: dsshnu, dsshnv164 REAL(wp) :: zdsshu, zdsshv 165 165 !!---------------------------------------------------------------------- 166 166 ! … … 209 209 END DO 210 210 ENDIF 211 ! 212 ! In case ln_wave and ln_sdw, the surface vertical velocity is modified 213 ! accounting for Sokes Drift velocity 214 ! 215 IF ( ln_wave .AND. ln_sdw ) THEN 216 ! Compute d(ssh)/dx and d(ssh)/dy 217 ! Compute the surface vertical velocity accounting for the Stokes Drift 218 !--------------------------------- 219 DO jj = 2 , jpjm1 220 DO ji = 2 , jpim1 221 dsshnu = ( ssha(ji+1,jj) - ssha(ji,jj) ) / e1u(ji,jj) 222 dsshnv = ( ssha(ji,jj+1) - ssha(ji,jj) ) / e2v(ji,jj) 223 wn(ji,jj,1) = wn(ji,jj,1) +( usd3dt(ji,jj,1) * dsshnu & 224 & + vsd3dt(ji,jj,1) * dsshnv & 225 & - ( wsd3d (ji,jj,1) )) * tmask(ji,jj,1) 226 ENDDO 227 ENDDO 211 212 IF( ln_wave .AND. ln_sdw ) THEN 213 ! Compute d(ssh)/dx and d(ssh)/dy 214 ! Compute the surface vertical velocity accounting for the Stokes Drift 215 DO jj = 1 , jpjm1 216 DO ji = 1 , fs_jpim1 217 zdsshu = ( sshn(ji+1,jj) - sshn(ji,jj) ) / e1u(ji,jj) 218 zdsshv = ( sshn(ji,jj+1) - sshn(ji,jj) ) / e2v(ji,jj) 219 wn(ji,jj,1) = wn(ji,jj,1) + ( usd3dt(ji,jj,1) * zdsshu & 220 & + vsd3dt(ji,jj,1) * zdsshv & 221 & - wsd3d (ji,jj,1) ) * tmask(ji,jj,1) 222 END DO 223 END DO 228 224 ENDIF 229 225 ! -
branches/UKMO/r5936_INGV1_WAVE-coupling/NEMOGCM/NEMO/OPA_SRC/SBC/sbccpl.F90
r7279 r7334 305 305 WRITE(numout,*)' water level = ', TRIM(sn_snd_wlev%cldes ), ' (', TRIM(sn_snd_wlev%clcat ), ')' 306 306 WRITE(numout,*)' mean sea level pressure = ', TRIM(sn_rcv_mslp%cldes ), ' (', TRIM(sn_rcv_mslp%clcat ), ')' 307 WRITE(numout,*)' surface current to waves = ', TRIM(sn_snd_crtw%cldes ), ' (', TRIM(sn_snd_crtw%clcat), ')'307 WRITE(numout,*)' surface current to waves = ', TRIM(sn_snd_crtw%cldes ), ' (', TRIM(sn_snd_crtw%clcat ), ')' 308 308 WRITE(numout,*)' - referential = ', sn_snd_crtw%clvref 309 309 WRITE(numout,*)' - orientation = ', sn_snd_crtw%clvor -
branches/UKMO/r5936_INGV1_WAVE-coupling/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90
r7279 r7334 53 53 USE sbcwave ! Wave module 54 54 USE bdy_par ! Require lk_bdy 55 USE zdf_oce, ONLY : ln_zdfqiao56 55 57 56 IMPLICIT NONE … … 221 220 222 221 IF ( ln_wave ) THEN 223 !Activated wave module but neither drag nor stokes drift activated224 IF ( .NOT.(ln_cdgw .OR. ln_sdw .OR. ln_tauoc .OR. ln_stcor ) ) THEN222 !Activated wave module but neither drag nor stokes drift activated 223 IF ( .NOT.(ln_cdgw .OR. ln_sdw .OR. ln_tauoc .OR. ln_stcor ) ) THEN 225 224 CALL ctl_warn( 'Ask for wave coupling but ln_cdgw=F, ln_sdw=F, ln_tauoc=F, ln_stcor=F') 226 !drag coefficient read from wave model definable only with mfs bulk formulae and core225 !drag coefficient read from wave model definable only with mfs bulk formulae and core 227 226 ELSEIF (ln_cdgw .AND. .NOT.(ln_blk_mfs .OR. ln_blk_core) ) THEN 228 227 CALL ctl_stop( 'drag coefficient read from wave model definable only with mfs bulk formulae and core') 229 ELSEIF (ln_stcor .AND. .NOT. ln_sdw) THEN228 ELSEIF (ln_stcor .AND. .NOT. ln_sdw) THEN 230 229 CALL ctl_stop( 'Stokes-Coriolis term calculated only if activated Stokes Drift ln_sdw=T') 231 230 ENDIF 232 231 ELSE 233 IF ( ln_cdgw .OR. ln_sdw .OR. ln_tauoc .OR. ln_stcor ) 232 IF ( ln_cdgw .OR. ln_sdw .OR. ln_tauoc .OR. ln_stcor ) & 234 233 & CALL ctl_stop( 'Not Activated Wave Module (ln_wave=F) but asked coupling ', & 235 & 'with drag coefficient (ln_cdgw =T) ' , & 236 & 'or Stokes Drift (ln_sdw=T) ' , & 237 & 'or ocean stress modification due to waves (ln_tauoc=T) ', & 238 & 'or Stokes-Coriolis term (ln_stcori=T)' ) 234 & 'with drag coefficient (ln_cdgw =T) ' , & 235 & 'or Stokes Drift (ln_sdw=T) ' , & 236 & 'or ocean stress modification due to waves (ln_tauoc=T) ', & 237 & 'or Stokes-Coriolis term (ln_stcori=T)' ) 239 238 ENDIF 240 239 ! ! Choice of the Surface Boudary Condition (set nsbc) -
branches/UKMO/r5936_INGV1_WAVE-coupling/NEMOGCM/NEMO/OPA_SRC/SBC/sbcwave.F90
r7193 r7334 40 40 LOGICAL, PUBLIC :: cpl_wdrag=.FALSE. 41 41 42 INTEGER 43 INTEGER 44 INTEGER 45 INTEGER 46 INTEGER 42 INTEGER :: jpfld ! number of files to read for stokes drift 43 INTEGER :: jp_usd ! index of stokes drift (i-component) (m/s) at T-point 44 INTEGER :: jp_vsd ! index of stokes drift (j-component) (m/s) at T-point 45 INTEGER :: jp_swh ! index of significant wave hight (m) at T-point 46 INTEGER :: jp_wmp ! index of mean wave period (s) at T-point 47 47 48 48 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_cd ! structure of input fields (file informations, fields read) Drag Coefficient … … 55 55 REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:,:) :: tsd2d 56 56 REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:,:) :: usd2d, vsd2d 57 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: usd3d, vsd3d, wsd3d58 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: usd3dt, vsd3dt59 57 REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:,:) :: zusd2dt, zvsd2dt 58 REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:,:,:) :: usd3d, vsd3d, wsd3d 59 REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:,:,:) :: usd3dt, vsd3dt 60 60 61 61 !! * Substitutions … … 82 82 !!--------------------------------------------------------------------- 83 83 INTEGER :: jj,ji,jk 84 REAL(wp) :: ztransp, zsp0, zk, zus, zvs 85 REAL(wp), DIMENSION(jpi,jpj) :: zfac 84 REAL(wp) :: ztransp, zfac, zsp0, zk, zus, zvs 86 85 REAL(wp), DIMENSION(:,:,:), POINTER :: ze3hdiv ! 3D workspace 87 86 !!--------------------------------------------------------------------- 87 ! 88 88 89 89 CALL wrk_alloc( jpi,jpj,jpk, ze3hdiv ) … … 91 91 DO jj = 1, jpj 92 92 DO ji = 1, jpi 93 ! On T grid 94 ! Stokes transport speed estimated from Hs and Tmean 95 ztransp = 2.0_wp*rpi*swh(ji,jj)**2.0_wp/(16.0_wp*MAX(wmp(ji,jj),0.0000001_wp)) 96 ! Stokes surface speed 97 zsp0 = SQRT( zusd2dt(ji,jj)**2 + zvsd2dt(ji,jj)**2) 98 ! Wavenumber scale 99 zk = ABS(zsp0)/MAX(ABS(5.97_wp*ztransp),0.0000001_wp) 100 ! Depth attenuation 101 zfac(ji,jj) = EXP(-2.0_wp*zk*fsdept(ji,jj,jk))/(1.0_wp+8.0_wp*zk*fsdept(ji,jj,jk)) 93 ! On T grid 94 ! Stokes transport speed estimated from Hs and Tmean 95 ztransp = 2.0_wp*rpi*swh(ji,jj)**2.0_wp/(16.0_wp*MAX(wmp(ji,jj),0.0000001_wp)) 96 ! Stokes surface speed 97 zsp0 = SQRT( zusd2dt(ji,jj)**2 + zvsd2dt(ji,jj)**2) 98 ! Wavenumber scale 99 zk = ABS(zsp0)/MAX(ABS(5.97_wp*ztransp),0.0000001_wp) 100 ! Depth attenuation 101 zfac = EXP(-2.0_wp*zk*fsdept(ji,jj,jk))/(1.0_wp+8.0_wp*zk*fsdept(ji,jj,jk)) 102 ! 103 usd3dt(ji,jj,jk) = zfac * zusd2dt(ji,jj) * tmask(ji,jj,jk) 104 vsd3dt(ji,jj,jk) = zfac * zvsd2dt(ji,jj) * tmask(ji,jj,jk) 102 105 END DO 103 106 END DO 104 !105 DO jj = 1, jpj106 DO ji = 1, jpi107 usd3dt(ji,jj,jk) = zfac(ji,jj) * zusd2dt(ji,jj) * tmask(ji,jj,jk)108 vsd3dt(ji,jj,jk) = zfac(ji,jj) * zvsd2dt (ji,jj) * tmask(ji,jj,jk)109 END DO110 END DO111 107 END DO 112 ! Into the U and V Grid 113 DO jk = 1, jpkm1 108 ! Into the U and V Grid 109 DO jk = 1, jpkm1 114 110 DO jj = 1, jpjm1 115 DO ji = 1, jpim1116 usd3d(ji,jj,jk) = 0.5 * umask(ji,jj,jk) *&117 & ( usd3dt(ji,jj,jk) + usd3dt(ji+1,jj,jk))118 vsd3d(ji,jj,jk) = 0.5 * vmask(ji,jj,jk) *&119 & ( vsd3dt(ji,jj,jk) + vsd3dt(ji,jj+1,jk))111 DO ji = 1, fs_jpim1 112 usd3d(ji,jj,jk) = 0.5 * umask(ji,jj,jk) * & 113 & ( usd3dt(ji,jj,jk) + usd3dt(ji+1,jj,jk) ) 114 vsd3d(ji,jj,jk) = 0.5 * vmask(ji,jj,jk) * & 115 & ( vsd3dt(ji,jj,jk) + vsd3dt(ji,jj+1,jk) ) 120 116 END DO 121 117 END DO … … 125 121 CALL lbc_lnk( vsd3d(:,:,:), 'V', -1. ) 126 122 ! 127 DO jk = 1, jpkm1 ! e3t *Horizontal divergence128 DO jj = 2, jpj m1129 DO ji = fs_2, fs_jpim1 ! vector opt.130 ze3hdiv(ji,jj,jk) = ( e2u(ji ,jj) * fse3u_n(ji ,jj,jk) *usd3d(ji ,jj,jk) &131 & - e2u(ji-1,jj) * fse3u_n(ji-1,jj,jk) *usd3d(ji-1,jj,jk) &132 & + e1v(ji,jj ) * fse3v_n(ji,jj ,jk) *vsd3d(ji,jj ,jk) &133 & - e1v(ji,jj-1) * fse3v_n(ji,jj-1,jk) *vsd3d(ji,jj-1,jk) ) * r1_e1e2t(ji,jj)123 DO jk = 1, jpkm1 ! Horizontal divergence 124 DO jj = 2, jpj 125 DO ji = fs_2, jpi 126 ze3hdiv(ji,jj,jk) = ( e2u(ji ,jj) * usd3d(ji ,jj,jk) & 127 & - e2u(ji-1,jj) * usd3d(ji-1,jj,jk) & 128 & + e1v(ji,jj ) * vsd3d(ji,jj ,jk) & 129 & - e1v(ji,jj-1) * vsd3d(ji,jj-1,jk) ) * r1_e1e2t(ji,jj) 134 130 END DO 135 131 END DO 136 IF( .NOT. AGRIF_Root() ) THEN137 IF( nbondi == 1 .OR. nbondi == 2 ) ze3hdiv(nlci-1, : ,jk) = 0._wp ! east138 IF( nbondi == -1 .OR. nbondi == 2 ) ze3hdiv( 2 , : ,jk) = 0._wp ! west139 IF( nbondj == 1 .OR. nbondj == 2 ) ze3hdiv( : ,nlcj-1,jk) = 0._wp ! north140 IF( nbondj == -1 .OR. nbondj == 2 ) ze3hdiv( : , 2 ,jk) = 0._wp ! south141 ENDIF142 132 END DO 133 ! 134 IF( .NOT. AGRIF_Root() ) THEN 135 IF( nbondi == 1 .OR. nbondi == 2 ) ze3hdiv(nlci-1, : ,:) = 0._wp ! east 136 IF( nbondi == -1 .OR. nbondi == 2 ) ze3hdiv( 2 , : ,:) = 0._wp ! west 137 IF( nbondj == 1 .OR. nbondj == 2 ) ze3hdiv( : ,nlcj-1,:) = 0._wp ! north 138 IF( nbondj == -1 .OR. nbondj == 2 ) ze3hdiv( : , 2 ,:) = 0._wp ! south 139 ENDIF 140 ! 143 141 CALL lbc_lnk( ze3hdiv, 'T', 1. ) 144 142 ! 145 DO jk = jpkm1, 1, -1 ! *integrate from the bottom the e3t * hor. divergence146 wsd3d(:,:,jk) = wsd3d(:,:,jk+1) - ze3hdiv(:,:,jk)143 DO jk = jpkm1, 1, -1 ! integrate from the bottom the e3t * hor. divergence 144 wsd3d(:,:,jk) = wsd3d(:,:,jk+1) - fse3t_n(:,:,jk) * ze3hdiv(:,:,jk) 147 145 END DO 148 146 #if defined key_bdy … … 157 155 END SUBROUTINE sbc_stokes 158 156 159 SUBROUTINE sbc_qiao ( )157 SUBROUTINE sbc_qiao 160 158 !!--------------------------------------------------------------------- 161 159 !! *** ROUTINE sbc_qiao *** … … 167 165 !! ** action 168 166 !!--------------------------------------------------------------------- 169 INTEGER :: jj,ji167 INTEGER :: jj, ji 170 168 171 169 ! Calculate the module of the stokes drift on T grid … … 173 171 DO jj = 1, jpj 174 172 DO ji = 1, jpi 175 tsd2d(ji,jj) = SQRT( zusd2dt(ji,jj) **2 + zvsd2dt(ji,jj)**2)173 tsd2d(ji,jj) = SQRT( zusd2dt(ji,jj) * zusd2dt(ji,jj) + zvsd2dt(ji,jj) * zvsd2dt(ji,jj) ) 176 174 END DO 177 175 END DO … … 193 191 !! ** action 194 192 !!--------------------------------------------------------------------- 195 USE zdf_oce 193 USE zdf_oce, ONLY : ln_zdfqiao 196 194 197 195 IMPLICIT NONE … … 223 221 IF(lwm) WRITE ( numond, namsbc_wave ) 224 222 ! 225 IF 226 IF 223 IF( ln_cdgw ) THEN 224 IF( .NOT. cpl_wdrag ) THEN 227 225 ALLOCATE( sf_cd(1), STAT=ierror ) !* allocate and fill sf_wave with sn_cdg 228 226 IF( ierror > 0 ) CALL ctl_stop( 'STOP', 'sbc_wave: unable to allocate sf_wave structure' ) … … 236 234 ENDIF 237 235 238 IF 239 IF 236 IF( ln_tauoc ) THEN 237 IF( .NOT. cpl_wstrf ) THEN 240 238 ALLOCATE( sf_tauoc(1), STAT=ierror ) !* allocate and fill sf_wave with sn_tauoc 241 239 IF( ierror > 0 ) CALL ctl_stop( 'STOP', 'sbc_wave: unable to allocate sf_wave structure' ) … … 246 244 ENDIF 247 245 ALLOCATE( tauoc_wave(jpi,jpj) ) 248 tauoc_wave(:,:) = 0.0 249 ENDIF 250 251 IF ( ln_sdw ) THEN 246 ENDIF 247 248 IF( ln_sdw ) THEN 252 249 ! Find out how many fields have to be read from file if not coupled 253 250 jpfld=0 … … 292 289 ALLOCATE( swh(jpi,jpj), wmp(jpi,jpj) ) 293 290 ALLOCATE( zusd2dt(jpi,jpj), zvsd2dt(jpi,jpj) ) 294 usd3d(:,:,:) = 0._wp ; usd2d(:,:) = 0._wp ; 295 vsd3d(:,:,:) = 0._wp ; vsd2d(:,:) = 0._wp ; 296 wsd3d(:,:,:) = 0._wp ; 297 usd3dt(:,:,:) = 0._wp ; vsd3dt(:,:,:) = 0._wp ; 298 swh (:,:) = 0._wp ; wmp (:,:) = 0._wp ; 299 IF ( ln_zdfqiao ) THEN !== Vertical mixing enhancement using Qiao,2010 ==! 300 IF ( .NOT. cpl_wnum ) THEN 291 usd3d(:,:,:) = 0._wp 292 vsd3d(:,:,:) = 0._wp 293 wsd3d(:,:,:) = 0._wp 294 IF( ln_zdfqiao ) THEN !== Vertical mixing enhancement using Qiao,2010 ==! 295 IF( .NOT. cpl_wnum ) THEN 301 296 ALLOCATE( sf_wn(1), STAT=ierror ) !* allocate and fill sf_wave with sn_wnum 302 297 IF( ierror > 0 ) CALL ctl_stop( 'STOP', 'sbc_wave: unable toallocate sf_wave structure' ) … … 306 301 ENDIF 307 302 ALLOCATE( wnum(jpi,jpj),tsd2d(jpi,jpj) ) 308 wnum(:,:) = 0._wp ; tsd2d(:,:) = 0._wp 309 ENDIF 310 ENDIF 311 ENDIF 312 ! 313 IF ( ln_cdgw .AND. .NOT. cpl_wdrag ) THEN !== Neutral drag coefficient ==! 303 ENDIF 304 ENDIF 305 ENDIF 306 ! 307 IF( ln_cdgw .AND. .NOT. cpl_wdrag ) THEN !== Neutral drag coefficient ==! 314 308 CALL fld_read( kt, nn_fsbc, sf_cd ) ! read from external forcing 315 309 cdn_wave(:,:) = sf_cd(1)%fnow(:,:,1) 316 310 ENDIF 317 311 318 IF 312 IF( ln_tauoc .AND. .NOT. cpl_wstrf ) THEN !== Wave induced stress ==! 319 313 CALL fld_read( kt, nn_fsbc, sf_tauoc ) !* read wave norm stress from external forcing 320 314 tauoc_wave(:,:) = sf_tauoc(1)%fnow(:,:,1) 321 315 ENDIF 322 316 323 IF 317 IF( ln_sdw ) THEN !== Computation of the 3d Stokes Drift ==! 324 318 ! 325 319 ! Read from file only if the field is not coupled … … 333 327 ! 334 328 ! Read also wave number if needed, so that it is available in coupling routines 335 IF 329 IF( ln_zdfqiao .AND. .NOT. cpl_wnum ) THEN 336 330 CALL fld_read( kt, nn_fsbc, sf_wn ) !* read wave parameters from external forcing 337 331 wnum(:,:) = sf_wn(1)%fnow(:,:,1) … … 344 338 IF( jpfld == 4 ) THEN 345 339 CALL sbc_stokes() 346 IF 340 IF( ln_zdfqiao .AND. .NOT. cpl_wnum ) THEN 347 341 CALL sbc_qiao() 348 342 ENDIF -
branches/UKMO/r5936_INGV1_WAVE-coupling/NEMOGCM/NEMO/OPA_SRC/TRA/traadv.F90
r7167 r7334 37 37 USE sbcwave ! wave module 38 38 USE sbc_oce ! surface boundary condition: ocean 39 40 39 USE diaptr ! Poleward heat transport 41 USE sbcwave ! wave module42 USE sbc_oce ! surface boundary condition: ocean43 40 44 41 IMPLICIT NONE … … 111 108 ! 112 109 ! !== effective transport ==! 113 IF 110 IF(ln_wave .AND. ln_sdw) THEN 114 111 DO jk = 1, jpkm1 115 112 zun(:,:,jk) = e2u(:,:) * fse3u(:,:,jk) * & … … 121 118 END DO 122 119 ELSE 123 DO jk = 1, jpkm1124 zun(:,:,jk) = e2u (:,:) * fse3u(:,:,jk) * un(:,:,jk)! eulerian transport only125 zvn(:,:,jk) = e1v (:,:) * fse3v(:,:,jk) * vn(:,:,jk)126 zwn(:,:,jk) = e1e2t(:,:) * wn(:,:,jk)127 END DO120 DO jk = 1, jpkm1 121 zun(:,:,jk) = e2u (:,:) * fse3u(:,:,jk) * un(:,:,jk) ! eulerian transport only 122 zvn(:,:,jk) = e1v (:,:) * fse3v(:,:,jk) * vn(:,:,jk) 123 zwn(:,:,jk) = e1e2t(:,:) * wn(:,:,jk) 124 END DO 128 125 ENDIF 129 126 ! -
branches/UKMO/r5936_INGV1_WAVE-coupling/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfqiao.F90
r7193 r7334 6 6 !! History : 3.6 ! 2014-10 (E. Clementi) Original code 7 7 !!---------------------------------------------------------------------- 8 !!----------------------------------------------------------------------9 !! qiao_init10 8 !! zdf_qiao : compute Qiao parameters 11 9 !!---------------------------------------------------------------------- 12 10 13 USE iom ! I/O manager library14 11 USE in_out_manager ! I/O manager 15 12 USE lib_mpp ! distribued memory computing library … … 18 15 USE sbcwave ! wave module 19 16 USE dom_oce 17 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 20 18 21 !!----------------------------------------------------------------------22 !! qiao_init : compute QBv: Qiao terms to be added to vertical eddy23 !! diffusivity and viscosity coefficients24 !!----------------------------------------------------------------------25 26 19 IMPLICIT NONE 27 20 PRIVATE 28 21 29 PUBLIC zdf_qiao ! routine called in zdf_ric22 PUBLIC zdf_qiao ! routine called in step 30 23 31 REAL(wp), PUBLIC,ALLOCATABLE,DIMENSION (:,:,:) :: QBv, QBvu, QBvv24 REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:,:,:) :: qbv, qbvu, qbvv 32 25 33 26 !! * Substitutions 34 27 # include "domzgr_substitute.h90" 28 # include "vectopt_loop_substitute.h90" 35 29 !!---------------------------------------------------------------------- 36 30 !! NEMO/OPA 4.0 , NEMO Consortium (2011) … … 45 39 !! *** ROUTINE zdf_qiao *** 46 40 !! 47 !! ** Purpose :Compute the Qiao term ( QBv) to be added to41 !! ** Purpose :Compute the Qiao term (qbv) to be added to 48 42 !! vertical viscosity and diffusivity coeffs. 49 43 !! 50 !! ** Method : QBv = alpha * A * Us(0) * exp (3 * k * z)44 !! ** Method :qbv = alpha * A * Us(0) * exp (3 * k * z) 51 45 !! 52 46 !! ** action :Compute the Qiao wave dependent term … … 56 50 INTEGER, INTENT( in ) :: kt ! ocean time step 57 51 ! 58 INTEGER :: jj, ji, jk52 INTEGER :: jj, ji, jk ! dummy loop indices 59 53 !!--------------------------------------------------------------------- 60 54 ! 61 !62 ! ! -------------------- !63 55 IF( kt == nit000 ) THEN ! First call kt=nit000 ! 64 ALLOCATE(QBv(jpi,jpj,jpk)) ! -------------------- ! 65 ALLOCATE(QBvu(jpi,jpj,jpk)) 66 ALLOCATE(QBvv(jpi,jpj,jpk)) 56 IF( .NOT. ( ln_wave .AND. ln_sdw ) ) & 57 & CALL ctl_stop ( 'Ask for wave Qiao enhanced turbulence but ln_wave & 58 & and ln_sdw have to be activated') 59 IF( zdf_qiao_alloc() /= 0 ) & 60 & CALL ctl_stop( 'STOP', 'zdf_qiao : unable to allocate arrays' ) 67 61 ENDIF 68 62 69 QBv (:,:,:) = 0.070 QBvu(:,:,:) = 0.071 QBvv(:,:,:) = 0.072 73 63 ! 74 ! Compute the Qiao term Bv ( QBv) to be added to64 ! Compute the Qiao term Bv (qbv) to be added to 75 65 ! vertical viscosity and diffusivity 76 ! QBv = alpha * A * Us(0) * exp (3 * k * z)66 ! qbv = alpha * A * Us(0) * exp (3 * k * z) 77 67 ! alpha here is set to 1 78 68 !--------------------------------------------------------------------------------- 79 69 ! 80 IF ( ln_wave ) THEN 81 DO jk = 1, jpk 82 DO jj = 1, jpjm1 83 DO ji = 1, jpim1 84 QBv(ji,jj,jk) = 1.0 * 0.353553 * swh(ji,jj) * tsd2d(ji,jj) * & 85 & exp(3.0 * wnum(ji,jj) * & 86 & (-MIN( fsdept(ji ,jj ,jk) , fsdept(ji+1,jj ,jk), & 87 & fsdept(ji ,jj+1,jk) , fsdept(ji+1,jj+1,jk)))) 88 END DO 70 DO jk = 1, jpk 71 DO jj = 1, jpjm1 72 DO ji = 1, fs_jpim1 73 qbv(ji,jj,jk) = 1.0 * 0.353553 * swh(ji,jj) * tsd2d(ji,jj) * & 74 & EXP(3.0 * wnum(ji,jj) * & 75 & (-MIN( fsdepw(ji ,jj ,jk), fsdepw(ji+1,jj ,jk), & 76 & fsdepw(ji ,jj+1,jk), fsdepw(ji+1,jj+1,jk)))) & 77 & * wmask(ji,jj,jk) 89 78 END DO 90 79 END DO 91 92 QBv(jpi,:,:)=QBv(jpim1,:,:) 93 QBv(:,jpj,:)=QBv(:,jpjm1,:) 94 95 ! 96 ! Interpolate Qiao parameter QBv into the grid_U and grid_V 97 !------------------------------------------------- 98 ! 99 DO jk = 1, jpk 100 DO jj = 1, jpjm1 101 DO ji = 1, jpim1 102 QBvu(ji,jj,jk) = 0.5 * umask(ji,jj,jk) * & 103 & ( QBv(ji ,jj,jk) * tmask(ji ,jj,jk) & 104 & + QBv(ji+1,jj,jk) * tmask(ji+1,jj,jk) ) 105 QBvv(ji,jj,jk) = 0.5 * vmask(ji,jj,jk) * & 106 & ( QBv(ji,jj ,jk) * tmask(ji,jj ,jk) & 107 & + QBv(ji,jj+1,jk) * tmask(ji,jj+1,jk) ) 108 END DO 80 END DO 81 ! 82 CALL lbc_lnk( qbv, 'W', 1. ) ! Lateral boundary conditions 83 84 ! 85 ! Interpolate Qiao parameter qbv into the grid_U and grid_V 86 !---------------------------------------------------------- 87 ! 88 DO jk = 1, jpk 89 DO jj = 1, jpjm1 90 DO ji = 1, fs_jpim1 91 qbvu(ji,jj,jk) = 0.5 * wumask(ji,jj,jk) * & 92 & ( qbv(ji,jj,jk) + qbv(ji+1,jj ,jk) ) 93 qbvv(ji,jj,jk) = 0.5 * wvmask(ji,jj,jk) * & 94 & ( qbv(ji,jj,jk) + qbv(ji ,jj+1,jk) ) 109 95 END DO 110 96 END DO 111 ! 112 QBvu(jpi,:,:)=QBvu(jpim1,:,:) 113 QBvu(:,jpj,:)=QBvu(:,jpjm1,:) 114 QBvv(jpi,:,:)=QBvv(jpim1,:,:) 115 QBvv(:,jpj,:)=QBvv(:,jpjm1,:) 97 END DO 98 ! 99 CALL lbc_lnk( qbvu, 'U', 1. ) ; CALL lbc_lnk( qbvv, 'V', 1. ) ! Lateral boundary conditions 116 100 117 ELSE 118 CALL ctl_stop( 'STOP', 'To use Qiao formulation you have to set: ln_wave=.true.') 119 ENDIF 120 ! 101 ! Enhance vertical mixing coeff. 102 !------------------------------- 103 ! 104 DO jk = 1, jpkm1 105 DO jj = 1, jpj 106 DO ji = 1, jpi 107 avmu(ji,jj,jk) = ( avmu(ji,jj,jk) + qbvu(ji,jj,jk) ) * umask(ji,jj,jk) 108 avmv(ji,jj,jk) = ( avmv(ji,jj,jk) + qbvv(ji,jj,jk) ) * vmask(ji,jj,jk) 109 avt (ji,jj,jk) = ( avt (ji,jj,jk) + qbv (ji,jj,jk) ) * tmask(ji,jj,jk) 110 END DO 111 END DO 112 END DO 113 ! 121 114 END SUBROUTINE zdf_qiao 115 116 INTEGER FUNCTION zdf_qiao_alloc() 117 !!---------------------------------------------------------------------- 118 !! *** FUNCTION zdf_qiao_alloc *** 119 !!---------------------------------------------------------------------- 120 ALLOCATE( qbv(jpi,jpj,jpk), qbvu(jpi,jpj,jpk), qbvv(jpi,jpj,jpk), & 121 & STAT = zdf_qiao_alloc ) 122 ! 123 IF( lk_mpp ) CALL mpp_sum ( zdf_qiao_alloc ) 124 IF( zdf_qiao_alloc > 0 ) CALL ctl_warn('zdf_qiao_alloc: allocation of arrays failed.') 125 ! 126 END FUNCTION zdf_qiao_alloc 122 127 123 128 !!====================================================================== -
branches/UKMO/r5936_INGV1_WAVE-coupling/NEMOGCM/NEMO/OPA_SRC/step.F90
r7279 r7334 133 133 IF( lk_zdftke ) CALL zdf_tke( kstp ) ! TKE closure scheme for Kz 134 134 IF( lk_zdfgls ) CALL zdf_gls( kstp ) ! GLS closure scheme for Kz 135 IF( ln_zdfqiao ) THEN 136 !Activated Qiao enhanced turbulence but neither ln_wave or ln_sdw are activated 137 IF ( .NOT.( ln_wave .AND. ln_sdw ) ) THEN 138 CALL ctl_stop ( 'Ask for wave Qiao enhanced turbulence but ln_wave and ln_sdw have to be activated') 139 ELSE 140 CALL zdf_qiao(kstp ) ! Qiao vertical mixing 141 DO jk = 1, jpkm1 142 DO jj = 1, jpj 143 DO ji = 1, jpi 144 avmu(ji,jj,jk) = (avmu(ji,jj,jk) + QBvu(ji,jj,jk)) * umask(ji,jj,jk) 145 avmv(ji,jj,jk) = (avmv(ji,jj,jk) + QBvv(ji,jj,jk)) * vmask(ji,jj,jk) 146 avt( ji,jj,jk) = (avt( ji,jj,jk) + QBv(ji,jj,jk)) * tmask(ji,jj,jk) 147 END DO 148 END DO 149 END DO 150 ENDIF 151 ENDIF 135 IF( ln_zdfqiao ) CALL zdf_qiao( kstp ) ! Qiao vertical mixing 152 136 ! 153 137 IF( lk_zdfcst ) THEN ! Constant Kz (reset avt, avm[uv] to the background value) -
branches/UKMO/r5936_INGV1_WAVE-coupling/NEMOGCM/SETTE/sette.sh
r5930 r7334 88 88 # 89 89 # Compiler among those in NEMOGCM/ARCH 90 COMPILER=X64_ADA 91 export BATCH_COMMAND_PAR="llsubmit" 90 module load cray-netcdf-hdf5parallel 91 COMPILER=XC40_METO 92 export BATCH_COMMAND_PAR="qsub" 92 93 export BATCH_COMMAND_SEQ=$BATCH_COMMAND_PAR 93 94 export INTERACT_FLAG="no"
Note: See TracChangeset
for help on using the changeset viewer.