- Timestamp:
- 2019-11-20T10:47:16+01:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/UKMO/NEMO_4.0.1_momentum_trends/src/OCE/DYN/dynspg_ts.F90
r11715 r11934 63 63 USE restart ! only for lrst_oce 64 64 USE diatmb ! Top,middle,bottom output 65 USE trd_oce ! trends: ocean variables 66 USE trddyn ! trend manager: dynamics 65 67 66 68 USE iom ! to remove … … 170 172 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: ztwdmask, zuwdmask, zvwdmask ! ROMS wetting and drying masks at t,u,v points 171 173 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zuwdav2, zvwdav2 ! averages over the sub-steps of zuwdmask and zvwdmask 174 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zspgtrdu, zspgtrdv, zpvotrdu, zpvotrdv ! SPG and PVO trends (if l_trddyn) 175 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: ztautrdu, ztautrdv, zbfrtrdu, zbfrtrdv ! TAU and BFR trends (if l_trddyn) 172 176 !!---------------------------------------------------------------------- 173 177 ! … … 175 179 ! !* Allocate temporary arrays 176 180 IF( ln_wd_dl ) ALLOCATE( ztwdmask(jpi,jpj), zuwdmask(jpi,jpj), zvwdmask(jpi,jpj), zuwdav2(jpi,jpj), zvwdav2(jpi,jpj)) 181 ! 182 IF( l_trddyn ) THEN 183 ALLOCATE( zspgtrdu(jpi,jpj), zspgtrdv(jpi,jpj), zpvotrdu(jpi,jpj), zpvotrdv(jpi,jpj), & 184 & ztautrdu(jpi,jpj), ztautrdv(jpi,jpj), zbfrtrdu(jpi,jpj), zbfrtrdv(jpi,jpj) ) 185 zspgtrdu(:,:) = 0._wp 186 zspgtrdv(:,:) = 0._wp 187 zpvotrdu(:,:) = 0._wp 188 zpvotrdv(:,:) = 0._wp 189 ztautrdu(:,:) = 0._wp 190 ztautrdv(:,:) = 0._wp 191 zbfrtrdu(:,:) = 0._wp 192 zbfrtrdv(:,:) = 0._wp 193 ENDIF 194 ! 195 zu_trd(:,:) = 0._wp 196 zv_trd(:,:) = 0._wp 197 zu_spg(:,:) = 0._wp 198 zv_spg(:,:) = 0._wp 177 199 ! 178 200 zmdi=1.e+20 ! missing data indicator for masking … … 253 275 & zu_trd, zv_trd ) ! ==>> out 254 276 ! 277 IF( l_trddyn ) THEN 278 ! send correction to baroclinic planetary vorticity trend to trd_dyn 279 CALL trd_dyn( zu_trd, zv_trd, jpdyn_pvo_corr, kt ) 280 ENDIF 281 ! 255 282 IF( .NOT.ln_linssh ) THEN !* surface pressure gradient (variable volume only) 283 ! 284 IF( l_trddyn ) THEN 285 zspgtrdu(:,:) = zu_trd(:,:) 286 zspgtrdv(:,:) = zv_trd(:,:) 287 ENDIF 256 288 ! 257 289 IF( ln_wd_il ) THEN ! W/D : limiter applied to spgspg … … 274 306 ENDIF 275 307 ! 308 IF( l_trddyn ) THEN 309 zspgtrdu(:,:) = zu_trd(:,:) - zspgtrdu(:,:) 310 zspgtrdv(:,:) = zv_trd(:,:) - zspgtrdv(:,:) 311 ! send correction to HPG trend to trd_dyn 312 CALL trd_dyn( zspgtrdu, zspgtrdv, jpdyn_hpg_corr, kt ) 313 ! reset temporary arrays for use later 314 zspgtrdu(:,:) = 0._wp 315 zspgtrdv(:,:) = 0._wp 316 ENDIF 317 ! 276 318 ENDIF 277 319 ! … … 283 325 END DO 284 326 ! 327 IF( l_trddyn ) THEN 328 zbfrtrdu(:,:) = zu_frc(:,:) 329 zbfrtrdv(:,:) = zv_frc(:,:) 330 ENDIF 285 331 ! != Add bottom stress contribution from baroclinic velocities =! 286 332 ! ! ----------------------------------------------------------- ! 287 333 CALL dyn_drg_init( zu_frc, zv_frc, zCdU_u, zCdU_v ) ! also provide the barotropic drag coefficients 334 ! 335 IF( l_trddyn ) THEN 336 ! bottom friction trend diagnostic: bottom friction due to baroclinic currents 337 zbfrtrdu(:,:) = zu_frc(:,:) - zbfrtrdu(:,:) 338 zbfrtrdv(:,:) = zv_frc(:,:) - zbfrtrdv(:,:) 339 ENDIF 288 340 ! 289 341 ! != Add atmospheric pressure forcing =! … … 312 364 ! != Add atmospheric pressure forcing =! 313 365 ! ! ---------------------------------- ! 366 IF( l_trddyn ) THEN 367 ztautrdu(:,:) = zu_frc(:,:) 368 ztautrdv(:,:) = zv_frc(:,:) 369 ENDIF 370 ! 314 371 IF( ln_bt_fw ) THEN ! Add wind forcing 315 372 DO jj = 2, jpjm1 … … 329 386 ENDIF 330 387 ! 388 IF( l_trddyn ) THEN 389 ! wind stress trend diagnostic 390 ztautrdu(:,:) = zu_frc(:,:) - ztautrdu(:,:) 391 ztautrdv(:,:) = zv_frc(:,:) - ztautrdv(:,:) 392 ENDIF 331 393 ! !----------------! 332 394 ! !== sssh_frc ==! Right-Hand-Side of the barotropic ssh equation (over the FULL domain) … … 591 653 ENDIF 592 654 ! 655 IF( l_trddyn ) THEN 656 za2 = wgtbtp2(jn) 657 zspgtrdu(:,:) = zspgtrdu(:,:) + za2 * zu_spg(:,:) * ssumask(:,:) 658 zspgtrdv(:,:) = zspgtrdv(:,:) + za2 * zv_spg(:,:) * ssvmask(:,:) 659 ENDIF 660 ! 593 661 ! Add Coriolis trend: 594 662 ! zwz array below or triads normally depend on sea level with ln_linssh=F and should be updated … … 596 664 ! Recall that zhU and zhV hold fluxes at jn+0.5 (extrapolated not backward interpolated) 597 665 CALL dyn_cor_2d( zhup2_e, zhvp2_e, ua_e, va_e, zhU, zhV, zu_trd, zv_trd ) 666 ! 667 IF( l_trddyn ) THEN 668 za2 = wgtbtp2(jn) 669 zpvotrdu(:,:) = zpvotrdu(:,:) + za2 * zu_trd(:,:) * ssumask(:,:) 670 zpvotrdv(:,:) = zpvotrdv(:,:) + za2 * zv_trd(:,:) * ssvmask(:,:) 671 ENDIF 598 672 ! 599 673 ! Add tidal astronomical forcing if defined … … 616 690 END DO 617 691 END DO 692 IF( l_trddyn ) THEN 693 za2 = wgtbtp2(jn) 694 zbfrtrdu(:,:) = zbfrtrdu(:,:) + za2 * zCdU_u(:,:) * un_e(:,:) * hur_e(:,:) 695 zbfrtrdv(:,:) = zbfrtrdv(:,:) + za2 * zCdU_v(:,:) * vn_e(:,:) * hvr_e(:,:) 696 ENDIF 618 697 ENDIF 619 698 ! … … 835 914 IF( ln_wd_il ) DEALLOCATE( zcpx, zcpy ) 836 915 IF( ln_wd_dl ) DEALLOCATE( ztwdmask, zuwdmask, zvwdmask, zuwdav2, zvwdav2 ) 916 ! 917 IF( l_trddyn ) THEN 918 CALL trd_dyn( zspgtrdu, zspgtrdv, jpdyn_spg, kt ) 919 CALL trd_dyn( zpvotrdu, zpvotrdv, jpdyn_pvo, kt ) 920 CALL trd_dyn( ztautrdu, ztautrdv, jpdyn_tau, kt ) 921 CALL trd_dyn( zbfrtrdu, zbfrtrdv, jpdyn_bfr, kt ) 922 DEALLOCATE( zspgtrdu, zspgtrdv, zpvotrdu, zpvotrdv, ztautrdu, ztautrdv, zbfrtrdu, zbfrtrdv ) 923 ENDIF 837 924 ! 838 925 IF( ln_diatmb ) THEN
Note: See TracChangeset
for help on using the changeset viewer.