52
53
55#if defined ADJUST_BOUNDARY || defined ADJUST_STFLUX || \
56 defined adjust_wstress
59#endif
60
61
62
63 integer, intent(in) :: ng, tile
64 integer, intent(in) :: LBi, UBi, LBj, UBj, LBij, UBij
65 integer, intent(in) :: Lout
66
67 real(r8), intent(in) :: fac
68
69#ifdef ASSUMED_SHAPE
70# ifdef MASKING
71 real(r8), intent(in) :: rmask(LBi:,LBj:)
72 real(r8), intent(in) :: umask(LBi:,LBj:)
73 real(r8), intent(in) :: vmask(LBi:,LBj:)
74# endif
75# ifdef ADJUST_BOUNDARY
76# ifdef SOLVE3D
77 real(r8), intent(inout) :: s_t_obc(LBij:,:,:,:,:,:)
78 real(r8), intent(inout) :: s_u_obc(LBij:,:,:,:,:)
79 real(r8), intent(inout) :: s_v_obc(LBij:,:,:,:,:)
80# endif
81 real(r8), intent(inout) :: s_ubar_obc(LBij:,:,:,:)
82 real(r8), intent(inout) :: s_vbar_obc(LBij:,:,:,:)
83 real(r8), intent(inout) :: s_zeta_obc(LBij:,:,:,:)
84# endif
85# ifdef ADJUST_WSTRESS
86 real(r8), intent(inout) :: s_sustr(LBi:,LBj:,:,:)
87 real(r8), intent(inout) :: s_svstr(LBi:,LBj:,:,:)
88# endif
89# ifdef SOLVE3D
90# ifdef ADJUST_STFLUX
91 real(r8), intent(inout) :: s_tflux(LBi:,LBj:,:,:,:)
92# endif
93 real(r8), intent(inout) :: s_t(LBi:,LBj:,:,:,:)
94 real(r8), intent(inout) :: s_u(LBi:,LBj:,:,:)
95 real(r8), intent(inout) :: s_v(LBi:,LBj:,:,:)
96# else
97 real(r8), intent(inout) :: s_ubar(LBi:,LBj:,:)
98 real(r8), intent(inout) :: s_vbar(LBi:,LBj:,:)
99# endif
100 real(r8), intent(inout) :: s_zeta(LBi:,LBj:,:)
101
102#else
103
104# ifdef MASKING
105 real(r8), intent(in) :: rmask(LBi:UBi,LBj:UBj)
106 real(r8), intent(in) :: umask(LBi:UBi,LBj:UBj)
107 real(r8), intent(in) :: vmask(LBi:UBi,LBj:UBj)
108# endif
109# ifdef ADJUST_BOUNDARY
110# ifdef SOLVE3D
111 real(r8), intent(inout) :: s_t_obc(LBij:UBij,N(ng),4, &
112 & Nbrec(ng),2,NT(ng))
113 real(r8), intent(inout) :: s_u_obc(LBij:UBij,N(ng),4,Nbrec(ng),2)
114 real(r8), intent(inout) :: s_v_obc(LBij:UBij,N(ng),4,Nbrec(ng),2)
115# endif
116 real(r8), intent(inout) :: s_ubar_obc(LBij:UBij,4,Nbrec(ng),2)
117 real(r8), intent(inout) :: s_vbar_obc(LBij:UBij,4,Nbrec(ng),2)
118 real(r8), intent(inout) :: s_zeta_obc(LBij:UBij,4,Nbrec(ng),2)
119# endif
120# ifdef ADJUST_WSTRESS
121 real(r8), intent(inout) :: s_sustr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
122 real(r8), intent(inout) :: s_svstr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
123# endif
124# ifdef SOLVE3D
125# ifdef ADJUST_STFLUX
126 real(r8), intent(inout) :: s_tflux(LBi:UBi,LBj:UBj, &
127 & Nfrec(ng),2,NT(ng))
128# endif
129 real(r8), intent(inout) :: s_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
130 real(r8), intent(inout) :: s_u(LBi:UBi,LBj:UBj,N(ng),2)
131 real(r8), intent(inout) :: s_v(LBi:UBi,LBj:UBj,N(ng),2)
132# else
133 real(r8), intent(inout) :: s_ubar(LBi:UBi,LBj:UBj,:)
134 real(r8), intent(inout) :: s_vbar(LBi:UBi,LBj:UBj,:)
135# endif
136 real(r8), intent(inout) :: s_zeta(LBi:UBi,LBj:UBj,:)
137#endif
138
139
140
141 integer :: i, j, k
142 integer :: ib, ir, it
143
144#include "set_bounds.h"
145
146
147
148
149
150
151
152 DO j=jstrt,jendt
153 DO i=istrt,iendt
154 s_zeta(i,j,lout)=fac
155 END DO
156 END DO
157
158#ifdef ADJUST_BOUNDARY
159
160
161
165 &
domain(ng)%Western_Edge(tile))
THEN
166 DO j=jstr,jend
167 s_zeta_obc(j,
iwest,ir,lout)=fac
168 END DO
169 END IF
171 &
domain(ng)%Eastern_Edge(tile))
THEN
172 DO j=jstr,jend
173 s_zeta_obc(j,
ieast,ir,lout)=fac
174 END DO
175 END IF
177 &
domain(ng)%Southern_Edge(tile))
THEN
179 DO i=istr,iend
180 s_zeta_obc(i,
isouth,ir,lout)=fac
181 END DO
182 END IF
184 &
domain(ng)%Northern_Edge(tile))
THEN
185 DO i=istr,iend
186 s_zeta_obc(i,
inorth,ir,lout)=fac
187 END DO
188 END IF
189 END DO
190 END IF
191#endif
192
193#ifndef SOLVE3D
194
195
196
197 DO j=jstrt,jendt
198 DO i=istrp,iendt
199 s_ubar(i,j,lout)=fac
200 END DO
201 END DO
202#endif
203
204#ifdef ADJUST_BOUNDARY
205
206
207
211 &
domain(ng)%Western_Edge(tile))
THEN
212 DO j=jstr,jend
213 s_ubar_obc(j,
iwest,ir,lout)=fac
214 END DO
215 END IF
217 &
domain(ng)%Eastern_Edge(tile))
THEN
218 DO j=jstr,jend
219 s_ubar_obc(j,
ieast,ir,lout)=fac
220 END DO
221 END IF
223 &
domain(ng)%Southern_Edge(tile))
THEN
224 DO i=istru,iend
225 s_ubar_obc(i,
isouth,ir,lout)=fac
226 END DO
227 END IF
229 &
domain(ng)%Northern_Edge(tile))
THEN
230 DO i=istru,iend
231 s_ubar_obc(i,
inorth,ir,lout)=fac
232 END DO
233 END IF
234 END DO
235 END IF
236#endif
237
238#ifndef SOLVE3D
239
240
241
242 DO j=jstrp,jendt
243 DO i=istrt,iendt
244 s_vbar(i,j,lout)=fac
245 END DO
246 END DO
247#endif
248
249#ifdef ADJUST_BOUNDARY
250
251
252
256 &
domain(ng)%Western_Edge(tile))
THEN
257 DO j=jstrv,jend
258 s_vbar_obc(j,
iwest,ir,lout)=fac
259 END DO
260 END IF
262 &
domain(ng)%Eastern_Edge(tile))
THEN
263 DO j=jstrv,jend
264 s_vbar_obc(j,
ieast,ir,lout)=fac
265 END DO
266 END IF
268 &
domain(ng)%Southern_Edge(tile))
THEN
269 DO i=istr,iend
270 s_vbar_obc(i,
isouth,ir,lout)=fac
271 END DO
272 END IF
274 &
domain(ng)%Northern_Edge(tile))
THEN
275 DO i=istr,iend
276 s_vbar_obc(i,
inorth,ir,lout)=fac
277 END DO
278 END IF
279 END DO
280 END IF
281#endif
282
283#ifdef ADJUST_WSTRESS
284
285
286
288 DO j=jstrt,jendt
289 DO i=istrp,iendt
290 s_sustr(i,j,ir,lout)=fac
291 END DO
292 END DO
293 DO j=jstrp,jendt
294 DO i=istrt,iendt
295 s_svstr(i,j,ir,lout)=fac
296 END DO
297 END DO
298 END DO
299#endif
300
301#ifdef SOLVE3D
302
303
304
306 DO j=jstrt,jendt
307 DO i=istrp,iendt
308 s_u(i,j,k,lout)=fac
309 END DO
310 END DO
311 END DO
312
313# ifdef ADJUST_BOUNDARY
314
315
316
320 &
domain(ng)%Western_Edge(tile))
THEN
322 DO j=jstr,jend
323 s_u_obc(j,k,
iwest,ir,lout)=fac
324 END DO
325 END DO
326 END IF
328 &
domain(ng)%Eastern_Edge(tile))
THEN
330 DO j=jstr,jend
331 s_u_obc(j,k,
ieast,ir,lout)=fac
332 END DO
333 END DO
334 END IF
336 &
domain(ng)%Southern_Edge(tile))
THEN
338 DO i=istru,iend
339 s_u_obc(i,k,
isouth,ir,lout)=fac
340 END DO
341 END DO
342 END IF
344 &
domain(ng)%Northern_Edge(tile))
THEN
346 DO i=istru,iend
347 s_u_obc(i,k,
inorth,ir,lout)=fac
348 END DO
349 END DO
350 END IF
351 END DO
352 END IF
353# endif
354
355
356
358 DO j=jstrp,jendt
359 DO i=istrt,iendt
360 s_v(i,j,k,lout)=fac
361 END DO
362 END DO
363 END DO
364
365# ifdef ADJUST_BOUNDARY
366
367
368
372 &
domain(ng)%Western_Edge(tile))
THEN
374 DO j=jstrv,jend
375 s_v_obc(j,k,
iwest,ir,lout)=fac
376 END DO
377 END DO
378 END IF
380 &
domain(ng)%Eastern_Edge(tile))
THEN
382 DO j=jstrv,jend
383 s_v_obc(j,k,
ieast,ir,lout)=fac
384 END DO
385 END DO
386 END IF
388 &
domain(ng)%Southern_Edge(tile))
THEN
390 DO i=istr,iend
391 s_v_obc(i,k,
isouth,ir,lout)=fac
392 END DO
393 END DO
394 END IF
396 &
domain(ng)%Northern_Edge(tile))
THEN
398 DO i=istr,iend
399 s_v_obc(i,k,
inorth,ir,lout)=fac
400 END DO
401 END DO
402 END IF
403 END DO
404 END IF
405# endif
406
407
408
411 DO j=jstrt,jendt
412 DO i=istrt,iendt
413 s_t(i,j,k,lout,it)=fac
414 END DO
415 END DO
416 END DO
417 END DO
418
419# ifdef ADJUST_BOUNDARY
420
421
422
427 &
domain(ng)%Western_Edge(tile))
THEN
429 DO j=jstr,jend
430 s_t_obc(j,k,
iwest,ir,lout,it)=fac
431 END DO
432 END DO
433 END IF
435 &
domain(ng)%Eastern_Edge(tile))
THEN
437 DO j=jstr,jend
438 s_t_obc(j,k,
ieast,ir,lout,it)=fac
439 END DO
440 END DO
441 END IF
443 &
domain(ng)%Southern_Edge(tile))
THEN
445 DO i=istr,iend
446 s_t_obc(i,k,
isouth,ir,lout,it)=fac
447 END DO
448 END DO
449 END IF
451 &
domain(ng)%Northern_Edge(tile))
THEN
453 DO i=istr,iend
454 s_t_obc(i,k,
inorth,ir,lout,it)=fac
455 END DO
456 END DO
457 END IF
458 END DO
459 END IF
460 END DO
461# endif
462
463# ifdef ADJUST_STFLUX
464
465
466
470 DO j=jstrt,jendt
471 DO i=istrt,iendt
472 s_tflux(i,j,ir,lout,it)=fac
473 END DO
474 END DO
475 END DO
476 END IF
477 END DO
478# endif
479
480#endif
481
482 RETURN
integer, dimension(:), allocatable istvar
integer, dimension(:), allocatable n
type(t_domain), dimension(:), allocatable domain
integer, dimension(:), allocatable nt
logical, dimension(:,:,:), allocatable lobc
logical, dimension(:,:), allocatable lstflux
integer, dimension(:), allocatable nfrec
integer, parameter isouth
integer, parameter inorth
integer, dimension(:), allocatable nbrec