94
95
98
100# ifdef DISTRIBUTE
102# endif
103
104
105
106 integer, intent(in) :: ng, tile, model
107 integer, intent(in) :: LBi, UBi, LBj, UBj
108 integer, intent(in) :: IminS, ImaxS, JminS, JmaxS
109 integer, intent(in) :: nrhs
110
111# ifdef ASSUMED_SHAPE
112 real(r8), intent(in) :: u(LBi:,LBj:,:,:)
113 real(r8), intent(in) :: v(LBi:,LBj:,:,:)
114# ifdef WEC_MELLOR
115 real(r8), intent(in) :: u_stokes(LBi:,LBj:,:)
116 real(r8), intent(in) :: v_stokes(LBi:,LBj:,:)
117# endif
118 real(r8), intent(in) :: Hz(LBi:,LBj:,:)
119 real(r8), intent(in) :: om_v(LBi:,LBj:)
120 real(r8), intent(in) :: on_u(LBi:,LBj:)
121
122 real(r8), intent(inout) :: ad_u(LBi:,LBj:,:,:)
123 real(r8), intent(inout) :: ad_v(LBi:,LBj:,:,:)
124# ifdef WEC_MELLOR
125 real(r8), intent(inout) :: ad_u_stokes(LBi:,LBj:,:)
126 real(r8), intent(inout) :: ad_v_stokes(LBi:,LBj:,:)
127# endif
128 real(r8), intent(inout) :: ad_Hz(LBi:,LBj:,:)
129
130 real(r8), intent(inout) :: ad_Huon(LBi:,LBj:,:)
131 real(r8), intent(inout) :: ad_Hvom(LBi:,LBj:,:)
132# else
133 real(r8), intent(in) :: u(LBi:UBi,LBj:UBj,N(ng),2)
134 real(r8), intent(in) :: v(LBi:UBi,LBj:UBj,N(ng),2)
135# ifdef WEC_MELLOR
136 real(r8), intent(in) :: u_stokes(LBi:UBi,LBj:UBj,N(ng))
137 real(r8), intent(in) :: v_stokes(LBi:UBi,LBj:UBj,N(ng))
138# endif
139 real(r8), intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
140 real(r8), intent(in) :: om_v(LBi:UBi,LBj:UBj)
141 real(r8), intent(in) :: on_u(LBi:UBi,LBj:UBj)
142
143 real(r8), intent(inout) :: ad_u(LBi:UBi,LBj:UBj,N(ng),2)
144 real(r8), intent(inout) :: ad_v(LBi:UBi,LBj:UBj,N(ng),2)
145# ifdef WEC_MELLOR
146 real(r8), intent(inout) :: ad_u_stokes(LBi:UBi,LBj:UBj,N(ng))
147 real(r8), intent(inout) :: ad_v_stokes(LBi:UBi,LBj:UBj,N(ng))
148# endif
149 real(r8), intent(inout) :: ad_Hz(LBi:UBi,LBj:UBj,N(ng))
150
151 real(r8), intent(inout) :: ad_Huon(LBi:UBi,LBj:UBj,N(ng))
152 real(r8), intent(inout) :: ad_Hvom(LBi:UBi,LBj:UBj,N(ng))
153# endif
154
155
156
157 integer :: i, j, k
158
159 real(r8) :: adfac, adfac1
160
161# include "set_bounds.h"
162
163
164
165
166
167
168
169# ifdef DISTRIBUTE
170
171
172
173
174
175
177 & lbi, ubi, lbj, ubj, 1,
n(ng), &
180 & ad_huon, ad_hvom)
181
182# endif
183
185
186
187
188
190 & lbi, ubi, lbj, ubj, 1,
n(ng), &
191 & ad_hvom)
192
193
194
195
197 & lbi, ubi, lbj, ubj, 1,
n(ng), &
198 & ad_huon)
199 END IF
200
201
202
204 DO j=jstrp,jendt
205 DO i=istrt,iendt
206# ifdef WEC_MELLOR
207
208
209
210
211
212
213
214 adfac=0.5_r8*om_v(i,j)*tl_hvom(i,j,k)
215 adfac1=adfac*v_stokes(i,j,k)
216 tl_v_stokes(i,j,k)=tl_v_stokes(i,j,k)+ &
217 & adfac*(hz(i,j,k)+hz(i,j-1,k))
218 ad_hz(i,j-1,k)=ad_hz(i,j-1,k)+adfac1
219 ad_hz(i,j ,k)=ad_hz(i,j ,k)+adfac1
220# endif
221
222
223
224
225
226
227 adfac=0.5_r8*om_v(i,j)*ad_hvom(i,j,k)
228 adfac1=adfac*v(i,j,k,nrhs)
229 ad_v(i,j,k,nrhs)=ad_v(i,j,k,nrhs)+ &
230 & adfac*(hz(i,j,k)+hz(i,j-1,k))
231 ad_hz(i,j-1,k)=ad_hz(i,j-1,k)+adfac1
232 ad_hz(i,j ,k)=ad_hz(i,j ,k)+adfac1
233 ad_hvom(i,j,k)=0.0_r8
234 END DO
235 END DO
236 DO j=jstrt,jendt
237 DO i=istrp,iendt
238# ifdef WEC_MELLOR
239
240
241
242
243
244
245
246 adfac=0.5_r8*on_u(i,j)*ad_huon(i,j,k)
247 adfac1=adfac*u_stokes(i,j,k)
248 ad_u_stokes(i,j,k)=ad_u_stokes(i,j,k)+ &
249 & adfac*(hz(i,j,k)+hz(i-1,j,k))
250 ad_hz(i-1,j,k)=ad_hz(i-1,j,k)+adfac1
251 ad_hz(i ,j,k)=ad_hz(i ,j,k)+adfac1
252# endif
253
254
255
256
257
258
259 adfac=0.5_r8*on_u(i,j)*ad_huon(i,j,k)
260 adfac1=adfac*u(i,j,k,nrhs)
261 ad_u(i,j,k,nrhs)=ad_u(i,j,k,nrhs)+ &
262 & adfac*(hz(i,j,k)+hz(i-1,j,k))
263 ad_hz(i-1,j,k)=ad_hz(i-1,j,k)+adfac1
264 ad_hz(i ,j,k)=ad_hz(i ,j,k)+adfac1
265 ad_huon(i,j,k)=0.0_r8
266 END DO
267 END DO
268 END DO
269
270 RETURN
subroutine ad_exchange_v3d_tile(ng, tile, lbi, ubi, lbj, ubj, lbk, ubk, ad_a)
subroutine ad_exchange_u3d_tile(ng, tile, lbi, ubi, lbj, ubj, lbk, ubk, ad_a)
integer, dimension(:), allocatable n
logical, dimension(:), allocatable ewperiodic
logical, dimension(:), allocatable nsperiodic
subroutine ad_mp_exchange3d(ng, tile, model, nvar, lbi, ubi, lbj, ubj, lbk, ubk, nghost, ew_periodic, ns_periodic, ad_a, ad_b, ad_c, ad_d)