90 & bed_thick, tl_bed_thick, &
91# endif
92 & huon, hvom, z_w, &
93 & tl_huon, tl_hvom, tl_z_w, &
94 & w, tl_w)
95
96
100
102# ifdef DISTRIBUTE
104# endif
105
106
107
108 integer, intent(in) :: ng, tile, model
109 integer, intent(in) :: LBi, UBi, LBj, UBj
110 integer, intent(in) :: IminS, ImaxS, JminS, JmaxS
111# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
112 integer, intent(in) :: nstp, nnew
113# endif
114
115# ifdef ASSUMED_SHAPE
116# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
117 real(r8), intent(in) :: omn(LBi:,LBj:)
118 real(r8), intent(in):: bed_thick(LBi:,LBj:,:)
119 real(r8), intent(in):: tl_bed_thick(LBi:,LBj:,:)
120# endif
121 real(r8), intent(in) :: Huon(LBi:,LBj:,:)
122 real(r8), intent(in) :: Hvom(LBi:,LBj:,:)
123 real(r8), intent(in) :: z_w(LBi:,LBj:,0:)
124 real(r8), intent(in) :: tl_Huon(LBi:,LBj:,:)
125 real(r8), intent(in) :: tl_Hvom(LBi:,LBj:,:)
126 real(r8), intent(in) :: tl_z_w(LBi:,LBj:,0:)
127
128 real(r8), intent(out) :: W(LBi:,LBj:,0:)
129 real(r8), intent(out) :: tl_W(LBi:,LBj:,0:)
130
131# else
132
133# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
134 real(r8), intent(in) :: omn(LBi:UBi,LBj:UBj)
135 real(r8), intent(in):: bed_thick(LBi:UBi,LBj:UBj,3)
136 real(r8), intent(in):: tl_bed_thick(LBi:UBi,LBj:UBj,3)
137# endif
138 real(r8), intent(in) :: Huon(LBi:UBi,LBj:UBj,N(ng))
139 real(r8), intent(in) :: Hvom(LBi:UBi,LBj:UBj,N(ng))
140 real(r8), intent(in) :: z_w(LBi:UBi,LBj:UBj,0:N(ng))
141 real(r8), intent(in) :: tl_Huon(LBi:UBi,LBj:UBj,N(ng))
142 real(r8), intent(in) :: tl_Hvom(LBi:UBi,LBj:UBj,N(ng))
143 real(r8), intent(in) :: tl_z_w(LBi:UBi,LBj:UBj,0:N(ng))
144
145 real(r8), intent(out) :: W(LBi:UBi,LBj:UBj,0:N(ng))
146 real(r8), intent(out) :: tl_W(LBi:UBi,LBj:UBj,0:N(ng))
147# endif
148
149
150
151 integer :: i, ii, is, j, jj, k
152 real(r8) :: cff, tl_cff
153# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
154 real(r8) :: cff1
155# endif
156 real(r8), dimension(IminS:ImaxS) :: wrk
157 real(r8), dimension(IminS:ImaxS) :: tl_wrk
158
159# include "set_bounds.h"
160
161
162
163
164
165
166
167
168
169
170# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
172# endif
173 DO j=jstr,jend
174 DO i=istr,iend
175# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
176 w(i,j,0)=-cff1*(bed_thick(i,j,nstp)- &
177 & bed_thick(i,j,nnew))*omn(i,j)
178 tl_w(i,j,0)=-cff1*(tl_bed_thick(i,j,nstp)- &
179 & tl_bed_thick(i,j,nnew))*omn(i,j)
180# else
181 w(i,j,0)=0.0_r8
182 tl_w(i,j,0)=0.0_r8
183# endif
184 END DO
185
186
187
189 DO i=istr,iend
190 tl_w(i,j,k)=0.0_r8
191 END DO
192 END DO
194 DO i=istr,iend
195 w(i,j,k)=w(i,j,k-1)- &
196 & (huon(i+1,j,k)-huon(i,j,k)+ &
197 & hvom(i,j+1,k)-hvom(i,j,k))
198 tl_w(i,j,k)=tl_w(i,j,k-1)- &
199 & (tl_huon(i+1,j,k)-tl_huon(i,j,k)+ &
200 & tl_hvom(i,j+1,k)-tl_hvom(i,j,k))
201 END DO
202 END DO
203
204
205
206
207
208
209
210
211
212
215 IF (int(
sources(ng)%Dsrc(is)).eq.2)
THEN
218 IF (((istrr.le.ii).and.(ii.le.iendr)).and. &
219 & ((jstrr.le.jj).and.(jj.le.jendr)).and. &
220 & (j.eq.jj)) THEN
222 w(ii,jj,k)=w(ii,jj,k-1)- &
223 & (huon(ii+1,jj,k)-huon(ii,jj,k)+ &
224 & hvom(ii,jj+1,k)-hvom(ii,jj,k))+ &
226 tl_w(ii,jj,k)=tl_w(ii,jj,k-1)- &
227 & (tl_huon(ii+1,jj,k)-tl_huon(ii,jj,k)+ &
228 & tl_hvom(ii,jj+1,k)-tl_hvom(ii,jj,k))+ &
230 END DO
231 END IF
232 END IF
233 END DO
234 END IF
235
236 DO i=istr,iend
237 cff=1.0_r8/(z_w(i,j,
n(ng))-z_w(i,j,0))
238 tl_cff=-cff*cff*(tl_z_w(i,j,
n(ng))-tl_z_w(i,j,0))+ &
239# ifdef TL_IOMS
240 & 2.0_r8*cff
241# endif
242 wrk(i)=cff*w(i,j,
n(ng))
243 tl_wrk(i)=tl_cff*w(i,j,
n(ng))+cff*tl_w(i,j,
n(ng))- &
244# ifdef TL_IOMS
245 & wrk(i)
246# endif
247 END DO
248
249
250
251
252
253
254
255
257 DO i=istr,iend
258 w(i,j,k)=w(i,j,k)- &
259 & wrk(i)*(z_w(i,j,k)-z_w(i,j,0))
260 tl_w(i,j,k)=tl_w(i,j,k)- &
261 & tl_wrk(i)*(z_w(i,j,k)-z_w(i,j,0))- &
262 & wrk(i)*(tl_z_w(i,j,k)-tl_z_w(i,j,0))+ &
263# ifdef TL_IOMS
264 & wrk(i)*(z_w(i,j,k)-z_w(i,j,0))
265# endif
266 END DO
267 END DO
268 DO i=istr,iend
270 tl_w(i,j,
n(ng))=0.0_r8
271 END DO
272 END DO
273
274
275
277 & lbi, ubi, lbj, ubj, 0,
n(ng), &
278 & w)
280 & lbi, ubi, lbj, ubj, 0,
n(ng), &
281 & tl_w)
282
283# ifdef DISTRIBUTE
285 & lbi, ubi, lbj, ubj, 0,
n(ng), &
288 & w)
290 & lbi, ubi, lbj, ubj, 0,
n(ng), &
293 & tl_w)
294# endif
295
296 RETURN
subroutine bc_w3d_tile(ng, tile, lbi, ubi, lbj, ubj, lbk, ubk, a)
integer, dimension(:), allocatable n
real(dp), dimension(:), allocatable dt
logical, dimension(:), allocatable ewperiodic
logical, dimension(:), allocatable nsperiodic
logical, dimension(:), allocatable lwsrc
type(t_sources), dimension(:), allocatable sources
integer, dimension(:), allocatable nsrc
subroutine mp_exchange3d(ng, tile, model, nvar, lbi, ubi, lbj, ubj, lbk, ubk, nghost, ew_periodic, ns_periodic, a, b, c, d)