26# ifdef ADJUST_BOUNDARY
44 integer,
intent(in) :: ng, tile, model
48 character (len=*),
parameter :: myfile = &
54 CALL wclock_on (ng, model, 12, __line__, myfile)
57 & lbi, ubi, lbj, ubj, &
58 & imins, imaxs, jmins, jmaxs, &
69 CALL wclock_off (ng, model, 12, __line__, myfile)
77 & LBi, UBi, LBj, UBj, &
78 & IminS, ImaxS, JminS, JmaxS, &
99 integer,
intent(in) :: ng, tile, model
100 integer,
intent(in) :: lbi, ubi, lbj, ubj
101 integer,
intent(in) :: imins, imaxs, jmins, jmaxs
102 integer,
intent(in) :: nstp, nnew
106 real(r8),
intent(in) :: zice(lbi:,lbj:)
108 real(r8),
intent(in) :: zt_avg1(lbi:,lbj:)
109 real(r8),
intent(inout) :: h(lbi:,lbj:)
110 real(r8),
intent(out) :: hz(lbi:,lbj:,:)
111 real(r8),
intent(out) :: z_r(lbi:,lbj:,:)
112 real(r8),
intent(out) :: z_w(lbi:,lbj:,0:)
115 real(r8),
intent(in) :: zice(lbi:ubi,lbj:ubj)
117 real(r8),
intent(in) :: zt_avg1(lbi:ubi,lbj:ubj)
118 real(r8),
intent(inout) :: h(lbi:ubi,lbj:ubj)
119 real(r8),
intent(out) :: hz(lbi:ubi,lbj:ubj,
n(ng))
120 real(r8),
intent(out) :: z_r(lbi:ubi,lbj:ubj,
n(ng))
121 real(r8),
intent(out) :: z_w(lbi:ubi,lbj:ubj,0:
n(ng))
128 real(r8) :: cff_r, cff1_r, cff2_r, cff_w, cff1_w, cff2_w
129 real(r8) :: hinv, hwater, z_r0, z_w0
131 real(r8),
parameter :: eps = 1.0e-14_r8
134# include "set_bounds.h"
151 IF (h(i,j).eq.0.0_r8)
THEN
165 hwater=hwater-abs(zice(i,j))
168 z_w0=cff_w+cff1_w*hwater
169 z_w(i,j,k)=z_w0+zt_avg1(i,j)*(1.0_r8+z_w0*hinv)
170 z_r0=cff_r+cff1_r*hwater
171 z_r(i,j,k)=z_r0+zt_avg1(i,j)*(1.0_r8+z_r0*hinv)
173 z_w(i,j,k)=z_w(i,j,k)-abs(zice(i,j))
174 z_r(i,j,k)=z_r(i,j,k)-abs(zice(i,j))
176 hz(i,j,k)=z_w(i,j,k)-z_w(i,j,k-1)
196 IF (h(i,j).eq.0.0_r8)
THEN
210 hwater=hwater-abs(zice(i,j))
212 hinv=1.0_r8/(
hc(ng)+hwater)
213 cff2_r=(cff_r+cff1_r*hwater)*hinv
214 cff2_w=(cff_w+cff1_w*hwater)*hinv
216 z_w(i,j,k)=zt_avg1(i,j)+(zt_avg1(i,j)+hwater)*cff2_w
217 z_r(i,j,k)=zt_avg1(i,j)+(zt_avg1(i,j)+hwater)*cff2_r
219 z_w(i,j,k)=z_w(i,j,k)-abs(zice(i,j))
220 z_r(i,j,k)=z_r(i,j,k)-abs(zice(i,j))
222 hz(i,j,k)=z_w(i,j,k)-z_w(i,j,k-1)
234 & lbi, ubi, lbj, ubj, &
237 & lbi, ubi, lbj, ubj, 0,
n(ng), &
240 & lbi, ubi, lbj, ubj, 1,
n(ng), &
243 & lbi, ubi, lbj, ubj, 1,
n(ng), &
249 & lbi, ubi, lbj, ubj, &
254 & lbi, ubi, lbj, ubj, 0,
n(ng), &
259 & lbi, ubi, lbj, ubj, 1,
n(ng), &
265# ifdef ADJUST_BOUNDARY
289 integer,
intent(in) :: ng, tile, model
293 character (len=*),
parameter :: myfile = &
294 & __FILE__//
", set_depth0"
299 CALL wclock_on (ng, model, 12, __line__, myfile)
302 & lbi, ubi, lbj, ubj, &
303 & imins, imaxs, jmins, jmaxs, &
311 CALL wclock_off (ng, model, 12, __line__, myfile)
319 & LBi, UBi, LBj, UBj, &
320 & IminS, ImaxS, JminS, JmaxS, &
339 integer,
intent(in) :: ng, tile, model
340 integer,
intent(in) :: lbi, ubi, lbj, ubj
341 integer,
intent(in) :: imins, imaxs, jmins, jmaxs
345 real(r8),
intent(in) :: zice(lbi:,lbj:)
347 real(r8),
intent(inout) :: h(lbi:,lbj:)
348 real(r8),
intent(out) :: z_r(lbi:,lbj:,:)
349 real(r8),
intent(out) :: z_w(lbi:,lbj:,0:)
352 real(r8),
intent(in) :: zice(lbi:ubi,lbj:ubj)
354 real(r8),
intent(inout) :: h(lbi:ubi,lbj:ubj)
355 real(r8),
intent(out) :: z_r(lbi:ubi,lbj:ubj,
n(ng))
356 real(r8),
intent(out) :: z_w(lbi:ubi,lbj:ubj,0:
n(ng))
363 real(r8) :: cff_r, cff1_r, cff2_r, cff_w, cff1_w, cff2_w
364 real(r8) :: hinv, hwater, z_r0, z_w0
366 real(r8),
parameter :: zeta0 = 0.0_r8
368# include "set_bounds.h"
396 hwater=hwater-abs(zice(i,j))
399 z_w0=cff_w+cff1_w*hwater
400 z_w(i,j,k)=z_w0+zeta0*(1.0_r8+z_w0*hinv)
401 z_r0=cff_r+cff1_r*hwater
402 z_r(i,j,k)=z_r0+zeta0*(1.0_r8+z_r0*hinv)
404 z_w(i,j,k)=z_w(i,j,k)-abs(zice(i,j))
405 z_r(i,j,k)=z_r(i,j,k)-abs(zice(i,j))
437 hwater=hwater-abs(zice(i,j))
439 hinv=1.0_r8/(
hc(ng)+hwater)
440 cff2_r=(cff_r+cff1_r*hwater)*hinv
441 cff2_w=(cff_w+cff1_w*hwater)*hinv
443 z_w(i,j,k)=zeta0+(zeta0+hwater)*cff2_w
444 z_r(i,j,k)=zeta0+(zeta0+hwater)*cff2_r
446 z_w(i,j,k)=z_w(i,j,k)-abs(zice(i,j))
447 z_r(i,j,k)=z_r(i,j,k)-abs(zice(i,j))
460 & lbi, ubi, lbj, ubj, 0,
n(ng), &
463 & lbi, ubi, lbj, ubj, 1,
n(ng), &
469 & lbi, ubi, lbj, ubj, 0,
n(ng), &
474 & lbi, ubi, lbj, ubj, 1,
n(ng), &
483# ifdef ADJUST_BOUNDARY
494 integer,
intent(in) :: ng, tile, model
498 character (len=*),
parameter :: myfile = &
499 & __FILE__//
", set_depth_bry"
504 CALL wclock_on (ng, model, 12, __line__, myfile)
507 & lbi, ubi, lbj, ubj, lbij, ubij, &
508 & imins, imaxs, jmins, jmaxs, &
515 CALL wclock_off (ng, model, 12, __line__, myfile)
523 & LBi, UBi, LBj, UBj, LBij, UBij, &
524 & IminS, ImaxS, JminS, JmaxS, &
543 integer,
intent(in) :: ng, tile, model
544 integer,
intent(in) :: LBi, UBi, LBj, UBj, LBij, UBij
545 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
548 real(r8),
intent(in) :: h(LBi:,LBj:)
550 real(r8),
intent(in) :: zice(LBi:,LBj:)
552 real(r8),
intent(out) :: Hz_bry(LBij:,:,:)
554 real(r8),
intent(in) :: h(LBi:UBi,LBj:UBj)
556 real(r8),
intent(in) :: zice(LBi:UBi,LBj:UBj)
558 real(r8),
intent(out) :: Hz_bry(LBij:UBij,N(ng),4)
563 integer :: i, ibry, j, k
565 real(r8) :: cff_w, cff1_w, cff2_w
566 real(r8) :: hinv, hwater, z_w0
568 real(r8),
dimension(0:N(ng)) :: Zw
570# include "set_bounds.h"
586 &
domain(ng)%Western_Edge(tile))
THEN
591 hwater=hwater-abs(zice(i,j))
598 z_w0=cff_w+cff1_w*hwater
599 zw(k)=z_w0+
boundary(ng)%zeta_west(j)*(1.0_r8+z_w0*hinv)
601 zw(k)=zw(k)-abs(zice(i,j))
603 hz_bry(j,k,
iwest)=zw(k)-zw(k-1)
609 &
domain(ng)%Eastern_Edge(tile))
THEN
614 hwater=hwater-abs(zice(i,j))
621 z_w0=cff_w+cff1_w*hwater
622 zw(k)=z_w0+
boundary(ng)%zeta_east(j)*(1.0_r8+z_w0*hinv)
624 zw(k)=zw(k)-abs(zice(i,j))
626 hz_bry(j,k,
ieast)=zw(k)-zw(k-1)
632 &
domain(ng)%Southern_Edge(tile))
THEN
637 hwater=hwater-abs(zice(i,j))
644 z_w0=cff_w+cff1_w*hwater
645 zw(k)=z_w0+
boundary(ng)%zeta_south(i)*(1.0_r8+z_w0*hinv)
647 zw(k)=zw(k)-abs(zice(i,j))
649 hz_bry(i,k,
isouth)=zw(k)-zw(k-1)
655 &
domain(ng)%Northern_Edge(tile))
THEN
660 hwater=hwater-abs(zice(i,j))
667 z_w0=cff_w+cff1_w*hwater
668 zw(k)=z_w0+
boundary(ng)%zeta_north(i)*(1.0_r8+z_w0*hinv)
670 zw(k)=zw(k)-abs(zice(i,j))
672 hz_bry(i,k,
inorth)=zw(k)-zw(k-1)
691 &
domain(ng)%Western_Edge(tile))
THEN
696 hwater=hwater-abs(zice(i,j))
698 hinv=1.0_r8/(
hc(ng)+hwater)
703 cff2_w=(cff_w+cff1_w*hwater)*hinv
705 & (
boundary(ng)%zeta_west(j)+hwater)*cff2_w
707 zw(k)=zw(k)-abs(zice(i,j))
709 hz_bry(j,k,
iwest)=zw(k)-zw(k-1)
715 &
domain(ng)%Eastern_Edge(tile))
THEN
720 hwater=hwater-abs(zice(i,j))
722 hinv=1.0_r8/(
hc(ng)+hwater)
727 cff2_w=(cff_w+cff1_w*hwater)*hinv
729 & (
boundary(ng)%zeta_east(j)+hwater)*cff2_w
731 zw(k)=zw(k)-abs(zice(i,j))
733 hz_bry(j,k,
ieast)=zw(k)-zw(k-1)
739 &
domain(ng)%Southern_Edge(tile))
THEN
744 hwater=hwater-abs(zice(i,j))
746 hinv=1.0_r8/(
hc(ng)+hwater)
751 cff2_w=(cff_w+cff1_w*hwater)*hinv
753 & (
boundary(ng)%zeta_south(i)+hwater)*cff2_w
755 zw(k)=zw(k)-abs(zice(i,j))
757 hz_bry(i,k,
isouth)=zw(k)-zw(k-1)
763 &
domain(ng)%Northern_Edge(tile))
THEN
768 hwater=hwater-abs(zice(i,j))
770 hinv=1.0_r8/(
hc(ng)+hwater)
775 cff2_w=(cff_w+cff1_w*hwater)*hinv
777 & (
boundary(ng)%zeta_north(i)+hwater)*cff2_w
779 zw(k)=zw(k)-abs(zice(i,j))
781 hz_bry(i,k,
inorth)=zw(k)-zw(k-1)
795 & lbij, ubij, 1, n(ng), &
subroutine exchange_r2d_tile(ng, tile, lbi, ubi, lbj, ubj, a)
subroutine exchange_r3d_tile(ng, tile, lbi, ubi, lbj, ubj, lbk, ubk, a)
subroutine exchange_w3d_tile(ng, tile, lbi, ubi, lbj, ubj, lbk, ubk, a)
type(t_boundary), dimension(:), allocatable boundary
type(t_coupling), dimension(:), allocatable coupling
type(t_grid), dimension(:), allocatable grid
integer, dimension(:), allocatable n
type(t_bounds), dimension(:), allocatable bounds
type(t_lbc), dimension(:,:,:), allocatable lbc
type(t_domain), dimension(:), allocatable domain
integer, parameter r2dvar
logical, dimension(:), allocatable ewperiodic
logical, dimension(:), allocatable nsperiodic
real(dp), dimension(:), allocatable hc
integer, parameter isouth
type(t_scalars), dimension(:), allocatable scalars
integer, parameter inorth
integer, dimension(:), allocatable vtransform
integer, dimension(:), allocatable nnew
integer, dimension(:), allocatable nstp
subroutine mp_exchange2d(ng, tile, model, nvar, lbi, ubi, lbj, ubj, nghost, ew_periodic, ns_periodic, a, b, c, d)
subroutine mp_exchange3d(ng, tile, model, nvar, lbi, ubi, lbj, ubj, lbk, ubk, nghost, ew_periodic, ns_periodic, a, b, c, d)
subroutine mp_exchange3d_bry(ng, tile, model, nvar, boundary, lbij, ubij, lbk, ubk, nghost, ew_periodic, ns_periodic, a, b, c, d)
subroutine set_depth_bry_tile(ng, tile, model, lbi, ubi, lbj, ubj, lbij, ubij, imins, imaxs, jmins, jmaxs, h, zice, hz_bry)
subroutine, public set_depth_tile(ng, tile, model, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, nstp, nnew, h, zice, zt_avg1, hz, z_r, z_w)
subroutine, public set_depth(ng, tile, model)
subroutine, public set_depth_bry(ng, tile, model)
subroutine, public set_depth0(ng, tile, model)
subroutine, public set_depth0_tile(ng, tile, model, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, h, zice, z_r, z_w)
recursive subroutine wclock_off(ng, model, region, line, routine)
recursive subroutine wclock_on(ng, model, region, line, routine)