35 |
INTEGER i, j, bi, bj, Gi, Gj, k |
INTEGER i, j, bi, bj, Gi, Gj, k |
36 |
_RL uface, phi |
_RL uface, phi |
37 |
_RL stencil (-1:1) |
_RL stencil (-1:1) |
38 |
LOGICAL H0_valid ! there are valid cells to calculate a |
LOGICAL H0_valid(1-Olx:sNx+Olx,1-Oly:sNy+Oly,nSx,nSy) |
39 |
|
! there are valid cells to calculate a |
40 |
! slope-limited 2nd order flux |
! slope-limited 2nd order flux |
41 |
_RL SLOPE_LIMITER |
_RL SLOPE_LIMITER |
42 |
_RL total_vol_out |
_RL total_vol_out |
43 |
external SLOPE_LIMITER |
external SLOPE_LIMITER |
44 |
|
|
45 |
total_vol_out = 0.0 |
total_vol_out = 0.0 |
46 |
|
|
47 |
DO bj=myByLo(myThid),myByHi(myThid) |
DO bj=myByLo(myThid),myByHi(myThid) |
48 |
DO bi=myBxLo(myThid),myBxHi(myThid) |
DO bi=myBxLo(myThid),myBxHi(myThid) |
49 |
DO j=1-3,sNy+3 |
DO j=1-oly,sNy+oly |
50 |
|
DO i=1-olx,sNx+olx |
51 |
|
H0_valid(i,j,bi,bj)=.false. |
52 |
|
ENDDO |
53 |
|
ENDDO |
54 |
|
ENDDO |
55 |
|
ENDDO |
56 |
|
|
57 |
|
DO bj=myByLo(myThid),myByHi(myThid) |
58 |
|
DO bi=myBxLo(myThid),myBxHi(myThid) |
59 |
|
DO j=1-2,sNy+2 |
60 |
Gj = (myYGlobalLo-1)+(bj-1)*sNy+j |
Gj = (myYGlobalLo-1)+(bj-1)*sNy+j |
61 |
IF ((Gj .ge. 1) .and. (Gj .le. Ny)) THEN |
IF ((Gj .ge. 1) .and. (Gj .le. Ny)) THEN |
62 |
DO i=1-2,sNx+3 |
DO i=1-1,sNx+2 |
63 |
C THESE ARRAY BOUNDS INSURE THAT AFTER THIS STEP, |
C THESE ARRAY BOUNDS INSURE THAT AFTER THIS STEP, |
64 |
C VALUES WILL BE RELIABLE 2 GRID CELLS OUT IN THE |
C VALUES WILL BE RELIABLE 2 GRID CELLS OUT IN THE |
65 |
C X DIRECTION AND 3 CELLS OUT IN THE Y DIR |
C X DIRECTION AND 3 CELLS OUT IN THE Y DIR |
82 |
stencil (k) = h(i+k-1,j,bi,bj) |
stencil (k) = h(i+k-1,j,bi,bj) |
83 |
ENDDO |
ENDDO |
84 |
IF ((STREAMICE_hmask(i,j,bi,bj).eq.1.0) .and. |
IF ((STREAMICE_hmask(i,j,bi,bj).eq.1.0) .and. |
85 |
& (STREAMICE_hmask(i-2,j,bi,bj).eq.1.0)) H0_valid=.true. |
& (STREAMICE_hmask(i-2,j,bi,bj).eq.1.0)) |
86 |
|
& H0_valid(i,j,bi,bj)=.true. |
87 |
|
|
88 |
IF ((Gi.eq.1).and.(STREAMICE_hmask(i-1,j,bi,bj).eq.3.0)) |
IF ((Gi.eq.1).and.(STREAMICE_hmask(i-1,j,bi,bj).eq.3.0)) |
89 |
& THEN ! we are at western bdry and there is a thick. bdry cond |
& THEN ! we are at western bdry and there is a thick. bdry cond |
90 |
hflux_x (i,j,bi,bj) = h(i-1,j,bi,bj) * uface |
hflux_x (i,j,bi,bj) = h(i-1,j,bi,bj) * uface |
91 |
ELSEIF (H0_valid) THEN |
ELSEIF (H0_valid(i,j,bi,bj)) THEN |
92 |
phi = SLOPE_LIMITER ( |
phi = SLOPE_LIMITER ( |
93 |
& stencil(0)-stencil(-1), |
& stencil(0)-stencil(-1), |
94 |
& stencil(1)-stencil(0)) |
& stencil(1)-stencil(0)) |
104 |
stencil (k) = h(i-k,j,bi,bj) |
stencil (k) = h(i-k,j,bi,bj) |
105 |
ENDDO |
ENDDO |
106 |
IF ((STREAMICE_hmask(i-1,j,bi,bj).eq.1.0) .and. |
IF ((STREAMICE_hmask(i-1,j,bi,bj).eq.1.0) .and. |
107 |
& (STREAMICE_hmask(i+1,j,bi,bj).eq.1.0)) H0_valid=.true. |
& (STREAMICE_hmask(i+1,j,bi,bj).eq.1.0)) |
108 |
|
& H0_valid(i,j,bi,bj)=.true. |
109 |
|
|
110 |
IF ((Gi.eq.Nx).and.(STREAMICE_hmask(i+1,j,bi,bj).eq.3.0)) |
IF ((Gi.eq.Nx).and.(STREAMICE_hmask(i+1,j,bi,bj).eq.3.0)) |
111 |
& THEN ! we are at western bdry and there is a thick. bdry cond |
& THEN ! we are at western bdry and there is a thick. bdry cond |
112 |
hflux_x (i,j,bi,bj) = h(i+1,j,bi,bj) * uface |
hflux_x (i,j,bi,bj) = h(i+1,j,bi,bj) * uface |
113 |
ELSEIF (H0_valid) THEN |
ELSEIF (H0_valid(i,j,bi,bj)) THEN |
114 |
phi = SLOPE_LIMITER ( |
phi = SLOPE_LIMITER ( |
115 |
& stencil(0)-stencil(-1), |
& stencil(0)-stencil(-1), |
116 |
& stencil(1)-stencil(0)) |
& stencil(1)-stencil(0)) |