Changeset 216 for trunk/NEMO/OPA_SRC/DYN
- Timestamp:
- 2005-03-17T15:02:38+01:00 (19 years ago)
- Location:
- trunk/NEMO/OPA_SRC/DYN
- Files:
-
- 16 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/OPA_SRC/DYN/dynhpg.F90
r170 r216 19 19 USE phycst ! physical constants 20 20 USE in_out_manager ! I/O manager 21 USE trddyn_oce ! dynamics trends diagnostics variables 21 USE trdmod ! ocean dynamics trends 22 USE trdmod_oce ! ocean variables trends 22 23 23 24 IMPLICIT NONE … … 82 83 !! ! 97-05 (G. Madec) split dynber into dynkeg and dynhpg 83 84 !! 8.5 ! 02-08 (G. Madec) F90: Free form and module, vector opt. 85 !! 9.0 ! 04-08 (C. Talandier) New trends organization 84 86 !!---------------------------------------------------------------------- 85 87 !! * modules used … … 94 96 REAL(wp) :: & 95 97 zcoef0, zcoef1, zuap, zvap ! temporary scalars 98 REAL(wp), DIMENSION(jpi,jpj,jpk) :: & 99 ztdua, ztdva ! temporary scalars 96 100 !!---------------------------------------------------------------------- 97 101 … … 100 104 IF(lwp) WRITE(numout,*) 'dyn_hpg : hydrostatic pressure gradient trend' 101 105 IF(lwp) WRITE(numout,*) '~~~~~~~ s-coordinate case, vector opt. case' 106 ENDIF 107 108 ! Save ua and va trends 109 IF( l_trddyn ) THEN 110 ztdua(:,:,:) = ua(:,:,:) 111 ztdva(:,:,:) = va(:,:,:) 102 112 ENDIF 103 113 … … 125 135 ua(ji,jj,1) = ua(ji,jj,1) + zhpi(ji,jj,1) + zuap 126 136 va(ji,jj,1) = va(ji,jj,1) + zhpj(ji,jj,1) + zvap 127 # if defined key_trddyn || defined key_trd_vor128 ! save the trend for diagnostics129 utrd(ji,jj,1,1) = zhpi(ji,jj,1) + zuap130 vtrd(ji,jj,1,1) = zhpj(ji,jj,1) + zvap131 # endif132 137 END DO 133 138 END DO … … 140 145 ! hydrostatic pressure gradient along s-surfaces 141 146 zhpi(ji,jj,jk) = zhpi(ji,jj,jk-1) + zcoef0 / e1u(ji,jj) & 142 * ( fse3w(ji+1,jj,jk) * ( rhd(ji+1,jj,jk) + rhd(ji+1,jj,jk-1) ) &143 -fse3w(ji ,jj,jk) * ( rhd(ji ,jj,jk) + rhd(ji ,jj,jk-1) ) )147 & * ( fse3w(ji+1,jj,jk) * ( rhd(ji+1,jj,jk) + rhd(ji+1,jj,jk-1) ) & 148 & -fse3w(ji ,jj,jk) * ( rhd(ji ,jj,jk) + rhd(ji ,jj,jk-1) ) ) 144 149 zhpj(ji,jj,jk) = zhpj(ji,jj,jk-1) + zcoef0 / e2v(ji,jj) & 145 * ( fse3w(ji,jj+1,jk) * ( rhd(ji,jj+1,jk) + rhd(ji,jj+1,jk-1) ) &146 -fse3w(ji,jj ,jk) * ( rhd(ji,jj, jk) + rhd(ji,jj ,jk-1) ) )150 & * ( fse3w(ji,jj+1,jk) * ( rhd(ji,jj+1,jk) + rhd(ji,jj+1,jk-1) ) & 151 & -fse3w(ji,jj ,jk) * ( rhd(ji,jj, jk) + rhd(ji,jj ,jk-1) ) ) 147 152 ! s-coordinate pressure gradient correction 148 153 zuap = -zcoef0 * ( rhd(ji+1,jj ,jk) + rhd(ji,jj,jk) ) & … … 153 158 ua(ji,jj,jk) = ua(ji,jj,jk) + zhpi(ji,jj,jk) + zuap 154 159 va(ji,jj,jk) = va(ji,jj,jk) + zhpj(ji,jj,jk) + zvap 155 # if defined key_trddyn || defined key_trd_vor156 ! save the momentum trends for diagnostics157 utrd(ji,jj,jk,1) = zhpi(ji,jj,jk) + zuap158 vtrd(ji,jj,jk,1) = zhpj(ji,jj,jk) + zvap159 # endif160 160 END DO 161 161 END DO 162 162 END DO 163 164 ! save the hydrostatic pressure gradient trends for diagnostic 165 ! momentum trends 166 IF( l_trddyn ) THEN 167 zhpi(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 168 zhpj(:,:,:) = va(:,:,:) - ztdva(:,:,:) 169 CALL trd_mod(zhpi, zhpj, jpdtdhpg, 'DYN', kt) 170 ENDIF 163 171 164 172 IF(l_ctl) THEN ! print sum trends (used for debugging) … … 212 220 zcoef0, zcoef1, zuap, & ! temporary scalars 213 221 zcoef2, zcoef3, zvap ! " " 222 REAL(wp), DIMENSION(jpi,jpj,jpk) :: & 223 ztdua, ztdva ! temporary scalars 214 224 !!---------------------------------------------------------------------- 215 225 … … 219 229 IF(lwp) WRITE(numout,*) '~~~~~~~ z-coordinate with partial steps' 220 230 IF(lwp) WRITE(numout,*) ' vector optimization, no autotasking' 231 ENDIF 232 233 ! Save ua and va trends 234 IF( l_trddyn ) THEN 235 ztdua(:,:,:) = ua(:,:,:) 236 ztdva(:,:,:) = va(:,:,:) 221 237 ENDIF 222 238 … … 238 254 ua(ji,jj,1) = ua(ji,jj,1) + zhpi(ji,jj,1) 239 255 va(ji,jj,1) = va(ji,jj,1) + zhpj(ji,jj,1) 240 # if defined key_trddyn || defined key_trd_vor241 ! save the momentum trends for diagnostics242 utrd(ji,jj,1,1) = zhpi(ji,jj,1)243 vtrd(ji,jj,1,1) = zhpj(ji,jj,1)244 # endif245 256 END DO 246 257 END DO … … 254 265 ! hydrostatic pressure gradient 255 266 zhpi(ji,jj,jk) = zhpi(ji,jj,jk-1) & 256 + zcoef1 * ( ( rhd(ji+1,jj,jk)+rhd(ji+1,jj,jk-1) ) &257 - ( rhd(ji ,jj,jk)+rhd(ji ,jj,jk-1) ) ) / e1u(ji,jj)267 & + zcoef1 * ( ( rhd(ji+1,jj,jk)+rhd(ji+1,jj,jk-1) ) & 268 & - ( rhd(ji ,jj,jk)+rhd(ji ,jj,jk-1) ) ) / e1u(ji,jj) 258 269 259 270 zhpj(ji,jj,jk) = zhpj(ji,jj,jk-1) & 260 + zcoef1 * ( ( rhd(ji,jj+1,jk)+rhd(ji,jj+1,jk-1) ) &261 - ( rhd(ji,jj, jk)+rhd(ji,jj ,jk-1) ) ) / e2v(ji,jj)271 & + zcoef1 * ( ( rhd(ji,jj+1,jk)+rhd(ji,jj+1,jk-1) ) & 272 & - ( rhd(ji,jj, jk)+rhd(ji,jj ,jk-1) ) ) / e2v(ji,jj) 262 273 ! add to the general momentum trend 263 274 ua(ji,jj,jk) = ua(ji,jj,jk) + zhpi(ji,jj,jk) 264 275 va(ji,jj,jk) = va(ji,jj,jk) + zhpj(ji,jj,jk) 265 # if defined key_trddyn || defined key_trd_vor266 ! save the momentum trends for diagnostics267 utrd(ji,jj,jk,1) = zhpi(ji,jj,jk)268 vtrd(ji,jj,jk,1) = zhpj(ji,jj,jk)269 # endif270 276 END DO 271 277 END DO … … 293 299 ! add the new one to the general momentum trend 294 300 ua(ji,jj,iku) = ua(ji,jj,iku) + zhpi(ji,jj,iku) 295 # if defined key_trddyn || defined key_trd_vor296 ! save the momentum trends for diagnostics297 utrd(ji,jj,iku,1) = zhpi(ji,jj,iku)298 # endif299 301 ENDIF 300 302 ! on j-direction … … 307 309 ! add the new one to the general momentum trend 308 310 va(ji,jj,ikv) = va(ji,jj,ikv) + zhpj(ji,jj,ikv) 309 # if defined key_trddyn || defined key_trd_vor310 ! save the momentum trends for diagnostics311 vtrd(ji,jj,ikv,1) = zhpj(ji,jj,ikv)312 # endif313 311 ENDIF 314 312 # if ! defined key_vectopt_loop … … 316 314 # endif 317 315 END DO 316 317 ! save the hydrostatic pressure gradient trends for diagnostic 318 ! momentum trends 319 IF( l_trddyn ) THEN 320 zhpi(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 321 zhpj(:,:,:) = va(:,:,:) - ztdva(:,:,:) 322 CALL trd_mod(zhpi, zhpj, jpdtdhpg, 'DYN', kt) 323 ENDIF 318 324 319 325 IF(l_ctl) THEN ! print sum trends (used for debugging) … … 369 375 REAL(wp) :: & 370 376 zcoef0, zcoef1, zuap, zvap ! temporary scalars 377 REAL(wp), DIMENSION(jpi,jpj,jpk) :: & 378 ztdua, ztdva ! temporary scalars 371 379 !!---------------------------------------------------------------------- 372 380 … … 375 383 IF(lwp) WRITE(numout,*) 'dyn_hpg : hydrostatic pressure gradient trend' 376 384 IF(lwp) WRITE(numout,*) '~~~~~~~ z-coordinate case ' 385 ENDIF 386 387 ! Save ua and va trends 388 IF( l_trddyn ) THEN 389 ztdua(:,:,:) = ua(:,:,:) 390 ztdva(:,:,:) = va(:,:,:) 377 391 ENDIF 378 392 … … 385 399 ! 1. Surface value 386 400 ! ---------------- 387 zcoef1 = zcoef0 * fse3w(1,1,1)388 401 DO jj = 2, jpjm1 389 402 DO ji = fs_2, fs_jpim1 ! vector opt. 403 zcoef1 = zcoef0 * fse3w(ji,jj,1) 390 404 ! hydrostatic pressure gradient 391 405 zhpi(ji,jj,1) = zcoef1 * ( rhd(ji+1,jj,1) - rhd(ji,jj,1) ) / e1u(ji,jj) … … 394 408 ua(ji,jj,1) = ua(ji,jj,1) + zhpi(ji,jj,1) 395 409 va(ji,jj,1) = va(ji,jj,1) + zhpj(ji,jj,1) 396 # if defined key_trddyn || defined key_trd_vor397 ! save the momentum trends for diagnostics398 utrd(ji,jj,1,1) = zhpi(ji,jj,1)399 vtrd(ji,jj,1,1) = zhpj(ji,jj,1)400 # endif401 410 END DO 402 411 END DO … … 405 414 ! ----------------- 406 415 DO jk = 2, jpkm1 407 zcoef1 = zcoef0 * fse3w(1,1,jk)408 416 DO jj = 2, jpjm1 409 417 DO ji = fs_2, fs_jpim1 ! vector opt. 418 zcoef1 = zcoef0 * fse3w(ji,jj,jk) 410 419 ! hydrostatic pressure gradient 411 420 zhpi(ji,jj,jk) = zhpi(ji,jj,jk-1) & 412 + zcoef1 * ( ( rhd(ji+1,jj,jk)+rhd(ji+1,jj,jk-1) ) &413 - ( rhd(ji ,jj,jk)+rhd(ji ,jj,jk-1) ) ) / e1u(ji,jj)421 & + zcoef1 * ( ( rhd(ji+1,jj,jk)+rhd(ji+1,jj,jk-1) ) & 422 & - ( rhd(ji ,jj,jk)+rhd(ji ,jj,jk-1) ) ) / e1u(ji,jj) 414 423 415 424 zhpj(ji,jj,jk) = zhpj(ji,jj,jk-1) & 416 + zcoef1 * ( ( rhd(ji,jj+1,jk)+rhd(ji,jj+1,jk-1) ) &417 - ( rhd(ji,jj, jk)+rhd(ji,jj ,jk-1) ) ) / e2v(ji,jj)425 & + zcoef1 * ( ( rhd(ji,jj+1,jk)+rhd(ji,jj+1,jk-1) ) & 426 & - ( rhd(ji,jj, jk)+rhd(ji,jj ,jk-1) ) ) / e2v(ji,jj) 418 427 ! add to the general momentum trend 419 428 ua(ji,jj,jk) = ua(ji,jj,jk) + zhpi(ji,jj,jk) 420 429 va(ji,jj,jk) = va(ji,jj,jk) + zhpj(ji,jj,jk) 421 # if defined key_trddyn || defined key_trd_vor422 ! save the momentum trends for diagnostics423 utrd(ji,jj,jk,1) = zhpi(ji,jj,jk)424 vtrd(ji,jj,jk,1) = zhpj(ji,jj,jk)425 # endif426 430 END DO 427 431 END DO 428 432 END DO 433 434 ! save the hydrostatic pressure ggradient trends for diagnostic 435 ! momentum trends 436 IF( l_trddyn ) THEN 437 zhpi(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 438 zhpj(:,:,:) = va(:,:,:) - ztdva(:,:,:) 439 440 CALL trd_mod(zhpi, zhpj, jpdtdhpg, 'DYN', kt) 441 ENDIF 429 442 430 443 IF(l_ctl) THEN ! print sum trends (used for debugging) -
trunk/NEMO/OPA_SRC/DYN/dynhpg_atsk.F90
r170 r216 19 19 USE phycst ! physical constants 20 20 USE in_out_manager ! I/O manager 21 USE trddyn_oce ! dynamics trends diagnostics variables 21 USE trdmod ! ocean dynamics trends 22 USE trdmod_oce ! ocean variables trends 22 23 23 24 IMPLICIT NONE … … 70 71 !! ! 97-05 (G. Madec) split dynber into dynkeg and dynhpg 71 72 !! 8.5 ! 02-08 (G. Madec) F90: Free form and module 73 !! 9.0 ! 04-08 (C. Talandier) New trends organization 72 74 !!---------------------------------------------------------------------- 73 75 !! * modules used … … 79 81 80 82 !! * Local declarations 81 INTEGER :: ji, jj, jk! dummy loop indices83 INTEGER :: ji, jj, jk ! dummy loop indices 82 84 REAL(wp) :: & 83 85 zcoef0, zcoef1, zuap, zvap ! temporary scalars 86 REAL(wp), DIMENSION(jpi,jpj,jpk) :: & 87 ztdua, ztdva ! temporary scalars 84 88 !!---------------------------------------------------------------------- 85 89 … … 90 94 ENDIF 91 95 96 ! Save ua and va trends 97 IF( l_trddyn ) THEN 98 ztdua(:,:,:) = ua(:,:,:) 99 ztdva(:,:,:) = va(:,:,:) 100 ENDIF 101 92 102 ! 0. Local constant initialization 93 103 ! -------------------------------- 94 104 zcoef0 = - grav * 0.5 105 zuap = 0.e0 106 zvap = 0.e0 95 107 96 108 ! ! =============== … … 113 125 ua(ji,jj,1) = ua(ji,jj,1) + zhpi(ji,jj,1) + zuap 114 126 va(ji,jj,1) = va(ji,jj,1) + zhpj(ji,jj,1) + zvap 115 # if defined key_trddyn || defined key_trd_vor116 ! save the trend for diagnostics117 utrd(ji,jj,1,1) = zhpi(ji,jj,1) + zuap118 vtrd(ji,jj,1,1) = zhpj(ji,jj,1) + zvap119 # endif120 127 END DO 121 128 … … 126 133 ! hydrostatic pressure gradient along s-surfaces 127 134 zhpi(ji,jj,jk) = zhpi(ji,jj,jk-1) + zcoef0 / e1u(ji,jj) & 128 * ( fse3w(ji+1,jj,jk) * ( rhd(ji+1,jj,jk) + rhd(ji+1,jj,jk-1) ) &129 -fse3w(ji ,jj,jk) * ( rhd(ji ,jj,jk) + rhd(ji ,jj,jk-1) ) )135 & * ( fse3w(ji+1,jj,jk) * ( rhd(ji+1,jj,jk) + rhd(ji+1,jj,jk-1) ) & 136 & -fse3w(ji ,jj,jk) * ( rhd(ji ,jj,jk) + rhd(ji ,jj,jk-1) ) ) 130 137 zhpj(ji,jj,jk) = zhpj(ji,jj,jk-1) + zcoef0 / e2v(ji,jj) & 131 * ( fse3w(ji,jj+1,jk) * ( rhd(ji,jj+1,jk) + rhd(ji,jj+1,jk-1) ) &132 -fse3w(ji,jj ,jk) * ( rhd(ji,jj, jk) + rhd(ji,jj ,jk-1) ) )138 & * ( fse3w(ji,jj+1,jk) * ( rhd(ji,jj+1,jk) + rhd(ji,jj+1,jk-1) ) & 139 & -fse3w(ji,jj ,jk) * ( rhd(ji,jj, jk) + rhd(ji,jj ,jk-1) ) ) 133 140 ! s-coordinate pressure gradient correction 134 141 zuap = -zcoef0 * ( rhd(ji+1,jj ,jk) + rhd(ji,jj,jk) ) & … … 139 146 ua(ji,jj,jk) = ua(ji,jj,jk) + zhpi(ji,jj,jk) + zuap 140 147 va(ji,jj,jk) = va(ji,jj,jk) + zhpj(ji,jj,jk) + zvap 141 # if defined key_trddyn || defined key_trd_vor142 ! save the momentum trends for diagnostics143 utrd(ji,jj,jk,1) = zhpi(ji,jj,jk) + zuap144 vtrd(ji,jj,jk,1) = zhpj(ji,jj,jk) + zvap145 # endif146 148 END DO 147 149 END DO … … 149 151 END DO ! End of slab 150 152 ! ! =============== 153 154 ! save the hydrostatic pressure gradient trends for diagnostic 155 ! momentum trends 156 IF( l_trddyn ) THEN 157 zhpi(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 158 zhpj(:,:,:) = va(:,:,:) - ztdva(:,:,:) 159 CALL trd_mod(zhpi, zhpj, jpdtdhpg, 'DYN', kt) 160 ENDIF 151 161 152 162 IF(l_ctl) THEN ! print sum trends (used for debugging) … … 195 205 196 206 !! * local declarations 197 INTEGER :: ji, jj, jk! dummy loop indices198 INTEGER :: iku, ikv! temporary integers207 INTEGER :: ji, jj, jk ! dummy loop indices 208 INTEGER :: iku, ikv ! temporary integers 199 209 REAL(wp) :: & 200 210 zcoef0, zcoef1, zuap, & ! temporary scalars 201 211 zcoef2, zcoef3, zvap ! " " 212 REAL(wp), DIMENSION(jpi,jpj,jpk) :: & 213 ztdua, ztdva ! temporary scalars 202 214 !!---------------------------------------------------------------------- 203 215 … … 206 218 IF(lwp) WRITE(numout,*) 'dyn_hpg_atsk : z-coord. partial steps hydrostatic pressure gradient trend' 207 219 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~ autotasking case (j-k-i loop)' 220 ENDIF 221 222 ! Save ua and va trends 223 IF( l_trddyn ) THEN 224 ztdua(:,:,:) = ua(:,:,:) 225 ztdva(:,:,:) = va(:,:,:) 208 226 ENDIF 209 227 … … 226 244 ua(ji,jj,1) = ua(ji,jj,1) + zhpi(ji,jj,1) 227 245 va(ji,jj,1) = va(ji,jj,1) + zhpj(ji,jj,1) 228 # if defined key_trddyn || defined key_trd_vor229 ! save the momentum trends for diagnostics230 utrd(ji,jj,1,1) = zhpi(ji,jj,1)231 vtrd(ji,jj,1,1) = zhpj(ji,jj,1)232 # endif233 246 END DO 234 247 … … 240 253 ! hydrostatic pressure gradient 241 254 zhpi(ji,jj,jk) = zhpi(ji,jj,jk-1) & 242 + zcoef1 * ( ( rhd(ji+1,jj,jk)+rhd(ji+1,jj,jk-1) ) &243 - ( rhd(ji ,jj,jk)+rhd(ji ,jj,jk-1) ) ) / e1u(ji,jj)255 & + zcoef1 * ( ( rhd(ji+1,jj,jk)+rhd(ji+1,jj,jk-1) ) & 256 & - ( rhd(ji ,jj,jk)+rhd(ji ,jj,jk-1) ) ) / e1u(ji,jj) 244 257 245 258 zhpj(ji,jj,jk) = zhpj(ji,jj,jk-1) & 246 + zcoef1 * ( ( rhd(ji,jj+1,jk)+rhd(ji,jj+1,jk-1) ) &247 - ( rhd(ji,jj, jk)+rhd(ji,jj ,jk-1) ) ) / e2v(ji,jj)259 & + zcoef1 * ( ( rhd(ji,jj+1,jk)+rhd(ji,jj+1,jk-1) ) & 260 & - ( rhd(ji,jj, jk)+rhd(ji,jj ,jk-1) ) ) / e2v(ji,jj) 248 261 ! add to the general momentum trend 249 262 ua(ji,jj,jk) = ua(ji,jj,jk) + zhpi(ji,jj,jk) 250 263 va(ji,jj,jk) = va(ji,jj,jk) + zhpj(ji,jj,jk) 251 # if defined key_trddyn || defined key_trd_vor252 ! save the momentum trends for diagnostics253 utrd(ji,jj,jk,1) = zhpi(ji,jj,jk)254 vtrd(ji,jj,jk,1) = zhpj(ji,jj,jk)255 # endif256 264 END DO 257 265 END DO … … 272 280 ! add the new one to the general momentum trend 273 281 ua(ji,jj,iku) = ua(ji,jj,iku) + zhpi(ji,jj,iku) 274 # if defined key_trddyn || defined key_trd_vor275 ! save the momentum trends for diagnostics276 utrd(ji,jj,iku,1) = zhpi(ji,jj,iku)277 # endif278 282 ENDIF 279 283 ! on j-direction … … 286 290 ! add the new one to the general momentum trend 287 291 va(ji,jj,ikv) = va(ji,jj,ikv) + zhpj(ji,jj,ikv) 288 # if defined key_trddyn || defined key_trd_vor289 ! save the momentum trends for diagnostics290 vtrd(ji,jj,ikv,1) = zhpj(ji,jj,ikv)291 # endif292 292 ENDIF 293 293 END DO … … 295 295 END DO ! End of slab 296 296 ! ! =============== 297 298 ! save the hydrostatic pressure gradient trends for diagnostic 299 ! momentum trends 300 IF( l_trddyn ) THEN 301 zhpi(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 302 zhpj(:,:,:) = va(:,:,:) - ztdva(:,:,:) 303 CALL trd_mod(zhpi, zhpj, jpdtdhpg, 'DYN', kt) 304 ENDIF 297 305 298 306 IF(l_ctl) THEN ! print sum trends (used for debugging) … … 346 354 347 355 !! * local declarations 348 INTEGER :: ji, jj, jk! dummy loop indices356 INTEGER :: ji, jj, jk ! dummy loop indices 349 357 REAL(wp) :: & 350 358 zcoef0, zcoef1, zuap, zvap ! temporary scalars 359 REAL(wp), DIMENSION(jpi,jpj,jpk) :: & 360 ztdua, ztdva ! temporary scalars 351 361 !!---------------------------------------------------------------------- 352 362 … … 357 367 ENDIF 358 368 369 ! Save ua and va trends 370 IF( l_trddyn ) THEN 371 ztdua(:,:,:) = ua(:,:,:) 372 ztdva(:,:,:) = va(:,:,:) 373 ENDIF 374 359 375 ! 0. Local constant initialization 360 376 ! -------------------------------- 361 377 zcoef0 = - grav * 0.5 378 zuap = 0.e0 379 zvap = 0.e0 362 380 363 381 ! ! =============== … … 367 385 ! ---------------- 368 386 369 zcoef1 = zcoef0 * fse3w(1,1,1)370 387 371 388 DO ji = 2, jpim1 389 zcoef1 = zcoef0 * fse3w(ji,jj,1) 372 390 ! hydrostatic pressure gradient 373 391 zhpi(ji,jj,1) = zcoef1 * ( rhd(ji+1,jj,1) - rhd(ji,jj,1) ) / e1u(ji,jj) … … 376 394 ua(ji,jj,1) = ua(ji,jj,1) + zhpi(ji,jj,1) 377 395 va(ji,jj,1) = va(ji,jj,1) + zhpj(ji,jj,1) 378 # if defined key_trddyn || defined key_trd_vor379 ! save the momentum trends for diagnostics380 utrd(ji,jj,1,1) = zhpi(ji,jj,1)381 vtrd(ji,jj,1,1) = zhpj(ji,jj,1)382 # endif383 396 END DO 384 397 … … 386 399 ! ----------------- 387 400 DO jk = 2, jpkm1 388 zcoef1 = zcoef0 * fse3w(1,1,jk)389 401 DO ji = 2, jpim1 402 zcoef1 = zcoef0 * fse3w(ji,jj,jk) 390 403 ! hydrostatic pressure gradient 391 404 zhpi(ji,jj,jk) = zhpi(ji,jj,jk-1) & … … 399 412 ua(ji,jj,jk) = ua(ji,jj,jk) + zhpi(ji,jj,jk) 400 413 va(ji,jj,jk) = va(ji,jj,jk) + zhpj(ji,jj,jk) 401 # if defined key_trddyn || defined key_trd_vor402 ! save the momentum trends for diagnostics403 utrd(ji,jj,jk,1) = zhpi(ji,jj,jk)404 vtrd(ji,jj,jk,1) = zhpj(ji,jj,jk)405 # endif406 414 END DO 407 415 END DO … … 410 418 ! ! =============== 411 419 420 ! save the hydrostatic pressure gradient trends for diagnostic 421 ! momentum trends 422 IF( l_trddyn ) THEN 423 zhpi(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 424 zhpj(:,:,:) = va(:,:,:) - ztdva(:,:,:) 425 426 CALL trd_mod(zhpi, zhpj, jpdtdhpg, 'DYN', kt) 427 ENDIF 428 412 429 IF(l_ctl) THEN ! print sum trends (used for debugging) 413 WRITE(numout,*) ' hpg - Ua: ', SUM(ua(2:nictl,2:njctl,1:jpkm1)*umask(2:nictl,2:njctl,1:jpkm1)), &414 & ' Va: ', SUM(va(2:nictl,2:njctl,1:jpkm1)*vmask(2:nictl,2:njctl,1:jpkm1))415 430 zuap = SUM( ua(2:nictl,2:njctl,1:jpkm1) * umask(2:nictl,2:njctl,1:jpkm1) ) 416 431 zvap = SUM( va(2:nictl,2:njctl,1:jpkm1) * vmask(2:nictl,2:njctl,1:jpkm1) ) -
trunk/NEMO/OPA_SRC/DYN/dynkeg.F90
r109 r216 12 12 USE dom_oce ! ocean space and time domain 13 13 USE in_out_manager ! I/O manager 14 USE trddyn_oce ! dynamics trends diagnostics 14 USE trdmod ! ocean dynamics trends 15 USE trdmod_oce ! ocean variables trends 15 16 16 17 IMPLICIT NONE … … 50 51 !! 7.0 ! 97-05 (G. Madec) Split dynber into dynkeg and dynhpg 51 52 !! 9.0 ! 02-07 (G. Madec) F90: Free form and module 53 !! " ! 04-08 (C. Talandier) New trends organization 52 54 !!---------------------------------------------------------------------- 53 !! * modules used 54 USE oce, ONLY : zhke => ta ! use ta as 3D workspace 55 !! * Modules used 56 USE oce, ONLY : ztdua => ta, & ! use ta as 3D workspace 57 ztdva => sa ! use sa as 3D workspace 55 58 56 59 !! * Arguments … … 60 63 INTEGER :: ji, jj, jk ! dummy loop indices 61 64 REAL(wp) :: zua, zva, zu, zv ! temporary scalars 62 #if defined key_trddyn_new 63 REAL(wp) :: zuu, zvv ! temporary scalars 64 REAL(wp), DIMENSION(jpi,jpj) :: & 65 zvke, zuke ! temporary workspace 66 #endif 65 REAL(wp), DIMENSION(jpi,jpj,jpk) :: & 66 zhke ! temporary workspace 67 67 !!---------------------------------------------------------------------- 68 68 … … 71 71 IF(lwp) WRITE(numout,*) 'dyn_keg : kinetic energy gradient trend' 72 72 IF(lwp) WRITE(numout,*) '~~~~~~~' 73 ENDIF 74 75 ! Save ua and va trends 76 IF( l_trddyn ) THEN 77 ztdua(:,:,:) = ua(:,:,:) 78 ztdva(:,:,:) = va(:,:,:) 73 79 ENDIF 74 80 … … 84 90 + un(ji ,jj ,jk) * un(ji ,jj ,jk) ) 85 91 zhke(ji,jj,jk) = zv + zu 86 #if defined key_trddyn_new87 zvke(ji,jj) = zv88 zuke(ji,jj) = zu89 #endif90 92 END DO 91 93 END DO … … 100 102 ua(ji,jj,jk) = ua(ji,jj,jk) + zua 101 103 va(ji,jj,jk) = va(ji,jj,jk) + zva 102 #if defined key_trddyn || defined key_trd_vor103 ! add to the general momentum trends104 utrd(ji,jj,jk,2) = zua105 vtrd(ji,jj,jk,2) = zva106 #endif107 #if defined key_trddyn_new108 zuu = -( zuke(ji+1,jj ) - zuke(ji,jj) ) / e1u(ji,jj)109 zvv = -( zvke(ji ,jj+1) - zvke(ji,jj) ) / e2v(ji,jj)110 utrd(ji,jj,jk,2) = zua - zuu111 vtrd(ji,jj,jk,3) = zva - zvv112 utrd(ji,jj,jk,3) = zuu113 vtrd(ji,jj,jk,2) = zvv114 #endif115 104 END DO 116 105 END DO … … 118 107 END DO ! End of slab 119 108 ! ! =============== 109 110 ! save the Kinetic Energy trends for diagnostic 111 ! momentum trends 112 IF( l_trddyn ) THEN 113 ztdua(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 114 ztdva(:,:,:) = va(:,:,:) - ztdva(:,:,:) 115 116 CALL trd_mod(ztdua, ztdva, jpdtdkeg, 'DYN', kt) 117 ENDIF 120 118 121 119 IF(l_ctl) THEN ! print sum trends (used for debugging) -
trunk/NEMO/OPA_SRC/DYN/dynldf_bilap.F90
r109 r216 14 14 USE ldfdyn_oce ! ocean dynamics: lateral physics 15 15 USE in_out_manager ! I/O manager 16 USE trddyn_oce ! dynamics trends diagnostics variables 16 USE trdmod ! ocean dynamics trends 17 USE trdmod_oce ! ocean variables trends 17 18 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 18 19 … … 66 67 !! ** Action : - Update (ua,va) with the before iso-level biharmonic 67 68 !! mixing trend. 68 !! - Save in ( utrd,vtrd) the trends ('key_diatrends')69 !! - Save in (ztdua,ztdva) the trends ('key_trddyn') 69 70 !! 70 71 !! History : … … 75 76 !! ! 97-07 (G. Madec) lbc calls 76 77 !! 8.5 ! 02-08 (G. Madec) F90: Free form and module 77 !!---------------------------------------------------------------------- 78 !! 9.0 ! 04-08 (C. Talandier) New trends organization 79 !!---------------------------------------------------------------------- 80 !! * Modules used 81 USE oce, ONLY : ztdua => ta, & ! use ta as 3D workspace 82 ztdva => sa ! use sa as 3D workspace 83 78 84 !! * Arguments 79 85 INTEGER, INTENT( in ) :: kt ! ocean time-step index … … 97 103 zlu(:,:) = 0.e0 98 104 zlv(:,:) = 0.e0 105 106 ! Save ua and va trends 107 IF( l_trddyn ) THEN 108 ztdua(:,:,:) = ua(:,:,:) 109 ztdva(:,:,:) = va(:,:,:) 110 ENDIF 99 111 ! ! =============== 100 112 DO jk = 1, jpkm1 ! Horizontal slab … … 208 220 ua(ji,jj,jk) = ua(ji,jj,jk) + zua 209 221 va(ji,jj,jk) = va(ji,jj,jk) + zva 210 #if defined key_trddyn || defined key_trd_vor211 ! save the horizontal biharmonic diffusive trends212 utrd(ji,jj,jk,5) = zua213 vtrd(ji,jj,jk,5) = zva214 #endif215 222 END DO 216 223 END DO … … 219 226 END DO ! End of slab 220 227 ! ! =============== 228 ! save the lateral diffusion trends for diagnostic 229 ! momentum trends 230 IF( l_trddyn ) THEN 231 ztdua(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 232 ztdva(:,:,:) = va(:,:,:) - ztdva(:,:,:) 233 234 CALL trd_mod(ztdua, ztdva, jpdtdldf, 'DYN', kt) 235 ENDIF 221 236 222 237 IF(l_ctl) THEN ! print sum trends (used for debugging) -
trunk/NEMO/OPA_SRC/DYN/dynldf_bilapg.F90
r109 r216 18 18 USE zdf_oce ! ocean vertical physics 19 19 USE in_out_manager ! I/O manager 20 USE trddyn_oce ! dynamics trends diagnostics variables 20 USE trdmod ! ocean dynamics trends 21 USE trdmod_oce ! ocean variables trends 21 22 USE ldfslp ! iso-neutral slopes available 22 23 USE lbclnk ! ocean lateral boundary conditions (or mpp link) … … 51 52 !! (ub,vb) and multiply it by the eddy diffusivity coefficient 52 53 !! (done by a call to ldfgpu and ldfgpv routines) The result is in 53 !! ( wk1,wk2) arrays. Applied the domain lateral boundary conditions54 !! (zwk1,zwk2) arrays. Applied the domain lateral boundary conditions 54 55 !! by call to lbc_lnk. 55 !! -2- applied to ( wk1,wk2) the geopotential harmonic operator56 !! -2- applied to (zwk1,zwk2) the geopotential harmonic operator 56 57 !! by a second call to ldfgpu and ldfgpv routines respectively. The 57 !! result is in ( wk3,wk4) arrays.58 !! result is in (zwk3,zwk4) arrays. 58 59 !! -3- Add this trend to the general trend (ta,sa): 59 !! (ua,va) = (ua,va) + ( wk3,wk4)60 !! (ua,va) = (ua,va) + (zwk3,zwk4) 60 61 !! 'key_trddyn' defined: the trend is saved for diagnostics. 61 62 !! 62 63 !! ** Action : - Update (ua,va) arrays with the before geopotential 63 64 !! biharmonic mixing trend. 64 !! - save the trend in ( utrd,vtrd) ('key_diatrends')65 !! - save the trend in (zwk3,zwk4) ('key_trddyn') 65 66 !! 66 67 !! History : 67 68 !! 8.0 ! 97-07 (G. Madec) Original code 68 69 !! 8.5 ! 02-08 (G. Madec) F90: Free form and module 69 !!---------------------------------------------------------------------- 70 !! 9.0 ! 04-08 (C. Talandier) New trends organization 71 !!---------------------------------------------------------------------- 72 !! * Modules used 73 USE oce, ONLY : zwk3 => ta, & ! use ta as 3D workspace 74 zwk4 => sa ! use sa as 3D workspace 75 70 76 !! * Arguments 71 77 INTEGER, INTENT( in ) :: kt ! ocean time-step index … … 75 81 REAL(wp) :: zua, zva ! temporary scalars 76 82 REAL(wp), DIMENSION(jpi,jpj,jpk) :: & 77 wk1, wk2, &! work array used for rotated biharmonic78 wk3, wk4! operator on tracers and/or momentum83 zwk1, zwk2 ! work array used for rotated biharmonic 84 ! ! operator on tracers and/or momentum 79 85 !!---------------------------------------------------------------------- 80 86 … … 83 89 IF(lwp) WRITE(numout,*) 'dyn_ldf_bilapg : horizontal biharmonic operator in s-coordinate' 84 90 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~~' 85 wk1(:,:,:) = 0.e0 ;wk3(:,:,:) = 0.e086 wk2(:,:,:) = 0.e0 ;wk4(:,:,:) = 0.e091 zwk1(:,:,:) = 0.e0 ; zwk3(:,:,:) = 0.e0 92 zwk2(:,:,:) = 0.e0 ; zwk4(:,:,:) = 0.e0 87 93 ENDIF 88 94 … … 90 96 ! -------------------------------------- 91 97 ! rotated harmonic operator applied to (ub,vb) 92 ! and multiply by ahmu, ahmv (output in ( wk1,wk2) )93 94 CALL ldfguv ( ub, vb, wk1,wk2, 1 )95 96 97 ! Lateral boundary conditions on ( wk1,wk2)98 CALL lbc_lnk( wk1, 'U', -1. )99 CALL lbc_lnk( wk2, 'V', -1. )98 ! and multiply by ahmu, ahmv (output in (zwk1,zwk2) ) 99 100 CALL ldfguv ( ub, vb, zwk1, zwk2, 1 ) 101 102 103 ! Lateral boundary conditions on (zwk1,zwk2) 104 CALL lbc_lnk( zwk1, 'U', -1. ) 105 CALL lbc_lnk( zwk2, 'V', -1. ) 100 106 101 107 102 108 ! Bilaplacian of (ub,vb) 103 109 ! ---------------------- 104 ! rotated harmonic operator applied to ( wk1,wk2) (output in (wk3,wk4) )105 106 CALL ldfguv ( wk1, wk2, wk3,wk4, 2 )110 ! rotated harmonic operator applied to (zwk1,zwk2) (output in (zwk3,zwk4) ) 111 112 CALL ldfguv ( zwk1, zwk2, zwk3, zwk4, 2 ) 107 113 108 114 … … 115 121 DO ji = 2, jpim1 116 122 ! add the diffusive trend to the general momentum trends 117 ua(ji,jj,jk) = ua(ji,jj,jk) + wk3(ji,jj,jk) 118 va(ji,jj,jk) = va(ji,jj,jk) + wk4(ji,jj,jk) 119 #if defined key_trddyn || defined key_trd_vor 120 ! save the horizontal diffusive trends 121 utrd(ji,jj,jk,3) = wk3(ji,jj,jk) 122 vtrd(ji,jj,jk,3) = wk4(ji,jj,jk) 123 #endif 123 ua(ji,jj,jk) = ua(ji,jj,jk) + zwk3(ji,jj,jk) 124 va(ji,jj,jk) = va(ji,jj,jk) + zwk4(ji,jj,jk) 124 125 END DO 125 126 END DO … … 127 128 END DO ! End of slab 128 129 ! ! =============== 130 131 ! save the lateral diffusion trends for diagnostic 132 ! momentum trends 133 IF( l_trddyn ) THEN 134 135 CALL trd_mod(zwk3, zwk4, jpdtdldf, 'DYN', kt) 136 ENDIF 129 137 130 138 IF(l_ctl) THEN ! print sum trends (used for debugging) -
trunk/NEMO/OPA_SRC/DYN/dynldf_iso.F90
r109 r216 18 18 USE ldftra_oce ! ocean tracer lateral physics 19 19 USE zdf_oce ! ocean vertical physics 20 USE trddyn_oce ! dynamics trends diagnostics 20 USE trdmod ! ocean dynamics trends 21 USE trdmod_oce ! ocean variables trends 21 22 USE ldfslp ! iso-neutral slopes 22 23 USE in_out_manager ! I/O manager … … 77 78 !! Update (ua,va) arrays with the before geopotential biharmonic 78 79 !! mixing trend. 79 !! Save in (u trd,vtrd) arrays the trends if 'key_diatrends' defined80 !! Save in (uldftrd,vldftrd) arrays the trends if 'key_trddyn' defined 80 81 !! 81 82 !! History : 82 83 !! 8.0 ! 97-07 (G. Madec) Original code 83 84 !! 8.5 ! 02-08 (G. Madec) F90: Free form and module 85 !! 9.0 ! 04-08 (C. Talandier) New trends organization 84 86 !!---------------------------------------------------------------------- 87 !! * Modules used 88 USE oce, ONLY : ztdua => ta, & ! use ta as 3D workspace 89 ztdva => sa ! use sa as 3D workspace 85 90 !! * Arguments 86 INTEGER, INTENT( in ) :: kt 91 INTEGER, INTENT( in ) :: kt ! ocean time-step index 87 92 88 93 !! * Local declarations 89 INTEGER :: ji, jj, jk 94 INTEGER :: ji, jj, jk ! dummy loop indices 90 95 REAL(wp) :: & 91 zabe1, zabe2, zcof1, zcof2, & 96 zabe1, zabe2, zcof1, zcof2, & ! temporary scalars 92 97 zmskt, zmskf, zbu, zbv, & 93 zuah, zvah 98 zuah, zvah, zua, zva 94 99 REAL(wp), DIMENSION(jpi,jpj) :: & 95 ziut, zjuf, zjvt, zivf, &! temporary workspace100 ziut, zjuf, zjvt, zivf, & ! temporary workspace 96 101 zdku, zdk1u, zdkv, zdk1v 97 102 !!---------------------------------------------------------------------- … … 101 106 IF(lwp) WRITE(numout,*) 'dyn_ldf_iso : iso-neutral laplacian diffusive operator or ' 102 107 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~ s-coordinate horizontal diffusive operator' 108 ENDIF 109 110 ! Save ua and va trends 111 IF( l_trddyn ) THEN 112 ztdua(:,:,:) = ua(:,:,:) 113 ztdva(:,:,:) = va(:,:,:) 103 114 ENDIF 104 115 ! ! =============== … … 233 244 ua (ji,jj,jk) = ua (ji,jj,jk) + zuah 234 245 va (ji,jj,jk) = va (ji,jj,jk) + zvah 235 #if defined key_trddyn || defined key_trd_vor236 ! save the trends for diagnostics237 utrd(ji,jj,jk,5) = zuah238 vtrd(ji,jj,jk,5) = zvah239 #endif240 246 END DO 241 247 END DO … … 243 249 END DO ! End of slab 244 250 ! ! =============== 251 252 ! save the lateral diffusion trends for diagnostic 253 ! momentum trends will be saved in dynzdf_iso.F90 254 IF( l_trddyn ) THEN 255 uldftrd(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 256 vldftrd(:,:,:) = va(:,:,:) - ztdva(:,:,:) 257 ENDIF 258 259 IF(l_ctl) THEN ! print sum trends (used for debugging) 260 zua = SUM( ua(2:nictl,2:njctl,1:jpkm1) * umask(2:nictl,2:njctl,1:jpkm1) ) 261 zva = SUM( va(2:nictl,2:njctl,1:jpkm1) * vmask(2:nictl,2:njctl,1:jpkm1) ) 262 WRITE(numout,*) ' ldf - Ua: ', zua-u_ctl, ' Va: ', zva-v_ctl 263 u_ctl = zua ; v_ctl = zva 264 ENDIF 265 245 266 END SUBROUTINE dyn_ldf_iso 246 267 -
trunk/NEMO/OPA_SRC/DYN/dynldf_lap.F90
r109 r216 15 15 USE zdf_oce ! ocean vertical physics 16 16 USE in_out_manager ! I/O manager 17 USE trddyn_oce ! ocean dynamics trends 17 USE trdmod ! ocean dynamics trends 18 USE trdmod_oce ! ocean variables trends 18 19 USE ldfslp ! iso-neutral slopes 19 20 … … 56 57 !! ** Action : - Update (ua,va) with the before iso-level harmonic 57 58 !! mixing trend. 58 !! - Save in ( utrd,vtrd) arrays the trends ('key_diatrends')59 !! - Save in (ztdua,ztdva) arrays the trends ('key_trddyn') 59 60 !! 60 61 !! History : … … 62 63 !! ! 91-11 (G. Madec) 63 64 !! ! 96-01 (G. Madec) statement function for e3 and ahm 64 !! 8.5 ! 02-06 (G. Madec) F90: Free form and module 65 !! 8.5 ! 02-06 (G. Madec) F90: Free form and module 66 !! 9.0 ! 04-08 (C. Talandier) New trends organization 65 67 !!---------------------------------------------------------------------- 68 !! * Modules used 69 USE oce, ONLY : ztdua => ta, & ! use ta as 3D workspace 70 ztdva => sa ! use sa as 3D workspace 71 66 72 !! * Arguments 67 INTEGER, INTENT( in ) :: kt ! ocean time-step index73 INTEGER, INTENT( in ) :: kt ! ocean time-step index 68 74 69 75 !! * Local declarations 70 INTEGER :: ji, jj, jk ! dummy loop indices76 INTEGER :: ji, jj, jk ! dummy loop indices 71 77 REAL(wp) :: & 72 zua, zva, ze2u, ze1v ! temporary scalars78 zua, zva, ze2u, ze1v ! temporary scalars 73 79 !!---------------------------------------------------------------------- 74 80 … … 77 83 IF(lwp) WRITE(numout,*) 'dyn_ldf : iso-level harmonic (laplacien) operator' 78 84 IF(lwp) WRITE(numout,*) '~~~~~~~ ' 85 ENDIF 86 87 ! Save ua and va trends 88 IF( l_trddyn ) THEN 89 ztdua(:,:,:) = ua(:,:,:) 90 ztdva(:,:,:) = va(:,:,:) 79 91 ENDIF 80 92 … … 107 119 ua(ji,jj,jk) = ua(ji,jj,jk) + zua 108 120 va(ji,jj,jk) = va(ji,jj,jk) + zva 109 #if defined key_trddyn || defined key_trd_vor110 ! save the horizontal diffusive trends111 utrd(ji,jj,jk,5) = zua112 vtrd(ji,jj,jk,5) = zva113 #endif114 121 END DO 115 122 END DO … … 117 124 END DO ! End of slab 118 125 ! ! =============== 126 127 ! save the lateral diffusion trends for diagnostic 128 ! momentum trends 129 IF( l_trddyn ) THEN 130 ztdua(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 131 ztdva(:,:,:) = va(:,:,:) - ztdva(:,:,:) 132 133 CALL trd_mod(ztdua, ztdva, jpdtdldf, 'DYN', kt) 134 ENDIF 119 135 120 136 IF(l_ctl) THEN ! print sum trends (used for debugging) -
trunk/NEMO/OPA_SRC/DYN/dynspg_fsc.F90
r183 r216 16 16 USE oce ! ocean dynamics and tracers 17 17 USE dom_oce ! ocean space and time domain 18 USE trd tra_oce ! ocean active tracer trend19 USE trd dyn_oce ! ocean active dynamics trend18 USE trdmod ! ocean dynamics trends 19 USE trdmod_oce ! ocean variables trends 20 20 USE zdf_oce ! ocean vertical physics 21 21 USE in_out_manager ! I/O manager 22 22 USE phycst ! physical constants 23 23 USE ocesbc ! ocean surface boundary condition 24 USE flxrnf ! ???25 USE sol_oce ! solver variables24 USE flxrnf ! ocean runoffs 25 USE sol_oce ! ocean elliptic solver 26 26 USE solpcg ! preconditionned conjugate gradient solver 27 27 USE solsor ! Successive Over-relaxation solver … … 30 30 USE obcdyn ! ocean open boundary condition (obc_dyn routines) 31 31 USE obcvol ! ocean open boundary condition (obc_vol routines) 32 USE lib_mpp ! ???33 USE lbclnk ! ???34 USE cla_dynspg ! ???32 USE lib_mpp ! distributed memory computing library 33 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 34 USE cla_dynspg ! cross land advection 35 35 36 36 IMPLICIT NONE … … 94 94 !! 95 95 !! ** Action : - Update (ua,va) with the surf. pressure gradient trend 96 !! - Save the trends in ( utrd,vtrd) ('key_diatrends')96 !! - Save the trends in (ztdua,ztdva) ('key_trddyn') 97 97 !! 98 98 !! References : … … 101 101 !! History : 102 102 !! ! 98-05 (G. Roullet) Original code 103 !! ! 98-10 (G. Madec, M. Imbard) release 8.2 104 !! 8.5 ! 02-08 (G. Madec) F90: Free form and module 105 !! ! 02-11 (C. Talandier, A-M Treguier) Open boundaries 103 !! ! 98-10 (G. Madec, M. Imbard) release 8.2 104 !! 8.5 ! 02-08 (G. Madec) F90: Free form and module 105 !! ! 02-11 (C. Talandier, A-M Treguier) Open boundaries 106 !! 9.0 ! 04-08 (C. Talandier) New trends organization 106 107 !!--------------------------------------------------------------------- 108 !! * Modules used 109 USE oce, ONLY : ztdua => ta, & ! use ta as 3D workspace 110 ztdva => sa ! use sa as 3D workspace 111 107 112 !! * Arguments 108 113 INTEGER, INTENT( in ) :: kt ! ocean time-step index … … 155 160 spgu(ji,jj) = zspgu 156 161 spgv(ji,jj) = zspgv 157 #if defined key_trddyn || defined key_trd_vor158 ! save the surface pressure gradient trends159 utrd2(ji,jj,1) = zspgu160 vtrd2(ji,jj,1) = zspgv161 #endif162 162 END DO 163 163 END DO … … 170 170 ua(ji,jj,jk) = ua(ji,jj,jk) + spgu(ji,jj) 171 171 va(ji,jj,jk) = va(ji,jj,jk) + spgv(ji,jj) 172 #if defined key_trddyn || defined key_trd_vor 173 ! save the surface pressure gradient trend for diagnostics 174 utrd(ji,jj,jk,8) = spgu(ji,jj) 175 vtrd(ji,jj,jk,8) = spgv(ji,jj) 176 #endif 177 END DO 178 END DO 179 END DO 172 END DO 173 END DO 174 END DO 175 176 ! Save the surface pressure gradient trend for diagnostics 177 IF( l_trddyn ) THEN 178 DO jk = 1, jpkm1 179 ztdua(:,:,jk) = spgu(:,:) 180 ztdva(:,:,jk) = spgv(:,:) 181 END DO 182 ENDIF 180 183 181 184 ! 1. Evaluate the masked next velocity … … 310 313 spgv(ji,jj) = z2dt * ztdgv 311 314 #endif 312 #if defined key_trddyn || defined key_trd_vor313 ! save the transport divergence gradient trends314 utrd2(ji,jj,2) = utrd2(ji,jj,2) + ztdgu315 vtrd2(ji,jj,2) = vtrd2(ji,jj,2) + ztdgv316 #endif317 315 END DO 318 316 END DO … … 328 326 ua(ji,jj,jk) = (ua(ji,jj,jk) + spgu(ji,jj)) * umask(ji,jj,jk) 329 327 va(ji,jj,jk) = (va(ji,jj,jk) + spgv(ji,jj)) * vmask(ji,jj,jk) 330 #if defined key_trddyn || defined key_trd_vor 331 ! save the surface pressure gradient trend for diagnostics 332 utrd(ji,jj,jk,8) = utrd(ji,jj,jk,8) + spgu(ji,jj)/z2dt 333 vtrd(ji,jj,jk,8) = vtrd(ji,jj,jk,8) + spgv(ji,jj)/z2dt 334 #endif 335 END DO 336 END DO 337 END DO 328 END DO 329 END DO 330 END DO 331 332 ! save the surface pressure gradient trends for diagnostic 333 ! momentum trends 334 IF( l_trddyn ) THEN 335 DO jk = 1, jpkm1 336 ztdua(:,:,jk) = ztdua(:,:,jk) + spgu(:,:)/z2dt 337 ztdva(:,:,jk) = ztdva(:,:,jk) + spgv(:,:)/z2dt 338 END DO 339 340 CALL trd_mod(ztdua, ztdva, jpdtdspg, 'DYN', kt) 341 ENDIF 338 342 339 343 IF(l_ctl) THEN ! print sum trends (used for debugging) -
trunk/NEMO/OPA_SRC/DYN/dynspg_fsc_atsk.F90
r183 r216 19 19 USE dom_oce ! ocean space and time domain 20 20 USE zdf_oce ! ocean vertical physics 21 USE trd tra_oce ! ocean active tracer trend22 USE trd dyn_oce ! ocean dynamics trend21 USE trdmod ! ocean dynamics trends 22 USE trdmod_oce ! ocean variables trends 23 23 USE in_out_manager ! I/O manager 24 24 USE phycst ! physical constant 25 25 USE ocesbc ! Ocean Surface Boundary condition 26 USE flxrnf ! ???26 USE flxrnf ! ocean runoffs 27 27 USE sol_oce ! ocean elliptic solver 28 28 USE solpcg ! preconditionned conjugate gradient solver … … 30 30 USE solfet ! FETI solver 31 31 USE obc_oce ! Lateral open boundary condition 32 USE obcdyn ! o pen boudary condition33 USE obcvol ! " "34 USE lib_mpp ! ???35 USE lbclnk ! ???36 USE cla_dynspg ! ???32 USE obcdyn ! ocean open boundary condition (obc_dyn routines) 33 USE obcvol ! ocean open boundary condition (obc_vol routines) 34 USE lib_mpp ! distributed memory computing library 35 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 36 USE cla_dynspg ! cross land advection 37 37 38 38 IMPLICIT NONE … … 96 96 !! 97 97 !! ** Action : - Update (ua,va) with the surf. pressure gradient trend 98 !! - Save the trends in ( utrd,vtrd) ('key_diatrends')98 !! - Save the trends in (ztdua,ztdva) ('key_trddyn') 99 99 !! 100 100 !! References : … … 103 103 !! History : 104 104 !! ! 98-05 (G. Roullet) Original code 105 !! ! 98-10 (G. Madec, M. Imbard) release 8.2 106 !! 8.5 ! 02-08 (G. Madec) F90: Free form and module 107 !! ! 02-11 (C. Talandier, A-M Treguier) Open boundaries 105 !! ! 98-10 (G. Madec, M. Imbard) release 8.2 106 !! 8.5 ! 02-08 (G. Madec) F90: Free form and module 107 !! ! 02-11 (C. Talandier, A-M Treguier) Open boundaries 108 !! 9.0 ! 04-08 (C. Talandier) New trends organization 108 109 !!--------------------------------------------------------------------- 110 !! * Modules used 111 USE oce, ONLY : ztdua => ta, & ! use ta as 3D workspace 112 ztdva => sa ! use sa as 3D workspace 113 109 114 !! * Arguments 110 115 INTEGER, INTENT( in ) :: kt ! ocean time-step index … … 158 163 spgu(ji,jj) = zspgu 159 164 spgv(ji,jj) = zspgv 160 #if defined key_trddyn || defined key_trd_vor161 ! save the surface pressure gradient trends162 utrd2(ji,jj,1) = zspgu163 vtrd2(ji,jj,1) = zspgv164 #endif165 165 END DO 166 166 … … 171 171 ua(ji,jj,jk) = ua(ji,jj,jk) + spgu(ji,jj) 172 172 va(ji,jj,jk) = va(ji,jj,jk) + spgv(ji,jj) 173 #if defined key_trddyn || defined key_trd_vor174 ! save the surface pressure gradient trend for diagnostics175 utrd(ji,jj,jk,8) = spgu(ji,jj)176 vtrd(ji,jj,jk,8) = spgv(ji,jj)177 #endif178 173 END DO 179 174 END DO … … 181 176 END DO ! End of slab 182 177 ! ! =============== 178 179 ! Save the surface pressure gradient trend for diagnostics 180 IF( l_trddyn ) THEN 181 DO jk = 1, jpkm1 182 ztdua(:,:,jk) = spgu(:,:) 183 ztdva(:,:,jk) = spgv(:,:) 184 END DO 185 ENDIF 183 186 184 187 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,synchro,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, … … 333 336 spgv(ji,jj) = z2dt * ztdgv 334 337 #endif 335 #if defined key_trddyn || defined key_trd_vor336 ! save the transport divergence gradient trends337 utrd2(ji,jj,2) = utrd2(ji,jj,2) + ztdgu338 vtrd2(ji,jj,2) = vtrd2(ji,jj,2) + ztdgv339 #endif340 338 END DO 341 339 … … 349 347 ua(ji,jj,jk) = (ua(ji,jj,jk) + spgu(ji,jj)) * umask(ji,jj,jk) 350 348 va(ji,jj,jk) = (va(ji,jj,jk) + spgv(ji,jj)) * vmask(ji,jj,jk) 351 #if defined key_trddyn || defined key_trd_vor352 ! save the surface pressure gradient trend for diagnostics353 utrd(ji,jj,jk,8) = utrd(ji,jj,jk,8) + spgu(ji,jj)/z2dt354 vtrd(ji,jj,jk,8) = vtrd(ji,jj,jk,8) + spgv(ji,jj)/z2dt355 #endif356 349 END DO 357 350 END DO … … 387 380 ! ! =============== 388 381 382 ! save the surface pressure gradient trends for diagnostic 383 ! momentum trends 384 IF( l_trddyn ) THEN 385 DO jk = 1, jpkm1 386 ztdua(:,:,jk) = ztdua(:,:,jk) + spgu(:,:)/z2dt 387 ztdva(:,:,jk) = ztdva(:,:,jk) + spgv(:,:)/z2dt 388 END DO 389 390 CALL trd_mod(ztdua, ztdva, jpdtdspg, 'DYN', kt) 391 ENDIF 392 389 393 !Boundary conditions on sshn 390 394 CALL lbc_lnk( sshn, 'T', 1. ) -
trunk/NEMO/OPA_SRC/DYN/dynspg_rl.F90
r109 r216 18 18 USE ldfdyn_oce ! ocean dynamics: lateral physics 19 19 USE zdf_oce ! ocean vertical physics 20 USE trddyn_oce ! ocean dynamics trends 20 USE trdmod ! ocean dynamics trends 21 USE trdmod_oce ! ocean variables trends 21 22 USE in_out_manager ! I/O manager 22 23 USE sol_oce ! ocean elliptic solver … … 26 27 USE solisl ! ??? 27 28 USE obc_oce ! Lateral open boundary condition 28 USE lib_mpp ! ???29 USE lbclnk ! ???29 USE lib_mpp ! distributed memory computing library 30 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 30 31 31 32 IMPLICIT NONE … … 76 77 !! 77 78 !! ** Action : - Update (ua,va) with the surf. pressure gradient trend 78 !! - Save the trends in ( utrd,vtrd) ('key_diatrends')79 !! - Save the trends in (ztdua,ztdva) ('key_trddyn') 79 80 !! 80 81 !! References : … … 92 93 !! 8.5 ! 02-08 (G. Madec) F90: Free form and module 93 94 !! ! 02-11 (C. Talandier, A-M Treguier) Open boundaries 95 !! 9.0 ! 04-08 (C. Talandier) New trends organization 94 96 !!--------------------------------------------------------------------- 97 !! * Modules used 98 USE oce, ONLY : ztdua => ta, & ! use ta as 3D workspace 99 ztdva => sa ! use sa as 3D workspace 95 100 !! * Arguments 96 101 INTEGER, INTENT( in ) :: kt ! ocean time-step index … … 520 525 ua(ji,jj,jk) = ua(ji,jj,jk) - spgu(ji,jj) 521 526 va(ji,jj,jk) = va(ji,jj,jk) - spgv(ji,jj) 522 # if defined key_trddyn || defined key_trd_vor 523 ! save the surface pressure gradient trend for diagnostics 524 utrd(ji,jj,jk,8) = -spgu(ji,jj) 525 vtrd(ji,jj,jk,8) = -spgv(ji,jj) 526 # endif 527 END DO 528 END DO 529 530 END DO 527 END DO 528 END DO 529 530 END DO 531 532 ! save the surface pressure gradient trends for diagnostic 533 ! momentum trends 534 IF( l_trddyn ) THEN 535 DO jk = 1, jpkm1 536 ztdua(:,:,jk) = - spgu(:,:) 537 ztdva(:,:,jk) = - spgv(:,:) 538 END DO 539 540 CALL trd_mod(ztdua, ztdva, jpdtdldf, 'DYN', kt) 541 ENDIF 531 542 532 543 END SUBROUTINE dyn_spg_rl -
trunk/NEMO/OPA_SRC/DYN/dynvor.F90
r110 r216 14 14 !!---------------------------------------------------------------------- 15 15 !! * Modules used 16 USE oce ! ocean dynamics and tracers 17 USE dom_oce ! ocean space and time domain 18 USE in_out_manager ! I/O manager 19 USE trddyn_oce ! ocean momentum trends 16 USE oce ! ocean dynamics and tracers 17 USE dom_oce ! ocean space and time domain 18 USE in_out_manager ! I/O manager 19 USE trdmod ! ocean dynamics trends 20 USE trdmod_oce ! ocean variables trends 20 21 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 21 22 … … 75 76 !! 6.0 ! 96-01 (G. Madec) s-coord, suppress work arrays 76 77 !! 8.5 ! 02-08 (G. Madec) F90: Free form and module 77 !!---------------------------------------------------------------------- 78 !! 9.0 ! 04-08 (C. Talandier) New trends organization 79 !!---------------------------------------------------------------------- 80 !! * Modules used 81 USE oce, ONLY : ztdua => ta, & ! use ta as 3D workspace 82 ztdva => sa ! use sa as 3D workspace 83 78 84 !! * Arguments 79 85 INTEGER, INTENT( in ) :: kt ! ocean time-step index … … 86 92 REAL(wp), DIMENSION(jpi,jpj) :: & 87 93 zwx, zwy, zwz ! temporary workspace 88 #if defined key_trddyn || defined key_trd_vor 89 REAL(wp) :: & 90 zcu, zcv, zce3 ! " " 91 #endif 94 REAL(wp), DIMENSION(jpi,jpj,jpk) :: & 95 zcu, zcv ! " " 92 96 !!---------------------------------------------------------------------- 93 97 … … 100 104 ! Local constant initialization 101 105 zfact2 = 0.5 * 0.5 106 zcu (:,:,:) = 0.e0 107 zcv (:,:,:) = 0.e0 108 109 ! Save ua and va trends 110 IF( l_trddyn ) THEN 111 ztdua(:,:,:) = ua(:,:,:) 112 ztdva(:,:,:) = va(:,:,:) 113 zcu(:,:,:) = 0.e0 114 zcv(:,:,:) = 0.e0 115 ENDIF 102 116 103 117 ! ! =============== … … 129 143 ua(ji,jj,jk) = ua(ji,jj,jk) + zua 130 144 va(ji,jj,jk) = va(ji,jj,jk) + zva 131 # if defined key_trddyn || defined key_trd_vor132 # if defined key_s_coord133 zce3= ff(ji,jj) / fse3f(ji,jj,jk)134 zcu = zfact2 / e1u(ji,jj) * ( ff(ji ,jj-1) / fse3f(ji,jj-1,jk) * zy1 + zce3 * zy2 )135 zcv =-zfact2 / e2v(ji,jj) * ( ff(ji-1,jj ) / fse3f(ji-1,jj,jk) * zx1 + zce3 * zx2 )136 # else137 zcu = zfact2 / e1u(ji,jj) * ( ff(ji ,jj-1) * zy1 + ff(ji,jj) * zy2 )138 zcv =-zfact2 / e2v(ji,jj) * ( ff(ji-1,jj ) * zx1 + ff(ji,jj) * zx2 )139 # endif140 utrd(ji,jj,jk,3) = zua - zcu141 vtrd(ji,jj,jk,3) = zva - zcv142 utrd(ji,jj,jk,4) = zcu143 vtrd(ji,jj,jk,4) = zcv144 # endif145 145 END DO 146 146 END DO … … 148 148 END DO ! End of slab 149 149 ! ! =============== 150 151 ! save the relative & planetary vorticity trends for diagnostic 152 ! momentum trends 153 IF( l_trddyn ) THEN 154 ! Compute the planetary vorticity term trend 155 ! ! =============== 156 DO jk = 1, jpkm1 ! Horizontal slab 157 ! ! =============== 158 DO jj = 2, jpjm1 159 DO ji = fs_2, fs_jpim1 ! vector opt. 160 zy1 = zwy(ji,jj-1) + zwy(ji+1,jj-1) 161 zy2 = zwy(ji,jj ) + zwy(ji+1,jj ) 162 zx1 = zwx(ji-1,jj) + zwx(ji-1,jj+1) 163 zx2 = zwx(ji ,jj) + zwx(ji ,jj+1) 164 # if defined key_s_coord 165 zcu(ji,jj,jk) = zfact2 / e1u(ji,jj) * ( ff(ji ,jj-1) / fse3f(ji,jj-1,jk) * zy1 & 166 & + ff(ji ,jj ) / fse3f(ji,jj ,jk) * zy2 ) 167 zcv(ji,jj,jk) =-zfact2 / e2v(ji,jj) * ( ff(ji-1,jj ) / fse3f(ji-1,jj,jk) * zx1 & 168 & + ff(ji ,jj ) / fse3f(ji ,jj,jk) * zx2 ) 169 # else 170 zcu(ji,jj,jk) = zfact2 / e1u(ji,jj) * ( ff(ji ,jj-1) * zy1 + ff(ji,jj) * zy2 ) 171 zcv(ji,jj,jk) =-zfact2 / e2v(ji,jj) * ( ff(ji-1,jj ) * zx1 + ff(ji,jj) * zx2 ) 172 # endif 173 END DO 174 END DO 175 ! ! =============== 176 END DO ! End of slab 177 ! ! =============== 178 179 ! Compute the relative vorticity term trend 180 ztdua(:,:,:) = ua(:,:,:) - ztdua(:,:,:) - zcu(:,:,:) 181 ztdva(:,:,:) = va(:,:,:) - ztdva(:,:,:) - zcv(:,:,:) 182 183 CALL trd_mod(zcu , zcv , jpdtdpvo, 'DYN', kt) 184 CALL trd_mod(zcu , zcv , jpdtddat, 'DYN', kt) 185 CALL trd_mod(ztdua, ztdva, jpdtdrvo, 'DYN', kt) 186 ENDIF 150 187 151 188 IF(l_ctl) THEN ! print sum trends (used for debugging) … … 194 231 !! 6.0 ! 96-01 (G. Madec) s-coord, suppress work arrays 195 232 !! 8.5 ! 02-08 (G. Madec) F90: Free form and module 196 !!---------------------------------------------------------------------- 233 !! 9.0 ! 04-08 (C. Talandier) New trends organization 234 !!---------------------------------------------------------------------- 235 !! * Modules used 236 USE oce, ONLY : ztdua => ta, & ! use ta as 3D workspace 237 ztdva => sa ! use sa as 3D workspace 197 238 !! * Arguments 198 239 INTEGER, INTENT( in ) :: kt ! ocean timestep index … … 205 246 REAL(wp), DIMENSION(jpi,jpj) :: & 206 247 zwx, zwy, zwz, zww ! temporary workspace 248 REAL(wp), DIMENSION(jpi,jpj,jpk) :: & 249 zcu, zcv ! " " 207 250 !!---------------------------------------------------------------------- 208 251 … … 216 259 zfact1 = 0.5 * 0.25 217 260 zfact2 = 0.5 * 0.5 261 262 ! Save ua and va trends 263 IF( l_trddyn ) THEN 264 ztdua(:,:,:) = ua(:,:,:) 265 ztdva(:,:,:) = va(:,:,:) 266 zcu(:,:,:) = 0.e0 267 zcv(:,:,:) = 0.e0 268 ENDIF 218 269 219 270 ! ! =============== … … 252 303 ua(ji,jj,jk) = ua(ji,jj,jk) + zcua + zua 253 304 va(ji,jj,jk) = va(ji,jj,jk) + zcva + zva 254 # if defined key_trddyn || defined key_trd_vor255 utrd(ji,jj,jk,3) = zua256 vtrd(ji,jj,jk,3) = zva257 utrd(ji,jj,jk,4) = zcua258 vtrd(ji,jj,jk,4) = zcva259 # endif260 305 END DO 261 306 END DO … … 263 308 END DO ! End of slab 264 309 ! ! =============== 310 311 ! save the relative & planetary vorticity trends for diagnostic 312 ! momentum trends 313 IF( l_trddyn ) THEN 314 ! Compute the planetary vorticity term trend 315 ! ! =============== 316 DO jk = 1, jpkm1 ! Horizontal slab 317 ! ! =============== 318 DO jj = 2, jpjm1 319 DO ji = fs_2, fs_jpim1 ! vector opt. 320 zy1 = ( zwy(ji,jj-1) + zwy(ji+1,jj-1) ) / e1u(ji,jj) 321 zy2 = ( zwy(ji,jj ) + zwy(ji+1,jj ) ) / e1u(ji,jj) 322 zx1 = ( zwx(ji-1,jj) + zwx(ji-1,jj+1) ) / e2v(ji,jj) 323 zx2 = ( zwx(ji ,jj) + zwx(ji ,jj+1) ) / e2v(ji,jj) 324 ! energy conserving formulation for planetary vorticity term 325 zcu(ji,jj,jk) = zfact2 * ( zwz(ji ,jj-1) * zy1 + zwz(ji,jj) * zy2 ) 326 zcv(ji,jj,jk) =-zfact2 * ( zwz(ji-1,jj ) * zx1 + zwz(ji,jj) * zx2 ) 327 END DO 328 END DO 329 ! ! =============== 330 END DO ! End of slab 331 ! ! =============== 332 333 ! Compute the relative vorticity term trend 334 ztdua(:,:,:) = ua(:,:,:) - ztdua(:,:,:) - zcu(:,:,:) 335 ztdva(:,:,:) = va(:,:,:) - ztdva(:,:,:) - zcv(:,:,:) 336 337 CALL trd_mod(zcu , zcv , jpdtdpvo, 'DYN', kt) 338 CALL trd_mod(zcu , zcv , jpdtddat, 'DYN', kt) 339 CALL trd_mod(ztdua, ztdva, jpdtdrvo, 'DYN', kt) 340 ENDIF 265 341 266 342 IF(l_ctl) THEN ! print sum trends (used for debugging) … … 304 380 !! 6.0 ! 96-01 (G. Madec) s-coord, suppress work arrays 305 381 !! 8.5 ! 02-08 (G. Madec) F90: Free form and module 382 !! 9.0 ! 04-08 (C. Talandier) New trends organization 306 383 !!---------------------------------------------------------------------- 307 384 !! * modules used … … 316 393 zfact1, zua, zva, zuav, zvau ! temporary scalars 317 394 REAL(wp), DIMENSION(jpi,jpj,jpk) :: & 318 zwz ! temporary workspace 319 # if defined key_trddyn || defined key_trd_vor 320 REAL(wp) :: & 321 zcu, zcv, zce3 ! temporary scalars 322 # endif 395 zcu, zcv, zwz, & ! temporary workspace 396 ztdua, ztdva ! temporary workspace 323 397 !!---------------------------------------------------------------------- 324 398 … … 331 405 ! Local constant initialization 332 406 zfact1 = 0.5 * 0.25 407 408 ! Save ua and va trends 409 IF( l_trddyn ) THEN 410 ztdua(:,:,:) = ua(:,:,:) 411 ztdva(:,:,:) = va(:,:,:) 412 zcu(:,:,:) = 0.e0 413 zcv(:,:,:) = 0.e0 414 ENDIF 333 415 334 416 ! ! =============== … … 371 453 ua(ji,jj,jk) = ua(ji,jj,jk) + zua 372 454 va(ji,jj,jk) = va(ji,jj,jk) + zva 373 374 # if defined key_trddyn || defined key_trd_vor375 # if defined key_s_coord376 zce3 = ff(ji,jj) / fse3f(ji,jj,jk)377 zcu = zuav * ( ff(ji ,jj-1) / fse3f(ji ,jj-1,jk) + zce3 )378 zcv = zvau * ( ff(ji-1,jj ) / fse3f(ji-1,jj ,jk) + zce3 )379 # else380 zcu = zuav * ( ff(ji ,jj-1) + ff(ji,jj) )381 zcv = zvau * ( ff(ji-1,jj ) + ff(ji,jj) )382 # endif383 384 # if defined key_trddyn_new385 utrd(ji,jj,jk,2) = utrd(ji,jj,jk,2) + zua - zcu386 vtrd(ji,jj,jk,3) = vtrd(ji,jj,jk,3) + zva - zcv387 # else388 utrd(ji,jj,jk,3) = zua - zcu389 vtrd(ji,jj,jk,3) = zva - zcv390 # endif391 utrd(ji,jj,jk,4) = zcu392 vtrd(ji,jj,jk,4) = zcv393 # endif394 455 END DO 395 456 END DO … … 397 458 END DO ! End of slab 398 459 ! ! =============== 460 461 462 ! save the relative & planetary vorticity trends for diagnostic 463 ! momentum trends 464 IF( l_trddyn ) THEN 465 ! Compute the planetary vorticity term trend 466 ! ! =============== 467 DO jk = 1, jpkm1 ! Horizontal slab 468 ! ! =============== 469 DO jj = 2, jpjm1 470 DO ji = fs_2, fs_jpim1 ! vector opt. 471 zuav = zfact1 / e1u(ji,jj) * ( zwy(ji ,jj-1,jk) + zwy(ji+1,jj-1,jk) & 472 & + zwy(ji ,jj ,jk) + zwy(ji+1,jj ,jk) ) 473 zvau =-zfact1 / e2v(ji,jj) * ( zwx(ji-1,jj ,jk) + zwx(ji-1,jj+1,jk) & 474 & + zwx(ji ,jj ,jk) + zwx(ji ,jj+1,jk) ) 475 # if defined key_s_coord 476 zcu(ji,jj,jk) = zuav * ( ff(ji ,jj-1) / fse3f(ji ,jj-1,jk) & 477 & + ff(ji ,jj ) / fse3f(ji ,jj ,jk) ) 478 zcv(ji,jj,jk) = zvau * ( ff(ji-1,jj ) / fse3f(ji-1,jj ,jk) & 479 & + ff(ji ,jj ) / fse3f(ji ,jj ,jk) ) 480 # else 481 zcu(ji,jj,jk) = zuav * ( ff(ji ,jj-1) + ff(ji,jj) ) 482 zcv(ji,jj,jk) = zvau * ( ff(ji-1,jj ) + ff(ji,jj) ) 483 # endif 484 END DO 485 END DO 486 ! ! =============== 487 END DO ! End of slab 488 ! ! =============== 489 490 ! Compute the relative vorticity term trend 491 ztdua(:,:,:) = ua(:,:,:) - ztdua(:,:,:) - zcu(:,:,:) 492 ztdva(:,:,:) = va(:,:,:) - ztdva(:,:,:) - zcv(:,:,:) 493 494 CALL trd_mod(zcu , zcv , jpdtdpvo, 'DYN', kt) 495 CALL trd_mod(zcu , zcv , jpdtddat, 'DYN', kt) 496 CALL trd_mod(ztdua, ztdva, jpdtdrvo, 'DYN', kt) 497 ENDIF 399 498 400 499 IF(l_ctl) THEN ! print sum trends (used for debugging) … … 432 531 !! Arakawa and Lamb 19XX, ??? 433 532 !! History : 434 !! 5.0 ! 04-02 (G. Madec) Original code 435 !!---------------------------------------------------------------------- 533 !! 8.5 ! 04-02 (G. Madec) Original code 534 !! 9.0 ! 04-08 (C. Talandier) New trends organization 535 !!---------------------------------------------------------------------- 536 !! * Modules used 537 USE oce, ONLY : ztdua => ta, & ! use ta as 3D workspace 538 ztdva => sa ! use sa as 3D workspace 539 436 540 !! * Arguments 437 541 INTEGER, INTENT( in ) :: kt ! ocean time-step index … … 443 547 REAL(wp), DIMENSION(jpi,jpj) :: & 444 548 zwx, zwy, zwz, & ! temporary workspace 445 ztnw, ztne, ztsw, ztse ! " " 446 #if defined key_trddyn || defined key_trd_vor 447 REAL(wp) :: & 448 zcu, zcv ! " " 449 REAL(wp), DIMENSION(jpi,jpj) :: & 549 ztnw, ztne, ztsw, ztse, & ! " " 450 550 zcor ! potential planetary vorticity (f/e3) 451 #endif 551 REAL(wp), DIMENSION(jpi,jpj,jpk) :: & 552 zcu, zcv ! temporary workspace 452 553 REAL(wp), DIMENSION(jpi,jpj,jpk), SAVE :: & 453 554 ze3f … … 474 575 ! Local constant initialization 475 576 zfac12 = 1.e0 / 12.e0 577 578 ! Save ua and va trends 579 IF( l_trddyn ) THEN 580 ztdua(:,:,:) = ua(:,:,:) 581 ztdva(:,:,:) = va(:,:,:) 582 zcu(:,:,:) = 0.e0 583 zcv(:,:,:) = 0.e0 584 ENDIF 476 585 477 586 ! ! =============== … … 485 594 zwx(:,:) = e2u(:,:) * fse3u(:,:,jk) * un(:,:,jk) 486 595 zwy(:,:) = e1v(:,:) * fse3v(:,:,jk) * vn(:,:,jk) 487 #if defined key_trddyn || defined key_trd_vor488 596 zcor(:,:) = ff(:,:) * ze3f(:,:,jk) 489 #endif490 597 491 598 ! Compute and add the vorticity term trend … … 516 623 ua(ji,jj,jk) = ua(ji,jj,jk) + zua 517 624 va(ji,jj,jk) = va(ji,jj,jk) + zva 518 # if defined key_trddyn || defined key_trd_vor519 zcu = + zfac12 / e1u(ji,jj) * ( zcor(ji,jj ) * zwy(ji ,jj ) + zcor(ji+1,jj) * zwy(ji+1,jj ) &520 & + zcor(ji,jj ) * zwy(ji ,jj-1) + zcor(ji+1,jj) * zwy(ji+1,jj-1) )521 zcv = - zfac12 / e2v(ji,jj) * ( zcor(ji,jj+1) * zwx(ji-1,jj+1) + zcor(ji,jj+1) * zwx(ji ,jj+1) &522 & + zcor(ji,jj ) * zwx(ji-1,jj ) + zcor(ji,jj ) * zwx(ji ,jj ) )523 utrd(ji,jj,jk,3) = zua - zcu524 vtrd(ji,jj,jk,3) = zva - zcv525 utrd(ji,jj,jk,4) = zcu526 vtrd(ji,jj,jk,4) = zcv527 # endif528 625 END DO 529 626 END DO … … 531 628 END DO ! End of slab 532 629 ! ! =============== 630 631 ! save the relative & planetary vorticity trends for diagnostic 632 ! momentum trends 633 IF( l_trddyn ) THEN 634 ! Compute the planetary vorticity term trend 635 ! ! =============== 636 DO jk = 1, jpkm1 ! Horizontal slab 637 ! ! =============== 638 DO jj = 2, jpjm1 639 DO ji = fs_2, fs_jpim1 ! vector opt. 640 zcu(ji,jj,jk) = + zfac12 / e1u(ji,jj) * ( zcor(ji,jj ) * zwy(ji ,jj ) + zcor(ji+1,jj) * zwy(ji+1,jj ) & 641 & + zcor(ji,jj ) * zwy(ji ,jj-1) + zcor(ji+1,jj) * zwy(ji+1,jj-1) ) 642 zcv(ji,jj,jk) = - zfac12 / e2v(ji,jj) * ( zcor(ji,jj+1) * zwx(ji-1,jj+1) + zcor(ji,jj+1) * zwx(ji ,jj+1) & 643 & + zcor(ji,jj ) * zwx(ji-1,jj ) + zcor(ji,jj ) * zwx(ji ,jj ) ) 644 END DO 645 END DO 646 ! ! =============== 647 END DO ! End of slab 648 ! ! =============== 649 650 ! Compute the relative vorticity term trend 651 ztdua(:,:,:) = ua(:,:,:) - ztdua(:,:,:) - zcu(:,:,:) 652 ztdva(:,:,:) = va(:,:,:) - ztdva(:,:,:) - zcv(:,:,:) 653 654 CALL trd_mod(zcu , zcv , jpdtdpvo, 'DYN', kt) 655 CALL trd_mod(zcu , zcv , jpdtddat, 'DYN', kt) 656 CALL trd_mod(ztdua, ztdva, jpdtdrvo, 'DYN', kt) 657 ENDIF 533 658 534 659 IF(l_ctl) THEN ! print sum trends (used for debugging) -
trunk/NEMO/OPA_SRC/DYN/dynzad.F90
r109 r216 12 12 USE dom_oce ! ocean space and time domain 13 13 USE in_out_manager ! I/O manager 14 USE trddyn_oce ! dynamics trends diagnostics variables 15 USE flxrnf ! ??? 14 USE trdmod ! ocean dynamics trends 15 USE trdmod_oce ! ocean variables trends 16 USE flxrnf ! ocean runoffs 16 17 17 18 IMPLICIT NONE … … 57 58 !! 7.5 ! 96-01 (G. Madec) statement function for e3 58 59 !! 8.5 ! 02-07 (G. Madec) Free form, F90 60 !! 9.0 ! 04-08 (C. Talandier) New trends organization 59 61 !!---------------------------------------------------------------------- 60 62 !! * modules used … … 70 72 REAL(wp), DIMENSION(jpi) :: & 71 73 zww ! temporary workspace 74 REAL(wp), DIMENSION(jpi,jpj,jpk) :: & 75 ztdua, ztdva ! temporary workspace 72 76 !!---------------------------------------------------------------------- 73 77 … … 76 80 IF(lwp) WRITE(numout,*) 'dyn_zad : arakawa advection scheme' 77 81 IF(lwp) WRITE(numout,*) '~~~~~~~ Auto-tasking case, j-slab, no vector opt.' 82 ENDIF 83 84 ! Save ua and va trends 85 IF( l_trddyn ) THEN 86 ztdua(:,:,:) = ua(:,:,:) 87 ztdva(:,:,:) = va(:,:,:) 78 88 ENDIF 79 89 … … 115 125 ua(ji,jj,jk) = ua(ji,jj,jk) + zua 116 126 va(ji,jj,jk) = va(ji,jj,jk) + zva 117 # if defined key_trddyn || defined key_trd_vor118 ! save the trends for diagnostics119 utrd(ji,jj,jk,6) = zua120 vtrd(ji,jj,jk,6) = zva121 # endif122 127 END DO 123 128 END DO … … 125 130 END DO ! End of slab 126 131 ! ! =============== 132 133 ! save the vertical advection trends for diagnostic 134 ! momentum trends 135 IF( l_trddyn ) THEN 136 ztdua(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 137 ztdva(:,:,:) = va(:,:,:) - ztdva(:,:,:) 138 139 CALL trd_mod(ztdua, ztdva, jpdtdzad, 'DYN', kt) 140 ENDIF 127 141 128 142 IF(l_ctl) THEN ! print sum trends (used for debugging) … … 170 184 REAL(wp), DIMENSION(jpi,jpj) :: & 171 185 zww ! temporary workspace 186 REAL(wp), DIMENSION(jpi,jpj,jpk) :: & 187 ztdua, ztdva ! temporary workspace 172 188 !!---------------------------------------------------------------------- 173 189 … … 176 192 IF(lwp)WRITE(numout,*) 'dyn_zad : arakawa advection scheme' 177 193 IF(lwp)WRITE(numout,*) '~~~~~~~ vector optimization k-j-i loop' 194 ENDIF 195 196 ! Save ua and va trends 197 IF( l_trddyn ) THEN 198 ztdua(:,:,:) = ua(:,:,:) 199 ztdva(:,:,:) = va(:,:,:) 178 200 ENDIF 179 201 … … 218 240 ua(ji,jj,jk) = ua(ji,jj,jk) + zua 219 241 va(ji,jj,jk) = va(ji,jj,jk) + zva 220 # if defined key_trddyn || defined key_trd_vor221 ! save the trends for diagnostics222 utrd(ji,jj,jk,6) = zua223 vtrd(ji,jj,jk,6) = zva224 # endif225 242 END DO 226 243 END DO 227 244 END DO 245 246 ! save the vertical advection trends for diagnostic 247 ! momentum trends 248 IF( l_trddyn ) THEN 249 ztdua(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 250 ztdva(:,:,:) = va(:,:,:) - ztdva(:,:,:) 251 252 CALL trd_mod(ztdua, ztdva, jpdtdzad, 'DYN', kt) 253 ENDIF 228 254 229 255 IF(l_ctl) THEN ! print sum trends (used for debugging) -
trunk/NEMO/OPA_SRC/DYN/dynzdf_exp.F90
r109 r216 16 16 USE in_out_manager ! I/O manager 17 17 USE taumod ! surface ocean stress 18 USE trddyn_oce ! dynamics trends diagnostics variables 18 USE trdmod ! ocean dynamics trends 19 USE trdmod_oce ! ocean variables trends 19 20 20 21 IMPLICIT NONE … … 48 49 !! 49 50 !! ** Action : - Update (ua,va) with the vertical diffusive trend 50 !! - Save the trends in ( utrd,vtrd) ('key_diatrends')51 !! - Save the trends in (ztdua,ztdva) ('key_trddyn') 51 52 !! 52 53 !! History : … … 54 55 !! ! 97-05 (G. Madec) vertical component of isopycnal 55 56 !! 8.5 ! 02-08 (G. Madec) F90: Free form and module 57 !! 9.0 ! 04-08 (C. Talandier) New trends organization 56 58 !!--------------------------------------------------------------------- 59 !! * Modules used 60 USE oce, ONLY : ztdua => ta, & ! use ta as 3D workspace 61 ztdva => sa ! use sa as 3D workspace 57 62 !! * Arguments 58 INTEGER, INTENT( in ) :: kt ! ocean time-step index63 INTEGER, INTENT( in ) :: kt ! ocean time-step index 59 64 60 65 !! * Local declarations 61 INTEGER :: ji, jj, jk, jl ! dummy loop indices 66 INTEGER :: & 67 ji, jj, jk, jl, & ! dummy loop indices 68 ikbu, ikbum1 , ikbv, ikbvm1 ! temporary integers 62 69 REAL(wp) :: & 63 zrau0r, zlavmr, z2dt, zua, zva ! temporary scalars 64 REAL(wp), DIMENSION(jpi,jpk) :: & 65 zwx, zwy, zwz, zww ! temporary workspace arrays 66 #if defined key_trddyn || defined key_trd_vor 67 INTEGER :: & 68 ikbu, ikbum1 , ikbv, ikbvm1 ! temporary integers 69 #endif 70 zrau0r, zlavmr, z2dt, zua, zva ! temporary scalars 71 REAL(wp), DIMENSION(jpi,jpk) :: & 72 zwx, zwy, zwz, zww ! temporary workspace arrays 73 REAL(wp), DIMENSION(jpi,jpj) :: & 74 ztsx, ztsy, ztbx, ztby ! temporary workspace arrays 70 75 !!---------------------------------------------------------------------- 71 76 … … 81 86 zlavmr = 1. / float( n_zdfexp ) ! inverse of the number of sub time step 82 87 z2dt = 2. * rdt ! Leap-frog environnement 88 ztsx(:,:) = 0.e0 89 ztsy(:,:) = 0.e0 90 ztbx(:,:) = 0.e0 91 ztby(:,:) = 0.e0 92 93 ! Save ua and va trends 94 IF( l_trddyn ) THEN 95 ztdua(:,:,:) = ua(:,:,:) 96 ztdva(:,:,:) = va(:,:,:) 97 ENDIF 98 83 99 IF( neuler == 0 .AND. kt == nit000 ) z2dt = rdt ! Euler time stepping when starting from rest 84 100 … … 98 114 zwx(ji,jk) = ub(ji,jj,jk) 99 115 zwz(ji,jk) = vb(ji,jj,jk) 100 #if defined key_trddyn || defined key_trd_vor101 utrd(ji,jj,jk,7) = ua(ji,jj,jk)102 vtrd(ji,jj,jk,7) = va(ji,jj,jk)103 #endif104 116 END DO 105 117 END DO … … 131 143 END DO 132 144 133 #if defined key_trddyn || defined key_trd_vor134 ! diagnose the vertical diffusive momentum trends135 136 ! save the total vertical momentum diffusive trend137 DO jk = 1, jpkm1138 DO ji = 2, jpim1139 utrd(ji,jj,jk,7) = ua(ji,jj,jk) - utrd(ji,jj,jk,7)140 vtrd(ji,jj,jk,7) = va(ji,jj,jk) - vtrd(ji,jj,jk,7)141 END DO142 END DO143 144 ! subtract and save surface and momentum fluxes145 DO ji = 2, jpim1146 ! save the surface momentum fluxes147 tautrd(ji,jj,1) = zwy(ji,1) / fse3u(ji,jj,1)148 tautrd(ji,jj,2) = zww(ji,1) / fse3v(ji,jj,1)149 ! save bottom friction momentum fluxes150 ikbu = MIN( mbathy(ji+1,jj), mbathy(ji,jj) )151 ikbum1 = MAX( ikbu-1, 1 )152 ikbv = MIN( mbathy(ji,jj+1), mbathy(ji,jj) )153 ikbvm1 = MAX( ikbv-1, 1 )154 tautrd(ji,jj,3) = avmu(ji,jj,ikbu) * zwx(ji,ikbum1) &155 / ( fse3u(ji,jj,ikbum1) * fse3uw(ji,jj,ikbu) )156 tautrd(ji,jj,4) = avmv(ji,jj,ikbv) * zwz(ji,ikbvm1) &157 / ( fse3v(ji,jj,ikbvm1) * fse3vw(ji,jj,ikbv) )158 ! subtract surface forcing and bottom friction trend from vertical159 ! diffusive momentum trend160 utrd(ji,jj,1 ,7) = utrd(ji,jj,1 ,7) - tautrd(ji,jj,1)161 utrd(ji,jj,ikbum1,7) = utrd(ji,jj,ikbum1,7) - tautrd(ji,jj,3)162 vtrd(ji,jj,1 ,7) = vtrd(ji,jj,1 ,7) - tautrd(ji,jj,2)163 vtrd(ji,jj,ikbvm1,7) = vtrd(ji,jj,ikbvm1,7) - tautrd(ji,jj,4)164 END DO165 #endif166 145 ! ! =============== 167 146 END DO ! End of slab 168 147 ! ! =============== 169 148 149 ! save the vertical diffusion trends for diagnostic 150 ! momentum trends 151 IF( l_trddyn ) THEN 152 ! save the total vertical momentum diffusive trend 153 ztdua(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 154 ztdva(:,:,:) = va(:,:,:) - ztdva(:,:,:) 155 156 ! subtract and save surface and momentum fluxes 157 ! ! =============== 158 DO jj = 2, jpjm1 ! Horizontal slab 159 ! ! =============== 160 DO ji = 2, jpim1 161 ! save the surface momentum fluxes 162 ztsx(ji,jj) = zwy(ji,1) / fse3u(ji,jj,1) 163 ztsy(ji,jj) = zww(ji,1) / fse3v(ji,jj,1) 164 ! save bottom friction momentum fluxes 165 ikbu = MIN( mbathy(ji+1,jj), mbathy(ji,jj) ) 166 ikbum1 = MAX( ikbu-1, 1 ) 167 ikbv = MIN( mbathy(ji,jj+1), mbathy(ji,jj) ) 168 ikbvm1 = MAX( ikbv-1, 1 ) 169 ztbx(ji,jj) = avmu(ji,jj,ikbu) * zwx(ji,ikbum1) & 170 / ( fse3u(ji,jj,ikbum1) * fse3uw(ji,jj,ikbu) ) 171 ztby(ji,jj) = avmv(ji,jj,ikbv) * zwz(ji,ikbvm1) & 172 / ( fse3v(ji,jj,ikbvm1) * fse3vw(ji,jj,ikbv) ) 173 ! subtract surface forcing and bottom friction trend from vertical 174 ! diffusive momentum trend 175 ztdua(ji,jj,1 ) = ztdua(ji,jj,1 ) - ztsx(ji,jj) 176 ztdua(ji,jj,ikbum1) = ztdua(ji,jj,ikbum1) - ztbx(ji,jj) 177 ztdva(ji,jj,1 ) = ztdva(ji,jj,1 ) - ztsy(ji,jj) 178 ztdva(ji,jj,ikbvm1) = ztdva(ji,jj,ikbvm1) - ztby(ji,jj) 179 END DO 180 ! ! =============== 181 END DO ! End of slab 182 ! ! =============== 183 184 CALL trd_mod(ztdua, ztdva, jpdtdzdf, 'DYN', kt) 185 ztdua(:,:,:) = 0.e0 186 ztdva(:,:,:) = 0.e0 187 ztdua(:,:,1) = ztsx(:,:) 188 ztdva(:,:,1) = ztsy(:,:) 189 CALL trd_mod(ztdua , ztdva , jpdtdswf, 'DYN', kt) 190 ztdua(:,:,:) = 0.e0 191 ztdva(:,:,:) = 0.e0 192 ztdua(:,:,1) = ztbx(:,:) 193 ztdva(:,:,1) = ztby(:,:) 194 CALL trd_mod(ztdua , ztdva , jpdtdbfr, 'DYN', kt) 195 ENDIF 196 197 IF(l_ctl) THEN ! print sum trends (used for debugging) 198 zua = SUM( ua(2:nictl,2:njctl,1:jpkm1) * umask(2:nictl,2:njctl,1:jpkm1) ) 199 zva = SUM( va(2:nictl,2:njctl,1:jpkm1) * vmask(2:nictl,2:njctl,1:jpkm1) ) 200 WRITE(numout,*) ' zdf - Ua: ', zua-u_ctl, ' Va: ', zva-v_ctl 201 u_ctl = zua ; v_ctl = zva 202 ENDIF 203 170 204 END SUBROUTINE dyn_zdf_exp 171 205 -
trunk/NEMO/OPA_SRC/DYN/dynzdf_imp.F90
r109 r216 18 18 USE in_out_manager ! I/O manager 19 19 USE taumod ! surface ocean stress 20 USE trddyn_oce ! dynamics trends diagnostics variables 20 USE trdmod ! ocean dynamics trends 21 USE trdmod_oce ! ocean variables trends 21 22 22 23 IMPLICIT NONE … … 54 55 !! ** Action : - Update (ua,va) arrays with the after vertical diffusive 55 56 !! mixing trend. 56 !! - Save the trends in ( utrd,vtrd) ('key_diatrends')57 !! - Save the trends in (ztdua,ztdva) ('l_trddyn') 57 58 !! 58 59 !! History : … … 60 61 !! ! 97-05 (G. Madec) vertical component of isopycnal 61 62 !! 8.5 ! 02-08 (G. Madec) F90: Free form and module 63 !! 9.0 ! 04-08 (C. Talandier) New trends organization 62 64 !!--------------------------------------------------------------------- 63 65 !! * Modules used … … 69 71 70 72 !! * Local declarations 71 INTEGER :: ji, jj, jk ! dummy loop indices 73 INTEGER :: & 74 ji, jj, jk, & ! dummy loop indices 75 ikbu, ikbum1, ikbv, ikbvm1 ! temporary integers 72 76 REAL(wp) :: & 73 77 zrau0r, z2dt, zua, zva, & ! temporary scalars 74 78 z2dtf, zcoef, zzws, zrhs ! " " 79 REAL(wp), DIMENSION(jpi,jpj) :: & 80 ztsx, ztsy, ztbx, ztby ! temporary workspace arrays 75 81 REAL(wp), DIMENSION(jpi,jpj,jpk) :: & 76 zwi ! temporary workspace arrays 77 #if defined key_trddyn || defined key_trd_vor 78 INTEGER :: & 79 ikbu, ikbum1, ikbv, ikbvm1 ! temporary integers 80 #endif 82 zwi, ztdua, ztdva ! temporary workspace arrays 81 83 !!---------------------------------------------------------------------- 82 84 … … 91 93 zrau0r = 1. / rau0 ! inverse of the reference density 92 94 z2dt = 2. * rdt ! Leap-frog environnement 95 ztsx(:,:) = 0.e0 96 ztsy(:,:) = 0.e0 97 ztbx(:,:) = 0.e0 98 ztby(:,:) = 0.e0 93 99 ! Euler time stepping when starting from rest 94 100 IF( neuler == 0 .AND. kt == nit000 ) z2dt = rdt 95 ! Normalization to obtain the general momentum trend ua 96 #if defined key_trddyn || defined key_trd_vor 97 ! Save the previously computed trend 98 DO jk = 1, jpkm1 99 DO jj = 2, jpjm1 100 DO ji = fs_2, fs_jpim1 ! vector opt. 101 utrd(ji,jj,jk,7) = ua(ji,jj,jk) 102 vtrd(ji,jj,jk,7) = va(ji,jj,jk) 103 END DO 104 END DO 105 END DO 106 #endif 101 102 ! Save previous ua and va trends 103 IF( l_trddyn ) THEN 104 ztdua(:,:,:) = ua(:,:,:) 105 ztdva(:,:,:) = va(:,:,:) 106 ENDIF 107 107 108 108 ! 1. Vertical diffusion on u … … 190 190 END DO 191 191 192 #if defined key_trddyn || defined key_trd_vor 193 ! diagnose surface and bottom momentum fluxes194 DO jj = 2, jpjm1195 DO ji = fs_2, fs_jpim1 ! vector opt.196 ! save the surface forcing momentum fluxes197 tautrd(ji,jj,1) = taux(ji,jj) / ( fse3u(ji,jj,1)*rau0 )198 ! save bottom friction momentum fluxes199 ikbu = MIN( mbathy(ji+1,jj), mbathy(ji,jj) )200 ikbum1 = MAX( ikbu-1, 1 )201 tautrd(ji,jj,3) = - avmu(ji,jj,ikbu) * ua(ji,jj,ikbum1) &202 / ( fse3u(ji,jj,ikbum1)*fse3uw(ji,jj,ikbu) )203 ! subtract surface forcing and bottom friction trend from vertical204 ! diffusive momentum trend205 utrd(ji,jj,1 ,7) = utrd(ji,jj,1 ,7) + tautrd(ji,jj,1)206 utrd(ji,jj,ikbum1,7) = utrd(ji,jj,ikbum1,7) + tautrd(ji,jj,3)207 END DO208 END DO209 #endif 192 IF( l_trddyn ) THEN 193 ! diagnose surface and bottom momentum fluxes 194 DO jj = 2, jpjm1 195 DO ji = fs_2, fs_jpim1 ! vector opt. 196 ! save the surface forcing momentum fluxes 197 ztsx(ji,jj) = taux(ji,jj) / ( fse3u(ji,jj,1)*rau0 ) 198 ! save bottom friction momentum fluxes 199 ikbu = MIN( mbathy(ji+1,jj), mbathy(ji,jj) ) 200 ikbum1 = MAX( ikbu-1, 1 ) 201 ztbx(ji,jj) = - avmu(ji,jj,ikbu) * ua(ji,jj,ikbum1) & 202 / ( fse3u(ji,jj,ikbum1)*fse3uw(ji,jj,ikbu) ) 203 ! subtract surface forcing and bottom friction trend from vertical 204 ! diffusive momentum trend 205 ztdua(ji,jj,1 ) = ztdua(ji,jj,1 ) - ztsx(ji,jj) 206 ztdua(ji,jj,ikbum1) = ztdua(ji,jj,ikbum1) - ztbx(ji,jj) 207 END DO 208 END DO 209 ENDIF 210 210 211 211 ! Normalization to obtain the general momentum trend ua … … 213 213 DO jj = 2, jpjm1 214 214 DO ji = fs_2, fs_jpim1 ! vector opt. 215 zua = ( ua(ji,jj,jk) - ub(ji,jj,jk) ) / z2dt 216 #if defined key_trddyn || defined key_trd_vor 217 ! save the vertical diffusive momentum trend (general trend - previous one) 218 utrd(ji,jj,jk,7) = zua - utrd(ji,jj,jk,7) 219 #endif 220 ua(ji,jj,jk) = zua 215 ua(ji,jj,jk) = ( ua(ji,jj,jk) - ub(ji,jj,jk) ) / z2dt 221 216 END DO 222 217 END DO … … 309 304 END DO 310 305 311 #if defined key_trddyn || defined key_trd_vor 312 ! diagnose surface and bottom momentum fluxes313 DO jj = 2, jpjm1314 DO ji = fs_2, fs_jpim1 ! vector opt.315 ! save the surface forcing momentum fluxes316 tautrd(ji,jj,2) = tauy(ji,jj) / ( fse3v(ji,jj,1)*rau0 )317 ! save bottom friction momentum fluxes318 ikbv = MIN( mbathy(ji,jj+1), mbathy(ji,jj) )319 ikbvm1 = MAX( ikbv-1, 1 )320 tautrd(ji,jj,4) = - avmv(ji,jj,ikbv) * va(ji,jj,ikbvm1) &321 / ( fse3v(ji,jj,ikbvm1)*fse3vw(ji,jj,ikbv) )322 ! subtract surface forcing and bottom friction trend from vertical323 ! diffusive momentum trend324 vtrd(ji,jj,1 ,7) = vtrd(ji,jj,1 ,7) + tautrd(ji,jj,2)325 vtrd(ji,jj,ikbvm1,7) = vtrd(ji,jj,ikbvm1,7) + tautrd(ji,jj,4)326 END DO327 END DO328 #endif 306 IF( l_trddyn ) THEN 307 ! diagnose surface and bottom momentum fluxes 308 DO jj = 2, jpjm1 309 DO ji = fs_2, fs_jpim1 ! vector opt. 310 ! save the surface forcing momentum fluxes 311 ztsy(ji,jj) = tauy(ji,jj) / ( fse3v(ji,jj,1)*rau0 ) 312 ! save bottom friction momentum fluxes 313 ikbv = MIN( mbathy(ji,jj+1), mbathy(ji,jj) ) 314 ikbvm1 = MAX( ikbv-1, 1 ) 315 ztby(ji,jj) = - avmv(ji,jj,ikbv) * va(ji,jj,ikbvm1) & 316 / ( fse3v(ji,jj,ikbvm1)*fse3vw(ji,jj,ikbv) ) 317 ! subtract surface forcing and bottom friction trend from vertical 318 ! diffusive momentum trend 319 ztdva(ji,jj,1 ) = ztdva(ji,jj,1 ) - ztsy(ji,jj) 320 ztdva(ji,jj,ikbvm1) = ztdva(ji,jj,ikbvm1) - ztby(ji,jj) 321 END DO 322 END DO 323 ENDIF 329 324 330 325 ! Normalization to obtain the general momentum trend va … … 332 327 DO jj = 2, jpjm1 333 328 DO ji = fs_2, fs_jpim1 ! vector opt. 334 zva = ( va(ji,jj,jk) - vb(ji,jj,jk) ) / z2dt 335 #if defined key_trddyn || defined key_trd_vor 336 ! save the vertical diffusive momentum fluxes 337 vtrd(ji,jj,jk,7) = zva - vtrd(ji,jj,jk,7) 338 #endif 339 va(ji,jj,jk) = zva 340 END DO 341 END DO 342 END DO 329 va(ji,jj,jk) = ( va(ji,jj,jk) - vb(ji,jj,jk) ) / z2dt 330 END DO 331 END DO 332 END DO 333 334 ! save the vertical diffusion trends for diagnostic 335 ! momentum trends 336 IF( l_trddyn ) THEN 337 ztdua(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 338 ztdva(:,:,:) = va(:,:,:) - ztdva(:,:,:) 339 340 CALL trd_mod(ztdua, ztdva, jpdtdzdf, 'DYN', kt) 341 ztdua(:,:,:) = 0.e0 342 ztdva(:,:,:) = 0.e0 343 ztdua(:,:,1) = ztsx(:,:) 344 ztdva(:,:,1) = ztsy(:,:) 345 CALL trd_mod(ztdua , ztdva , jpdtdswf, 'DYN', kt) 346 ztdua(:,:,:) = 0.e0 347 ztdva(:,:,:) = 0.e0 348 ztdua(:,:,1) = ztbx(:,:) 349 ztdva(:,:,1) = ztby(:,:) 350 CALL trd_mod(ztdua , ztdva , jpdtdbfr, 'DYN', kt) 351 ENDIF 343 352 344 353 IF(l_ctl) THEN ! print sum trends (used for debugging) -
trunk/NEMO/OPA_SRC/DYN/dynzdf_imp_atsk.F90
r109 r216 17 17 USE in_out_manager ! I/O manager 18 18 USE taumod ! surface ocean stress 19 USE trddyn_oce ! dynamics trends diagnostics variables 19 USE trdmod ! ocean dynamics trends 20 USE trdmod_oce ! ocean variables trends 20 21 21 22 IMPLICIT NONE … … 52 53 !! ** Action : - Update (ua,va) arrays with the after vertical diffusive 53 54 !! mixing trend. 54 !! - Save the trends in ( utrd,vtrd) ('key_diatrends')55 !! - Save the trends in (ztdua,ztdva) ('l_trddyn') 55 56 !! 56 57 !! History : 57 58 !! 8.5 ! 02-08 (G. Madec) auto-tasking option 59 !! 9.0 ! 04-08 (C. Talandier) New trends organization 58 60 !!--------------------------------------------------------------------- 61 !! * Modules used 62 USE oce, ONLY : ztdua => ta, & ! use ta as 3D workspace 63 ztdva => sa ! use sa as 3D workspace 64 59 65 !! * Arguments 60 66 INTEGER, INTENT( in ) :: kt ! ocean time-step index … … 62 68 !! * Local declarations 63 69 INTEGER :: ji, jj, jk ! dummy loop indices 64 INTEGER :: ikst, ikenm2, ikstp1 ! temporary integers 70 INTEGER :: & 71 ikst, ikenm2, ikstp1, & ! temporary integers 72 ikbu, ikbum1, ikbv, ikbvm1 ! " " 65 73 REAL(wp) :: & 66 zrau0r, z2dt, zua, zva, & !temporary scalars74 zrau0r, z2dt, zua, zva, & !temporary scalars 67 75 z2dtf, zcoef, zzws 68 REAL(wp), DIMENSION(jpi,jpk) :: 69 zwx, zwy, zwz, &! workspace76 REAL(wp), DIMENSION(jpi,jpk) :: & 77 zwx, zwy, zwz, & ! workspace 70 78 zwd, zws, zwi, zwt 71 #if defined key_trddyn || defined key_trd_vor 72 INTEGER :: & 73 ikbu, ikbum1, ikbv, ikbvm1 ! temporary integers 74 #endif 79 REAL(wp), DIMENSION(jpi,jpj) :: & 80 ztsx, ztsy, ztbx, ztby ! temporary workspace arrays 75 81 !!---------------------------------------------------------------------- 76 82 … … 86 92 zrau0r = 1. / rau0 ! inverse of the reference density 87 93 z2dt = 2. * rdt ! Leap-frog environnement 94 ztsx(:,:) = 0.e0 95 ztsy(:,:) = 0.e0 96 ztbx(:,:) = 0.e0 97 ztby(:,:) = 0.e0 88 98 ! Euler time stepping when starting from rest 89 99 IF( neuler == 0 .AND. kt == nit000 ) z2dt = rdt 100 101 ! Save ua and va trends 102 IF( l_trddyn ) THEN 103 ztdua(:,:,:) = ua(:,:,:) 104 ztdva(:,:,:) = va(:,:,:) 105 ENDIF 90 106 91 107 ! ! =============== … … 175 191 DO jk = 1, jpkm1 176 192 DO ji = 2, jpim1 177 zua = ( zwx(ji,jk) - ub(ji,jj,jk) ) / z2dt 178 #if defined key_trddyn || defined key_trd_vor 179 ! save the vertical diffusive momentum trend 180 utrd(ji,jj,jk,7) = zua - ua(ji,jj,jk) 181 #endif 182 ua(ji,jj,jk) = zua 183 END DO 184 END DO 185 186 #if defined key_trddyn || defined key_trd_vor 193 ua(ji,jj,jk) = ( zwx(ji,jk) - ub(ji,jj,jk) ) / z2dt 194 END DO 195 END DO 196 187 197 ! diagnose surface and bottom momentum fluxes 198 ! for trends diagnostics 188 199 DO ji = 2, jpim1 189 200 ! save the surface forcing momentum fluxes 190 tautrd(ji,jj,1) = taux(ji,jj) / ( fse3u(ji,jj,1)*rau0 )201 ztsx(ji,jj) = taux(ji,jj) / ( fse3u(ji,jj,1)*rau0 ) 191 202 ! save bottom friction momentum fluxes 192 203 ikbu = MIN( mbathy(ji+1,jj), mbathy(ji,jj) ) 193 204 ikbum1 = MAX( ikbu-1, 1 ) 194 tautrd(ji,jj,3) = - avmu(ji,jj,ikbu) * zwx(ji,ikbum1) &205 ztbx(ji,jj) = - avmu(ji,jj,ikbu) * zwx(ji,ikbum1) & 195 206 / ( fse3u(ji,jj,ikbum1)*fse3uw(ji,jj,ikbu) ) 196 207 ! subtract surface forcing and bottom friction trend from vertical 197 208 ! diffusive momentum trend 198 utrd(ji,jj,1 ,7) = utrd(ji,jj,1 ,7) - tautrd(ji,jj,1) 199 utrd(ji,jj,ikbum1,7) = utrd(ji,jj,ikbum1,7) - tautrd(ji,jj,3) 200 END DO 201 #endif 209 ztdua(ji,jj,1 ) = ztdua(ji,jj,1 ) - ztsx(ji,jj) 210 ztdua(ji,jj,ikbum1) = ztdua(ji,jj,ikbum1) - ztbx(ji,jj) 211 END DO 202 212 203 213 ! 2. Vertical diffusion on v … … 284 294 DO jk = 1, jpkm1 285 295 DO ji = 2, jpim1 286 zva = ( zwx(ji,jk) - vb(ji,jj,jk) ) / z2dt 287 #if defined key_trddyn || defined key_trd_vor 288 ! save the vertical diffusive momentum fluxes 289 vtrd(ji,jj,jk,7) = zva - va(ji,jj,jk) 290 #endif 291 va(ji,jj,jk) = zva 292 END DO 293 END DO 294 295 #if defined key_trddyn || defined key_trd_vor 296 va(ji,jj,jk) = ( zwx(ji,jk) - vb(ji,jj,jk) ) / z2dt 297 END DO 298 END DO 299 296 300 ! diagnose surface and bottom momentum fluxes 301 ! for trends diagnostics 297 302 DO ji = 2, jpim1 298 303 ! save the surface forcing momentum fluxes 299 tautrd(ji,jj,2) = tauy(ji,jj) / ( fse3v(ji,jj,1)*rau0 )304 ztsy(ji,jj) = tauy(ji,jj) / ( fse3v(ji,jj,1)*rau0 ) 300 305 ! save bottom friction momentum fluxes 301 306 ikbv = MIN( mbathy(ji,jj+1), mbathy(ji,jj) ) 302 307 ikbvm1 = MAX( ikbv-1, 1 ) 303 tautrd(ji,jj,4) = - avmv(ji,jj,ikbv) * zwx(ji,ikbvm1) &308 ztby(ji,jj) = - avmv(ji,jj,ikbv) * zwx(ji,ikbvm1) & 304 309 / ( fse3v(ji,jj,ikbvm1)*fse3vw(ji,jj,ikbv) ) 305 310 ! subtract surface forcing and bottom friction trend from vertical 306 311 ! diffusive momentum trend 307 vtrd(ji,jj,1 ,7) = vtrd(ji,jj,1 ,7) - tautrd(ji,jj,2) 308 vtrd(ji,jj,ikbvm1,7) = vtrd(ji,jj,ikbvm1,7) - tautrd(ji,jj,4) 309 END DO 310 #endif 312 ztdva(ji,jj,1 ) = ztdva(ji,jj,1 ) - ztsy(ji,jj) 313 ztdva(ji,jj,ikbvm1) = ztdva(ji,jj,ikbvm1) - ztby(ji,jj) 314 END DO 311 315 ! ! =============== 312 316 END DO ! End of slab 313 317 ! ! =============== 318 319 ! save the vertical diffusion trends for diagnostic 320 ! momentum trends 321 IF( l_trddyn ) THEN 322 ztdua(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 323 ztdva(:,:,:) = va(:,:,:) - ztdva(:,:,:) 324 325 CALL trd_mod(ztdua, ztdva, jpdtdzdf, 'DYN', kt) 326 ztdua(:,:,:) = 0.e0 327 ztdva(:,:,:) = 0.e0 328 ztdua(:,:,1) = ztsx(:,:) 329 ztdva(:,:,1) = ztsy(:,:) 330 CALL trd_mod(ztdua , ztdva , jpdtdswf, 'DYN', kt) 331 ztdua(:,:,:) = 0.e0 332 ztdva(:,:,:) = 0.e0 333 ztdua(:,:,1) = ztbx(:,:) 334 ztdva(:,:,1) = ztby(:,:) 335 CALL trd_mod(ztdua , ztdva , jpdtdbfr, 'DYN', kt) 336 ENDIF 314 337 315 338 IF(l_ctl) THEN ! print sum trends (used for debugging) -
trunk/NEMO/OPA_SRC/DYN/dynzdf_iso.F90
r109 r216 19 19 USE in_out_manager ! I/O manager 20 20 USE taumod ! surface ocean stress 21 USE trddyn_oce ! dynamics trends diagnostics variables 21 USE trdmod ! ocean dynamics trends 22 USE trdmod_oce ! ocean variables trends 22 23 23 24 IMPLICIT NONE … … 77 78 !! ua = ua + dz( avmu dz(u) ) 78 79 !! 79 !! 'key_trddyn' defined: trend saved for fu ther diagnostics.80 !! 'key_trddyn' defined: trend saved for further diagnostics. 80 81 !! 81 82 !! macro-tasked on vertical slab (jj-loop) 82 83 !! 83 !! ** Action : 84 !! /comaft/ ua, va : general momentum trend increased 85 !! by the after vertical diffusive trend 86 !! /comtra/ utrd,vtrd: after vertical momentum diffusive 87 !! trend ('key_trddyn' defined) 84 !! ** Action : - Update (ua,va) arrays with the after vertical diffusive 85 !! mixing trend. 86 !! - Save the trends in (ztdua,ztdva) ('key_trddyn') 88 87 !! 89 88 !! History : 90 !! original : 90-10 (B. Blanke) 91 !! addition : 97-05 (G. Madec) vertical component of isopycnal 89 !! ! 90-10 (B. Blanke) Original code 90 !! ! 97-05 (G. Madec) vertical component of isopycnal 91 !! 8.5 ! 02-08 (G. Madec) F90: Free form and module 92 !! 9.0 ! 04-08 (C. Talandier) New trends organization 92 93 !!--------------------------------------------------------------------- 93 94 !! * Modules used 94 95 USE ldfslp , ONLY : wslpi, wslpj 95 96 USE ldftra_oce, ONLY : aht0 97 USE oce, ONLY : ztdua => ta, & ! use ta as 3D workspace 98 ztdva => sa ! use sa as 3D workspace 96 99 97 100 !! * Arguments 98 INTEGER, INTENT( in ) :: kt ! ocean time-step index101 INTEGER, INTENT( in ) :: kt ! ocean time-step index 99 102 100 103 !! * Local declarations 101 INTEGER :: ji, jj, jk ! dummy loop indices104 INTEGER :: ji, jj, jk ! dummy loop indices 102 105 INTEGER :: & 103 ikst, ikenm2, ikstp1 ! temporary integers 106 ikst, ikenm2, ikstp1, & ! temporary integers 107 ikbu, ikbum1 , ikbv, ikbvm1 ! " " 104 108 REAL(wp) :: & 105 zrau0r, z2dt, &! temporary scalars109 zrau0r, z2dt, & ! temporary scalars 106 110 z2dtf, zua, zva, zcoef, zzws 107 111 REAL(wp) :: & 108 112 zcoef0, zcoef3, zcoef4, zbu, zbv, zmkt, zmkf, & 109 113 zuav, zvav, zuwslpi, zuwslpj, zvwslpi, zvwslpj 110 REAL(wp), DIMENSION(jpi,jpk) :: & 111 zwx, zwy, zwz & ! workspace 112 , zwd, zws, zwi, zwt 113 REAL(wp), DIMENSION(jpi,jpk) :: & 114 zfuw, zdiu, zdju, zdj1u, & ! workspace 114 REAL(wp), DIMENSION(jpi,jpk) :: & 115 zwx, zwy, zwz, & ! workspace arrays 116 zwd, zws, zwi, zwt, & ! " " 117 zfuw, zdiu, zdju, zdj1u, & ! " " 115 118 zfvw, zdiv, zdjv, zdj1v 116 #if defined key_trddyn || defined key_trd_vor 117 INTEGER :: & 118 ikbu, ikbum1 , ikbv, ikbvm1 ! temporary integers 119 #endif 119 REAL(wp), DIMENSION(jpi,jpj) :: & 120 ztsx, ztsy, ztbx, ztby ! temporary workspace arrays 120 121 !!---------------------------------------------------------------------- 121 122 … … 133 134 ! Leap-frog environnement 134 135 z2dt = 2. * rdt 136 ! workspace arrays 137 ztsx(:,:) = 0.e0 138 ztsy(:,:) = 0.e0 139 ztbx(:,:) = 0.e0 140 ztby(:,:) = 0.e0 135 141 ! Euler time stepping when starting from rest 136 142 IF ( neuler == 0 .AND. kt == nit000 ) z2dt = rdt 143 144 ! Save ua and va trends 145 IF( l_trddyn ) THEN 146 ztdua(:,:,:) = ua(:,:,:) 147 ztdva(:,:,:) = va(:,:,:) 148 ENDIF 137 149 138 150 ! ! =============== … … 247 259 ua(ji,jj,jk) = ua(ji,jj,jk) + zuav 248 260 va(ji,jj,jk) = va(ji,jj,jk) + zvav 249 #if defined key_trddyn || defined key_trd_vor250 ! save the trends for diagnostics251 utrd(ji,jj,jk,5) = utrd(ji,jj,jk,5) + zuav252 vtrd(ji,jj,jk,5) = vtrd(ji,jj,jk,5) + zvav253 #endif254 261 END DO 255 262 END DO 256 257 263 ! ! =============== 264 END DO ! End of slab 265 ! ! =============== 266 IF( l_trddyn ) THEN 267 ! save these trends in addition to the lateral diffusion one for diagnostics 268 uldftrd(:,:,:) = uldftrd(:,:,:) + ua(:,:,:) - ztdua(:,:,:) 269 vldftrd(:,:,:) = vldftrd(:,:,:) + va(:,:,:) - ztdva(:,:,:) 270 271 ! save new trends ua and va 272 ztdua(:,:,:) = ua(:,:,:) 273 ztdva(:,:,:) = va(:,:,:) 274 ENDIF 275 276 ! ! =============== 277 DO jj = 2, jpjm1 ! Vertical slab 278 ! ! =============== 258 279 ! 1. Vertical diffusion on u 259 280 ! --------------------------- … … 289 310 DO jk = 1, jpkm1 290 311 DO ji = 2, jpim1 291 zua = ( zwx(ji,jk) - ub(ji,jj,jk) ) / z2dt 292 #if defined key_trddyn || defined key_trd_vor 293 ! save the vertical diffusive momentum trend 294 utrd(ji,jj,jk,7) = zua - ua(ji,jj,jk) 295 #endif 296 ua(ji,jj,jk) = zua 312 ua(ji,jj,jk) = ( zwx(ji,jk) - ub(ji,jj,jk) ) / z2dt 297 313 END DO 298 314 END DO 299 300 #if defined key_trddyn || defined key_trd_vor301 315 302 316 ! 1.4 diagnose surface and bottom momentum fluxes 303 317 DO ji = 2, jpim1 304 318 ! save the surface forcing momentum fluxes 305 tautrd(ji,jj,1) = taux(ji,jj) / ( fse3u(ji,jj,1)*rau0 )319 ztsx(ji,jj) = taux(ji,jj) / ( fse3u(ji,jj,1)*rau0 ) 306 320 ! save bottom friction momentum fluxes 307 321 ikbu = min( mbathy(ji+1,jj), mbathy(ji,jj) ) 308 322 ikbum1 = max( ikbu-1, 1 ) 309 tautrd(ji,jj,3) = - avmu(ji,jj,ikbu) * zwx(ji,ikbum1) &323 ztbx(ji,jj) = - avmu(ji,jj,ikbu) * zwx(ji,ikbum1) & 310 324 / ( fse3u(ji,jj,ikbum1)*fse3uw(ji,jj,ikbu) ) 311 325 ! subtract surface forcing and bottom friction trend from vertical 312 326 ! diffusive momentum trend 313 utrd(ji,jj,1 ,7) = utrd(ji,jj,1 ,7) - tautrd(ji,jj,1) 314 utrd(ji,jj,ikbum1,7) = utrd(ji,jj,ikbum1,7) - tautrd(ji,jj,3) 315 END DO 316 317 #endif 327 ztdua(ji,jj,1 ) = ztdua(ji,jj,1 ) - ztsx(ji,jj) 328 ztdua(ji,jj,ikbum1) = ztdua(ji,jj,ikbum1) - ztbx(ji,jj) 329 END DO 318 330 319 331 ! 2. Vertical diffusion on v … … 350 362 DO jk = 1, jpkm1 351 363 DO ji = 2, jpim1 352 zva = ( zwx(ji,jk) - vb(ji,jj,jk) ) / z2dt 353 #if defined key_trddyn || defined key_trd_vor 354 ! save the vertical diffusive momentum fluxes 355 vtrd(ji,jj,jk,7) = zva - va(ji,jj,jk) 356 #endif 357 va(ji,jj,jk) = zva 364 va(ji,jj,jk) = ( zwx(ji,jk) - vb(ji,jj,jk) ) / z2dt 358 365 END DO 359 366 END DO 360 367 361 #if defined key_trddyn || defined key_trd_vor362 368 ! 2.4 diagnose surface and bottom momentum fluxes 363 369 DO ji = 2, jpim1 364 370 ! save the surface forcing momentum fluxes 365 tautrd(ji,jj,2) = tauy(ji,jj) / ( fse3v(ji,jj,1)*rau0 )371 ztsy(ji,jj) = tauy(ji,jj) / ( fse3v(ji,jj,1)*rau0 ) 366 372 ! save bottom friction momentum fluxes 367 373 ikbv = min( mbathy(ji,jj+1), mbathy(ji,jj) ) 368 374 ikbvm1 = max( ikbv-1, 1 ) 369 tautrd(ji,jj,4) = - avmv(ji,jj,ikbv) * zwx(ji,ikbvm1) &375 ztby(ji,jj) = - avmv(ji,jj,ikbv) * zwx(ji,ikbvm1) & 370 376 / ( fse3v(ji,jj,ikbvm1)*fse3vw(ji,jj,ikbv) ) 371 377 ! subtract surface forcing and bottom friction trend from vertical 372 378 ! diffusive momentum trend 373 vtrd(ji,jj,1 ,7) = vtrd(ji,jj,1 ,7) - tautrd(ji,jj,2) 374 vtrd(ji,jj,ikbvm1,7) = vtrd(ji,jj,ikbvm1,7) - tautrd(ji,jj,4) 375 END DO 376 377 #endif 379 ztdva(ji,jj,1 ) = ztdva(ji,jj,1 ) - ztsy(ji,jj) 380 ztdva(ji,jj,ikbvm1) = ztdva(ji,jj,ikbvm1) - ztby(ji,jj) 381 END DO 378 382 ! ! =============== 379 383 END DO ! End of slab 380 384 ! ! =============== 385 386 ! save the vertical diffusive trends for diagnostic 387 ! momentum trends 388 IF( l_trddyn ) THEN 389 ztdua(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 390 ztdva(:,:,:) = va(:,:,:) - ztdva(:,:,:) 391 392 CALL trd_mod(uldftrd, vldftrd, jpdtdldf, 'DYN', kt) 393 CALL trd_mod(ztdua, ztdva, jpdtdzdf, 'DYN', kt) 394 ztdua(:,:,:) = 0.e0 395 ztdva(:,:,:) = 0.e0 396 ztdua(:,:,1) = ztsx(:,:) 397 ztdva(:,:,1) = ztsy(:,:) 398 CALL trd_mod(ztdua , ztdva , jpdtdswf, 'DYN', kt) 399 ztdua(:,:,:) = 0.e0 400 ztdva(:,:,:) = 0.e0 401 ztdua(:,:,1) = ztbx(:,:) 402 ztdva(:,:,1) = ztby(:,:) 403 CALL trd_mod(ztdua , ztdva , jpdtdbfr, 'DYN', kt) 404 ENDIF 405 406 IF(l_ctl) THEN ! print sum trends (used for debugging) 407 zua = SUM( ua(2:nictl,2:njctl,1:jpkm1) * umask(2:nictl,2:njctl,1:jpkm1) ) 408 zva = SUM( va(2:nictl,2:njctl,1:jpkm1) * vmask(2:nictl,2:njctl,1:jpkm1) ) 409 WRITE(numout,*) ' zdf - Ua: ', zua-u_ctl, ' Va: ', zva-v_ctl 410 u_ctl = zua ; v_ctl = zva 411 ENDIF 412 381 413 END SUBROUTINE dyn_zdf_iso 382 414
Note: See TracChangeset
for help on using the changeset viewer.