- Timestamp:
- 2016-06-28T11:53:56+02:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/DYN/dynnxt.F90
r6140 r6748 115 115 ! Ensure below that barotropic velocities match time splitting estimate 116 116 ! Compute actual transport and replace it with ts estimate at "after" time step 117 !$OMP PARALLEL WORKSHARE 117 118 zue(:,:) = e3u_a(:,:,1) * ua(:,:,1) * umask(:,:,1) 118 119 zve(:,:) = e3v_a(:,:,1) * va(:,:,1) * vmask(:,:,1) 120 !$OMP END PARALLEL WORKSHARE 119 121 DO jk = 2, jpkm1 120 122 zue(:,:) = zue(:,:) + e3u_a(:,:,jk) * ua(:,:,jk) * umask(:,:,jk) 121 123 zve(:,:) = zve(:,:) + e3v_a(:,:,jk) * va(:,:,jk) * vmask(:,:,jk) 122 124 END DO 125 !$OMP PARALLEL DO schedule(static) private(jk) 123 126 DO jk = 1, jpkm1 124 127 ua(:,:,jk) = ( ua(:,:,jk) - zue(:,:) * r1_hu_a(:,:) + ua_b(:,:) ) * umask(:,:,jk) … … 131 134 ! In the forward case, this is done below after asselin filtering 132 135 ! so that asselin contribution is removed at the same time 136 !$OMP PARALLEL DO schedule(static) private(jk) 133 137 DO jk = 1, jpkm1 134 138 un(:,:,jk) = ( un(:,:,jk) - un_adv(:,:) + un_b(:,:) )*umask(:,:,jk) … … 164 168 ! 165 169 IF( ln_dyn_trd ) THEN ! 3D output: total momentum trends 170 !$OMP PARALLEL WORKSHARE 166 171 zua(:,:,:) = ( ua(:,:,:) - ub(:,:,:) ) * z1_2dt 167 172 zva(:,:,:) = ( va(:,:,:) - vb(:,:,:) ) * z1_2dt 173 !$OMP END PARALLEL WORKSHARE 168 174 CALL iom_put( "utrd_tot", zua ) ! total momentum trends, except the asselin time filter 169 175 CALL iom_put( "vtrd_tot", zva ) 170 176 ENDIF 171 177 ! 178 !$OMP PARALLEL WORKSHARE 172 179 zua(:,:,:) = un(:,:,:) ! save the now velocity before the asselin filter 173 180 zva(:,:,:) = vn(:,:,:) ! (caution: there will be a shift by 1 timestep in the 181 !$OMP END PARALLEL WORKSHARE 174 182 ! ! computation of the asselin filter trends) 175 183 ENDIF … … 178 186 ! ------------------------------------------ 179 187 IF( neuler == 0 .AND. kt == nit000 ) THEN !* Euler at first time-step: only swap 188 !$OMP PARALLEL DO schedule(static) private(jk) 180 189 DO jk = 1, jpkm1 181 190 un(:,:,jk) = ua(:,:,jk) ! un <-- ua … … 183 192 END DO 184 193 IF(.NOT.ln_linssh ) THEN 194 !$OMP PARALLEL DO schedule(static) private(jk) 185 195 DO jk = 1, jpkm1 186 196 e3t_b(:,:,jk) = e3t_n(:,:,jk) … … 193 203 IF( ln_linssh ) THEN ! Fixed volume ! 194 204 ! ! =============! 205 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zuf, zvf) 195 206 DO jk = 1, jpkm1 196 207 DO jj = 1, jpj … … 215 226 e3t_b(:,:,1:jpkm1) = e3t_n(:,:,1:jpkm1) 216 227 ELSE 228 !$OMP PARALLEL DO schedule(static) private(jk) 217 229 DO jk = 1, jpkm1 218 230 e3t_b(:,:,jk) = e3t_n(:,:,jk) + atfp * ( e3t_b(:,:,jk) - 2._wp * e3t_n(:,:,jk) + e3t_a(:,:,jk) ) … … 240 252 CALL dom_vvl_interpol( e3t_b(:,:,:), e3u_b(:,:,:), 'U' ) 241 253 CALL dom_vvl_interpol( e3t_b(:,:,:), e3v_b(:,:,:), 'V' ) 254 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zuf, zvf) 242 255 DO jk = 1, jpkm1 243 256 DO jj = 1, jpj … … 260 273 CALL dom_vvl_interpol( e3t_b(:,:,:), ze3u_f, 'U' ) 261 274 CALL dom_vvl_interpol( e3t_b(:,:,:), ze3v_f, 'V' ) 275 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zue3a, zve3a, zue3n, zve3n, zue3b, zve3b, zuf, zvf) 262 276 DO jk = 1, jpkm1 263 277 DO jj = 1, jpj … … 297 311 zve(:,:) = zve(:,:) + e3v_b(:,:,jk) * vb(:,:,jk) * vmask(:,:,jk) 298 312 END DO 313 !$OMP PARALLEL DO schedule(static) private(jk) 299 314 DO jk = 1, jpkm1 300 315 ub(:,:,jk) = ub(:,:,jk) - (zue(:,:) * r1_hu_n(:,:) - un_b(:,:)) * umask(:,:,jk) … … 321 336 ENDIF 322 337 ! 338 !$OMP PARALLEL WORKSHARE 323 339 un_b(:,:) = e3u_a(:,:,1) * un(:,:,1) * umask(:,:,1) 324 340 ub_b(:,:) = e3u_b(:,:,1) * ub(:,:,1) * umask(:,:,1) 325 341 vn_b(:,:) = e3v_a(:,:,1) * vn(:,:,1) * vmask(:,:,1) 326 342 vb_b(:,:) = e3v_b(:,:,1) * vb(:,:,1) * vmask(:,:,1) 343 !$OMP END PARALLEL WORKSHARE 327 344 DO jk = 2, jpkm1 328 345 un_b(:,:) = un_b(:,:) + e3u_a(:,:,jk) * un(:,:,jk) * umask(:,:,jk) … … 331 348 vb_b(:,:) = vb_b(:,:) + e3v_b(:,:,jk) * vb(:,:,jk) * vmask(:,:,jk) 332 349 END DO 350 !$OMP PARALLEL WORKSHARE 333 351 un_b(:,:) = un_b(:,:) * r1_hu_a(:,:) 334 352 vn_b(:,:) = vn_b(:,:) * r1_hv_a(:,:) 335 353 ub_b(:,:) = ub_b(:,:) * r1_hu_b(:,:) 336 354 vb_b(:,:) = vb_b(:,:) * r1_hv_b(:,:) 355 !$OMP END PARALLEL WORKSHARE 337 356 ! 338 357 IF( .NOT.ln_dynspg_ts ) THEN ! output the barotropic currents … … 341 360 ENDIF 342 361 IF( l_trddyn ) THEN ! 3D output: asselin filter trends on momentum 362 !$OMP PARALLEL WORKSHARE 343 363 zua(:,:,:) = ( ub(:,:,:) - zua(:,:,:) ) * z1_2dt 344 364 zva(:,:,:) = ( vb(:,:,:) - zva(:,:,:) ) * z1_2dt 365 !$OMP END PARALLEL WORKSHARE 345 366 CALL trd_dyn( zua, zva, jpdyn_atf, kt ) 346 367 ENDIF
Note: See TracChangeset
for help on using the changeset viewer.