- Timestamp:
- 2011-12-11T16:00:26+01:00 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2011/DEV_r2739_STFC_dCSE/NEMOGCM/NEMO/OPA_SRC/TRD/trdicp.F90
r2715 r3211 39 39 PUBLIC trd_icp_init ! called by opa.F90 40 40 41 !! * Control permutation of array indices 42 # include "oce_ftrans.h90" 43 # include "dom_oce_ftrans.h90" 44 # include "trdmld_oce_ftrans.h90" 45 # include "ldftra_oce_ftrans.h90" 46 # include "ldfdyn_oce_ftrans.h90" 47 # include "zdf_oce_ftrans.h90" 48 41 49 !! * Substitutions 42 50 # include "domzgr_substitute.h90" … … 121 129 !! momentum equations at every time step frequency nn_trd. 122 130 !!---------------------------------------------------------------------- 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 131 132 !! DCSE_NEMO: This style defeats ftrans 133 ! REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: ptrd3dx ! Temperature or U trend 134 ! REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: ptrd3dy ! Salinity or V trend 135 136 !FTRANS ptrd3dx ptrd3dy :I :I :z 137 REAL(wp), INTENT(inout) :: ptrd3dx(jpi,jpj,jpk) ! Temperature or U trend 138 REAL(wp), INTENT(inout) :: ptrd3dy(jpi,jpj,jpk) ! Salinity or V trend 139 125 140 INTEGER, INTENT(in ) :: ktrd ! momentum or tracer trend index 126 141 CHARACTER(len=3), INTENT(in ) :: ctype ! momentum ('DYN') or tracers ('TRA') trends … … 132 147 ! 133 148 CASE( 'DYN' ) ! Momentum 149 #if defined key_z_first 150 DO jj = 1, jpjm1 151 DO ji = 1, jpim1 152 DO jk = 1, jpkm1 153 #else 134 154 DO jk = 1, jpkm1 135 155 DO jj = 1, jpjm1 136 156 DO ji = 1, jpim1 157 #endif 137 158 ptrd3dx(ji,jj,jk) = ptrd3dx(ji,jj,jk) * tmask_i(ji+1,jj ) * tmask_i(ji,jj) * umask(ji,jj,jk) 138 159 ptrd3dy(ji,jj,jk) = ptrd3dy(ji,jj,jk) * tmask_i(ji ,jj+1) * tmask_i(ji,jj) * vmask(ji,jj,jk) … … 144 165 ! 145 166 CASE( 'TRA' ) ! Tracers 167 #if defined key_z_first 168 DO jj = 1, jpj 169 DO ji = 1, jpi 170 DO jk = 1, jpkm1 171 ptrd3dx(ji,jj,jk) = ptrd3dx(ji,jj,jk) * tmask(ji,jj,jk) * tmask_i(ji,jj) 172 ptrd3dy(ji,jj,jk) = ptrd3dy(ji,jj,jk) * tmask(ji,jj,jk) * tmask_i(ji,jj) 173 END DO 174 END DO 175 END DO 176 #else 146 177 DO jk = 1, jpkm1 147 178 ptrd3dx(:,:,jk) = ptrd3dx(:,:,jk) * tmask(:,:,jk) * tmask_i(:,:) 148 179 ptrd3dy(:,:,jk) = ptrd3dy(:,:,jk) * tmask(:,:,jk) * tmask_i(:,:) 149 180 END DO 181 #endif 150 182 ! 151 183 END SELECT … … 156 188 umo(ktrd) = 0._wp 157 189 vmo(ktrd) = 0._wp 190 #if defined key_z_first 191 !! DCSE_NEMO: this changes the order of summation 192 DO jj = 1, jpj 193 DO ji = 1, jpi 194 DO jk = 1, jpkm1 195 umo(ktrd) = umo(ktrd) + ptrd3dx(ji,jj,jk) * e1u(ji,jj) * e2u(ji,jj) * fse3u(ji,jj,jk) 196 vmo(ktrd) = vmo(ktrd) + ptrd3dy(ji,jj,jk) * e1v(ji,jj) * e2v(ji,jj) * fse3v(ji,jj,jk) 197 END DO 198 END DO 199 END DO 200 #else 158 201 DO jk = 1, jpkm1 159 202 umo(ktrd) = umo(ktrd) + SUM( ptrd3dx(:,:,jk) * e1u(:,:) * e2u(:,:) * fse3u(:,:,jk) ) 160 203 vmo(ktrd) = vmo(ktrd) + SUM( ptrd3dy(:,:,jk) * e1v(:,:) * e2v(:,:) * fse3v(:,:,jk) ) 161 204 END DO 205 #endif 162 206 ! 163 207 CASE( 'TRA' ) ! Tracers 164 208 tmo(ktrd) = 0._wp 165 209 smo(ktrd) = 0._wp 210 #if defined key_z_first 211 !! DCSE_NEMO: this changes the order of summation 212 DO jj = 1, jpj 213 DO ji = 1, jpi 214 DO jk = 1, jpkm1 215 tmo(ktrd) = tmo(ktrd) + ptrd3dx(ji,jj,jk) * e1e2t(ji,jj) * fse3t(ji,jj,jk) ) 216 smo(ktrd) = smo(ktrd) + ptrd3dy(ji,jj,jk) * e1e2t(ji,jj) * fse3t(ji,jj,jk) ) 217 END DO 218 END DO 219 END DO 220 #else 166 221 DO jk = 1, jpkm1 167 222 tmo(ktrd) = tmo(ktrd) + SUM( ptrd3dx(:,:,jk) * e1e2t(:,:) * fse3t(:,:,jk) ) 168 223 smo(ktrd) = smo(ktrd) + SUM( ptrd3dy(:,:,jk) * e1e2t(:,:) * fse3t(:,:,jk) ) 169 224 END DO 225 #endif 170 226 ! 171 227 END SELECT … … 175 231 CASE( 'DYN' ) ! Momentum 176 232 hke(ktrd) = 0._wp 233 #if defined key_z_first 234 !! DCSE_NEMO: this changes the order of summation 235 DO jj = 1, jpj 236 DO ji = 1, jpi 237 DO jk = 1, jpkm1 238 hke(ktrd) = hke(ktrd) + un(ji,jj,jk) * ptrd3dx(ji,jj,jk) * e1u(ji,jj) * e2u(ji,jj) * fse3u(ji,jj,jk) & 239 & + vn(ji,jj,jk) * ptrd3dy(ji,jj,jk) * e1v(ji,jj) * e2v(ji,jj) * fse3v(ji,jj,jk) 240 END DO 241 END DO 242 END DO 243 #else 177 244 DO jk = 1, jpkm1 178 245 hke(ktrd) = hke(ktrd) + SUM( un(:,:,jk) * ptrd3dx(:,:,jk) * e1u(:,:) * e2u(:,:) * fse3u(:,:,jk) & 179 246 & + vn(:,:,jk) * ptrd3dy(:,:,jk) * e1v(:,:) * e2v(:,:) * fse3v(:,:,jk) ) 180 247 END DO 248 #endif 181 249 ! 182 250 CASE( 'TRA' ) ! Tracers 183 251 t2(ktrd) = 0._wp 184 252 s2(ktrd) = 0._wp 253 #if defined key_z_first 254 !! DCSE_NEMO: this changes the order of summation 255 DO jj = 1, jpj 256 DO ji = 1, jpi 257 DO jk = 1, jpkm1 258 t2(ktrd) = t2(ktrd) + ptrd3dx(ji,jj,jk) * tn(ji,jj,jk) * e1e2t(ji,jj) * fse3t(ji,jj,jk) 259 s2(ktrd) = s2(ktrd) + ptrd3dy(ji,jj,jk) * sn(ji,jj,jk) * e1e2t(ji,jj) * fse3t(ji,jj,jk) 260 END DO 261 END DO 262 END DO 263 #else 185 264 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) ) 188 END DO 265 !! DCSE_NEMO: This looks plain wrong! 266 ! t2(ktrd) = t2(ktrd) + SUM( ptrd3dx(ji,jj,jk) * tn(ji,jj,jk) * e1e2t(:,:) * fse3t(:,:,jk) ) 267 ! s2(ktrd) = s2(ktrd) + SUM( ptrd3dy(ji,jj,jk) * sn(ji,jj,jk) * e1e2t(:,:) * fse3t(:,:,jk) ) 268 t2(ktrd) = t2(ktrd) + SUM( ptrd3dx(:,:,jk) * tn(:,:,jk) * e1e2t(:,:) * fse3t(:,:,jk) ) 269 s2(ktrd) = s2(ktrd) + SUM( ptrd3dy(:,:,jk) * sn(:,:,jk) * e1e2t(:,:) * fse3t(:,:,jk) ) 270 END DO 271 #endif 189 272 ! 190 273 END SELECT … … 210 293 ! Total volume at t-points: 211 294 tvolt = 0._wp 295 #if defined key_z_first 296 DO jj = 1, jpj 297 DO ji = 1, jpi 298 DO jk = 1, jpkm1 299 tvolt = tvolt + e1e2t(ji,jj) * fse3t(ji,jj,jk) * tmask(ji,jj,jk) * tmask_i(ji,jj) 300 END DO 301 END DO 302 END DO 303 #else 212 304 DO jk = 1, jpkm1 213 tvolt = SUM( e1e2t(:,:) * fse3t(:,:,jk) * tmask(:,:,jk) * tmask_i(:,:) ) 305 !! DCSE_NEMO: This looks plain wrong 306 ! tvolt = SUM( e1e2t(:,:) * fse3t(:,:,jk) * tmask(:,:,jk) * tmask_i(:,:) ) 307 tvolt = tvolt + SUM( e1e2t(:,:) * fse3t(:,:,jk) * tmask(:,:,jk) * tmask_i(:,:) ) 214 308 END DO 309 #endif 215 310 IF( lk_mpp ) CALL mpp_sum( tvolt ) ! sum over the global domain 216 311 … … 225 320 tvolv = 0._wp 226 321 322 #if defined key_z_first 323 DO jj = 2, jpjm1 324 DO ji = 2, jpim1 325 DO jk = 1, jpk 326 #else 227 327 DO jk = 1, jpk 228 328 DO jj = 2, jpjm1 229 329 DO ji = fs_2, fs_jpim1 ! vector opt. 330 #endif 230 331 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 332 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) … … 254 355 USE wrk_nemo, ONLY: zkepe => wrk_3d_1 , zkx => wrk_3d_2 ! 3D workspace 255 356 USE wrk_nemo, ONLY: zky => wrk_3d_3 , zkz => wrk_3d_4 ! - - 357 358 !! DCSE_NEMO: need additional directives for renamed module variables 359 !FTRANS zkepe zkx zky zkz :I :I :z 360 256 361 ! 257 362 INTEGER, INTENT(in) :: kt ! ocean time-step index … … 281 386 282 387 zcof = 0.5_wp / rau0 ! Density flux at w-point 388 #if defined key_z_first 389 DO jj = 1, jpj 390 DO ji = 1, jpi 391 zkz(ji,jj,1) = 0._wp 392 DO jk = 2, jpk 393 zkz(ji,jj,jk) = e1e2t(ji,jj) * wn(ji,jj,jk) * ( rhop(ji,jj,jk) + rhop(ji,jj,jk-1) ) * tmask_i(ji,jj) 394 END DO 395 END DO 396 END DO 397 #else 283 398 zkz(:,:,1) = 0._wp 284 399 DO jk = 2, jpk 285 400 zkz(:,:,jk) = e1e2t(:,:) * wn(:,:,jk) * ( rhop(:,:,jk) + rhop(:,:,jk-1) ) * tmask_i(:,:) 286 401 END DO 402 #endif 287 403 288 404 zcof = 0.5_wp / rau0 ! Density flux at u and v-points 405 #if defined key_z_first 406 DO jj = 1, jpjm1 407 DO ji = 1, jpim1 408 DO jk = 1, jpkm1 409 #else 289 410 DO jk = 1, jpkm1 290 411 DO jj = 1, jpjm1 291 412 DO ji = 1, jpim1 413 #endif 292 414 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 415 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) ) … … 296 418 END DO 297 419 420 #if defined key_z_first 421 DO jj = 2, jpjm1 ! Density flux divergence at t-point 422 DO ji = 2, jpim1 423 DO jk = 1, jpkm1 424 #else 298 425 DO jk = 1, jpkm1 ! Density flux divergence at t-point 299 426 DO jj = 2, jpjm1 300 427 DO ji = 2, jpim1 428 #endif 301 429 zkepe(ji,jj,jk) = - ( zkz(ji,jj,jk) - zkz(ji ,jj ,jk+1) & 302 430 & + zkx(ji,jj,jk) - zkx(ji-1,jj ,jk ) & … … 310 438 ! ---------------------------------------- 311 439 peke = 0._wp 440 #if defined key_z_first 441 DO jj = 1, jpj 442 DO ji = 1, jpi 443 DO jk = 1, jpkm1 444 peke = peke + zkepe(ji,jj,jk) * fsdept(ji,jj,jk) * e1e2t(ji,jj) * fse3t(ji,jj,jk) 445 END DO 446 END DO 447 END DO 448 #else 312 449 DO jk = 1, jpkm1 313 450 peke = peke + SUM( zkepe(:,:,jk) * fsdept(:,:,jk) * e1e2t(:,:) * fse3t(:,:,jk) ) 314 451 END DO 452 #endif 315 453 peke = grav * peke 316 454
Note: See TracChangeset
for help on using the changeset viewer.