This subroutine ensures that there is a degree of horizontal smoothness in the depths of the near-surface interfaces.
182 type(verticalgrid_type),
intent(in) :: gv
183 real,
dimension(SZI_(G),SZJ_(G),SZK_(G)), &
185 type(thermo_var_ptrs),
intent(inout) :: tv
188 real,
intent(in) :: dt
189 real,
dimension(SZI_(G),SZJ_(G),SZK_(G)), &
194 real,
dimension(SZI_(G),SZJ_(G),SZK_(G)), &
199 type(regularize_layers_cs),
pointer :: cs
221 real,
dimension(SZIB_(G),SZJ_(G)) :: &
223 real,
dimension(SZI_(G),SZJB_(G)) :: &
225 real,
dimension(SZI_(G),SZJ_(G)) :: &
227 real,
dimension(SZI_(G),SZJ_(G),SZK_(G)+1) :: &
231 real,
dimension(SZIB_(G),SZJ_(G)) :: &
232 def_rat_u_1b, def_rat_u_2, def_rat_u_2b, def_rat_u_3, def_rat_u_3b
233 real,
dimension(SZI_(G),SZJB_(G)) :: &
234 def_rat_v_1b, def_rat_v_2, def_rat_v_2b, def_rat_v_3, def_rat_v_3b
235 real,
dimension(SZI_(G),SZJB_(G)) :: &
236 def_rat_h2, def_rat_h3
237 real,
dimension(SZI_(G),SZJ_(G),SZK_(G)+1) :: &
241 real,
dimension(SZI_(G),SZK_(G)+1) :: &
243 real,
dimension(SZI_(G),SZK_(G)) :: &
257 real,
dimension(SZI_(G)) :: &
262 h_add_tgt, h_add_tot, &
263 h_tot1, th_tot1, sh_tot1, &
264 h_tot3, th_tot3, sh_tot3, &
265 h_tot2, th_tot2, sh_tot2
266 real,
dimension(SZK_(G)) :: &
271 real :: e_e, e_w, e_n, e_s
276 real,
dimension(SZK_(G)+1) :: &
277 int_flux, int_tflux, int_sflux, int_rflux
284 real :: int_top, int_bot
289 logical :: cols_left, ent_any, more_ent_i(szi_(g)), ent_i(szi_(g))
290 logical :: det_any, det_i(szi_(g))
291 logical :: do_j(szj_(g)), do_i(szi_(g)), find_i(szi_(g))
292 logical :: debug = .false.
293 logical :: fatal_error
294 character(len=256) :: mesg
295 integer :: i, j, k, is, ie, js, je, nz, nkmb, nkml, k1, k2, k3, ks, nz_filt
297 is = g%isc ; ie = g%iec ; js = g%jsc ; je = g%jec ; nz = g%ke
299 if (.not.
associated(cs))
call mom_error(fatal,
"MOM_regularize_layers: "//&
300 "Module must be initialized before it is used.")
302 if (gv%nkml<1)
return 303 nkmb = gv%nk_rho_varies ; nkml = gv%nkml
304 if (.not.
ASSOCIATED(tv%eqn_of_state))
call mom_error(fatal, &
305 "MOM_regularize_layers: This module now requires the use of temperature and "//&
306 "an equation of state.")
308 h_neglect = gv%H_subroundoff
309 debug = (debug .or. cs%debug)
312 if (cs%id_def_rat_2 > 0)
then 313 is = g%isc-1 ; ie = g%iec+1 ; js = g%jsc-1 ; je = g%jec+1
317 i_dtol = 1.0 / max(cs%h_def_tol2 - cs%h_def_tol1, 1e-40)
318 i_dtol34 = 1.0 / max(cs%h_def_tol4 - cs%h_def_tol3, 1e-40)
320 p_ref_cv(:) = tv%P_Ref
322 do j=js-1,je+1 ;
do i=is-1,ie+1
325 do k=1,nz ;
do j=js-1,je+1 ;
do i=is-1,ie+1
326 e(i,j,k+1) = e(i,j,k) - h(i,j,k)
327 enddo ;
enddo ;
enddo 330 call find_deficit_ratios(e, def_rat_u, def_rat_v, g, gv, cs, def_rat_u_1b, def_rat_v_1b, 1, h)
332 call find_deficit_ratios(e, def_rat_u, def_rat_v, g, gv, cs, h=h)
335 do j=js,je ; do_j(j) = .false. ;
enddo 336 do j=js,je ;
do i=is,ie
337 def_rat_h(i,j) = max(def_rat_u(i-1,j), def_rat_u(i,j), &
338 def_rat_v(i,j-1), def_rat_v(i,j))
339 if (def_rat_h(i,j) > cs%h_def_tol1) do_j(j) = .true.
343 if ((cs%id_def_rat_3 > 0) .or. (cs%id_e3 > 0) .or. &
344 (cs%id_def_rat_u_3 > 0) .or. (cs%id_def_rat_u_3b > 0) .or. &
345 (cs%id_def_rat_v_3 > 0) .or. (cs%id_def_rat_v_3b > 0) )
then 346 do j=js-1,je+1 ;
do i=is-1,ie+1
349 do k=2,nz+1 ;
do j=js,je ;
do i=is,ie
350 if (g%mask2dCu(i,j) <= 0.0)
then ; e_e = e(i,j,k) ;
else 351 e_e = max(e(i+1,j,k) + min(e(i,j,k) - e(i+1,j,nz+1), 0.0), e(i,j,nz+1))
353 if (g%mask2dCu(i-1,j) <= 0.0)
then ; e_w = e(i,j,k) ;
else 354 e_w = max(e(i-1,j,k) + min(e(i,j,k) - e(i-1,j,nz+1), 0.0), e(i,j,nz+1))
356 if (g%mask2dCv(i,j) <= 0.0)
then ; e_n = e(i,j,k) ;
else 357 e_n = max(e(i,j+1,k) + min(e(i,j,k) - e(i,j+1,nz+1), 0.0), e(i,j,nz+1))
359 if (g%mask2dCv(i,j-1) <= 0.0)
then ; e_s = e(i,j,k) ;
else 360 e_s = max(e(i,j-1,k) + min(e(i,j,k) - e(i,j-1,nz+1), 0.0), e(i,j,nz+1))
364 ef(i,j,k) = (1.0 - 0.5*wt) * e(i,j,k) + &
365 wt * 0.125 * ((e_e + e_w) + (e_n + e_s))
366 enddo ;
enddo ;
enddo 367 call find_deficit_ratios(ef, def_rat_u_3, def_rat_v_3, g, gv, cs, def_rat_u_3b, def_rat_v_3b)
370 do j=js,je ;
do i=is,ie
371 def_rat_h3(i,j) = max(def_rat_u_3(i-1,j), def_rat_u_3(i,j), &
372 def_rat_v_3(i,j-1), def_rat_v_3(i,j))
375 if (cs%id_e3 > 0)
call post_data(cs%id_e3, ef, cs%diag)
376 if (cs%id_def_rat_3 > 0)
call post_data(cs%id_def_rat_3, def_rat_h3, cs%diag)
377 if (cs%id_def_rat_u_3 > 0)
call post_data(cs%id_def_rat_u_3, def_rat_u_3, cs%diag)
378 if (cs%id_def_rat_u_3b > 0)
call post_data(cs%id_def_rat_u_3b, def_rat_u_3b, cs%diag)
379 if (cs%id_def_rat_v_3 > 0)
call post_data(cs%id_def_rat_v_3, def_rat_v_3, cs%diag)
380 if (cs%id_def_rat_v_3b > 0)
call post_data(cs%id_def_rat_v_3b, def_rat_v_3b, cs%diag)
400 do j=js,je ;
if (do_j(j))
then 407 do k=1,nz ;
do i=is,ie ; d_ea(i,k) = 0.0 ; d_eb(i,k) = 0.0 ;
enddo ;
enddo 411 do_i(i) = def_rat_h(i,j) > cs%h_def_tol1
412 if (def_rat_h(i,j) > max_def_rat) max_def_rat = def_rat_h(i,j)
414 nz_filt = nkmb+1 ;
if (max_def_rat > cs%h_def_tol3) nz_filt = nz+1
419 do k=1,nz_filt ;
do i=is,ie ;
if (do_i(i))
then 420 if (g%mask2dCu(i,j) <= 0.0)
then ; e_e = e(i,j,k) ;
else 421 e_e = max(e(i+1,j,k) + min(e(i,j,k) - e(i+1,j,nz+1), 0.0), &
422 e(i,j,nz+1) + (nz+1-k)*gv%Angstrom)
425 if (g%mask2dCu(i-1,j) <= 0.0)
then ; e_w = e(i,j,k) ;
else 426 e_w = max(e(i-1,j,k) + min(e(i,j,k) - e(i-1,j,nz+1), 0.0), &
427 e(i,j,nz+1) + (nz+1-k)*gv%Angstrom)
429 if (g%mask2dCv(i,j) <= 0.0)
then ; e_n = e(i,j,k) ;
else 430 e_n = max(e(i,j+1,k) + min(e(i,j,k) - e(i,j+1,nz+1), 0.0), &
431 e(i,j,nz+1) + (nz+1-k)*gv%Angstrom)
433 if (g%mask2dCv(i,j-1) <= 0.0)
then ; e_s = e(i,j,k) ;
else 434 e_s = max(e(i,j-1,k) + min(e(i,j,k) - e(i,j-1,nz+1), 0.0), &
435 e(i,j,nz+1) + (nz+1-k)*gv%Angstrom)
438 wt = max(0.0, min(1.0, i_dtol*(def_rat_h(i,j)-cs%h_def_tol1)))
440 e_filt(i,k) = (1.0 - 0.5*wt) * e(i,j,k) + &
441 wt * 0.125 * ((e_e + e_w) + (e_n + e_s))
443 endif ;
enddo ;
enddo 444 do k=1,nz ;
do i=is,ie
446 t_2d(i,k) = tv%T(i,j,k) ; s_2d(i,k) = tv%S(i,j,k)
450 do k=1,nz ;
do i=is,ie ;
if (do_i(i))
then 451 h_2d_init(i,k) = h(i,j,k)
452 t_2d_init(i,k) = tv%T(i,j,k) ; s_2d_init(i,k) = tv%S(i,j,k)
453 endif ;
enddo ;
enddo 459 more_ent_i(i) = .false. ; ent_i(i) = .false.
460 h_add_tgt(i) = 0.0 ; h_add_tot(i) = 0.0
461 if (do_i(i) .and. (e_2d(i,nkmb+1) > e_filt(i,nkmb+1)))
then 462 more_ent_i(i) = .true. ; ent_i(i) = .true. ; ent_any = .true.
463 h_add_tgt(i) = e_2d(i,nkmb+1) - e_filt(i,nkmb+1)
470 do i=is,ie ;
if (more_ent_i(i))
then 471 if (h_2d(i,k) - gv%Angstrom > h_neglect)
then 472 if (e_2d(i,nkmb+1)-e_filt(i,nkmb+1) > h_2d(i,k) - gv%Angstrom)
then 473 h_add = h_2d(i,k) - gv%Angstrom
474 h_2d(i,k) = gv%Angstrom
476 h_add = e_2d(i,nkmb+1)-e_filt(i,nkmb+1)
477 h_2d(i,k) = h_2d(i,k) - h_add
479 d_eb(i,k-1) = d_eb(i,k-1) + h_add
480 h_add_tot(i) = h_add_tot(i) + h_add
481 e_2d(i,nkmb+1) = e_2d(i,nkmb+1) - h_add
482 h_prev = h_2d(i,nkmb)
483 h_2d(i,nkmb) = h_2d(i,nkmb) + h_add
485 t_2d(i,nkmb) = (h_prev*t_2d(i,nkmb) + h_add*t_2d(i,k)) / h_2d(i,nkmb)
486 s_2d(i,nkmb) = (h_prev*s_2d(i,nkmb) + h_add*s_2d(i,k)) / h_2d(i,nkmb)
488 if ((e_2d(i,nkmb+1) <= e_filt(i,nkmb+1)) .or. &
489 (h_add_tot(i) > 0.6*h_add_tgt(i)))
then 490 more_ent_i(i) = .false.
498 if (.not.cols_left)
exit 502 do k=ks,nkmb,-1 ;
do i=is,ie ;
if (ent_i(i))
then 503 d_eb(i,k) = d_eb(i,k) + d_eb(i,k+1)
504 endif ;
enddo ;
enddo 516 if ((max_def_rat > cs%h_def_tol3) .and. (cs%reg_sfc_detrain))
then 518 det_i(i) = .false. ; rcv_tol(i) = 0.0
519 if (do_i(i) .and. (e_2d(i,nkmb+1) < e_filt(i,nkmb+1)) .and. &
520 (def_rat_h(i,j) > cs%h_def_tol3))
then 521 det_i(i) = .true. ; det_any = .true.
522 rcv_tol(i) = min((def_rat_h(i,j) - cs%h_def_tol3), 1.0)
527 call cpu_clock_begin(id_clock_eos)
529 call calculate_density(t_2d(:,k),s_2d(:,k),p_ref_cv,rcv(:,k), &
530 is,ie-is+1,tv%eqn_of_state)
532 call cpu_clock_end(id_clock_eos)
534 do i=is,ie ;
if (det_i(i))
then 541 rcv_min_det = gv%Rlay(k2) + 0.6*rcv_tol(i)*(gv%Rlay(k2-1)-gv%Rlay(k2))
543 rcv_max_det = gv%Rlay(k2) + 0.6*rcv_tol(i)*(gv%Rlay(k2+1)-gv%Rlay(k2))
545 rcv_max_det = gv%Rlay(nz) + 0.6*rcv_tol(i)*(gv%Rlay(nz)-gv%Rlay(nz-1))
547 if (rcv(i,k1) > rcv_max_det) &
550 h_deficit = (e_filt(i,k2)-e_filt(i,k2+1)) - h_2d(i,k2)
551 if ((e_filt(i,k2) > e_2d(i,k1+1)) .and. (h_deficit > 0.0) .and. &
552 (rcv(i,k1) < rcv_max_det) .and. (rcv(i,k1) > rcv_min_det))
then 554 h_add = min(e_filt(i,k2) - e_2d(i,k2), h_deficit )
555 if (h_add < h_2d(i,k1))
then 557 if (h_add > 0.0)
then 559 h_2d(i,k2) = h_2d(i,k2) + h_add
560 e_2d(i,k2) = e_2d(i,k2+1) + h_2d(i,k2)
561 d_ea(i,k2) = d_ea(i,k2) + h_add
563 t_2d(i,k2) = (h_prev*t_2d(i,k2) + h_add*t_2d(i,k1)) / h_2d(i,k2)
564 s_2d(i,k2) = (h_prev*s_2d(i,k2) + h_add*s_2d(i,k1)) / h_2d(i,k2)
565 h_det_tot = h_det_tot + h_add
567 h_2d(i,k1) = h_2d(i,k1) - h_add
568 do k3=k1,nkmb ; e_2d(i,k3+1) = e_2d(i,k3) - h_2d(i,k3) ;
enddo 569 do k3=k1+1,nkmb ; d_ea(i,k3) = d_ea(i,k3) + h_add ;
enddo 572 call mom_error(fatal,
"h_add is negative. Some logic is wrong.")
578 if (k2>nkmb+1) e_2d(i,k2) = e_2d(i,k2) + h_det_tot
582 h_2d(i,k2) = h_2d(i,k2) + h_add
583 e_2d(i,k2) = e_2d(i,k2+1) + h_2d(i,k2)
584 d_ea(i,k2) = d_ea(i,k2) + h_add
585 t_2d(i,k2) = (h_prev*t_2d(i,k2) + h_add*t_2d(i,k1)) / h_2d(i,k2)
586 s_2d(i,k2) = (h_prev*s_2d(i,k2) + h_add*s_2d(i,k1)) / h_2d(i,k2)
587 h_det_tot = h_det_tot + h_add
590 do k3=k1,nkmb ; e_2d(i,k3+1) = e_2d(i,k3) - h_2d(i,k3) ;
enddo 591 do k3=k1+1,nkmb ; d_ea(i,k3) = d_ea(i,k3) + h_add ;
enddo 600 if (k2>nkmb+1) e_2d(i,k2) = e_2d(i,k2) + h_det_tot
606 do k=nz-1,nkmb+1,-1 ;
do i=is,ie ;
if (det_i(i))
then 607 d_ea(i,k) = d_ea(i,k) + d_ea(i,k+1)
608 endif ;
enddo ;
enddo 611 do i=is,ie ; h_tot3(i) = 0.0 ; th_tot3(i) = 0.0 ; sh_tot3(i) = 0.0 ;
enddo 612 do k=1,nz ;
do i=is,ie ;
if (do_i(i))
then 613 h_tot3(i) = h_tot3(i) + h_2d(i,k)
614 th_tot3(i) = th_tot3(i) + h_2d(i,k) * t_2d(i,k)
615 sh_tot3(i) = sh_tot3(i) + h_2d(i,k) * s_2d(i,k)
616 endif ;
enddo ;
enddo 619 do i=is,ie ;
if (do_i(i))
then 622 scale = e_2d(i,nkmb+1) / e_filt(i,nkmb+1)
623 do k=2,nkmb+1 ; e_filt(i,k) = e_filt(i,k) * scale ;
enddo 627 if (e_filt(i,2) < e_2d(i,nkml))
then 628 scale = (e_2d(i,nkml) - e_filt(i,nkmb+1)) / &
629 ((e_filt(i,2) - e_filt(i,nkmb+1)) + h_neglect)
631 e_filt(i,k) = e_filt(i,nkmb+1) + scale * (e_filt(i,k) - e_filt(i,nkmb+1))
633 e_filt(i,2) = e_2d(i,nkml)
640 int_flux(k) = 0.0 ; int_rflux(k) = 0.0
641 int_tflux(k) = 0.0 ; int_sflux(k) = 0.0
644 int_bot = max(e_2d(i,k1+1),e_filt(i,k2+1))
645 h_add = int_top - int_bot
649 d_ea(i,k3) = d_ea(i,k3) + h_add
650 int_flux(k3) = int_flux(k3) + h_add
651 int_tflux(k3) = int_tflux(k3) + h_add*t_2d(i,k1)
652 int_sflux(k3) = int_sflux(k3) + h_add*s_2d(i,k1)
654 elseif (k1 > k2)
then 656 d_eb(i,k3) = d_eb(i,k3) + h_add
657 int_flux(k3+1) = int_flux(k3+1) - h_add
658 int_tflux(k3+1) = int_tflux(k3+1) - h_add*t_2d(i,k1)
659 int_sflux(k3+1) = int_sflux(k3+1) - h_add*s_2d(i,k1)
663 if (int_bot <= e_filt(i,k2+1))
then 666 elseif (int_bot <= e_2d(i,k1+1))
then 670 call mom_error(fatal, &
671 "Regularize_surface: Could not increment target or source.")
673 if ((k1 > nkmb) .or. (k2 > nkmb))
exit 677 call mom_error(fatal,
"Regularize_surface: Did not assign fluid to layer nkmb.")
681 do k=1,nkmb ; h_prev_1d(k) = h_2d(i,k) ;
enddo 682 h_2d(i,1) = h_2d(i,1) - int_flux(2)
684 h_2d(i,k) = h_2d(i,k) + (int_flux(k) - int_flux(k+1))
688 h_2d(i,nkmb) = h_2d(i,nkmb) + int_flux(nkmb)
690 t_2d(i,1) = (t_2d(i,1)*h_prev_1d(1) - int_tflux(2)) / h_2d(i,1)
691 s_2d(i,1) = (s_2d(i,1)*h_prev_1d(1) - int_sflux(2)) / h_2d(i,1)
693 t_2d(i,k) = (t_2d(i,k)*h_prev_1d(k) + (int_tflux(k) - int_tflux(k+1))) / h_2d(i,k)
694 s_2d(i,k) = (s_2d(i,k)*h_prev_1d(k) + (int_sflux(k) - int_sflux(k+1))) / h_2d(i,k)
696 t_2d(i,nkmb) = (t_2d(i,nkmb)*h_prev_1d(nkmb) + int_tflux(nkmb) ) / h_2d(i,nkmb)
697 s_2d(i,nkmb) = (s_2d(i,nkmb)*h_prev_1d(nkmb) + int_sflux(nkmb) ) / h_2d(i,nkmb)
702 do k=1,nz ;
do i=is,ie ;
if (do_i(i))
then 704 tv%T(i,j,k) = t_2d(i,k) ; tv%S(i,j,k) = s_2d(i,k)
705 ea(i,j,k) = ea(i,j,k) + d_ea(i,k)
706 eb(i,j,k) = eb(i,j,k) + d_eb(i,k)
707 endif ;
enddo ;
enddo 710 do i=is,ie ; h_tot1(i) = 0.0 ; th_tot1(i) = 0.0 ; sh_tot1(i) = 0.0 ;
enddo 711 do i=is,ie ; h_tot2(i) = 0.0 ; th_tot2(i) = 0.0 ; sh_tot2(i) = 0.0 ;
enddo 713 do k=1,nz ;
do i=is,ie ;
if (do_i(i))
then 714 h_tot1(i) = h_tot1(i) + h_2d_init(i,k)
715 h_tot2(i) = h_tot2(i) + h(i,j,k)
717 th_tot1(i) = th_tot1(i) + h_2d_init(i,k) * t_2d_init(i,k)
718 th_tot2(i) = th_tot2(i) + h(i,j,k) * tv%T(i,j,k)
719 sh_tot1(i) = sh_tot1(i) + h_2d_init(i,k) * s_2d_init(i,k)
720 sh_tot2(i) = sh_tot2(i) + h(i,j,k) * tv%S(i,j,k)
721 if (h(i,j,k) < 0.0) &
722 call mom_error(fatal,
"regularize_surface: Negative thicknesses.")
723 if (k==1)
then ; h_predicted = h_2d_init(i,k) + (d_eb(i,k) - d_ea(i,k+1))
724 elseif (k==nz)
then ; h_predicted = h_2d_init(i,k) + (d_ea(i,k) - d_eb(i,k-1))
726 h_predicted = h_2d_init(i,k) + ((d_ea(i,k) - d_eb(i,k-1)) + &
727 (d_eb(i,k) - d_ea(i,k+1)))
729 if (abs(h(i,j,k) - h_predicted) > max(1e-9*abs(h_predicted),gv%Angstrom)) &
730 call mom_error(fatal,
"regularize_surface: d_ea mismatch.")
731 endif ;
enddo ;
enddo 732 do i=is,ie ;
if (do_i(i))
then 733 fatal_error = .false.
734 if (abs(h_tot1(i) - h_tot2(i)) > 1e-12*h_tot1(i))
then 735 write(mesg,
'(ES11.4," became ",ES11.4," diff ",ES11.4)') &
736 h_tot1(i), h_tot2(i), (h_tot1(i) - h_tot2(i))
737 call mom_error(warning,
"regularize_surface: Mass non-conservation."//&
741 if (abs(th_tot1(i) - th_tot2(i)) > 1e-12*(th_tot1(i)+10.0*h_tot1(i)))
then 742 write(mesg,
'(ES11.4," became ",ES11.4," diff ",ES11.4," int diff ",ES11.4)') &
743 th_tot1(i), th_tot2(i), (th_tot1(i) - th_tot2(i)), (th_tot1(i) - th_tot3(i))
744 call mom_error(warning,
"regularize_surface: Heat non-conservation."//&
748 if (abs(sh_tot1(i) - sh_tot2(i)) > 1e-12*(sh_tot1(i)+10.0*h_tot1(i)))
then 749 write(mesg,
'(ES11.4," became ",ES11.4," diff ",ES11.4," int diff ",ES11.4)') &
750 sh_tot1(i), sh_tot2(i), (sh_tot1(i) - sh_tot2(i)), (sh_tot1(i) - sh_tot3(i))
751 call mom_error(warning,
"regularize_surface: Salinity non-conservation."//&
755 if (fatal_error)
then 756 write(mesg,
'("Error at lat/lon ",2(ES11.4))') g%geoLatT(i,j), g%geoLonT(i,j)
757 call mom_error(fatal,
"regularize_surface: Terminating with fatal error. "//&
765 if (cs%id_def_rat > 0)
call post_data(cs%id_def_rat, def_rat_h, cs%diag)
768 if (cs%id_e1 > 0)
call post_data(cs%id_e1, e, cs%diag)
769 if (cs%id_def_rat_u > 0)
call post_data(cs%id_def_rat_u, def_rat_u, cs%diag)
770 if (cs%id_def_rat_u_1b > 0)
call post_data(cs%id_def_rat_u_1b, def_rat_u_1b, cs%diag)
771 if (cs%id_def_rat_v > 0)
call post_data(cs%id_def_rat_v, def_rat_v, cs%diag)
772 if (cs%id_def_rat_v_1b > 0)
call post_data(cs%id_def_rat_v_1b, def_rat_v_1b, cs%diag)
774 if ((cs%id_def_rat_2 > 0) .or. &
775 (cs%id_def_rat_u_2 > 0) .or. (cs%id_def_rat_u_2b > 0) .or. &
776 (cs%id_def_rat_v_2 > 0) .or. (cs%id_def_rat_v_2b > 0) )
then 777 do j=js-1,je+1 ;
do i=is-1,ie+1
780 do k=1,nz ;
do j=js-1,je+1 ;
do i=is-1,ie+1
781 e(i,j,k+1) = e(i,j,k) - h(i,j,k)
782 enddo ;
enddo ;
enddo 784 call find_deficit_ratios(e, def_rat_u_2, def_rat_v_2, g, gv, cs, def_rat_u_2b, def_rat_v_2b, h=h)
787 do j=js,je ;
do i=is,ie
788 def_rat_h2(i,j) = max(def_rat_u_2(i-1,j), def_rat_u_2(i,j), &
789 def_rat_v_2(i,j-1), def_rat_v_2(i,j))
792 if (cs%id_def_rat_2 > 0)
call post_data(cs%id_def_rat_2, def_rat_h2, cs%diag)
793 if (cs%id_e2 > 0)
call post_data(cs%id_e2, e, cs%diag)
794 if (cs%id_def_rat_u_2 > 0)
call post_data(cs%id_def_rat_u_2, def_rat_u_2, cs%diag)
795 if (cs%id_def_rat_u_2b > 0)
call post_data(cs%id_def_rat_u_2b, def_rat_u_2b, cs%diag)
796 if (cs%id_def_rat_v_2 > 0)
call post_data(cs%id_def_rat_v_2, def_rat_v_2, cs%diag)
797 if (cs%id_def_rat_v_2b > 0)
call post_data(cs%id_def_rat_v_2b, def_rat_v_2b, cs%diag)
Ocean grid type. See mom_grid for details.