3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
20#ifdef RED_TIDE
22#endif
26#if defined AVERAGES && defined AVERAGES_DETIDE && \
27 (defined ssh_tides || defined uv_tides)
29# if defined PIO_LIB && defined DISTRIBUTE
31# endif
32#endif
33#ifdef RED_TIDE
35#endif
39#if defined SSH_TIDES || defined UV_TIDES
41#endif
42
43#if defined AVERAGES && defined AVERAGES_DETIDE && \
44 (defined ssh_tides || defined uv_tides)
46#endif
48#ifdef SOLVE3D
50#endif
52
53 implicit none
54
55
56
57 integer, intent(in) :: ng
58
59
60
61 logical, save :: recordless = .true.
62
63 logical, dimension(3) :: update = &
64 & (/ .FALSE., .FALSE., .FALSE. /)
65
66 integer :: LBi, UBi, LBj, UBj
67 integer :: itrc, is
68
69#if defined AVERAGES && defined AVERAGES_DETIDE && \
70 (defined ssh_tides || defined uv_tides)
71 integer :: gtype, status, varid, Vsize(4)
72
73 real(r8), parameter :: Fscl = 1.0_r8
74
75 real(r8) :: Fmin, Fmax, Htime
76#endif
77 real(r8) :: time_save = 0.0_r8
78
79 character (len=*), parameter :: MyFile = &
80 & __FILE__
81
82#if defined AVERAGES && defined AVERAGES_DETIDE && \
83 (defined ssh_tides || defined uv_tides)
84# if defined PIO_LIB && defined DISTRIBUTE
85
86 TYPE (IO_Desc_t), pointer :: ioDesc
87 TYPE (My_VarDesc), pointer :: pioVar
88# endif
89#endif
90
92
93
94
95 lbi=lbound(
grid(ng)%h,dim=1)
96 ubi=ubound(
grid(ng)%h,dim=1)
97 lbj=lbound(
grid(ng)%h,dim=2)
98 ubj=ubound(
grid(ng)%h,dim=2)
99
100#if defined AVERAGES && defined AVERAGES_DETIDE && \
101 (defined ssh_tides || defined uv_tides)
102
103
104
105
106 DO is=1,4
107 vsize(is)=0
108 END DO
109#endif
110
111#ifdef PROFILE
112
113
114
115
116
118#endif
119
120#if defined SSH_TIDES || defined UV_TIDES
121
122
123
124
125
126
127
129 IF (
iic(ng).eq.0)
THEN
131# if defined PIO_LIB && defined DISTRIBUTE
132 &
tide(ng)%pioFile, &
133# endif
134 & 1,
tide(ng), recordless, update(1), &
135 & 1,
mtc, 1, 1, 1,
ntc(ng), 1, &
136 &
tides(ng) % Tperiod)
138 END IF
139 END IF
140#endif
141
142#ifdef SSH_TIDES
143
144
145
146
147
149 IF (
iic(ng).eq.0)
THEN
151 time(ng)=8640000.0_r8
153
155# if defined PIO_LIB && defined DISTRIBUTE
156 &
tide(ng)%pioFile, &
157# endif
158 & 1,
tide(ng), update(1), &
159 & lbi, ubi, lbj, ubj,
mtc,
ntc(ng), &
160# ifdef MASKING
161 &
grid(ng) % rmask, &
162# endif
163 &
tides(ng) % SSH_Tamp)
165
167# if defined PIO_LIB && defined DISTRIBUTE
168 &
tide(ng)%pioFile, &
169# endif
170 & 1,
tide(ng), update(1), &
171 & lbi, ubi, lbj, ubj,
mtc,
ntc(ng), &
172# ifdef MASKING
173 &
grid(ng) % rmask, &
174# endif
175 &
tides(ng) % SSH_Tphase)
177
180 END IF
181 END IF
182#endif
183
184#ifdef UV_TIDES
185
186
187
189 IF (
iic(ng).eq.0)
THEN
191 time(ng)=8640000.0_r8
193
195# if defined PIO_LIB && defined DISTRIBUTE
196 &
tide(ng)%pioFile, &
197# endif
198 & 1,
tide(ng), update(1), &
199 & lbi, ubi, lbj, ubj,
mtc,
ntc(ng), &
200# ifdef MASKING
201 &
grid(ng) % rmask, &
202# endif
203 &
tides(ng) % UV_Tangle)
205
207# if defined PIO_LIB && defined DISTRIBUTE
208 &
tide(ng)%pioFile, &
209# endif
210 & 1,
tide(ng), update(1), &
211 & lbi, ubi, lbj, ubj,
mtc,
ntc(ng), &
212# ifdef MASKING
213 &
grid(ng) % rmask, &
214# endif
215 &
tides(ng) % UV_Tphase)
217
219# if defined PIO_LIB && defined DISTRIBUTE
220 &
tide(ng)%pioFile, &
221# endif
222 & 1,
tide(ng), update(1), &
223 & lbi, ubi, lbj, ubj,
mtc,
ntc(ng), &
224# ifdef MASKING
225 &
grid(ng) % rmask, &
226# endif
227 &
tides(ng) % UV_Tmajor)
229
231# if defined PIO_LIB && defined DISTRIBUTE
232 &
tide(ng)%pioFile, &
233# endif
234 & 1,
tide(ng), update(1), &
235 & lbi, ubi, lbj, ubj,
mtc,
ntc(ng), &
236# ifdef MASKING
237 &
grid(ng) % rmask, &
238# endif
239 &
tides(ng) % UV_Tminor)
241
244 END IF
245 END IF
246#endif
247
248#if defined AVERAGES && defined AVERAGES_DETIDE && \
249 (defined ssh_tides || defined uv_tides)
250
251
252
253
254
255
256
259
260
261
262
263
265
266
267
268
269 SELECT CASE (
har(ng)%IOtype)
273 &
rclock%DateNumber, htime, &
274 & ncid =
har(ng)%ncid)
275
276# if defined PIO_LIB && defined DISTRIBUTE
280 &
rclock%DateNumber, htime, &
281 & piofile =
har(ng)%pioFile)
282# endif
283 END SELECT
285
286 IF (
time(ng).ne.htime)
THEN
289 END IF
292 RETURN
293 END IF
294
295
296
297 SELECT CASE (
har(ng)%IOtype)
301 & ncid =
har(ng)%ncid)
302
303# if defined PIO_LIB && defined DISTRIBUT
307 & piofile =
har(ng)%pioFile)
308# endif
309 END SELECT
311
312
313
315# if defined PIO_LIB && defined DISTRIBUTE
317# endif
318 & 1,
har(ng), recordless, update(1), &
319 & 1,
mtc, 1, 1, 1,
ntc(ng), 1, &
320 &
tides(ng) % CosW_sum)
322
323
324
326# if defined PIO_LIB && defined DISTRIBUTE
328# endif
329 & 1,
har(ng), recordless, update(1), &
330 & 1,
mtc, 1, 1, 1,
ntc(ng), 1, &
331 &
tides(ng) % SinW_sum)
333
334
335
337# if defined PIO_LIB && defined DISTRIBUTE
339# endif
340 & 1,
har(ng), recordless, update(1), &
342 &
tides(ng) % CosWCosW)
344
345
346
348# if defined PIO_LIB && defined DISTRIBUTE
350# endif
351 & 1,
har(ng), recordless, update(1), &
353 &
tides(ng) % SinWSinW)
355
356
357
359# if defined PIO_LIB && defined DISTRIBUTE
361# endif
362 & 1,
har(ng), recordless, update(1), &
364 &
tides(ng) % SinWCosW)
366
367
368
370 SELECT CASE (
har(ng)%IOtype)
377 & 0, gtype, vsize, &
378 & lbi, ubi, lbj, ubj, 0, 2*
ntc(ng), &
379 & fscl, fmin, fmax, &
380# ifdef MASKING
381 &
grid(ng) % rmask, &
382# endif
383 &
tides(ng) % zeta_tide)
384
385# if defined PIO_LIB && defined DISTRIBUTE
387
389 IF (kind(
tides(ng)%zeta_tide).eq.8)
THEN
390 piovar%dkind=pio_double
392 ELSE
393 piovar%dkind=pio_real
395 END IF
397
401 & piovar, &
402 & 0, iodesc, vsize, &
403 & lbi, ubi, lbj, ubj, 0, 2*
ntc(ng), &
404 & fscl, fmin, fmax, &
405# ifdef MASKING
406 &
grid(ng) % rmask, &
407# endif
408 &
tides(ng) % zeta_tide)
409
410# endif
411 END SELECT
412 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
416 END IF
419 RETURN
420 ELSE
423 END IF
424 END IF
425 END IF
426
427
428
430 SELECT CASE (
har(ng)%IOtype)
437 & 0, gtype, vsize, &
438 & lbi, ubi, lbj, ubj, 0, 2*
ntc(ng), &
439 & fscl, fmin, fmax, &
440# ifdef MASKING
441 &
grid(ng) % umask, &
442# endif
443 &
tides(ng) % ubar_tide)
444
445# if defined PIO_LIB && defined DISTRIBUTE
447
449 IF (kind(
tides(ng)%ubar_tide).eq.8)
THEN
450 piovar%dkind=pio_double
452 ELSE
453 piovar%dkind=pio_real
455 END IF
457
461 & piovar, &
462 & 0, iodesc, vsize, &
463 & lbi, ubi, lbj, ubj, 0, 2*
ntc(ng), &
464 & fscl, fmin, fmax, &
465# ifdef MASKING
466 &
grid(ng) % umask, &
467# endif
468 &
tides(ng) % ubar_tide)
469# endif
470 END SELECT
471 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
475 END IF
478 RETURN
479 ELSE
482 END IF
483 END IF
484 END IF
485
486
487
489 SELECT CASE (
har(ng)%IOtype)
496 & 0, gtype, vsize, &
497 & lbi, ubi, lbj, ubj, 0, 2*
ntc(ng), &
498 & fscl, fmin, fmax, &
499# ifdef MASKING
500 &
grid(ng) % vmask, &
501# endif
502 &
tides(ng) % vbar_tide)
503
504# if defined PIO_LIB && defined DISTRIBUTE
506
508 IF (kind(
tides(ng)%vbar_tide).eq.8)
THEN
509 piovar%dkind=pio_double
511 ELSE
512 piovar%dkind=pio_real
514 END IF
516
520 & piovar, &
521 & 0, iodesc, vsize, &
522 & lbi, ubi, lbj, ubj, 0, 2*
ntc(ng), &
523 & fscl, fmin, fmax, &
524# ifdef MASKING
525 &
grid(ng) % vmask, &
526# endif
527 &
tides(ng) % vbar_tide)
528# endif
529 END SELECT
530 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
534 END IF
537 RETURN
538 ELSE
541 END IF
542 END IF
543 END IF
544
545# ifdef SOLVE3D
546
547
548
550 SELECT CASE (
har(ng)%IOtype)
557 & 0, gtype, vsize, &
558 & lbi, ubi, lbj, ubj, 1,
n(ng), &
560 & fscl, fmin, fmax, &
561# ifdef MASKING
562 &
grid(ng) % umask, &
563# endif
564 &
tides(ng) % u_tide)
565
566# if defined PIO_LIB && defined DISTRIBUTE
568
570 IF (kind(
tides(ng)%u_tide).eq.8)
THEN
571 piovar%dkind=pio_double
573 ELSE
574 piovar%dkind=pio_real
576 END IF
578
582 & piovar, &
583 & 0, iodesc, vsize, &
584 & lbi, ubi, lbj, ubj, 1,
n(ng), &
586 & fscl, fmin, fmax, &
587# ifdef MASKING
588 &
grid(ng) % umask, &
589# endif
590 &
tides(ng) % u_tide)
591# endif
592 END SELECT
593 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
597 END IF
600 RETURN
601 ELSE
604 END IF
605 END IF
606 END IF
607
608
609
611 SELECT CASE (
har(ng)%IOtype)
618 & 0, gtype, vsize, &
619 & lbi, ubi, lbj, ubj, 1,
n(ng), &
621 & fscl, fmin, fmax, &
622# ifdef MASKING
623 &
grid(ng) % vmask, &
624# endif
625 &
tides(ng) % v_tide)
626
627# if defined PIO_LIB && defined DISTRIBUTE
629
631 IF (kind(
tides(ng)%v_tide).eq.8)
THEN
632 piovar%dkind=pio_double
634 ELSE
635 piovar%dkind=pio_real
637 END IF
639
643 & piovar, &
644 & 0, iodesc, vsize, &
645 & lbi, ubi, lbj, ubj, 1,
n(ng), &
647 & fscl, fmin, fmax, &
648# ifdef MASKING
649 &
grid(ng) % vmask, &
650# endif
651 &
tides(ng) % v_tide)
652# endif
653 END SELECT
654 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
658 END IF
661 RETURN
662 ELSE
665 END IF
666 END IF
667 END IF
668
669
670
673 SELECT CASE (
har(ng)%IOtype)
680 & 0, gtype, vsize, &
681 & lbi, ubi, lbj, ubj, 1,
n(ng), &
683 & fscl, fmin, fmax, &
684# ifdef MASKING
685 &
grid(ng) % rmask, &
686# endif
687 &
tides(ng) % t_tide(:,:,:,:,itrc))
688
689# if defined PIO_LIB && defined DISTRIBUTE
691
692 piovar%vd =>
har(ng)%pioVar(
idtrch(itrc))%vd
693 IF (kind(
tides(ng)%t_tide).eq.8)
THEN
694 piovar%dkind=pio_double
696 ELSE
697 piovar%dkind=pio_real
699 END IF
701
705 & piovar, &
706 & 0, iodesc, vsize, &
707 & lbi, ubi, lbj, ubj, 1,
n(ng), &
709 & fscl, fmin, fmax, &
710# ifdef MASKING
711 &
grid(ng) % rmask, &
712# endif
713 &
tides(ng) % t_tide(:,:,:,:,itrc))
714# endif
715 END SELECT
716 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
720 END IF
723 RETURN
724 ELSE
727 & fmin, fmax
728 END IF
729 END IF
730 END IF
731 END DO
732# endif
733 END IF
734#endif
735
736#ifndef ANA_PSOURCE
737
738
739
740
741
742
743
744 IF ((
iic(ng).eq.0).and. &
747# if defined PIO_LIB && defined DISTRIBUTE
749# endif
750 & 1,
ssf(ng), recordless, update(1), &
751 & 1,
nsrc(ng), 1, 1, 1,
nsrc(ng), 1, &
754
756# if defined PIO_LIB && defined DISTRIBUTE
758# endif
759 & 1,
ssf(ng), recordless, update(1), &
760 & 1,
nsrc(ng), 1, 1, 1,
nsrc(ng), 1, &
763
765# if defined PIO_LIB && defined DISTRIBUTE
767# endif
768 & 1,
ssf(ng), recordless, update(1), &
769 & 1,
nsrc(ng), 1, 1, 1,
nsrc(ng), 1, &
772
773# ifdef SOLVE3D
775# if defined PIO_LIB && defined DISTRIBUTE
777# endif
778 & 1,
ssf(ng), recordless, update(1), &
779 & 1,
nsrc(ng),
n(ng), 1, 1,
nsrc(ng),
n(ng), &
782# endif
783
786 & max(1,min(nint(
sources(ng)%Xsrc(is)),
lm(ng)+1))
788 & max(1,min(nint(
sources(ng)%Ysrc(is)),
mm(ng)+1))
789 END DO
790 END IF
791#endif
792
793#ifdef RED_TIDE
794
795
796
797
798
799
800
802# if defined PIO_LIB && defined DISTRIBUTE
804# endif
806 & lbi, ubi, lbj, ubj, 1, 1, &
807# ifdef MASKING
808 &
grid(ng) % rmask, &
809# endif
810 &
ocean(ng) % CystIni)
814 END IF
815#endif
816
817#ifdef PROFILE
818
819
820
821
822
824#endif
825
826#if defined AVERAGES && defined AVERAGES_DETIDE && \
827 (defined ssh_tides || defined uv_tides)
828
829 10 FORMAT (/,' GET_IDATA - error while reading variable: ',a, &
830 & /,13x,'in input NetCDF file: ',a)
831 20 FORMAT (/,' GET_IDATA - incosistent restart and harmonics time:', &
832 & /,13x,f15.4,2x,f15.4)
833 30 FORMAT (16x,'- ',a,/,19x,'(Min = ',1p,e15.8, &
834 & ' Max = ',1p,e15.8,')')
835#endif
836
837 RETURN
subroutine get_2dfld(ng, model, ifield, ncid, piofile, nfiles, s, update, lbi, ubi, lbj, ubj, iout, irec, fmask, fout)
subroutine get_ngfld(ng, model, ifield, ncid, piofile, nfiles, s, recordless, update, lbi, ubi, ubj, ubk, istr, iend, jrec, fout)
subroutine, public def_tides(ng, ldef)
type(t_grid), dimension(:), allocatable grid
type(t_io), dimension(:), allocatable ssf
type(t_io), dimension(:), allocatable har
type(t_io), dimension(:,:), allocatable frc
type(t_io), dimension(:), allocatable tide
character(len=256) sourcefile
integer, dimension(:), allocatable nffiles
integer, parameter io_nf90
type(file_desc_t), dimension(:,:), pointer frcpiofile
logical, dimension(:,:,:), allocatable linfo
integer, parameter io_pio
integer, dimension(:,:), allocatable frcncid
real(dp), dimension(:,:,:), allocatable fpoint
integer, dimension(:), allocatable idtrcd
integer, dimension(:), allocatable idtrch
character(len=maxlen), dimension(6, 0:nv) vname
logical, dimension(:,:), allocatable aout
type(t_ocean), dimension(:), allocatable ocean
integer, dimension(:), allocatable n
integer, parameter r3dvar
integer, parameter u3dvar
integer, dimension(:), allocatable lm
integer, parameter u2dvar
integer, dimension(:), allocatable mm
integer, parameter r2dvar
integer, parameter v2dvar
integer, parameter v3dvar
type(io_desc_t), dimension(:), pointer iodesc_dp_r2dhar
type(io_desc_t), dimension(:), pointer iodesc_dp_u3dhar
type(io_desc_t), dimension(:), pointer iodesc_dp_v3dhar
type(io_desc_t), dimension(:), pointer iodesc_sp_v2dhar
type(io_desc_t), dimension(:), pointer iodesc_dp_v2dhar
type(io_desc_t), dimension(:), pointer iodesc_sp_r3dhar
type(io_desc_t), dimension(:), pointer iodesc_sp_r2dhar
type(io_desc_t), dimension(:), pointer iodesc_sp_u2dhar
type(io_desc_t), dimension(:), pointer iodesc_sp_v3dhar
type(io_desc_t), dimension(:), pointer iodesc_sp_u3dhar
type(io_desc_t), dimension(:), pointer iodesc_dp_u2dhar
type(io_desc_t), dimension(:), pointer iodesc_dp_r3dhar
logical, dimension(:), allocatable luvsrc
integer, dimension(:), allocatable nrrec
logical, dimension(:,:), allocatable ltracersrc
integer, dimension(:), allocatable iic
logical, dimension(:), allocatable lprocesstides
logical, dimension(:), allocatable ldeftide
real(dp), dimension(:), allocatable tdays
logical, dimension(:), allocatable lwsrc
real(dp), parameter sec2day
integer, dimension(:), allocatable hcount
real(dp), dimension(:), allocatable time
type(t_sources), dimension(:), allocatable sources
integer, dimension(:), allocatable nsrc
integer, dimension(:), allocatable ntc
type(t_tides), dimension(:), allocatable tides
logical function, public founderror(flag, noerr, line, routine)
recursive subroutine wclock_off(ng, model, region, line, routine)
recursive subroutine wclock_on(ng, model, region, line, routine)