Changeset 2454
- Timestamp:
- 2010-12-06T06:19:30+01:00 (13 years ago)
- Location:
- branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC/TRA
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_bilapg.F90
r2399 r2454 328 328 !!---------------------------------------------------------------------- 329 329 CONTAINS 330 SUBROUTINE tra_ldf_bilapg( kt ) ! Dummy routine 331 WRITE(*,*) 'tra_ldf_bilapg: You should not have seen this print! error?', kt 330 SUBROUTINE tra_ldf_bilapg( kt, cdtype, ptb, pta, kjpt ) ! Empty routine 331 CHARACTER(len=3) :: cdtype 332 REAL, DIMENSION(:,:,:,:) :: ptb, pta 333 WRITE(*,*) 'tra_ldf_iso: You should not have seen this print! error?', kt, cdtype, ptb(1,1,1,1), pta(1,1,1,1), kjpt 332 334 END SUBROUTINE tra_ldf_bilapg 333 335 #endif -
branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso.F90
r2450 r2454 21 21 USE oce ! ocean dynamics and active tracers 22 22 USE dom_oce ! ocean space and time domain 23 USE trc_oce ! share passive tracers/Ocean variables 24 USE zdf_oce ! ocean vertical physics 23 25 USE ldftra_oce ! ocean active tracers: lateral physics 24 USE zdf_oce ! ocean vertical physics25 USE in_out_manager ! I/O manager26 USE iom !27 26 USE ldfslp ! iso-neutral slopes 28 27 USE diaptr ! poleward transport diagnostics 29 USE trc_oce ! share passive tracers/Ocean variables 28 USE in_out_manager ! I/O manager 29 USE iom ! I/O library 30 30 #if defined key_diaar5 31 31 USE phycst ! physical constants … … 294 294 !!---------------------------------------------------------------------- 295 295 CONTAINS 296 SUBROUTINE tra_ldf_iso( kt ) ! Empty routine 297 WRITE(*,*) 'tra_ldf_iso: You should not have seen this print! error?', kt 296 SUBROUTINE tra_ldf_iso( kt, cdtype, pgu, pgv, ptb, pta, kjpt, pahtb0 ) ! Empty routine 297 CHARACTER(len=3) :: cdtype 298 REAL, DIMENSION(:,:,:) :: pgu, pgv ! tracer gradient at pstep levels 299 REAL, DIMENSION(:,:,:,:) :: ptb, pta 300 WRITE(*,*) 'tra_ldf_iso: You should not have seen this print! error?', kt, cdtype, pgu(1,1,1), pgv(1,1,1), & 301 & ptb(1,1,1,1), pta(1,1,1,1), kjpt, pahtb0 298 302 END SUBROUTINE tra_ldf_iso 299 303 #endif -
branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso_grif.F90
r2450 r2454 11 11 !! 'key_ldfslp' slope of the lateral diffusive direction 12 12 !!---------------------------------------------------------------------- 13 !! tra_ldf_iso_grif : update the tracer trend with the horizontal 14 !! component of a iso-neutral laplacian operator 15 !! and with the vertical part of 16 !! the isopycnal or geopotential s-coord. operator 13 !! tra_ldf_iso_grif : update the tracer trend with the horizontal component 14 !! of the Griffies iso-neutral laplacian operator 17 15 !!---------------------------------------------------------------------- 18 16 USE oce ! ocean dynamics and active tracers 19 17 USE dom_oce ! ocean space and time domain 18 USE trc_oce ! share passive tracers/Ocean variables 19 USE zdf_oce ! ocean vertical physics 20 20 USE ldftra_oce ! ocean active tracers: lateral physics 21 USE zdf_oce ! ocean vertical physics22 USE in_out_manager ! I/O manager23 USE iom !24 21 USE ldfslp ! iso-neutral slopes 25 22 USE diaptr ! poleward transport diagnostics 26 USE trc_oce ! share passive tracers/Ocean variables 23 USE in_out_manager ! I/O manager 24 USE iom ! I/O library 27 25 #if defined key_diaar5 28 26 USE phycst ! physical constants … … 112 110 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zdit, zdjt, ztfw ! 3D workspace 113 111 ! 114 REAL(wp) :: zslope_skew, zslope_iso,zslope2, zbu, zbv115 REAL(wp) :: ze1ur, zdxt,ze2vr,ze3wr,zdyt,zdzt116 REAL(wp) :: ah,zah_slp,zaei_slp112 REAL(wp) :: zslope_skew, zslope_iso, zslope2, zbu, zbv 113 REAL(wp) :: ze1ur, zdxt, ze2vr, ze3wr, zdyt, zdzt 114 REAL(wp) :: zah, zah_slp, zaei_slp 117 115 #if defined key_diaar5 118 116 REAL(wp), DIMENSION(jpi,jpj) :: z2d ! 2D workspace … … 144 142 !!gm Future development: consider using Ah defined at T-points and attached to the 4 t-point triads 145 143 146 ah_wslp2(:,:,:) = 0. 0144 ah_wslp2(:,:,:) = 0._wp 147 145 IF( ln_traldf_gdia ) THEN 148 psix_eiv(:,:,:) = 0. 0149 psiy_eiv(:,:,:) = 0. 0146 psix_eiv(:,:,:) = 0._wp 147 psiy_eiv(:,:,:) = 0._wp 150 148 ENDIF 151 149 152 DO ip =0,1153 DO kp =0,1154 DO jk =1,jpkm1155 DO jj =1,jpjm1156 DO ji =1,fs_jpim1157 ze3wr =1.0_wp/fse3w(ji+ip,jj,jk+kp)158 zbu = 0.25_wp*e1u(ji,jj)*e2u(ji,jj)*fse3u(ji,jj,jk)159 ah= fsahtu(ji,jj,jk) ! fsaht(ji+ip,jj,jk)150 DO ip = 0, 1 151 DO kp = 0, 1 152 DO jk = 1, jpkm1 153 DO jj = 1, jpjm1 154 DO ji = 1, fs_jpim1 155 ze3wr = 1._wp / fse3w(ji+ip,jj,jk+kp) 156 zbu = 0.25_wp * e1u(ji,jj) * e2u(ji,jj) * fse3u(ji,jj,jk) 157 zah = fsahtu(ji,jj,jk) ! fsaht(ji+ip,jj,jk) 160 158 zslope_skew = triadi_g(ji+ip,jj,jk,1-ip,kp) 161 zslope2 = ( zslope_skew &162 & - umask(ji,jj,jk+kp)*(fsdept(ji+1,jj,jk) - fsdept(ji ,jj ,jk))*ze1ur )**2163 ah_wslp2(ji+ip,jj,jk+kp) =ah_wslp2(ji+ip,jj,jk+kp) +&164 & ah*((zbu*ze3wr)/(e1t(ji+ip,jj)*e2t(ji+ip,jj)))*zslope2159 zslope2 = zslope_skew - ( fsdept(ji+1,jj,jk) - fsdept(ji ,jj ,jk) ) * ze1ur * umask(ji,jj,jk+kp) 160 zslope2 = zslope2 *zslope2 161 ah_wslp2(ji+ip,jj,jk+kp) = ah_wslp2(ji+ip,jj,jk+kp) & 162 & + ah * ( zbu * ze3wr / ( e1t(ji+ip,jj) * e2t(ji+ip,jj) ) ) * zslope2 165 163 IF( ln_traldf_gdia ) THEN 166 zaei_slp = fsaeiw(ji+ip,jj,jk) *zslope_skew!fsaeit(ji+ip,jj,jk)*zslope_skew167 psix_eiv(ji,jj,jk+kp) = psix_eiv(ji,jj,jk+kp) + 0.25_wp *zaei_slp164 zaei_slp = fsaeiw(ji+ip,jj,jk) * zslope_skew !fsaeit(ji+ip,jj,jk)*zslope_skew 165 psix_eiv(ji,jj,jk+kp) = psix_eiv(ji,jj,jk+kp) + 0.25_wp * zaei_slp 168 166 ENDIF 169 167 END DO … … 173 171 END DO 174 172 ! 175 DO jp =0,1176 DO kp =0,1177 DO jk =1,jpkm1178 DO jj =1,jpjm1173 DO jp = 0, 1 174 DO kp = 0, 1 175 DO jk = 1, jpkm1 176 DO jj = 1, jpjm1 179 177 DO ji=1,fs_jpim1 180 ze3wr =1.0_wp/fse3w(ji,jj+jp,jk+kp)181 zbv = 0.25_wp*e1v(ji,jj)*e2v(ji,jj)*fse3v(ji,jj,jk)182 ah = fsahtu(ji,jj,jk)!fsaht(ji,jj+jp,jk)178 ze3wr = 1.0_wp / fse3w(ji,jj+jp,jk+kp) 179 zbv = 0.25_wp * e1v(ji,jj) * e2v(ji,jj) * fse3v(ji,jj,jk) 180 zah = fsahtu(ji,jj,jk) !fsaht(ji,jj+jp,jk) 183 181 zslope_skew = triadj_g(ji,jj+jp,jk,1-jp,kp) 184 zslope2 =(zslope_skew - vmask(ji,jj,jk+kp)*(fsdept(ji,jj+1,jk) - fsdept(ji ,jj ,jk))*ze2vr &185 & )**2186 ah_wslp2(ji,jj+jp,jk+kp) =ah_wslp2(ji,jj+jp,jk+kp) +&187 & ah*((zbv*ze3wr)/(e1t(ji,jj+jp)*e2t(ji,jj+jp)))*zslope2182 zslope2 = zslope_skew - ( fsdept(ji,jj+1,jk) - fsdept(ji,jj,jk) ) * ze2vr * vmask(ji,jj,jk+kp) 183 zslope2 = zslope2 * zslope2 184 ah_wslp2(ji,jj+jp,jk+kp) = ah_wslp2(ji,jj+jp,jk+kp) & 185 & + zah * ( zbv * ze3wr / ( e1t(ji,jj+jp) * e2t(ji,jj+jp) ) ) * zslope2 188 186 IF( ln_traldf_gdia ) THEN 189 187 zaei_slp = fsaeiw(ji,jj+jp,jk) * zslope_skew !fsaeit(ji,jj+jp,jk)*zslope_skew 190 psiy_eiv(ji,jj,jk+kp) = psiy_eiv(ji,jj,jk+kp) + 0.25_wp *zaei_slp188 psiy_eiv(ji,jj,jk+kp) = psiy_eiv(ji,jj,jk+kp) + 0.25_wp * zaei_slp 191 189 ENDIF 192 190 END DO … … 245 243 ENDIF 246 244 247 DO ip =0,1 !== Horizontal & vertical fluxes248 DO kp =0,1249 DO jj =1,jpjm1250 DO ji =1,fs_jpim1245 DO ip = 0, 1 !== Horizontal & vertical fluxes 246 DO kp = 0, 1 247 DO jj = 1, jpjm1 248 DO ji = 1, fs_jpim1 251 249 ze1ur = 1._wp / e1u(ji,jj) 252 250 zdxt = zdit(ji,jj,jk) * ze1ur 253 ze3wr = 1._wp /fse3w(ji+ip,jj,jk+kp)251 ze3wr = 1._wp / fse3w(ji+ip,jj,jk+kp) 254 252 zdzt = zdkt(ji+ip,jj,kp) * ze3wr 255 253 zslope_skew = triadi_g(ji+ip,jj,jk,1-ip,kp) … … 257 255 258 256 zbu = 0.25_wp * e1u(ji,jj) * e2u(ji,jj) * fse3u(ji,jj,jk) 259 ah = fsahtu(ji,jj,jk)!*umask(ji,jj,jk+kp) !fsaht(ji+ip,jj,jk)===>> ????260 zah_slp = ah*zslope_iso257 zah = fsahtu(ji,jj,jk) !*umask(ji,jj,jk+kp) !fsaht(ji+ip,jj,jk) ===>> ???? 258 zah_slp = zah * zslope_iso 261 259 zaei_slp = fsaeiw(ji+ip,jj,jk) * zslope_skew !fsaeit(ji+ip,jj,jk)*zslope_skew 262 zftu(ji,jj,jk) = zftu(ji,jj,jk) - (ah*zdxt + (zah_slp - zaei_slp)*zdzt)*zbu*ze1ur263 ztfw(ji+ip,jj,jk+kp) = ztfw(ji+ip,jj,jk+kp) - (zah_slp + zaei_slp) *zdxt *zbu*ze3wr260 zftu(ji,jj,jk) = zftu(ji,jj,jk) - ( zah * zdxt + (zah_slp - zaei_slp) * zdzt ) * zbu * ze1ur 261 ztfw(ji+ip,jj,jk+kp) = ztfw(ji+ip,jj,jk+kp) - (zah_slp + zaei_slp) * zdxt * zbu * ze3wr 264 262 END DO 265 263 END DO … … 267 265 END DO 268 266 269 DO jp =0,1270 DO kp =0,1271 DO jj =1,jpjm1272 DO ji =1,fs_jpim1273 ze2vr = 1._wp /e2v(ji,jj)274 zdyt = zdjt(ji,jj,jk) *ze2vr275 ze3wr = 1._wp /fse3w(ji,jj+jp,jk+kp)267 DO jp = 0, 1 268 DO kp = 0, 1 269 DO jj = 1, jpjm1 270 DO ji = 1, fs_jpim1 271 ze2vr = 1._wp / e2v(ji,jj) 272 zdyt = zdjt(ji,jj,jk) * ze2vr 273 ze3wr = 1._wp / fse3w(ji,jj+jp,jk+kp) 276 274 zdzt = zdkt(ji,jj+jp,kp) * ze3wr 277 275 zslope_skew = triadj_g(ji,jj+jp,jk,1-jp,kp) 278 zslope_iso = triadj(ji,jj+jp,jk,1-jp,kp)276 zslope_iso = triadj(ji,jj+jp,jk,1-jp,kp) 279 277 zbv = 0.25_wp * e1v(ji,jj) * e2v(ji,jj) * fse3v(ji,jj,jk) 280 ah = fsahtv(ji,jj,jk)!*vmask(ji,jj,jk+kp) !fsaht(ji,jj+jp,jk)281 zah_slp = ah * zslope_iso282 zaei_slp = fsaeiw(ji,jj+jp,jk) *zslope_skew!fsaeit(ji,jj+jp,jk)*zslope_skew283 zftv(ji,jj,jk) = zftv(ji,jj,jk) - ( ah*zdyt + (zah_slp - zaei_slp)*zdzt)*zbv*ze2vr284 ztfw(ji,jj+jp,jk+kp) = ztfw(ji,jj+jp,jk+kp) - (zah_slp + zaei_slp) *zdyt*zbv*ze3wr278 zah = fsahtv(ji,jj,jk) !*vmask(ji,jj,jk+kp) !fsaht(ji,jj+jp,jk) 279 zah_slp = zah * zslope_iso 280 zaei_slp = fsaeiw(ji,jj+jp,jk) * zslope_skew !fsaeit(ji,jj+jp,jk)*zslope_skew 281 zftv(ji,jj,jk) = zftv(ji,jj,jk) - ( zah * zdyt + (zah_slp - zaei_slp) * zdzt ) * zbv * ze2vr 282 ztfw(ji,jj+jp,jk+kp) = ztfw(ji,jj+jp,jk+kp) - (zah_slp + zaei_slp) * zdyt * zbv * ze3wr 285 283 END DO 286 284 END DO … … 350 348 !!---------------------------------------------------------------------- 351 349 CONTAINS 352 SUBROUTINE tra_ldf_iso_grif( kt ) ! Empty routine 353 WRITE(*,*) 'tra_ldf_iso: You should not have seen this print! error?', kt 350 SUBROUTINE tra_ldf_iso_grif( kt, cdtype, pgu, pgv, ptb, pta, kjpt, pahtb0 ) ! Empty routine 351 CHARACTER(len=3) :: cdtype 352 REAL, DIMENSION(:,:,:) :: pgu, pgv ! tracer gradient at pstep levels 353 REAL, DIMENSION(:,:,:,:) :: ptb, pta 354 WRITE(*,*) 'tra_ldf_iso_grif: You should not have seen this print! error?', kt, cdtype, & 355 & pgu(1,1,1), pgv(1,1,1), ptb(1,1,1,1), pta(1,1,1,1), kjpt, pahtb0 354 356 END SUBROUTINE tra_ldf_iso_grif 355 357 #endif -
branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC/TRA/trazdf_imp.F90
r2371 r2454 24 24 USE dom_oce ! ocean space and time domain variables 25 25 USE zdf_oce ! ocean vertical physics variables 26 USE trc_oce ! share passive tracers/ocean variables 27 USE domvvl ! variable volume 26 28 USE ldftra_oce ! ocean active tracers: lateral physics 29 USE ldftra ! lateral mixing type 27 30 USE ldfslp ! lateral physics: slope of diffusion 28 31 USE zdfddm ! ocean vertical physics: double diffusion 32 USE traldf_iso_grif ! active tracers: Griffies operator 29 33 USE in_out_manager ! I/O manager 30 34 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 31 USE domvvl ! variable volume32 USE ldftra ! lateral mixing type33 USE trc_oce ! share passive tracers/Ocean variables34 35 35 36 IMPLICIT NONE … … 46 47 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 47 48 !! $Id$ 48 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)49 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 49 50 !!---------------------------------------------------------------------- 50 51 CONTAINS … … 87 88 !! 88 89 !! ** Action : - Update (ta) with before vertical diffusion trend 89 !!90 90 !!--------------------------------------------------------------------- 91 91 USE oce , ONLY : zwd => ua ! ua used as workspace 92 92 USE oce , ONLY : zws => va ! va - - 93 USE traldf_iso_grif , ONLY : ah_wslp294 93 !! 95 94 INTEGER , INTENT(in ) :: kt ! ocean time-step index … … 110 109 IF(lwp)WRITE(numout,*) 'tra_zdf_imp : implicit vertical mixing on ', cdtype 111 110 IF(lwp)WRITE(numout,*) '~~~~~~~~~~~ ' 112 zavi = 0. e0! avoid warning at compilation phase when lk_ldfslp=F111 zavi = 0._wp ! avoid warning at compilation phase when lk_ldfslp=F 113 112 ENDIF 114 113 ! 115 114 ! I. Local initialization 116 115 ! ----------------------- 117 zwd(1,:, : ) = 0. e0 ; zwd(jpi,:,:) = 0.e0118 zws(1,:, : ) = 0. e0 ; zws(jpi,:,:) = 0.e0119 zwi(1,:, : ) = 0. e0 ; zwi(jpi,:,:) = 0.e0120 zwt(1,:, : ) = 0. e0 ; zwt(jpi,:,:) = 0.e0121 zwt(:,:,jpk) = 0. e0 ; zwt( : ,:,1) = 0.e0116 zwd(1,:, : ) = 0._wp ; zwd(jpi,:,:) = 0._wp 117 zws(1,:, : ) = 0._wp ; zws(jpi,:,:) = 0._wp 118 zwi(1,:, : ) = 0._wp ; zwi(jpi,:,:) = 0._wp 119 zwt(1,:, : ) = 0._wp ; zwt(jpi,:,:) = 0._wp 120 zwt(:,:,jpk) = 0._wp ; zwt( : ,:,1) = 0._wp 122 121 123 122 ! I.1 Variable volume : to take into account vertical variable vertical scale factors 124 123 ! ------------------- 125 IF( lk_vvl ) THEN ; znvvl = 1. 126 ELSE ; znvvl = 0. e0124 IF( lk_vvl ) THEN ; znvvl = 1._wp 125 ELSE ; znvvl = 0._wp 127 126 ENDIF 128 127 … … 165 164 END DO 166 165 ELSE ! no rotation but key_ldfslp defined 167 zwt 166 zwt(:,:,:) = avt(:,:,:) 168 167 ENDIF 169 168 #else … … 192 191 DO jj = 2, jpjm1 193 192 DO ji = fs_2, fs_jpim1 194 zwt(ji,jj,jk) = zwd(ji,jj,jk) - zwi(ji,jj,jk) * zws(ji,jj,jk-1) /zwt(ji,jj,jk-1)193 zwt(ji,jj,jk) = zwd(ji,jj,jk) - zwi(ji,jj,jk) * zws(ji,jj,jk-1) / zwt(ji,jj,jk-1) 195 194 END DO 196 195 END DO … … 221 220 END DO 222 221 ELSE ! no rotation but key_ldfslp defined 223 zwt 222 zwt(:,:,:) = fsavs(:,:,:) 224 223 ENDIF 225 224 #else … … 243 242 DO ji = fs_2, fs_jpim1 ! vector opt. 244 243 ze3ta = ( 1. - znvvl ) + znvvl * fse3t_a(ji,jj,1) ! after scale factor at T-point 245 zwi(ji,jj,1) = 0. e0244 zwi(ji,jj,1) = 0._wp 246 245 zwd(ji,jj,1) = ze3ta - zws(ji,jj,1) 247 246 END DO … … 257 256 DO jj = 2, jpjm1 258 257 DO ji = fs_2, fs_jpim1 259 zwt(ji,jj,jk) = zwd(ji,jj,jk) - zwi(ji,jj,jk) * zws(ji,jj,jk-1) /zwt(ji,jj,jk-1)258 zwt(ji,jj,jk) = zwd(ji,jj,jk) - zwi(ji,jj,jk) * zws(ji,jj,jk-1) / zwt(ji,jj,jk-1) 260 259 END DO 261 260 END DO … … 295 294 DO jj = 2, jpjm1 296 295 DO ji = fs_2, fs_jpim1 297 pta(ji,jj,jk,jn) = ( pta(ji,jj,jk,jn) - zws(ji,jj,jk) * pta(ji,jj,jk+1,jn) ) &296 pta(ji,jj,jk,jn) = ( pta(ji,jj,jk,jn) - zws(ji,jj,jk) * pta(ji,jj,jk+1,jn) ) & 298 297 & / zwt(ji,jj,jk) * tmask(ji,jj,jk) 299 298 END DO
Note: See TracChangeset
for help on using the changeset viewer.