Changeset 12377 for NEMO/trunk/src/OCE/TRD/trdvor.F90
- Timestamp:
- 2020-02-12T15:39:06+01:00 (4 years ago)
- Location:
- NEMO/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/trunk
- Property svn:externals
-
old new 3 3 ^/utils/build/mk@HEAD mk 4 4 ^/utils/tools@HEAD tools 5 ^/vendors/AGRIF/dev @HEAD ext/AGRIF5 ^/vendors/AGRIF/dev_r11615_ENHANCE-04_namelists_as_internalfiles_agrif@HEAD ext/AGRIF 6 6 ^/vendors/FCM@HEAD ext/FCM 7 7 ^/vendors/IOIPSL@HEAD ext/IOIPSL
-
- Property svn:externals
-
NEMO/trunk/src/OCE/TRD/trdvor.F90
r11536 r12377 56 56 57 57 !! * Substitutions 58 # include " vectopt_loop_substitute.h90"58 # include "do_loop_substitute.h90" 59 59 !!---------------------------------------------------------------------- 60 60 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 78 78 79 79 80 SUBROUTINE trd_vor( putrd, pvtrd, ktrd, kt )80 SUBROUTINE trd_vor( putrd, pvtrd, ktrd, kt, Kmm ) 81 81 !!---------------------------------------------------------------------- 82 82 !! *** ROUTINE trd_vor *** … … 88 88 INTEGER , INTENT(in ) :: ktrd ! trend index 89 89 INTEGER , INTENT(in ) :: kt ! time step 90 INTEGER , INTENT(in ) :: Kmm ! time level index 90 91 ! 91 92 INTEGER :: ji, jj ! dummy loop indices … … 94 95 95 96 SELECT CASE( ktrd ) 96 CASE( jpdyn_hpg ) ; CALL trd_vor_zint( putrd, pvtrd, jpvor_prg ) ! Hydrostatique Pressure Gradient97 CASE( jpdyn_keg ) ; CALL trd_vor_zint( putrd, pvtrd, jpvor_keg ) ! KE Gradient98 CASE( jpdyn_rvo ) ; CALL trd_vor_zint( putrd, pvtrd, jpvor_rvo ) ! Relative Vorticity99 CASE( jpdyn_pvo ) ; CALL trd_vor_zint( putrd, pvtrd, jpvor_pvo ) ! Planetary Vorticity Term100 CASE( jpdyn_ldf ) ; CALL trd_vor_zint( putrd, pvtrd, jpvor_ldf ) ! Horizontal Diffusion101 CASE( jpdyn_zad ) ; CALL trd_vor_zint( putrd, pvtrd, jpvor_zad ) ! Vertical Advection102 CASE( jpdyn_spg ) ; CALL trd_vor_zint( putrd, pvtrd, jpvor_spg ) ! Surface Pressure Grad.97 CASE( jpdyn_hpg ) ; CALL trd_vor_zint( putrd, pvtrd, jpvor_prg, Kmm ) ! Hydrostatique Pressure Gradient 98 CASE( jpdyn_keg ) ; CALL trd_vor_zint( putrd, pvtrd, jpvor_keg, Kmm ) ! KE Gradient 99 CASE( jpdyn_rvo ) ; CALL trd_vor_zint( putrd, pvtrd, jpvor_rvo, Kmm ) ! Relative Vorticity 100 CASE( jpdyn_pvo ) ; CALL trd_vor_zint( putrd, pvtrd, jpvor_pvo, Kmm ) ! Planetary Vorticity Term 101 CASE( jpdyn_ldf ) ; CALL trd_vor_zint( putrd, pvtrd, jpvor_ldf, Kmm ) ! Horizontal Diffusion 102 CASE( jpdyn_zad ) ; CALL trd_vor_zint( putrd, pvtrd, jpvor_zad, Kmm ) ! Vertical Advection 103 CASE( jpdyn_spg ) ; CALL trd_vor_zint( putrd, pvtrd, jpvor_spg, Kmm ) ! Surface Pressure Grad. 103 104 CASE( jpdyn_zdf ) ! Vertical Diffusion 104 105 ztswu(:,:) = 0.e0 ; ztswv(:,:) = 0.e0 105 DO jj = 2, jpjm1 ! wind stress trends 106 DO ji = fs_2, fs_jpim1 ! vector opt. 107 ztswu(ji,jj) = 0.5 * ( utau_b(ji,jj) + utau(ji,jj) ) / ( e3u_n(ji,jj,1) * rau0 ) 108 ztswv(ji,jj) = 0.5 * ( vtau_b(ji,jj) + vtau(ji,jj) ) / ( e3v_n(ji,jj,1) * rau0 ) 109 END DO 110 END DO 111 ! 112 CALL trd_vor_zint( putrd, pvtrd, jpvor_zdf ) ! zdf trend including surf./bot. stresses 113 CALL trd_vor_zint( ztswu, ztswv, jpvor_swf ) ! surface wind stress 106 DO_2D_00_00 107 ztswu(ji,jj) = 0.5 * ( utau_b(ji,jj) + utau(ji,jj) ) / ( e3u(ji,jj,1,Kmm) * rau0 ) 108 ztswv(ji,jj) = 0.5 * ( vtau_b(ji,jj) + vtau(ji,jj) ) / ( e3v(ji,jj,1,Kmm) * rau0 ) 109 END_2D 110 ! 111 CALL trd_vor_zint( putrd, pvtrd, jpvor_zdf, Kmm ) ! zdf trend including surf./bot. stresses 112 CALL trd_vor_zint( ztswu, ztswv, jpvor_swf, Kmm ) ! surface wind stress 114 113 CASE( jpdyn_bfr ) 115 CALL trd_vor_zint( putrd, pvtrd, jpvor_bfr ) ! Bottom stress114 CALL trd_vor_zint( putrd, pvtrd, jpvor_bfr, Kmm ) ! Bottom stress 116 115 ! 117 116 CASE( jpdyn_atf ) ! last trends: perform the output of 2D vorticity trends 118 CALL trd_vor_iom( kt )117 CALL trd_vor_iom( kt, Kmm ) 119 118 END SELECT 120 119 ! … … 122 121 123 122 124 SUBROUTINE trd_vor_zint_2d( putrdvor, pvtrdvor, ktrd )123 SUBROUTINE trd_vor_zint_2d( putrdvor, pvtrdvor, ktrd, Kmm ) 125 124 !!---------------------------------------------------------------------------- 126 125 !! *** ROUTINE trd_vor_zint *** … … 150 149 !!---------------------------------------------------------------------- 151 150 INTEGER , INTENT(in ) :: ktrd ! ocean trend index 151 INTEGER , INTENT(in ) :: Kmm ! time level index 152 152 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: putrdvor ! u vorticity trend 153 153 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: pvtrdvor ! v vorticity trend … … 171 171 ! 172 172 CASE( jpvor_bfr ) ! bottom friction 173 DO jj = 2, jpjm1 174 DO ji = fs_2, fs_jpim1 175 ikbu = mbkv(ji,jj) 176 ikbv = mbkv(ji,jj) 177 zudpvor(ji,jj) = putrdvor(ji,jj) * e3u_n(ji,jj,ikbu) * e1u(ji,jj) * umask(ji,jj,ikbu) 178 zvdpvor(ji,jj) = pvtrdvor(ji,jj) * e3v_n(ji,jj,ikbv) * e2v(ji,jj) * vmask(ji,jj,ikbv) 179 END DO 180 END DO 173 DO_2D_00_00 174 ikbu = mbkv(ji,jj) 175 ikbv = mbkv(ji,jj) 176 zudpvor(ji,jj) = putrdvor(ji,jj) * e3u(ji,jj,ikbu,Kmm) * e1u(ji,jj) * umask(ji,jj,ikbu) 177 zvdpvor(ji,jj) = pvtrdvor(ji,jj) * e3v(ji,jj,ikbv,Kmm) * e2v(ji,jj) * vmask(ji,jj,ikbv) 178 END_2D 181 179 ! 182 180 CASE( jpvor_swf ) ! wind stress 183 zudpvor(:,:) = putrdvor(:,:) * e3u _n(:,:,1) * e1u(:,:) * umask(:,:,1)184 zvdpvor(:,:) = pvtrdvor(:,:) * e3v _n(:,:,1) * e2v(:,:) * vmask(:,:,1)181 zudpvor(:,:) = putrdvor(:,:) * e3u(:,:,1,Kmm) * e1u(:,:) * umask(:,:,1) 182 zvdpvor(:,:) = pvtrdvor(:,:) * e3v(:,:,1,Kmm) * e2v(:,:) * vmask(:,:,1) 185 183 ! 186 184 END SELECT 187 185 188 186 ! Average except for Beta.V 189 zudpvor(:,:) = zudpvor(:,:) * r1_hu _n(:,:)190 zvdpvor(:,:) = zvdpvor(:,:) * r1_hv _n(:,:)187 zudpvor(:,:) = zudpvor(:,:) * r1_hu(:,:,Kmm) 188 zvdpvor(:,:) = zvdpvor(:,:) * r1_hv(:,:,Kmm) 191 189 192 190 ! Curl … … 207 205 208 206 209 SUBROUTINE trd_vor_zint_3d( putrdvor, pvtrdvor, ktrd )207 SUBROUTINE trd_vor_zint_3d( putrdvor, pvtrdvor, ktrd , Kmm ) 210 208 !!---------------------------------------------------------------------------- 211 209 !! *** ROUTINE trd_vor_zint *** … … 236 234 ! 237 235 INTEGER , INTENT(in ) :: ktrd ! ocean trend index 236 INTEGER , INTENT(in ) :: Kmm ! time level index 238 237 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: putrdvor ! u vorticity trend 239 238 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pvtrdvor ! v vorticity trend … … 257 256 ! putrdvor and pvtrdvor terms 258 257 DO jk = 1,jpk 259 zudpvor(:,:) = zudpvor(:,:) + putrdvor(:,:,jk) * e3u _n(:,:,jk) * e1u(:,:) * umask(:,:,jk)260 zvdpvor(:,:) = zvdpvor(:,:) + pvtrdvor(:,:,jk) * e3v _n(:,:,jk) * e2v(:,:) * vmask(:,:,jk)258 zudpvor(:,:) = zudpvor(:,:) + putrdvor(:,:,jk) * e3u(:,:,jk,Kmm) * e1u(:,:) * umask(:,:,jk) 259 zvdpvor(:,:) = zvdpvor(:,:) + pvtrdvor(:,:,jk) * e3v(:,:,jk,Kmm) * e2v(:,:) * vmask(:,:,jk) 261 260 END DO 262 261 … … 273 272 END DO 274 273 ! Average of the Curl and Surface mask 275 vortrd(:,:,jpvor_bev) = vortrd(:,:,jpvor_bev) * r1_hu _n(:,:) * fmask(:,:,1)274 vortrd(:,:,jpvor_bev) = vortrd(:,:,jpvor_bev) * r1_hu(:,:,Kmm) * fmask(:,:,1) 276 275 ENDIF 277 276 ! 278 277 ! Average 279 zudpvor(:,:) = zudpvor(:,:) * r1_hu _n(:,:)280 zvdpvor(:,:) = zvdpvor(:,:) * r1_hv _n(:,:)278 zudpvor(:,:) = zudpvor(:,:) * r1_hu(:,:,Kmm) 279 zvdpvor(:,:) = zvdpvor(:,:) * r1_hv(:,:,Kmm) 281 280 ! 282 281 ! Curl … … 298 297 299 298 300 SUBROUTINE trd_vor_iom( kt )299 SUBROUTINE trd_vor_iom( kt , Kmm ) 301 300 !!---------------------------------------------------------------------- 302 301 !! *** ROUTINE trd_vor *** … … 306 305 !!---------------------------------------------------------------------- 307 306 INTEGER , INTENT(in ) :: kt ! time step 307 INTEGER , INTENT(in ) :: Kmm ! time level index 308 308 ! 309 309 INTEGER :: ji, jj, jk, jl ! dummy loop indices 310 310 INTEGER :: it, itmod ! local integers 311 311 REAL(wp) :: zmean ! local scalars 312 REAL(wp), DIMENSION(jpi,jpj) :: zu n, zvn312 REAL(wp), DIMENSION(jpi,jpj) :: zuu, zvv 313 313 !!---------------------------------------------------------------------- 314 314 … … 327 327 328 328 vor_avr (:,:) = 0._wp 329 zu n(:,:) = 0._wp330 zv n(:,:) = 0._wp329 zuu (:,:) = 0._wp 330 zvv (:,:) = 0._wp 331 331 vor_avrtot(:,:) = 0._wp 332 332 vor_avrres(:,:) = 0._wp … … 334 334 ! Vertically averaged velocity 335 335 DO jk = 1, jpk - 1 336 zu n(:,:) = zun(:,:) + e1u(:,:) * un(:,:,jk) * e3u_n(:,:,jk)337 zv n(:,:) = zvn(:,:) + e2v(:,:) * vn(:,:,jk) * e3v_n(:,:,jk)336 zuu(:,:) = zuu(:,:) + e1u(:,:) * uu(:,:,jk,Kmm) * e3u(:,:,jk,Kmm) 337 zvv(:,:) = zvv(:,:) + e2v(:,:) * vv(:,:,jk,Kmm) * e3v(:,:,jk,Kmm) 338 338 END DO 339 339 340 zu n(:,:) = zun(:,:) * r1_hu_n(:,:)341 zv n(:,:) = zvn(:,:) * r1_hv_n(:,:)340 zuu(:,:) = zuu(:,:) * r1_hu(:,:,Kmm) 341 zvv(:,:) = zvv(:,:) * r1_hv(:,:,Kmm) 342 342 343 343 ! Curl 344 344 DO ji = 1, jpim1 345 345 DO jj = 1, jpjm1 346 vor_avr(ji,jj) = ( ( zv n(ji+1,jj) - zvn(ji,jj) ) &347 & - ( zu n(ji,jj+1) - zun(ji,jj) ) ) / ( e1f(ji,jj) * e2f(ji,jj) ) * fmask(ji,jj,1)346 vor_avr(ji,jj) = ( ( zvv(ji+1,jj) - zvv(ji,jj) ) & 347 & - ( zuu(ji,jj+1) - zuu(ji,jj) ) ) / ( e1f(ji,jj) * e2f(ji,jj) ) * fmask(ji,jj,1) 348 348 END DO 349 349 END DO
Note: See TracChangeset
for help on using the changeset viewer.