102INTEGER,
PARAMETER :: vol7d_maxdim_a = 3, vol7d_maxdim_aa = 4, &
103 vol7d_maxdim_d = 6, vol7d_maxdim_ad = 7
105INTEGER,
PARAMETER :: vol7d_ana_a=1
106INTEGER,
PARAMETER :: vol7d_var_a=2
107INTEGER,
PARAMETER :: vol7d_network_a=3
108INTEGER,
PARAMETER :: vol7d_attr_a=4
109INTEGER,
PARAMETER :: vol7d_ana_d=1
110INTEGER,
PARAMETER :: vol7d_time_d=2
111INTEGER,
PARAMETER :: vol7d_level_d=3
112INTEGER,
PARAMETER :: vol7d_timerange_d=4
113INTEGER,
PARAMETER :: vol7d_var_d=5
114INTEGER,
PARAMETER :: vol7d_network_d=6
115INTEGER,
PARAMETER :: vol7d_attr_d=7
116INTEGER,
PARAMETER :: vol7d_cdatalen=32
119 INTEGER :: r, d, i, b, c
126 TYPE(vol7d_ana),
POINTER :: ana(:)
128 TYPE(datetime),
POINTER :: time(:)
130 TYPE(vol7d_level),
POINTER :: level(:)
132 TYPE(vol7d_timerange),
POINTER :: timerange(:)
134 TYPE(vol7d_network),
POINTER :: network(:)
136 TYPE(vol7d_varvect) :: anavar
138 TYPE(vol7d_varvect) :: anaattr
140 TYPE(vol7d_varvect) :: anavarattr
142 TYPE(vol7d_varvect) :: dativar
144 TYPE(vol7d_varvect) :: datiattr
146 TYPE(vol7d_varvect) :: dativarattr
149 REAL,
POINTER :: volanar(:,:,:)
151 DOUBLE PRECISION,
POINTER :: volanad(:,:,:)
153 INTEGER,
POINTER :: volanai(:,:,:)
155 INTEGER(kind=int_b),
POINTER :: volanab(:,:,:)
157 CHARACTER(len=vol7d_cdatalen),
POINTER :: volanac(:,:,:)
160 REAL,
POINTER :: volanaattrr(:,:,:,:)
162 DOUBLE PRECISION,
POINTER :: volanaattrd(:,:,:,:)
164 INTEGER,
POINTER :: volanaattri(:,:,:,:)
166 INTEGER(kind=int_b),
POINTER :: volanaattrb(:,:,:,:)
168 CHARACTER(len=vol7d_cdatalen),
POINTER :: volanaattrc(:,:,:,:)
171 REAL,
POINTER :: voldatir(:,:,:,:,:,:)
173 DOUBLE PRECISION,
POINTER :: voldatid(:,:,:,:,:,:)
175 INTEGER,
POINTER :: voldatii(:,:,:,:,:,:)
177 INTEGER(kind=int_b),
POINTER :: voldatib(:,:,:,:,:,:)
179 CHARACTER(len=vol7d_cdatalen),
POINTER :: voldatic(:,:,:,:,:,:)
182 REAL,
POINTER :: voldatiattrr(:,:,:,:,:,:,:)
184 DOUBLE PRECISION,
POINTER :: voldatiattrd(:,:,:,:,:,:,:)
186 INTEGER,
POINTER :: voldatiattri(:,:,:,:,:,:,:)
188 INTEGER(kind=int_b),
POINTER :: voldatiattrb(:,:,:,:,:,:,:)
190 CHARACTER(len=vol7d_cdatalen),
POINTER :: voldatiattrc(:,:,:,:,:,:,:)
193 integer :: time_definition
201 MODULE PROCEDURE vol7d_init
206 MODULE PROCEDURE vol7d_delete
211 MODULE PROCEDURE vol7d_write_on_file
216 MODULE PROCEDURE vol7d_read_from_file
221 MODULE PROCEDURE vol7d_display, dat_display, dat_vect_display
226 MODULE PROCEDURE to_char_dat
231 MODULE PROCEDURE doubledatd,doubledatr,doubledati,doubledatb,doubledatc
236 MODULE PROCEDURE realdatd,realdatr,realdati,realdatb,realdatc
241 MODULE PROCEDURE integerdatd,integerdatr,integerdati,integerdatb,integerdatc
246 MODULE PROCEDURE vol7d_copy
251 MODULE PROCEDURE vol7d_c_e
258 MODULE PROCEDURE vol7d_check
275 MODULE PROCEDURE v7d_rounding
298PRIVATE vol7d_get_volr, vol7d_get_vold, vol7d_get_voli, vol7d_get_volb, &
300 volptr1dr, volptr2dr, volptr3dr, volptr4dr, volptr5dr, volptr6dr, volptr7dr, &
301 volptr1dd, volptr2dd, volptr3dd, volptr4dd, volptr5dd, volptr6dd, volptr7dd, &
302 volptr1di, volptr2di, volptr3di, volptr4di, volptr5di, volptr6di, volptr7di, &
303 volptr1db, volptr2db, volptr3db, volptr4db, volptr5db, volptr6db, volptr7db, &
304 volptr1dc, volptr2dc, volptr3dc, volptr4dc, volptr5dc, volptr6dc, volptr7dc, &
305 vol7d_nullifyr, vol7d_nullifyd, vol7d_nullifyi, vol7d_nullifyb, vol7d_nullifyc, &
306 vol7d_init, vol7d_delete, vol7d_write_on_file, vol7d_read_from_file, &
307 vol7d_check_alloc_ana, vol7d_force_alloc_ana, &
308 vol7d_check_alloc_dati, vol7d_force_alloc_dati, vol7d_force_alloc, &
309 vol7d_display, dat_display, dat_vect_display, &
310 to_char_dat, vol7d_check
312PRIVATE doubledatd,doubledatr,doubledati,doubledatb,doubledatc
323SUBROUTINE vol7d_init(this,time_definition)
325INTEGER,
INTENT(IN),
OPTIONAL :: time_definition
327CALL init(this%anavar)
329CALL init(this%anavarattr)
331CALL init(this%datiattr)
334NULLIFY(this%ana, this%time, this%level, this%timerange, this%network)
336NULLIFY(this%volanar, this%volanaattrr, this%voldatir, this%voldatiattrr)
337NULLIFY(this%volanad, this%volanaattrd, this%voldatid, this%voldatiattrd)
338NULLIFY(this%volanai, this%volanaattri, this%voldatii, this%voldatiattri)
339NULLIFY(this%volanab, this%volanaattrb, this%voldatib, this%voldatiattrb)
340NULLIFY(this%volanac, this%volanaattrc, this%voldatic, this%voldatiattrc)
342if(
present(time_definition))
then
343 this%time_definition=time_definition
345 this%time_definition=1
348END SUBROUTINE vol7d_init
354ELEMENTAL SUBROUTINE vol7d_delete(this, dataonly)
355TYPE(
vol7d),
intent(inout) :: this
356LOGICAL,
INTENT(in),
OPTIONAL :: dataonly
359IF (.NOT. optio_log(dataonly))
THEN
360 IF (
ASSOCIATED(this%volanar))
DEALLOCATE(this%volanar)
361 IF (
ASSOCIATED(this%volanad))
DEALLOCATE(this%volanad)
362 IF (
ASSOCIATED(this%volanai))
DEALLOCATE(this%volanai)
363 IF (
ASSOCIATED(this%volanab))
DEALLOCATE(this%volanab)
364 IF (
ASSOCIATED(this%volanac))
DEALLOCATE(this%volanac)
365 IF (
ASSOCIATED(this%volanaattrr))
DEALLOCATE(this%volanaattrr)
366 IF (
ASSOCIATED(this%volanaattrd))
DEALLOCATE(this%volanaattrd)
367 IF (
ASSOCIATED(this%volanaattri))
DEALLOCATE(this%volanaattri)
368 IF (
ASSOCIATED(this%volanaattrb))
DEALLOCATE(this%volanaattrb)
369 IF (
ASSOCIATED(this%volanaattrc))
DEALLOCATE(this%volanaattrc)
371IF (
ASSOCIATED(this%voldatir))
DEALLOCATE(this%voldatir)
372IF (
ASSOCIATED(this%voldatid))
DEALLOCATE(this%voldatid)
373IF (
ASSOCIATED(this%voldatii))
DEALLOCATE(this%voldatii)
374IF (
ASSOCIATED(this%voldatib))
DEALLOCATE(this%voldatib)
375IF (
ASSOCIATED(this%voldatic))
DEALLOCATE(this%voldatic)
376IF (
ASSOCIATED(this%voldatiattrr))
DEALLOCATE(this%voldatiattrr)
377IF (
ASSOCIATED(this%voldatiattrd))
DEALLOCATE(this%voldatiattrd)
378IF (
ASSOCIATED(this%voldatiattri))
DEALLOCATE(this%voldatiattri)
379IF (
ASSOCIATED(this%voldatiattrb))
DEALLOCATE(this%voldatiattrb)
380IF (
ASSOCIATED(this%voldatiattrc))
DEALLOCATE(this%voldatiattrc)
382IF (.NOT. optio_log(dataonly))
THEN
383 IF (
ASSOCIATED(this%ana))
DEALLOCATE(this%ana)
384 IF (
ASSOCIATED(this%network))
DEALLOCATE(this%network)
386IF (
ASSOCIATED(this%time))
DEALLOCATE(this%time)
387IF (
ASSOCIATED(this%level))
DEALLOCATE(this%level)
388IF (
ASSOCIATED(this%timerange))
DEALLOCATE(this%timerange)
390IF (.NOT. optio_log(dataonly))
THEN
397CALL delete(this%dativarattr)
399END SUBROUTINE vol7d_delete
403integer function vol7d_check(this)
404TYPE(vol7d),
intent(in) :: this
405integer :: i,j,k,l,m,n
409if (
associated(this%voldatii))
then
410do i = 1,
size(this%voldatii,1)
411 do j = 1,
size(this%voldatii,2)
412 do k = 1,
size(this%voldatii,3)
413 do l = 1,
size(this%voldatii,4)
414 do m = 1,
size(this%voldatii,5)
415 do n = 1,
size(this%voldatii,6)
416 if (this%voldatii(i,j,k,l,m,n) /= this%voldatii(i,j,k,l,m,n) )
then
417 CALL l4f_log(l4f_warn,
"check: abnormal value at voldatii("&
430if (
associated(this%voldatir))
then
431do i = 1,
size(this%voldatir,1)
432 do j = 1,
size(this%voldatir,2)
433 do k = 1,
size(this%voldatir,3)
434 do l = 1,
size(this%voldatir,4)
435 do m = 1,
size(this%voldatir,5)
436 do n = 1,
size(this%voldatir,6)
437 if (this%voldatir(i,j,k,l,m,n) /= this%voldatir(i,j,k,l,m,n) )
then
438 CALL l4f_log(l4f_warn,
"check: abnormal value at voldatir("&
450if (
associated(this%voldatid))
then
451do i = 1,
size(this%voldatid,1)
452 do j = 1,
size(this%voldatid,2)
453 do k = 1,
size(this%voldatid,3)
454 do l = 1,
size(this%voldatid,4)
455 do m = 1,
size(this%voldatid,5)
456 do n = 1,
size(this%voldatid,6)
457 if (this%voldatid(i,j,k,l,m,n) /= this%voldatid(i,j,k,l,m,n) )
then
458 CALL l4f_log(l4f_warn,
"check: abnormal value at voldatid("&
470if (
associated(this%voldatib))
then
471do i = 1,
size(this%voldatib,1)
472 do j = 1,
size(this%voldatib,2)
473 do k = 1,
size(this%voldatib,3)
474 do l = 1,
size(this%voldatib,4)
475 do m = 1,
size(this%voldatib,5)
476 do n = 1,
size(this%voldatib,6)
477 if (this%voldatib(i,j,k,l,m,n) /= this%voldatib(i,j,k,l,m,n) )
then
478 CALL l4f_log(l4f_warn,
"check: abnormal value at voldatib("&
490end function vol7d_check
496SUBROUTINE vol7d_display(this)
497TYPE(vol7d),
intent(in) :: this
501DOUBLE PRECISION :: ddat
503INTEGER(kind=int_b) :: bdat
504CHARACTER(len=vol7d_cdatalen) :: cdat
507print*,
"<<<<<<<<<<<<<<<<<<< vol7d object >>>>>>>>>>>>>>>>>>>>"
508if (this%time_definition == 0)
then
509 print*,
"TIME DEFINITION: time is reference time"
510else if (this%time_definition == 1)
then
511 print*,
"TIME DEFINITION: time is validity time"
512else if (this%time_definition == 2)
then
513 print*,
"TIME DEFINITION: time is validity time, forecast range forced to 0"
515 print*,
"Time definition has a wrong walue:", this%time_definition
518IF (
ASSOCIATED(this%network))
then
519 print*,
"---- network vector ----"
520 print*,
"elements=",
size(this%network)
521 do i=1,
size(this%network)
526IF (
ASSOCIATED(this%ana))
then
527 print*,
"---- ana vector ----"
528 print*,
"elements=",
size(this%ana)
529 do i=1,
size(this%ana)
534IF (
ASSOCIATED(this%time))
then
535 print*,
"---- time vector ----"
536 print*,
"elements=",
size(this%time)
537 do i=1,
size(this%time)
542IF (
ASSOCIATED(this%level))
then
543 print*,
"---- level vector ----"
544 print*,
"elements=",
size(this%level)
545 do i =1,
size(this%level)
550IF (
ASSOCIATED(this%timerange))
then
551 print*,
"---- timerange vector ----"
552 print*,
"elements=",
size(this%timerange)
553 do i =1,
size(this%timerange)
554 call display(this%timerange(i))
559print*,
"---- ana vector ----"
561print*,
"->>>>>>>>> anavar -"
564print*,
"->>>>>>>>> anaattr -"
567print*,
"->>>>>>>>> anavarattr -"
570print*,
"-- ana data section (first point) --"
584IF (
SIZE(this%ana) > 0 .AND.
SIZE(this%network) > 0)
THEN
585if (
associated(this%volanai))
then
586 do i=1,
size(this%anavar%i)
587 idat=this%volanai(1,i,1)
588 if (
associated(this%anavar%i))
call display(this%anavar%i(i),idat,rdat,ddat,bdat,cdat)
593if (
associated(this%volanar))
then
594 do i=1,
size(this%anavar%r)
595 rdat=this%volanar(1,i,1)
596 if (
associated(this%anavar%r))
call display(this%anavar%r(i),idat,rdat,ddat,bdat,cdat)
601if (
associated(this%volanad))
then
602 do i=1,
size(this%anavar%d)
603 ddat=this%volanad(1,i,1)
604 if (
associated(this%anavar%d))
call display(this%anavar%d(i),idat,rdat,ddat,bdat,cdat)
609if (
associated(this%volanab))
then
610 do i=1,
size(this%anavar%b)
611 bdat=this%volanab(1,i,1)
612 if (
associated(this%anavar%b))
call display(this%anavar%b(i),idat,rdat,ddat,bdat,cdat)
617if (
associated(this%volanac))
then
618 do i=1,
size(this%anavar%c)
619 cdat=this%volanac(1,i,1)
620 if (
associated(this%anavar%c))
call display(this%anavar%c(i),idat,rdat,ddat,bdat,cdat)
626print*,
"---- data vector ----"
628print*,
"->>>>>>>>> dativar -"
631print*,
"->>>>>>>>> datiattr -"
634print*,
"->>>>>>>>> dativarattr -"
637print*,
"-- data data section (first point) --"
645IF (
SIZE(this%ana) > 0 .AND.
SIZE(this%network) > 0 .AND.
size(this%time) > 0 &
646 .AND.
size(this%level) > 0 .AND.
size(this%timerange) > 0)
THEN
647if (
associated(this%voldatii))
then
648 do i=1,
size(this%dativar%i)
649 idat=this%voldatii(1,1,1,1,i,1)
650 if (
associated(this%dativar%i))
call display(this%dativar%i(i),idat,rdat,ddat,bdat,cdat)
655if (
associated(this%voldatir))
then
656 do i=1,
size(this%dativar%r)
657 rdat=this%voldatir(1,1,1,1,i,1)
658 if (
associated(this%dativar%r))
call display(this%dativar%r(i),idat,rdat,ddat,bdat,cdat)
663if (
associated(this%voldatid))
then
664 do i=1,
size(this%dativar%d)
665 ddat=this%voldatid(1,1,1,1,i,1)
666 if (
associated(this%dativar%d))
call display(this%dativar%d(i),idat,rdat,ddat,bdat,cdat)
671if (
associated(this%voldatib))
then
672 do i=1,
size(this%dativar%b)
673 bdat=this%voldatib(1,1,1,1,i,1)
674 if (
associated(this%dativar%b))
call display(this%dativar%b(i),idat,rdat,ddat,bdat,cdat)
679if (
associated(this%voldatic))
then
680 do i=1,
size(this%dativar%c)
681 cdat=this%voldatic(1,1,1,1,i,1)
682 if (
associated(this%dativar%c))
call display(this%dativar%c(i),idat,rdat,ddat,bdat,cdat)
688print*,
"<<<<<<<<<<<<<<<<<<< END vol7d object >>>>>>>>>>>>>>>>>>>>"
690END SUBROUTINE vol7d_display
694SUBROUTINE dat_display(this,idat,rdat,ddat,bdat,cdat)
695TYPE(vol7d_var),
intent(in) :: this
699DOUBLE PRECISION :: ddat
703INTEGER(kind=int_b) :: bdat
705CHARACTER(len=*) :: cdat
707print *, to_char_dat(this,idat,rdat,ddat,bdat,cdat)
709end SUBROUTINE dat_display
712SUBROUTINE dat_vect_display(this,idat,rdat,ddat,bdat,cdat)
714TYPE(vol7d_var),
intent(in) :: this(:)
718DOUBLE PRECISION :: ddat(:)
722INTEGER(kind=int_b) :: bdat(:)
724CHARACTER(len=*):: cdat(:)
729 call display(this(i),idat(i),rdat(i),ddat(i),bdat(i),cdat(i))
732end SUBROUTINE dat_vect_display
735FUNCTION to_char_dat(this,idat,rdat,ddat,bdat,cdat)
739TYPE(vol7d_var),
INTENT(in) :: this
743DOUBLE PRECISION :: ddat
747INTEGER(kind=int_b) :: bdat
749CHARACTER(len=*) :: cdat
750CHARACTER(len=80) :: to_char_dat
752CHARACTER(len=LEN(to_char_dat)) :: to_char_tmp
756INTEGER :: handle, ier
761if (
c_e(idat)) to_char_dat=trim(to_char_dat)//
" ;int> "//trim(
to_char(idat))
762if (
c_e(rdat)) to_char_dat=trim(to_char_dat)//
" ;real> "//trim(
to_char(rdat))
763if (
c_e(ddat)) to_char_dat=trim(to_char_dat)//
" ;double> "//trim(
to_char(ddat))
764if (
c_e(bdat)) to_char_dat=trim(to_char_dat)//
" ;byte> "//trim(
to_char(bdat))
767 ier = idba_messaggi(handle,
"/dev/null",
"w",
"BUFR")
768 ier = idba_spiegab(handle,this%btable,cdat,to_char_tmp)
769 ier = idba_fatto(handle)
770 to_char_dat=trim(to_char_dat)//
" ;char> "//trim(to_char_tmp)
776if (
c_e(idat)) to_char_dat=trim(to_char_dat)//
" ;int> "//trim(
to_char(idat))
777if (
c_e(rdat)) to_char_dat=trim(to_char_dat)//
" ;real> "//trim(
to_char(rdat))
778if (
c_e(ddat)) to_char_dat=trim(to_char_dat)//
" ;double> "//trim(
to_char(ddat))
779if (
c_e(bdat)) to_char_dat=trim(to_char_dat)//
" ;byte> "//trim(
to_char(bdat))
780if (
c_e(cdat)) to_char_dat=trim(to_char_dat)//
" ;char> "//trim(cdat)
784END FUNCTION to_char_dat
789FUNCTION vol7d_c_e(this)
RESULT(c_e)
790TYPE(
vol7d),
INTENT(in) :: this
794c_e =
ASSOCIATED(this%ana) .OR.
ASSOCIATED(this%time) .OR. &
795 ASSOCIATED(this%level) .OR.
ASSOCIATED(this%timerange) .OR. &
796 ASSOCIATED(this%network) .OR. &
797 ASSOCIATED(this%anavar%r) .OR.
ASSOCIATED(this%anavar%d) .OR. &
798 ASSOCIATED(this%anavar%i) .OR.
ASSOCIATED(this%anavar%b) .OR. &
799 ASSOCIATED(this%anavar%c) .OR. &
800 ASSOCIATED(this%anaattr%r) .OR.
ASSOCIATED(this%anaattr%d) .OR. &
801 ASSOCIATED(this%anaattr%i) .OR.
ASSOCIATED(this%anaattr%b) .OR. &
802 ASSOCIATED(this%anaattr%c) .OR. &
803 ASSOCIATED(this%dativar%r) .OR.
ASSOCIATED(this%dativar%d) .OR. &
804 ASSOCIATED(this%dativar%i) .OR.
ASSOCIATED(this%dativar%b) .OR. &
805 ASSOCIATED(this%dativar%c) .OR. &
806 ASSOCIATED(this%datiattr%r) .OR.
ASSOCIATED(this%datiattr%d) .OR. &
807 ASSOCIATED(this%datiattr%i) .OR.
ASSOCIATED(this%datiattr%b) .OR. &
808 ASSOCIATED(this%datiattr%c)
810END FUNCTION vol7d_c_e
851SUBROUTINE vol7d_alloc(this, nana, ntime, nlevel, ntimerange, nnetwork, &
852 nanavarr, nanavard, nanavari, nanavarb, nanavarc, &
853 nanaattrr, nanaattrd, nanaattri, nanaattrb, nanaattrc, &
854 nanavarattrr, nanavarattrd, nanavarattri, nanavarattrb, nanavarattrc, &
855 ndativarr, ndativard, ndativari, ndativarb, ndativarc, &
856 ndatiattrr, ndatiattrd, ndatiattri, ndatiattrb, ndatiattrc, &
857 ndativarattrr, ndativarattrd, ndativarattri, ndativarattrb, ndativarattrc, &
859TYPE(
vol7d),
INTENT(inout) :: this
860INTEGER,
INTENT(in),
OPTIONAL :: nana
861INTEGER,
INTENT(in),
OPTIONAL :: ntime
862INTEGER,
INTENT(in),
OPTIONAL :: nlevel
863INTEGER,
INTENT(in),
OPTIONAL :: ntimerange
864INTEGER,
INTENT(in),
OPTIONAL :: nnetwork
866INTEGER,
INTENT(in),
OPTIONAL :: &
867 nanavarr, nanavard, nanavari, nanavarb, nanavarc, &
868 nanaattrr, nanaattrd, nanaattri, nanaattrb, nanaattrc, &
869 nanavarattrr, nanavarattrd, nanavarattri, nanavarattrb, nanavarattrc, &
870 ndativarr, ndativard, ndativari, ndativarb, ndativarc, &
871 ndatiattrr, ndatiattrd, ndatiattri, ndatiattrb, ndatiattrc, &
872 ndativarattrr, ndativarattrd, ndativarattri, ndativarattrb, ndativarattrc
873LOGICAL,
INTENT(in),
OPTIONAL :: ini
878IF (
PRESENT(ini))
THEN
885IF (
PRESENT(nana))
THEN
887 IF (
ASSOCIATED(this%ana))
DEALLOCATE(this%ana)
888 ALLOCATE(this%ana(nana))
891 CALL init(this%ana(i))
896IF (
PRESENT(ntime))
THEN
898 IF (
ASSOCIATED(this%time))
DEALLOCATE(this%time)
899 ALLOCATE(this%time(ntime))
902 CALL init(this%time(i))
907IF (
PRESENT(nlevel))
THEN
908 IF (nlevel >= 0)
THEN
909 IF (
ASSOCIATED(this%level))
DEALLOCATE(this%level)
910 ALLOCATE(this%level(nlevel))
913 CALL init(this%level(i))
918IF (
PRESENT(ntimerange))
THEN
919 IF (ntimerange >= 0)
THEN
920 IF (
ASSOCIATED(this%timerange))
DEALLOCATE(this%timerange)
921 ALLOCATE(this%timerange(ntimerange))
924 CALL init(this%timerange(i))
929IF (
PRESENT(nnetwork))
THEN
930 IF (nnetwork >= 0)
THEN
931 IF (
ASSOCIATED(this%network))
DEALLOCATE(this%network)
932 ALLOCATE(this%network(nnetwork))
935 CALL init(this%network(i))
941CALL vol7d_varvect_alloc(this%anavar, nanavarr, nanavard, &
942 nanavari, nanavarb, nanavarc, ini)
943CALL vol7d_varvect_alloc(this%anaattr, nanaattrr, nanaattrd, &
944 nanaattri, nanaattrb, nanaattrc, ini)
945CALL vol7d_varvect_alloc(this%anavarattr, nanavarattrr, nanavarattrd, &
946 nanavarattri, nanavarattrb, nanavarattrc, ini)
947CALL vol7d_varvect_alloc(this%dativar, ndativarr, ndativard, &
948 ndativari, ndativarb, ndativarc, ini)
949CALL vol7d_varvect_alloc(this%datiattr, ndatiattrr, ndatiattrd, &
950 ndatiattri, ndatiattrb, ndatiattrc, ini)
951CALL vol7d_varvect_alloc(this%dativarattr, ndativarattrr, ndativarattrd, &
952 ndativarattri, ndativarattrb, ndativarattrc, ini)
954END SUBROUTINE vol7d_alloc
957FUNCTION vol7d_check_alloc_ana(this)
958TYPE(
vol7d),
INTENT(in) :: this
959LOGICAL :: vol7d_check_alloc_ana
961vol7d_check_alloc_ana =
ASSOCIATED(this%ana) .AND.
ASSOCIATED(this%network)
963END FUNCTION vol7d_check_alloc_ana
965SUBROUTINE vol7d_force_alloc_ana(this, ini)
966TYPE(
vol7d),
INTENT(inout) :: this
967LOGICAL,
INTENT(in),
OPTIONAL :: ini
970IF (.NOT.
ASSOCIATED(this%ana))
CALL vol7d_alloc(this, nana=1, ini=ini)
971IF (.NOT.
ASSOCIATED(this%network))
CALL vol7d_alloc(this, nnetwork=1, ini=ini)
973END SUBROUTINE vol7d_force_alloc_ana
976FUNCTION vol7d_check_alloc_dati(this)
977TYPE(
vol7d),
INTENT(in) :: this
978LOGICAL :: vol7d_check_alloc_dati
980vol7d_check_alloc_dati = vol7d_check_alloc_ana(this) .AND. &
981 ASSOCIATED(this%time) .AND.
ASSOCIATED(this%level) .AND. &
982 ASSOCIATED(this%timerange)
984END FUNCTION vol7d_check_alloc_dati
986SUBROUTINE vol7d_force_alloc_dati(this, ini)
987TYPE(
vol7d),
INTENT(inout) :: this
988LOGICAL,
INTENT(in),
OPTIONAL :: ini
991CALL vol7d_force_alloc_ana(this, ini)
992IF (.NOT.
ASSOCIATED(this%time))
CALL vol7d_alloc(this, ntime=1, ini=ini)
993IF (.NOT.
ASSOCIATED(this%level))
CALL vol7d_alloc(this, nlevel=1, ini=ini)
994IF (.NOT.
ASSOCIATED(this%timerange))
CALL vol7d_alloc(this, ntimerange=1, ini=ini)
996END SUBROUTINE vol7d_force_alloc_dati
999SUBROUTINE vol7d_force_alloc(this)
1000TYPE(
vol7d),
INTENT(inout) :: this
1003IF (.NOT.
ASSOCIATED(this%ana))
CALL vol7d_alloc(this, nana=0)
1004IF (.NOT.
ASSOCIATED(this%network))
CALL vol7d_alloc(this, nnetwork=0)
1005IF (.NOT.
ASSOCIATED(this%time))
CALL vol7d_alloc(this, ntime=0)
1006IF (.NOT.
ASSOCIATED(this%level))
CALL vol7d_alloc(this, nlevel=0)
1007IF (.NOT.
ASSOCIATED(this%timerange))
CALL vol7d_alloc(this, ntimerange=0)
1009END SUBROUTINE vol7d_force_alloc
1012FUNCTION vol7d_check_vol(this)
1013TYPE(
vol7d),
INTENT(in) :: this
1014LOGICAL :: vol7d_check_vol
1016vol7d_check_vol =
c_e(this)
1019IF (
ASSOCIATED(this%anavar%r) .AND. .NOT.
ASSOCIATED(this%volanar))
THEN
1020 vol7d_check_vol = .false.
1023IF (
ASSOCIATED(this%anavar%d) .AND. .NOT.
ASSOCIATED(this%volanad))
THEN
1024 vol7d_check_vol = .false.
1027IF (
ASSOCIATED(this%anavar%i) .AND. .NOT.
ASSOCIATED(this%volanai))
THEN
1028 vol7d_check_vol = .false.
1031IF (
ASSOCIATED(this%anavar%b) .AND. .NOT.
ASSOCIATED(this%volanab))
THEN
1032 vol7d_check_vol = .false.
1035IF (
ASSOCIATED(this%anavar%c) .AND. .NOT.
ASSOCIATED(this%volanac))
THEN
1036 vol7d_check_vol = .false.
1038IF (
ASSOCIATED(this%anavar%r) .OR.
ASSOCIATED(this%anavar%d) .OR. &
1039 ASSOCIATED(this%anavar%i) .OR.
ASSOCIATED(this%anavar%b) .OR. &
1040 ASSOCIATED(this%anavar%c))
THEN
1041 vol7d_check_vol = vol7d_check_vol .AND. vol7d_check_alloc_ana(this)
1045IF (
ASSOCIATED(this%anaattr%r) .AND.
ASSOCIATED(this%anavarattr%r) .AND. &
1046 .NOT.
ASSOCIATED(this%volanaattrr))
THEN
1047 vol7d_check_vol = .false.
1050IF (
ASSOCIATED(this%anaattr%d) .AND.
ASSOCIATED(this%anavarattr%d) .AND. &
1051 .NOT.
ASSOCIATED(this%volanaattrd))
THEN
1052 vol7d_check_vol = .false.
1055IF (
ASSOCIATED(this%anaattr%i) .AND.
ASSOCIATED(this%anavarattr%i) .AND. &
1056 .NOT.
ASSOCIATED(this%volanaattri))
THEN
1057 vol7d_check_vol = .false.
1060IF (
ASSOCIATED(this%anaattr%b) .AND.
ASSOCIATED(this%anavarattr%b) .AND. &
1061 .NOT.
ASSOCIATED(this%volanaattrb))
THEN
1062 vol7d_check_vol = .false.
1065IF (
ASSOCIATED(this%anaattr%c) .AND.
ASSOCIATED(this%anavarattr%c) .AND. &
1066 .NOT.
ASSOCIATED(this%volanaattrc))
THEN
1067 vol7d_check_vol = .false.
1071IF (
ASSOCIATED(this%dativar%r) .AND. .NOT.
ASSOCIATED(this%voldatir))
THEN
1072 vol7d_check_vol = .false.
1075IF (
ASSOCIATED(this%dativar%d) .AND. .NOT.
ASSOCIATED(this%voldatid))
THEN
1076 vol7d_check_vol = .false.
1079IF (
ASSOCIATED(this%dativar%i) .AND. .NOT.
ASSOCIATED(this%voldatii))
THEN
1080 vol7d_check_vol = .false.
1083IF (
ASSOCIATED(this%dativar%b) .AND. .NOT.
ASSOCIATED(this%voldatib))
THEN
1084 vol7d_check_vol = .false.
1087IF (
ASSOCIATED(this%dativar%c) .AND. .NOT.
ASSOCIATED(this%voldatic))
THEN
1088 vol7d_check_vol = .false.
1092IF (
ASSOCIATED(this%datiattr%r) .AND.
ASSOCIATED(this%dativarattr%r) .AND. &
1093 .NOT.
ASSOCIATED(this%voldatiattrr))
THEN
1094 vol7d_check_vol = .false.
1097IF (
ASSOCIATED(this%datiattr%d) .AND.
ASSOCIATED(this%dativarattr%d) .AND. &
1098 .NOT.
ASSOCIATED(this%voldatiattrd))
THEN
1099 vol7d_check_vol = .false.
1102IF (
ASSOCIATED(this%datiattr%i) .AND.
ASSOCIATED(this%dativarattr%i) .AND. &
1103 .NOT.
ASSOCIATED(this%voldatiattri))
THEN
1104 vol7d_check_vol = .false.
1107IF (
ASSOCIATED(this%datiattr%b) .AND.
ASSOCIATED(this%dativarattr%b) .AND. &
1108 .NOT.
ASSOCIATED(this%voldatiattrb))
THEN
1109 vol7d_check_vol = .false.
1112IF (
ASSOCIATED(this%datiattr%c) .AND.
ASSOCIATED(this%dativarattr%c) .AND. &
1113 .NOT.
ASSOCIATED(this%voldatiattrc))
THEN
1114 vol7d_check_vol = .false.
1116IF (
ASSOCIATED(this%dativar%r) .OR.
ASSOCIATED(this%dativar%d) .OR. &
1117 ASSOCIATED(this%dativar%i) .OR.
ASSOCIATED(this%dativar%b) .OR. &
1118 ASSOCIATED(this%dativar%c))
THEN
1119 vol7d_check_vol = vol7d_check_vol .AND. vol7d_check_alloc_dati(this)
1122END FUNCTION vol7d_check_vol
1139SUBROUTINE vol7d_alloc_vol(this, ini, inivol)
1140TYPE(
vol7d),
INTENT(inout) :: this
1141LOGICAL,
INTENT(in),
OPTIONAL :: ini
1142LOGICAL,
INTENT(in),
OPTIONAL :: inivol
1146IF (
PRESENT(inivol))
THEN
1153IF (
ASSOCIATED(this%anavar%r) .AND. .NOT.
ASSOCIATED(this%volanar))
THEN
1154 CALL vol7d_force_alloc_ana(this, ini)
1155 ALLOCATE(this%volanar(
SIZE(this%ana),
SIZE(this%anavar%r),
SIZE(this%network)))
1156 IF (linivol) this%volanar(:,:,:) = rmiss
1159IF (
ASSOCIATED(this%anavar%d) .AND. .NOT.
ASSOCIATED(this%volanad))
THEN
1160 CALL vol7d_force_alloc_ana(this, ini)
1161 ALLOCATE(this%volanad(
SIZE(this%ana),
SIZE(this%anavar%d),
SIZE(this%network)))
1162 IF (linivol) this%volanad(:,:,:) = rdmiss
1165IF (
ASSOCIATED(this%anavar%i) .AND. .NOT.
ASSOCIATED(this%volanai))
THEN
1166 CALL vol7d_force_alloc_ana(this, ini)
1167 ALLOCATE(this%volanai(
SIZE(this%ana),
SIZE(this%anavar%i),
SIZE(this%network)))
1168 IF (linivol) this%volanai(:,:,:) = imiss
1171IF (
ASSOCIATED(this%anavar%b) .AND. .NOT.
ASSOCIATED(this%volanab))
THEN
1172 CALL vol7d_force_alloc_ana(this, ini)
1173 ALLOCATE(this%volanab(
SIZE(this%ana),
SIZE(this%anavar%b),
SIZE(this%network)))
1174 IF (linivol) this%volanab(:,:,:) = ibmiss
1177IF (
ASSOCIATED(this%anavar%c) .AND. .NOT.
ASSOCIATED(this%volanac))
THEN
1178 CALL vol7d_force_alloc_ana(this, ini)
1179 ALLOCATE(this%volanac(
SIZE(this%ana),
SIZE(this%anavar%c),
SIZE(this%network)))
1180 IF (linivol) this%volanac(:,:,:) = cmiss
1184IF (
ASSOCIATED(this%anaattr%r) .AND.
ASSOCIATED(this%anavarattr%r) .AND. &
1185 .NOT.
ASSOCIATED(this%volanaattrr))
THEN
1186 CALL vol7d_force_alloc_ana(this, ini)
1187 ALLOCATE(this%volanaattrr(
SIZE(this%ana),
SIZE(this%anavarattr%r), &
1188 SIZE(this%network),
SIZE(this%anaattr%r)))
1189 IF (linivol) this%volanaattrr(:,:,:,:) = rmiss
1192IF (
ASSOCIATED(this%anaattr%d) .AND.
ASSOCIATED(this%anavarattr%d) .AND. &
1193 .NOT.
ASSOCIATED(this%volanaattrd))
THEN
1194 CALL vol7d_force_alloc_ana(this, ini)
1195 ALLOCATE(this%volanaattrd(
SIZE(this%ana),
SIZE(this%anavarattr%d), &
1196 SIZE(this%network),
SIZE(this%anaattr%d)))
1197 IF (linivol) this%volanaattrd(:,:,:,:) = rdmiss
1200IF (
ASSOCIATED(this%anaattr%i) .AND.
ASSOCIATED(this%anavarattr%i) .AND. &
1201 .NOT.
ASSOCIATED(this%volanaattri))
THEN
1202 CALL vol7d_force_alloc_ana(this, ini)
1203 ALLOCATE(this%volanaattri(
SIZE(this%ana),
SIZE(this%anavarattr%i), &
1204 SIZE(this%network),
SIZE(this%anaattr%i)))
1205 IF (linivol) this%volanaattri(:,:,:,:) = imiss
1208IF (
ASSOCIATED(this%anaattr%b) .AND.
ASSOCIATED(this%anavarattr%b) .AND. &
1209 .NOT.
ASSOCIATED(this%volanaattrb))
THEN
1210 CALL vol7d_force_alloc_ana(this, ini)
1211 ALLOCATE(this%volanaattrb(
SIZE(this%ana),
SIZE(this%anavarattr%b), &
1212 SIZE(this%network),
SIZE(this%anaattr%b)))
1213 IF (linivol) this%volanaattrb(:,:,:,:) = ibmiss
1216IF (
ASSOCIATED(this%anaattr%c) .AND.
ASSOCIATED(this%anavarattr%c) .AND. &
1217 .NOT.
ASSOCIATED(this%volanaattrc))
THEN
1218 CALL vol7d_force_alloc_ana(this, ini)
1219 ALLOCATE(this%volanaattrc(
SIZE(this%ana),
SIZE(this%anavarattr%c), &
1220 SIZE(this%network),
SIZE(this%anaattr%c)))
1221 IF (linivol) this%volanaattrc(:,:,:,:) = cmiss
1225IF (
ASSOCIATED(this%dativar%r) .AND. .NOT.
ASSOCIATED(this%voldatir))
THEN
1226 CALL vol7d_force_alloc_dati(this, ini)
1227 ALLOCATE(this%voldatir(
SIZE(this%ana),
SIZE(this%time),
SIZE(this%level), &
1228 SIZE(this%timerange),
SIZE(this%dativar%r),
SIZE(this%network)))
1229 IF (linivol) this%voldatir(:,:,:,:,:,:) = rmiss
1232IF (
ASSOCIATED(this%dativar%d) .AND. .NOT.
ASSOCIATED(this%voldatid))
THEN
1233 CALL vol7d_force_alloc_dati(this, ini)
1234 ALLOCATE(this%voldatid(
SIZE(this%ana),
SIZE(this%time),
SIZE(this%level), &
1235 SIZE(this%timerange),
SIZE(this%dativar%d),
SIZE(this%network)))
1236 IF (linivol) this%voldatid(:,:,:,:,:,:) = rdmiss
1239IF (
ASSOCIATED(this%dativar%i) .AND. .NOT.
ASSOCIATED(this%voldatii))
THEN
1240 CALL vol7d_force_alloc_dati(this, ini)
1241 ALLOCATE(this%voldatii(
SIZE(this%ana),
SIZE(this%time),
SIZE(this%level), &
1242 SIZE(this%timerange),
SIZE(this%dativar%i),
SIZE(this%network)))
1243 IF (linivol) this%voldatii(:,:,:,:,:,:) = imiss
1246IF (
ASSOCIATED(this%dativar%b) .AND. .NOT.
ASSOCIATED(this%voldatib))
THEN
1247 CALL vol7d_force_alloc_dati(this, ini)
1248 ALLOCATE(this%voldatib(
SIZE(this%ana),
SIZE(this%time),
SIZE(this%level), &
1249 SIZE(this%timerange),
SIZE(this%dativar%b),
SIZE(this%network)))
1250 IF (linivol) this%voldatib(:,:,:,:,:,:) = ibmiss
1253IF (
ASSOCIATED(this%dativar%c) .AND. .NOT.
ASSOCIATED(this%voldatic))
THEN
1254 CALL vol7d_force_alloc_dati(this, ini)
1255 ALLOCATE(this%voldatic(
SIZE(this%ana),
SIZE(this%time),
SIZE(this%level), &
1256 SIZE(this%timerange),
SIZE(this%dativar%c),
SIZE(this%network)))
1257 IF (linivol) this%voldatic(:,:,:,:,:,:) = cmiss
1261IF (
ASSOCIATED(this%datiattr%r) .AND.
ASSOCIATED(this%dativarattr%r) .AND. &
1262 .NOT.
ASSOCIATED(this%voldatiattrr))
THEN
1263 CALL vol7d_force_alloc_dati(this, ini)
1264 ALLOCATE(this%voldatiattrr(
SIZE(this%ana),
SIZE(this%time),
SIZE(this%level), &
1265 SIZE(this%timerange),
SIZE(this%dativarattr%r),
SIZE(this%network), &
1266 SIZE(this%datiattr%r)))
1267 IF (linivol) this%voldatiattrr(:,:,:,:,:,:,:) = rmiss
1270IF (
ASSOCIATED(this%datiattr%d) .AND.
ASSOCIATED(this%dativarattr%d) .AND. &
1271 .NOT.
ASSOCIATED(this%voldatiattrd))
THEN
1272 CALL vol7d_force_alloc_dati(this, ini)
1273 ALLOCATE(this%voldatiattrd(
SIZE(this%ana),
SIZE(this%time),
SIZE(this%level), &
1274 SIZE(this%timerange),
SIZE(this%dativarattr%d),
SIZE(this%network), &
1275 SIZE(this%datiattr%d)))
1276 IF (linivol) this%voldatiattrd(:,:,:,:,:,:,:) = rdmiss
1279IF (
ASSOCIATED(this%datiattr%i) .AND.
ASSOCIATED(this%dativarattr%i) .AND. &
1280 .NOT.
ASSOCIATED(this%voldatiattri))
THEN
1281 CALL vol7d_force_alloc_dati(this, ini)
1282 ALLOCATE(this%voldatiattri(
SIZE(this%ana),
SIZE(this%time),
SIZE(this%level), &
1283 SIZE(this%timerange),
SIZE(this%dativarattr%i),
SIZE(this%network), &
1284 SIZE(this%datiattr%i)))
1285 IF (linivol) this%voldatiattri(:,:,:,:,:,:,:) = imiss
1288IF (
ASSOCIATED(this%datiattr%b) .AND.
ASSOCIATED(this%dativarattr%b) .AND. &
1289 .NOT.
ASSOCIATED(this%voldatiattrb))
THEN
1290 CALL vol7d_force_alloc_dati(this, ini)
1291 ALLOCATE(this%voldatiattrb(
SIZE(this%ana),
SIZE(this%time),
SIZE(this%level), &
1292 SIZE(this%timerange),
SIZE(this%dativarattr%b),
SIZE(this%network), &
1293 SIZE(this%datiattr%b)))
1294 IF (linivol) this%voldatiattrb(:,:,:,:,:,:,:) = ibmiss
1297IF (
ASSOCIATED(this%datiattr%c) .AND.
ASSOCIATED(this%dativarattr%c) .AND. &
1298 .NOT.
ASSOCIATED(this%voldatiattrc))
THEN
1299 CALL vol7d_force_alloc_dati(this, ini)
1300 ALLOCATE(this%voldatiattrc(
SIZE(this%ana),
SIZE(this%time),
SIZE(this%level), &
1301 SIZE(this%timerange),
SIZE(this%dativarattr%c),
SIZE(this%network), &
1302 SIZE(this%datiattr%c)))
1303 IF (linivol) this%voldatiattrc(:,:,:,:,:,:,:) = cmiss
1307CALL vol7d_force_alloc(this)
1312CALL l4f_log(l4f_debug,
"calling: vol7d_set_attr_ind")
1315CALL vol7d_set_attr_ind(this)
1319END SUBROUTINE vol7d_alloc_vol
1328SUBROUTINE vol7d_set_attr_ind(this)
1329TYPE(
vol7d),
INTENT(inout) :: this
1334IF (
ASSOCIATED(this%dativar%r))
THEN
1335 IF (
ASSOCIATED(this%dativarattr%r))
THEN
1336 DO i = 1,
SIZE(this%dativar%r)
1337 this%dativar%r(i)%r = &
1338 firsttrue(this%dativar%r(i)%btable == this%dativarattr%r(:)%btable)
1342 IF (
ASSOCIATED(this%dativarattr%d))
THEN
1343 DO i = 1,
SIZE(this%dativar%r)
1344 this%dativar%r(i)%d = &
1345 firsttrue(this%dativar%r(i)%btable == this%dativarattr%d(:)%btable)
1349 IF (
ASSOCIATED(this%dativarattr%i))
THEN
1350 DO i = 1,
SIZE(this%dativar%r)
1351 this%dativar%r(i)%i = &
1352 firsttrue(this%dativar%r(i)%btable == this%dativarattr%i(:)%btable)
1356 IF (
ASSOCIATED(this%dativarattr%b))
THEN
1357 DO i = 1,
SIZE(this%dativar%r)
1358 this%dativar%r(i)%b = &
1359 firsttrue(this%dativar%r(i)%btable == this%dativarattr%b(:)%btable)
1363 IF (
ASSOCIATED(this%dativarattr%c))
THEN
1364 DO i = 1,
SIZE(this%dativar%r)
1365 this%dativar%r(i)%c = &
1366 firsttrue(this%dativar%r(i)%btable == this%dativarattr%c(:)%btable)
1371IF (
ASSOCIATED(this%dativar%d))
THEN
1372 IF (
ASSOCIATED(this%dativarattr%r))
THEN
1373 DO i = 1,
SIZE(this%dativar%d)
1374 this%dativar%d(i)%r = &
1375 firsttrue(this%dativar%d(i)%btable == this%dativarattr%r(:)%btable)
1379 IF (
ASSOCIATED(this%dativarattr%d))
THEN
1380 DO i = 1,
SIZE(this%dativar%d)
1381 this%dativar%d(i)%d = &
1382 firsttrue(this%dativar%d(i)%btable == this%dativarattr%d(:)%btable)
1386 IF (
ASSOCIATED(this%dativarattr%i))
THEN
1387 DO i = 1,
SIZE(this%dativar%d)
1388 this%dativar%d(i)%i = &
1389 firsttrue(this%dativar%d(i)%btable == this%dativarattr%i(:)%btable)
1393 IF (
ASSOCIATED(this%dativarattr%b))
THEN
1394 DO i = 1,
SIZE(this%dativar%d)
1395 this%dativar%d(i)%b = &
1396 firsttrue(this%dativar%d(i)%btable == this%dativarattr%b(:)%btable)
1400 IF (
ASSOCIATED(this%dativarattr%c))
THEN
1401 DO i = 1,
SIZE(this%dativar%d)
1402 this%dativar%d(i)%c = &
1403 firsttrue(this%dativar%d(i)%btable == this%dativarattr%c(:)%btable)
1408IF (
ASSOCIATED(this%dativar%i))
THEN
1409 IF (
ASSOCIATED(this%dativarattr%r))
THEN
1410 DO i = 1,
SIZE(this%dativar%i)
1411 this%dativar%i(i)%r = &
1412 firsttrue(this%dativar%i(i)%btable == this%dativarattr%r(:)%btable)
1416 IF (
ASSOCIATED(this%dativarattr%d))
THEN
1417 DO i = 1,
SIZE(this%dativar%i)
1418 this%dativar%i(i)%d = &
1419 firsttrue(this%dativar%i(i)%btable == this%dativarattr%d(:)%btable)
1423 IF (
ASSOCIATED(this%dativarattr%i))
THEN
1424 DO i = 1,
SIZE(this%dativar%i)
1425 this%dativar%i(i)%i = &
1426 firsttrue(this%dativar%i(i)%btable == this%dativarattr%i(:)%btable)
1430 IF (
ASSOCIATED(this%dativarattr%b))
THEN
1431 DO i = 1,
SIZE(this%dativar%i)
1432 this%dativar%i(i)%b = &
1433 firsttrue(this%dativar%i(i)%btable == this%dativarattr%b(:)%btable)
1437 IF (
ASSOCIATED(this%dativarattr%c))
THEN
1438 DO i = 1,
SIZE(this%dativar%i)
1439 this%dativar%i(i)%c = &
1440 firsttrue(this%dativar%i(i)%btable == this%dativarattr%c(:)%btable)
1445IF (
ASSOCIATED(this%dativar%b))
THEN
1446 IF (
ASSOCIATED(this%dativarattr%r))
THEN
1447 DO i = 1,
SIZE(this%dativar%b)
1448 this%dativar%b(i)%r = &
1449 firsttrue(this%dativar%b(i)%btable == this%dativarattr%r(:)%btable)
1453 IF (
ASSOCIATED(this%dativarattr%d))
THEN
1454 DO i = 1,
SIZE(this%dativar%b)
1455 this%dativar%b(i)%d = &
1456 firsttrue(this%dativar%b(i)%btable == this%dativarattr%d(:)%btable)
1460 IF (
ASSOCIATED(this%dativarattr%i))
THEN
1461 DO i = 1,
SIZE(this%dativar%b)
1462 this%dativar%b(i)%i = &
1463 firsttrue(this%dativar%b(i)%btable == this%dativarattr%i(:)%btable)
1467 IF (
ASSOCIATED(this%dativarattr%b))
THEN
1468 DO i = 1,
SIZE(this%dativar%b)
1469 this%dativar%b(i)%b = &
1470 firsttrue(this%dativar%b(i)%btable == this%dativarattr%b(:)%btable)
1474 IF (
ASSOCIATED(this%dativarattr%c))
THEN
1475 DO i = 1,
SIZE(this%dativar%b)
1476 this%dativar%b(i)%c = &
1477 firsttrue(this%dativar%b(i)%btable == this%dativarattr%c(:)%btable)
1482IF (
ASSOCIATED(this%dativar%c))
THEN
1483 IF (
ASSOCIATED(this%dativarattr%r))
THEN
1484 DO i = 1,
SIZE(this%dativar%c)
1485 this%dativar%c(i)%r = &
1486 firsttrue(this%dativar%c(i)%btable == this%dativarattr%r(:)%btable)
1490 IF (
ASSOCIATED(this%dativarattr%d))
THEN
1491 DO i = 1,
SIZE(this%dativar%c)
1492 this%dativar%c(i)%d = &
1493 firsttrue(this%dativar%c(i)%btable == this%dativarattr%d(:)%btable)
1497 IF (
ASSOCIATED(this%dativarattr%i))
THEN
1498 DO i = 1,
SIZE(this%dativar%c)
1499 this%dativar%c(i)%i = &
1500 firsttrue(this%dativar%c(i)%btable == this%dativarattr%i(:)%btable)
1504 IF (
ASSOCIATED(this%dativarattr%b))
THEN
1505 DO i = 1,
SIZE(this%dativar%c)
1506 this%dativar%c(i)%b = &
1507 firsttrue(this%dativar%c(i)%btable == this%dativarattr%b(:)%btable)
1511 IF (
ASSOCIATED(this%dativarattr%c))
THEN
1512 DO i = 1,
SIZE(this%dativar%c)
1513 this%dativar%c(i)%c = &
1514 firsttrue(this%dativar%c(i)%btable == this%dativarattr%c(:)%btable)
1519END SUBROUTINE vol7d_set_attr_ind
1526SUBROUTINE vol7d_merge(this, that, sort, bestdata, &
1527 ltimesimple, ltimerangesimple, llevelsimple, lanasimple)
1528TYPE(
vol7d),
INTENT(INOUT) :: this
1529TYPE(
vol7d),
INTENT(INOUT) :: that
1530LOGICAL,
INTENT(IN),
OPTIONAL :: sort
1531LOGICAL,
INTENT(in),
OPTIONAL :: bestdata
1532LOGICAL,
INTENT(IN),
OPTIONAL :: ltimesimple, ltimerangesimple, llevelsimple, lanasimple
1534TYPE(
vol7d) :: v7d_clean
1537IF (.NOT.
c_e(this))
THEN
1539 CALL init(v7d_clean)
1542 CALL vol7d_append(this, that,
sort, bestdata, &
1543 ltimesimple, ltimerangesimple, llevelsimple, lanasimple)
1547END SUBROUTINE vol7d_merge
1578SUBROUTINE vol7d_append(this, that, sort, bestdata, &
1579 ltimesimple, ltimerangesimple, llevelsimple, lanasimple, lnetworksimple)
1580TYPE(
vol7d),
INTENT(INOUT) :: this
1581TYPE(
vol7d),
INTENT(IN) :: that
1582LOGICAL,
INTENT(IN),
OPTIONAL :: sort
1586LOGICAL,
INTENT(in),
OPTIONAL :: bestdata
1587LOGICAL,
INTENT(IN),
OPTIONAL :: ltimesimple, ltimerangesimple, llevelsimple, lanasimple, lnetworksimple
1590TYPE(
vol7d) :: v7dtmp
1591LOGICAL :: lsort, lbestdata
1592INTEGER,
POINTER :: remapt1(:), remapt2(:), remaptr1(:), remaptr2(:), &
1593 remapl1(:), remapl2(:), remapa1(:), remapa2(:), remapn1(:), remapn2(:)
1595IF (.NOT.
c_e(that))
RETURN
1596IF (.NOT.vol7d_check_vol(that))
RETURN
1597IF (.NOT.
c_e(this))
THEN
1598 CALL vol7d_copy(that, this,
sort=
sort)
1602IF (this%time_definition /= that%time_definition)
THEN
1603 CALL l4f_log(l4f_fatal, &
1604 'in vol7d_append, cannot append volumes with different &
1606 CALL raise_fatal_error()
1610CALL vol7d_alloc_vol(this)
1612CALL init(v7dtmp, time_definition=this%time_definition)
1614CALL optio(bestdata, lbestdata)
1618IF (optio_log(ltimesimple))
THEN
1619 CALL vol7d_remap2simple_datetime(this%time, that%time, v7dtmp%time, &
1620 lsort, remapt1, remapt2)
1622 CALL vol7d_remap2_datetime(this%time, that%time, v7dtmp%time, &
1623 lsort, remapt1, remapt2)
1625IF (optio_log(ltimerangesimple))
THEN
1626 CALL vol7d_remap2simple_vol7d_timerange(this%timerange, that%timerange, &
1627 v7dtmp%timerange, lsort, remaptr1, remaptr2)
1629 CALL vol7d_remap2_vol7d_timerange(this%timerange, that%timerange, &
1630 v7dtmp%timerange, lsort, remaptr1, remaptr2)
1632IF (optio_log(llevelsimple))
THEN
1633 CALL vol7d_remap2simple_vol7d_level(this%level, that%level, v7dtmp%level, &
1634 lsort, remapl1, remapl2)
1636 CALL vol7d_remap2_vol7d_level(this%level, that%level, v7dtmp%level, &
1637 lsort, remapl1, remapl2)
1639IF (optio_log(lanasimple))
THEN
1640 CALL vol7d_remap2simple_vol7d_ana(this%ana, that%ana, v7dtmp%ana, &
1641 .false., remapa1, remapa2)
1643 CALL vol7d_remap2_vol7d_ana(this%ana, that%ana, v7dtmp%ana, &
1644 .false., remapa1, remapa2)
1646IF (optio_log(lnetworksimple))
THEN
1647 CALL vol7d_remap2simple_vol7d_network(this%network, that%network, v7dtmp%network, &
1648 .false., remapn1, remapn2)
1650 CALL vol7d_remap2_vol7d_network(this%network, that%network, v7dtmp%network, &
1651 .false., remapn1, remapn2)
1655CALL vol7d_merge_finalr(this, that, v7dtmp, &
1656 remapa1, remapa2, remapt1, remapt2, remapl1, remapl2, &
1657 remaptr1, remaptr2, remapn1, remapn2, lbestdata)
1658CALL vol7d_merge_finald(this, that, v7dtmp, &
1659 remapa1, remapa2, remapt1, remapt2, remapl1, remapl2, &
1660 remaptr1, remaptr2, remapn1, remapn2, lbestdata)
1661CALL vol7d_merge_finali(this, that, v7dtmp, &
1662 remapa1, remapa2, remapt1, remapt2, remapl1, remapl2, &
1663 remaptr1, remaptr2, remapn1, remapn2, lbestdata)
1664CALL vol7d_merge_finalb(this, that, v7dtmp, &
1665 remapa1, remapa2, remapt1, remapt2, remapl1, remapl2, &
1666 remaptr1, remaptr2, remapn1, remapn2, lbestdata)
1667CALL vol7d_merge_finalc(this, that, v7dtmp, &
1668 remapa1, remapa2, remapt1, remapt2, remapl1, remapl2, &
1669 remaptr1, remaptr2, remapn1, remapn2, lbestdata)
1672IF (
ASSOCIATED(remapt1))
DEALLOCATE(remapt1)
1673IF (
ASSOCIATED(remapt2))
DEALLOCATE(remapt2)
1674IF (
ASSOCIATED(remaptr1))
DEALLOCATE(remaptr1)
1675IF (
ASSOCIATED(remaptr2))
DEALLOCATE(remaptr2)
1676IF (
ASSOCIATED(remapl1))
DEALLOCATE(remapl1)
1677IF (
ASSOCIATED(remapl2))
DEALLOCATE(remapl2)
1678IF (
ASSOCIATED(remapa1))
DEALLOCATE(remapa1)
1679IF (
ASSOCIATED(remapa2))
DEALLOCATE(remapa2)
1680IF (
ASSOCIATED(remapn1))
DEALLOCATE(remapn1)
1681IF (
ASSOCIATED(remapn2))
DEALLOCATE(remapn2)
1687CALL vol7d_set_attr_ind(this)
1689END SUBROUTINE vol7d_append
1724SUBROUTINE vol7d_copy(this, that, sort, unique, miss, &
1725 lsort_time, lsort_timerange, lsort_level, &
1726 ltime, ltimerange, llevel, lana, lnetwork, &
1727 lanavarr, lanavard, lanavari, lanavarb, lanavarc, &
1728 lanaattrr, lanaattrd, lanaattri, lanaattrb, lanaattrc, &
1729 lanavarattrr, lanavarattrd, lanavarattri, lanavarattrb, lanavarattrc, &
1730 ldativarr, ldativard, ldativari, ldativarb, ldativarc, &
1731 ldatiattrr, ldatiattrd, ldatiattri, ldatiattrb, ldatiattrc, &
1732 ldativarattrr, ldativarattrd, ldativarattri, ldativarattrb, ldativarattrc)
1733TYPE(
vol7d),
INTENT(IN) :: this
1734TYPE(
vol7d),
INTENT(INOUT) :: that
1735LOGICAL,
INTENT(IN),
OPTIONAL :: sort
1736LOGICAL,
INTENT(IN),
OPTIONAL :: unique
1737LOGICAL,
INTENT(IN),
OPTIONAL :: miss
1738LOGICAL,
INTENT(IN),
OPTIONAL :: lsort_time
1739LOGICAL,
INTENT(IN),
OPTIONAL :: lsort_timerange
1740LOGICAL,
INTENT(IN),
OPTIONAL :: lsort_level
1748LOGICAL,
INTENT(IN),
OPTIONAL :: ltime(:)
1750LOGICAL,
INTENT(IN),
OPTIONAL :: ltimerange(:)
1752LOGICAL,
INTENT(IN),
OPTIONAL :: llevel(:)
1754LOGICAL,
INTENT(IN),
OPTIONAL :: lana(:)
1756LOGICAL,
INTENT(IN),
OPTIONAL :: lnetwork(:)
1758LOGICAL,
INTENT(in),
OPTIONAL :: &
1759 lanavarr(:), lanavard(:), lanavari(:), lanavarb(:), lanavarc(:), &
1760 lanaattrr(:), lanaattrd(:), lanaattri(:), lanaattrb(:), lanaattrc(:), &
1761 lanavarattrr(:), lanavarattrd(:), lanavarattri(:), lanavarattrb(:), lanavarattrc(:), &
1762 ldativarr(:), ldativard(:), ldativari(:), ldativarb(:), ldativarc(:), &
1763 ldatiattrr(:), ldatiattrd(:), ldatiattri(:), ldatiattrb(:), ldatiattrc(:), &
1764 ldativarattrr(:), ldativarattrd(:), ldativarattri(:), ldativarattrb(:), ldativarattrc(:)
1766LOGICAL :: lsort, lunique, lmiss
1767INTEGER,
POINTER :: remapt(:), remaptr(:), remapl(:), remapa(:), remapn(:)
1770IF (.NOT.
c_e(this))
RETURN
1771IF (.NOT.vol7d_check_vol(this))
RETURN
1774CALL optio(unique, lunique)
1775CALL optio(miss, lmiss)
1779CALL vol7d_remap1_datetime(this%time, that%time, &
1780 lsort.OR.optio_log(lsort_time), lunique, lmiss, remapt, ltime)
1781CALL vol7d_remap1_vol7d_timerange(this%timerange, that%timerange, &
1782 lsort.OR.optio_log(lsort_timerange), lunique, lmiss, remaptr, ltimerange)
1783CALL vol7d_remap1_vol7d_level(this%level, that%level, &
1784 lsort.OR.optio_log(lsort_level), lunique, lmiss, remapl, llevel)
1785CALL vol7d_remap1_vol7d_ana(this%ana, that%ana, &
1786 lsort, lunique, lmiss, remapa, lana)
1787CALL vol7d_remap1_vol7d_network(this%network, that%network, &
1788 lsort, lunique, lmiss, remapn, lnetwork)
1797CALL vol7d_reform_finalr(this, that, &
1798 remapa, remapt, remapl, remaptr, remapn, lsort, lunique, lmiss, &
1799 lanavarr, lanaattrr, lanavarattrr, ldativarr, ldatiattrr, ldativarattrr)
1800CALL vol7d_reform_finald(this, that, &
1801 remapa, remapt, remapl, remaptr, remapn, lsort, lunique, lmiss, &
1802 lanavard, lanaattrd, lanavarattrd, ldativard, ldatiattrd, ldativarattrd)
1803CALL vol7d_reform_finali(this, that, &
1804 remapa, remapt, remapl, remaptr, remapn, lsort, lunique, lmiss, &
1805 lanavari, lanaattri, lanavarattri, ldativari, ldatiattri, ldativarattri)
1806CALL vol7d_reform_finalb(this, that, &
1807 remapa, remapt, remapl, remaptr, remapn, lsort, lunique, lmiss, &
1808 lanavarb, lanaattrb, lanavarattrb, ldativarb, ldatiattrb, ldativarattrb)
1809CALL vol7d_reform_finalc(this, that, &
1810 remapa, remapt, remapl, remaptr, remapn, lsort, lunique, lmiss, &
1811 lanavarc, lanaattrc, lanavarattrc, ldativarc, ldatiattrc, ldativarattrc)
1814IF (
ASSOCIATED(remapt))
DEALLOCATE(remapt)
1815IF (
ASSOCIATED(remaptr))
DEALLOCATE(remaptr)
1816IF (
ASSOCIATED(remapl))
DEALLOCATE(remapl)
1817IF (
ASSOCIATED(remapa))
DEALLOCATE(remapa)
1818IF (
ASSOCIATED(remapn))
DEALLOCATE(remapn)
1821CALL vol7d_set_attr_ind(that)
1822that%time_definition = this%time_definition
1824END SUBROUTINE vol7d_copy
1837SUBROUTINE vol7d_reform(this, sort, unique, miss, &
1838 lsort_time, lsort_timerange, lsort_level, &
1839 ltime, ltimerange, llevel, lana, lnetwork, &
1840 lanavarr, lanavard, lanavari, lanavarb, lanavarc, &
1841 lanaattrr, lanaattrd, lanaattri, lanaattrb, lanaattrc, &
1842 lanavarattrr, lanavarattrd, lanavarattri, lanavarattrb, lanavarattrc, &
1843 ldativarr, ldativard, ldativari, ldativarb, ldativarc, &
1844 ldatiattrr, ldatiattrd, ldatiattri, ldatiattrb, ldatiattrc, &
1845 ldativarattrr, ldativarattrd, ldativarattri, ldativarattrb, ldativarattrc&
1847TYPE(
vol7d),
INTENT(INOUT) :: this
1848LOGICAL,
INTENT(IN),
OPTIONAL :: sort
1849LOGICAL,
INTENT(IN),
OPTIONAL :: unique
1850LOGICAL,
INTENT(IN),
OPTIONAL :: miss
1851LOGICAL,
INTENT(IN),
OPTIONAL :: lsort_time
1852LOGICAL,
INTENT(IN),
OPTIONAL :: lsort_timerange
1853LOGICAL,
INTENT(IN),
OPTIONAL :: lsort_level
1861LOGICAL,
INTENT(IN),
OPTIONAL :: ltime(:)
1862LOGICAL,
INTENT(IN),
OPTIONAL :: ltimerange(:)
1863LOGICAL,
INTENT(IN),
OPTIONAL :: llevel(:)
1864LOGICAL,
INTENT(IN),
OPTIONAL :: lana(:)
1865LOGICAL,
INTENT(IN),
OPTIONAL :: lnetwork(:)
1867LOGICAL,
INTENT(in),
OPTIONAL :: &
1868 lanavarr(:), lanavard(:), lanavari(:), lanavarb(:), lanavarc(:), &
1869 lanaattrr(:), lanaattrd(:), lanaattri(:), lanaattrb(:), lanaattrc(:), &
1870 lanavarattrr(:), lanavarattrd(:), lanavarattri(:), lanavarattrb(:), lanavarattrc(:), &
1871 ldativarr(:), ldativard(:), ldativari(:), ldativarb(:), ldativarc(:), &
1872 ldatiattrr(:), ldatiattrd(:), ldatiattri(:), ldatiattrb(:), ldatiattrc(:), &
1873 ldativarattrr(:), ldativarattrd(:), ldativarattri(:), ldativarattrb(:), ldativarattrc(:)
1874LOGICAL,
INTENT(IN),
OPTIONAL :: purgeana
1876TYPE(
vol7d) :: v7dtmp
1877logical,
allocatable :: llana(:)
1880CALL vol7d_copy(this, v7dtmp,
sort, unique, miss, &
1881 lsort_time, lsort_timerange, lsort_level, &
1882 ltime, ltimerange, llevel, lana, lnetwork, &
1883 lanavarr, lanavard, lanavari, lanavarb, lanavarc, &
1884 lanaattrr, lanaattrd, lanaattri, lanaattrb, lanaattrc, &
1885 lanavarattrr, lanavarattrd, lanavarattri, lanavarattrb, lanavarattrc, &
1886 ldativarr, ldativard, ldativari, ldativarb, ldativarc, &
1887 ldatiattrr, ldatiattrd, ldatiattri, ldatiattrb, ldatiattrc, &
1888 ldativarattrr, ldativarattrd, ldativarattri, ldativarattrb, ldativarattrc)
1893if (optio_log(purgeana))
then
1894 allocate(llana(
size(v7dtmp%ana)))
1896 do i =1,
size(v7dtmp%ana)
1897 if (
associated(v7dtmp%voldatii)) llana(i)= llana(i) .or. any(
c_e(v7dtmp%voldatii(i,:,:,:,:,:)))
1898 if (
associated(v7dtmp%voldatir)) llana(i)= llana(i) .or. any(
c_e(v7dtmp%voldatir(i,:,:,:,:,:)))
1899 if (
associated(v7dtmp%voldatid)) llana(i)= llana(i) .or. any(
c_e(v7dtmp%voldatid(i,:,:,:,:,:)))
1900 if (
associated(v7dtmp%voldatib)) llana(i)= llana(i) .or. any(
c_e(v7dtmp%voldatib(i,:,:,:,:,:)))
1901 if (
associated(v7dtmp%voldatic)) llana(i)= llana(i) .or. any(
c_e(v7dtmp%voldatic(i,:,:,:,:,:)))
1903 CALL vol7d_copy(v7dtmp, this,lana=llana)
1910END SUBROUTINE vol7d_reform
1920SUBROUTINE vol7d_smart_sort(this, lsort_time, lsort_timerange, lsort_level)
1921TYPE(
vol7d),
INTENT(INOUT) :: this
1922LOGICAL,
OPTIONAL,
INTENT(in) :: lsort_time
1923LOGICAL,
OPTIONAL,
INTENT(in) :: lsort_timerange
1924LOGICAL,
OPTIONAL,
INTENT(in) :: lsort_level
1927LOGICAL :: to_be_sorted
1929to_be_sorted = .false.
1930CALL vol7d_alloc_vol(this)
1932IF (optio_log(lsort_time))
THEN
1933 DO i = 2,
SIZE(this%time)
1934 IF (this%time(i) < this%time(i-1))
THEN
1935 to_be_sorted = .true.
1940IF (optio_log(lsort_timerange))
THEN
1941 DO i = 2,
SIZE(this%timerange)
1942 IF (this%timerange(i) < this%timerange(i-1))
THEN
1943 to_be_sorted = .true.
1948IF (optio_log(lsort_level))
THEN
1949 DO i = 2,
SIZE(this%level)
1950 IF (this%level(i) < this%level(i-1))
THEN
1951 to_be_sorted = .true.
1957IF (to_be_sorted)
CALL vol7d_reform(this, &
1958 lsort_time=lsort_time, lsort_timerange=lsort_timerange, lsort_level=lsort_level )
1960END SUBROUTINE vol7d_smart_sort
1969SUBROUTINE vol7d_filter(this, avl, vl, nl, s_d, e_d)
1970TYPE(
vol7d),
INTENT(inout) :: this
1971CHARACTER(len=*),
INTENT(in),
OPTIONAL :: avl(:)
1972CHARACTER(len=*),
INTENT(in),
OPTIONAL :: vl(:)
1974TYPE(
datetime),
INTENT(in),
OPTIONAL :: s_d
1975TYPE(
datetime),
INTENT(in),
OPTIONAL :: e_d
1979IF (
PRESENT(avl))
THEN
1980 IF (
SIZE(avl) > 0)
THEN
1982 IF (
ASSOCIATED(this%anavar%r))
THEN
1983 DO i = 1,
SIZE(this%anavar%r)
1984 IF (all(this%anavar%r(i)%btable /= avl)) this%anavar%r(i) = vol7d_var_miss
1988 IF (
ASSOCIATED(this%anavar%i))
THEN
1989 DO i = 1,
SIZE(this%anavar%i)
1990 IF (all(this%anavar%i(i)%btable /= avl)) this%anavar%i(i) = vol7d_var_miss
1994 IF (
ASSOCIATED(this%anavar%b))
THEN
1995 DO i = 1,
SIZE(this%anavar%b)
1996 IF (all(this%anavar%b(i)%btable /= avl)) this%anavar%b(i) = vol7d_var_miss
2000 IF (
ASSOCIATED(this%anavar%d))
THEN
2001 DO i = 1,
SIZE(this%anavar%d)
2002 IF (all(this%anavar%d(i)%btable /= avl)) this%anavar%d(i) = vol7d_var_miss
2006 IF (
ASSOCIATED(this%anavar%c))
THEN
2007 DO i = 1,
SIZE(this%anavar%c)
2008 IF (all(this%anavar%c(i)%btable /= avl)) this%anavar%c(i) = vol7d_var_miss
2016IF (
PRESENT(vl))
THEN
2017 IF (
size(vl) > 0)
THEN
2018 IF (
ASSOCIATED(this%dativar%r))
THEN
2019 DO i = 1,
SIZE(this%dativar%r)
2020 IF (all(this%dativar%r(i)%btable /= vl)) this%dativar%r(i) = vol7d_var_miss
2024 IF (
ASSOCIATED(this%dativar%i))
THEN
2025 DO i = 1,
SIZE(this%dativar%i)
2026 IF (all(this%dativar%i(i)%btable /= vl)) this%dativar%i(i) = vol7d_var_miss
2030 IF (
ASSOCIATED(this%dativar%b))
THEN
2031 DO i = 1,
SIZE(this%dativar%b)
2032 IF (all(this%dativar%b(i)%btable /= vl)) this%dativar%b(i) = vol7d_var_miss
2036 IF (
ASSOCIATED(this%dativar%d))
THEN
2037 DO i = 1,
SIZE(this%dativar%d)
2038 IF (all(this%dativar%d(i)%btable /= vl)) this%dativar%d(i) = vol7d_var_miss
2042 IF (
ASSOCIATED(this%dativar%c))
THEN
2043 DO i = 1,
SIZE(this%dativar%c)
2044 IF (all(this%dativar%c(i)%btable /= vl)) this%dativar%c(i) = vol7d_var_miss
2048 IF (
ASSOCIATED(this%dativar%c))
THEN
2049 DO i = 1,
SIZE(this%dativar%c)
2050 IF (all(this%dativar%c(i)%btable /= vl)) this%dativar%c(i) = vol7d_var_miss
2057IF (
PRESENT(nl))
THEN
2058 IF (
SIZE(nl) > 0)
THEN
2059 DO i = 1,
SIZE(this%network)
2060 IF (all(this%network(i) /= nl)) this%network(i) = vol7d_network_miss
2065IF (
PRESENT(s_d))
THEN
2067 WHERE (this%time < s_d)
2068 this%time = datetime_miss
2073IF (
PRESENT(e_d))
THEN
2075 WHERE (this%time > e_d)
2076 this%time = datetime_miss
2081CALL vol7d_reform(this, miss=.true.)
2083END SUBROUTINE vol7d_filter
2092SUBROUTINE vol7d_convr(this, that, anaconv)
2093TYPE(
vol7d),
INTENT(IN) :: this
2094TYPE(
vol7d),
INTENT(INOUT) :: that
2095LOGICAL,
OPTIONAL,
INTENT(in) :: anaconv
2097LOGICAL :: fv(1)=(/.false./), tv(1)=(/.true./), acp(1), acn(1)
2098TYPE(
vol7d) :: v7d_tmp
2100IF (optio_log(anaconv))
THEN
2110CALL vol7d_copy(this, that, &
2111 lanavarr=tv, lanavard=acp, lanavari=acp, lanavarb=acp, lanavarc=acp, &
2112 ldativarr=tv, ldativard=fv, ldativari=fv, ldativarb=fv, ldativarc=fv)
2115CALL vol7d_copy(this, v7d_tmp, &
2116 lanavarr=fv, lanavard=acn, lanavari=fv, lanavarb=fv, lanavarc=fv, &
2117 lanaattrr=fv, lanaattrd=fv, lanaattri=fv, lanaattrb=fv, lanaattrc=fv, &
2118 lanavarattrr=fv, lanavarattrd=fv, lanavarattri=fv, lanavarattrb=fv, lanavarattrc=fv, &
2119 ldativarr=fv, ldativard=tv, ldativari=fv, ldativarb=fv, ldativarc=fv, &
2120 ldatiattrr=fv, ldatiattrd=fv, ldatiattri=fv, ldatiattrb=fv, ldatiattrc=fv, &
2121 ldativarattrr=fv, ldativarattrd=fv, ldativarattri=fv, ldativarattrb=fv, ldativarattrc=fv)
2124IF (
ASSOCIATED(v7d_tmp%anavar%d) .OR.
ASSOCIATED(v7d_tmp%dativar%d))
THEN
2126 IF (
ASSOCIATED(v7d_tmp%anavar%d))
THEN
2128 ALLOCATE(v7d_tmp%volanar(
SIZE(v7d_tmp%volanad, 1),
SIZE(v7d_tmp%volanad, 2), &
2129 SIZE(v7d_tmp%volanad, 3)))
2130 DO i = 1,
SIZE(v7d_tmp%anavar%d)
2131 v7d_tmp%volanar(:,i,:) = &
2132 realdat(v7d_tmp%volanad(:,i,:), v7d_tmp%anavar%d(i))
2134 DEALLOCATE(v7d_tmp%volanad)
2136 v7d_tmp%anavar%r => v7d_tmp%anavar%d
2137 NULLIFY(v7d_tmp%anavar%d)
2140 IF (
ASSOCIATED(v7d_tmp%dativar%d))
THEN
2142 ALLOCATE(v7d_tmp%voldatir(
SIZE(v7d_tmp%voldatid, 1),
SIZE(v7d_tmp%voldatid, 2), &
2143 SIZE(v7d_tmp%voldatid, 3),
SIZE(v7d_tmp%voldatid, 4),
SIZE(v7d_tmp%voldatid, 5), &
2144 SIZE(v7d_tmp%voldatid, 6)))
2145 DO i = 1,
SIZE(v7d_tmp%dativar%d)
2146 v7d_tmp%voldatir(:,:,:,:,i,:) = &
2147 realdat(v7d_tmp%voldatid(:,:,:,:,i,:), v7d_tmp%dativar%d(i))
2149 DEALLOCATE(v7d_tmp%voldatid)
2151 v7d_tmp%dativar%r => v7d_tmp%dativar%d
2152 NULLIFY(v7d_tmp%dativar%d)
2156 CALL vol7d_merge(that, v7d_tmp)
2163CALL vol7d_copy(this, v7d_tmp, &
2164 lanavarr=fv, lanavard=fv, lanavari=acn, lanavarb=fv, lanavarc=fv, &
2165 lanaattrr=fv, lanaattrd=fv, lanaattri=fv, lanaattrb=fv, lanaattrc=fv, &
2166 lanavarattrr=fv, lanavarattrd=fv, lanavarattri=fv, lanavarattrb=fv, lanavarattrc=fv, &
2167 ldativarr=fv, ldativard=fv, ldativari=tv, ldativarb=fv, ldativarc=fv, &
2168 ldatiattrr=fv, ldatiattrd=fv, ldatiattri=fv, ldatiattrb=fv, ldatiattrc=fv, &
2169 ldativarattrr=fv, ldativarattrd=fv, ldativarattri=fv, ldativarattrb=fv, ldativarattrc=fv)
2172IF (
ASSOCIATED(v7d_tmp%anavar%i) .OR.
ASSOCIATED(v7d_tmp%dativar%i))
THEN
2174 IF (
ASSOCIATED(v7d_tmp%anavar%i))
THEN
2176 ALLOCATE(v7d_tmp%volanar(
SIZE(v7d_tmp%volanai, 1),
SIZE(v7d_tmp%volanai, 2), &
2177 SIZE(v7d_tmp%volanai, 3)))
2178 DO i = 1,
SIZE(v7d_tmp%anavar%i)
2179 v7d_tmp%volanar(:,i,:) = &
2180 realdat(v7d_tmp%volanai(:,i,:), v7d_tmp%anavar%i(i))
2182 DEALLOCATE(v7d_tmp%volanai)
2184 v7d_tmp%anavar%r => v7d_tmp%anavar%i
2185 NULLIFY(v7d_tmp%anavar%i)
2188 IF (
ASSOCIATED(v7d_tmp%dativar%i))
THEN
2190 ALLOCATE(v7d_tmp%voldatir(
SIZE(v7d_tmp%voldatii, 1),
SIZE(v7d_tmp%voldatii, 2), &
2191 SIZE(v7d_tmp%voldatii, 3),
SIZE(v7d_tmp%voldatii, 4),
SIZE(v7d_tmp%voldatii, 5), &
2192 SIZE(v7d_tmp%voldatii, 6)))
2193 DO i = 1,
SIZE(v7d_tmp%dativar%i)
2194 v7d_tmp%voldatir(:,:,:,:,i,:) = &
2195 realdat(v7d_tmp%voldatii(:,:,:,:,i,:), v7d_tmp%dativar%i(i))
2197 DEALLOCATE(v7d_tmp%voldatii)
2199 v7d_tmp%dativar%r => v7d_tmp%dativar%i
2200 NULLIFY(v7d_tmp%dativar%i)
2204 CALL vol7d_merge(that, v7d_tmp)
2211CALL vol7d_copy(this, v7d_tmp, &
2212 lanavarr=fv, lanavard=fv, lanavari=fv, lanavarb=acn, lanavarc=fv, &
2213 lanaattrr=fv, lanaattrd=fv, lanaattri=fv, lanaattrb=fv, lanaattrc=fv, &
2214 lanavarattrr=fv, lanavarattrd=fv, lanavarattri=fv, lanavarattrb=fv, lanavarattrc=fv, &
2215 ldativarr=fv, ldativard=fv, ldativari=fv, ldativarb=tv, ldativarc=fv, &
2216 ldatiattrr=fv, ldatiattrd=fv, ldatiattri=fv, ldatiattrb=fv, ldatiattrc=fv, &
2217 ldativarattrr=fv, ldativarattrd=fv, ldativarattri=fv, ldativarattrb=fv, ldativarattrc=fv)
2220IF (
ASSOCIATED(v7d_tmp%anavar%b) .OR.
ASSOCIATED(v7d_tmp%dativar%b))
THEN
2222 IF (
ASSOCIATED(v7d_tmp%anavar%b))
THEN
2224 ALLOCATE(v7d_tmp%volanar(
SIZE(v7d_tmp%volanab, 1),
SIZE(v7d_tmp%volanab, 2), &
2225 SIZE(v7d_tmp%volanab, 3)))
2226 DO i = 1,
SIZE(v7d_tmp%anavar%b)
2227 v7d_tmp%volanar(:,i,:) = &
2228 realdat(v7d_tmp%volanab(:,i,:), v7d_tmp%anavar%b(i))
2230 DEALLOCATE(v7d_tmp%volanab)
2232 v7d_tmp%anavar%r => v7d_tmp%anavar%b
2233 NULLIFY(v7d_tmp%anavar%b)
2236 IF (
ASSOCIATED(v7d_tmp%dativar%b))
THEN
2238 ALLOCATE(v7d_tmp%voldatir(
SIZE(v7d_tmp%voldatib, 1),
SIZE(v7d_tmp%voldatib, 2), &
2239 SIZE(v7d_tmp%voldatib, 3),
SIZE(v7d_tmp%voldatib, 4),
SIZE(v7d_tmp%voldatib, 5), &
2240 SIZE(v7d_tmp%voldatib, 6)))
2241 DO i = 1,
SIZE(v7d_tmp%dativar%b)
2242 v7d_tmp%voldatir(:,:,:,:,i,:) = &
2243 realdat(v7d_tmp%voldatib(:,:,:,:,i,:), v7d_tmp%dativar%b(i))
2245 DEALLOCATE(v7d_tmp%voldatib)
2247 v7d_tmp%dativar%r => v7d_tmp%dativar%b
2248 NULLIFY(v7d_tmp%dativar%b)
2252 CALL vol7d_merge(that, v7d_tmp)
2259CALL vol7d_copy(this, v7d_tmp, &
2260 lanavarr=fv, lanavard=fv, lanavari=fv, lanavarb=fv, lanavarc=acn, &
2261 lanaattrr=fv, lanaattrd=fv, lanaattri=fv, lanaattrb=fv, lanaattrc=fv, &
2262 lanavarattrr=fv, lanavarattrd=fv, lanavarattri=fv, lanavarattrb=fv, lanavarattrc=fv, &
2263 ldativarr=fv, ldativard=fv, ldativari=fv, ldativarb=fv, ldativarc=tv, &
2264 ldatiattrr=fv, ldatiattrd=fv, ldatiattri=fv, ldatiattrb=fv, ldatiattrc=fv, &
2265 ldativarattrr=fv, ldativarattrd=fv, ldativarattri=fv, ldativarattrb=fv, ldativarattrc=fv)
2268IF (
ASSOCIATED(v7d_tmp%anavar%c) .OR.
ASSOCIATED(v7d_tmp%dativar%c))
THEN
2270 IF (
ASSOCIATED(v7d_tmp%anavar%c))
THEN
2272 ALLOCATE(v7d_tmp%volanar(
SIZE(v7d_tmp%volanac, 1),
SIZE(v7d_tmp%volanac, 2), &
2273 SIZE(v7d_tmp%volanac, 3)))
2274 DO i = 1,
SIZE(v7d_tmp%anavar%c)
2275 v7d_tmp%volanar(:,i,:) = &
2276 realdat(v7d_tmp%volanac(:,i,:), v7d_tmp%anavar%c(i))
2278 DEALLOCATE(v7d_tmp%volanac)
2280 v7d_tmp%anavar%r => v7d_tmp%anavar%c
2281 NULLIFY(v7d_tmp%anavar%c)
2284 IF (
ASSOCIATED(v7d_tmp%dativar%c))
THEN
2286 ALLOCATE(v7d_tmp%voldatir(
SIZE(v7d_tmp%voldatic, 1),
SIZE(v7d_tmp%voldatic, 2), &
2287 SIZE(v7d_tmp%voldatic, 3),
SIZE(v7d_tmp%voldatic, 4),
SIZE(v7d_tmp%voldatic, 5), &
2288 SIZE(v7d_tmp%voldatic, 6)))
2289 DO i = 1,
SIZE(v7d_tmp%dativar%c)
2290 v7d_tmp%voldatir(:,:,:,:,i,:) = &
2291 realdat(v7d_tmp%voldatic(:,:,:,:,i,:), v7d_tmp%dativar%c(i))
2293 DEALLOCATE(v7d_tmp%voldatic)
2295 v7d_tmp%dativar%r => v7d_tmp%dativar%c
2296 NULLIFY(v7d_tmp%dativar%c)
2300 CALL vol7d_merge(that, v7d_tmp)
2305END SUBROUTINE vol7d_convr
2311SUBROUTINE vol7d_diff_only (this, that, data_only,ana)
2312TYPE(
vol7d),
INTENT(IN) :: this
2313TYPE(
vol7d),
INTENT(OUT) :: that
2314logical ,
optional,
intent(in) :: data_only
2315logical ,
optional,
intent(in) :: ana
2316logical :: ldata_only,lana
2318IF (
PRESENT(data_only))
THEN
2319 ldata_only = data_only
2321 ldata_only = .false.
2324IF (
PRESENT(ana))
THEN
2331#undef VOL7D_POLY_ARRAY
2332#define VOL7D_POLY_ARRAY voldati
2333#include "vol7d_class_diff.F90"
2334#undef VOL7D_POLY_ARRAY
2335#define VOL7D_POLY_ARRAY voldatiattr
2336#include "vol7d_class_diff.F90"
2337#undef VOL7D_POLY_ARRAY
2339if ( .not. ldata_only)
then
2341#define VOL7D_POLY_ARRAY volana
2342#include "vol7d_class_diff.F90"
2343#undef VOL7D_POLY_ARRAY
2344#define VOL7D_POLY_ARRAY volanaattr
2345#include "vol7d_class_diff.F90"
2346#undef VOL7D_POLY_ARRAY
2349 where ( this%ana == that%ana )
2350 that%ana = vol7d_ana_miss
2358END SUBROUTINE vol7d_diff_only
2364#undef VOL7D_POLY_TYPE
2365#undef VOL7D_POLY_TYPES
2366#define VOL7D_POLY_TYPE REAL
2367#define VOL7D_POLY_TYPES r
2368#include "vol7d_class_type_templ.F90"
2369#undef VOL7D_POLY_TYPE
2370#undef VOL7D_POLY_TYPES
2371#define VOL7D_POLY_TYPE DOUBLE PRECISION
2372#define VOL7D_POLY_TYPES d
2373#include "vol7d_class_type_templ.F90"
2374#undef VOL7D_POLY_TYPE
2375#undef VOL7D_POLY_TYPES
2376#define VOL7D_POLY_TYPE INTEGER
2377#define VOL7D_POLY_TYPES i
2378#include "vol7d_class_type_templ.F90"
2379#undef VOL7D_POLY_TYPE
2380#undef VOL7D_POLY_TYPES
2381#define VOL7D_POLY_TYPE INTEGER(kind=int_b)
2382#define VOL7D_POLY_TYPES b
2383#include "vol7d_class_type_templ.F90"
2384#undef VOL7D_POLY_TYPE
2385#undef VOL7D_POLY_TYPES
2386#define VOL7D_POLY_TYPE CHARACTER(len=vol7d_cdatalen)
2387#define VOL7D_POLY_TYPES c
2388#include "vol7d_class_type_templ.F90"
2393#undef VOL7D_NO_ZERO_ALLOC
2394#undef VOL7D_POLY_TYPE
2395#define VOL7D_POLY_TYPE datetime
2396#include "vol7d_class_desc_templ.F90"
2397#undef VOL7D_POLY_TYPE
2398#define VOL7D_POLY_TYPE vol7d_timerange
2399#include "vol7d_class_desc_templ.F90"
2400#undef VOL7D_POLY_TYPE
2401#define VOL7D_POLY_TYPE vol7d_level
2402#include "vol7d_class_desc_templ.F90"
2404#undef VOL7D_POLY_TYPE
2405#define VOL7D_POLY_TYPE vol7d_network
2406#include "vol7d_class_desc_templ.F90"
2407#undef VOL7D_POLY_TYPE
2408#define VOL7D_POLY_TYPE vol7d_ana
2409#include "vol7d_class_desc_templ.F90"
2410#define VOL7D_NO_ZERO_ALLOC
2411#undef VOL7D_POLY_TYPE
2412#define VOL7D_POLY_TYPE vol7d_var
2413#include "vol7d_class_desc_templ.F90"
2424subroutine vol7d_write_on_file (this,unit,description,filename,filename_auto)
2426TYPE(
vol7d),
INTENT(IN) :: this
2427integer,
optional,
intent(inout) :: unit
2428character(len=*),
intent(in),
optional :: filename
2429character(len=*),
intent(out),
optional :: filename_auto
2430character(len=*),
INTENT(IN),
optional :: description
2433character(len=254) :: ldescription,arg,lfilename
2434integer :: nana, ntime, ntimerange, nlevel, nnetwork, &
2435 ndativarr, ndativari, ndativarb, ndativard, ndativarc,&
2436 ndatiattrr, ndatiattri, ndatiattrb, ndatiattrd, ndatiattrc,&
2437 ndativarattrr, ndativarattri, ndativarattrb, ndativarattrd, ndativarattrc,&
2438 nanavarr, nanavari, nanavarb, nanavard, nanavarc,&
2439 nanaattrr, nanaattri, nanaattrb, nanaattrd, nanaattrc,&
2440 nanavarattrr, nanavarattri, nanavarattrb, nanavarattrd, nanavarattrc
2443logical :: opened,exist
2483call date_and_time(values=tarray)
2486if (
present(description))
then
2487 ldescription=description
2489 ldescription=
"Vol7d generated by: "//trim(arg)
2492if (.not.
present(unit))
then
2503lfilename=trim(arg)//
".v7d"
2504if (
index(arg,
'/',back=.true.) > 0) lfilename=lfilename(
index(arg,
'/',back=.true.)+1 : )
2506if (
present(filename))
then
2507 if (filename /=
"")
then
2512if (
present(filename_auto))filename_auto=lfilename
2515inquire(unit=lunit,opened=opened)
2516if (.not. opened)
then
2523 OPEN(unit=lunit, file=lfilename, form=
'UNFORMATTED', access=
'STREAM')
2524 CALL l4f_log(l4f_info,
'opened: '//trim(lfilename))
2527if (
associated(this%ana)) nana=
size(this%ana)
2528if (
associated(this%time)) ntime=
size(this%time)
2529if (
associated(this%timerange)) ntimerange=
size(this%timerange)
2530if (
associated(this%level)) nlevel=
size(this%level)
2531if (
associated(this%network)) nnetwork=
size(this%network)
2533if (
associated(this%dativar%r)) ndativarr=
size(this%dativar%r)
2534if (
associated(this%dativar%i)) ndativari=
size(this%dativar%i)
2535if (
associated(this%dativar%b)) ndativarb=
size(this%dativar%b)
2536if (
associated(this%dativar%d)) ndativard=
size(this%dativar%d)
2537if (
associated(this%dativar%c)) ndativarc=
size(this%dativar%c)
2539if (
associated(this%datiattr%r)) ndatiattrr=
size(this%datiattr%r)
2540if (
associated(this%datiattr%i)) ndatiattri=
size(this%datiattr%i)
2541if (
associated(this%datiattr%b)) ndatiattrb=
size(this%datiattr%b)
2542if (
associated(this%datiattr%d)) ndatiattrd=
size(this%datiattr%d)
2543if (
associated(this%datiattr%c)) ndatiattrc=
size(this%datiattr%c)
2545if (
associated(this%dativarattr%r)) ndativarattrr=
size(this%dativarattr%r)
2546if (
associated(this%dativarattr%i)) ndativarattri=
size(this%dativarattr%i)
2547if (
associated(this%dativarattr%b)) ndativarattrb=
size(this%dativarattr%b)
2548if (
associated(this%dativarattr%d)) ndativarattrd=
size(this%dativarattr%d)
2549if (
associated(this%dativarattr%c)) ndativarattrc=
size(this%dativarattr%c)
2551if (
associated(this%anavar%r)) nanavarr=
size(this%anavar%r)
2552if (
associated(this%anavar%i)) nanavari=
size(this%anavar%i)
2553if (
associated(this%anavar%b)) nanavarb=
size(this%anavar%b)
2554if (
associated(this%anavar%d)) nanavard=
size(this%anavar%d)
2555if (
associated(this%anavar%c)) nanavarc=
size(this%anavar%c)
2557if (
associated(this%anaattr%r)) nanaattrr=
size(this%anaattr%r)
2558if (
associated(this%anaattr%i)) nanaattri=
size(this%anaattr%i)
2559if (
associated(this%anaattr%b)) nanaattrb=
size(this%anaattr%b)
2560if (
associated(this%anaattr%d)) nanaattrd=
size(this%anaattr%d)
2561if (
associated(this%anaattr%c)) nanaattrc=
size(this%anaattr%c)
2563if (
associated(this%anavarattr%r)) nanavarattrr=
size(this%anavarattr%r)
2564if (
associated(this%anavarattr%i)) nanavarattri=
size(this%anavarattr%i)
2565if (
associated(this%anavarattr%b)) nanavarattrb=
size(this%anavarattr%b)
2566if (
associated(this%anavarattr%d)) nanavarattrd=
size(this%anavarattr%d)
2567if (
associated(this%anavarattr%c)) nanavarattrc=
size(this%anavarattr%c)
2569write(unit=lunit)ldescription
2570write(unit=lunit)tarray
2573 nana, ntime, ntimerange, nlevel, nnetwork, &
2574 ndativarr, ndativari, ndativarb, ndativard, ndativarc,&
2575 ndatiattrr, ndatiattri, ndatiattrb, ndatiattrd, ndatiattrc,&
2576 ndativarattrr, ndativarattri, ndativarattrb, ndativarattrd, ndativarattrc,&
2577 nanavarr, nanavari, nanavarb, nanavard, nanavarc,&
2578 nanaattrr, nanaattri, nanaattrb, nanaattrd, nanaattrc,&
2579 nanavarattrr, nanavarattri, nanavarattrb, nanavarattrd, nanavarattrc, &
2580 this%time_definition
2587if (
associated(this%ana))
call write_unit(this%ana, lunit)
2588if (
associated(this%time))
call write_unit(this%time, lunit)
2589if (
associated(this%level))
write(unit=lunit)this%level
2590if (
associated(this%timerange))
write(unit=lunit)this%timerange
2591if (
associated(this%network))
write(unit=lunit)this%network
2596if (
associated(this%anavar%r))
write(unit=lunit)this%anavar%r
2597if (
associated(this%anavar%i))
write(unit=lunit)this%anavar%i
2598if (
associated(this%anavar%b))
write(unit=lunit)this%anavar%b
2599if (
associated(this%anavar%d))
write(unit=lunit)this%anavar%d
2600if (
associated(this%anavar%c))
write(unit=lunit)this%anavar%c
2602if (
associated(this%anaattr%r))
write(unit=lunit)this%anaattr%r
2603if (
associated(this%anaattr%i))
write(unit=lunit)this%anaattr%i
2604if (
associated(this%anaattr%b))
write(unit=lunit)this%anaattr%b
2605if (
associated(this%anaattr%d))
write(unit=lunit)this%anaattr%d
2606if (
associated(this%anaattr%c))
write(unit=lunit)this%anaattr%c
2608if (
associated(this%anavarattr%r))
write(unit=lunit)this%anavarattr%r
2609if (
associated(this%anavarattr%i))
write(unit=lunit)this%anavarattr%i
2610if (
associated(this%anavarattr%b))
write(unit=lunit)this%anavarattr%b
2611if (
associated(this%anavarattr%d))
write(unit=lunit)this%anavarattr%d
2612if (
associated(this%anavarattr%c))
write(unit=lunit)this%anavarattr%c
2614if (
associated(this%dativar%r))
write(unit=lunit)this%dativar%r
2615if (
associated(this%dativar%i))
write(unit=lunit)this%dativar%i
2616if (
associated(this%dativar%b))
write(unit=lunit)this%dativar%b
2617if (
associated(this%dativar%d))
write(unit=lunit)this%dativar%d
2618if (
associated(this%dativar%c))
write(unit=lunit)this%dativar%c
2620if (
associated(this%datiattr%r))
write(unit=lunit)this%datiattr%r
2621if (
associated(this%datiattr%i))
write(unit=lunit)this%datiattr%i
2622if (
associated(this%datiattr%b))
write(unit=lunit)this%datiattr%b
2623if (
associated(this%datiattr%d))
write(unit=lunit)this%datiattr%d
2624if (
associated(this%datiattr%c))
write(unit=lunit)this%datiattr%c
2626if (
associated(this%dativarattr%r))
write(unit=lunit)this%dativarattr%r
2627if (
associated(this%dativarattr%i))
write(unit=lunit)this%dativarattr%i
2628if (
associated(this%dativarattr%b))
write(unit=lunit)this%dativarattr%b
2629if (
associated(this%dativarattr%d))
write(unit=lunit)this%dativarattr%d
2630if (
associated(this%dativarattr%c))
write(unit=lunit)this%dativarattr%c
2634if (
associated(this%volanar))
write(unit=lunit)this%volanar
2635if (
associated(this%volanaattrr))
write(unit=lunit)this%volanaattrr
2636if (
associated(this%voldatir))
write(unit=lunit)this%voldatir
2637if (
associated(this%voldatiattrr))
write(unit=lunit)this%voldatiattrr
2639if (
associated(this%volanai))
write(unit=lunit)this%volanai
2640if (
associated(this%volanaattri))
write(unit=lunit)this%volanaattri
2641if (
associated(this%voldatii))
write(unit=lunit)this%voldatii
2642if (
associated(this%voldatiattri))
write(unit=lunit)this%voldatiattri
2644if (
associated(this%volanab))
write(unit=lunit)this%volanab
2645if (
associated(this%volanaattrb))
write(unit=lunit)this%volanaattrb
2646if (
associated(this%voldatib))
write(unit=lunit)this%voldatib
2647if (
associated(this%voldatiattrb))
write(unit=lunit)this%voldatiattrb
2649if (
associated(this%volanad))
write(unit=lunit)this%volanad
2650if (
associated(this%volanaattrd))
write(unit=lunit)this%volanaattrd
2651if (
associated(this%voldatid))
write(unit=lunit)this%voldatid
2652if (
associated(this%voldatiattrd))
write(unit=lunit)this%voldatiattrd
2654if (
associated(this%volanac))
write(unit=lunit)this%volanac
2655if (
associated(this%volanaattrc))
write(unit=lunit)this%volanaattrc
2656if (
associated(this%voldatic))
write(unit=lunit)this%voldatic
2657if (
associated(this%voldatiattrc))
write(unit=lunit)this%voldatiattrc
2659if (.not.
present(unit))
close(unit=lunit)
2661end subroutine vol7d_write_on_file
2672subroutine vol7d_read_from_file (this,unit,filename,description,tarray,filename_auto)
2674TYPE(
vol7d),
INTENT(OUT) :: this
2675integer,
intent(inout),
optional :: unit
2676character(len=*),
INTENT(in),
optional :: filename
2677character(len=*),
intent(out),
optional :: filename_auto
2678character(len=*),
INTENT(out),
optional :: description
2679integer,
intent(out),
optional :: tarray(8)
2682integer :: nana, ntime, ntimerange, nlevel, nnetwork, &
2683 ndativarr, ndativari, ndativarb, ndativard, ndativarc,&
2684 ndatiattrr, ndatiattri, ndatiattrb, ndatiattrd, ndatiattrc,&
2685 ndativarattrr, ndativarattri, ndativarattrb, ndativarattrd, ndativarattrc,&
2686 nanavarr, nanavari, nanavarb, nanavard, nanavarc,&
2687 nanaattrr, nanaattri, nanaattrb, nanaattrd, nanaattrc,&
2688 nanavarattrr, nanavarattri, nanavarattrb, nanavarattrd, nanavarattrc
2690character(len=254) :: ldescription,lfilename,arg
2691integer :: ltarray(8),lunit,ios
2692logical :: opened,exist
2697if (.not.
present(unit))
then
2708lfilename=trim(arg)//
".v7d"
2709if (
index(arg,
'/',back=.true.) > 0) lfilename=lfilename(
index(arg,
'/',back=.true.)+1 : )
2711if (
present(filename))
then
2712 if (filename /=
"")
then
2717if (
present(filename_auto))filename_auto=lfilename
2720inquire(unit=lunit,opened=opened)
2721IF (.NOT. opened)
THEN
2722 inquire(file=lfilename,exist=exist)
2723 IF (.NOT.exist)
THEN
2724 CALL l4f_log(l4f_fatal, &
2725 'in vol7d_read_from_file, file does not exists, cannot open')
2726 CALL raise_fatal_error()
2728 OPEN(unit=lunit, file=lfilename, form=
'UNFORMATTED', access=
'STREAM', &
2729 status=
'OLD', action=
'READ')
2730 CALL l4f_log(l4f_info,
'opened: '//trim(lfilename))
2735read(unit=lunit,iostat=ios)ldescription
2738 call vol7d_alloc (this)
2739 call vol7d_alloc_vol (this)
2740 if (
present(description))description=ldescription
2741 if (
present(tarray))tarray=ltarray
2742 if (.not.
present(unit))
close(unit=lunit)
2745read(unit=lunit)ltarray
2747CALL l4f_log(l4f_info,
'Reading vol7d from file')
2748CALL l4f_log(l4f_info,
'description: '//trim(ldescription))
2749CALL l4f_log(l4f_info,
'written on '//trim(
to_char(ltarray(1)))//
' '// &
2752if (
present(description))description=ldescription
2753if (
present(tarray))tarray=ltarray
2756 nana, ntime, ntimerange, nlevel, nnetwork, &
2757 ndativarr, ndativari, ndativarb, ndativard, ndativarc,&
2758 ndatiattrr, ndatiattri, ndatiattrb, ndatiattrd, ndatiattrc,&
2759 ndativarattrr, ndativarattri, ndativarattrb, ndativarattrd, ndativarattrc,&
2760 nanavarr, nanavari, nanavarb, nanavard, nanavarc,&
2761 nanaattrr, nanaattri, nanaattrb, nanaattrd, nanaattrc,&
2762 nanavarattrr, nanavarattri, nanavarattrb, nanavarattrd, nanavarattrc, &
2763 this%time_definition
2765call vol7d_alloc (this, &
2766 nana=nana, ntime=ntime, ntimerange=ntimerange, nlevel=nlevel, nnetwork=nnetwork,&
2767 ndativarr=ndativarr, ndativari=ndativari, ndativarb=ndativarb,&
2768 ndativard=ndativard, ndativarc=ndativarc,&
2769 ndatiattrr=ndatiattrr, ndatiattri=ndatiattri, ndatiattrb=ndatiattrb,&
2770 ndatiattrd=ndatiattrd, ndatiattrc=ndatiattrc,&
2771 ndativarattrr=ndativarattrr, ndativarattri=ndativarattri, ndativarattrb=ndativarattrb, &
2772 ndativarattrd=ndativarattrd, ndativarattrc=ndativarattrc,&
2773 nanavarr=nanavarr, nanavari=nanavari, nanavarb=nanavarb, &
2774 nanavard=nanavard, nanavarc=nanavarc,&
2775 nanaattrr=nanaattrr, nanaattri=nanaattri, nanaattrb=nanaattrb,&
2776 nanaattrd=nanaattrd, nanaattrc=nanaattrc,&
2777 nanavarattrr=nanavarattrr, nanavarattri=nanavarattri, nanavarattrb=nanavarattrb, &
2778 nanavarattrd=nanavarattrd, nanavarattrc=nanavarattrc)
2781if (
associated(this%ana))
call read_unit(this%ana, lunit)
2782if (
associated(this%time))
call read_unit(this%time, lunit)
2783if (
associated(this%level))
read(unit=lunit)this%level
2784if (
associated(this%timerange))
read(unit=lunit)this%timerange
2785if (
associated(this%network))
read(unit=lunit)this%network
2787if (
associated(this%anavar%r))
read(unit=lunit)this%anavar%r
2788if (
associated(this%anavar%i))
read(unit=lunit)this%anavar%i
2789if (
associated(this%anavar%b))
read(unit=lunit)this%anavar%b
2790if (
associated(this%anavar%d))
read(unit=lunit)this%anavar%d
2791if (
associated(this%anavar%c))
read(unit=lunit)this%anavar%c
2793if (
associated(this%anaattr%r))
read(unit=lunit)this%anaattr%r
2794if (
associated(this%anaattr%i))
read(unit=lunit)this%anaattr%i
2795if (
associated(this%anaattr%b))
read(unit=lunit)this%anaattr%b
2796if (
associated(this%anaattr%d))
read(unit=lunit)this%anaattr%d
2797if (
associated(this%anaattr%c))
read(unit=lunit)this%anaattr%c
2799if (
associated(this%anavarattr%r))
read(unit=lunit)this%anavarattr%r
2800if (
associated(this%anavarattr%i))
read(unit=lunit)this%anavarattr%i
2801if (
associated(this%anavarattr%b))
read(unit=lunit)this%anavarattr%b
2802if (
associated(this%anavarattr%d))
read(unit=lunit)this%anavarattr%d
2803if (
associated(this%anavarattr%c))
read(unit=lunit)this%anavarattr%c
2805if (
associated(this%dativar%r))
read(unit=lunit)this%dativar%r
2806if (
associated(this%dativar%i))
read(unit=lunit)this%dativar%i
2807if (
associated(this%dativar%b))
read(unit=lunit)this%dativar%b
2808if (
associated(this%dativar%d))
read(unit=lunit)this%dativar%d
2809if (
associated(this%dativar%c))
read(unit=lunit)this%dativar%c
2811if (
associated(this%datiattr%r))
read(unit=lunit)this%datiattr%r
2812if (
associated(this%datiattr%i))
read(unit=lunit)this%datiattr%i
2813if (
associated(this%datiattr%b))
read(unit=lunit)this%datiattr%b
2814if (
associated(this%datiattr%d))
read(unit=lunit)this%datiattr%d
2815if (
associated(this%datiattr%c))
read(unit=lunit)this%datiattr%c
2817if (
associated(this%dativarattr%r))
read(unit=lunit)this%dativarattr%r
2818if (
associated(this%dativarattr%i))
read(unit=lunit)this%dativarattr%i
2819if (
associated(this%dativarattr%b))
read(unit=lunit)this%dativarattr%b
2820if (
associated(this%dativarattr%d))
read(unit=lunit)this%dativarattr%d
2821if (
associated(this%dativarattr%c))
read(unit=lunit)this%dativarattr%c
2823call vol7d_alloc_vol (this)
2827if (
associated(this%volanar))
read(unit=lunit)this%volanar
2828if (
associated(this%volanaattrr))
read(unit=lunit)this%volanaattrr
2829if (
associated(this%voldatir))
read(unit=lunit)this%voldatir
2830if (
associated(this%voldatiattrr))
read(unit=lunit)this%voldatiattrr
2832if (
associated(this%volanai))
read(unit=lunit)this%volanai
2833if (
associated(this%volanaattri))
read(unit=lunit)this%volanaattri
2834if (
associated(this%voldatii))
read(unit=lunit)this%voldatii
2835if (
associated(this%voldatiattri))
read(unit=lunit)this%voldatiattri
2837if (
associated(this%volanab))
read(unit=lunit)this%volanab
2838if (
associated(this%volanaattrb))
read(unit=lunit)this%volanaattrb
2839if (
associated(this%voldatib))
read(unit=lunit)this%voldatib
2840if (
associated(this%voldatiattrb))
read(unit=lunit)this%voldatiattrb
2842if (
associated(this%volanad))
read(unit=lunit)this%volanad
2843if (
associated(this%volanaattrd))
read(unit=lunit)this%volanaattrd
2844if (
associated(this%voldatid))
read(unit=lunit)this%voldatid
2845if (
associated(this%voldatiattrd))
read(unit=lunit)this%voldatiattrd
2847if (
associated(this%volanac))
read(unit=lunit)this%volanac
2848if (
associated(this%volanaattrc))
read(unit=lunit)this%volanaattrc
2849if (
associated(this%voldatic))
read(unit=lunit)this%voldatic
2850if (
associated(this%voldatiattrc))
read(unit=lunit)this%voldatiattrc
2852if (.not.
present(unit))
close(unit=lunit)
2854end subroutine vol7d_read_from_file
2858elemental doubleprecision function doubledatd(voldat,var)
2859doubleprecision,
intent(in) :: voldat
2860type(vol7d_var),
intent(in) :: var
2864end function doubledatd
2867elemental doubleprecision function doubledatr(voldat,var)
2868real,
intent(in) :: voldat
2869type(vol7d_var),
intent(in) :: var
2872 doubledatr=dble(voldat)
2877end function doubledatr
2880elemental doubleprecision function doubledati(voldat,var)
2881integer,
intent(in) :: voldat
2882type(vol7d_var),
intent(in) :: var
2884if (
c_e(voldat))
then
2885 if (
c_e(var%scalefactor))
then
2886 doubledati=dble(voldat)/10.d0**var%scalefactor
2888 doubledati=dble(voldat)
2894end function doubledati
2897elemental doubleprecision function doubledatb(voldat,var)
2898integer(kind=int_b),
intent(in) :: voldat
2899type(vol7d_var),
intent(in) :: var
2901if (
c_e(voldat))
then
2902 if (
c_e(var%scalefactor))
then
2903 doubledatb=dble(voldat)/10.d0**var%scalefactor
2905 doubledatb=dble(voldat)
2911end function doubledatb
2914elemental doubleprecision function doubledatc(voldat,var)
2915CHARACTER(len=vol7d_cdatalen),
intent(in) :: voldat
2916type(vol7d_var),
intent(in) :: var
2918doubledatc = c2d(voldat)
2919if (
c_e(doubledatc) .and.
c_e(var%scalefactor))
then
2920 doubledatc=doubledatc/10.d0**var%scalefactor
2923end function doubledatc
2927elemental integer function integerdatd(voldat,var)
2928doubleprecision,
intent(in) :: voldat
2929type(vol7d_var),
intent(in) :: var
2932 if (
c_e(var%scalefactor))
then
2933 integerdatd=nint(voldat*10d0**var%scalefactor)
2935 integerdatd=nint(voldat)
2941end function integerdatd
2944elemental integer function integerdatr(voldat,var)
2945real,
intent(in) :: voldat
2946type(vol7d_var),
intent(in) :: var
2949 if (
c_e(var%scalefactor))
then
2950 integerdatr=nint(voldat*10d0**var%scalefactor)
2952 integerdatr=nint(voldat)
2958end function integerdatr
2961elemental integer function integerdati(voldat,var)
2962integer,
intent(in) :: voldat
2963type(vol7d_var),
intent(in) :: var
2967end function integerdati
2970elemental integer function integerdatb(voldat,var)
2971integer(kind=int_b),
intent(in) :: voldat
2972type(vol7d_var),
intent(in) :: var
2980end function integerdatb
2983elemental integer function integerdatc(voldat,var)
2984CHARACTER(len=vol7d_cdatalen),
intent(in) :: voldat
2985type(vol7d_var),
intent(in) :: var
2987integerdatc=c2i(voldat)
2989end function integerdatc
2993elemental real function realdatd(voldat,var)
2994doubleprecision,
intent(in) :: voldat
2995type(vol7d_var),
intent(in) :: var
2998 realdatd=real(voldat)
3003end function realdatd
3006elemental real function realdatr(voldat,var)
3007real,
intent(in) :: voldat
3008type(vol7d_var),
intent(in) :: var
3012end function realdatr
3015elemental real function realdati(voldat,var)
3016integer,
intent(in) :: voldat
3017type(vol7d_var),
intent(in) :: var
3019if (
c_e(voldat))
then
3020 if (
c_e(var%scalefactor))
then
3021 realdati=float(voldat)/10.**var%scalefactor
3023 realdati=float(voldat)
3029end function realdati
3032elemental real function realdatb(voldat,var)
3033integer(kind=int_b),
intent(in) :: voldat
3034type(vol7d_var),
intent(in) :: var
3036if (
c_e(voldat))
then
3037 if (
c_e(var%scalefactor))
then
3038 realdatb=float(voldat)/10**var%scalefactor
3040 realdatb=float(voldat)
3046end function realdatb
3049elemental real function realdatc(voldat,var)
3050CHARACTER(len=vol7d_cdatalen),
intent(in) :: voldat
3051type(vol7d_var),
intent(in) :: var
3054if (
c_e(realdatc) .and.
c_e(var%scalefactor))
then
3055 realdatc=realdatc/10.**var%scalefactor
3058end function realdatc
3066FUNCTION realanavol(this, var)
RESULT(vol)
3067TYPE(
vol7d),
INTENT(in) :: this
3068TYPE(vol7d_var),
INTENT(in) :: var
3069REAL :: vol(SIZE(this%ana),size(this%network))
3071CHARACTER(len=1) :: dtype
3075indvar =
index(this%anavar, var, type=dtype)
3080 vol =
realdat(this%volanad(:,indvar,:), var)
3082 vol = this%volanar(:,indvar,:)
3084 vol =
realdat(this%volanai(:,indvar,:), var)
3086 vol =
realdat(this%volanab(:,indvar,:), var)
3088 vol =
realdat(this%volanac(:,indvar,:), var)
3096END FUNCTION realanavol
3104FUNCTION integeranavol(this, var)
RESULT(vol)
3105TYPE(
vol7d),
INTENT(in) :: this
3106TYPE(vol7d_var),
INTENT(in) :: var
3107INTEGER :: vol(SIZE(this%ana),size(this%network))
3109CHARACTER(len=1) :: dtype
3113indvar =
index(this%anavar, var, type=dtype)
3118 vol =
integerdat(this%volanad(:,indvar,:), var)
3120 vol =
integerdat(this%volanar(:,indvar,:), var)
3122 vol = this%volanai(:,indvar,:)
3124 vol =
integerdat(this%volanab(:,indvar,:), var)
3126 vol =
integerdat(this%volanac(:,indvar,:), var)
3134END FUNCTION integeranavol
3142subroutine move_datac (v7d,&
3143 indana,indtime,indlevel,indtimerange,indnetwork,&
3144 indananew,indtimenew,indlevelnew,indtimerangenew,indnetworknew)
3146TYPE(
vol7d),
intent(inout) :: v7d
3148integer,
intent(in) :: indana,indtime,indlevel,indtimerange,indnetwork
3149integer,
intent(in) :: indananew,indtimenew,indlevelnew,indtimerangenew,indnetworknew
3150integer :: inddativar,inddativarattr
3153do inddativar=1,
size(v7d%dativar%c)
3155 if (
c_e(v7d%voldatic(indana,indtime,indlevel,indtimerange,inddativar,indnetwork)) .and. &
3156 .not.
c_e(v7d%voldatic(indananew,indtimenew,indlevelnew,indtimerangenew,inddativar,indnetworknew))&
3161 (indananew,indtimenew,indlevelnew,indtimerangenew,inddativar,indnetworknew) = &
3163 (indana,indtime,indlevel,indtimerange,inddativar,indnetwork)
3167 if (
associated (v7d%dativarattr%i))
then
3168 inddativarattr =
index(v7d%dativarattr%i,v7d%dativar%c(inddativar))
3169 if (inddativarattr > 0 )
then
3171 (indananew,indtimenew,indlevelnew,indtimerangenew,inddativarattr,indnetworknew,:) = &
3173 (indana,indtime,indlevel,indtimerange,inddativarattr,indnetwork,:)
3177 if (
associated (v7d%dativarattr%r))
then
3178 inddativarattr =
index(v7d%dativarattr%r,v7d%dativar%c(inddativar))
3179 if (inddativarattr > 0 )
then
3181 (indananew,indtimenew,indlevelnew,indtimerangenew,inddativarattr,indnetworknew,:) = &
3183 (indana,indtime,indlevel,indtimerange,inddativarattr,indnetwork,:)
3187 if (
associated (v7d%dativarattr%d))
then
3188 inddativarattr =
index(v7d%dativarattr%d,v7d%dativar%c(inddativar))
3189 if (inddativarattr > 0 )
then
3191 (indananew,indtimenew,indlevelnew,indtimerangenew,inddativarattr,indnetworknew,:) = &
3193 (indana,indtime,indlevel,indtimerange,inddativarattr,indnetwork,:)
3197 if (
associated (v7d%dativarattr%b))
then
3198 inddativarattr =
index(v7d%dativarattr%b,v7d%dativar%c(inddativar))
3199 if (inddativarattr > 0 )
then
3201 (indananew,indtimenew,indlevelnew,indtimerangenew,inddativarattr,indnetworknew,:) = &
3203 (indana,indtime,indlevel,indtimerange,inddativarattr,indnetwork,:)
3207 if (
associated (v7d%dativarattr%c))
then
3208 inddativarattr =
index(v7d%dativarattr%c,v7d%dativar%c(inddativar))
3209 if (inddativarattr > 0 )
then
3211 (indananew,indtimenew,indlevelnew,indtimerangenew,inddativarattr,indnetworknew,:) = &
3213 (indana,indtime,indlevel,indtimerange,inddativarattr,indnetwork,:)
3221end subroutine move_datac
3228subroutine move_datar (v7d,&
3229 indana,indtime,indlevel,indtimerange,indnetwork,&
3230 indananew,indtimenew,indlevelnew,indtimerangenew,indnetworknew)
3232TYPE(
vol7d),
intent(inout) :: v7d
3234integer,
intent(in) :: indana,indtime,indlevel,indtimerange,indnetwork
3235integer,
intent(in) :: indananew,indtimenew,indlevelnew,indtimerangenew,indnetworknew
3236integer :: inddativar,inddativarattr
3239do inddativar=1,
size(v7d%dativar%r)
3241 if (
c_e(v7d%voldatir(indana,indtime,indlevel,indtimerange,inddativar,indnetwork)) .and. &
3242 .not.
c_e(v7d%voldatir(indananew,indtimenew,indlevelnew,indtimerangenew,inddativar,indnetworknew))&
3247 (indananew,indtimenew,indlevelnew,indtimerangenew,inddativar,indnetworknew) = &
3249 (indana,indtime,indlevel,indtimerange,inddativar,indnetwork)
3253 if (
associated (v7d%dativarattr%i))
then
3254 inddativarattr =
index(v7d%dativarattr%i,v7d%dativar%r(inddativar))
3255 if (inddativarattr > 0 )
then
3257 (indananew,indtimenew,indlevelnew,indtimerangenew,inddativarattr,indnetworknew,:) = &
3259 (indana,indtime,indlevel,indtimerange,inddativarattr,indnetwork,:)
3263 if (
associated (v7d%dativarattr%r))
then
3264 inddativarattr =
index(v7d%dativarattr%r,v7d%dativar%r(inddativar))
3265 if (inddativarattr > 0 )
then
3267 (indananew,indtimenew,indlevelnew,indtimerangenew,inddativarattr,indnetworknew,:) = &
3269 (indana,indtime,indlevel,indtimerange,inddativarattr,indnetwork,:)
3273 if (
associated (v7d%dativarattr%d))
then
3274 inddativarattr =
index(v7d%dativarattr%d,v7d%dativar%r(inddativar))
3275 if (inddativarattr > 0 )
then
3277 (indananew,indtimenew,indlevelnew,indtimerangenew,inddativarattr,indnetworknew,:) = &
3279 (indana,indtime,indlevel,indtimerange,inddativarattr,indnetwork,:)
3283 if (
associated (v7d%dativarattr%b))
then
3284 inddativarattr =
index(v7d%dativarattr%b,v7d%dativar%r(inddativar))
3285 if (inddativarattr > 0 )
then
3287 (indananew,indtimenew,indlevelnew,indtimerangenew,inddativarattr,indnetworknew,:) = &
3289 (indana,indtime,indlevel,indtimerange,inddativarattr,indnetwork,:)
3293 if (
associated (v7d%dativarattr%c))
then
3294 inddativarattr =
index(v7d%dativarattr%c,v7d%dativar%r(inddativar))
3295 if (inddativarattr > 0 )
then
3297 (indananew,indtimenew,indlevelnew,indtimerangenew,inddativarattr,indnetworknew,:) = &
3299 (indana,indtime,indlevel,indtimerange,inddativarattr,indnetwork,:)
3307end subroutine move_datar
3323subroutine v7d_rounding(v7din,v7dout,level,timerange,nostatproc)
3324type(
vol7d),
intent(inout) :: v7din
3325type(
vol7d),
intent(out) :: v7dout
3330logical,
intent(in),
optional :: nostatproc
3332integer :: nana,nlevel,ntime,ntimerange,nnetwork,nbin
3333integer :: iana,ilevel,itimerange,indl,indt,itime,inetwork
3336type(
vol7d) :: v7d_tmp
3341if (
associated(v7din%dativar%r)) nbin = nbin +
size(v7din%dativar%r)
3342if (
associated(v7din%dativar%i)) nbin = nbin +
size(v7din%dativar%i)
3343if (
associated(v7din%dativar%d)) nbin = nbin +
size(v7din%dativar%d)
3344if (
associated(v7din%dativar%b)) nbin = nbin +
size(v7din%dativar%b)
3348roundlevel=v7din%level
3350if (
present(level))
then
3351 do ilevel = 1,
size(v7din%level)
3352 if ((any(v7din%level(ilevel) .almosteq. level)))
then
3353 roundlevel(ilevel)=level(1)
3358roundtimerange=v7din%timerange
3360if (
present(timerange))
then
3361 do itimerange = 1,
size(v7din%timerange)
3362 if ((any(v7din%timerange(itimerange) .almosteq. timerange)))
then
3363 roundtimerange(itimerange)=timerange(1)
3370if (optio_log(nostatproc))
then
3371 roundtimerange(:)%timerange=254
3372 roundtimerange(:)%p2=0
3377nlevel=count_distinct(roundlevel,back=.true.)
3378ntime=
size(v7din%time)
3379ntimerange=count_distinct(roundtimerange,back=.true.)
3380nnetwork=
size(v7din%network)
3385 call copy(v7din,v7d_tmp)
3387 call vol7d_convr(v7din,v7d_tmp)
3390v7d_tmp%level=roundlevel
3391v7d_tmp%timerange=roundtimerange
3393do ilevel=1,
size(v7d_tmp%level)
3394 indl=
index(v7d_tmp%level,roundlevel(ilevel))
3395 do itimerange=1,
size(v7d_tmp%timerange)
3396 indt=
index(v7d_tmp%timerange,roundtimerange(itimerange))
3398 if (indl /= ilevel .or. indt /= itimerange)
then
3402 do inetwork=1,nnetwork
3405 call move_datar (v7d_tmp,&
3406 iana,itime,ilevel,itimerange,inetwork,&
3407 iana,itime,indl,indt,inetwork)
3409 call move_datac (v7d_tmp,&
3410 iana,itime,ilevel,itimerange,inetwork,&
3411 iana,itime,indl,indt,inetwork)
3424do ilevel=nlevel+1,
size(v7d_tmp%level)
3425 call init (v7d_tmp%level(ilevel))
3428do itimerange=ntimerange+1,
size(v7d_tmp%timerange)
3429 call init (v7d_tmp%timerange(itimerange))
3433CALL copy(v7d_tmp,v7dout,miss=.true.,lsort_timerange=.true.,lsort_level=.true.)
3438end subroutine v7d_rounding
Set of functions that return a trimmed CHARACTER representation of the input variable.
Legge un oggetto datetime/timedelta o un vettore di oggetti datetime/timedelta da un file FORMATTED o...
Scrive un oggetto datetime/timedelta o un vettore di oggetti datetime/timedelta su un file FORMATTED ...
Generic subroutine for checking OPTIONAL parameters.
Test for a missing volume.
Check for problems return 0 if all check passed print diagnostics with log4f.
Distruttore per la classe vol7d.
doubleprecision data conversion
Costruttore per la classe vol7d.
Reduce some dimensions (level and timerage) for semplification (rounding).
Represent data in a pretty string.
This module defines usefull general purpose function and subroutine.
Utilities for CHARACTER variables.
Classi per la gestione delle coordinate temporali.
Definition of constants to be used for declaring variables of a desired type.
classe per la gestione del logging
Module for quickly interpreting the OPTIONAL parameters passed to a subprogram.
Classe per la gestione dell'anagrafica di stazioni meteo e affini.
Classe per la gestione di un volume completo di dati osservati.
Classe per la gestione dei livelli verticali in osservazioni meteo e affini.
Classe per la gestione delle reti di stazioni per osservazioni meteo e affini.
Classe per la gestione degli intervalli temporali di osservazioni meteo e affini.
Classe per gestire un vettore di oggetti di tipo vol7d_var_class::vol7d_var.
Class for expressing an absolute time value.
Definisce l'anagrafica di una stazione.
Definisce un oggetto contenente i volumi anagrafica e dati e tutti i descrittori delle loro dimension...
Definisce il livello verticale di un'osservazione.
Definisce la rete a cui appartiene una stazione.
Definisce l'intervallo temporale di un'osservazione meteo.
Definisce un vettore di vol7d_var_class::vol7d_var per ogni tipo di dato supportato.