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 TL_IOMS
172 & 0.5_r8*on_u(i,j)* &
173 & (hz(i,j,k)+hz(i-1,j,k))*u(i,j,k,nrhs)
174# endif
175# ifdef WEC_MELLOR
176
177
178
179
180 tl_huon(i,j,k)=tl_huon(i,j,k)+ &
181 & 0.5_r8*on_u(i,j)* &
182 & ((hz(i,j,k)+hz(i-1,j,k))* &
183 & tl_u_stokes(i,j,k)+ &
184 & (tl_hz(i,j,k)+tl_hz(i-1,j,k))* &
185 & u_stokes(i,j,k))- &
186# ifdef TL_IOMS
187 & 0.5_r8*on_u(i,j)* &
188 & (hz(i,j,k)+hz(i-1,j,k))*u_stokes(i,j,k)
189# endif
190# endif
191 END DO
192 END DO
193 DO j=jstrp,jendt
194 DO i=istrt,iendt
195
196
197
198 tl_hvom(i,j,k)=0.5_r8*om_v(i,j)* &
199 & ((hz(i,j,k)+hz(i,j-1,k))* &
200 & tl_v(i,j,k,nrhs)+ &
201 & (tl_hz(i,j,k)+tl_hz(i,j-1,k))* &
202 & v(i,j,k,nrhs))- &
203# ifdef TL_IOMS
204 & 0.5_r8*om_v(i,j)* &
205 & (hz(i,j,k)+hz(i,j-1,k))*v(i,j,k,nrhs)
206# endif
207# ifdef WEC_MELLOR
208
209
210
211
212 tl_hvom(i,j,k)=tl_hvom(i,j,k)+ &
213 & 0.5_r8*om_v(i,j)* &
214 & ((hz(i,j,k)+hz(i,j-1,k))* &
215 & tl_v_stokes(i,j,k)+ &
216 & (tl_hz(i,j,k)+tl_hz(i,j-1,k))* &
217 & v_stokes(i,j,k))- &
218# ifdef TL_IOMS
219 & 0.5_r8*om_v(i,j)* &
220 & (hz(i,j,k)+hz(i,j-1,k))*v_stokes(i,j,k)
221# endif
222# endif
223 END DO
224 END DO
225 END DO
226
227
228
230
231
232
233
235 & lbi, ubi, lbj, ubj, 1,
n(ng), &
236 & tl_huon)
237
238
239
240
242 & lbi, ubi, lbj, ubj, 1,
n(ng), &
243 & tl_hvom)
244 END IF
245
246# ifdef DISTRIBUTE
247
248
249
250
251
252
254 & lbi, ubi, lbj, ubj, 1,
n(ng), &
257 & tl_huon, tl_hvom)
258# endif
259
260 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)