Changeset 503 for trunk/NEMO/OPA_SRC/DYN/dynzdf_imp.F90
- Timestamp:
- 2006-09-27T10:52:29+02:00 (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/OPA_SRC/DYN/dynzdf_imp.F90
r455 r503 4 4 !! Ocean dynamics: vertical component(s) of the momentum mixing trend 5 5 !!============================================================================== 6 !! History : ! 90-10 (B. Blanke) Original code 7 !! ! 97-05 (G. Madec) vertical component of isopycnal 8 !! 8.5 ! 02-08 (G. Madec) F90: Free form and module 9 !!---------------------------------------------------------------------- 6 10 7 11 !!---------------------------------------------------------------------- … … 11 15 !! OPA 9.0 , LOCEAN-IPSL (2005) 12 16 !! $Header$ 13 !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt17 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 14 18 !!---------------------------------------------------------------------- 15 19 !! * Modules used … … 20 24 USE in_out_manager ! I/O manager 21 25 USE taumod ! surface ocean stress 22 USE prtctl ! Print control23 26 24 27 IMPLICIT NONE … … 40 43 41 44 42 SUBROUTINE dyn_zdf_imp( kt )45 SUBROUTINE dyn_zdf_imp( kt, p2dt ) 43 46 !!---------------------------------------------------------------------- 44 47 !! *** ROUTINE dyn_zdf_imp *** … … 58 61 !! ** Action : - Update (ua,va) arrays with the after vertical diffusive 59 62 !! mixing trend. 60 !!61 !! History :62 !! ! 90-10 (B. Blanke) Original code63 !! ! 97-05 (G. Madec) vertical component of isopycnal64 !! 8.5 ! 02-08 (G. Madec) F90: Free form and module65 !! 9.0 ! 04-08 (C. Talandier) New trends organization66 63 !!--------------------------------------------------------------------- 67 64 !! * Modules used 68 USE oce, ONLY : zwd => ta, & ! use ta as workspace69 zws => sa ! use sa as workspace65 USE oce, ONLY : zwd => ta, & ! use ta as workspace 66 zws => sa ! use sa as workspace 70 67 71 68 !! * Arguments 72 INTEGER, INTENT( in ) :: kt ! ocean time-step index 69 INTEGER , INTENT( in ) :: kt ! ocean time-step index 70 REAL(wp), INTENT( in ) :: p2dt ! vertical profile of tracer time-step 73 71 74 72 !! * Local declarations 75 INTEGER :: ji, jj, jk ! dummy loop indices 76 REAL(wp) :: & 77 zrau0r, z2dt, & ! temporary scalars 78 z2dtf, zcoef, zzws, zrhs ! " " 79 REAL(wp), DIMENSION(jpi,jpj,jpk) :: & 80 zwi ! temporary workspace arrays 73 INTEGER :: ji, jj, jk ! dummy loop indices 74 REAL(wp) :: zrau0r, z2dtf, zcoef, zzws, zrhs ! temporary scalars 75 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zwi ! temporary workspace arrays 81 76 !!---------------------------------------------------------------------- 82 77 … … 90 85 ! -------------------------------- 91 86 zrau0r = 1. / rau0 ! inverse of the reference density 92 z2dt = 2. * rdt ! Leap-frog environnement93 94 ! Euler time stepping when starting from rest95 IF( neuler == 0 .AND. kt == nit000 ) z2dt = rdt96 87 97 88 ! 1. Vertical diffusion on u … … 104 95 DO jj = 2, jpjm1 105 96 DO ji = fs_2, fs_jpim1 ! vector opt. 106 zcoef = - z2dt / fse3u(ji,jj,jk)97 zcoef = - p2dt / fse3u(ji,jj,jk) 107 98 zwi(ji,jj,jk) = zcoef * avmu(ji,jj,jk ) / fse3uw(ji,jj,jk ) 108 99 zzws = zcoef * avmu(ji,jj,jk+1) / fse3uw(ji,jj,jk+1) … … 150 141 !!! change les resultats (derniers digit, pas significativement + rapide 1* de moins) 151 142 !!! ua(ji,jj,1) = ub(ji,jj,1) & 152 !!! + z2dt * ( ua(ji,jj,1) + taux(ji,jj) / ( fse3u(ji,jj,1)*rau0 ) )153 z2dtf = z2dt / ( fse3u(ji,jj,1)*rau0 )143 !!! + p2dt * ( ua(ji,jj,1) + taux(ji,jj) / ( fse3u(ji,jj,1)*rau0 ) ) 144 z2dtf = p2dt / ( fse3u(ji,jj,1)*rau0 ) 154 145 ua(ji,jj,1) = ub(ji,jj,1) & 155 + z2dt * ua(ji,jj,1) + z2dtf * taux(ji,jj)156 END DO 157 END DO 158 DO jk = 2, jpkm1 159 DO jj = 2, jpjm1 160 DO ji = fs_2, fs_jpim1 ! vector opt. 161 zrhs = ub(ji,jj,jk) + z2dt * ua(ji,jj,jk) ! zrhs=right hand side146 + p2dt * ua(ji,jj,1) + z2dtf * taux(ji,jj) 147 END DO 148 END DO 149 DO jk = 2, jpkm1 150 DO jj = 2, jpjm1 151 DO ji = fs_2, fs_jpim1 ! vector opt. 152 zrhs = ub(ji,jj,jk) + p2dt * ua(ji,jj,jk) ! zrhs=right hand side 162 153 ua(ji,jj,jk) = zrhs - zwi(ji,jj,jk) / zwd(ji,jj,jk-1) * ua(ji,jj,jk-1) 163 154 END DO … … 183 174 DO jj = 2, jpjm1 184 175 DO ji = fs_2, fs_jpim1 ! vector opt. 185 ua(ji,jj,jk) = ( ua(ji,jj,jk) - ub(ji,jj,jk) ) / z2dt176 ua(ji,jj,jk) = ( ua(ji,jj,jk) - ub(ji,jj,jk) ) / p2dt 186 177 END DO 187 178 END DO … … 198 189 DO jj = 2, jpjm1 199 190 DO ji = fs_2, fs_jpim1 ! vector opt. 200 zcoef = - z2dt / fse3v(ji,jj,jk)191 zcoef = -p2dt / fse3v(ji,jj,jk) 201 192 zwi(ji,jj,jk) = zcoef * avmv(ji,jj,jk ) / fse3vw(ji,jj,jk ) 202 193 zzws = zcoef * avmv(ji,jj,jk+1) / fse3vw(ji,jj,jk+1) … … 245 236 !!! change les resultats (derniers digit, pas significativement + rapide 1* de moins) 246 237 !!! va(ji,jj,1) = vb(ji,jj,1) & 247 !!! + z2dt * ( va(ji,jj,1) + tauy(ji,jj) / ( fse3v(ji,jj,1)*rau0 ) )248 z2dtf = z2dt / ( fse3v(ji,jj,1)*rau0 )238 !!! + p2dt * ( va(ji,jj,1) + tauy(ji,jj) / ( fse3v(ji,jj,1)*rau0 ) ) 239 z2dtf = p2dt / ( fse3v(ji,jj,1)*rau0 ) 249 240 va(ji,jj,1) = vb(ji,jj,1) & 250 + z2dt * va(ji,jj,1) + z2dtf * tauy(ji,jj)241 + p2dt * va(ji,jj,1) + z2dtf * tauy(ji,jj) 251 242 END DO 252 243 END DO … … 254 245 DO jj = 2, jpjm1 255 246 DO ji = fs_2, fs_jpim1 ! vector opt. 256 zrhs = vb(ji,jj,jk) + z2dt * va(ji,jj,jk) ! zrhs=right hand side247 zrhs = vb(ji,jj,jk) + p2dt * va(ji,jj,jk) ! zrhs=right hand side 257 248 va(ji,jj,jk) = zrhs - zwi(ji,jj,jk) / zwd(ji,jj,jk-1) * va(ji,jj,jk-1) 258 249 END DO … … 274 265 END DO 275 266 276 ! flux de surface doit etre calcule dans trdmod et boootom stress277 ! deduit par integration verticale dans trmod pour jpdtdzdf278 !RB IF( l_trddyn ) THEN279 ! ! diagnose surface and bottom momentum fluxes280 ! DO jj = 2, jpjm1281 ! DO ji = fs_2, fs_jpim1 ! vector opt.282 ! ! save the surface forcing momentum fluxes283 ! ztsy(ji,jj) = tauy(ji,jj) / ( fse3v(ji,jj,1)*rau0 )284 ! ztsx(ji,jj) = taux(ji,jj) / ( fse3u(ji,jj,1)*rau0 )285 ! ! save bottom friction momentum fluxes286 ! ikbv = MIN( mbathy(ji,jj+1), mbathy(ji,jj) )287 ! ikbvm1 = MAX( ikbv-1, 1 )288 ! ztby(ji,jj) = - avmv(ji,jj,ikbv) * va(ji,jj,ikbvm1) &289 ! / ( fse3v(ji,jj,ikbvm1)*fse3vw(ji,jj,ikbv) )290 ! ! subtract surface forcing and bottom friction trend from vertical291 ! ! diffusive momentum trend292 ! ztdva(ji,jj,1 ) = ztdva(ji,jj,1 ) - ztsy(ji,jj)293 ! ztdva(ji,jj,ikbvm1) = ztdva(ji,jj,ikbvm1) - ztby(ji,jj)294 ! END DO295 ! END DO296 ! ENDIF297 298 267 ! Normalization to obtain the general momentum trend va 299 268 DO jk = 1, jpkm1 300 269 DO jj = 2, jpjm1 301 270 DO ji = fs_2, fs_jpim1 ! vector opt. 302 va(ji,jj,jk) = ( va(ji,jj,jk) - vb(ji,jj,jk) ) / z2dt271 va(ji,jj,jk) = ( va(ji,jj,jk) - vb(ji,jj,jk) ) / p2dt 303 272 END DO 304 273 END DO
Note: See TracChangeset
for help on using the changeset viewer.