Changeset 14789 for NEMO/branches/2021/dev_r13747_HPC-11_mcastril_HPDAonline_DiagGPU/src/OCE/DYN/dynatf.F90
- Timestamp:
- 2021-05-05T13:18:04+02:00 (3 years ago)
- Location:
- NEMO/branches/2021/dev_r13747_HPC-11_mcastril_HPDAonline_DiagGPU
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2021/dev_r13747_HPC-11_mcastril_HPDAonline_DiagGPU
- Property svn:externals
-
old new 3 3 ^/utils/build/mk@HEAD mk 4 4 ^/utils/tools@HEAD tools 5 ^/vendors/AGRIF/dev _r12970_AGRIF_CMEMSext/AGRIF5 ^/vendors/AGRIF/dev@HEAD ext/AGRIF 6 6 ^/vendors/FCM@HEAD ext/FCM 7 7 ^/vendors/IOIPSL@HEAD ext/IOIPSL 8 ^/vendors/PPR@HEAD ext/PPR 8 9 9 10 # SETTE 10 ^/utils/CI/sette@1 3559sette11 ^/utils/CI/sette@14244 sette
-
- Property svn:externals
-
NEMO/branches/2021/dev_r13747_HPC-11_mcastril_HPDAonline_DiagGPU/src/OCE/DYN/dynatf.F90
r13472 r14789 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 … … 60 60 PUBLIC dyn_atf ! routine called by step.F90 61 61 62 #if defined key_qco 62 #if defined key_qco || defined key_linssh 63 63 !!---------------------------------------------------------------------- 64 !! 'key_qco' EMPTY ROUTINE Quasi-Eulerian vertical coordonate 64 !! 'key_qco' Quasi-Eulerian vertical coordinate 65 !! OR EMPTY MODULE 66 !! 'key_linssh' Fix in time vertical coordinate 65 67 !!---------------------------------------------------------------------- 66 68 CONTAINS 67 69 68 SUBROUTINE dyn_atf 70 SUBROUTINE dyn_atf( kt, Kbb, Kmm, Kaa, puu, pvv, pe3t, pe3u, pe3v ) 69 71 INTEGER , INTENT(in ) :: kt ! ocean time-step index 70 72 INTEGER , INTENT(in ) :: Kbb, Kmm, Kaa ! before and after time level indices … … 81 83 !!---------------------------------------------------------------------- 82 84 !! NEMO/OCE 4.0 , NEMO Consortium (2018) 83 !! $Id$ 85 !! $Id$ 84 86 !! Software governed by the CeCILL license (see ./LICENSE) 85 87 !!---------------------------------------------------------------------- … … 89 91 !!---------------------------------------------------------------------- 90 92 !! *** ROUTINE dyn_atf *** 91 !! 92 !! ** Purpose : Finalize after horizontal velocity. Apply the boundary 93 !! 94 !! ** Purpose : Finalize after horizontal velocity. Apply the boundary 93 95 !! condition on the after velocity and apply the Asselin time 94 96 !! filter to the now fields. … … 97 99 !! estimate (ln_dynspg_ts=T) 98 100 !! 99 !! * Apply lateral boundary conditions on after velocity 101 !! * Apply lateral boundary conditions on after velocity 100 102 !! at the local domain boundaries through lbc_lnk call, 101 103 !! at the one-way open boundaries (ln_bdy=T), … … 104 106 !! * Apply the Asselin time filter to the now fields 105 107 !! arrays to start the next time step: 106 !! (puu(Kmm),pvv(Kmm)) = (puu(Kmm),pvv(Kmm)) 108 !! (puu(Kmm),pvv(Kmm)) = (puu(Kmm),pvv(Kmm)) 107 109 !! + rn_atfp [ (puu(Kbb),pvv(Kbb)) + (puu(Kaa),pvv(Kaa)) - 2 (puu(Kmm),pvv(Kmm)) ] 108 110 !! Note that with flux form advection and non linear free surface, … … 110 112 !! As a result, dyn_atf MUST be called after tra_atf. 111 113 !! 112 !! ** Action : puu(Kmm),pvv(Kmm) filtered now horizontal velocity 114 !! ** Action : puu(Kmm),pvv(Kmm) filtered now horizontal velocity 113 115 !!---------------------------------------------------------------------- 114 116 INTEGER , INTENT(in ) :: kt ! ocean time-step index … … 119 121 INTEGER :: ji, jj, jk ! dummy loop indices 120 122 REAL(wp) :: zue3a, zue3n, zue3b, zcoef ! local scalars 121 REAL(wp) :: zve3a, zve3n, zve3b , z1_2dt! - -123 REAL(wp) :: zve3a, zve3n, zve3b ! - - 122 124 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zue, zve, zwfld 123 125 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zutau, zvtau 124 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: ze3t_f, ze3u_f, ze3v_f, zua, zva 126 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: ze3t_f, ze3u_f, ze3v_f, zua, zva 125 127 !!---------------------------------------------------------------------- 126 128 ! … … 150 152 ! 151 153 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 154 ! Remove advective velocity from "now velocities" 155 ! prior to asselin filtering 156 ! In the forward case, this is done below after asselin filtering 157 ! so that asselin contribution is removed at the same time 156 158 DO jk = 1, jpkm1 157 159 puu(:,:,jk,Kmm) = ( puu(:,:,jk,Kmm) - un_adv(:,:)*r1_hu(:,:,Kmm) + uu_b(:,:,Kmm) )*umask(:,:,jk) 158 160 pvv(:,:,jk,Kmm) = ( pvv(:,:,jk,Kmm) - vn_adv(:,:)*r1_hv(:,:,Kmm) + vv_b(:,:,Kmm) )*vmask(:,:,jk) 159 END DO 161 END DO 160 162 ENDIF 161 163 ENDIF 162 164 163 165 ! Update after velocity on domain lateral boundaries 164 ! -------------------------------------------------- 166 ! -------------------------------------------------- 165 167 # if defined key_agrif 166 168 CALL Agrif_dyn( kt ) !* AGRIF zoom boundaries 167 169 # endif 168 170 ! 169 CALL lbc_lnk _multi( 'dynatf', puu(:,:,:,Kaa), 'U', -1.0_wp, pvv(:,:,:,Kaa), 'V', -1.0_wp ) !* local domain boundaries171 CALL lbc_lnk( 'dynatf', puu(:,:,:,Kaa), 'U', -1.0_wp, pvv(:,:,:,Kaa), 'V', -1.0_wp ) !* local domain boundaries 170 172 ! 171 173 ! !* BDY open boundaries … … 194 196 ! Time filter and swap of dynamics arrays 195 197 ! ------------------------------------------ 196 197 IF( .NOT. l_1st_euler ) THEN !* Leap-Frog : Asselin time filter 198 199 IF( .NOT. l_1st_euler ) THEN !* Leap-Frog : Asselin time filter 198 200 ! ! =============! 199 201 IF( ln_linssh ) THEN ! Fixed volume ! … … 220 222 DO jk = 1, jpkm1 221 223 ze3t_f(:,:,jk) = ze3t_f(:,:,jk) - zcoef * zwfld(:,:) * tmask(:,:,jk) & 222 & * pe3t(:,:,jk,Kmm) / ( ht(:,:) + 1._wp - ssmask(:,:) ) 224 & * pe3t(:,:,jk,Kmm) / ( ht(:,:) + 1._wp - ssmask(:,:) ) 223 225 END DO 224 226 ! … … 257 259 pvv(ji,jj,jk,Kmm) = ( zve3n + rn_atfp * ( zve3b - 2._wp * zve3n + zve3a ) ) / ze3v_f(ji,jj,jk) 258 260 END_3D 259 pe3u(:,:,1:jpkm1,Kmm) = ze3u_f(:,:,1:jpkm1) 261 pe3u(:,:,1:jpkm1,Kmm) = ze3u_f(:,:,1:jpkm1) 260 262 pe3v(:,:,1:jpkm1,Kmm) = ze3v_f(:,:,1:jpkm1) 261 263 ! … … 268 270 IF( ln_dynspg_ts .AND. ln_bt_fw ) THEN 269 271 ! Revert filtered "now" velocities to time split estimate 270 ! Doing it here also means that asselin filter contribution is removed 272 ! Doing it here also means that asselin filter contribution is removed 271 273 zue(:,:) = pe3u(:,:,1,Kmm) * puu(:,:,1,Kmm) * umask(:,:,1) 272 zve(:,:) = pe3v(:,:,1,Kmm) * pvv(:,:,1,Kmm) * vmask(:,:,1) 274 zve(:,:) = pe3v(:,:,1,Kmm) * pvv(:,:,1,Kmm) * vmask(:,:,1) 273 275 DO jk = 2, jpkm1 274 276 zue(:,:) = zue(:,:) + pe3u(:,:,jk,Kmm) * puu(:,:,jk,Kmm) * umask(:,:,jk) 275 zve(:,:) = zve(:,:) + pe3v(:,:,jk,Kmm) * pvv(:,:,jk,Kmm) * vmask(:,:,jk) 277 zve(:,:) = zve(:,:) + pe3v(:,:,jk,Kmm) * pvv(:,:,jk,Kmm) * vmask(:,:,jk) 276 278 END DO 277 279 DO jk = 1, jpkm1 … … 318 320 ENDIF 319 321 IF( l_trddyn ) THEN ! 3D output: asselin filter trends on momentum 320 zua(:,:,:) = ( puu(:,:,:,Kmm) - zua(:,:,:) ) * z1_2dt321 zva(:,:,:) = ( pvv(:,:,:,Kmm) - zva(:,:,:) ) * z1_2dt322 zua(:,:,:) = ( puu(:,:,:,Kmm) - zua(:,:,:) ) * r1_Dt 323 zva(:,:,:) = ( pvv(:,:,:,Kmm) - zva(:,:,:) ) * r1_Dt 322 324 CALL trd_dyn( zua, zva, jpdyn_atf, kt, Kmm ) 323 325 ENDIF … … 325 327 IF ( iom_use("utau") ) THEN 326 328 IF ( ln_drgice_imp.OR.ln_isfcav ) THEN 327 ALLOCATE(zutau(jpi,jpj)) 329 ALLOCATE(zutau(jpi,jpj)) 328 330 DO_2D( 0, 0, 0, 0 ) 329 jk = miku(ji,jj) 331 jk = miku(ji,jj) 330 332 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 333 END_2D … … 353 355 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1=puu(:,:,:,Kaa), clinfo1=' nxt - puu(:,:,:,Kaa): ', mask1=umask, & 354 356 & tab3d_2=pvv(:,:,:,Kaa), clinfo2=' pvv(:,:,:,Kaa): ' , mask2=vmask ) 355 ! 357 ! 356 358 IF( ln_dynspg_ts ) DEALLOCATE( zue, zve ) 357 359 IF( l_trddyn ) DEALLOCATE( zua, zva )
Note: See TracChangeset
for help on using the changeset viewer.