Changeset 14072 for NEMO/trunk/src/OCE/DYN
- Timestamp:
- 2020-12-04T08:48:38+01:00 (4 years ago)
- Location:
- NEMO/trunk/src/OCE/DYN
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/trunk/src/OCE/DYN/dynatf.F90
r13472 r14072 13 13 !! - ! 2002-10 (C. Talandier, A-M. Treguier) Open boundary cond. 14 14 !! 2.0 ! 2005-11 (V. Garnier) Surface pressure gradient organization 15 !! 2.3 ! 2007-07 (D. Storkey) Calls to BDY routines. 15 !! 2.3 ! 2007-07 (D. Storkey) Calls to BDY routines. 16 16 !! 3.2 ! 2009-06 (G. Madec, R.Benshila) re-introduce the vvl option 17 17 !! 3.3 ! 2010-09 (D. Storkey, E.O'Dea) Bug fix for BDY module … … 22 22 !! 4.1 ! 2019-08 (A. Coward, D. Storkey) Rename dynnxt.F90 -> dynatf.F90. Now just does time filtering. 23 23 !!------------------------------------------------------------------------- 24 24 25 25 !!---------------------------------------------------------------------------------------------- 26 26 !! dyn_atf : apply Asselin time filtering to "now" velocities and vertical scale factors … … 42 42 USE trdken ! trend manager: kinetic energy 43 43 USE isf_oce , ONLY: ln_isf ! ice shelf 44 USE isfdynatf , ONLY: isf_dynatf ! ice shelf volume filter correction subroutine 44 USE isfdynatf , ONLY: isf_dynatf ! ice shelf volume filter correction subroutine 45 45 ! 46 46 USE in_out_manager ! I/O manager … … 81 81 !!---------------------------------------------------------------------- 82 82 !! NEMO/OCE 4.0 , NEMO Consortium (2018) 83 !! $Id$ 83 !! $Id$ 84 84 !! Software governed by the CeCILL license (see ./LICENSE) 85 85 !!---------------------------------------------------------------------- … … 89 89 !!---------------------------------------------------------------------- 90 90 !! *** ROUTINE dyn_atf *** 91 !! 92 !! ** Purpose : Finalize after horizontal velocity. Apply the boundary 91 !! 92 !! ** Purpose : Finalize after horizontal velocity. Apply the boundary 93 93 !! condition on the after velocity and apply the Asselin time 94 94 !! filter to the now fields. … … 97 97 !! estimate (ln_dynspg_ts=T) 98 98 !! 99 !! * Apply lateral boundary conditions on after velocity 99 !! * Apply lateral boundary conditions on after velocity 100 100 !! at the local domain boundaries through lbc_lnk call, 101 101 !! at the one-way open boundaries (ln_bdy=T), … … 104 104 !! * Apply the Asselin time filter to the now fields 105 105 !! arrays to start the next time step: 106 !! (puu(Kmm),pvv(Kmm)) = (puu(Kmm),pvv(Kmm)) 106 !! (puu(Kmm),pvv(Kmm)) = (puu(Kmm),pvv(Kmm)) 107 107 !! + rn_atfp [ (puu(Kbb),pvv(Kbb)) + (puu(Kaa),pvv(Kaa)) - 2 (puu(Kmm),pvv(Kmm)) ] 108 108 !! Note that with flux form advection and non linear free surface, … … 110 110 !! As a result, dyn_atf MUST be called after tra_atf. 111 111 !! 112 !! ** Action : puu(Kmm),pvv(Kmm) filtered now horizontal velocity 112 !! ** Action : puu(Kmm),pvv(Kmm) filtered now horizontal velocity 113 113 !!---------------------------------------------------------------------- 114 114 INTEGER , INTENT(in ) :: kt ! ocean time-step index … … 122 122 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zue, zve, zwfld 123 123 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zutau, zvtau 124 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: ze3t_f, ze3u_f, ze3v_f, zua, zva 124 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: ze3t_f, ze3u_f, ze3v_f, zua, zva 125 125 !!---------------------------------------------------------------------- 126 126 ! … … 150 150 ! 151 151 IF( .NOT.ln_bt_fw ) THEN 152 ! Remove advective velocity from "now velocities" 153 ! prior to asselin filtering 154 ! In the forward case, this is done below after asselin filtering 155 ! so that asselin contribution is removed at the same time 152 ! Remove advective velocity from "now velocities" 153 ! prior to asselin filtering 154 ! In the forward case, this is done below after asselin filtering 155 ! so that asselin contribution is removed at the same time 156 156 DO jk = 1, jpkm1 157 157 puu(:,:,jk,Kmm) = ( puu(:,:,jk,Kmm) - un_adv(:,:)*r1_hu(:,:,Kmm) + uu_b(:,:,Kmm) )*umask(:,:,jk) 158 158 pvv(:,:,jk,Kmm) = ( pvv(:,:,jk,Kmm) - vn_adv(:,:)*r1_hv(:,:,Kmm) + vv_b(:,:,Kmm) )*vmask(:,:,jk) 159 END DO 159 END DO 160 160 ENDIF 161 161 ENDIF 162 162 163 163 ! Update after velocity on domain lateral boundaries 164 ! -------------------------------------------------- 164 ! -------------------------------------------------- 165 165 # if defined key_agrif 166 166 CALL Agrif_dyn( kt ) !* AGRIF zoom boundaries … … 194 194 ! Time filter and swap of dynamics arrays 195 195 ! ------------------------------------------ 196 197 IF( .NOT. l_1st_euler ) THEN !* Leap-Frog : Asselin time filter 196 197 IF( .NOT. l_1st_euler ) THEN !* Leap-Frog : Asselin time filter 198 198 ! ! =============! 199 199 IF( ln_linssh ) THEN ! Fixed volume ! … … 220 220 DO jk = 1, jpkm1 221 221 ze3t_f(:,:,jk) = ze3t_f(:,:,jk) - zcoef * zwfld(:,:) * tmask(:,:,jk) & 222 & * pe3t(:,:,jk,Kmm) / ( ht(:,:) + 1._wp - ssmask(:,:) ) 222 & * pe3t(:,:,jk,Kmm) / ( ht(:,:) + 1._wp - ssmask(:,:) ) 223 223 END DO 224 224 ! … … 257 257 pvv(ji,jj,jk,Kmm) = ( zve3n + rn_atfp * ( zve3b - 2._wp * zve3n + zve3a ) ) / ze3v_f(ji,jj,jk) 258 258 END_3D 259 pe3u(:,:,1:jpkm1,Kmm) = ze3u_f(:,:,1:jpkm1) 259 pe3u(:,:,1:jpkm1,Kmm) = ze3u_f(:,:,1:jpkm1) 260 260 pe3v(:,:,1:jpkm1,Kmm) = ze3v_f(:,:,1:jpkm1) 261 261 ! … … 268 268 IF( ln_dynspg_ts .AND. ln_bt_fw ) THEN 269 269 ! Revert filtered "now" velocities to time split estimate 270 ! Doing it here also means that asselin filter contribution is removed 270 ! Doing it here also means that asselin filter contribution is removed 271 271 zue(:,:) = pe3u(:,:,1,Kmm) * puu(:,:,1,Kmm) * umask(:,:,1) 272 zve(:,:) = pe3v(:,:,1,Kmm) * pvv(:,:,1,Kmm) * vmask(:,:,1) 272 zve(:,:) = pe3v(:,:,1,Kmm) * pvv(:,:,1,Kmm) * vmask(:,:,1) 273 273 DO jk = 2, jpkm1 274 274 zue(:,:) = zue(:,:) + pe3u(:,:,jk,Kmm) * puu(:,:,jk,Kmm) * umask(:,:,jk) 275 zve(:,:) = zve(:,:) + pe3v(:,:,jk,Kmm) * pvv(:,:,jk,Kmm) * vmask(:,:,jk) 275 zve(:,:) = zve(:,:) + pe3v(:,:,jk,Kmm) * pvv(:,:,jk,Kmm) * vmask(:,:,jk) 276 276 END DO 277 277 DO jk = 1, jpkm1 … … 325 325 IF ( iom_use("utau") ) THEN 326 326 IF ( ln_drgice_imp.OR.ln_isfcav ) THEN 327 ALLOCATE(zutau(jpi,jpj)) 327 ALLOCATE(zutau(jpi,jpj)) 328 328 DO_2D( 0, 0, 0, 0 ) 329 jk = miku(ji,jj) 329 jk = miku(ji,jj) 330 330 zutau(ji,jj) = utau(ji,jj) + 0.5_wp * rho0 * ( rCdU_top(ji+1,jj)+rCdU_top(ji,jj) ) * puu(ji,jj,jk,Kaa) 331 331 END_2D … … 353 353 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1=puu(:,:,:,Kaa), clinfo1=' nxt - puu(:,:,:,Kaa): ', mask1=umask, & 354 354 & tab3d_2=pvv(:,:,:,Kaa), clinfo2=' pvv(:,:,:,Kaa): ' , mask2=vmask ) 355 ! 355 ! 356 356 IF( ln_dynspg_ts ) DEALLOCATE( zue, zve ) 357 357 IF( l_trddyn ) DEALLOCATE( zua, zva ) -
NEMO/trunk/src/OCE/DYN/dynspg.F90
r14064 r14072 11 11 12 12 !!---------------------------------------------------------------------- 13 !! dyn_spg : update the dynamics trend with surface pressure gradient 13 !! dyn_spg : update the dynamics trend with surface pressure gradient 14 14 !! dyn_spg_init: initialization, namelist read, and parameters control 15 15 !!---------------------------------------------------------------------- … … 39 39 PUBLIC dyn_spg_init ! routine called by opa module 40 40 41 INTEGER :: nspg = 0 ! type of surface pressure gradient scheme defined from lk_dynspg_... 41 INTEGER :: nspg = 0 ! type of surface pressure gradient scheme defined from lk_dynspg_... 42 42 43 43 ! ! Parameter to control the surface pressure gradient scheme … … 52 52 !!---------------------------------------------------------------------- 53 53 !! NEMO/OCE 4.0 , NEMO Consortium (2018) 54 !! $Id$ 54 !! $Id$ 55 55 !! Software governed by the CeCILL license (see ./LICENSE) 56 56 !!---------------------------------------------------------------------- … … 61 61 !! *** ROUTINE dyn_spg *** 62 62 !! 63 !! ** Purpose : compute surface pressure gradient including the 63 !! ** Purpose : compute surface pressure gradient including the 64 64 !! atmospheric pressure forcing (ln_apr_dyn=T). 65 65 !! … … 68 68 !! - split-explicit : a time splitting technique is used 69 69 !! 70 !! ln_apr_dyn=T : the atmospheric pressure forcing is applied 70 !! ln_apr_dyn=T : the atmospheric pressure forcing is applied 71 71 !! as the gradient of the inverse barometer ssh: 72 72 !! apgu = - 1/rho0 di[apr] = 0.5*grav di[ssh_ib+ssh_ibb] … … 90 90 ! 91 91 IF( l_trddyn ) THEN ! temporary save of ta and sa trends 92 ALLOCATE( ztrdu(jpi,jpj,jpk) , ztrdv(jpi,jpj,jpk) ) 92 ALLOCATE( ztrdu(jpi,jpj,jpk) , ztrdv(jpi,jpj,jpk) ) 93 93 ztrdu(:,:,:) = puu(:,:,:,Krhs) 94 94 ztrdv(:,:,:) = pvv(:,:,:,Krhs) … … 144 144 zpgv(ji,jj) = zpgv(ji,jj) + ( zpice(ji,jj+1) - zpice(ji,jj) ) * r1_e2v(ji,jj) 145 145 END_2D 146 DEALLOCATE( zpice ) 146 DEALLOCATE( zpice ) 147 147 ENDIF 148 148 ! … … 160 160 ! 161 161 !!gm add here a call to dyn_trd for ice pressure gradient, the surf pressure trends ???? 162 ! 162 ! 163 163 ENDIF 164 164 ! … … 167 167 CASE ( np_TS ) ; CALL dyn_spg_ts ( kt, Kbb, Kmm, Krhs, puu, pvv, pssh, puu_b, pvv_b, Kaa ) ! time-splitting 168 168 END SELECT 169 ! 169 ! 170 170 IF( l_trddyn ) THEN ! save the surface pressure gradient trends for further diagnostics 171 171 ztrdu(:,:,:) = puu(:,:,:,Krhs) - ztrdu(:,:,:) 172 172 ztrdv(:,:,:) = pvv(:,:,:,Krhs) - ztrdv(:,:,:) 173 173 CALL trd_dyn( ztrdu, ztrdv, jpdyn_spg, kt, Kmm ) 174 DEALLOCATE( ztrdu , ztrdv ) 174 DEALLOCATE( ztrdu , ztrdv ) 175 175 ENDIF 176 176 ! ! print mean trends (used for debugging) … … 186 186 !!--------------------------------------------------------------------- 187 187 !! *** ROUTINE dyn_spg_init *** 188 !! 189 !! ** Purpose : Control the consistency between namelist options for 188 !! 189 !! ** Purpose : Control the consistency between namelist options for 190 190 !! surface pressure gradient schemes 191 191 !!---------------------------------------------------------------------- -
NEMO/trunk/src/OCE/DYN/dynvor.F90
r14053 r14072 15 15 !! 3.2 ! 2009-04 (R. Benshila) vvl: correction of een scheme 16 16 !! 3.3 ! 2010-10 (C. Ethe, G. Madec) reorganisation of initialisation phase 17 !! 3.7 ! 2014-04 (G. Madec) trend simplification: suppress jpdyn_trd_dat vorticity 17 !! 3.7 ! 2014-04 (G. Madec) trend simplification: suppress jpdyn_trd_dat vorticity 18 18 !! - ! 2014-06 (G. Madec) suppression of velocity curl from in-core memory 19 19 !! - ! 2016-12 (G. Madec, E. Clementi) add Stokes-Coriolis trends (ln_stcor=T) … … 74 74 INTEGER, PUBLIC, PARAMETER :: np_MIX = 5 ! MIX scheme 75 75 76 INTEGER :: ncor, nrvm, ntot ! choice of calculated vorticity 76 INTEGER :: ncor, nrvm, ntot ! choice of calculated vorticity 77 77 ! ! associated indices: 78 78 INTEGER, PUBLIC, PARAMETER :: np_COR = 1 ! Coriolis (planetary) … … 83 83 84 84 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: di_e2u_2 ! = di(e2u)/2 used in T-point metric term calculation 85 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: dj_e1v_2 ! = dj(e1v)/2 - - - - 85 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: dj_e1v_2 ! = dj(e1v)/2 - - - - 86 86 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: di_e2v_2e1e2f ! = di(e2u)/(2*e1e2f) used in F-point metric term calculation 87 87 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: dj_e1u_2e1e2f ! = dj(e1v)/(2*e1e2f) - - - - 88 88 ! 89 89 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: e3f_0vor ! e3f used in EEN, ENE and ENS cases (key_qco only) 90 90 91 91 REAL(wp) :: r1_4 = 0.250_wp ! =1/4 92 92 REAL(wp) :: r1_8 = 0.125_wp ! =1/8 93 93 REAL(wp) :: r1_12 = 1._wp / 12._wp ! 1/12 94 94 95 95 !! * Substitutions 96 96 # include "do_loop_substitute.h90" … … 111 111 !! ** Action : - Update (puu(:,:,:,Krhs),pvv(:,:,:,Krhs)) with the now vorticity term trend 112 112 !! - save the trends in (ztrdu,ztrdv) in 2 parts (relative 113 !! and planetary vorticity trends) and send them to trd_dyn 113 !! and planetary vorticity trends) and send them to trd_dyn 114 114 !! for futher diagnostics (l_trddyn=T) 115 115 !!---------------------------------------------------------------------- … … 163 163 CALL vor_enT( kt, Kmm, ntot, puu(:,:,:,Kmm) , pvv(:,:,:,Kmm) , puu(:,:,:,Krhs), pvv(:,:,:,Krhs) ) ! total vorticity trend 164 164 IF( ln_stcor .AND. .NOT. ln_vortex_force ) THEN 165 CALL vor_enT( kt, Kmm, ncor, usd, vsd, puu(:,:,:,Krhs), pvv(:,:,:,Krhs) ) ! add the Stokes-Coriolis trend 165 CALL vor_enT( kt, Kmm, ncor, usd, vsd, puu(:,:,:,Krhs), pvv(:,:,:,Krhs) ) ! add the Stokes-Coriolis trend 166 166 ELSE IF( ln_stcor .AND. ln_vortex_force ) THEN 167 167 CALL vor_enT( kt, Kmm, ntot, usd, vsd, puu(:,:,:,Krhs), pvv(:,:,:,Krhs) ) ! add the Stokes-Coriolis trend and vortex force … … 218 218 !! *** ROUTINE vor_enT *** 219 219 !! 220 !! ** Purpose : Compute the now total vorticity trend and add it to 220 !! ** Purpose : Compute the now total vorticity trend and add it to 221 221 !! the general trend of the momentum equation. 222 222 !! 223 !! ** Method : Trend evaluated using now fields (centered in time) 223 !! ** Method : Trend evaluated using now fields (centered in time) 224 224 !! and t-point evaluation of vorticity (planetary and relative). 225 225 !! conserves the horizontal kinetic energy. 226 !! The general trend of momentum is increased due to the vorticity 226 !! The general trend of momentum is increased due to the vorticity 227 227 !! term which is given by: 228 228 !! voru = 1/bu mj[ ( mi(mj(bf*rvor))+bt*f_t)/e3t mj[vn] ] … … 260 260 & - e1u(ji,jj+1) * pu(ji,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk) ) * r1_e1e2f(ji,jj) 261 261 END_2D 262 IF( ln_dynvor_msk ) THEN ! mask relative vorticity 262 IF( ln_dynvor_msk ) THEN ! mask relative vorticity 263 263 DO_2D( 1, 0, 1, 0 ) 264 264 zwz(ji,jj,jk) = zwz(ji,jj,jk) * fmask(ji,jj,jk) … … 314 314 ! 315 315 pv_rhs(ji,jj,jk) = pv_rhs(ji,jj,jk) - r1_4 * r1_e1e2v(ji,jj) / e3v(ji,jj,jk,Kmm) & 316 & * ( zwt(ji,jj+1) * ( pu(ji,jj+1,jk) + pu(ji-1,jj+1,jk) ) & 317 & + zwt(ji,jj ) * ( pu(ji,jj ,jk) + pu(ji-1,jj ,jk) ) ) 316 & * ( zwt(ji,jj+1) * ( pu(ji,jj+1,jk) + pu(ji-1,jj+1,jk) ) & 317 & + zwt(ji,jj ) * ( pu(ji,jj ,jk) + pu(ji-1,jj ,jk) ) ) 318 318 END_2D 319 319 ! ! =============== … … 332 332 !! *** ROUTINE vor_ene *** 333 333 !! 334 !! ** Purpose : Compute the now total vorticity trend and add it to 334 !! ** Purpose : Compute the now total vorticity trend and add it to 335 335 !! the general trend of the momentum equation. 336 336 !! 337 !! ** Method : Trend evaluated using now fields (centered in time) 337 !! ** Method : Trend evaluated using now fields (centered in time) 338 338 !! and the Sadourny (1975) flux form formulation : conserves the 339 339 !! horizontal kinetic energy. 340 !! The general trend of momentum is increased due to the vorticity 340 !! The general trend of momentum is increased due to the vorticity 341 341 !! term which is given by: 342 342 !! voru = 1/e1u mj-1[ (rvor+f)/e3f mi(e1v*e3v pvv(:,:,:,Kmm)) ] … … 371 371 SELECT CASE( kvor ) !== vorticity considered ==! 372 372 CASE ( np_COR ) !* Coriolis (planetary vorticity) 373 zwz(:,:) = ff_f(:,:) 373 zwz(:,:) = ff_f(:,:) 374 374 CASE ( np_RVO ) !* relative vorticity 375 375 DO_2D( 1, 0, 1, 0 ) … … 447 447 zx2 = zwx(ji ,jj) + zwx(ji ,jj+1) 448 448 pu_rhs(ji,jj,jk) = pu_rhs(ji,jj,jk) + r1_4 * r1_e1u(ji,jj) * ( zwz(ji ,jj-1) * zy1 + zwz(ji,jj) * zy2 ) 449 pv_rhs(ji,jj,jk) = pv_rhs(ji,jj,jk) - r1_4 * r1_e2v(ji,jj) * ( zwz(ji-1,jj ) * zx1 + zwz(ji,jj) * zx2 ) 449 pv_rhs(ji,jj,jk) = pv_rhs(ji,jj,jk) - r1_4 * r1_e2v(ji,jj) * ( zwz(ji-1,jj ) * zx1 + zwz(ji,jj) * zx2 ) 450 450 END_2D 451 451 ! ! =============== … … 497 497 SELECT CASE( kvor ) !== vorticity considered ==! 498 498 CASE ( np_COR ) !* Coriolis (planetary vorticity) 499 zwz(:,:) = ff_f(:,:) 499 zwz(:,:) = ff_f(:,:) 500 500 CASE ( np_RVO ) !* relative vorticity 501 501 DO_2D( 1, 0, 1, 0 ) … … 586 586 !! *** ROUTINE vor_een *** 587 587 !! 588 !! ** Purpose : Compute the now total vorticity trend and add it to 588 !! ** Purpose : Compute the now total vorticity trend and add it to 589 589 !! the general trend of the momentum equation. 590 590 !! 591 !! ** Method : Trend evaluated using now fields (centered in time) 592 !! and the Arakawa and Lamb (1980) flux form formulation : conserves 591 !! ** Method : Trend evaluated using now fields (centered in time) 592 !! and the Arakawa and Lamb (1980) flux form formulation : conserves 593 593 !! both the horizontal kinetic energy and the potential enstrophy 594 594 !! when horizontal divergence is zero (see the NEMO documentation) … … 684 684 IF( ln_dynvor_msk ) THEN ! mask the relative vorticity 685 685 DO_2D( 1, 0, 1, 0 ) 686 zwz(ji,jj,jk) = ( zwz(ji,jj,jk) - ff_f(ji,jj) ) * fmask(ji,jj,jk) + ff_f(ji,jj) 686 zwz(ji,jj,jk) = ( zwz(ji,jj,jk) - ff_f(ji,jj) ) * fmask(ji,jj,jk) + ff_f(ji,jj) 687 687 END_2D 688 688 ENDIF … … 735 735 !! *** ROUTINE vor_eeT *** 736 736 !! 737 !! ** Purpose : Compute the now total vorticity trend and add it to 737 !! ** Purpose : Compute the now total vorticity trend and add it to 738 738 !! the general trend of the momentum equation. 739 739 !! 740 !! ** Method : Trend evaluated using now fields (centered in time) 741 !! and the Arakawa and Lamb (1980) vector form formulation using 740 !! ** Method : Trend evaluated using now fields (centered in time) 741 !! and the Arakawa and Lamb (1980) vector form formulation using 742 742 !! a modified version of Arakawa and Lamb (1980) scheme (see vor_een). 743 !! The change consists in 743 !! The change consists in 744 744 !! Add this trend to the general momentum trend (pu_rhs,pv_rhs). 745 745 !! … … 758 758 REAL(wp) :: zua, zva ! local scalars 759 759 REAL(wp) :: zmsk, z1_e3t ! local scalars 760 REAL(wp), DIMENSION(jpi,jpj) :: zwx , zwy 760 REAL(wp), DIMENSION(jpi,jpj) :: zwx , zwy 761 761 REAL(wp), DIMENSION(jpi,jpj) :: ztnw, ztne, ztsw, ztse 762 762 REAL(wp), DIMENSION(jpi,jpj,jpkm1) :: zwz ! 3D workspace, avoid lbc_lnk on jpk that is not defined … … 803 803 IF( ln_dynvor_msk ) THEN ! mask the relative vorticity 804 804 DO_2D( 1, 0, 1, 0 ) 805 zwz(ji,jj,jk) = ( zwz(ji,jj,jk) - ff_f(ji,jj) ) * fmask(ji,jj,jk) + ff_f(ji,jj) 805 zwz(ji,jj,jk) = ( zwz(ji,jj,jk) - ff_f(ji,jj) ) * fmask(ji,jj,jk) + ff_f(ji,jj) 806 806 END_2D 807 807 ENDIF … … 916 916 ! 917 917 IF( ioptio /= 1 ) CALL ctl_stop( ' use ONE and ONLY one vorticity scheme' ) 918 ! 918 ! 919 919 IF(lwp) WRITE(numout,*) ! type of calculated vorticity (set ncor, nrvm, ntot) 920 920 ncor = np_COR ! planetary vorticity … … 925 925 ntot = np_COR ! - - 926 926 CASE( np_VEC_c2 ) 927 IF(lwp) WRITE(numout,*) ' ==>>> vector form dynamics : total vorticity = Coriolis + relative vorticity' 927 IF(lwp) WRITE(numout,*) ' ==>>> vector form dynamics : total vorticity = Coriolis + relative vorticity' 928 928 nrvm = np_RVO ! relative vorticity 929 ntot = np_CRV ! relative + planetary vorticity 929 ntot = np_CRV ! relative + planetary vorticity 930 930 CASE( np_FLX_c2 , np_FLX_ubs ) 931 931 IF(lwp) WRITE(numout,*) ' ==>>> flux form dynamics : total vorticity = Coriolis + metric term' … … 971 971 & + tmask(ji,jj ,jk) +tmask(ji+1,jj ,jk) ) 972 972 ! 973 IF( zmsk /= 0._wp ) THEN 973 IF( zmsk /= 0._wp ) THEN 974 974 e3f_0vor(ji,jj,jk) = ( e3t_0(ji ,jj+1,jk)*tmask(ji ,jj+1,jk) & 975 975 & + e3t_0(ji+1,jj+1,jk)*tmask(ji+1,jj+1,jk) & … … 997 997 CASE( np_EEN ) ; WRITE(numout,*) ' ==>>> energy and enstrophy conserving scheme (EEN)' 998 998 CASE( np_MIX ) ; WRITE(numout,*) ' ==>>> mixed enstrophy/energy conserving scheme (MIX)' 999 END SELECT 999 END SELECT 1000 1000 ENDIF 1001 1001 ! -
NEMO/trunk/src/OCE/DYN/dynzad.F90
r14007 r14072 7 7 !! NEMO 0.5 ! 2002-07 (G. Madec) Free form, F90 8 8 !!---------------------------------------------------------------------- 9 9 10 10 !!---------------------------------------------------------------------- 11 11 !! dyn_zad : vertical advection momentum trend … … 25 25 IMPLICIT NONE 26 26 PRIVATE 27 27 28 28 PUBLIC dyn_zad ! routine called by dynadv.F90 29 29 … … 41 41 !!---------------------------------------------------------------------- 42 42 !! *** ROUTINE dynzad *** 43 !! 44 !! ** Purpose : Compute the now vertical momentum advection trend and 43 !! 44 !! ** Purpose : Compute the now vertical momentum advection trend and 45 45 !! add it to the general trend of momentum equation. 46 46 !! … … 73 73 74 74 IF( l_trddyn ) THEN ! Save puu(:,:,:,Krhs) and pvv(:,:,:,Krhs) trends 75 ALLOCATE( ztrdu(jpi,jpj,jpk) , ztrdv(jpi,jpj,jpk) ) 76 ztrdu(:,:,:) = puu(:,:,:,Krhs) 77 ztrdv(:,:,:) = pvv(:,:,:,Krhs) 75 ALLOCATE( ztrdu(jpi,jpj,jpk) , ztrdv(jpi,jpj,jpk) ) 76 ztrdu(:,:,:) = puu(:,:,:,Krhs) 77 ztrdv(:,:,:) = pvv(:,:,:,Krhs) 78 78 ENDIF 79 79 80 80 DO jk = 2, jpkm1 ! Vertical momentum advection at level w and u- and v- vertical 81 81 DO_2D( 0, 1, 0, 1 ) ! vertical fluxes … … 111 111 ztrdv(:,:,:) = pvv(:,:,:,Krhs) - ztrdv(:,:,:) 112 112 CALL trd_dyn( ztrdu, ztrdv, jpdyn_zad, kt, Kmm ) 113 DEALLOCATE( ztrdu, ztrdv ) 113 DEALLOCATE( ztrdu, ztrdv ) 114 114 ENDIF 115 115 ! ! Control print
Note: See TracChangeset
for help on using the changeset viewer.