ROMS
Loading...
Searching...
No Matches
ad_set_avg.F
Go to the documentation of this file.
1#include "cppdefs.h"
3#if defined AD_AVERAGES && defined ADJOINT
4!
5!git $Id$
6!================================================== Hernan G. Arango ===
7! Copyright (c) 2002-2025 The ROMS Group Andrew M. Moore !
8! Licensed under a MIT/X style license !
9! See License_ROMS.md !
10!=======================================================================
11! !
12! This subroutine accumulates and computes output time-averaged !
13! adjoint fields. !
14! !
15!=======================================================================
16!
17 implicit none
18!
19 PRIVATE
20 PUBLIC :: ad_set_avg
21!
22 CONTAINS
23!
24!***********************************************************************
25 SUBROUTINE ad_set_avg (ng, tile)
26!***********************************************************************
27!
28 USE mod_param
29 USE mod_stepping
30!
31! Imported variable declarations.
32!
33 integer, intent(in) :: ng, tile
34!
35! Local variable declarations.
36!
37 character (len=*), parameter :: myfile = &
38 & __FILE__
39!
40# include "tile.h"
41!
42# ifdef PROFILE
43 CALL wclock_on (ng, iadm, 5, __line__, myfile)
44# endif
45 CALL ad_set_avg_tile (ng, tile, &
46 & lbi, ubi, lbj, ubj, &
47 & imins, imaxs, jmins, jmaxs, &
48 & nstp(ng))
49
50# ifdef WET_DRY
51 CALL set_avg_masks (ng, tile, iadm, &
52 & lbi, ubi, lbj, ubj, &
53 & imins, imaxs, jmins, jmaxs, &
54 & grid(ng) % pmask_avg, &
55 & grid(ng) % rmask_avg, &
56 & grid(ng) % umask_avg, &
57 & grid(ng) % vmask_avg)
58# endif
59
60# ifdef PROFILE
61 CALL wclock_off (ng, iadm, 5, __line__, myfile)
62# endif
63!
64 RETURN
65 END SUBROUTINE ad_set_avg
66!
67!***********************************************************************
68 SUBROUTINE ad_set_avg_tile (ng, tile, &
69 & LBi, UBi, LBj, UBj, &
70 & IminS, ImaxS, JminS, JmaxS, &
71 & nstp)
72!***********************************************************************
73!
74 USE mod_param
75 USE mod_ncparam
76 USE mod_average
77 USE mod_forces
78# ifdef SOLVE3D
79 USE mod_grid
80 USE mod_mixing
81# endif
82 USE mod_ocean
83 USE mod_scalars
84!
85 implicit none
86!
87! Imported variable declarations.
88!
89 integer, intent(in) :: ng, tile
90 integer, intent(in) :: LBi, UBi, LBj, UBj
91 integer, intent(in) :: IminS, ImaxS, JminS, JmaxS
92 integer, intent(in) :: nstp
93!
94!
95! Local variable declarations.
96!
97 integer :: i, it, j, k
98
99 real(r8) :: fac
100
101 real(r8) :: pfac(IminS:ImaxS,JminS:JmaxS)
102 real(r8) :: rfac(IminS:ImaxS,JminS:JmaxS)
103 real(r8) :: ufac(IminS:ImaxS,JminS:JmaxS)
104 real(r8) :: vfac(IminS:ImaxS,JminS:JmaxS)
105
106# include "set_bounds.h"
107!
108!-----------------------------------------------------------------------
109! Return if time-averaging window is zero.
110!-----------------------------------------------------------------------
111!
112 IF (navg(ng).eq.0) RETURN
113!
114!-----------------------------------------------------------------------
115! Initialize time-averaged arrays when appropriate. Notice that
116! fields are initilized twice during re-start. However, the time-
117! averaged fields are computed correctly.
118!-----------------------------------------------------------------------
119!
120 IF (((iic(ng).lt.ntsavg(ng)).and. &
121 & (mod(iic(ng),navg(ng)).eq.0)).or. &
122 & ((iic(ng).le.ntsavg(ng)).and.(navg(ng).eq.1)).or. &
123 & ((nrrec(ng).gt.0).and.(iic(ng).eq.ntstart(ng)))) THEN
124
125# ifdef WET_DRY
126!
127! If wetting and drying, initialize time dependent counters for wet
128! points. The time averaged field at each point is only accumulated
129! over wet points since its multiplied by the appropriate mask.
130!
131 DO j=jstr,jendr
132 DO i=istr,iendr
133 grid(ng)%pmask_avg(i,j)=max(0.0_r8, &
134 & min(grid(ng)%pmask_full(i,j), &
135 & 1.0_r8))
136 END DO
137 END DO
138 DO j=jstrr,jendr
139 DO i=istrr,iendr
140 grid(ng)%rmask_avg(i,j)=max(0.0_r8, &
141 & min(grid(ng)%rmask_full(i,j), &
142 & 1.0_r8))
143 END DO
144 END DO
145 DO j=jstrr,jendr
146 DO i=istr,iendr
147 grid(ng)%umask_avg(i,j)=max(0.0_r8, &
148 & min(grid(ng)%umask_full(i,j), &
149 & 1.0_r8))
150 END DO
151 END DO
152 DO j=jstr,jendr
153 DO i=istrr,iendr
154 grid(ng)%vmask_avg(i,j)=max(0.0_r8, &
155 & min(grid(ng)%vmask_full(i,j), &
156 & 1.0_r8))
157 END DO
158 END DO
159# endif
160!
161! Initialize adjoint state variables.
162!
163 IF (aout(idfsur,ng)) THEN
164 DO j=jstrr,jendr
165 DO i=istrr,iendr
166 average(ng)%avgzeta(i,j)=ocean(ng)%ad_zeta_sol(i,j)
167# ifdef WET_DRY
168 average(ng)%avgzeta(i,j)=average(ng)%avgzeta(i,j)* &
169 & grid(ng)%rmask_full(i,j)
170# endif
171 END DO
172 END DO
173 END IF
174 IF (aout(idubar,ng)) THEN
175 DO j=jstrr,jendr
176 DO i=istr,iendr
177 average(ng)%avgu2d(i,j)=ocean(ng)%ad_ubar_sol(i,j)
178# ifdef WET_DRY
179 average(ng)%avgu2d(i,j)=average(ng)%avgu2d(i,j)* &
180 & grid(ng)%umask_full(i,j)
181# endif
182 END DO
183 END DO
184 END IF
185 IF (aout(idvbar,ng)) THEN
186 DO j=jstr,jendr
187 DO i=istrr,iendr
188 average(ng)%avgv2d(i,j)=ocean(ng)%ad_vbar_sol(i,j)
189# ifdef WET_DRY
190 average(ng)%avgv2d(i,j)=average(ng)%avgv2d(i,j)* &
191 & grid(ng)%vmask_full(i,j)
192# endif
193 END DO
194 END DO
195 END IF
196
197# ifdef SOLVE3D
198 IF (aout(iduvel,ng)) THEN
199 DO k=1,n(ng)
200 DO j=jstrr,jendr
201 DO i=istr,iendr
202 average(ng)%avgu3d(i,j,k)=ocean(ng)%ad_u(i,j,k,nstp)
203# ifdef WET_DRY
204 average(ng)%avgu3d(i,j,k)=average(ng)%avgu3d(i,j,k)* &
205 & grid(ng)%umask_full(i,j)
206# endif
207 END DO
208 END DO
209 END DO
210 END IF
211 IF (aout(idvvel,ng)) THEN
212 DO k=1,n(ng)
213 DO j=jstr,jendr
214 DO i=istrr,iendr
215 average(ng)%avgv3d(i,j,k)=ocean(ng)%ad_v(i,j,k,nstp)
216# ifdef WET_DRY
217 average(ng)%avgv3d(i,j,k)=average(ng)%avgv3d(i,j,k)* &
218 & grid(ng)%vmask_full(i,j)
219# endif
220 END DO
221 END DO
222 END DO
223 END IF
224 IF (aout(idovel,ng)) THEN
225 DO k=0,n(ng)
226 DO j=jstrr,jendr
227 DO i=istrr,iendr
228 average(ng)%avgw3d(i,j,k)=ocean(ng)%ad_W_sol(i,j,k)* &
229 & grid(ng)%pm(i,j)* &
230 & grid(ng)%pn(i,j)
231# ifdef WET_DRY
232 average(ng)%avgw3d(i,j,k)=average(ng)%avgw3d(i,j,k)* &
233 & grid(ng)%rmask_full(i,j)
234# endif
235 END DO
236 END DO
237 END DO
238 END IF
239
240 IF (aout(iddano,ng)) THEN
241 DO k=1,n(ng)
242 DO j=jstrr,jendr
243 DO i=istrr,iendr
244 average(ng)%avgrho(i,j,k)=ocean(ng)%ad_rho(i,j,k)
245# ifdef WET_DRY
246 average(ng)%avgrho(i,j,k)=average(ng)%avgrho(i,j,k)* &
247 & grid(ng)%rmask_full(i,j)
248# endif
249 END DO
250 END DO
251 END DO
252 END IF
253 DO it=1,nt(ng)
254 IF (aout(idtvar(it),ng)) THEN
255 DO k=1,n(ng)
256 DO j=jstrr,jendr
257 DO i=istrr,iendr
258 average(ng)%avgt(i,j,k,it)=ocean(ng)%ad_t(i,j,k, &
259 & nstp,it)
260# ifdef WET_DRY
261 average(ng)%avgt(i,j,k,it)=average(ng)%avgt(i,j,k,it)*&
262 & grid(ng)%rmask_full(i,j)
263# endif
264 END DO
265 END DO
266 END DO
267 END IF
268 END DO
269
270# if defined LMD_MIXING || defined MY25_MIXING || defined GLS_MIXING
271 IF (aout(idvvis,ng)) THEN
272 DO k=0,n(ng)
273 DO j=jstrr,jendr
274 DO i=istrr,iendr
275 average(ng)%avgAKv(i,j,k)=mixing(ng)%ad_Akv(i,j,k)
276# ifdef WET_DRY
277 average(ng)%avgAKv(i,j,k)=average(ng)%avgAKv(i,j,k)* &
278 & grid(ng)%rmask_full(i,j)
279# endif
280 END DO
281 END DO
282 END DO
283 END IF
284 IF (aout(idtdif,ng)) THEN
285 DO k=0,n(ng)
286 DO j=jstrr,jendr
287 DO i=istrr,iendr
288 average(ng)%avgAKt(i,j,k)=mixing(ng)%ad_Akt(i,j,k,itemp)
289# ifdef WET_DRY
290 average(ng)%avgAKt(i,j,k)=average(ng)%avgAKt(i,j,k)* &
291 & grid(ng)%rmask_full(i,j)
292# endif
293 END DO
294 END DO
295 END DO
296 END IF
297
298# ifdef SALINITY
299 IF (aout(idsdif,ng)) THEN
300 DO k=0,n(ng)
301 DO j=jstrr,jendr
302 DO i=istrr,iendr
303 average(ng)%avgAKs(i,j,k)=mixing(ng)%ad_Akt(i,j,k,isalt)
304# ifdef WET_DRY
305 average(ng)%avgAKs(i,j,k)=average(ng)%avgAKs(i,j,k)* &
306 & grid(ng)%rmask_full(i,j)
307# endif
308 END DO
309 END DO
310 END DO
311 END IF
312# endif
313
314# endif
315# endif
316!
317! Initialize adjoint surface and bottom fluxes.
318!
319 IF (aout(idusms,ng)) THEN
320 DO j=jstrr,jendr
321 DO i=istr,iendr
322 average(ng)%avgsus(i,j)=forces(ng)%ad_sustr(i,j)
323# ifdef WET_DRY
324 average(ng)%avgsus(i,j)=average(ng)%avgsus(i,j)* &
325 & grid(ng)%umask_full(i,j)
326# endif
327 END DO
328 END DO
329 END IF
330 IF (aout(idvsms,ng)) THEN
331 DO j=jstr,jendr
332 DO i=istrr,iendr
333 average(ng)%avgsvs(i,j)=forces(ng)%ad_svstr(i,j)
334# ifdef WET_DRY
335 average(ng)%avgsvs(i,j)=average(ng)%avgsvs(i,j)* &
336 & grid(ng)%vmask_full(i,j)
337# endif
338 END DO
339 END DO
340 END IF
341
342 IF (aout(idubms,ng)) THEN
343 DO j=jstrr,jendr
344 DO i=istr,iendr
345 average(ng)%avgbus(i,j)=forces(ng)%ad_bustr(i,j)
346# ifdef WET_DRY
347 average(ng)%avgbus(i,j)=average(ng)%avgbus(i,j)* &
348 & grid(ng)%umask_full(i,j)
349# endif
350 END DO
351 END DO
352 END IF
353 IF (aout(idvbms,ng)) THEN
354 DO j=jstr,jendr
355 DO i=istrr,iendr
356 average(ng)%avgbvs(i,j)=forces(ng)%ad_bvstr(i,j)
357# ifdef WET_DRY
358 average(ng)%avgbvs(i,j)=average(ng)%avgbvs(i,j)* &
359 & grid(ng)%vmask_full(i,j)
360# endif
361 END DO
362 END DO
363 END IF
364
365# ifdef SOLVE3D
366 IF (aout(idtsur(itemp),ng)) THEN
367 DO j=jstrr,jendr
368 DO i=istrr,iendr
369 average(ng)%avgstf(i,j)=forces(ng)%ad_stflx(i,j,itemp)
370# ifdef WET_DRY
371 average(ng)%avgstf(i,j)=average(ng)%avgstf(i,j)* &
372 & grid(ng)%rmask_full(i,j)
373# endif
374 END DO
375 END DO
376 END IF
377
378# ifdef SALINITY
379 IF (aout(idtsur(isalt),ng)) THEN
380 DO j=jstrr,jendr
381 DO i=istrr,iendr
382 average(ng)%avgswf(i,j)=forces(ng)%ad_stflx(i,j,isalt)
383# ifdef WET_DRY
384 average(ng)%avgswf(i,j)=average(ng)%avgswf(i,j)* &
385 & grid(ng)%rmask_full(i,j)
386# endif
387 END DO
388 END DO
389 END IF
390# endif
391
392# ifdef SHORTWAVE
393 IF (aout(idsrad,ng)) THEN
394 DO j=jstrr,jendr
395 DO i=istrr,iendr
396 average(ng)%avgsrf(i,j)=forces(ng)%ad_srflx(i,j)
397# ifdef WET_DRY
398 average(ng)%avgsrf(i,j)=average(ng)%avgsrf(i,j)* &
399 & grid(ng)%rmask_full(i,j)
400# endif
401 END DO
402 END DO
403 END IF
404# endif
405
406# if defined BULK_FLUXES || defined FRC_COUPLING
407 IF (aout(idlhea,ng)) THEN
408 DO j=jstrr,jendr
409 DO i=istrr,iendr
410 average(ng)%avglhf(i,j)=forces(ng)%ad_lhflx(i,j)
411# ifdef WET_DRY
412 average(ng)%avglhf(i,j)=average(ng)%avglhf(i,j)* &
413 & grid(ng)%rmask_full(i,j)
414# endif
415 END DO
416 END DO
417 END IF
418
419 IF (aout(idlrad,ng)) THEN
420 DO j=jstrr,jendr
421 DO i=istrr,iendr
422 average(ng)%avglrf(i,j)=forces(ng)%ad_lrflx(i,j)
423# ifdef WET_DRY
424 average(ng)%avglrf(i,j)=average(ng)%avglrf(i,j)* &
425 & grid(ng)%rmask_full(i,j)
426# endif
427 END DO
428 END DO
429 END IF
430
431 IF (aout(idshea,ng)) THEN
432 DO j=jstrr,jendr
433 DO i=istrr,iendr
434 average(ng)%avgshf(i,j)=forces(ng)%ad_shflx(i,j)
435# ifdef WET_DRY
436 average(ng)%avgshf(i,j)=average(ng)%avgshf(i,j)* &
437 & grid(ng)%rmask_full(i,j)
438# endif
439 END DO
440 END DO
441 END IF
442# endif
443
444# if defined BULK_FLUXES && defined EMINUSP
445 IF (aout(idevap,ng)) THEN
446 DO j=jstrr,jendr
447 DO i=istrr,iendr
448 average(ng)%avgevap(i,j)=forces(ng)%ad_evap(i,j)
449# ifdef WET_DRY
450 average(ng)%avgevap(i,j)=average(ng)%avgevap(i,j)* &
451 & grid(ng)%rmask_full(i,j)
452# endif
453 END DO
454 END DO
455 END IF
456# endif
457# endif
458!
459! Initialize adjoint of quadratic fields.
460!
461 IF (aout(idzzav,ng)) THEN
462 DO j=jstrr,jendr
463 DO i=istrr,iendr
464 average(ng)%avgZZ(i,j)=ocean(ng)%ad_zeta_sol(i,j)* &
465 & ocean(ng)%ad_zeta_sol(i,j)
466# ifdef WET_DRY
467 average(ng)%avgZZ(i,j)=average(ng)%avgZZ(i,j)* &
468 & grid(ng)%rmask_full(i,j)
469# endif
470 END DO
471 END DO
472 END IF
473 IF (aout(idu2av,ng)) THEN
474 DO j=jstrr,jendr
475 DO i=istr,iendr
476 average(ng)%avgU2(i,j)=ocean(ng)%ad_ubar_sol(i,j)* &
477 & ocean(ng)%ad_ubar_sol(i,j)
478# ifdef WET_DRY
479 average(ng)%avgU2(i,j)=average(ng)%avgU2(i,j)* &
480 & grid(ng)%umask_full(i,j)
481# endif
482 END DO
483 END DO
484 END IF
485 IF (aout(idv2av,ng)) THEN
486 DO j=jstr,jendr
487 DO i=istrr,iendr
488 average(ng)%avgV2(i,j)=ocean(ng)%ad_vbar_sol(i,j)* &
489 & ocean(ng)%ad_vbar_sol(i,j)
490# ifdef WET_DRY
491 average(ng)%avgV2(i,j)=average(ng)%avgV2(i,j)* &
492 & grid(ng)%vmask_full(i,j)
493# endif
494 END DO
495 END DO
496 END IF
497
498# ifdef SOLVE3D
499 IF (aout(iduuav,ng)) THEN
500 DO k=1,n(ng)
501 DO j=jstrr,jendr
502 DO i=istr,iendr
503 average(ng)%avgUU(i,j,k)=ocean(ng)%ad_u(i,j,k,nstp)* &
504 & ocean(ng)%ad_u(i,j,k,nstp)
505# ifdef WET_DRY
506 average(ng)%avgUU(i,j,k)=average(ng)%avgUU(i,j,k)* &
507 & grid(ng)%umask_full(i,j)
508# endif
509 END DO
510 END DO
511 END DO
512 END IF
513 IF (aout(idvvav,ng)) THEN
514 DO k=1,n(ng)
515 DO j=jstr,jendr
516 DO i=istrr,iendr
517 average(ng)%avgVV(i,j,k)=ocean(ng)%ad_v(i,j,k,nstp)* &
518 & ocean(ng)%ad_v(i,j,k,nstp)
519# ifdef WET_DRY
520 average(ng)%avgVV(i,j,k)=average(ng)%avgVV(i,j,k)* &
521 & grid(ng)%vmask_full(i,j)
522# endif
523 END DO
524 END DO
525 END DO
526 END IF
527 IF (aout(iduvav,ng)) THEN
528 DO k=1,n(ng)
529 DO j=jstr,jend
530 DO i=istr,iend
531 average(ng)%avgUV(i,j,k)=0.25_r8* &
532 & (ocean(ng)%ad_u(i ,j,k,nstp)+ &
533 & ocean(ng)%ad_u(i+1,j,k,nstp))*&
534 & (ocean(ng)%ad_v(i,j ,k,nstp)+ &
535 & ocean(ng)%ad_v(i,j+1,k,nstp))
536# ifdef WET_DRY
537 average(ng)%avgUV(i,j,k)=average(ng)%avgUV(i,j,k)* &
538 & grid(ng)%rmask_full(i,j)
539# endif
540 END DO
541 END DO
542 END DO
543 END IF
544
545 DO it=1,nt(ng)
546 IF (aout(idttav(it),ng)) THEN
547 DO k=1,n(ng)
548 DO j=jstrr,jendr
549 DO i=istrr,iendr
550 average(ng)%avgTT(i,j,k,it)=ocean(ng)%ad_t(i,j,k, &
551 & nstp,it)* &
552 & ocean(ng)%ad_t(i,j,k, &
553 & nstp,it)
554# ifdef WET_DRY
555 average(ng)%avgTT(i,j,k,it)=average(ng)%avgTT(i,j,k, &
556 & it)* &
557 & grid(ng)%rmask_full(i,j)
558# endif
559 END DO
560 END DO
561 END DO
562 END IF
563 IF (aout(idutav(it),ng)) THEN
564 DO k=1,n(ng)
565 DO j=jstrr,jendr
566 DO i=istr,iend
567 average(ng)%avgUT(i,j,k,it)=0.5_r8* &
568 & ocean(ng)%ad_u(i,j,k, &
569 & nstp)* &
570 & (ocean(ng)%ad_t(i-1,j,k, &
571 & nstp,it)+ &
572 & ocean(ng)%ad_t(i ,j,k, &
573 & nstp,it))
574# ifdef WET_DRY
575 average(ng)%avgUT(i,j,k,it)=average(ng)%avgUT(i,j,k, &
576 & it)* &
577 & grid(ng)%umask_full(i,j)
578# endif
579 END DO
580 END DO
581 END DO
582 END IF
583 IF (aout(idvtav(it),ng)) THEN
584 DO k=1,n(ng)
585 DO j=jstr,jend
586 DO i=istrr,iendr
587 average(ng)%avgVT(i,j,k,it)=0.5_r8* &
588 & ocean(ng)%ad_v(i,j,k, &
589 & nstp)* &
590 & (ocean(ng)%ad_t(i,j-1,k, &
591 & nstp,it)+ &
592 & ocean(ng)%ad_t(i,j ,k, &
593 & nstp,it))
594# ifdef WET_DRY
595 average(ng)%avgVT(i,j,k,it)=average(ng)%avgVT(i,j,k, &
596 & it)* &
597 & grid(ng)%vmask_full(i,j)
598# endif
599 END DO
600 END DO
601 END DO
602 END IF
603 END DO
604# endif
605!
606!-----------------------------------------------------------------------
607! Accumulate time-averaged fields.
608!-----------------------------------------------------------------------
609!
610 ELSE IF ((iic(ng)-1).le.ntsavg(ng)) THEN
611
612# ifdef WET_DRY
613!
614! If wetting and drying, accumulate wet points counters.
615! points. The time averaged field at each point is only accumulated
616! over wet points since its multiplied by the appropriate mask.
617!
618 DO j=jstr,jendr
619 DO i=istr,iendr
620 grid(ng)%pmask_avg(i,j)=grid(ng)%pmask_avg(i,j)+ &
621 & max(0.0_r8, &
622 & min(grid(ng)%pmask_full(i,j), &
623 & 1.0_r8))
624 END DO
625 END DO
626 DO j=jstrr,jendr
627 DO i=istrr,iendr
628 grid(ng)%rmask_avg(i,j)=grid(ng)%rmask_avg(i,j)+ &
629 & max(0.0_r8, &
630 & min(grid(ng)%rmask_full(i,j), &
631 & 1.0_r8))
632 END DO
633 END DO
634 DO j=jstrr,jendr
635 DO i=istr,iendr
636 grid(ng)%umask_avg(i,j)=grid(ng)%umask_avg(i,j)+ &
637 & max(0.0_r8, &
638 & min(grid(ng)%umask_full(i,j), &
639 & 1.0_r8))
640 END DO
641 END DO
642 DO j=jstr,jendr
643 DO i=istrr,iendr
644 grid(ng)%vmask_avg(i,j)=grid(ng)%vmask_avg(i,j)+ &
645 & max(0.0_r8, &
646 & min(grid(ng)%vmask_full(i,j), &
647 & 1.0_r8))
648 END DO
649 END DO
650# endif
651!
652! Accumulate adjoint state variables.
653!
654 IF (aout(idfsur,ng)) THEN
655 DO j=jstrr,jendr
656 DO i=istrr,iendr
657 average(ng)%avgzeta(i,j)=average(ng)%avgzeta(i,j)+ &
658# ifdef WET_DRY
659 & grid(ng)%rmask_full(i,j)* &
660# endif
661 & ocean(ng)%ad_zeta_sol(i,j)
662 END DO
663 END DO
664 END IF
665 IF (aout(idubar,ng)) THEN
666 DO j=jstrr,jendr
667 DO i=istr,iendr
668 average(ng)%avgu2d(i,j)=average(ng)%avgu2d(i,j)+ &
669# ifdef WET_DRY
670 & grid(ng)%umask_full(i,j)* &
671# endif
672 & ocean(ng)%ad_ubar_sol(i,j)
673 END DO
674 END DO
675 END IF
676 IF (aout(idvbar,ng)) THEN
677 DO j=jstr,jendr
678 DO i=istrr,iendr
679 average(ng)%avgv2d(i,j)=average(ng)%avgv2d(i,j)+ &
680# ifdef WET_DRY
681 & grid(ng)%vmask_full(i,j)* &
682# endif
683 & ocean(ng)%ad_vbar_sol(i,j)
684 END DO
685 END DO
686 END IF
687
688# ifdef SOLVE3D
689 IF (aout(iduvel,ng)) THEN
690 DO k=1,n(ng)
691 DO j=jstrr,jendr
692 DO i=istr,iendr
693 average(ng)%avgu3d(i,j,k)=average(ng)%avgu3d(i,j,k)+ &
694# ifdef WET_DRY
695 & grid(ng)%umask_full(i,j)* &
696# endif
697 & ocean(ng)%ad_u(i,j,k,nstp)
698 END DO
699 END DO
700 END DO
701 END IF
702 IF (aout(idvvel,ng)) THEN
703 DO k=1,n(ng)
704 DO j=jstr,jendr
705 DO i=istrr,iendr
706 average(ng)%avgv3d(i,j,k)=average(ng)%avgv3d(i,j,k)+ &
707# ifdef WET_DRY
708 & grid(ng)%vmask_full(i,j)* &
709# endif
710 & ocean(ng)%ad_v(i,j,k,nstp)
711 END DO
712 END DO
713 END DO
714 END IF
715 IF (aout(idovel,ng)) THEN
716 DO k=0,n(ng)
717 DO j=jstrr,jendr
718 DO i=istrr,iendr
719 average(ng)%avgw3d(i,j,k)=average(ng)%avgw3d(i,j,k)+ &
720# ifdef WET_DRY
721 & grid(ng)%rmask_full(i,j)* &
722# endif
723 & ocean(ng)%ad_W_sol(i,j,k)* &
724 & grid(ng)%pm(i,j)* &
725 & grid(ng)%pn(i,j)
726 END DO
727 END DO
728 END DO
729 END IF
730
731 IF (aout(iddano,ng)) THEN
732 DO k=1,n(ng)
733 DO j=jstrr,jendr
734 DO i=istrr,iendr
735 average(ng)%avgrho(i,j,k)=average(ng)%avgrho(i,j,k)+ &
736# ifdef WET_DRY
737 & grid(ng)%rmask_full(i,j)* &
738# endif
739 & ocean(ng)%ad_rho(i,j,k)
740 END DO
741 END DO
742 END DO
743 END IF
744 DO it=1,nt(ng)
745 IF (aout(idtvar(it),ng)) THEN
746 DO k=1,n(ng)
747 DO j=jstrr,jendr
748 DO i=istrr,iendr
749 average(ng)%avgt(i,j,k,it)=average(ng)%avgt(i,j,k,it)+&
750# ifdef WET_DRY
751 & grid(ng)%rmask_full(i,j)* &
752# endif
753 & ocean(ng)%ad_t(i,j,k, &
754 & nstp,it)
755 END DO
756 END DO
757 END DO
758 END IF
759 END DO
760
761# if defined LMD_MIXING || defined MY25_MIXING || defined GLS_MIXING
762 IF (aout(idvvis,ng)) THEN
763 DO k=0,n(ng)
764 DO j=jstrr,jendr
765 DO i=istrr,iendr
766 average(ng)%avgAKv(i,j,k)=average(ng)%avgAKv(i,j,k)+ &
767# ifdef WET_DRY
768 & grid(ng)%rmask_full(i,j)* &
769# endif
770 & mixing(ng)%ad_Akv(i,j,k)
771 END DO
772 END DO
773 END DO
774 END IF
775 IF (aout(idtdif,ng)) THEN
776 DO k=0,n(ng)
777 DO j=jstrr,jendr
778 DO i=istrr,iendr
779 average(ng)%avgAKt(i,j,k)=average(ng)%avgAKt(i,j,k)+ &
780# ifdef WET_DRY
781 & grid(ng)%rmask_full(i,j)* &
782# endif
783 & mixing(ng)%ad_Akt(i,j,k,itemp)
784 END DO
785 END DO
786 END DO
787 END IF
788
789# ifdef SALINITY
790 IF (aout(idsdif,ng)) THEN
791 DO k=0,n(ng)
792 DO j=jstrr,jendr
793 DO i=istrr,iendr
794 average(ng)%avgAKs(i,j,k)=average(ng)%avgAKs(i,j,k)+ &
795# ifdef WET_DRY
796 & grid(ng)%rmask_full(i,j)* &
797# endif
798 & mixing(ng)%ad_Akt(i,j,k,isalt)
799 END DO
800 END DO
801 END DO
802 END IF
803# endif
804
805# endif
806# endif
807!
808! Accumulate adjoint surface and bottom fluxes.
809!
810 IF (aout(idusms,ng)) THEN
811 DO j=jstrr,jendr
812 DO i=istr,iendr
813 average(ng)%avgsus(i,j)=average(ng)%avgsus(i,j)+ &
814# ifdef WET_DRY
815 & grid(ng)%umask_full(i,j)* &
816# endif
817 & forces(ng)%ad_sustr(i,j)
818 END DO
819 END DO
820 END IF
821 IF (aout(idvsms,ng)) THEN
822 DO j=jstr,jendr
823 DO i=istrr,iendr
824 average(ng)%avgsvs(i,j)=average(ng)%avgsvs(i,j)+ &
825# ifdef WET_DRY
826 & grid(ng)%vmask_full(i,j)* &
827# endif
828 & forces(ng)%ad_svstr(i,j)
829 END DO
830 END DO
831 END IF
832
833 IF (aout(idubms,ng)) THEN
834 DO j=jstrr,jendr
835 DO i=istr,iendr
836 average(ng)%avgbus(i,j)=average(ng)%avgbus(i,j)+ &
837# ifdef WET_DRY
838 & grid(ng)%umask_full(i,j)* &
839# endif
840 & forces(ng)%ad_bustr(i,j)
841 END DO
842 END DO
843 END IF
844 IF (aout(idvbms,ng)) THEN
845 DO j=jstr,jendr
846 DO i=istrr,iendr
847 average(ng)%avgbvs(i,j)=average(ng)%avgbvs(i,j)+ &
848# ifdef WET_DRY
849 & grid(ng)%vmask_full(i,j)* &
850# endif
851 & forces(ng)%ad_bvstr(i,j)
852 END DO
853 END DO
854 END IF
855
856# ifdef SOLVE3D
857 IF (aout(idtsur(itemp),ng)) THEN
858 DO j=jstrr,jendr
859 DO i=istrr,iendr
860 average(ng)%avgstf(i,j)=average(ng)%avgstf(i,j)+ &
861# ifdef WET_DRY
862 & grid(ng)%rmask_full(i,j)* &
863# endif
864 & forces(ng)%ad_stflx(i,j,itemp)
865 END DO
866 END DO
867 END IF
868
869# ifdef SALINITY
870 IF (aout(idtsur(isalt),ng)) THEN
871 DO j=jstrr,jendr
872 DO i=istrr,iendr
873 average(ng)%avgswf(i,j)=average(ng)%avgswf(i,j)+ &
874# ifdef WET_DRY
875 & grid(ng)%rmask_full(i,j)* &
876# endif
877 & forces(ng)%ad_stflx(i,j,isalt)
878 END DO
879 END DO
880 END IF
881# endif
882
883# ifdef SHORTWAVE
884 IF (aout(idsrad,ng)) THEN
885 DO j=jstrr,jendr
886 DO i=istrr,iendr
887 average(ng)%avgsrf(i,j)=average(ng)%avgsrf(i,j)+ &
888# ifdef WET_DRY
889 & grid(ng)%rmask_full(i,j)* &
890# endif
891 & forces(ng)%ad_srflx(i,j)
892 END DO
893 END DO
894 END IF
895# endif
896
897# if defined BULK_FLUXES || defined FRC_COUPLING
898 IF (aout(idlhea,ng)) THEN
899 DO j=jstrr,jendr
900 DO i=istrr,iendr
901 average(ng)%avglhf(i,j)=average(ng)%avglhf(i,j)+ &
902# ifdef WET_DRY
903 & grid(ng)%rmask_full(i,j)* &
904# endif
905 & forces(ng)%ad_lhflx(i,j)
906 END DO
907 END DO
908 END IF
909
910 IF (aout(idlrad,ng)) THEN
911 DO j=jstrr,jendr
912 DO i=istrr,iendr
913 average(ng)%avglrf(i,j)=average(ng)%avglrf(i,j)+ &
914# ifdef WET_DRY
915 & grid(ng)%rmask_full(i,j)* &
916# endif
917 & forces(ng)%ad_lrflx(i,j)
918 END DO
919 END DO
920 END IF
921
922 IF (aout(idshea,ng)) THEN
923 DO j=jstrr,jendr
924 DO i=istrr,iendr
925 average(ng)%avgshf(i,j)=average(ng)%avgshf(i,j)+ &
926# ifdef WET_DRY
927 & grid(ng)%rmask_full(i,j)* &
928# endif
929 & forces(ng)%ad_shflx(i,j)
930 END DO
931 END DO
932 END IF
933# endif
934
935# if defined BULK_FLUXES && defined EMINUSP
936 IF (aout(idevap,ng)) THEN
937 DO j=jstrr,jendr
938 DO i=istrr,iendr
939 average(ng)%avgevap(i,j)=average(ng)%avgevap(i,j)+ &
940# ifdef WET_DRY
941 & grid(ng)%rmask_full(i,j)* &
942# endif
943 & forces(ng)%ad_evap(i,j)
944 END DO
945 END DO
946 END IF
947# endif
948# endif
949!
950! Accumulate adjoint quadratic fields.
951!
952 IF (aout(idzzav,ng)) THEN
953 DO j=jstrr,jendr
954 DO i=istrr,iendr
955 average(ng)%avgZZ(i,j)=average(ng)%avgZZ(i,j)+ &
956# ifdef WET_DRY
957 & grid(ng)%rmask_full(i,j)* &
958# endif
959 & ocean(ng)%ad_zeta_sol(i,j)* &
960 & ocean(ng)%ad_zeta_sol(i,j)
961 END DO
962 END DO
963 END IF
964 IF (aout(idu2av,ng)) THEN
965 DO j=jstrr,jendr
966 DO i=istr,iendr
967 average(ng)%avgU2(i,j)=average(ng)%avgU2(i,j)+ &
968# ifdef WET_DRY
969 & grid(ng)%umask_full(i,j)* &
970# endif
971 & ocean(ng)%ad_ubar_sol(i,j)* &
972 & ocean(ng)%ad_ubar_sol(i,j)
973 END DO
974 END DO
975 END IF
976 IF (aout(idv2av,ng)) THEN
977 DO j=jstr,jendr
978 DO i=istrr,iendr
979 average(ng)%avgV2(i,j)=average(ng)%avgV2(i,j)+ &
980# ifdef WET_DRY
981 & grid(ng)%vmask_full(i,j)* &
982# endif
983 & ocean(ng)%ad_vbar_sol(i,j)* &
984 & ocean(ng)%ad_vbar_sol(i,j)
985 END DO
986 END DO
987 END IF
988
989# ifdef SOLVE3D
990 IF (aout(iduuav,ng)) THEN
991 DO k=1,n(ng)
992 DO j=jstrr,jendr
993 DO i=istr,iendr
994 average(ng)%avgUU(i,j,k)=average(ng)%avgUU(i,j,k)+ &
995# ifdef WET_DRY
996 & grid(ng)%umask_full(i,j)* &
997# endif
998 & ocean(ng)%ad_u(i,j,k,nstp)* &
999 & ocean(ng)%ad_u(i,j,k,nstp)
1000 END DO
1001 END DO
1002 END DO
1003 END IF
1004 IF (aout(idvvav,ng)) THEN
1005 DO k=1,n(ng)
1006 DO j=jstr,jendr
1007 DO i=istrr,iendr
1008 average(ng)%avgVV(i,j,k)=average(ng)%avgVV(i,j,k)+ &
1009# ifdef WET_DRY
1010 & grid(ng)%vmask_full(i,j)* &
1011# endif
1012 & ocean(ng)%ad_v(i,j,k,nstp)* &
1013 & ocean(ng)%ad_v(i,j,k,nstp)
1014 END DO
1015 END DO
1016 END DO
1017 END IF
1018 IF (aout(iduvav,ng)) THEN
1019 DO k=1,n(ng)
1020 DO j=jstr,jend
1021 DO i=istr,iend
1022 average(ng)%avgUV(i,j,k)=average(ng)%avgUV(i,j,k)+ &
1023# ifdef WET_DRY
1024 & grid(ng)%rmask_full(i,j)* &
1025# endif
1026 & 0.25_r8* &
1027 & (ocean(ng)%ad_u(i ,j,k,nstp)+ &
1028 & ocean(ng)%ad_u(i+1,j,k,nstp))*&
1029 & (ocean(ng)%ad_v(i,j ,k,nstp)+ &
1030 & ocean(ng)%ad_v(i,j+1,k,nstp))
1031 END DO
1032 END DO
1033 END DO
1034 END IF
1035
1036 DO it=1,nt(ng)
1037 IF (aout(idttav(it),ng)) THEN
1038 DO k=1,n(ng)
1039 DO j=jstrr,jendr
1040 DO i=istrr,iendr
1041 average(ng)%avgTT(i,j,k,it)=average(ng)%avgTT(i,j,k, &
1042 & it)+ &
1043# ifdef WET_DRY
1044 & grid(ng)%rmask_full(i,j)* &
1045# endif
1046 & ocean(ng)%ad_t(i,j,k, &
1047 & nstp,it)* &
1048 & ocean(ng)%ad_t(i,j,k, &
1049 & nstp,it)
1050 END DO
1051 END DO
1052 END DO
1053 END IF
1054 IF (aout(idutav(it),ng)) THEN
1055 DO k=1,n(ng)
1056 DO j=jstrr,jendr
1057 DO i=istr,iend
1058 average(ng)%avgUT(i,j,k,it)=average(ng)%avgUT(i,j,k, &
1059 & it)+ &
1060# ifdef WET_DRY
1061 & grid(ng)%umask_full(i,j)* &
1062# endif
1063 & 0.5_r8* &
1064 & ocean(ng)%ad_u(i,j,k, &
1065 & nstp)* &
1066 & (ocean(ng)%ad_t(i-1,j,k, &
1067 & nstp,it)+ &
1068 & ocean(ng)%ad_t(i ,j,k, &
1069 & nstp,it))
1070 END DO
1071 END DO
1072 END DO
1073 END IF
1074 IF (aout(idvtav(it),ng)) THEN
1075 DO k=1,n(ng)
1076 DO j=jstr,jend
1077 DO i=istrr,iendr
1078 average(ng)%avgVT(i,j,k,it)=average(ng)%avgVT(i,j,k, &
1079 & it)+ &
1080# ifdef WET_DRY
1081 & grid(ng)%vmask_full(i,j)* &
1082# endif
1083 & 0.5_r8* &
1084 & ocean(ng)%ad_v(i,j,k, &
1085 & nstp)* &
1086 & (ocean(ng)%ad_t(i,j-1,k, &
1087 & nstp,it)+ &
1088 & ocean(ng)%ad_t(i,j ,k, &
1089 & nstp,it))
1090 END DO
1091 END DO
1092 END DO
1093 END IF
1094 END DO
1095# endif
1096 END IF
1097!
1098!-----------------------------------------------------------------------
1099! Convert accumulated sums into time-averages, if appropriate.
1100!-----------------------------------------------------------------------
1101!
1102 IF (((iic(ng).lt.ntsavg(ng)).and. &
1103 & (mod(iic(ng)-1,navg(ng)).eq.0).and. &
1104 & ((iic(ng).ne.ntstart(ng)).or.(nrrec(ng).eq.0))).or. &
1105 & ((iic(ng).le.ntsavg(ng)).and.(navg(ng).eq.1))) THEN
1106 IF (domain(ng)%SouthWest_Test(tile)) THEN
1107 IF (navg(ng).eq.1) THEN
1108 avgtime(ng)=time(ng)
1109 ELSE
1110 avgtime(ng)=avgtime(ng)-real(navg(ng),r8)*dt(ng)
1111 END IF
1112 END IF
1113!
1114! Set time-averaged factors for each C-grid variable type. Notice that
1115! the I- and J-ranges are all grid types are the same for convinience.
1116# ifdef WET_DRY
1117! In wetting and drying, the sums are devided by the number of times
1118! that each qrid point is wet.
1119# endif
1120!
1121# ifdef WET_DRY
1122 DO j=jstrr,jendr
1123 DO i=istrr,iendr
1124 pfac(i,j)=1.0_r8/max(1.0_r8, grid(ng)%pmask_avg(i,j))
1125 rfac(i,j)=1.0_r8/max(1.0_r8, grid(ng)%rmask_avg(i,j))
1126 ufac(i,j)=1.0_r8/max(1.0_r8, grid(ng)%umask_avg(i,j))
1127 vfac(i,j)=1.0_r8/max(1.0_r8, grid(ng)%vmask_avg(i,j))
1128 END DO
1129 END DO
1130# else
1131# if defined AD_SENSITIVITY || defined I4DVAR_ANA_SENSITIVITY || \
1132 defined opt_observations || defined sensitivity_4dvar || \
1133 defined so_semi
1134 fac=1.0_r8
1135# else
1136 fac=1.0_r8/real(navg(ng),r8)
1137# endif
1138 DO j=jstrr,jendr
1139 DO i=istrr,iendr
1140 pfac(i,j)=fac
1141 rfac(i,j)=fac
1142 ufac(i,j)=fac
1143 vfac(i,j)=fac
1144 END DO
1145 END DO
1146# endif
1147!
1148! Process adjoint state variables.
1149!
1150 IF (aout(idfsur,ng)) THEN
1151 DO j=jstrr,jendr
1152 DO i=istrr,iendr
1153 average(ng)%avgzeta(i,j)=rfac(i,j)* &
1154 & average(ng)%avgzeta(i,j)
1155 END DO
1156 END DO
1157 END IF
1158 IF (aout(idubar,ng)) THEN
1159 DO j=jstrr,jendr
1160 DO i=istr,iendr
1161 average(ng)%avgu2d(i,j)=ufac(i,j)* &
1162 & average(ng)%avgu2d(i,j)
1163 END DO
1164 END DO
1165 END IF
1166 IF (aout(idvbar,ng)) THEN
1167 DO j=jstr,jendr
1168 DO i=istrr,iendr
1169 average(ng)%avgv2d(i,j)=vfac(i,j)* &
1170 & average(ng)%avgv2d(i,j)
1171 END DO
1172 END DO
1173 END IF
1174
1175# ifdef SOLVE3D
1176 IF (aout(iduvel,ng)) THEN
1177 DO k=1,n(ng)
1178 DO j=jstrr,jendr
1179 DO i=istr,iendr
1180 average(ng)%avgu3d(i,j,k)=ufac(i,j)* &
1181 & average(ng)%avgu3d(i,j,k)
1182 END DO
1183 END DO
1184 END DO
1185 END IF
1186 IF (aout(idvvel,ng)) THEN
1187 DO k=1,n(ng)
1188 DO j=jstr,jendr
1189 DO i=istrr,iendr
1190 average(ng)%avgv3d(i,j,k)=vfac(i,j)* &
1191 & average(ng)%avgv3d(i,j,k)
1192 END DO
1193 END DO
1194 END DO
1195 END IF
1196
1197 IF (aout(idovel,ng)) THEN
1198 DO k=0,n(ng)
1199 DO j=jstrr,jendr
1200 DO i=istrr,iendr
1201 average(ng)%avgw3d(i,j,k)=rfac(i,j)* &
1202 & average(ng)%avgw3d(i,j,k)
1203 END DO
1204 END DO
1205 END DO
1206 END IF
1207
1208 IF (aout(iddano,ng)) THEN
1209 DO k=1,n(ng)
1210 DO j=jstrr,jendr
1211 DO i=istrr,iendr
1212 average(ng)%avgrho(i,j,k)=rfac(i,j)* &
1213 & average(ng)%avgrho(i,j,k)
1214 END DO
1215 END DO
1216 END DO
1217 END IF
1218 DO it=1,nt(ng)
1219 IF (aout(idtvar(it),ng)) THEN
1220 DO k=1,n(ng)
1221 DO j=jstrr,jendr
1222 DO i=istrr,iendr
1223 average(ng)%avgt(i,j,k,it)=rfac(i,j)* &
1224 & average(ng)%avgt(i,j,k,it)
1225 END DO
1226 END DO
1227 END DO
1228 END IF
1229 END DO
1230
1231# if defined LMD_MIXING || defined MY25_MIXING || defined GLS_MIXING
1232 IF (aout(idvvis,ng)) THEN
1233 DO k=0,n(ng)
1234 DO j=jstrr,jendr
1235 DO i=istrr,iendr
1236 average(ng)%avgAKv(i,j,k)=rfac(i,j)* &
1237 & average(ng)%avgAKv(i,j,k)
1238 END DO
1239 END DO
1240 END DO
1241 END IF
1242 IF (aout(idtdif,ng)) THEN
1243 DO k=0,n(ng)
1244 DO j=jstrr,jendr
1245 DO i=istrr,iendr
1246 average(ng)%avgAKt(i,j,k)=rfac(i,j)* &
1247 & average(ng)%avgAKt(i,j,k)
1248 END DO
1249 END DO
1250 END DO
1251 END IF
1252 IF (aout(idsdif,ng)) THEN
1253 DO k=0,n(ng)
1254 DO j=jstrr,jendr
1255 DO i=istrr,iendr
1256 average(ng)%avgAKs(i,j,k)=rfac(i,j)* &
1257 & average(ng)%avgAKs(i,j,k)
1258 END DO
1259 END DO
1260 END DO
1261 END IF
1262# endif
1263# endif
1264!
1265! Process adjoint surface and bottom fluxes.
1266!
1267 IF (aout(idusms,ng)) THEN
1268 DO j=jstrr,jendr
1269 DO i=istr,iendr
1270 average(ng)%avgsus(i,j)=ufac(i,j)* &
1271 & average(ng)%avgsus(i,j)
1272 END DO
1273 END DO
1274 END IF
1275 IF (aout(idvsms,ng)) THEN
1276 DO j=jstr,jendr
1277 DO i=istrr,iendr
1278 average(ng)%avgsvs(i,j)=vfac(i,j)* &
1279 & average(ng)%avgsvs(i,j)
1280 END DO
1281 END DO
1282 END IF
1283
1284 IF (aout(idubms,ng)) THEN
1285 DO j=jstrr,jendr
1286 DO i=istr,iendr
1287 average(ng)%avgbus(i,j)=ufac(i,j)* &
1288 & average(ng)%avgbus(i,j)
1289 END DO
1290 END DO
1291 END IF
1292 IF (aout(idvbms,ng)) THEN
1293 DO j=jstr,jendr
1294 DO i=istrr,iendr
1295 average(ng)%avgbvs(i,j)=vfac(i,j)* &
1296 & average(ng)%avgbvs(i,j)
1297 END DO
1298 END DO
1299 END IF
1300
1301# ifdef SOLVE3D
1302 IF (aout(idtsur(itemp),ng)) THEN
1303 DO j=jstrr,jendr
1304 DO i=istrr,iendr
1305 average(ng)%avgstf(i,j)=rfac(i,j)* &
1306 & average(ng)%avgstf(i,j)
1307 END DO
1308 END DO
1309 END IF
1310
1311# ifdef SALINITY
1312 IF (aout(idtsur(isalt),ng)) THEN
1313 DO j=jstrr,jendr
1314 DO i=istrr,iendr
1315 average(ng)%avgswf(i,j)=rfac(i,j)* &
1316 & average(ng)%avgswf(i,j)
1317 END DO
1318 END DO
1319 END IF
1320# endif
1321
1322# ifdef SHORTWAVE
1323 IF (aout(idsrad,ng)) THEN
1324 DO j=jstrr,jendr
1325 DO i=istrr,iendr
1326 average(ng)%avgsrf(i,j)=rfac(i,j)* &
1327 & average(ng)%avgsrf(i,j)
1328 END DO
1329 END DO
1330 END IF
1331# endif
1332
1333# if defined BULK_FLUXES || defined FRC_COUPLING
1334 IF (aout(idlhea,ng)) THEN
1335 DO j=jstrr,jendr
1336 DO i=istrr,iendr
1337 average(ng)%avglhf(i,j)=rfac(i,j)* &
1338 & average(ng)%avglhf(i,j)
1339 END DO
1340 END DO
1341 END IF
1342
1343 IF (aout(idshea,ng)) THEN
1344 DO j=jstrr,jendr
1345 DO i=istrr,iendr
1346 average(ng)%avgshf(i,j)=rfac(i,j)* &
1347 & average(ng)%avgshf(i,j)
1348 END DO
1349 END DO
1350 END IF
1351
1352 IF (aout(idlrad,ng)) THEN
1353 DO j=jstrr,jendr
1354 DO i=istrr,iendr
1355 average(ng)%avglrf(i,j)=rfac(i,j)* &
1356 & average(ng)%avglrf(i,j)
1357 END DO
1358 END DO
1359 END IF
1360# endif
1361
1362# if defined BULK_FLUXES && defined EMINUSP
1363 IF (aout(idevap,ng)) THEN
1364 DO j=jstrr,jendr
1365 DO i=istrr,iendr
1366 average(ng)%avgevap(i,j)=rfac(i,j)* &
1367 & average(ng)%avgevap(i,j)
1368 END DO
1369 END DO
1370 END IF
1371# endif
1372# endif
1373!
1374! Process adjoint quadratic fields.
1375!
1376 IF (aout(idzzav,ng)) THEN
1377 DO j=jstrr,jendr
1378 DO i=istrr,iendr
1379 average(ng)%avgZZ(i,j)=rfac(i,j)* &
1380 & average(ng)%avgZZ(i,j)
1381 END DO
1382 END DO
1383 END IF
1384 IF (aout(idu2av,ng)) THEN
1385 DO j=jstrr,jendr
1386 DO i=istr,iendr
1387 average(ng)%avgU2(i,j)=ufac(i,j)* &
1388 & average(ng)%avgU2(i,j)
1389 END DO
1390 END DO
1391 END IF
1392 IF (aout(idv2av,ng)) THEN
1393 DO j=jstr,jendr
1394 DO i=istrr,iendr
1395 average(ng)%avgV2(i,j)=vfac(i,j)* &
1396 & average(ng)%avgV2(i,j)
1397 END DO
1398 END DO
1399 END IF
1400
1401# ifdef SOLVE3D
1402 IF (aout(iduuav,ng)) THEN
1403 DO k=1,n(ng)
1404 DO j=jstrr,jendr
1405 DO i=istr,iendr
1406 average(ng)%avgUU(i,j,k)=ufac(i,j)* &
1407 & average(ng)%avgUU(i,j,k)
1408 END DO
1409 END DO
1410 END DO
1411 END IF
1412 IF (aout(idvvav,ng)) THEN
1413 DO k=1,n(ng)
1414 DO j=jstr,jendr
1415 DO i=istrr,iendr
1416 average(ng)%avgVV(i,j,k)=vfac(i,j)* &
1417 & average(ng)%avgVV(i,j,k)
1418 END DO
1419 END DO
1420 END DO
1421 END IF
1422 IF (aout(iduvav,ng)) THEN
1423 DO k=1,n(ng)
1424 DO j=jstr,jend
1425 DO i=istr,iend
1426 average(ng)%avgUV(i,j,k)=rfac(i,j)* &
1427 & average(ng)%avgUV(i,j,k)
1428 END DO
1429 END DO
1430 END DO
1431 END IF
1432
1433 DO it=1,nt(ng)
1434 IF (aout(idttav(it),ng)) THEN
1435 DO k=1,n(ng)
1436 DO j=jstrr,jendr
1437 DO i=istrr,iendr
1438 average(ng)%avgTT(i,j,k,it)=rfac(i,j)* &
1439 & average(ng)%avgTT(i,j,k, &
1440 & it)
1441 END DO
1442 END DO
1443 END DO
1444 END IF
1445 IF (aout(idutav(it),ng)) THEN
1446 DO k=1,n(ng)
1447 DO j=jstrr,jendr
1448 DO i=istr,iend
1449 average(ng)%avgUT(i,j,k,it)=ufac(i,j)* &
1450 & average(ng)%avgUT(i,j,k, &
1451 & it)
1452 END DO
1453 END DO
1454 END DO
1455 END IF
1456 IF (aout(idvtav(it),ng)) THEN
1457 DO k=1,n(ng)
1458 DO j=jstr,jend
1459 DO i=istrr,iendr
1460 average(ng)%avgVT(i,j,k,it)=vfac(i,j)* &
1461 & average(ng)%avgVT(i,j,k, &
1462 & it)
1463 END DO
1464 END DO
1465 END DO
1466 END IF
1467 END DO
1468# endif
1469 END IF
1470!
1471 RETURN
1472 END SUBROUTINE ad_set_avg_tile
1473#endif
1474 END MODULE ad_set_avg_mod
subroutine ad_set_avg_tile(ng, tile, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, nstp)
Definition ad_set_avg.F:72
subroutine, public ad_set_avg(ng, tile)
Definition ad_set_avg.F:26
type(t_average), dimension(:), allocatable average
type(t_forces), dimension(:), allocatable forces
Definition mod_forces.F:554
type(t_grid), dimension(:), allocatable grid
Definition mod_grid.F:365
type(t_mixing), dimension(:), allocatable mixing
Definition mod_mixing.F:399
integer iddano
integer, dimension(:), allocatable idttav
integer idevap
integer idzzav
integer idu2av
integer idubar
integer idvvel
integer idvsms
integer, dimension(:), allocatable idutav
integer idsdif
integer, dimension(:), allocatable idtsur
integer idtdif
integer idfsur
integer, dimension(:), allocatable idtvar
integer idvbms
integer iduvel
integer idovel
integer idvvav
integer idshea
integer idlrad
integer idv2av
integer idusms
integer idvvis
integer, dimension(:), allocatable idvtav
integer idlhea
integer idubms
integer idsrad
integer iduuav
logical, dimension(:,:), allocatable aout
integer iduvav
integer idvbar
type(t_ocean), dimension(:), allocatable ocean
Definition mod_ocean.F:351
integer, dimension(:), allocatable n
Definition mod_param.F:479
integer, parameter iadm
Definition mod_param.F:665
type(t_domain), dimension(:), allocatable domain
Definition mod_param.F:329
integer, dimension(:), allocatable nt
Definition mod_param.F:489
integer, dimension(:), allocatable nrrec
integer, dimension(:), allocatable iic
real(dp), dimension(:), allocatable dt
real(dp), dimension(:), allocatable avgtime
integer, dimension(:), allocatable navg
integer isalt
integer itemp
real(dp), dimension(:), allocatable time
integer, dimension(:), allocatable ntstart
integer, dimension(:), allocatable ntsavg
integer, dimension(:), allocatable nstp
recursive subroutine wclock_off(ng, model, region, line, routine)
Definition timers.F:148
recursive subroutine wclock_on(ng, model, region, line, routine)
Definition timers.F:3