- Timestamp:
- 2016-01-08T10:35:19+01:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2014/dev_r4704_NOC5_MPP_BDY_UPDATE/NEMOGCM/NEMO/TOP_SRC/trcsub.F90
- Property svn:keywords set to Id
r4611 r6225 25 25 USE zdf_oce 26 26 USE domvvl 27 USE div cur ! hor. divergence and curl (div & cur routines)27 USE divhor ! horizontal divergence (div_hor routine) 28 28 USE sbcrnf, ONLY: h_rnf, nk_rnf ! River runoff 29 29 USE bdy_oce … … 40 40 PUBLIC trc_sub_ssh ! called by trc_stp to reset physics variables 41 41 42 !!* Module variables43 42 REAL(wp) :: r1_ndttrc ! 1 / nn_dttrc 44 43 REAL(wp) :: r1_ndttrcp1 ! 1 / (nn_dttrc+1) 45 44 46 !!* Substitution 47 # include "top_substitute.h90" 45 ! !* iso-neutral slopes (if l_ldfslp=T) 46 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: uslp_temp, vslp_temp, wslpi_temp, wslpj_temp !: hold current values 47 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: uslp_tm , vslp_tm , wslpi_tm , wslpj_tm !: time mean 48 48 49 !!---------------------------------------------------------------------- 49 50 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 50 !! $Id : trcstp.F90 2528 2010-12-27 17:33:53Z rblod$51 !! $Id$ 51 52 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 52 53 !!---------------------------------------------------------------------- … … 84 85 IF( MOD( kt , nn_dttrc ) /= 0 ) THEN 85 86 ! 86 un_tm (:,:,:) = un_tm (:,:,:) + un (:,:,:) * fse3u(:,:,:)87 vn_tm (:,:,:) = vn_tm (:,:,:) + vn (:,:,:) * fse3v(:,:,:)88 tsn_tm (:,:,:,jp_tem) = tsn_tm (:,:,:,jp_tem) + tsn (:,:,:,jp_tem) * fse3t(:,:,:)89 tsn_tm (:,:,:,jp_sal) = tsn_tm (:,:,:,jp_sal) + tsn (:,:,:,jp_sal) * fse3t(:,:,:)90 rhop_tm (:,:,:) = rhop_tm (:,:,:) + rhop (:,:,:) * fse3t(:,:,:)91 avt_tm (:,:,:) = avt_tm (:,:,:) + avt (:,:,:) * fse3w(:,:,:)92 # if defined key_zdfddm 93 avs_tm (:,:,:) = avs_tm (:,:,:) + avs (:,:,:) * fse3w(:,:,:)94 # endif 95 #if defined key_ldfslp 96 wslpi_tm(:,:,:) = wslpi_tm(:,:,:) + wslpi(:,:,:)97 wslpj_tm(:,:,:) = wslpj_tm(:,:,:) + wslpj(:,:,:)98 uslp_tm (:,:,:) = uslp_tm (:,:,:) + uslp(:,:,:)99 vslp_tm (:,:,:) = vslp_tm (:,:,:) + vslp(:,:,:)100 #endif 87 un_tm (:,:,:) = un_tm (:,:,:) + un (:,:,:) * e3u_n(:,:,:) 88 vn_tm (:,:,:) = vn_tm (:,:,:) + vn (:,:,:) * e3v_n(:,:,:) 89 tsn_tm (:,:,:,jp_tem) = tsn_tm (:,:,:,jp_tem) + tsn (:,:,:,jp_tem) * e3t_n(:,:,:) 90 tsn_tm (:,:,:,jp_sal) = tsn_tm (:,:,:,jp_sal) + tsn (:,:,:,jp_sal) * e3t_n(:,:,:) 91 rhop_tm (:,:,:) = rhop_tm (:,:,:) + rhop (:,:,:) * e3t_n(:,:,:) 92 avt_tm (:,:,:) = avt_tm (:,:,:) + avt (:,:,:) * e3w_n(:,:,:) 93 # if defined key_zdfddm 94 avs_tm (:,:,:) = avs_tm (:,:,:) + avs (:,:,:) * e3w_n(:,:,:) 95 # endif 96 IF( l_ldfslp ) THEN 97 uslp_tm (:,:,:) = uslp_tm (:,:,:) + uslp (:,:,:) 98 vslp_tm (:,:,:) = vslp_tm (:,:,:) + vslp (:,:,:) 99 wslpi_tm(:,:,:) = wslpi_tm(:,:,:) + wslpi(:,:,:) 100 wslpj_tm(:,:,:) = wslpj_tm(:,:,:) + wslpj(:,:,:) 101 ENDIF 101 102 # if defined key_trabbl 102 103 IF( nn_bbl_ldf == 1 ) THEN … … 131 132 avs_temp (:,:,:) = avs (:,:,:) 132 133 # endif 133 #if defined key_ldfslp 134 wslpi_temp (:,:,:) = wslpi (:,:,:) 135 wslpj_temp (:,:,:) = wslpj (:,:,:) 136 uslp_temp (:,:,:) = uslp (:,:,:) 137 vslp_temp (:,:,:) = vslp (:,:,:) 138 #endif 134 IF( l_ldfslp ) THEN 135 uslp_temp (:,:,:) = uslp (:,:,:) ; wslpi_temp (:,:,:) = wslpi (:,:,:) 136 vslp_temp (:,:,:) = vslp (:,:,:) ; wslpj_temp (:,:,:) = wslpj (:,:,:) 137 ENDIF 139 138 # if defined key_trabbl 140 139 IF( nn_bbl_ldf == 1 ) THEN … … 160 159 wndm_temp (:,:) = wndm (:,:) 161 160 ! ! Variables reset in trc_sub_ssh 162 rotn_temp (:,:,:) = rotn (:,:,:)163 161 hdivn_temp (:,:,:) = hdivn (:,:,:) 164 rotb_temp (:,:,:) = rotb (:,:,:)165 hdivb_temp (:,:,:) = hdivb (:,:,:)166 162 ! 167 163 ! 2. Create averages and reassign variables 168 un_tm (:,:,:) = un_tm (:,:,:) + un (:,:,:) * fse3u(:,:,:)169 vn_tm (:,:,:) = vn_tm (:,:,:) + vn (:,:,:) * fse3v(:,:,:)170 tsn_tm (:,:,:,jp_tem) = tsn_tm (:,:,:,jp_tem) + tsn (:,:,:,jp_tem) * fse3t(:,:,:)171 tsn_tm (:,:,:,jp_sal) = tsn_tm (:,:,:,jp_sal) + tsn (:,:,:,jp_sal) * fse3t(:,:,:)172 rhop_tm (:,:,:) = rhop_tm (:,:,:) + rhop (:,:,:) * fse3t(:,:,:)173 avt_tm (:,:,:) = avt_tm (:,:,:) + avt (:,:,:) * fse3w(:,:,:)174 # if defined key_zdfddm 175 avs_tm (:,:,:) = avs_tm (:,:,:) + avs (:,:,:) * fse3w(:,:,:)176 # endif 177 #if defined key_ldfslp 178 wslpi_tm (:,:,:) = wslpi_tm(:,:,:) + wslpi(:,:,:)179 wslpj_tm (:,:,:) = wslpj_tm(:,:,:) + wslpj(:,:,:)180 uslp_tm (:,:,:) = uslp_tm (:,:,:) + uslp(:,:,:)181 vslp_tm (:,:,:) = vslp_tm (:,:,:) + vslp (:,:,:)182 #endif 164 un_tm (:,:,:) = un_tm (:,:,:) + un (:,:,:) * e3u_n(:,:,:) 165 vn_tm (:,:,:) = vn_tm (:,:,:) + vn (:,:,:) * e3v_n(:,:,:) 166 tsn_tm (:,:,:,jp_tem) = tsn_tm (:,:,:,jp_tem) + tsn (:,:,:,jp_tem) * e3t_n(:,:,:) 167 tsn_tm (:,:,:,jp_sal) = tsn_tm (:,:,:,jp_sal) + tsn (:,:,:,jp_sal) * e3t_n(:,:,:) 168 rhop_tm (:,:,:) = rhop_tm (:,:,:) + rhop (:,:,:) * e3t_n(:,:,:) 169 avt_tm (:,:,:) = avt_tm (:,:,:) + avt (:,:,:) * e3w_n(:,:,:) 170 # if defined key_zdfddm 171 avs_tm (:,:,:) = avs_tm (:,:,:) + avs (:,:,:) * e3w_n(:,:,:) 172 # endif 173 IF( l_ldfslp ) THEN 174 uslp_tm (:,:,:) = uslp_tm (:,:,:) + uslp (:,:,:) 175 vslp_tm (:,:,:) = vslp_tm (:,:,:) + vslp (:,:,:) 176 wslpi_tm (:,:,:) = wslpi_tm(:,:,:) + wslpi(:,:,:) 177 wslpj_tm (:,:,:) = wslpj_tm(:,:,:) + wslpj(:,:,:) 178 ENDIF 183 179 # if defined key_trabbl 184 180 IF( nn_bbl_ldf == 1 ) THEN … … 245 241 DO jj = 1, jpj 246 242 DO ji = 1, jpi 247 z1_ne3t = r1_ndttrcp1 / fse3t(ji,jj,jk)248 z1_ne3u = r1_ndttrcp1 / fse3u(ji,jj,jk)249 z1_ne3v = r1_ndttrcp1 / fse3v(ji,jj,jk)250 z1_ne3w = r1_ndttrcp1 / fse3w(ji,jj,jk)243 z1_ne3t = r1_ndttrcp1 / e3t_n(ji,jj,jk) 244 z1_ne3u = r1_ndttrcp1 / e3u_n(ji,jj,jk) 245 z1_ne3v = r1_ndttrcp1 / e3v_n(ji,jj,jk) 246 z1_ne3w = r1_ndttrcp1 / e3w_n(ji,jj,jk) 251 247 ! 252 248 un (ji,jj,jk) = un_tm (ji,jj,jk) * z1_ne3u … … 255 251 tsn (ji,jj,jk,jp_sal) = tsn_tm (ji,jj,jk,jp_sal) * z1_ne3t 256 252 rhop (ji,jj,jk) = rhop_tm (ji,jj,jk) * z1_ne3t 253 !!gm : BUG? ==>> for avt & avs I don't understand the division by e3w 257 254 avt (ji,jj,jk) = avt_tm (ji,jj,jk) * z1_ne3w 258 255 # if defined key_zdfddm 259 256 avs (ji,jj,jk) = avs_tm (ji,jj,jk) * z1_ne3w 260 257 # endif 261 #if defined key_ldfslp 262 wslpi(ji,jj,jk) = wslpi_tm(ji,jj,jk)263 wslpj(ji,jj,jk) = wslpj_tm(ji,jj,jk)264 uslp (ji,jj,jk) = uslp_tm (ji,jj,jk)265 vslp (ji,jj,jk) = vslp_tm (ji,jj,jk)266 #endif 267 ENDDO268 ENDDO269 END DO258 END DO 259 END DO 260 END DO 261 IF( l_ldfslp ) THEN 262 wslpi(:,:,:) = wslpi_tm(:,:,:) 263 wslpj(:,:,:) = wslpj_tm(:,:,:) 264 uslp (:,:,:) = uslp_tm (:,:,:) 265 vslp (:,:,:) = vslp_tm (:,:,:) 266 ENDIF 270 267 ! 271 268 CALL trc_sub_ssh( kt ) ! after ssh & vertical velocity … … 276 273 ! 277 274 END SUBROUTINE trc_sub_stp 275 278 276 279 277 SUBROUTINE trc_sub_ini … … 299 297 IF( ierr /= 0 ) CALL ctl_stop( 'STOP', 'top_sub_alloc : unable to allocate standard ocean arrays' ) 300 298 301 un_tm (:,:,:) = un (:,:,:) * fse3u(:,:,:) 302 vn_tm (:,:,:) = vn (:,:,:) * fse3v(:,:,:) 303 tsn_tm (:,:,:,jp_tem) = tsn (:,:,:,jp_tem) * fse3t(:,:,:) 304 tsn_tm (:,:,:,jp_sal) = tsn (:,:,:,jp_sal) * fse3t(:,:,:) 305 rhop_tm (:,:,:) = rhop (:,:,:) * fse3t(:,:,:) 306 avt_tm (:,:,:) = avt (:,:,:) * fse3w(:,:,:) 307 # if defined key_zdfddm 308 avs_tm (:,:,:) = avs (:,:,:) * fse3w(:,:,:) 309 # endif 310 #if defined key_ldfslp 311 wslpi_tm(:,:,:) = wslpi(:,:,:) 312 wslpj_tm(:,:,:) = wslpj(:,:,:) 313 uslp_tm (:,:,:) = uslp (:,:,:) 314 vslp_tm (:,:,:) = vslp (:,:,:) 315 #endif 299 un_tm (:,:,:) = un (:,:,:) * e3u_n(:,:,:) 300 vn_tm (:,:,:) = vn (:,:,:) * e3v_n(:,:,:) 301 tsn_tm (:,:,:,jp_tem) = tsn (:,:,:,jp_tem) * e3t_n(:,:,:) 302 tsn_tm (:,:,:,jp_sal) = tsn (:,:,:,jp_sal) * e3t_n(:,:,:) 303 rhop_tm (:,:,:) = rhop (:,:,:) * e3t_n(:,:,:) 304 !!gm : BUG? ==>> for avt & avs I don't understand the division by e3w 305 avt_tm (:,:,:) = avt (:,:,:) * e3w_n(:,:,:) 306 # if defined key_zdfddm 307 avs_tm (:,:,:) = avs (:,:,:) * e3w_n(:,:,:) 308 # endif 309 IF( l_ldfslp ) THEN 310 wslpi_tm(:,:,:) = wslpi(:,:,:) 311 wslpj_tm(:,:,:) = wslpj(:,:,:) 312 uslp_tm (:,:,:) = uslp (:,:,:) 313 vslp_tm (:,:,:) = vslp (:,:,:) 314 ENDIF 316 315 sshn_tm (:,:) = sshn (:,:) 317 316 rnf_tm (:,:) = rnf (:,:) … … 365 364 avs (:,:,:) = avs_temp (:,:,:) 366 365 # endif 367 #if defined key_ldfslp 368 wslpi (:,:,:)= wslpi_temp (:,:,:)369 wslpj (:,:,:)= wslpj_temp (:,:,:)370 uslp (:,:,:)= uslp_temp (:,:,:)371 vslp (:,:,:)= vslp_temp (:,:,:)372 #endif 366 IF( l_ldfslp ) THEN 367 wslpi (:,:,:)= wslpi_temp (:,:,:) 368 wslpj (:,:,:)= wslpj_temp (:,:,:) 369 uslp (:,:,:)= uslp_temp (:,:,:) 370 vslp (:,:,:)= vslp_temp (:,:,:) 371 ENDIF 373 372 sshn (:,:) = sshn_temp (:,:) 374 373 sshb (:,:) = sshb_temp (:,:) … … 396 395 ! 397 396 hdivn (:,:,:) = hdivn_temp (:,:,:) 398 rotn (:,:,:) = rotn_temp (:,:,:)399 hdivb (:,:,:) = hdivb_temp (:,:,:)400 rotb (:,:,:) = rotb_temp (:,:,:)401 397 ! 402 403 398 ! Start new averages 404 un_tm (:,:,:) = un (:,:,:) * fse3u(:,:,:) 405 vn_tm (:,:,:) = vn (:,:,:) * fse3v(:,:,:) 406 tsn_tm (:,:,:,jp_tem) = tsn (:,:,:,jp_tem) * fse3t(:,:,:) 407 tsn_tm (:,:,:,jp_sal) = tsn (:,:,:,jp_sal) * fse3t(:,:,:) 408 rhop_tm (:,:,:) = rhop (:,:,:) * fse3t(:,:,:) 409 avt_tm (:,:,:) = avt (:,:,:) * fse3w(:,:,:) 410 # if defined key_zdfddm 411 avs_tm (:,:,:) = avs (:,:,:) * fse3w(:,:,:) 412 # endif 413 #if defined key_ldfslp 399 un_tm (:,:,:) = un (:,:,:) * e3u_n(:,:,:) 400 vn_tm (:,:,:) = vn (:,:,:) * e3v_n(:,:,:) 401 tsn_tm (:,:,:,jp_tem) = tsn (:,:,:,jp_tem) * e3t_n(:,:,:) 402 tsn_tm (:,:,:,jp_sal) = tsn (:,:,:,jp_sal) * e3t_n(:,:,:) 403 rhop_tm (:,:,:) = rhop (:,:,:) * e3t_n(:,:,:) 404 avt_tm (:,:,:) = avt (:,:,:) * e3w_n(:,:,:) 405 # if defined key_zdfddm 406 avs_tm (:,:,:) = avs (:,:,:) * e3w_n(:,:,:) 407 # endif 408 IF( l_ldfslp ) THEN 409 uslp_tm (:,:,:) = uslp (:,:,:) 410 vslp_tm (:,:,:) = vslp (:,:,:) 414 411 wslpi_tm(:,:,:) = wslpi(:,:,:) 415 412 wslpj_tm(:,:,:) = wslpj(:,:,:) 416 uslp_tm (:,:,:) = uslp (:,:,:) 417 vslp_tm (:,:,:) = vslp (:,:,:) 418 #endif 413 ENDIF 419 414 ! 420 415 sshb_hold (:,:) = sshn (:,:) … … 451 446 !! 452 447 !! ** Purpose : compute the after ssh (ssha), the now vertical velocity 453 !! and update the now vertical coordinate (l k_vvl=T).448 !! and update the now vertical coordinate (ln_linssh=F). 454 449 !! 455 450 !! ** Method : - Using the incompressibility hypothesis, the vertical … … 460 455 !! ** action : ssha : after sea surface height 461 456 !! wn : now vertical velocity 462 !! sshu_a, sshv_a, sshf_a : after sea surface height (l k_vvl=T)457 !! sshu_a, sshv_a, sshf_a : after sea surface height (ln_linssh=F) 463 458 !! 464 459 !! Reference : Leclair, M., and G. Madec, 2009, Ocean Modelling. 465 460 !!---------------------------------------------------------------------- 466 !467 461 INTEGER, INTENT(in) :: kt ! time step 468 462 ! … … 475 469 ! 476 470 ! Allocate temporary workspace 477 CALL wrk_alloc( jpi, jpj,zhdiv )471 CALL wrk_alloc( jpi,jpj, zhdiv ) 478 472 479 473 IF( kt == nittrc000 ) THEN … … 487 481 ENDIF 488 482 ! 489 CALL div_cur( kt ) ! Horizontal divergence & Relative vorticity 483 !!gm BUG here ! hdivn will include the runoff divergence at the wrong timestep !!!! 484 CALL div_hor( kt ) ! Horizontal divergence & Relative vorticity 490 485 ! 491 486 z2dt = 2._wp * rdt ! set time step size (Euler/Leapfrog) … … 497 492 zhdiv(:,:) = 0._wp 498 493 DO jk = 1, jpkm1 ! Horizontal divergence of barotropic transports 499 zhdiv(:,:) = zhdiv(:,:) + fse3t(:,:,jk) * hdivn(:,:,jk)494 zhdiv(:,:) = zhdiv(:,:) + e3t_n(:,:,jk) * hdivn(:,:,jk) 500 495 END DO 501 496 ! ! Sea surface elevation time stepping … … 515 510 #endif 516 511 #endif 517 518 512 ! 519 513 ! !------------------------------! 520 514 ! ! Now Vertical Velocity ! … … 522 516 z1_2dt = 1.e0 / z2dt 523 517 DO jk = jpkm1, 1, -1 ! integrate from the bottom the hor. divergence 524 ! - ML - need 3 lines here because replacement of fse3t by its expression yields too long lines otherwise525 wn(:,:,jk) = wn(:,:,jk+1) - fse3t_n(:,:,jk) * hdivn(:,:,jk) &526 & - ( fse3t_a(:,:,jk) - fse3t_b(:,:,jk) ) &518 ! - ML - need 3 lines here because replacement of e3t by its expression yields too long lines otherwise 519 wn(:,:,jk) = wn(:,:,jk+1) - e3t_n(:,:,jk) * hdivn(:,:,jk) & 520 & - ( e3t_a(:,:,jk) - e3t_b(:,:,jk) ) & 527 521 & * tmask(:,:,jk) * z1_2dt 528 522 #if defined key_bdy … … 530 524 #endif 531 525 END DO 532 533 ! 534 CALL wrk_dealloc( jpi, jpj, zhdiv ) 526 ! 527 CALL wrk_dealloc( jpi,jpj, zhdiv ) 535 528 ! 536 529 IF( nn_timing == 1 ) CALL timing_stop('trc_sub_ssh') 537 530 ! 538 531 END SUBROUTINE trc_sub_ssh 532 539 533 540 534 INTEGER FUNCTION trc_sub_alloc() … … 551 545 & sshn_temp(jpi,jpj) , sshb_temp(jpi,jpj) , & 552 546 & ssha_temp(jpi,jpj) , & 553 #if defined key_ldfslp554 & wslpi_temp(jpi,jpj,jpk) , wslpj_temp(jpi,jpj,jpk), &555 & uslp_temp(jpi,jpj,jpk) , vslp_temp(jpi,jpj,jpk), &556 #endif557 547 #if defined key_trabbl 558 548 & ahu_bbl_temp(jpi,jpj) , ahv_bbl_temp(jpi,jpj), & … … 569 559 # endif 570 560 & hdivn_temp(jpi,jpj,jpk) , hdivb_temp(jpi,jpj,jpk), & 571 & rotn_temp(jpi,jpj,jpk) , rotb_temp(jpi,jpj,jpk), &572 561 & un_tm(jpi,jpj,jpk) , vn_tm(jpi,jpj,jpk) , & 573 562 & avt_tm(jpi,jpj,jpk) , & … … 577 566 & emp_b_hold(jpi,jpj) , & 578 567 & hmld_tm(jpi,jpj) , qsr_tm(jpi,jpj) , & 579 #if defined key_ldfslp580 & wslpi_tm(jpi,jpj,jpk) , wslpj_tm(jpi,jpj,jpk), &581 & uslp_tm(jpi,jpj,jpk) , vslp_tm(jpi,jpj,jpk), &582 #endif583 568 #if defined key_trabbl 584 569 & ahu_bbl_tm(jpi,jpj) , ahv_bbl_tm(jpi,jpj), & 585 570 & utr_bbl_tm(jpi,jpj) , vtr_bbl_tm(jpi,jpj), & 586 571 #endif 587 & rnf_tm(jpi,jpj) , h_rnf_tm(jpi,jpj) , &588 & STAT=trc_sub_alloc )572 & rnf_tm(jpi,jpj) , h_rnf_tm(jpi,jpj) , STAT=trc_sub_alloc ) 573 ! 589 574 IF( trc_sub_alloc /= 0 ) CALL ctl_warn('trc_sub_alloc: failed to allocate arrays') 590 575 ! 576 IF( l_ldfslp ) THEN 577 ALLOCATE( uslp_temp(jpi,jpj,jpk) , wslpi_temp(jpi,jpj,jpk), & 578 & vslp_temp(jpi,jpj,jpk) , wslpj_temp(jpi,jpj,jpk), & 579 & uslp_tm (jpi,jpj,jpk) , wslpi_tm (jpi,jpj,jpk), & 580 & vslp_tm (jpi,jpj,jpk) , wslpj_tm (jpi,jpj,jpk), STAT=trc_sub_alloc ) 581 ENDIF 582 ! 583 IF( trc_sub_alloc /= 0 ) CALL ctl_warn('trc_sub_alloc: failed to allocate ldf_slp arrays') 591 584 ! 592 585 END FUNCTION trc_sub_alloc … … 603 596 WRITE(*,*) 'trc_sub_ini: You should not have seen this print! error?', kt 604 597 END SUBROUTINE trc_sub_ini 605 606 598 #endif 607 599
Note: See TracChangeset
for help on using the changeset viewer.