52 use mom_io, only : open_file
53 use mom_io, only : append_file, ascii_file, multiple, single_file
54 use mom_time_manager, only : time_type, get_time, get_date, set_date,
operator(-)
58 implicit none ;
private 60 #include <MOM_memory.h> 65 character(len=200) :: u_trunc_file
66 character(len=200) :: v_trunc_file
68 integer :: u_file, v_file
70 integer :: cols_written
74 type(time_type),
pointer :: time
80 real,
pointer,
dimension(:,:,:) :: &
81 u_av => null(), v_av => null(), &
82 u_prev => null(), v_prev => null(), &
83 t => null(), s => null(), &
88 u_accel_bt => null(), &
98 subroutine write_u_accel(I, j, um, hin, ADp, CDp, dt, G, GV, CS, &
99 maxvel, minvel, str, a, hv)
100 integer,
intent(in) :: I
101 integer,
intent(in) :: j
105 real,
dimension(SZIB_(G),SZJ_(G),SZK_(G)), &
107 real,
dimension(SZI_(G),SZJ_(G),SZK_(G)), &
113 real,
intent(in) :: dt
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 452 subroutine write_v_accel(i, J, vm, hin, ADp, CDp, dt, G, GV, CS, &
453 maxvel, minvel, str, a, hv)
454 integer,
intent(in) :: i
455 integer,
intent(in) :: J
459 real,
dimension(SZI_(G),SZJB_(G),SZK_(G)), &
461 real,
dimension(SZI_(G),SZJ_(G),SZK_(G)), &
467 real,
intent(in) :: dt
470 real,
intent(in) :: maxvel, minvel
471 real,
optional,
intent(in) :: str
473 real,
dimension(SZI_(G),SZK_(G)), &
474 optional,
intent(in) :: a
476 real,
dimension(SZI_(G),SZK_(G)), &
477 optional,
intent(in) :: hv
506 real :: Inorm(szk_(g))
508 integer :: yr, mo, day, hr, minute, sec, yearday
511 logical :: do_k(szk_(g)+1)
512 logical :: prev_avail
515 angstrom = gv%Angstrom + gv%H_subroundoff
519 if (cs%cols_written < cs%max_writes)
then 520 cs%cols_written = cs%cols_written + 1
526 if (cs%v_file < 0)
then 527 if (len_trim(cs%v_trunc_file) < 1)
return 528 call open_file(cs%v_file, trim(cs%v_trunc_file), action=append_file, &
529 form=ascii_file, threading=multiple, fileset=single_file)
530 if (cs%v_file < 0)
then 531 call mom_error(note,
'Unable to open file '//trim(cs%v_trunc_file)//
'.')
537 prev_avail = (
associated(cs%u_prev) .and.
associated(cs%v_prev))
540 if (((max(cs%v_av(i,j,k), vm(i,j,k)) >= maxvel) .or. &
541 (min(cs%v_av(i,j,k), vm(i,j,k)) <= minvel)) .and. &
542 ((hin(i,j,k) + hin(i,j+1,k)) > 3.0*angstrom))
exit 546 if (((max(cs%v_av(i,j,k), vm(i,j,k)) >= maxvel) .or. &
547 (min(cs%v_av(i,j,k), vm(i,j,k)) <= minvel)) .and. &
548 ((hin(i,j,k) + hin(i,j+1,k)) > 3.0*angstrom))
exit 552 ks = 1; ke = nz;
write(file,
'("V: Unable to set ks & ke.")')
555 call get_date(cs%Time, yr, mo, day, hr, minute, sec)
556 call get_time((cs%Time - set_date(yr, 1, 1, 0, 0, 0)), sec, yearday)
557 write (file,
'(/,"--------------------------")')
558 write (file,
'(/,"Time ",i5,i4,F6.2," V-velocity violation at ",I4,": ",2(I3), & 559 & " (",F7.2," E ",F7.2," N) Layers ",I3," to ",I3,". dt = ",1PG10.4)') &
560 yr, yearday, (
REAL(sec)/3600.0), pe_here(), i, j, &
561 G%geoLonCv(i,j), G%geoLatCv(i,j), ks, ke, dt
563 if (ks <= gv%nk_rho_varies) ks = 1
565 if ((hin(i,j,k) + hin(i,j+1,k)) > 3.0*angstrom) do_k(k) = .true.
568 write(file,
'(/,"Layers:",$)')
569 do k=ks,ke ;
if (do_k(k))
write(file,
'(I10," ",$)') (k);
enddo 570 write(file,
'(/,"v(m): ",$)')
571 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') (vm(i,j,k));
enddo 574 write(file,
'(/,"v(mp): ",$)')
575 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') (cs%v_prev(i,j,k));
enddo 578 write(file,
'(/,"v(3): ",$)')
579 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') (cs%v_av(i,j,k));
enddo 580 write(file,
'(/,"CFL v: ",$)')
581 do k=ks,ke ;
if (do_k(k))
then 582 cfl = abs(vm(i,j,k)) * dt * g%dx_Cv(i,j)
583 if (vm(i,j,k) < 0.0)
then ; cfl = cfl * g%IareaT(i,j+1)
584 else ; cfl = cfl * g%IareaT(i,j) ;
endif 585 write(file,
'(ES10.3," ",$)') cfl
587 write(file,
'(/,"CFL0 v:",$)')
588 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') &
589 abs(vm(i,j,k)) * dt * g%IdyCv(i,j) ;
enddo 592 write(file,
'(/,"dv: ",$)')
593 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') &
594 ((vm(i,j,k)-cs%v_prev(i,j,k)));
enddo 597 write(file,
'(/,"CAv: ",$)')
598 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') (dt*adp%CAv(i,j,k));
enddo 600 write(file,
'(/,"PFv: ",$)')
601 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') (dt*adp%PFv(i,j,k));
enddo 603 write(file,
'(/,"diffv: ",$)')
604 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') (dt*adp%diffv(i,j,k));
enddo 606 if (
ASSOCIATED(adp%gradKEv))
then 607 write(file,
'(/,"KEv: ",$)')
608 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') &
609 (dt*adp%gradKEv(i,j,k));
enddo 611 if (
ASSOCIATED(adp%rv_x_u))
then 612 write(file,
'(/,"Corv: ",$)')
613 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') &
614 dt*(adp%CAv(i,j,k)-adp%rv_x_u(i,j,k));
enddo 616 if (
ASSOCIATED(adp%dv_dt_visc))
then 617 write(file,
'(/,"vbv: ",$)')
618 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') &
619 (vm(i,j,k)-dt*adp%dv_dt_visc(i,j,k));
enddo 621 write(file,
'(/,"dvv: ",$)')
622 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') &
623 (dt*adp%dv_dt_visc(i,j,k));
enddo 625 if (
ASSOCIATED(adp%dv_other))
then 626 write(file,
'(/,"dv_other: ",$)')
627 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') &
628 (adp%dv_other(i,j,k));
enddo 631 write(file,
'(/,"a: ",$)')
632 do k=ks,ke+1 ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') a(i,k);
enddo 634 if (
present(hv))
then 635 write(file,
'(/,"hvel: ",$)')
636 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') hv(i,k);
enddo 638 write(file,
'(/,"Stress: ",ES10.3)') str
640 if (
ASSOCIATED(cs%v_accel_bt))
then 641 write(file,
'("dvbt: ",$)')
642 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') &
643 (dt*cs%v_accel_bt(i,j,k)) ;
enddo 647 write(file,
'("h--: ",$)')
648 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') hin(i-1,j,k);
enddo 649 write(file,
'(/,"h0-: ",$)')
650 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') hin(i,j,k);
enddo 651 write(file,
'(/,"h+-: ",$)')
652 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') hin(i+1,j,k);
enddo 653 write(file,
'(/,"h-+: ",$)')
654 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') hin(i-1,j+1,k);
enddo 655 write(file,
'(/,"h0+: ",$)')
656 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') hin(i,j+1,k);
enddo 657 write(file,
'(/,"h++: ",$)')
658 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') hin(i+1,j+1,k);
enddo 660 e(nz+1) = -g%bathyT(i,j)
661 do k=nz,1,-1 ; e(k) = e(k+1) + hin(i,j,k);
enddo 662 write(file,
'(/,"e-: ",$)')
663 write(file,
'(ES10.3," ",$)') e(ks)
664 do k=ks+1,ke+1 ;
if (do_k(k-1))
write(file,
'(ES10.3," ",$)') e(k);
enddo 666 e(nz+1) = -g%bathyT(i,j+1)
667 do k=nz,1,-1 ; e(k) = e(k+1) + hin(i,j+1,k) ;
enddo 668 write(file,
'(/,"e+: ",$)')
669 write(file,
'(ES10.3," ",$)') e(ks)
670 do k=ks+1,ke+1 ;
if (do_k(k-1))
write(file,
'(ES10.3," ",$)') e(k);
enddo 671 if (
ASSOCIATED(cs%T))
then 672 write(file,
'(/,"T-: ",$)')
673 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') cs%T(i,j,k);
enddo 674 write(file,
'(/,"T+: ",$)')
675 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') cs%T(i,j+1,k);
enddo 677 if (
ASSOCIATED(cs%S))
then 678 write(file,
'(/,"S-: ",$)')
679 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') cs%S(i,j,k);
enddo 680 write(file,
'(/,"S+: ",$)')
681 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') cs%S(i,j+1,k);
enddo 685 write(file,
'(/,"u--: ",$)')
686 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') cs%u_prev(i-1,j,k);
enddo 687 write(file,
'(/,"u-+: ",$)')
688 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') cs%u_prev(i-1,j+1,k);
enddo 689 write(file,
'(/,"u+-: ",$)')
690 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') cs%u_prev(i,j,k);
enddo 691 write(file,
'(/,"u++: ",$)')
692 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') cs%u_prev(i,j+1,k);
enddo 695 write(file,
'(/,"uh--: ",$)')
696 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') &
697 (cdp%uh(i-1,j,k)*g%IdyCu(i-1,j));
enddo 698 write(file,
'(/," uhC--: ",$)')
699 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') &
700 (cs%u_av(i-1,j,k) * 0.5*(hin(i-1,j,k) + hin(i,j,k)));
enddo 702 write(file,
'(/," uhCp--:",$)')
703 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') &
704 (0.5*cs%u_prev(i-1,j,k)*(hin(i-1,j,k) + hin(i,j,k)));
enddo 707 write(file,
'(/,"uh-+: ",$)')
708 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') &
709 (cdp%uh(i-1,j+1,k)*g%IdyCu(i-1,j+1));
enddo 710 write(file,
'(/," uhC-+: ",$)')
711 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') &
712 (cs%u_av(i-1,j+1,k) * 0.5*(hin(i-1,j+1,k) + hin(i,j+1,k)));
enddo 714 write(file,
'(/," uhCp-+:",$)')
715 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') &
716 (0.5*cs%u_prev(i-1,j+1,k)*(hin(i-1,j+1,k) + hin(i,j+1,k)));
enddo 719 write(file,
'(/,"uh+-: ",$)')
720 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') &
721 (cdp%uh(i,j,k)*g%IdyCu(i,j));
enddo 722 write(file,
'(/," uhC+-: ",$)')
723 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') &
724 (cs%u_av(i,j,k) * 0.5*(hin(i,j,k) + hin(i+1,j,k)));
enddo 726 write(file,
'(/," uhCp+-:",$)')
727 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') &
728 (0.5*cs%u_prev(i,j,k)*(hin(i,j,k) + hin(i+1,j,k)));
enddo 731 write(file,
'(/,"uh++: ",$)')
732 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') &
733 (cdp%uh(i,j+1,k)*g%IdyCu(i,j+1));
enddo 734 write(file,
'(/," uhC++: ",$)')
735 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') &
736 (cs%u_av(i,j+1,k) * 0.5*(hin(i,j+1,k) + hin(i+1,j+1,k)));
enddo 738 write(file,
'(/," uhCp++:",$)')
739 do k=ks,ke ;
if (do_k(k))
write(file,
'(ES10.3," ",$)') &
740 (0.5*cs%u_prev(i,j+1,k)*(hin(i,j+1,k) + hin(i+1,j+1,k)));
enddo 743 write(file,
'(/,"D: ",2(ES10.3))') g%bathyT(i,j),g%bathyT(i,j+1)
748 dv = vm(i,j,k)-cs%v_prev(i,j,k)
749 if (abs(dv) < 1.0e-6) dv = 1.0e-6
753 write(file,
'(2/,"Norm: ",$)')
754 do k=ks,ke ;
if (do_k(k))
write(file,
'(F10.6," ",$)') (1.0/inorm(k));
enddo 755 write(file,
'(/,"dv: ",$)')
756 do k=ks,ke ;
if (do_k(k))
write(file,
'(F10.6," ",$)') &
757 ((vm(i,j,k)-cs%v_prev(i,j,k))*inorm(k));
enddo 758 write(file,
'(/,"CAv: ",$)')
759 do k=ks,ke ;
if (do_k(k))
write(file,
'(F10.6," ",$)') &
760 (dt*adp%CAv(i,j,k)*inorm(k));
enddo 761 write(file,
'(/,"PFv: ",$)')
762 do k=ks,ke ;
if (do_k(k))
write(file,
'(F10.6," ",$)') &
763 (dt*adp%PFv(i,j,k)*inorm(k));
enddo 764 write(file,
'(/,"diffv: ",$)')
765 do k=ks,ke ;
if (do_k(k))
write(file,
'(F10.6," ",$)') &
766 (dt*adp%diffv(i,j,k)*inorm(k));
enddo 768 if (
ASSOCIATED(adp%gradKEu))
then 769 write(file,
'(/,"KEv: ",$)')
770 do k=ks,ke ;
if (do_k(k))
write(file,
'(F10.6," ",$)') &
771 (dt*adp%gradKEv(i,j,k)*inorm(k));
enddo 773 if (
ASSOCIATED(adp%rv_x_u))
then 774 write(file,
'(/,"Corv: ",$)')
775 do k=ks,ke ;
if (do_k(k))
write(file,
'(F10.6," ",$)') &
776 dt*(adp%CAv(i,j,k)-adp%rv_x_u(i,j,k))*inorm(k);
enddo 778 if (
ASSOCIATED(adp%dv_dt_visc))
then 779 write(file,
'(/,"dvv: ",$)')
780 do k=ks,ke ;
if (do_k(k))
write(file,
'(F10.6," ",$)') &
781 (dt*adp%dv_dt_visc(i,j,k)*inorm(k));
enddo 783 if (
ASSOCIATED(adp%dv_other))
then 784 write(file,
'(/,"dv_other: ",$)')
785 do k=ks,ke ;
if (do_k(k))
write(file,
'(F10.6," ",$)') &
786 (adp%dv_other(i,j,k)*inorm(k));
enddo 788 if (
ASSOCIATED(cs%v_accel_bt))
then 789 write(file,
'(/,"dvbt: ",$)')
790 do k=ks,ke ;
if (do_k(k))
write(file,
'(F10.6," ",$)') &
791 (dt*cs%v_accel_bt(i,j,k)*inorm(k)) ;
enddo 805 target,
intent(in) :: MIS
808 type(time_type),
target,
intent(in) :: Time
812 type(
diag_ctrl),
target,
intent(inout) :: diag
830 #include "version_variable.h" 831 character(len=40) :: mdl =
"MOM_PointAccel" 833 if (
associated(cs))
return 836 cs%diag => diag ; cs%Time => time
838 cs%T => mis%T ; cs%S => mis%S ; cs%pbce => mis%pbce
839 cs%u_accel_bt => mis%u_accel_bt ; cs%v_accel_bt => mis%v_accel_bt
840 cs%u_prev => mis%u_prev ; cs%v_prev => mis%v_prev
841 cs%u_av => mis%u_av;
if (.not.
associated(mis%u_av)) cs%u_av => mis%u(:,:,:)
842 cs%v_av => mis%v_av;
if (.not.
associated(mis%v_av)) cs%v_av => mis%v(:,:,:)
846 call get_param(param_file, mdl,
"U_TRUNC_FILE", cs%u_trunc_file, &
847 "The absolute path to the file where the accelerations \n"//&
848 "leading to zonal velocity truncations are written. \n"//&
849 "Leave this empty for efficiency if this diagnostic is \n"//&
850 "not needed.", default=
"")
851 call get_param(param_file, mdl,
"V_TRUNC_FILE", cs%v_trunc_file, &
852 "The absolute path to the file where the accelerations \n"//&
853 "leading to meridional velocity truncations are written. \n"//&
854 "Leave this empty for efficiency if this diagnostic is \n"//&
855 "not needed.", default=
"")
856 call get_param(param_file, mdl,
"MAX_TRUNC_FILE_SIZE_PER_PE", cs%max_writes, &
857 "The maximum number of colums of truncations that any PE \n"//&
858 "will write out during a run.", default=50)
860 if (len_trim(dirs%output_directory) > 0)
then 861 if (len_trim(cs%u_trunc_file) > 0) &
862 cs%u_trunc_file = trim(dirs%output_directory)//trim(cs%u_trunc_file)
863 if (len_trim(cs%v_trunc_file) > 0) &
864 cs%v_trunc_file = trim(dirs%output_directory)//trim(cs%v_trunc_file)
865 call log_param(param_file, mdl,
"output_dir/U_TRUNC_FILE", cs%u_trunc_file)
866 call log_param(param_file, mdl,
"output_dir/V_TRUNC_FILE", cs%v_trunc_file)
868 cs%u_file = -1 ; cs%v_file = -1 ; cs%cols_written = 0
subroutine, public pointaccel_init(MIS, Time, G, param_file, diag, dirs, CS)
Ocean grid type. See mom_grid for details.
Provides the ocean grid type.
This module contains I/O framework code.
The accel_diag_ptrs structure contains pointers to arrays with accelerations, which can later be used...
The cont_diag_ptrs structure contains pointers to arrays with transports, which can later be used for...
The ocean_internal_state structure contains pointers to all of the prognostic variables allocated in ...
subroutine, public write_v_accel(i, J, vm, hin, ADp, CDp, dt, G, GV, CS, maxvel, minvel, str, a, hv)
This subroutine writes to an output file all of the accelerations that have been applied to a column ...
subroutine, public write_u_accel(I, j, um, hin, ADp, CDp, dt, G, GV, CS, maxvel, minvel, str, a, hv)
This subroutine writes to an output file all of the accelerations that have been applied to a column ...
subroutine, public mom_error(level, message, all_print)