74 |
Gj = (myYGlobalLo-1)+(bj-1)*sNy+j |
Gj = (myYGlobalLo-1)+(bj-1)*sNy+j |
75 |
|
|
76 |
IF (STREAMICE_hmask(i,j,bi,bj).eq.1.0) THEN |
IF (STREAMICE_hmask(i,j,bi,bj).eq.1.0) THEN |
77 |
IF (Gi .eq. 1) THEN |
|
78 |
|
! we are in an "active" cell |
79 |
|
|
80 |
|
IF (Gi.eq.1.AND..NOT.STREAMICE_EW_periodic) THEN |
81 |
|
|
82 |
|
! western boundary - only one sided possible |
83 |
|
|
84 |
IF (STREAMICE_hmask(i+1,j,bi,bj).eq.1.0) THEN |
IF (STREAMICE_hmask(i+1,j,bi,bj).eq.1.0) THEN |
85 |
|
|
86 |
|
! cell to east is active |
87 |
|
|
88 |
sx = (surf_el_streamice(i+1,j,bi,bj)- |
sx = (surf_el_streamice(i+1,j,bi,bj)- |
89 |
& surf_el_streamice(i,j,bi,bj))/dxC(i+1,j,bi,bj) |
& surf_el_streamice(i,j,bi,bj))/dxC(i+1,j,bi,bj) |
90 |
ELSE |
ELSE |
91 |
|
|
92 |
|
! cell to east is empty |
93 |
|
|
94 |
sx = 0. _d 0 |
sx = 0. _d 0 |
95 |
ENDIF |
ENDIF |
96 |
ELSEIF (Gi .eq. Nx) THEN |
|
97 |
|
ELSEIF (Gi.eq.Nx.AND..NOT.STREAMICE_EW_periodic) THEN |
98 |
|
|
99 |
|
! eastern boundary - only one sided possible |
100 |
|
|
101 |
IF (STREAMICE_hmask(i-1,j,bi,bj).eq.1.0) THEN |
IF (STREAMICE_hmask(i-1,j,bi,bj).eq.1.0) THEN |
102 |
|
|
103 |
|
! cell to west is active |
104 |
|
|
105 |
sx = (surf_el_streamice(i,j,bi,bj)- |
sx = (surf_el_streamice(i,j,bi,bj)- |
106 |
& surf_el_streamice(i-1,j,bi,bj))/dxC(i,j,bi,bj) |
& surf_el_streamice(i-1,j,bi,bj))/dxC(i,j,bi,bj) |
107 |
ELSE |
ELSE |
108 |
|
|
109 |
|
! cell to west is inactive |
110 |
|
|
111 |
sx = 0. _d 0 |
sx = 0. _d 0 |
112 |
ENDIF |
ENDIF |
113 |
|
|
114 |
ELSE |
ELSE |
115 |
|
|
116 |
|
! interior (west-east) cell |
117 |
|
|
118 |
IF (STREAMICE_hmask(i+1,j,bi,bj).eq.1.0) THEN |
IF (STREAMICE_hmask(i+1,j,bi,bj).eq.1.0) THEN |
119 |
|
|
120 |
|
! cell to east is active |
121 |
|
|
122 |
diffx = diffx + dxC(i+1,j,bi,bj) |
diffx = diffx + dxC(i+1,j,bi,bj) |
123 |
sx = surf_el_streamice(i+1,j,bi,bj) |
sx = surf_el_streamice(i+1,j,bi,bj) |
124 |
ELSE |
ELSE |
125 |
sx = surf_el_streamice(i,j,bi,bj) |
sx = surf_el_streamice(i,j,bi,bj) |
126 |
ENDIF |
ENDIF |
127 |
IF (STREAMICE_hmask(i-1,j,bi,bj).eq.1.0) THEN |
IF (STREAMICE_hmask(i-1,j,bi,bj).eq.1.0) THEN |
128 |
|
|
129 |
|
! cell to west is active |
130 |
|
|
131 |
diffx = diffx + dxC(i,j,bi,bj) |
diffx = diffx + dxC(i,j,bi,bj) |
132 |
sx = sx - surf_el_streamice(i-1,j,bi,bj) |
sx = sx - surf_el_streamice(i-1,j,bi,bj) |
133 |
ELSE |
ELSE |
138 |
ELSE |
ELSE |
139 |
sx = 0. _d 0 |
sx = 0. _d 0 |
140 |
ENDIF |
ENDIF |
141 |
|
|
142 |
ENDIF |
ENDIF |
143 |
|
|
144 |
|
|
145 |
|
|
146 |
IF (Gj .eq. 1) THEN |
IF (Gj.eq.1.AND..NOT.STREAMICE_NS_periodic) THEN |
147 |
IF (STREAMICE_hmask(i,j+1,bi,bj).eq.1.0) THEN |
IF (STREAMICE_hmask(i,j+1,bi,bj).eq.1.0) THEN |
148 |
sy = (surf_el_streamice(i,j+1,bi,bj)- |
sy = (surf_el_streamice(i,j+1,bi,bj)- |
149 |
& surf_el_streamice(i,j,bi,bj))/dyC(i,j+1,bi,bj) |
& surf_el_streamice(i,j,bi,bj))/dyC(i,j+1,bi,bj) |
150 |
ELSE |
ELSE |
151 |
sy = 0. _d 0 |
sy = 0. _d 0 |
152 |
ENDIF |
ENDIF |
153 |
ELSEIF (Gj .eq. Ny) THEN |
ELSEIF (Gj.eq.Ny.AND..NOT.STREAMICE_NS_periodic) THEN |
154 |
IF (STREAMICE_hmask(i,j-1,bi,bj).eq.1.0) THEN |
IF (STREAMICE_hmask(i,j-1,bi,bj).eq.1.0) THEN |
155 |
sy = (surf_el_streamice(i,j,bi,bj)- |
sy = (surf_el_streamice(i,j,bi,bj)- |
156 |
& surf_el_streamice(i,j-1,bi,bj))/dyC(i,j,bi,bj) |
& surf_el_streamice(i,j-1,bi,bj))/dyC(i,j,bi,bj) |
182 |
DO l=0,1 |
DO l=0,1 |
183 |
IF (STREAMICE_umask(i+k,j+l,bi,bj).eq.1.0) THEN |
IF (STREAMICE_umask(i+k,j+l,bi,bj).eq.1.0) THEN |
184 |
taudx_SI(i+k,j+l,bi,bj) = taudx_SI(i+k,j+l,bi,bj) - |
taudx_SI(i+k,j+l,bi,bj) = taudx_SI(i+k,j+l,bi,bj) - |
185 |
& 0.25 * streamice_density * gravity * sx * |
& 0.25 * streamice_density * gravity * |
186 |
|
& (streamice_bg_surf_slope_x+sx) * |
187 |
& H_streamice(i,j,bi,bj) * rA(i,j,bi,bj) |
& H_streamice(i,j,bi,bj) * rA(i,j,bi,bj) |
188 |
|
! & (streamice_bg_surf_slope_x) * |
189 |
|
! & 1000. * rA(i,j,bi,bj) |
190 |
taudy_SI(i+k,j+l,bi,bj) = taudy_SI(i+k,j+l,bi,bj) - |
taudy_SI(i+k,j+l,bi,bj) = taudy_SI(i+k,j+l,bi,bj) - |
191 |
& 0.25 * streamice_density * gravity * sy * |
& 0.25 * streamice_density * gravity * |
192 |
|
& (streamice_bg_surf_slope_y+sy) * |
193 |
& H_streamice(i,j,bi,bj) * rA(i,j,bi,bj) |
& H_streamice(i,j,bi,bj) * rA(i,j,bi,bj) |
194 |
|
|
195 |
ENDIF |
ENDIF |
197 |
ENDDO |
ENDDO |
198 |
|
|
199 |
IF (float_frac_streamice(i,j,bi,bj) .eq. 1.0) then |
IF (float_frac_streamice(i,j,bi,bj) .eq. 1.0) then |
200 |
|
#ifdef USE_ALT_RLOW |
201 |
|
neu_val = .5 * gravity * |
202 |
|
& (streamice_density * H_streamice (i,j,bi,bj) ** 2 - |
203 |
|
& streamice_density_ocean_avg * R_low_si(i,j,bi,bj) ** 2) |
204 |
|
#else |
205 |
neu_val = .5 * gravity * |
neu_val = .5 * gravity * |
206 |
& (streamice_density * H_streamice (i,j,bi,bj) ** 2 - |
& (streamice_density * H_streamice (i,j,bi,bj) ** 2 - |
207 |
& streamice_density_ocean_avg * R_low(i,j,bi,bj) ** 2) |
& streamice_density_ocean_avg * R_low(i,j,bi,bj) ** 2) |
208 |
|
#endif |
209 |
ELSE |
ELSE |
210 |
neu_val = .5 * gravity * |
neu_val = .5 * gravity * |
211 |
& (1-streamice_density/streamice_density_ocean_avg) * |
& (1-streamice_density/streamice_density_ocean_avg) * |