Changeset 5899
- Timestamp:
- 2015-11-19T13:21:14+01:00 (8 years ago)
- Location:
- branches/2015/dev_5894_INGV_WAVE/NEMOGCM
- Files:
-
- 12 edited
- 2 copied
Legend:
- Unmodified
- Added
- Removed
-
branches/2015/dev_5894_INGV_WAVE/NEMOGCM/CONFIG/SHARED/namelist_ref
r4773 r5899 635 635 rn_bfrien = 50. ! local multiplying factor of bfr (ln_bfr2d=T) 636 636 ln_bfrimp = .true. ! implicit bottom friction (requires ln_zdfexp = .false. if true) 637 ln_zdfqiao = .false. ! Enhanced wave vertical mixing Qiao (2010) 637 638 / 638 639 !----------------------------------------------------------------------- … … 1177 1178 sn_usd = 'sdw_wave' , 1 , 'u_sd2d' , .true. , .false. , 'daily' , '' , '' , '' 1178 1179 sn_vsd = 'sdw_wave' , 1 , 'v_sd2d' , .true. , .false. , 'daily' , '' , '' , '' 1180 sn_swh = 'sdw_wave' , 1 , 'hs' , .true. , .false. , 'daily' , '' , '' , '' 1181 sn_wmp = 'sdw_wave' , 1 , 'wmp' , .true. , .false. , 'daily' , '' , '' , '' 1179 1182 sn_wn = 'sdw_wave' , 1 , 'wave_num' , .true. , .false. , 'daily' , '' , '' , '' 1180 1183 ! -
branches/2015/dev_5894_INGV_WAVE/NEMOGCM/CONFIG/cfg.txt
r4690 r5899 1 1 GYRE_PISCES OPA_SRC TOP_SRC 2 2 ORCA2_LIM_CFC_C14b OPA_SRC LIM_SRC_2 NST_SRC TOP_SRC 3 GYRE OPA_SRC4 3 GYRE_XIOS OPA_SRC 5 4 ORCA2_OFF_PISCES OPA_SRC OFF_SRC TOP_SRC … … 11 10 ORCA2_LIM_PISCES OPA_SRC LIM_SRC_2 NST_SRC TOP_SRC 12 11 ORCA2_LIM3 OPA_SRC LIM_SRC_3 NST_SRC 12 GYRE OPA_SRC -
branches/2015/dev_5894_INGV_WAVE/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90
r4770 r5899 405 405 zv_frc(:,:) = zv_frc(:,:) + zraur * z1_2 * ( vtau_b(:,:) + vtau(:,:) ) * hvr(:,:) 406 406 ENDIF 407 408 ! Add Stokes Coriolis if defined 409 IF ( ln_stcor ) THEN 410 DO jj = 1, jpjm1 411 DO ji = 1, fs_jpim1 ! vector opt. 412 413 zy1 = ff(ji ,jj-1) * ( vsd2d(ji ,jj-1) + vsd2d(ji+1,jj-1) ) 414 zy2 = ff(ji ,jj ) * ( vsd2d(ji ,jj ) + vsd2d(ji+1,jj ) ) 415 zx1 = ff(ji-1,jj ) * ( usd2d(ji-1,jj ) + usd2d(ji-1,jj+1) ) 416 zx2 = ff(ji ,jj ) * ( usd2d(ji ,jj ) + usd2d(ji ,jj+1) ) 417 418 zu_frc(ji,jj) = zu_frc(ji,jj) + 0.25 * ( zy1 + zy2 ) * hur(ji,jj) 419 zv_frc(ji,jj) = zv_frc(ji,jj) - 0.25 * ( zx1 + zx2 ) * hvr(ji,jj) 420 END DO 421 END DO 422 ENDIF 423 407 424 ! 408 425 IF ( ln_apr_dyn ) THEN ! Add atm pressure forcing -
branches/2015/dev_5894_INGV_WAVE/NEMOGCM/NEMO/OPA_SRC/DYN/sshwzv.F90
r4486 r5899 9 9 !! - ! 2010-09 (D.Storkey and E.O'Dea) bug fixes for BDY module 10 10 !! 3.3 ! 2011-10 (M. Leclair) split former ssh_wzv routine and remove all vvl related work 11 !! 3.6 ! 2014-10 (E. Clementi, P. Oddo) add wave contribution to surface vertical velocity 11 12 !!---------------------------------------------------------------------- 12 13 … … 42 43 USE wrk_nemo ! Memory Allocation 43 44 USE timing ! Timing 45 USE sbcwave, ONLY: usd2dt, vsd2dt,wsd3d 44 46 45 47 IMPLICIT NONE … … 172 174 INTEGER :: ji, jj, jk ! dummy loop indices 173 175 REAL(wp) :: z1_2dt ! local scalars 176 ! 177 REAL(wp), ALLOCATABLE, DIMENSION(:,: ) :: sshnu, sshnv, dsshnu,dsshnv 174 178 !!---------------------------------------------------------------------- 175 179 … … 220 224 END DO 221 225 ENDIF 226 ! 227 ! In case ln_wave and ln_sdw the surface vertical velocity is modified 228 ! accounting for Sokes Drift velocity 229 IF ( ln_wave .AND. ln_sdw ) THEN 230 ALLOCATE(sshnu(jpi,jpj),sshnv(jpi,jpj),dsshnu(jpi,jpj),dsshnv(jpi,jpj)) 231 sshnu (:,:) = 0._wp 232 sshnv (:,:) = 0._wp 233 dsshnu(:,:) = 0._wp 234 dsshnv(:,:) = 0._wp 235 ! sshn interpolated on U-V grid 236 !--------------------------------- 237 DO jj = 1 , jpjm1 238 DO ji = 1 , jpim1 239 sshnu(ji,jj) = 0.5 * ( 2. - umask(ji,jj,1) ) * & 240 & ( sshn(ji ,jj) * tmask(ji ,jj,1) & 241 & + sshn(ji+1,jj) * tmask(ji+1,jj,1) ) 242 sshnv(ji,jj) = 0.5 * ( 2. - vmask(ji,jj,1) ) * & 243 & ( sshn(ji,jj ) * tmask(ji,jj ,1) & 244 & + sshn(ji,jj+1) * tmask(ji,jj+1,1) ) 245 ENDDO 246 ENDDO 247 ! Compute d(ssh)/dx and d(ssh)/dy 248 !--------------------------------- 249 DO jj = 1 , jpjm1 250 DO ji = 1 , jpim1 251 dsshnu(ji,jj) = ( sshnu(ji+1,jj) - sshnu(ji,jj) ) / e1u(ji,jj) 252 dsshnv(ji,jj) = ( sshnv(ji,jj+1) - sshnv(ji,jj) ) / e2v(ji,jj) 253 ENDDO 254 ENDDO 255 ! Compute the surface vertical velocity accounting for the Stokes Drift 256 !--------------------------------------------------------------------- 257 wn(:,:,1) = wn(:,:,1) + usd2dt(:,:) * dsshnu(:,:) & 258 & + vsd2dt(:,:) * dsshnv(:,:) & 259 & - ( wsd3d (:,:,1) ) * tmask(:,:,1) 260 ENDIF 261 ! 222 262 223 263 #if defined key_bdy -
branches/2015/dev_5894_INGV_WAVE/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_oce.F90
r4306 r5899 52 52 LOGICAL , PUBLIC :: ln_cdgw !: true if neutral drag coefficient from wave model 53 53 LOGICAL , PUBLIC :: ln_sdw !: true if 3d stokes drift from wave model 54 LOGICAL , PUBLIC :: ln_tauoc !: true if normalized stress from wave is used 54 55 ! 55 56 LOGICAL , PUBLIC :: ln_icebergs !: Icebergs -
branches/2015/dev_5894_INGV_WAVE/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90
r4822 r5899 84 84 NAMELIST/namsbc/ nn_fsbc , ln_ana , ln_flx, ln_blk_clio, ln_blk_core, ln_cpl, & 85 85 & ln_blk_mfs, ln_apr_dyn, nn_ice, nn_ice_embd, ln_dm2dc , ln_rnf, & 86 & ln_ssr , nn_fwb , ln_cdgw , ln_wave , ln_sdw, nn_lsm, cn_iceflx 86 & ln_ssr , nn_fwb , ln_cdgw , ln_wave , ln_sdw, ln_tauoc, & 87 & nn_lsm, cn_iceflx 87 88 INTEGER :: ios 88 89 !!---------------------------------------------------------------------- … … 337 338 CALL sbc_cpl_rcv ( kt, nn_fsbc, nn_ice ) ! 338 339 END SELECT 339 340 IF (ln_wave .AND. ln_tauoc) THEN 341 utau(:,:) = utau(:,:)*tauoc_wave(:,:) 342 vtau(:,:) = vtau(:,:)*tauoc_wave(:,:) 343 taum(:,:) = taum(:,:)*tauoc_wave(:,:) 344 ! 345 SELECT CASE( nsbc ) 346 CASE( 0,1,2,3,5,-1 ) ; 347 IF(lwp) WRITE(numout,*) 'WARNING: You are subtracting the wave stress to the ocean. & 348 & If not requested select ln_tauoc=.false' 349 END SELECT 350 ! 351 END IF 340 352 ! !== Misc. Options ==! 341 353 -
branches/2015/dev_5894_INGV_WAVE/NEMOGCM/NEMO/OPA_SRC/SBC/sbcwave.F90
r4624 r5899 4 4 !! Wave module 5 5 !!====================================================================== 6 !! History : 3.3.1 ! 2011-09 (Adani M) Original code: Drag Coefficient 7 !! : 3.4 ! 2012-10 (Adani M) Stokes Drift 6 !! History : 3.6 !2014-09 (Clementi E, Oddo P)New Stokes Drift Computation 7 !! : 3.3.1 !2011-09 (Adani M) Original code: Drag Coefficient 8 !! : 3.4 !2012-10 (Adani M) Stokes Drift 8 9 !!---------------------------------------------------------------------- 9 10 USE iom ! I/O manager library 10 11 USE in_out_manager ! I/O manager 11 12 USE lib_mpp ! distribued memory computing library 12 USE fldread 13 USE fldread ! read input fields 13 14 USE oce 14 USE sbc_oce 15 USE sbc_oce ! Surface boundary condition: ocean fields 15 16 USE domvvl 16 17 USE phycst 17 18 18 19 !!---------------------------------------------------------------------- … … 25 26 PUBLIC sbc_wave ! routine called in sbc_blk_core or sbc_blk_mfs 26 27 27 INTEGER , PARAMETER :: jpfld = 3 ! maximum number of files to read for srokes drift28 INTEGER , PARAMETER :: jpfld = 4 ! number of files to read for stokes drift 28 29 INTEGER , PARAMETER :: jp_usd = 1 ! index of stokes drift (i-component) (m/s) at T-point 29 30 INTEGER , PARAMETER :: jp_vsd = 2 ! index of stokes drift (j-component) (m/s) at T-point 30 INTEGER , PARAMETER :: jp_wn = 3 ! index of wave number (1/m) at T-point 31 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_cd ! structure of input fields (file informations, fields read) Drag Coefficient 32 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_sd ! structure of input fields (file informations, fields read) Stokes Drift 31 INTEGER , PARAMETER :: jp_swh = 3 ! index of significant wave hight (m) at T-point 32 INTEGER , PARAMETER :: jp_wmp = 4 ! index of mean wave period (s) at T-point 33 ! 34 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_cd ! structure of input fields (file informations, fields read) Drag Coefficient 35 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_sd ! structure of input fields (file informations, fields read) Stokes Drift 36 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_wn ! structure of input fields (file informations, fields read) wave number for Qiao 37 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_tauoc ! structure of input fields (file informations, fields read) normalized wave stress into the ocean 33 38 REAL(wp),PUBLIC,ALLOCATABLE,DIMENSION (:,:) :: cdn_wave 34 REAL(wp),ALLOCATABLE,DIMENSION (:,:) :: usd2d,vsd2d,uwavenum,vwavenum 39 REAL(wp),ALLOCATABLE,DIMENSION (:,:) :: usd2d,vsd2d 40 REAL(wp),PUBLIC,ALLOCATABLE,DIMENSION (:,:) :: swh,wmp,wnum 41 REAL(wp),PUBLIC,ALLOCATABLE,DIMENSION (:,:) :: usd2dt,vsd2dt,tsd2d 35 42 REAL(wp),PUBLIC,ALLOCATABLE,DIMENSION (:,:,:) :: usd3d,vsd3d,wsd3d 43 REAL(wp),PUBLIC,ALLOCATABLE,DIMENSION (:,:) :: tauoc_wave 44 LOGICAL, PUBLIC :: ln_stcor = .FALSE. 36 45 37 46 !! * Substitutions … … 54 63 !! - Read stokes drift 2d in netcdf files 55 64 !! - Read wave number in netcdf files 56 !! - Compute 3d stokes drift using monochromatic 65 !! - Compute 3d stokes drift using Breivik et al.,2014 66 !! formulation 57 67 !! ** action : 58 68 !! … … 61 71 USE divcur 62 72 USE wrk_nemo 73 USE zdf_oce, ONLY : ln_zdfqiao 63 74 #if defined key_bdy 64 75 USE bdy_oce, ONLY : bdytmask … … 69 80 INTEGER :: ios ! Local integer output status for namelist read 70 81 REAL(wp),DIMENSION(:,:,:),POINTER :: udummy,vdummy,hdivdummy,rotdummy 71 REAL :: z2dt,z1_2dt 82 REAL(wp) :: z2dt,z1_2dt 83 REAL(wp) :: ztransp,zsp0, zk, zus,zvs 84 REAL(wp), DIMENSION(jpi,jpj) :: zfac 72 85 TYPE(FLD_N), DIMENSION(jpfld) :: slf_i ! array of namelist informations on the fields to read 73 86 CHARACTER(len=100) :: cn_dir ! Root directory for location of drag coefficient files 74 TYPE(FLD_N) :: sn_cdg, sn_usd, sn_vsd, sn_wn ! informations about the fields to be read 75 !!--------------------------------------------------------------------- 76 NAMELIST/namsbc_wave/ sn_cdg, cn_dir, sn_usd, sn_vsd, sn_wn 87 TYPE(FLD_N) :: sn_cdg, sn_usd, sn_vsd, & 88 & sn_swh, sn_wmp, sn_wnum, sn_tauoc ! informations about the fields to be read 89 !!--------------------------------------------------------------------- 90 NAMELIST/namsbc_wave/ sn_cdg, cn_dir, sn_usd, sn_vsd, sn_swh, sn_wmp, sn_wnum, ln_stcor, sn_tauoc 77 91 !!--------------------------------------------------------------------- 78 92 … … 103 117 cdn_wave(:,:) = 0.0 104 118 ENDIF 119 ! 120 IF ( ln_tauoc ) THEN 121 ALLOCATE( sf_tauoc(1), STAT=ierror ) !* allocate and fill sf_wave with sn_tauoc 122 IF( ierror > 0 ) CALL ctl_stop( 'STOP', 'sbc_wave: unable to allocate sf_wave structure' ) 123 ! 124 ALLOCATE( sf_tauoc(1)%fnow(jpi,jpj,1) ) 125 IF( sn_cdg%ln_tint ) ALLOCATE( sf_tauoc(1)%fdta(jpi,jpj,1,2) ) 126 CALL fld_fill( sf_tauoc, (/ sn_tauoc /), cn_dir, 'sbc_wave', 'Wave module', 'namsbc_wave' ) 127 ALLOCATE( tauoc_wave(jpi,jpj) ) 128 tauoc_wave(:,:) = 0.0 129 ENDIF 130 ! 105 131 IF ( ln_sdw ) THEN 106 slf_i(jp_usd) = sn_usd ; slf_i(jp_vsd) = sn_vsd; slf_i(jp_wn) = sn_wn 107 ALLOCATE( sf_sd(3), STAT=ierror ) !* allocate and fill sf_wave with sn_cdg 132 slf_i(jp_usd) = sn_usd ; slf_i(jp_vsd) = sn_vsd; 133 slf_i(jp_swh) = sn_swh ; slf_i(jp_wmp) = sn_wmp; 134 ALLOCATE( sf_sd(jpfld), STAT=ierror ) !* allocate and fill sf_sd with stokes drift 108 135 IF( ierror > 0 ) CALL ctl_stop( 'STOP', 'sbc_wave: unable to allocate sf_wave structure' ) 109 136 ! … … 112 139 IF( slf_i(ifpr)%ln_tint ) ALLOCATE( sf_sd(ifpr)%fdta(jpi,jpj,1,2) ) 113 140 END DO 141 ! 114 142 CALL fld_fill( sf_sd, slf_i, cn_dir, 'sbc_wave', 'Wave module ', 'namsbc_wave' ) 115 ALLOCATE( usd2d(jpi,jpj),vsd2d(jpi,jpj),u wavenum(jpi,jpj),vwavenum(jpi,jpj))143 ALLOCATE( usd2d(jpi,jpj),vsd2d(jpi,jpj),usd2dt(jpi,jpj),vsd2dt(jpi,jpj)) 116 144 ALLOCATE( usd3d(jpi,jpj,jpk),vsd3d(jpi,jpj,jpk),wsd3d(jpi,jpj,jpk) ) 117 usd2d(:,:) = 0.0 ; vsd2d(:,:) = 0.0 ; uwavenum(:,:) = 0.0 ; vwavenum(:,:) = 0.0 118 usd3d(:,:,:) = 0.0 ;vsd3d(:,:,:) = 0.0 ; wsd3d(:,:,:) = 0.0 145 ALLOCATE( swh(jpi,jpj), wmp(jpi,jpj) ) 146 usd2d(:,:) = 0.0 ; vsd2d(:,:) = 0.0 ; 147 usd2dt(:,:) = 0.0 ; vsd2dt(:,:) = 0.0 ; 148 usd3d(:,:,:) = 0.0 ; vsd3d(:,:,:) = 0.0 ; 149 wsd3d(:,:,:) = 0.0 ; 150 swh(:,:) = 0.0 ; wmp(:,:) = 0.0 ; 151 IF ( ln_zdfqiao ) THEN 152 ALLOCATE( sf_wn(1), STAT=ierror ) !* allocate and fillsf_wave with sn_wnum 153 IF( ierror > 0 ) CALL ctl_stop( 'STOP', 'sbc_wave: unable toallocate sf_wave structure' ) 154 ALLOCATE( sf_wn(1)%fnow(jpi,jpj,1) ) 155 IF( sn_wnum%ln_tint ) ALLOCATE( sf_wn(1)%fdta(jpi,jpj,1,2) ) 156 CALL fld_fill( sf_wn, (/ sn_wnum /), cn_dir, 'sbc_wave', 'Wave module', 'namsbc_wave' ) 157 ALLOCATE( wnum(jpi,jpj),tsd2d(jpi,jpj) ) 158 wnum(:,:) = 0.0; tsd2d(:,:) = 0.0 159 ENDIF 119 160 ENDIF 120 161 ENDIF 121 !122 162 ! 123 163 IF ( ln_cdgw ) THEN … … 125 165 cdn_wave(:,:) = sf_cd(1)%fnow(:,:,1) 126 166 ENDIF 167 ! 168 IF ( ln_tauoc ) THEN 169 CALL fld_read( kt, nn_fsbc, sf_tauoc ) !* read wave norm stress from external forcing 170 tauoc_wave(:,:) = sf_tauoc(1)%fnow(:,:,1) 171 ENDIF 172 ! 127 173 IF ( ln_sdw ) THEN 128 CALL fld_read( kt, nn_fsbc, sf_sd ) !* read drag coefficient from external forcing 129 130 ! Interpolate wavenumber, stokes drift into the grid_V and grid_V 174 CALL fld_read( kt, nn_fsbc, sf_sd ) !* read wave parameters from external forcing 175 swh(:,:) = sf_sd(jp_swh)%fnow(:,:,1) 176 wmp(:,:) = sf_sd(jp_wmp)%fnow(:,:,1) 177 usd2dt(:,:) = sf_sd(jp_usd)%fnow(:,:,1) 178 vsd2dt(:,:) = sf_sd(jp_vsd)%fnow(:,:,1) 131 179 !------------------------------------------------- 132 180 ! Interpolate stokes drift into the grid_V and grid_V 181 !------------------------------------------------- 133 182 DO jj = 1, jpjm1 134 183 DO ji = 1, jpim1 135 uwavenum(ji,jj)=0.5 * ( 2. - umask(ji,jj,1) ) * ( sf_sd(3)%fnow(ji,jj,1) * tmask(ji,jj,1) & 136 & + sf_sd(3)%fnow(ji+1,jj,1) * tmask(ji+1,jj,1) ) 137 138 vwavenum(ji,jj)=0.5 * ( 2. - vmask(ji,jj,1) ) * ( sf_sd(3)%fnow(ji,jj,1) * tmask(ji,jj,1) & 139 & + sf_sd(3)%fnow(ji,jj+1,1) * tmask(ji,jj+1,1) ) 140 141 usd2d(ji,jj) = 0.5 * ( 2. - umask(ji,jj,1) ) * ( sf_sd(1)%fnow(ji,jj,1) * tmask(ji,jj,1) & 142 & + sf_sd(1)%fnow(ji+1,jj,1) * tmask(ji+1,jj,1) ) 143 144 vsd2d(ji,jj) = 0.5 * ( 2. - vmask(ji,jj,1) ) * ( sf_sd(2)%fnow(ji,jj,1) * tmask(ji,jj,1) & 145 & + sf_sd(2)%fnow(ji,jj+1,1) * tmask(ji,jj+1,1) ) 184 usd2d(ji,jj) = 0.5 * ( 2. - umask(ji,jj,1) ) * ( usd2dt(ji,jj) * tmask(ji,jj,1) & 185 & + usd2dt(ji+1,jj) * tmask(ji+1,jj,1) ) 186 187 vsd2d(ji,jj) = 0.5 * ( 2. - vmask(ji,jj,1) ) * ( vsd2dt(ji,jj) * tmask(ji,jj,1) & 188 & + vsd2dt(ji,jj+1) * tmask(ji,jj+1,1) ) 146 189 END DO 147 190 END DO 148 149 !Computation of the 3d Stokes Drift 191 ! 192 CALL lbc_lnk( usd2d(:,:), 'U', -1. ) 193 CALL lbc_lnk( vsd2d(:,:), 'V', -1. ) 194 195 !Computation of the 3d Stokes Drift according to Breivik et al.,2014 196 !(DOI: 10.1175/JPO-D-14-0020.1) 150 197 DO jk = 1, jpk 198 DO jj = 1, jpj 199 DO ji = 1, jpi 200 201 ! On T grid 202 ! Stokes transport speed estimated from Hs and Tmean 203 ztransp = 2.0_wp*rpi*swh(ji,jj)**2.0_wp/(16.0_wp*MAX(wmp(ji,jj),0.0000001_wp)) 204 205 ! Stokes surface speed 206 zsp0 = SQRT( sf_sd(jp_usd)%fnow(ji,jj,1)**2 + sf_sd(jp_vsd)%fnow(ji,jj,1)**2) 207 208 ! Wavenumber scale 209 zk = ABS(zsp0)/MAX(ABS(5.97_wp*ztransp),0.0000001_wp) 210 211 ! Depth attenuation 212 zfac(ji,jj) = EXP(-2.0_wp*zk*fsdept(ji,jj,jk))/(1.0_wp+8.0_wp*zk*fsdept(ji,jj,jk)) 213 214 END DO 215 END DO 216 ! 151 217 DO jj = 1, jpj-1 152 218 DO ji = 1, jpi-1 153 usd3d(ji,jj,jk) = usd2d(ji,jj)*exp(2.0*uwavenum(ji,jj)*(-MIN( gdept_0(ji,jj,jk) , gdept_0(ji+1,jj ,jk)))) 154 vsd3d(ji,jj,jk) = vsd2d(ji,jj)*exp(2.0*vwavenum(ji,jj)*(-MIN( gdept_0(ji,jj,jk) , gdept_0(ji ,jj+1,jk)))) 219 ! Into the U and V Grid 220 zus = 0.5 * ( 2. - umask(ji,jj,1) ) * ( zfac(ji,jj) * tmask(ji,jj,1) & 221 & + zfac(ji+1,jj) * tmask(ji+1,jj,1) ) 222 223 zvs = 0.5 * ( 2. - vmask(ji,jj,1) ) * ( zfac(ji,jj) * tmask(ji,jj,1) & 224 & + zfac(ji,jj+1) * tmask(ji,jj+1,1) ) 225 226 usd3d(ji,jj,jk) = usd2d(ji,jj)*zus 227 vsd3d(ji,jj,jk) = vsd2d(ji,jj)*zvs 155 228 END DO 156 229 END DO 157 usd3d(jpi,:,jk) = usd2d(jpi,:)*exp( 2.0*uwavenum(jpi,:)*(-gdept_0(jpi,:,jk)) )158 vsd3d(:,jpj,jk) = vsd2d(:,jpj)*exp( 2.0*vwavenum(:,jpj)*(-gdept_0(:,jpj,jk)) )159 230 END DO 231 ! 232 CALL lbc_lnk( usd3d(:,:,:), 'U', -1. ) 233 CALL lbc_lnk( vsd3d(:,:,:), 'V', -1. ) 160 234 161 235 CALL wrk_alloc( jpi,jpj,jpk,udummy,vdummy,hdivdummy,rotdummy) 162 163 udummy(:,:,:)=un(:,:,:) 164 vdummy(:,:,:)=vn(:,:,:) 165 hdivdummy(:,:,:)=hdivn(:,:,:) 166 rotdummy(:,:,:)=rotn(:,:,:) 167 un(:,:,:)=usd3d(:,:,:) 168 vn(:,:,:)=vsd3d(:,:,:) 236 !------------------------------------------------------------------- 237 ! Store horiz. velocity divergence and Rot in TMP array 238 ! ------------------------------------------------------------------- 239 240 udummy(:,:,:) = un(:,:,:) 241 vdummy(:,:,:) = vn(:,:,:) 242 hdivdummy(:,:,:) = hdivn(:,:,:) 243 rotdummy(:,:,:) = rotn(:,:,:) 244 un(:,:,:) = usd3d(:,:,:) 245 vn(:,:,:) = vsd3d(:,:,:) 246 247 ! Compute divergence using 3d stokes drift to calculate vertical SD 248 ! velocity 249 ! ------------------------------------------------------------------- 250 169 251 CALL div_cur(kt) 252 253 ! ------------------------------------------------------------------- 170 254 ! !------------------------------! 171 255 ! ! Now Vertical Velocity ! … … 177 261 ! - ML - need 3 lines here because replacement of fse3t by its expression yields too long lines otherwise 178 262 wsd3d(:,:,jk) = wsd3d(:,:,jk+1) - fse3t_n(:,:,jk) * hdivn(:,:,jk) & 179 & - ( fse3t_a(:,:,jk) - fse3t_b(:,:,jk) ) &180 & * tmask(:,:,jk) * z1_2dt263 & - ( fse3t_a(:,:,jk) - fse3t_b(:,:,jk) ) & 264 & * tmask(:,:,jk) * z1_2dt 181 265 #if defined key_bdy 182 266 wsd3d(:,:,jk) = wsd3d(:,:,jk) * bdytmask(:,:) 183 267 #endif 184 268 END DO 185 hdivn(:,:,:)=hdivdummy(:,:,:) 186 rotn(:,:,:)=rotdummy(:,:,:) 187 vn(:,:,:)=vdummy(:,:,:) 188 un(:,:,:)=udummy(:,:,:) 269 ! Back to state variables 270 ! ------------------------------------------------------------------- 271 hdivn(:,:,:) = hdivdummy(:,:,:) 272 rotn(:,:,:) = rotdummy(:,:,:) 273 vn(:,:,:) = vdummy(:,:,:) 274 un(:,:,:) = udummy(:,:,:) 275 189 276 CALL wrk_dealloc( jpi,jpj,jpk,udummy,vdummy,hdivdummy,rotdummy) 190 ENDIF 277 ! 278 IF ( ln_zdfqiao ) THEN 279 wnum(:,:) = sf_wn(1)%fnow(:,:,1) 280 ! Calculate the module of the stokes drift on T grid 281 !------------------------------------------------- 282 DO jj = 1, jpj 283 DO ji = 1, jpi 284 tsd2d(ji,jj) = ((sf_sd(jp_usd)%fnow(ji,jj,1) * tmask(ji,jj,1))**2.0 + & 285 & (sf_sd(jp_vsd)%fnow(ji,jj,1) * tmask(ji,jj,1))**2.0)**0.5 286 END DO 287 END DO 288 ENDIF 289 ENDIF 290 291 191 292 END SUBROUTINE sbc_wave 192 293 -
branches/2015/dev_5894_INGV_WAVE/NEMOGCM/NEMO/OPA_SRC/TRA/traadv.F90
r4624 r5899 7 7 !! 3.3 ! 2010-09 (C. Ethe, G. Madec) merge TRC-TRA + switch from velocity to transport 8 8 !! 4.0 ! 2011-06 (G. Madec) Addition of Mixed Layer Eddy parameterisation 9 !! 3.6 ! 2015-06 (E. Clementi) Addition of Stokes drift in case of wave coupling 9 10 !!---------------------------------------------------------------------- 10 11 … … 32 33 USE wrk_nemo ! Memory Allocation 33 34 USE timing ! Timing 34 35 USE sbcwave ! wave module 36 USE sbc_oce ! surface boundary condition: ocean 35 37 36 38 IMPLICIT NONE … … 80 82 ! 81 83 CALL wrk_alloc( jpi, jpj, jpk, zun, zvn, zwn ) 84 ! 85 zun(:,:,:) = 0.0 86 zvn(:,:,:) = 0.0 87 zwn(:,:,:) = 0.0 82 88 ! ! set time step 83 89 IF( neuler == 0 .AND. kt == nit000 ) THEN ! at nit000 … … 89 95 IF( nn_cla == 1 .AND. cp_cfg == 'orca' .AND. jp_cfg == 2 ) CALL cla_traadv( kt ) !== Cross Land Advection ==! (hor. advection) 90 96 ! 91 ! !== effective transport ==! 92 DO jk = 1, jpkm1 93 zun(:,:,jk) = e2u(:,:) * fse3u(:,:,jk) * un(:,:,jk) ! eulerian transport only 94 zvn(:,:,jk) = e1v(:,:) * fse3v(:,:,jk) * vn(:,:,jk) 95 zwn(:,:,jk) = e1t(:,:) * e2t(:,:) * wn(:,:,jk) 96 END DO 97 IF (ln_wave .AND. ln_sdw) THEN 98 DO jk = 1, jpkm1 99 zun(:,:,jk) = e2u(:,:) * fse3u(:,:,jk) * & 100 & ( un(:,:,jk) + usd3d(:,:,jk) ) !eulerian transport + Stokes Drift 101 zvn(:,:,jk) = e1v(:,:) * fse3v(:,:,jk) * & 102 & ( vn(:,:,jk) + vsd3d(:,:,jk) ) 103 zwn(:,:,jk) = e1t(:,:) * e2t(:,:) * & 104 & ( wn(:,:,jk) + wsd3d(:,:,jk) ) 105 END DO 106 ELSE 107 DO jk = 1, jpkm1 108 zun(:,:,jk) = e2u(:,:) * fse3u(:,:,jk) * un(:,:,jk) ! eulerian transport only 109 zvn(:,:,jk) = e1v(:,:) * fse3v(:,:,jk) * vn(:,:,jk) 110 zwn(:,:,jk) = e1t(:,:) * e2t(:,:) * wn(:,:,jk) 111 END DO 112 ENDIF 97 113 ! 98 114 IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN -
branches/2015/dev_5894_INGV_WAVE/NEMOGCM/NEMO/OPA_SRC/ZDF/zdf_oce.F90
r4147 r5899 35 35 INTEGER , PUBLIC :: nn_npc !: non penetrative convective scheme call frequency 36 36 INTEGER , PUBLIC :: nn_npcp !: non penetrative convective scheme print frequency 37 LOGICAL , PUBLIC :: ln_zdfqiao !: Enhanced wave vertical mixing Qiao(2010) formulation flag 37 38 38 39 -
branches/2015/dev_5894_INGV_WAVE/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfini.F90
r4677 r5899 53 53 INTEGER :: ios 54 54 !! 55 NAMELIST/namzdf/ rn_avm0, rn_avt0, nn_avb, nn_havtb, ln_zdfexp, nn_zdfexp, & 56 & ln_zdfevd, nn_evdm, rn_avevd, ln_zdfnpc, nn_npc, nn_npcp 55 NAMELIST/namzdf/ rn_avm0, rn_avt0, nn_avb, nn_havtb, ln_zdfexp, nn_zdfexp, & 56 & ln_zdfevd, nn_evdm, rn_avevd, ln_zdfnpc, nn_npc, nn_npcp, & 57 & ln_zdfqiao 57 58 !!---------------------------------------------------------------------- 58 59 … … 83 84 WRITE(numout,*) ' npc call frequency nn_npc = ', nn_npc 84 85 WRITE(numout,*) ' npc print frequency nn_npcp = ', nn_npcp 86 WRITE(numout,*) ' Qiao formulation flag ln_zdfqiao=', ln_zdfqiao 85 87 ENDIF 86 88 -
branches/2015/dev_5894_INGV_WAVE/NEMOGCM/NEMO/OPA_SRC/step.F90
r4760 r5899 25 25 !! 3.4 ! 2011-04 (G. Madec, C. Ethe) Merge of dtatem and dtasal 26 26 !! ! 2012-07 (J. Simeon, G. Madec. C. Ethe) Online coarsening of outputs 27 !! 3.6 ! 2014-10 (E. Clementi, P. Oddo) Add Qiao vertical mixing in case of waves 27 28 !!---------------------------------------------------------------------- 28 29 … … 70 71 !! -8- Outputs and diagnostics 71 72 !!---------------------------------------------------------------------- 72 INTEGER :: j k ! dummy loop indice73 INTEGER :: ji,jj,jk ! dummy loop indice 73 74 INTEGER :: indic ! error indicator if < 0 74 75 INTEGER :: kcall ! optional integer argument (dom_vvl_sf_nxt) … … 116 117 IF( lk_zdfgls ) CALL zdf_gls( kstp ) ! GLS closure scheme for Kz 117 118 IF( lk_zdfkpp ) CALL zdf_kpp( kstp ) ! KPP closure scheme for Kz 119 IF( ln_zdfqiao ) THEN 120 CALL zdf_qiao(kstp ) ! Qiao vertical mixing 121 DO jk = 1, jpkm1 122 DO jj = 1, jpj 123 DO ji = 1, jpi 124 avmu(ji,jj,jk) = (avmu(ji,jj,jk) + QBvu(ji,jj,jk)) * umask(ji,jj,jk) 125 avmv(ji,jj,jk) = (avmv(ji,jj,jk) + QBvv(ji,jj,jk)) * vmask(ji,jj,jk) 126 avt( ji,jj,jk) = (avt( ji,jj,jk) + QBv(ji,jj,jk)) * tmask(ji,jj,jk) 127 END DO 128 END DO 129 END DO 130 ENDIF 131 118 132 IF( lk_zdfcst ) THEN ! Constant Kz (reset avt, avm[uv] to the background value) 119 133 avt (:,:,:) = rn_avt0 * tmask(:,:,:) … … 121 135 avmv(:,:,:) = rn_avm0 * vmask(:,:,:) 122 136 ENDIF 137 ! 123 138 IF( ln_rnf_mouth ) THEN ! increase diffusivity at rivers mouths 124 139 DO jk = 2, nkrnf ; avt(:,:,jk) = avt(:,:,jk) + 2.e0 * rn_avt_rnf * rnfmsk(:,:) * tmask(:,:,jk) ; END DO … … 184 199 CALL dyn_ldf ( kstp ) ! lateral mixing 185 200 IF( ln_neptsimp ) CALL dyn_nept_cor ( kstp ) ! add Neptune velocities (simplified) 201 IF( ln_stcor ) CALL dyn_stcor ( kstp ) ! Stokes-Coriolis forcing 202 186 203 #if defined key_agrif 187 204 IF(.NOT. Agrif_Root()) CALL Agrif_Sponge_dyn ! momentum sponge … … 286 303 CALL dyn_ldf( kstp ) ! lateral mixing 287 304 IF( ln_neptsimp ) CALL dyn_nept_cor( kstp ) ! add Neptune velocities (simplified) 305 IF( ln_stcor ) CALL dyn_stcor ( kstp ) ! Stokes-Coriolis forcing (ln_stcor set in SBC/sbc_oce.F90) 306 288 307 #if defined key_agrif 289 308 IF(.NOT. Agrif_Root()) CALL Agrif_Sponge_dyn ! momemtum sponge -
branches/2015/dev_5894_INGV_WAVE/NEMOGCM/NEMO/OPA_SRC/step_oce.F90
r4328 r5899 27 27 USE cpl_oasis3, ONLY : lk_cpl 28 28 USE sbctide ! Tide initialisation 29 USE sbcwave ! Wave intialisation 29 30 30 31 USE traqsr ! solar radiation penetration (tra_qsr routine) … … 51 52 USE dynspg ! surface pressure gradient (dyn_spg routine) 52 53 USE dynnept ! simp. form of Neptune effect(dyn_nept_cor routine) 54 USE dynstcor ! simp. form of Stokes-Coriolis 53 55 54 56 USE dynnxt ! time-stepping (dyn_nxt routine) … … 80 82 USE zdfric ! Richardson vertical mixing (zdf_ric routine) 81 83 USE zdfmxl ! Mixed-layer depth (zdf_mxl routine) 84 USE zdfqiao !Qiao module wave induced mixing (zdf_qiao routine) 82 85 83 86 USE zpshde ! partial step: hor. derivative (zps_hde routine)
Note: See TracChangeset
for help on using the changeset viewer.