93
94
97
99# ifdef DISTRIBUTE
101# endif
102
103
104
105 integer, intent(in) :: ng, tile, model
106 integer, intent(in) :: LBi, UBi, LBj, UBj
107 integer, intent(in) :: IminS, ImaxS, JminS, JmaxS
108 integer, intent(in) :: nrhs
109
110# ifdef ASSUMED_SHAPE
111 real(r8), intent(in) :: u(LBi:,LBj:,:,:)
112 real(r8), intent(in) :: v(LBi:,LBj:,:,:)
113 real(r8), intent(in) :: tl_u(LBi:,LBj:,:,:)
114 real(r8), intent(in) :: tl_v(LBi:,LBj:,:,:)
115# ifdef WEC_MELLOR
116 real(r8), intent(in) :: u_stokes(LBi:,LBj:,:)
117 real(r8), intent(in) :: v_stokes(LBi:,LBj:,:)
118 real(r8), intent(in) :: tl_u_stokes(LBi:,LBj:,:)
119 real(r8), intent(in) :: tl_v_stokes(LBi:,LBj:,:)
120# endif
121 real(r8), intent(in) :: Hz(LBi:,LBj:,:)
122 real(r8), intent(in) :: tl_Hz(LBi:,LBj:,:)
123 real(r8), intent(in) :: om_v(LBi:,LBj:)
124 real(r8), intent(in) :: on_u(LBi:,LBj:)
125
126 real(r8), intent(out) :: tl_Huon(LBi:,LBj:,:)
127 real(r8), intent(out) :: tl_Hvom(LBi:,LBj:,:)
128# else
129 real(r8), intent(in) :: u(LBi:UBi,LBj:UBj,N(ng),2)
130 real(r8), intent(in) :: v(LBi:UBi,LBj:UBj,N(ng),2)
131 real(r8), intent(in) :: tl_u(LBi:UBi,LBj:UBj,N(ng),2)
132 real(r8), intent(in) :: tl_v(LBi:UBi,LBj:UBj,N(ng),2)
133# ifdef WEC_MELLOR
134 real(r8), intent(in) :: u_stokes(LBi:UBi,LBj:UBj,N(ng))
135 real(r8), intent(in) :: v_stokes(LBi:UBi,LBj:UBj,N(ng))
136 real(r8), intent(in) :: tl_u_stokes(LBi:UBi,LBj:UBj,N(ng))
137 real(r8), intent(in) :: tl_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) :: tl_Hz(LBi:UBi,LBj:UBj,N(ng))
141 real(r8), intent(in) :: om_v(LBi:UBi,LBj:UBj)
142 real(r8), intent(in) :: on_u(LBi:UBi,LBj:UBj)
143
144 real(r8), intent(out) :: tl_Huon(LBi:UBi,LBj:UBj,N(ng))
145 real(r8), intent(out) :: tl_Hvom(LBi:UBi,LBj:UBj,N(ng))
146# endif
147
148
149
150 integer :: i, j, k
151
152# include "set_bounds.h"
153
154
155
156
157
158
159
161 DO j=jstrt,jendt
162 DO i=istrp,iendt
163
164
165
166 tl_huon(i,j,k)=0.5_r8*on_u(i,j)* &
167 & ((hz(i,j,k)+hz(i-1,j,k))* &
168 & tl_u(i,j,k,nrhs)+ &
169 & (tl_hz(i,j,k)+tl_hz(i-1,j,k))* &
170 & u(i,j,k,nrhs))
171# ifdef WEC_MELLOR
172
173
174
175
176 tl_huon(i,j,k)=tl_huon(i,j,k)+ &
177 & 0.5_r8*on_u(i,j)* &
178 & ((hz(i,j,k)+hz(i-1,j,k))* &
179 & tl_u_stokes(i,j,k)+ &
180 & (tl_hz(i,j,k)+tl_hz(i-1,j,k))* &
181 & u_stokes(i,j,k))
182# endif
183 END DO
184 END DO
185 DO j=jstrp,jendt
186 DO i=istrt,iendt
187
188
189
190 tl_hvom(i,j,k)=0.5_r8*om_v(i,j)* &
191 & ((hz(i,j,k)+hz(i,j-1,k))* &
192 & tl_v(i,j,k,nrhs)+ &
193 & (tl_hz(i,j,k)+tl_hz(i,j-1,k))* &
194 & v(i,j,k,nrhs))
195# ifdef WEC_MELLOR
196
197
198
199
200 tl_hvom(i,j,k)=tl_hvom(i,j,k)+ &
201 & 0.5_r8*om_v(i,j)* &
202 & ((hz(i,j,k)+hz(i,j-1,k))* &
203 & tl_v_stokes(i,j,k)+ &
204 & (tl_hz(i,j,k)+tl_hz(i,j-1,k))* &
205 & v_stokes(i,j,k))
206# endif
207 END DO
208 END DO
209 END DO
210
211
212
214
215
216
217
219 & lbi, ubi, lbj, ubj, 1,
n(ng), &
220 & tl_huon)
221
222
223
224
226 & lbi, ubi, lbj, ubj, 1,
n(ng), &
227 & tl_hvom)
228 END IF
229
230# ifdef DISTRIBUTE
231
232
233
234
235
236
238 & lbi, ubi, lbj, ubj, 1,
n(ng), &
241 & tl_huon, tl_hvom)
242# endif
243
244 RETURN
subroutine exchange_u3d_tile(ng, tile, lbi, ubi, lbj, ubj, lbk, ubk, a)
subroutine exchange_v3d_tile(ng, tile, lbi, ubi, lbj, ubj, lbk, ubk, a)
integer, dimension(:), allocatable n
logical, dimension(:), allocatable ewperiodic
logical, dimension(:), allocatable nsperiodic
subroutine mp_exchange3d(ng, tile, model, nvar, lbi, ubi, lbj, ubj, lbk, ubk, nghost, ew_periodic, ns_periodic, a, b, c, d)