| 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)) |
| 124 |
|
|
| 125 |
ENDIF |
ENDIF |
| 126 |
|
|
| 127 |
if (streamice_ufacemask(i,j,bi,bj).eq.2.0) THEN |
! if (streamice_ufacemask(i,j,bi,bj).eq.2.0) THEN |
| 128 |
total_vol_out = total_vol_out + |
! total_vol_out = total_vol_out + |
| 129 |
& hflux_x (i,j,bi,bj) * time_step |
! & hflux_x (i,j,bi,bj) * time_step |
| 130 |
ENDIF |
! ENDIF |
| 131 |
|
|
| 132 |
ENDIF |
ENDIF |
| 133 |
ENDDO |
ENDDO |
| 156 |
ENDDO |
ENDDO |
| 157 |
ENDDO |
ENDDO |
| 158 |
|
|
| 159 |
! PRINT *, "TOTAL VOLUME OUT: ", total_vol_out |
|
| 160 |
|
|
| 161 |
#endif |
#endif |
| 162 |
RETURN |
RETURN |