Changeset 2715 for trunk/NEMOGCM/NEMO/OPA_SRC/TRD/trdicp.F90
- Timestamp:
- 2011-03-30T17:58:35+02:00 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMOGCM/NEMO/OPA_SRC/TRD/trdicp.F90
r2528 r2715 45 45 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 46 46 !! $Id$ 47 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 48 !!---------------------------------------------------------------------- 49 47 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 48 !!---------------------------------------------------------------------- 50 49 CONTAINS 51 50 … … 57 56 !! momentum equations at every time step frequency nn_trd. 58 57 !!---------------------------------------------------------------------- 59 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: ptrd2dx 60 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: ptrd2dy 61 INTEGER , INTENT(in ) :: ktrd 62 CHARACTER(len=3) , INTENT(in ) :: ctype 58 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: ptrd2dx ! Temperature or U trend 59 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: ptrd2dy ! Salinity or V trend 60 INTEGER , INTENT(in ) :: ktrd ! tracer trend index 61 CHARACTER(len=3) , INTENT(in ) :: ctype ! momentum ('DYN') or tracers ('TRA') trends 63 62 !! 64 INTEGER :: ji, jj ! loop indices 65 REAL(wp) :: zmsku, zbtu, zbt ! temporary scalars 66 REAL(wp) :: zmskv, zbtv ! " " 67 !!---------------------------------------------------------------------- 68 69 70 ! 1. Mask trends 71 ! -------------- 72 73 SELECT CASE( ctype ) 74 ! 75 CASE( 'DYN' ) ! Momentum 63 INTEGER :: ji, jj ! loop indices 64 !!---------------------------------------------------------------------- 65 66 SELECT CASE( ctype ) !== Mask trends ==! 67 ! 68 CASE( 'DYN' ) ! Momentum 76 69 DO jj = 1, jpjm1 77 70 DO ji = 1, jpim1 78 zmsku = tmask_i(ji+1,jj ) * tmask_i(ji,jj) * umask(ji,jj,1) 79 zmskv = tmask_i(ji ,jj+1) * tmask_i(ji,jj) * vmask(ji,jj,1) 80 ptrd2dx(ji,jj) = ptrd2dx(ji,jj) * zmsku 81 ptrd2dy(ji,jj) = ptrd2dy(ji,jj) * zmskv 71 ptrd2dx(ji,jj) = ptrd2dx(ji,jj) * tmask_i(ji+1,jj ) * tmask_i(ji,jj) * umask(ji,jj,1) 72 ptrd2dy(ji,jj) = ptrd2dy(ji,jj) * tmask_i(ji ,jj+1) * tmask_i(ji,jj) * vmask(ji,jj,1) 82 73 END DO 83 74 END DO 84 ptrd2dx(jpi, : ) = 0. e0 ; ptrd2dy(jpi, : ) = 0.e085 ptrd2dx( : ,jpj) = 0. e0 ; ptrd2dy( : ,jpj) = 0.e086 ! 87 CASE( 'TRA' ) ! Tracers75 ptrd2dx(jpi, : ) = 0._wp ; ptrd2dy(jpi, : ) = 0._wp 76 ptrd2dx( : ,jpj) = 0._wp ; ptrd2dy( : ,jpj) = 0._wp 77 ! 78 CASE( 'TRA' ) ! Tracers 88 79 ptrd2dx(:,:) = ptrd2dx(:,:) * tmask_i(:,:) 89 80 ptrd2dy(:,:) = ptrd2dy(:,:) * tmask_i(:,:) … … 91 82 END SELECT 92 83 93 ! 2. Basin averaged tracer/momentum trends 94 ! ---------------------------------------- 95 96 SELECT CASE( ctype ) 97 ! 98 CASE( 'DYN' ) ! Momentum 99 umo(ktrd) = 0.e0 100 vmo(ktrd) = 0.e0 84 SELECT CASE( ctype ) !== Basin averaged tracer/momentum trends ==! 85 ! 86 CASE( 'DYN' ) ! Momentum 87 umo(ktrd) = 0._wp 88 vmo(ktrd) = 0._wp 101 89 ! 102 90 SELECT CASE( ktrd ) 103 !104 91 CASE( jpdyn_trd_swf ) ! surface forcing 105 DO jj = 1, jpj 106 DO ji = 1, jpi 107 umo(ktrd) = umo(ktrd) + ptrd2dx(ji,jj) * e1u(ji,jj) * e2u(ji,jj) * fse3u(ji,jj,1) 108 vmo(ktrd) = vmo(ktrd) + ptrd2dy(ji,jj) * e1v(ji,jj) * e2v(ji,jj) * fse3v(ji,jj,1) 109 END DO 110 END DO 111 ! 92 umo(ktrd) = SUM( ptrd2dx(:,:) * e1u(:,:) * e2u(:,:) * fse3u(:,:,1) ) 93 vmo(ktrd) = SUM( ptrd2dy(:,:) * e1v(:,:) * e2v(:,:) * fse3v(:,:,1) ) 112 94 END SELECT 113 95 ! 114 96 CASE( 'TRA' ) ! Tracers 115 tmo(ktrd) = 0.e0 116 smo(ktrd) = 0.e0 117 DO jj = 1, jpj 118 DO ji = 1, jpi 119 zbt = e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,1) 120 tmo(ktrd) = tmo(ktrd) + ptrd2dx(ji,jj) * zbt 121 smo(ktrd) = smo(ktrd) + ptrd2dy(ji,jj) * zbt 122 END DO 123 END DO 124 ! 97 tmo(ktrd) = SUM( ptrd2dx(:,:) * e1e2t(:,:) * fse3t(:,:,1) ) 98 smo(ktrd) = SUM( ptrd2dy(:,:) * e1e2t(:,:) * fse3t(:,:,1) ) 125 99 END SELECT 126 100 127 ! 3. Basin averaged tracer/momentum square trends 128 ! ---------------------------------------------- 129 ! c a u t i o n: field now 130 131 SELECT CASE( ctype ) 101 SELECT CASE( ctype ) !== Basin averaged tracer/momentum square trends ==! (now field) 132 102 ! 133 103 CASE( 'DYN' ) ! Momentum 134 hke(ktrd) = 0.e0 135 DO jj = 1, jpj 136 DO ji = 1, jpi 137 zbtu = e1u(ji,jj) * e2u(ji,jj) * fse3u(ji,jj,1) 138 zbtv = e1v(ji,jj) * e2v(ji,jj) * fse3v(ji,jj,1) 139 hke(ktrd) = hke(ktrd) & 140 & + un(ji,jj,1) * ptrd2dx(ji,jj) * zbtu & 141 & + vn(ji,jj,1) * ptrd2dy(ji,jj) * zbtv 142 END DO 143 END DO 104 hke(ktrd) = SUM( un(:,:,1) * ptrd2dx(:,:) * e1u(:,:) * e2u(:,:) * fse3u(:,:,1) & 105 & + vn(:,:,1) * ptrd2dy(:,:) * e1v(:,:) * e2v(:,:) * fse3v(:,:,1) ) 144 106 ! 145 107 CASE( 'TRA' ) ! Tracers 146 t2(ktrd) = 0.e0 147 s2(ktrd) = 0.e0 148 DO jj = 1, jpj 149 DO ji = 1, jpi 150 zbt = e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,1) 151 t2(ktrd) = t2(ktrd) + ptrd2dx(ji,jj) * zbt * tn(ji,jj,1) 152 s2(ktrd) = s2(ktrd) + ptrd2dy(ji,jj) * zbt * sn(ji,jj,1) 153 END DO 154 END DO 108 t2(ktrd) = SUM( ptrd2dx(:,:) * e1e2t(:,:) * fse3t(:,:,1) * tn(:,:,1) ) 109 s2(ktrd) = SUM( ptrd2dy(:,:) * e1e2t(:,:) * fse3t(:,:,1) * sn(:,:,1) ) 155 110 ! 156 111 END SELECT … … 166 121 !! momentum equations at every time step frequency nn_trd. 167 122 !!---------------------------------------------------------------------- 168 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: ptrd3dx 169 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: ptrd3dy 170 INTEGER, INTENT(in ) :: ktrd 171 CHARACTER(len=3), INTENT(in ) :: ctype 123 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: ptrd3dx ! Temperature or U trend 124 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: ptrd3dy ! Salinity or V trend 125 INTEGER, INTENT(in ) :: ktrd ! momentum or tracer trend index 126 CHARACTER(len=3), INTENT(in ) :: ctype ! momentum ('DYN') or tracers ('TRA') trends 172 127 !! 173 INTEGER :: ji, jj, jk 174 REAL(wp) :: zbt, zbtu, zbtv, zmsku, zmskv ! temporary scalars 175 !!---------------------------------------------------------------------- 176 177 ! 1. Mask the trends 178 ! ------------------ 179 180 SELECT CASE( ctype ) 128 INTEGER :: ji, jj, jk ! dummy loop indices 129 !!---------------------------------------------------------------------- 130 131 SELECT CASE( ctype ) !== Mask the trends ==! 181 132 ! 182 133 CASE( 'DYN' ) ! Momentum 183 DO jk = 1, jpk 134 DO jk = 1, jpkm1 184 135 DO jj = 1, jpjm1 185 136 DO ji = 1, jpim1 186 zmsku = tmask_i(ji+1,jj ) * tmask_i(ji,jj) * umask(ji,jj,jk) 187 zmskv = tmask_i(ji ,jj+1) * tmask_i(ji,jj) * vmask(ji,jj,jk) 188 ptrd3dx(ji,jj,jk) = ptrd3dx(ji,jj,jk) * zmsku 189 ptrd3dy(ji,jj,jk) = ptrd3dy(ji,jj,jk) * zmskv 137 ptrd3dx(ji,jj,jk) = ptrd3dx(ji,jj,jk) * tmask_i(ji+1,jj ) * tmask_i(ji,jj) * umask(ji,jj,jk) 138 ptrd3dy(ji,jj,jk) = ptrd3dy(ji,jj,jk) * tmask_i(ji ,jj+1) * tmask_i(ji,jj) * vmask(ji,jj,jk) 190 139 END DO 191 140 END DO 192 141 END DO 193 ptrd3dx(jpi, : ,:) = 0. e0 ; ptrd3dy(jpi, : ,:) = 0.e0194 ptrd3dx( : ,jpj,:) = 0. e0 ; ptrd3dy( : ,jpj,:) = 0.e0142 ptrd3dx(jpi, : ,:) = 0._wp ; ptrd3dy(jpi, : ,:) = 0._wp 143 ptrd3dx( : ,jpj,:) = 0._wp ; ptrd3dy( : ,jpj,:) = 0._wp 195 144 ! 196 145 CASE( 'TRA' ) ! Tracers 197 DO jk = 1, jpk 146 DO jk = 1, jpkm1 198 147 ptrd3dx(:,:,jk) = ptrd3dx(:,:,jk) * tmask(:,:,jk) * tmask_i(:,:) 199 148 ptrd3dy(:,:,jk) = ptrd3dy(:,:,jk) * tmask(:,:,jk) * tmask_i(:,:) … … 202 151 END SELECT 203 152 204 ! 2. Basin averaged tracer/momentum trends 205 ! ---------------------------------------- 206 207 SELECT CASE( ctype ) 153 SELECT CASE( ctype ) !== Basin averaged tracer/momentum trends ==! 208 154 ! 209 155 CASE( 'DYN' ) ! Momentum 210 umo(ktrd) = 0.e0 211 vmo(ktrd) = 0.e0 212 DO jk = 1, jpk 213 DO jj = 1, jpj 214 DO ji = 1, jpi 215 zbtu = e1u(ji,jj) * e2u(ji,jj) * fse3u(ji,jj,jk) 216 zbtv = e1v(ji,jj) * e2v(ji,jj) * fse3v(ji,jj,jk) 217 umo(ktrd) = umo(ktrd) + ptrd3dx(ji,jj,jk) * zbtu 218 vmo(ktrd) = vmo(ktrd) + ptrd3dy(ji,jj,jk) * zbtv 219 END DO 220 END DO 156 umo(ktrd) = 0._wp 157 vmo(ktrd) = 0._wp 158 DO jk = 1, jpkm1 159 umo(ktrd) = umo(ktrd) + SUM( ptrd3dx(:,:,jk) * e1u(:,:) * e2u(:,:) * fse3u(:,:,jk) ) 160 vmo(ktrd) = vmo(ktrd) + SUM( ptrd3dy(:,:,jk) * e1v(:,:) * e2v(:,:) * fse3v(:,:,jk) ) 221 161 END DO 222 162 ! 223 163 CASE( 'TRA' ) ! Tracers 224 tmo(ktrd) = 0.e0 225 smo(ktrd) = 0.e0 226 DO jk = 1, jpkm1 227 DO jj = 1, jpj 228 DO ji = 1, jpi 229 zbt = e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) 230 tmo(ktrd) = tmo(ktrd) + ptrd3dx(ji,jj,jk) * zbt 231 smo(ktrd) = smo(ktrd) + ptrd3dy(ji,jj,jk) * zbt 232 END DO 233 END DO 164 tmo(ktrd) = 0._wp 165 smo(ktrd) = 0._wp 166 DO jk = 1, jpkm1 167 tmo(ktrd) = tmo(ktrd) + SUM( ptrd3dx(:,:,jk) * e1e2t(:,:) * fse3t(:,:,jk) ) 168 smo(ktrd) = smo(ktrd) + SUM( ptrd3dy(:,:,jk) * e1e2t(:,:) * fse3t(:,:,jk) ) 234 169 END DO 235 170 ! 236 171 END SELECT 237 172 238 ! 3. Basin averaged tracer/momentum square trends 239 ! ----------------------------------------------- 240 ! c a u t i o n: field now 241 242 SELECT CASE( ctype ) 173 SELECT CASE( ctype ) !== Basin averaged tracer/momentum square trends ==! (now field) 243 174 ! 244 175 CASE( 'DYN' ) ! Momentum 245 hke(ktrd) = 0.e0 246 DO jk = 1, jpk 247 DO jj = 1, jpj 248 DO ji = 1, jpi 249 zbtu = e1u(ji,jj) * e2u(ji,jj) * fse3u(ji,jj,jk) 250 zbtv = e1v(ji,jj) * e2v(ji,jj) * fse3v(ji,jj,jk) 251 hke(ktrd) = hke(ktrd) & 252 & + un(ji,jj,jk) * ptrd3dx(ji,jj,jk) * zbtu & 253 & + vn(ji,jj,jk) * ptrd3dy(ji,jj,jk) * zbtv 254 END DO 255 END DO 176 hke(ktrd) = 0._wp 177 DO jk = 1, jpkm1 178 hke(ktrd) = hke(ktrd) + SUM( un(:,:,jk) * ptrd3dx(:,:,jk) * e1u(:,:) * e2u(:,:) * fse3u(:,:,jk) & 179 & + vn(:,:,jk) * ptrd3dy(:,:,jk) * e1v(:,:) * e2v(:,:) * fse3v(:,:,jk) ) 256 180 END DO 257 181 ! 258 182 CASE( 'TRA' ) ! Tracers 259 t2(ktrd) = 0.e0 260 s2(ktrd) = 0.e0 261 DO jk = 1, jpk 262 DO jj = 1, jpj 263 DO ji = 1, jpi 264 zbt = e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) 265 t2(ktrd) = t2(ktrd) + ptrd3dx(ji,jj,jk) * zbt * tn(ji,jj,jk) 266 s2(ktrd) = s2(ktrd) + ptrd3dy(ji,jj,jk) * zbt * sn(ji,jj,jk) 267 END DO 268 END DO 183 t2(ktrd) = 0._wp 184 s2(ktrd) = 0._wp 185 DO jk = 1, jpkm1 186 t2(ktrd) = t2(ktrd) + SUM( ptrd3dx(ji,jj,jk) * tn(ji,jj,jk) * e1e2t(:,:) * fse3t(:,:,jk) ) 187 s2(ktrd) = s2(ktrd) + SUM( ptrd3dy(ji,jj,jk) * sn(ji,jj,jk) * e1e2t(:,:) * fse3t(:,:,jk) ) 269 188 END DO 270 189 ! … … 272 191 ! 273 192 END SUBROUTINE trd_3d 274 275 193 276 194 … … 281 199 !! ** Purpose : Read the namtrd namelist 282 200 !!---------------------------------------------------------------------- 283 INTEGER :: ji, jj, jk 284 REAL(wp) :: zmskt 285 #if defined key_trddyn 286 REAL(wp) :: zmsku, zmskv 287 #endif 201 INTEGER :: ji, jj, jk ! dummy loop indices 288 202 !!---------------------------------------------------------------------- 289 203 … … 295 209 296 210 ! Total volume at t-points: 297 tvolt = 0. e0211 tvolt = 0._wp 298 212 DO jk = 1, jpkm1 299 DO jj = 2, jpjm1 300 DO ji = fs_2, fs_jpim1 ! vector opt. 301 zmskt = tmask(ji,jj,jk) * tmask_i(ji,jj) 302 tvolt = tvolt + zmskt * e1t(ji,jj) *e2t(ji,jj) * fse3t(ji,jj,jk) 303 END DO 304 END DO 213 tvolt = SUM( e1e2t(:,:) * fse3t(:,:,jk) * tmask(:,:,jk) * tmask_i(:,:) ) 305 214 END DO 306 215 IF( lk_mpp ) CALL mpp_sum( tvolt ) ! sum over the global domain … … 310 219 #if defined key_trddyn 311 220 ! Initialization of potential to kinetic energy conversion 312 rpktrd = 0. e0221 rpktrd = 0._wp 313 222 314 223 ! Total volume at u-, v- points: 315 tvolu = 0. e0316 tvolv = 0. e0224 tvolu = 0._wp 225 tvolv = 0._wp 317 226 318 227 DO jk = 1, jpk 319 228 DO jj = 2, jpjm1 320 229 DO ji = fs_2, fs_jpim1 ! vector opt. 321 zmsku = tmask_i(ji+1,jj ) * tmask_i(ji,jj) * umask(ji,jj,jk) 322 zmskv = tmask_i(ji ,jj+1) * tmask_i(ji,jj) * vmask(ji,jj,jk) 323 tvolu = tvolu + zmsku * e1u(ji,jj) * e2u(ji,jj) * fse3u(ji,jj,jk) 324 tvolv = tvolv + zmskv * e1v(ji,jj) * e2v(ji,jj) * fse3v(ji,jj,jk) 230 tvolu = tvolu + e1u(ji,jj) * e2u(ji,jj) * fse3u(ji,jj,jk) * tmask_i(ji+1,jj ) * tmask_i(ji,jj) * umask(ji,jj,jk) 231 tvolv = tvolv + e1v(ji,jj) * e2v(ji,jj) * fse3v(ji,jj,jk) * tmask_i(ji ,jj+1) * tmask_i(ji,jj) * vmask(ji,jj,jk) 325 232 END DO 326 233 END DO … … 344 251 !! ** Purpose : write dynamic trends in ocean.output 345 252 !!---------------------------------------------------------------------- 346 INTEGER, INTENT(in) :: kt ! ocean time-step index 347 !! 348 INTEGER :: ji, jj, jk 349 REAL(wp) :: ze1e2w, zcof, zbe1ru, zbe2rv, zbtr, ztz, zth ! " scalars 350 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zkepe, zkx, zky, zkz ! temporary arrays 351 !!---------------------------------------------------------------------- 253 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 254 USE wrk_nemo, ONLY: zkepe => wrk_3d_1 , zkx => wrk_3d_2 ! 3D workspace 255 USE wrk_nemo, ONLY: zky => wrk_3d_3 , zkz => wrk_3d_4 ! - - 256 ! 257 INTEGER, INTENT(in) :: kt ! ocean time-step index 258 ! 259 INTEGER :: ji, jj, jk ! dummy loop indices 260 REAL(wp) :: zcof ! local scalar 261 !!---------------------------------------------------------------------- 262 263 IF( wrk_in_use(3, 1,2,3,4) ) THEN 264 CALL ctl_stop('trd_dwr: requested workspace arrays unavailable') ; RETURN 265 ENDIF 352 266 353 267 ! I. Momentum trends … … 359 273 ! -------------------------------------------------- 360 274 ! c a u t i o n here, trends are computed at kt+1 (now , but after the swap) 361 362 zkx(:,:,:) = 0.e0 363 zky(:,:,:) = 0.e0 364 zkz(:,:,:) = 0.e0 365 zkepe(:,:,:) = 0.e0 275 zkx (:,:,:) = 0._wp 276 zky (:,:,:) = 0._wp 277 zkz (:,:,:) = 0._wp 278 zkepe(:,:,:) = 0._wp 366 279 367 280 CALL eos( tsn, rhd, rhop ) ! now potential and in situ densities 368 281 369 ! Density flux at w-point 282 zcof = 0.5_wp / rau0 ! Density flux at w-point 283 zkz(:,:,1) = 0._wp 370 284 DO jk = 2, jpk 371 DO jj = 1, jpj 372 DO ji = 1, jpi 373 ze1e2w = 0.5 * e1t(ji,jj) * e2t(ji,jj) * wn(ji,jj,jk) * tmask_i(ji,jj) 374 zkz(ji,jj,jk) = ze1e2w / rau0 * ( rhop(ji,jj,jk) + rhop(ji,jj,jk-1) ) 285 zkz(:,:,jk) = e1e2t(:,:) * wn(:,:,jk) * ( rhop(:,:,jk) + rhop(:,:,jk-1) ) * tmask_i(:,:) 286 END DO 287 288 zcof = 0.5_wp / rau0 ! Density flux at u and v-points 289 DO jk = 1, jpkm1 290 DO jj = 1, jpjm1 291 DO ji = 1, jpim1 292 zkx(ji,jj,jk) = zcof * e2u(ji,jj) * fse3u(ji,jj,jk) * un(ji,jj,jk) * ( rhop(ji,jj,jk) + rhop(ji+1,jj,jk) ) 293 zky(ji,jj,jk) = zcof * e1v(ji,jj) * fse3v(ji,jj,jk) * vn(ji,jj,jk) * ( rhop(ji,jj,jk) + rhop(ji,jj+1,jk) ) 375 294 END DO 376 295 END DO 377 296 END DO 378 zkz(:,:,1) = 0.e0379 297 380 ! Density flux at u and v-points 381 DO jk = 1, jpk 382 DO jj = 1, jpjm1 383 DO ji = 1, jpim1 384 zcof = 0.5 / rau0 385 zbe1ru = zcof * e2u(ji,jj) * fse3u(ji,jj,jk) * un(ji,jj,jk) 386 zbe2rv = zcof * e1v(ji,jj) * fse3v(ji,jj,jk) * vn(ji,jj,jk) 387 zkx(ji,jj,jk) = zbe1ru * ( rhop(ji,jj,jk) + rhop(ji+1,jj,jk) ) 388 zky(ji,jj,jk) = zbe2rv * ( rhop(ji,jj,jk) + rhop(ji,jj+1,jk) ) 298 DO jk = 1, jpkm1 ! Density flux divergence at t-point 299 DO jj = 2, jpjm1 300 DO ji = 2, jpim1 301 zkepe(ji,jj,jk) = - ( zkz(ji,jj,jk) - zkz(ji ,jj ,jk+1) & 302 & + zkx(ji,jj,jk) - zkx(ji-1,jj ,jk ) & 303 & + zky(ji,jj,jk) - zky(ji ,jj-1,jk ) ) & 304 & / ( e1e2t(ji,jj) * fse3t(ji,jj,jk) ) * tmask(ji,jj,jk) * tmask_i(ji,jj) 389 305 END DO 390 306 END DO 391 307 END DO 392 393 ! Density flux divergence at t-point394 DO jk = 1, jpkm1395 DO jj = 2, jpjm1396 DO ji = 2, jpim1397 zbtr = 1. / ( e1t(ji,jj)*e2t(ji,jj)*fse3t(ji,jj,jk) )398 ztz = - zbtr * ( zkz(ji,jj,jk) - zkz(ji,jj,jk+1) )399 zth = - zbtr * ( ( zkx(ji,jj,jk) - zkx(ji-1,jj,jk) ) &400 & + ( zky(ji,jj,jk) - zky(ji,jj-1,jk) ) )401 zkepe(ji,jj,jk) = (zth + ztz) * tmask(ji,jj,jk) * tmask_i(ji,jj)402 END DO403 END DO404 END DO405 zkepe( : , : ,jpk) = 0.e0406 zkepe( : ,jpj, : ) = 0.e0407 zkepe(jpi, : , : ) = 0.e0408 308 409 309 ! I.2 Basin averaged kinetic energy trend 410 310 ! ---------------------------------------- 411 peke = 0.e0 412 DO jk = 1,jpk 413 DO jj = 1, jpj 414 DO ji = 1, jpi 415 peke = peke + zkepe(ji,jj,jk) * grav * fsdept(ji,jj,jk) & 416 & * e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) 417 END DO 418 END DO 419 END DO 311 peke = 0._wp 312 DO jk = 1, jpkm1 313 peke = peke + SUM( zkepe(:,:,jk) * fsdept(:,:,jk) * e1e2t(:,:) * fse3t(:,:,jk) ) 314 END DO 315 peke = grav * peke 420 316 421 317 ! I.3 Sums over the global domain … … 542 438 ! 543 439 ENDIF 440 ! 441 IF( wrk_not_released(3, 1,2,3,4) ) CALL ctl_stop('trd_dwr: failed to release workspace arrays') 544 442 ! 545 443 END SUBROUTINE trd_dwr
Note: See TracChangeset
for help on using the changeset viewer.