This subroutine writes to an output file all of the accelerations that have been applied to a column of zonal velocities over the previous timestep. This subroutine is called from vertvisc.
100 integer,
intent(in) :: i
101 integer,
intent(in) :: j
104 type(verticalgrid_type),
intent(in) :: gv
105 real,
dimension(SZIB_(G),SZJ_(G),SZK_(G)), &
107 real,
dimension(SZI_(G),SZJ_(G),SZK_(G)), &
109 type(accel_diag_ptrs),
intent(in) :: adp
111 type(cont_diag_ptrs),
intent(in) :: cdp
113 real,
intent(in) :: dt
114 type(pointaccel_cs),
pointer :: cs
116 real,
intent(in) :: maxvel, minvel
117 real,
optional,
intent(in) :: str
119 real,
dimension(SZIB_(G),SZK_(G)), &
120 optional,
intent(in) :: a
122 real,
dimension(SZIB_(G),SZK_(G)), &
123 optional,
intent(in) :: hv
152 real :: inorm(szk_(g))
154 integer :: yr, mo, day, hr, minute, sec, yearday
157 logical :: do_k(szk_(g)+1)
158 logical :: prev_avail
161 angstrom = gv%Angstrom + gv%H_subroundoff
165 if (cs%cols_written < cs%max_writes)
then 166 cs%cols_written = cs%cols_written + 1
172 if (cs%u_file < 0)
then 173 if (len_trim(cs%u_trunc_file) < 1)
return 174 call open_file(cs%u_file, trim(cs%u_trunc_file), action=append_file, &
175 form=ascii_file, threading=multiple, fileset=single_file)
176 if (cs%u_file < 0)
then 177 call mom_error(note,
'Unable to open file '//trim(cs%u_trunc_file)//
'.')
183 prev_avail = (
associated(cs%u_prev) .and.
associated(cs%v_prev))
187 if (((max(cs%u_av(i,j,k),um(i,j,k)) >= maxvel) .or. &
188 (min(cs%u_av(i,j,k),um(i,j,k)) <= minvel)) .and. &
189 ((hin(i,j,k) + hin(i+1,j,k)) > 3.0*angstrom))
exit 193 if (((max(cs%u_av(i,j,k), um(i,j,k)) >= maxvel) .or. &
194 (min(cs%u_av(i,j,k), um(i,j,k)) <= minvel)) .and. &
195 ((hin(i,j,k) + hin(i+1,j,k)) > 3.0*angstrom))
exit 199 ks = 1; ke = nz;
write(file,
'("U: Unable to set ks & ke.")')
202 call get_date(cs%Time, yr, mo, day, hr, minute, sec)
203 call get_time((cs%Time - set_date(yr, 1, 1, 0, 0, 0)), sec, yearday)
204 write (file,
'(/,"--------------------------")')
205 write (file,
'(/,"Time ",i5,i4,F6.2," U-velocity violation at ",I4,": ",2(I3), & 206 & " (",F7.2," E "F7.2," N) Layers ",I3," to ",I3,". dt = ",1PG10.4)') &
207 yr, yearday, (
REAL(sec)/3600.0), pe_here(), i, j, &
208 g%geoloncu(i,j), g%geolatcu(i,j), ks, ke, dt
210 if (ks <= gv%nk_rho_varies) ks = 1
212 if ((hin(i,j,k) + hin(i+1,j,k)) > 3.0*angstrom) do_k(k) = .true.
215 write(file,
'(/,"Layers:",$)')
216 do k=ks,ke ;
if (do_k(k))
write(file,
'(I10," ",$)') (k);
enddo 217 write(file,
'(/,"u(m): ",$)')
218 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') (um(i,j,k));
enddo 220 write(file,
'(/,"u(mp): ",$)')
221 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') (cs%u_prev(i,j,k));
enddo 223 write(file,
'(/,"u(3): ",$)')
224 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') (cs%u_av(i,j,k));
enddo 226 write(file,
'(/,"CFL u: ",$)')
227 do k=ks,ke ;
if (do_k(k))
then 228 cfl = abs(um(i,j,k)) * dt * g%dy_Cu(i,j)
229 if (um(i,j,k) < 0.0)
then ; cfl = cfl * g%IareaT(i+1,j)
230 else ; cfl = cfl * g%IareaT(i,j) ;
endif 231 write(file,
'(ES10.3," ",$)') cfl
233 write(file,
'(/,"CFL0 u:",$)')
234 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') &
235 abs(um(i,j,k)) * dt * g%IdxCu(i,j) ;
enddo 238 write(file,
'(/,"du: ",$)')
239 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') &
240 ((um(i,j,k)-cs%u_prev(i,j,k)));
enddo 242 write(file,
'(/,"CAu: ",$)')
243 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') (dt*adp%CAu(i,j,k));
enddo 244 write(file,
'(/,"PFu: ",$)')
245 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') (dt*adp%PFu(i,j,k));
enddo 246 write(file,
'(/,"diffu: ",$)')
247 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') (dt*adp%diffu(i,j,k));
enddo 249 if (
ASSOCIATED(adp%gradKEu))
then 250 write(file,
'(/,"KEu: ",$)')
251 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') &
252 (dt*adp%gradKEu(i,j,k));
enddo 254 if (
ASSOCIATED(adp%rv_x_v))
then 255 write(file,
'(/,"Coru: ",$)')
256 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') &
257 dt*(adp%CAu(i,j,k)-adp%rv_x_v(i,j,k));
enddo 259 if (
ASSOCIATED(adp%du_dt_visc))
then 260 write(file,
'(/,"ubv: ",$)')
261 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') &
262 (um(i,j,k)-dt*adp%du_dt_visc(i,j,k));
enddo 263 write(file,
'(/,"duv: ",$)')
264 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') &
265 (dt*adp%du_dt_visc(i,j,k));
enddo 267 if (
ASSOCIATED(adp%du_other))
then 268 write(file,
'(/,"du_other: ",$)')
269 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') &
270 (adp%du_other(i,j,k));
enddo 273 write(file,
'(/,"a: ",$)')
274 do k=ks,ke+1 ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') a(i,k);
enddo 276 if (
present(hv))
then 277 write(file,
'(/,"hvel: ",$)')
278 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') hv(i,k);
enddo 280 write(file,
'(/,"Stress: ",ES10.3)') str
282 if (
ASSOCIATED(cs%u_accel_bt))
then 283 write(file,
'("dubt: ",$)')
284 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') &
285 (dt*cs%u_accel_bt(i,j,k)) ;
enddo 289 write(file,
'(/,"h--: ",$)')
290 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') (hin(i,j-1,k));
enddo 291 write(file,
'(/,"h+-: ",$)')
292 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') (hin(i+1,j-1,k));
enddo 293 write(file,
'(/,"h-0: ",$)')
294 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') (hin(i,j,k));
enddo 295 write(file,
'(/,"h+0: ",$)')
296 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') (hin(i+1,j,k));
enddo 297 write(file,
'(/,"h-+: ",$)')
298 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') (hin(i,j+1,k));
enddo 299 write(file,
'(/,"h++: ",$)')
300 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') (hin(i+1,j+1,k));
enddo 303 e(nz+1) = -g%bathyT(i,j)
304 do k=nz,1,-1 ; e(k) = e(k+1) + hin(i,j,k) ;
enddo 305 write(file,
'(/,"e-: ",$)')
306 write(file,
'(ES10.3," ",$)') e(ks)
307 do k=ks+1,ke+1 ;
if (do_k(k-1))
write(file,
'(ES10.3," ",$)') e(k);
enddo 309 e(nz+1) = -g%bathyT(i+1,j)
310 do k=nz,1,-1 ; e(k) = e(k+1) + hin(i+1,j,k) ;
enddo 311 write(file,
'(/,"e+: ",$)')
312 write(file,
'(ES10.3," ",$)') e(ks)
313 do k=ks+1,ke+1 ;
if (do_k(k-1))
write(file,
'(ES10.3," ",$)') e(k) ;
enddo 314 if (
ASSOCIATED(cs%T))
then 315 write(file,
'(/,"T-: ",$)')
316 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') cs%T(i,j,k);
enddo 317 write(file,
'(/,"T+: ",$)')
318 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') cs%T(i+1,j,k);
enddo 320 if (
ASSOCIATED(cs%S))
then 321 write(file,
'(/,"S-: ",$)')
322 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') cs%S(i,j,k);
enddo 323 write(file,
'(/,"S+: ",$)')
324 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') cs%S(i+1,j,k);
enddo 328 write(file,
'(/,"v--: ",$)')
329 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') (cs%v_prev(i,j-1,k));
enddo 330 write(file,
'(/,"v-+: ",$)')
331 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') (cs%v_prev(i,j,k));
enddo 332 write(file,
'(/,"v+-: ",$)')
333 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') (cs%v_prev(i+1,j-1,k));
enddo 334 write(file,
'(/,"v++: ",$)')
335 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') (cs%v_prev(i+1,j,k));
enddo 338 write(file,
'(/,"vh--: ",$)')
339 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') &
340 (cdp%vh(i,j-1,k)*g%IdxCv(i,j-1));
enddo 341 write(file,
'(/," vhC--:",$)')
342 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') &
343 (0.5*cs%v_av(i,j-1,k)*(hin(i,j-1,k) + hin(i,j,k)));
enddo 345 write(file,
'(/," vhCp--:",$)')
346 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') &
347 (0.5*cs%v_prev(i,j-1,k)*(hin(i,j-1,k) + hin(i,j,k)));
enddo 350 write(file,
'(/,"vh-+: ",$)')
351 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') &
352 (cdp%vh(i,j,k)*g%IdxCv(i,j));
enddo 353 write(file,
'(/," vhC-+:",$)')
354 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') &
355 (0.5*cs%v_av(i,j,k)*(hin(i,j,k) + hin(i,j+1,k)));
enddo 357 write(file,
'(/," vhCp-+:",$)')
358 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') &
359 (0.5*cs%v_prev(i,j,k)*(hin(i,j,k) + hin(i,j+1,k)));
enddo 362 write(file,
'(/,"vh+-: ",$)')
363 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') &
364 (cdp%vh(i+1,j-1,k)*g%IdxCv(i+1,j-1));
enddo 365 write(file,
'(/," vhC+-:",$)')
366 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') &
367 (0.5*cs%v_av(i+1,j-1,k)*(hin(i+1,j-1,k) + hin(i+1,j,k)));
enddo 369 write(file,
'(/," vhCp+-:",$)')
370 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') &
371 (0.5*cs%v_prev(i+1,j-1,k)*(hin(i+1,j-1,k) + hin(i+1,j,k)));
enddo 374 write(file,
'(/,"vh++: ",$)')
375 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') &
376 (cdp%vh(i+1,j,k)*g%IdxCv(i+1,j));
enddo 377 write(file,
'(/," vhC++:",$)')
378 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') &
379 (0.5*cs%v_av(i+1,j,k)*(hin(i+1,j,k) + hin(i+1,j+1,k)));
enddo 381 write(file,
'(/," vhCp++:",$)')
382 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') &
383 (0.5*cs%v_av(i+1,j,k)*(hin(i+1,j,k) + hin(i+1,j+1,k)));
enddo 386 write(file,
'(/,"D: ",2(ES10.3))') g%bathyT(i,j),g%bathyT(i+1,j)
391 du = um(i,j,k)-cs%u_prev(i,j,k)
392 if (abs(du) < 1.0e-6) du = 1.0e-6
396 write(file,
'(2/,"Norm: ",$)')
397 do k=ks,ke ;
if (do_k(k))
write(file,
'(F10.6," ",$)') (1.0/inorm(k));
enddo 399 write(file,
'(/,"du: ",$)')
400 do k=ks,ke ;
if (do_k(k))
write(file,
'(F10.6," ",$)') &
401 ((um(i,j,k)-cs%u_prev(i,j,k))*inorm(k));
enddo 403 write(file,
'(/,"CAu: ",$)')
404 do k=ks,ke ;
if (do_k(k))
write(file,
'(F10.6," ",$)') &
405 (dt*adp%CAu(i,j,k)*inorm(k));
enddo 407 write(file,
'(/,"PFu: ",$)')
408 do k=ks,ke ;
if (do_k(k))
write(file,
'(F10.6," ",$)') &
409 (dt*adp%PFu(i,j,k)*inorm(k));
enddo 411 write(file,
'(/,"diffu: ",$)')
412 do k=ks,ke ;
if (do_k(k))
write(file,
'(F10.6," ",$)') &
413 (dt*adp%diffu(i,j,k)*inorm(k));
enddo 415 if (
ASSOCIATED(adp%gradKEu))
then 416 write(file,
'(/,"KEu: ",$)')
417 do k=ks,ke ;
if (do_k(k))
write(file,
'(F10.6," ",$)') &
418 (dt*adp%gradKEu(i,j,k)*inorm(k));
enddo 420 if (
ASSOCIATED(adp%rv_x_v))
then 421 write(file,
'(/,"Coru: ",$)')
422 do k=ks,ke ;
if (do_k(k))
write(file,
'(F10.6," ",$)') &
423 dt*(adp%CAu(i,j,k)-adp%rv_x_v(i,j,k))*inorm(k);
enddo 425 if (
ASSOCIATED(adp%du_dt_visc))
then 426 write(file,
'(/,"duv: ",$)')
427 do k=ks,ke ;
if (do_k(k))
write(file,
'(F10.6," ",$)') &
428 (dt*adp%du_dt_visc(i,j,k))*inorm(k);
enddo 430 if (
ASSOCIATED(adp%du_other))
then 431 write(file,
'(/,"du_other: ",$)')
432 do k=ks,ke ;
if (do_k(k))
write(file,
'(F10.6," ",$)') &
433 (adp%du_other(i,j,k))*inorm(k);
enddo 435 if (
ASSOCIATED(cs%u_accel_bt))
then 436 write(file,
'(/,"dubt: ",$)')
437 do k=ks,ke ;
if (do_k(k))
write(file,
'(F10.6," ",$)') &
438 (dt*cs%u_accel_bt(i,j,k)*inorm(k)) ;
enddo Ocean grid type. See mom_grid for details.