102 INTEGER,
PARAMETER :: vol7d_maxdim_a = 3, vol7d_maxdim_aa = 4, &
103 vol7d_maxdim_d = 6, vol7d_maxdim_ad = 7
105 INTEGER,
PARAMETER :: vol7d_ana_a=1
106 INTEGER,
PARAMETER :: vol7d_var_a=2
107 INTEGER,
PARAMETER :: vol7d_network_a=3
108 INTEGER,
PARAMETER :: vol7d_attr_a=4
109 INTEGER,
PARAMETER :: vol7d_ana_d=1
110 INTEGER,
PARAMETER :: vol7d_time_d=2
111 INTEGER,
PARAMETER :: vol7d_level_d=3
112 INTEGER,
PARAMETER :: vol7d_timerange_d=4
113 INTEGER,
PARAMETER :: vol7d_var_d=5
114 INTEGER,
PARAMETER :: vol7d_network_d=6
115 INTEGER,
PARAMETER :: vol7d_attr_d=7
116 INTEGER,
PARAMETER :: vol7d_cdatalen=32
119 INTEGER :: r, d, i, b, c
120 END TYPE vol7d_varmap
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
298 PRIVATE 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
312 PRIVATE doubledatd,doubledatr,doubledati,doubledatb,doubledatc
323 SUBROUTINE vol7d_init(this,time_definition)
325 INTEGER,
INTENT(IN),
OPTIONAL :: time_definition
327 CALL init(this%anavar)
329 CALL init(this%anavarattr)
331 CALL init(this%datiattr)
334 NULLIFY(this%ana, this%time, this%level, this%timerange, this%network)
336 NULLIFY(this%volanar, this%volanaattrr, this%voldatir, this%voldatiattrr)
337 NULLIFY(this%volanad, this%volanaattrd, this%voldatid, this%voldatiattrd)
338 NULLIFY(this%volanai, this%volanaattri, this%voldatii, this%voldatiattri)
339 NULLIFY(this%volanab, this%volanaattrb, this%voldatib, this%voldatiattrb)
340 NULLIFY(this%volanac, this%volanaattrc, this%voldatic, this%voldatiattrc)
342 if(
present(time_definition))
then 343 this%time_definition=time_definition
345 this%time_definition=1
348 END SUBROUTINE vol7d_init
354 ELEMENTAL SUBROUTINE vol7d_delete(this, dataonly)
356 LOGICAL,
INTENT(in),
OPTIONAL :: dataonly
359 IF (.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)
371 IF (
ASSOCIATED(this%voldatir))
DEALLOCATE(this%voldatir)
372 IF (
ASSOCIATED(this%voldatid))
DEALLOCATE(this%voldatid)
373 IF (
ASSOCIATED(this%voldatii))
DEALLOCATE(this%voldatii)
374 IF (
ASSOCIATED(this%voldatib))
DEALLOCATE(this%voldatib)
375 IF (
ASSOCIATED(this%voldatic))
DEALLOCATE(this%voldatic)
376 IF (
ASSOCIATED(this%voldatiattrr))
DEALLOCATE(this%voldatiattrr)
377 IF (
ASSOCIATED(this%voldatiattrd))
DEALLOCATE(this%voldatiattrd)
378 IF (
ASSOCIATED(this%voldatiattri))
DEALLOCATE(this%voldatiattri)
379 IF (
ASSOCIATED(this%voldatiattrb))
DEALLOCATE(this%voldatiattrb)
380 IF (
ASSOCIATED(this%voldatiattrc))
DEALLOCATE(this%voldatiattrc)
382 IF (.NOT. optio_log(dataonly))
THEN 383 IF (
ASSOCIATED(this%ana))
DEALLOCATE(this%ana)
384 IF (
ASSOCIATED(this%network))
DEALLOCATE(this%network)
386 IF (
ASSOCIATED(this%time))
DEALLOCATE(this%time)
387 IF (
ASSOCIATED(this%level))
DEALLOCATE(this%level)
388 IF (
ASSOCIATED(this%timerange))
DEALLOCATE(this%timerange)
390 IF (.NOT. optio_log(dataonly))
THEN 393 CALL delete(this%anavarattr)
396 CALL delete(this%datiattr)
397 CALL delete(this%dativarattr)
399 END SUBROUTINE vol7d_delete
403 integer function vol7d_check(this)
404 TYPE(vol7d),
intent(in) :: this
405 integer :: i,j,k,l,m,n
409 if (
associated(this%voldatii))
then 410 do 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("&
430 if (
associated(this%voldatir))
then 431 do 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("&
450 if (
associated(this%voldatid))
then 451 do 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("&
470 if (
associated(this%voldatib))
then 471 do 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("&
490 end function vol7d_check
496 SUBROUTINE vol7d_display(this)
497 TYPE(vol7d),
intent(in) :: this
501 DOUBLE PRECISION :: ddat
503 INTEGER(kind=int_b) :: bdat
504 CHARACTER(len=vol7d_cdatalen) :: cdat
507 print*,
"<<<<<<<<<<<<<<<<<<< vol7d object >>>>>>>>>>>>>>>>>>>>" 508 if (this%time_definition == 0)
then 509 print*,
"TIME DEFINITION: time is reference time" 510 else if (this%time_definition == 1)
then 511 print*,
"TIME DEFINITION: time is validity time" 512 else 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
518 IF (
ASSOCIATED(this%network))
then 519 print*,
"---- network vector ----" 520 print*,
"elements=",
size(this%network)
521 do i=1,
size(this%network)
526 IF (
ASSOCIATED(this%ana))
then 527 print*,
"---- ana vector ----" 528 print*,
"elements=",
size(this%ana)
529 do i=1,
size(this%ana)
534 IF (
ASSOCIATED(this%time))
then 535 print*,
"---- time vector ----" 536 print*,
"elements=",
size(this%time)
537 do i=1,
size(this%time)
542 IF (
ASSOCIATED(this%level))
then 543 print*,
"---- level vector ----" 544 print*,
"elements=",
size(this%level)
545 do i =1,
size(this%level)
550 IF (
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))
559 print*,
"---- ana vector ----" 561 print*,
"->>>>>>>>> anavar -" 564 print*,
"->>>>>>>>> anaattr -" 567 print*,
"->>>>>>>>> anavarattr -" 570 print*,
"-- ana data section (first point) --" 584 IF (
SIZE(this%ana) > 0 .AND.
SIZE(this%network) > 0)
THEN 585 if (
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)
593 if (
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)
601 if (
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)
609 if (
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)
617 if (
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)
626 print*,
"---- data vector ----" 628 print*,
"->>>>>>>>> dativar -" 631 print*,
"->>>>>>>>> datiattr -" 634 print*,
"->>>>>>>>> dativarattr -" 637 print*,
"-- data data section (first point) --" 645 IF (
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 647 if (
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)
655 if (
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)
663 if (
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)
671 if (
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)
679 if (
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)
688 print*,
"<<<<<<<<<<<<<<<<<<< END vol7d object >>>>>>>>>>>>>>>>>>>>" 690 END SUBROUTINE vol7d_display
694 SUBROUTINE dat_display(this,idat,rdat,ddat,bdat,cdat)
695 TYPE(vol7d_var),
intent(in) :: this
699 DOUBLE PRECISION :: ddat
703 INTEGER(kind=int_b) :: bdat
705 CHARACTER(len=*) :: cdat
707 print *, to_char_dat(this,idat,rdat,ddat,bdat,cdat)
709 end SUBROUTINE dat_display
712 SUBROUTINE dat_vect_display(this,idat,rdat,ddat,bdat,cdat)
714 TYPE(vol7d_var),
intent(in) :: this(:)
718 DOUBLE PRECISION :: ddat(:)
722 INTEGER(kind=int_b) :: bdat(:)
724 CHARACTER(len=*):: cdat(:)
729 call display(this(i),idat(i),rdat(i),ddat(i),bdat(i),cdat(i))
732 end SUBROUTINE dat_vect_display
735 FUNCTION to_char_dat(this,idat,rdat,ddat,bdat,cdat)
739 TYPE(vol7d_var),
INTENT(in) :: this
743 DOUBLE PRECISION :: ddat
747 INTEGER(kind=int_b) :: bdat
749 CHARACTER(len=*) :: cdat
750 CHARACTER(len=80) :: to_char_dat
752 CHARACTER(len=LEN(to_char_dat)) :: to_char_tmp
756 INTEGER :: handle, ier
759 to_char_dat=
"VALUE: " 761 if (
c_e(idat)) to_char_dat=trim(to_char_dat)//
" ;int> "//trim(
to_char(idat))
762 if (
c_e(rdat)) to_char_dat=trim(to_char_dat)//
" ;real> "//trim(
to_char(rdat))
763 if (
c_e(ddat)) to_char_dat=trim(to_char_dat)//
" ;double> "//trim(
to_char(ddat))
764 if (
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)
775 to_char_dat=
"VALUE: " 776 if (
c_e(idat)) to_char_dat=trim(to_char_dat)//
" ;int> "//trim(
to_char(idat))
777 if (
c_e(rdat)) to_char_dat=trim(to_char_dat)//
" ;real> "//trim(
to_char(rdat))
778 if (
c_e(ddat)) to_char_dat=trim(to_char_dat)//
" ;double> "//trim(
to_char(ddat))
779 if (
c_e(bdat)) to_char_dat=trim(to_char_dat)//
" ;byte> "//trim(
to_char(bdat))
780 if (
c_e(cdat)) to_char_dat=trim(to_char_dat)//
" ;char> "//trim(cdat)
784 END FUNCTION to_char_dat
789 FUNCTION vol7d_c_e(this)
RESULT(c_e)
790 TYPE(
vol7d),
INTENT(in) :: this
794 c_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)
810 END FUNCTION vol7d_c_e
851 SUBROUTINE 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, &
859 TYPE(
vol7d),
INTENT(inout) :: this
860 INTEGER,
INTENT(in),
OPTIONAL :: nana
861 INTEGER,
INTENT(in),
OPTIONAL :: ntime
862 INTEGER,
INTENT(in),
OPTIONAL :: nlevel
863 INTEGER,
INTENT(in),
OPTIONAL :: ntimerange
864 INTEGER,
INTENT(in),
OPTIONAL :: nnetwork
866 INTEGER,
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
873 LOGICAL,
INTENT(in),
OPTIONAL :: ini
878 IF (
PRESENT(ini))
THEN 885 IF (
PRESENT(nana))
THEN 887 IF (
ASSOCIATED(this%ana))
DEALLOCATE(this%ana)
888 ALLOCATE(this%ana(nana))
891 CALL init(this%ana(i))
896 IF (
PRESENT(ntime))
THEN 898 IF (
ASSOCIATED(this%time))
DEALLOCATE(this%time)
899 ALLOCATE(this%time(ntime))
902 CALL init(this%time(i))
907 IF (
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))
918 IF (
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))
929 IF (
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))
941 CALL vol7d_varvect_alloc(this%anavar, nanavarr, nanavard, &
942 nanavari, nanavarb, nanavarc, ini)
943 CALL vol7d_varvect_alloc(this%anaattr, nanaattrr, nanaattrd, &
944 nanaattri, nanaattrb, nanaattrc, ini)
945 CALL vol7d_varvect_alloc(this%anavarattr, nanavarattrr, nanavarattrd, &
946 nanavarattri, nanavarattrb, nanavarattrc, ini)
947 CALL vol7d_varvect_alloc(this%dativar, ndativarr, ndativard, &
948 ndativari, ndativarb, ndativarc, ini)
949 CALL vol7d_varvect_alloc(this%datiattr, ndatiattrr, ndatiattrd, &
950 ndatiattri, ndatiattrb, ndatiattrc, ini)
951 CALL vol7d_varvect_alloc(this%dativarattr, ndativarattrr, ndativarattrd, &
952 ndativarattri, ndativarattrb, ndativarattrc, ini)
954 END SUBROUTINE vol7d_alloc
957 FUNCTION vol7d_check_alloc_ana(this)
958 TYPE(
vol7d),
INTENT(in) :: this
959 LOGICAL :: vol7d_check_alloc_ana
961 vol7d_check_alloc_ana =
ASSOCIATED(this%ana) .AND.
ASSOCIATED(this%network)
963 END FUNCTION vol7d_check_alloc_ana
965 SUBROUTINE vol7d_force_alloc_ana(this, ini)
966 TYPE(
vol7d),
INTENT(inout) :: this
967 LOGICAL,
INTENT(in),
OPTIONAL :: ini
970 IF (.NOT.
ASSOCIATED(this%ana))
CALL vol7d_alloc(this, nana=1, ini=ini)
971 IF (.NOT.
ASSOCIATED(this%network))
CALL vol7d_alloc(this, nnetwork=1, ini=ini)
973 END SUBROUTINE vol7d_force_alloc_ana
976 FUNCTION vol7d_check_alloc_dati(this)
977 TYPE(
vol7d),
INTENT(in) :: this
978 LOGICAL :: vol7d_check_alloc_dati
980 vol7d_check_alloc_dati = vol7d_check_alloc_ana(this) .AND. &
981 ASSOCIATED(this%time) .AND.
ASSOCIATED(this%level) .AND. &
982 ASSOCIATED(this%timerange)
984 END FUNCTION vol7d_check_alloc_dati
986 SUBROUTINE vol7d_force_alloc_dati(this, ini)
987 TYPE(
vol7d),
INTENT(inout) :: this
988 LOGICAL,
INTENT(in),
OPTIONAL :: ini
991 CALL vol7d_force_alloc_ana(this, ini)
992 IF (.NOT.
ASSOCIATED(this%time))
CALL vol7d_alloc(this, ntime=1, ini=ini)
993 IF (.NOT.
ASSOCIATED(this%level))
CALL vol7d_alloc(this, nlevel=1, ini=ini)
994 IF (.NOT.
ASSOCIATED(this%timerange))
CALL vol7d_alloc(this, ntimerange=1, ini=ini)
996 END SUBROUTINE vol7d_force_alloc_dati
999 SUBROUTINE vol7d_force_alloc(this)
1000 TYPE(
vol7d),
INTENT(inout) :: this
1003 IF (.NOT.
ASSOCIATED(this%ana))
CALL vol7d_alloc(this, nana=0)
1004 IF (.NOT.
ASSOCIATED(this%network))
CALL vol7d_alloc(this, nnetwork=0)
1005 IF (.NOT.
ASSOCIATED(this%time))
CALL vol7d_alloc(this, ntime=0)
1006 IF (.NOT.
ASSOCIATED(this%level))
CALL vol7d_alloc(this, nlevel=0)
1007 IF (.NOT.
ASSOCIATED(this%timerange))
CALL vol7d_alloc(this, ntimerange=0)
1009 END SUBROUTINE vol7d_force_alloc
1012 FUNCTION vol7d_check_vol(this)
1013 TYPE(
vol7d),
INTENT(in) :: this
1014 LOGICAL :: vol7d_check_vol
1016 vol7d_check_vol =
c_e(this)
1019 IF (
ASSOCIATED(this%anavar%r) .AND. .NOT.
ASSOCIATED(this%volanar))
THEN 1020 vol7d_check_vol = .false.
1023 IF (
ASSOCIATED(this%anavar%d) .AND. .NOT.
ASSOCIATED(this%volanad))
THEN 1024 vol7d_check_vol = .false.
1027 IF (
ASSOCIATED(this%anavar%i) .AND. .NOT.
ASSOCIATED(this%volanai))
THEN 1028 vol7d_check_vol = .false.
1031 IF (
ASSOCIATED(this%anavar%b) .AND. .NOT.
ASSOCIATED(this%volanab))
THEN 1032 vol7d_check_vol = .false.
1035 IF (
ASSOCIATED(this%anavar%c) .AND. .NOT.
ASSOCIATED(this%volanac))
THEN 1036 vol7d_check_vol = .false.
1038 IF (
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)
1045 IF (
ASSOCIATED(this%anaattr%r) .AND.
ASSOCIATED(this%anavarattr%r) .AND. &
1046 .NOT.
ASSOCIATED(this%volanaattrr))
THEN 1047 vol7d_check_vol = .false.
1050 IF (
ASSOCIATED(this%anaattr%d) .AND.
ASSOCIATED(this%anavarattr%d) .AND. &
1051 .NOT.
ASSOCIATED(this%volanaattrd))
THEN 1052 vol7d_check_vol = .false.
1055 IF (
ASSOCIATED(this%anaattr%i) .AND.
ASSOCIATED(this%anavarattr%i) .AND. &
1056 .NOT.
ASSOCIATED(this%volanaattri))
THEN 1057 vol7d_check_vol = .false.
1060 IF (
ASSOCIATED(this%anaattr%b) .AND.
ASSOCIATED(this%anavarattr%b) .AND. &
1061 .NOT.
ASSOCIATED(this%volanaattrb))
THEN 1062 vol7d_check_vol = .false.
1065 IF (
ASSOCIATED(this%anaattr%c) .AND.
ASSOCIATED(this%anavarattr%c) .AND. &
1066 .NOT.
ASSOCIATED(this%volanaattrc))
THEN 1067 vol7d_check_vol = .false.
1071 IF (
ASSOCIATED(this%dativar%r) .AND. .NOT.
ASSOCIATED(this%voldatir))
THEN 1072 vol7d_check_vol = .false.
1075 IF (
ASSOCIATED(this%dativar%d) .AND. .NOT.
ASSOCIATED(this%voldatid))
THEN 1076 vol7d_check_vol = .false.
1079 IF (
ASSOCIATED(this%dativar%i) .AND. .NOT.
ASSOCIATED(this%voldatii))
THEN 1080 vol7d_check_vol = .false.
1083 IF (
ASSOCIATED(this%dativar%b) .AND. .NOT.
ASSOCIATED(this%voldatib))
THEN 1084 vol7d_check_vol = .false.
1087 IF (
ASSOCIATED(this%dativar%c) .AND. .NOT.
ASSOCIATED(this%voldatic))
THEN 1088 vol7d_check_vol = .false.
1092 IF (
ASSOCIATED(this%datiattr%r) .AND.
ASSOCIATED(this%dativarattr%r) .AND. &
1093 .NOT.
ASSOCIATED(this%voldatiattrr))
THEN 1094 vol7d_check_vol = .false.
1097 IF (
ASSOCIATED(this%datiattr%d) .AND.
ASSOCIATED(this%dativarattr%d) .AND. &
1098 .NOT.
ASSOCIATED(this%voldatiattrd))
THEN 1099 vol7d_check_vol = .false.
1102 IF (
ASSOCIATED(this%datiattr%i) .AND.
ASSOCIATED(this%dativarattr%i) .AND. &
1103 .NOT.
ASSOCIATED(this%voldatiattri))
THEN 1104 vol7d_check_vol = .false.
1107 IF (
ASSOCIATED(this%datiattr%b) .AND.
ASSOCIATED(this%dativarattr%b) .AND. &
1108 .NOT.
ASSOCIATED(this%voldatiattrb))
THEN 1109 vol7d_check_vol = .false.
1112 IF (
ASSOCIATED(this%datiattr%c) .AND.
ASSOCIATED(this%dativarattr%c) .AND. &
1113 .NOT.
ASSOCIATED(this%voldatiattrc))
THEN 1114 vol7d_check_vol = .false.
1116 IF (
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)
1122 END FUNCTION vol7d_check_vol
1139 SUBROUTINE vol7d_alloc_vol(this, ini, inivol)
1140 TYPE(vol7d),
INTENT(inout) :: this
1141 LOGICAL,
INTENT(in),
OPTIONAL :: ini
1142 LOGICAL,
INTENT(in),
OPTIONAL :: inivol
1146 IF (
PRESENT(inivol))
THEN 1153 IF (
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
1159 IF (
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
1165 IF (
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
1171 IF (
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
1177 IF (
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
1184 IF (
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
1192 IF (
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
1200 IF (
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
1208 IF (
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
1216 IF (
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
1225 IF (
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
1232 IF (
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
1239 IF (
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
1246 IF (
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
1253 IF (
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
1261 IF (
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
1270 IF (
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
1279 IF (
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
1288 IF (
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
1297 IF (
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
1307 CALL vol7d_force_alloc(this)
1312 CALL l4f_log(l4f_debug,
"calling: vol7d_set_attr_ind")
1315 CALL vol7d_set_attr_ind(this)
1319 END SUBROUTINE vol7d_alloc_vol
1328 SUBROUTINE vol7d_set_attr_ind(this)
1329 TYPE(vol7d),
INTENT(inout) :: this
1334 IF (
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)
1371 IF (
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)
1408 IF (
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)
1445 IF (
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)
1482 IF (
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)
1519 END SUBROUTINE vol7d_set_attr_ind
1526 SUBROUTINE vol7d_merge(this, that, sort, bestdata, &
1527 ltimesimple, ltimerangesimple, llevelsimple, lanasimple)
1528 TYPE(vol7d),
INTENT(INOUT) :: this
1529 TYPE(vol7d),
INTENT(INOUT) :: that
1530 LOGICAL,
INTENT(IN),
OPTIONAL :: sort
1531 LOGICAL,
INTENT(in),
OPTIONAL :: bestdata
1532 LOGICAL,
INTENT(IN),
OPTIONAL :: ltimesimple, ltimerangesimple, llevelsimple, lanasimple
1534 TYPE(vol7d) :: v7d_clean
1537 IF (.NOT.
c_e(this))
THEN 1539 CALL init(v7d_clean)
1542 CALL vol7d_append(this, that,
sort, bestdata, &
1543 ltimesimple, ltimerangesimple, llevelsimple, lanasimple)
1547 END SUBROUTINE vol7d_merge
1578 SUBROUTINE vol7d_append(this, that, sort, bestdata, &
1579 ltimesimple, ltimerangesimple, llevelsimple, lanasimple, lnetworksimple)
1580 TYPE(vol7d),
INTENT(INOUT) :: this
1581 TYPE(vol7d),
INTENT(IN) :: that
1582 LOGICAL,
INTENT(IN),
OPTIONAL :: sort
1586 LOGICAL,
INTENT(in),
OPTIONAL :: bestdata
1587 LOGICAL,
INTENT(IN),
OPTIONAL :: ltimesimple, ltimerangesimple, llevelsimple, lanasimple, lnetworksimple
1590 TYPE(vol7d) :: v7dtmp
1591 LOGICAL :: lsort, lbestdata
1592 INTEGER,
POINTER :: remapt1(:), remapt2(:), remaptr1(:), remaptr2(:), &
1593 remapl1(:), remapl2(:), remapa1(:), remapa2(:), remapn1(:), remapn2(:)
1595 IF (.NOT.
c_e(that))
RETURN 1596 IF (.NOT.vol7d_check_vol(that))
RETURN 1597 IF (.NOT.
c_e(this))
THEN 1598 CALL vol7d_copy(that, this,
sort=
sort)
1602 IF (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()
1610 CALL vol7d_alloc_vol(this)
1612 CALL init(v7dtmp, time_definition=this%time_definition)
1614 CALL optio(bestdata, lbestdata)
1618 IF (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)
1625 IF (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)
1632 IF (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)
1639 IF (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)
1646 IF (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)
1655 CALL vol7d_merge_finalr(this, that, v7dtmp, &
1656 remapa1, remapa2, remapt1, remapt2, remapl1, remapl2, &
1657 remaptr1, remaptr2, remapn1, remapn2, lbestdata)
1658 CALL vol7d_merge_finald(this, that, v7dtmp, &
1659 remapa1, remapa2, remapt1, remapt2, remapl1, remapl2, &
1660 remaptr1, remaptr2, remapn1, remapn2, lbestdata)
1661 CALL vol7d_merge_finali(this, that, v7dtmp, &
1662 remapa1, remapa2, remapt1, remapt2, remapl1, remapl2, &
1663 remaptr1, remaptr2, remapn1, remapn2, lbestdata)
1664 CALL vol7d_merge_finalb(this, that, v7dtmp, &
1665 remapa1, remapa2, remapt1, remapt2, remapl1, remapl2, &
1666 remaptr1, remaptr2, remapn1, remapn2, lbestdata)
1667 CALL vol7d_merge_finalc(this, that, v7dtmp, &
1668 remapa1, remapa2, remapt1, remapt2, remapl1, remapl2, &
1669 remaptr1, remaptr2, remapn1, remapn2, lbestdata)
1672 IF (
ASSOCIATED(remapt1))
DEALLOCATE(remapt1)
1673 IF (
ASSOCIATED(remapt2))
DEALLOCATE(remapt2)
1674 IF (
ASSOCIATED(remaptr1))
DEALLOCATE(remaptr1)
1675 IF (
ASSOCIATED(remaptr2))
DEALLOCATE(remaptr2)
1676 IF (
ASSOCIATED(remapl1))
DEALLOCATE(remapl1)
1677 IF (
ASSOCIATED(remapl2))
DEALLOCATE(remapl2)
1678 IF (
ASSOCIATED(remapa1))
DEALLOCATE(remapa1)
1679 IF (
ASSOCIATED(remapa2))
DEALLOCATE(remapa2)
1680 IF (
ASSOCIATED(remapn1))
DEALLOCATE(remapn1)
1681 IF (
ASSOCIATED(remapn2))
DEALLOCATE(remapn2)
1687 CALL vol7d_set_attr_ind(this)
1689 END SUBROUTINE vol7d_append
1724 SUBROUTINE 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)
1733 TYPE(vol7d),
INTENT(IN) :: this
1734 TYPE(vol7d),
INTENT(INOUT) :: that
1735 LOGICAL,
INTENT(IN),
OPTIONAL :: sort
1736 LOGICAL,
INTENT(IN),
OPTIONAL :: unique
1737 LOGICAL,
INTENT(IN),
OPTIONAL :: miss
1738 LOGICAL,
INTENT(IN),
OPTIONAL :: lsort_time
1739 LOGICAL,
INTENT(IN),
OPTIONAL :: lsort_timerange
1740 LOGICAL,
INTENT(IN),
OPTIONAL :: lsort_level
1748 LOGICAL,
INTENT(IN),
OPTIONAL :: ltime(:)
1750 LOGICAL,
INTENT(IN),
OPTIONAL :: ltimerange(:)
1752 LOGICAL,
INTENT(IN),
OPTIONAL :: llevel(:)
1754 LOGICAL,
INTENT(IN),
OPTIONAL :: lana(:)
1756 LOGICAL,
INTENT(IN),
OPTIONAL :: lnetwork(:)
1758 LOGICAL,
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(:)
1766 LOGICAL :: lsort, lunique, lmiss
1767 INTEGER,
POINTER :: remapt(:), remaptr(:), remapl(:), remapa(:), remapn(:)
1770 IF (.NOT.
c_e(this))
RETURN 1771 IF (.NOT.vol7d_check_vol(this))
RETURN 1774 CALL optio(unique, lunique)
1775 CALL optio(miss, lmiss)
1779 CALL vol7d_remap1_datetime(this%time, that%time, &
1780 lsort.OR.optio_log(lsort_time), lunique, lmiss, remapt, ltime)
1781 CALL vol7d_remap1_vol7d_timerange(this%timerange, that%timerange, &
1782 lsort.OR.optio_log(lsort_timerange), lunique, lmiss, remaptr, ltimerange)
1783 CALL vol7d_remap1_vol7d_level(this%level, that%level, &
1784 lsort.OR.optio_log(lsort_level), lunique, lmiss, remapl, llevel)
1785 CALL vol7d_remap1_vol7d_ana(this%ana, that%ana, &
1786 lsort, lunique, lmiss, remapa, lana)
1787 CALL vol7d_remap1_vol7d_network(this%network, that%network, &
1788 lsort, lunique, lmiss, remapn, lnetwork)
1797 CALL vol7d_reform_finalr(this, that, &
1798 remapa, remapt, remapl, remaptr, remapn, lsort, lunique, lmiss, &
1799 lanavarr, lanaattrr, lanavarattrr, ldativarr, ldatiattrr, ldativarattrr)
1800 CALL vol7d_reform_finald(this, that, &
1801 remapa, remapt, remapl, remaptr, remapn, lsort, lunique, lmiss, &
1802 lanavard, lanaattrd, lanavarattrd, ldativard, ldatiattrd, ldativarattrd)
1803 CALL vol7d_reform_finali(this, that, &
1804 remapa, remapt, remapl, remaptr, remapn, lsort, lunique, lmiss, &
1805 lanavari, lanaattri, lanavarattri, ldativari, ldatiattri, ldativarattri)
1806 CALL vol7d_reform_finalb(this, that, &
1807 remapa, remapt, remapl, remaptr, remapn, lsort, lunique, lmiss, &
1808 lanavarb, lanaattrb, lanavarattrb, ldativarb, ldatiattrb, ldativarattrb)
1809 CALL vol7d_reform_finalc(this, that, &
1810 remapa, remapt, remapl, remaptr, remapn, lsort, lunique, lmiss, &
1811 lanavarc, lanaattrc, lanavarattrc, ldativarc, ldatiattrc, ldativarattrc)
1814 IF (
ASSOCIATED(remapt))
DEALLOCATE(remapt)
1815 IF (
ASSOCIATED(remaptr))
DEALLOCATE(remaptr)
1816 IF (
ASSOCIATED(remapl))
DEALLOCATE(remapl)
1817 IF (
ASSOCIATED(remapa))
DEALLOCATE(remapa)
1818 IF (
ASSOCIATED(remapn))
DEALLOCATE(remapn)
1821 CALL vol7d_set_attr_ind(that)
1822 that%time_definition = this%time_definition
1824 END SUBROUTINE vol7d_copy
1837 SUBROUTINE 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&
1847 TYPE(vol7d),
INTENT(INOUT) :: this
1848 LOGICAL,
INTENT(IN),
OPTIONAL :: sort
1849 LOGICAL,
INTENT(IN),
OPTIONAL :: unique
1850 LOGICAL,
INTENT(IN),
OPTIONAL :: miss
1851 LOGICAL,
INTENT(IN),
OPTIONAL :: lsort_time
1852 LOGICAL,
INTENT(IN),
OPTIONAL :: lsort_timerange
1853 LOGICAL,
INTENT(IN),
OPTIONAL :: lsort_level
1861 LOGICAL,
INTENT(IN),
OPTIONAL :: ltime(:)
1862 LOGICAL,
INTENT(IN),
OPTIONAL :: ltimerange(:)
1863 LOGICAL,
INTENT(IN),
OPTIONAL :: llevel(:)
1864 LOGICAL,
INTENT(IN),
OPTIONAL :: lana(:)
1865 LOGICAL,
INTENT(IN),
OPTIONAL :: lnetwork(:)
1867 LOGICAL,
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(:)
1874 LOGICAL,
INTENT(IN),
OPTIONAL :: purgeana
1876 TYPE(vol7d) :: v7dtmp
1877 logical,
allocatable :: llana(:)
1880 CALL 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)
1893 if (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)
1910 END SUBROUTINE vol7d_reform
1920 SUBROUTINE vol7d_smart_sort(this, lsort_time, lsort_timerange, lsort_level)
1921 TYPE(vol7d),
INTENT(INOUT) :: this
1922 LOGICAL,
OPTIONAL,
INTENT(in) :: lsort_time
1923 LOGICAL,
OPTIONAL,
INTENT(in) :: lsort_timerange
1924 LOGICAL,
OPTIONAL,
INTENT(in) :: lsort_level
1927 LOGICAL :: to_be_sorted
1929 to_be_sorted = .false.
1930 CALL vol7d_alloc_vol(this)
1932 IF (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.
1940 IF (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.
1948 IF (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.
1957 IF (to_be_sorted)
CALL vol7d_reform(this, &
1958 lsort_time=lsort_time, lsort_timerange=lsort_timerange, lsort_level=lsort_level )
1960 END SUBROUTINE vol7d_smart_sort
1969 SUBROUTINE vol7d_filter(this, avl, vl, nl, s_d, e_d)
1970 TYPE(vol7d),
INTENT(inout) :: this
1971 CHARACTER(len=*),
INTENT(in),
OPTIONAL :: avl(:)
1972 CHARACTER(len=*),
INTENT(in),
OPTIONAL :: vl(:)
1973 TYPE(vol7d_network),
OPTIONAL :: nl(:)
1974 TYPE(datetime),
INTENT(in),
OPTIONAL :: s_d
1975 TYPE(datetime),
INTENT(in),
OPTIONAL :: e_d
1979 IF (
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
2016 IF (
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
2057 IF (
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
2065 IF (
PRESENT(s_d))
THEN 2067 WHERE (this%time < s_d)
2068 this%time = datetime_miss
2073 IF (
PRESENT(e_d))
THEN 2075 WHERE (this%time > e_d)
2076 this%time = datetime_miss
2081 CALL vol7d_reform(this, miss=.true.)
2083 END SUBROUTINE vol7d_filter
2092 SUBROUTINE vol7d_convr(this, that, anaconv)
2093 TYPE(vol7d),
INTENT(IN) :: this
2094 TYPE(vol7d),
INTENT(INOUT) :: that
2095 LOGICAL,
OPTIONAL,
INTENT(in) :: anaconv
2097 LOGICAL :: fv(1)=(/.false./), tv(1)=(/.true./), acp(1), acn(1)
2098 TYPE(vol7d) :: v7d_tmp
2100 IF (optio_log(anaconv))
THEN 2110 CALL 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)
2115 CALL 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)
2124 IF (
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)
2163 CALL 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)
2172 IF (
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)
2211 CALL 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)
2220 IF (
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)
2259 CALL 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)
2268 IF (
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)
2305 END SUBROUTINE vol7d_convr
2311 SUBROUTINE vol7d_diff_only (this, that, data_only,ana)
2312 TYPE(vol7d),
INTENT(IN) :: this
2313 TYPE(vol7d),
INTENT(OUT) :: that
2314 logical ,
optional,
intent(in) :: data_only
2315 logical ,
optional,
intent(in) :: ana
2316 logical :: ldata_only,lana
2318 IF (
PRESENT(data_only))
THEN 2319 ldata_only = data_only
2321 ldata_only = .false.
2324 IF (
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 2339 if ( .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
2358 END 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" 2424 subroutine vol7d_write_on_file (this,unit,description,filename,filename_auto)
2426 TYPE(vol7d),
INTENT(IN) :: this
2427 integer,
optional,
intent(inout) :: unit
2428 character(len=*),
intent(in),
optional :: filename
2429 character(len=*),
intent(out),
optional :: filename_auto
2430 character(len=*),
INTENT(IN),
optional :: description
2433 character(len=254) :: ldescription,arg,lfilename
2434 integer :: 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
2442 integer :: tarray(8)
2443 logical :: opened,exist
2483 call date_and_time(values=tarray)
2486 if (
present(description))
then 2487 ldescription=description
2489 ldescription=
"Vol7d generated by: "//trim(arg)
2492 if (.not.
present(unit))
then 2503 lfilename=trim(arg)//
".v7d" 2504 if (
index(arg,
'/',back=.true.) > 0) lfilename=lfilename(
index(arg,
'/',back=.true.)+1 : )
2506 if (
present(filename))
then 2507 if (filename /=
"")
then 2512 if (
present(filename_auto))filename_auto=lfilename
2515 inquire(unit=lunit,opened=opened)
2516 if (.not. opened)
then 2523 OPEN(unit=lunit, file=lfilename, form=
'UNFORMATTED', access=
'STREAM')
2524 CALL l4f_log(l4f_info,
'opened: '//trim(lfilename))
2527 if (
associated(this%ana)) nana=
size(this%ana)
2528 if (
associated(this%time)) ntime=
size(this%time)
2529 if (
associated(this%timerange)) ntimerange=
size(this%timerange)
2530 if (
associated(this%level)) nlevel=
size(this%level)
2531 if (
associated(this%network)) nnetwork=
size(this%network)
2533 if (
associated(this%dativar%r)) ndativarr=
size(this%dativar%r)
2534 if (
associated(this%dativar%i)) ndativari=
size(this%dativar%i)
2535 if (
associated(this%dativar%b)) ndativarb=
size(this%dativar%b)
2536 if (
associated(this%dativar%d)) ndativard=
size(this%dativar%d)
2537 if (
associated(this%dativar%c)) ndativarc=
size(this%dativar%c)
2539 if (
associated(this%datiattr%r)) ndatiattrr=
size(this%datiattr%r)
2540 if (
associated(this%datiattr%i)) ndatiattri=
size(this%datiattr%i)
2541 if (
associated(this%datiattr%b)) ndatiattrb=
size(this%datiattr%b)
2542 if (
associated(this%datiattr%d)) ndatiattrd=
size(this%datiattr%d)
2543 if (
associated(this%datiattr%c)) ndatiattrc=
size(this%datiattr%c)
2545 if (
associated(this%dativarattr%r)) ndativarattrr=
size(this%dativarattr%r)
2546 if (
associated(this%dativarattr%i)) ndativarattri=
size(this%dativarattr%i)
2547 if (
associated(this%dativarattr%b)) ndativarattrb=
size(this%dativarattr%b)
2548 if (
associated(this%dativarattr%d)) ndativarattrd=
size(this%dativarattr%d)
2549 if (
associated(this%dativarattr%c)) ndativarattrc=
size(this%dativarattr%c)
2551 if (
associated(this%anavar%r)) nanavarr=
size(this%anavar%r)
2552 if (
associated(this%anavar%i)) nanavari=
size(this%anavar%i)
2553 if (
associated(this%anavar%b)) nanavarb=
size(this%anavar%b)
2554 if (
associated(this%anavar%d)) nanavard=
size(this%anavar%d)
2555 if (
associated(this%anavar%c)) nanavarc=
size(this%anavar%c)
2557 if (
associated(this%anaattr%r)) nanaattrr=
size(this%anaattr%r)
2558 if (
associated(this%anaattr%i)) nanaattri=
size(this%anaattr%i)
2559 if (
associated(this%anaattr%b)) nanaattrb=
size(this%anaattr%b)
2560 if (
associated(this%anaattr%d)) nanaattrd=
size(this%anaattr%d)
2561 if (
associated(this%anaattr%c)) nanaattrc=
size(this%anaattr%c)
2563 if (
associated(this%anavarattr%r)) nanavarattrr=
size(this%anavarattr%r)
2564 if (
associated(this%anavarattr%i)) nanavarattri=
size(this%anavarattr%i)
2565 if (
associated(this%anavarattr%b)) nanavarattrb=
size(this%anavarattr%b)
2566 if (
associated(this%anavarattr%d)) nanavarattrd=
size(this%anavarattr%d)
2567 if (
associated(this%anavarattr%c)) nanavarattrc=
size(this%anavarattr%c)
2569 write(unit=lunit)ldescription
2570 write(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
2587 if (
associated(this%ana))
call write_unit(this%ana, lunit)
2588 if (
associated(this%time))
call write_unit(this%time, lunit)
2589 if (
associated(this%level))
write(unit=lunit)this%level
2590 if (
associated(this%timerange))
write(unit=lunit)this%timerange
2591 if (
associated(this%network))
write(unit=lunit)this%network
2596 if (
associated(this%anavar%r))
write(unit=lunit)this%anavar%r
2597 if (
associated(this%anavar%i))
write(unit=lunit)this%anavar%i
2598 if (
associated(this%anavar%b))
write(unit=lunit)this%anavar%b
2599 if (
associated(this%anavar%d))
write(unit=lunit)this%anavar%d
2600 if (
associated(this%anavar%c))
write(unit=lunit)this%anavar%c
2602 if (
associated(this%anaattr%r))
write(unit=lunit)this%anaattr%r
2603 if (
associated(this%anaattr%i))
write(unit=lunit)this%anaattr%i
2604 if (
associated(this%anaattr%b))
write(unit=lunit)this%anaattr%b
2605 if (
associated(this%anaattr%d))
write(unit=lunit)this%anaattr%d
2606 if (
associated(this%anaattr%c))
write(unit=lunit)this%anaattr%c
2608 if (
associated(this%anavarattr%r))
write(unit=lunit)this%anavarattr%r
2609 if (
associated(this%anavarattr%i))
write(unit=lunit)this%anavarattr%i
2610 if (
associated(this%anavarattr%b))
write(unit=lunit)this%anavarattr%b
2611 if (
associated(this%anavarattr%d))
write(unit=lunit)this%anavarattr%d
2612 if (
associated(this%anavarattr%c))
write(unit=lunit)this%anavarattr%c
2614 if (
associated(this%dativar%r))
write(unit=lunit)this%dativar%r
2615 if (
associated(this%dativar%i))
write(unit=lunit)this%dativar%i
2616 if (
associated(this%dativar%b))
write(unit=lunit)this%dativar%b
2617 if (
associated(this%dativar%d))
write(unit=lunit)this%dativar%d
2618 if (
associated(this%dativar%c))
write(unit=lunit)this%dativar%c
2620 if (
associated(this%datiattr%r))
write(unit=lunit)this%datiattr%r
2621 if (
associated(this%datiattr%i))
write(unit=lunit)this%datiattr%i
2622 if (
associated(this%datiattr%b))
write(unit=lunit)this%datiattr%b
2623 if (
associated(this%datiattr%d))
write(unit=lunit)this%datiattr%d
2624 if (
associated(this%datiattr%c))
write(unit=lunit)this%datiattr%c
2626 if (
associated(this%dativarattr%r))
write(unit=lunit)this%dativarattr%r
2627 if (
associated(this%dativarattr%i))
write(unit=lunit)this%dativarattr%i
2628 if (
associated(this%dativarattr%b))
write(unit=lunit)this%dativarattr%b
2629 if (
associated(this%dativarattr%d))
write(unit=lunit)this%dativarattr%d
2630 if (
associated(this%dativarattr%c))
write(unit=lunit)this%dativarattr%c
2634 if (
associated(this%volanar))
write(unit=lunit)this%volanar
2635 if (
associated(this%volanaattrr))
write(unit=lunit)this%volanaattrr
2636 if (
associated(this%voldatir))
write(unit=lunit)this%voldatir
2637 if (
associated(this%voldatiattrr))
write(unit=lunit)this%voldatiattrr
2639 if (
associated(this%volanai))
write(unit=lunit)this%volanai
2640 if (
associated(this%volanaattri))
write(unit=lunit)this%volanaattri
2641 if (
associated(this%voldatii))
write(unit=lunit)this%voldatii
2642 if (
associated(this%voldatiattri))
write(unit=lunit)this%voldatiattri
2644 if (
associated(this%volanab))
write(unit=lunit)this%volanab
2645 if (
associated(this%volanaattrb))
write(unit=lunit)this%volanaattrb
2646 if (
associated(this%voldatib))
write(unit=lunit)this%voldatib
2647 if (
associated(this%voldatiattrb))
write(unit=lunit)this%voldatiattrb
2649 if (
associated(this%volanad))
write(unit=lunit)this%volanad
2650 if (
associated(this%volanaattrd))
write(unit=lunit)this%volanaattrd
2651 if (
associated(this%voldatid))
write(unit=lunit)this%voldatid
2652 if (
associated(this%voldatiattrd))
write(unit=lunit)this%voldatiattrd
2654 if (
associated(this%volanac))
write(unit=lunit)this%volanac
2655 if (
associated(this%volanaattrc))
write(unit=lunit)this%volanaattrc
2656 if (
associated(this%voldatic))
write(unit=lunit)this%voldatic
2657 if (
associated(this%voldatiattrc))
write(unit=lunit)this%voldatiattrc
2659 if (.not.
present(unit))
close(unit=lunit)
2661 end subroutine vol7d_write_on_file
2672 subroutine vol7d_read_from_file (this,unit,filename,description,tarray,filename_auto)
2674 TYPE(vol7d),
INTENT(OUT) :: this
2675 integer,
intent(inout),
optional :: unit
2676 character(len=*),
INTENT(in),
optional :: filename
2677 character(len=*),
intent(out),
optional :: filename_auto
2678 character(len=*),
INTENT(out),
optional :: description
2679 integer,
intent(out),
optional :: tarray(8)
2682 integer :: 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
2690 character(len=254) :: ldescription,lfilename,arg
2691 integer :: ltarray(8),lunit,ios
2692 logical :: opened,exist
2697 if (.not.
present(unit))
then 2708 lfilename=trim(arg)//
".v7d" 2709 if (
index(arg,
'/',back=.true.) > 0) lfilename=lfilename(
index(arg,
'/',back=.true.)+1 : )
2711 if (
present(filename))
then 2712 if (filename /=
"")
then 2717 if (
present(filename_auto))filename_auto=lfilename
2720 inquire(unit=lunit,opened=opened)
2721 IF (.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))
2735 read(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)
2745 read(unit=lunit)ltarray
2747 CALL l4f_log(l4f_info,
'Reading vol7d from file')
2748 CALL l4f_log(l4f_info,
'description: '//trim(ldescription))
2749 CALL l4f_log(l4f_info,
'written on '//trim(
to_char(ltarray(1)))//
' '// &
2752 if (
present(description))description=ldescription
2753 if (
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
2765 call 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)
2781 if (
associated(this%ana))
call read_unit(this%ana, lunit)
2782 if (
associated(this%time))
call read_unit(this%time, lunit)
2783 if (
associated(this%level))
read(unit=lunit)this%level
2784 if (
associated(this%timerange))
read(unit=lunit)this%timerange
2785 if (
associated(this%network))
read(unit=lunit)this%network
2787 if (
associated(this%anavar%r))
read(unit=lunit)this%anavar%r
2788 if (
associated(this%anavar%i))
read(unit=lunit)this%anavar%i
2789 if (
associated(this%anavar%b))
read(unit=lunit)this%anavar%b
2790 if (
associated(this%anavar%d))
read(unit=lunit)this%anavar%d
2791 if (
associated(this%anavar%c))
read(unit=lunit)this%anavar%c
2793 if (
associated(this%anaattr%r))
read(unit=lunit)this%anaattr%r
2794 if (
associated(this%anaattr%i))
read(unit=lunit)this%anaattr%i
2795 if (
associated(this%anaattr%b))
read(unit=lunit)this%anaattr%b
2796 if (
associated(this%anaattr%d))
read(unit=lunit)this%anaattr%d
2797 if (
associated(this%anaattr%c))
read(unit=lunit)this%anaattr%c
2799 if (
associated(this%anavarattr%r))
read(unit=lunit)this%anavarattr%r
2800 if (
associated(this%anavarattr%i))
read(unit=lunit)this%anavarattr%i
2801 if (
associated(this%anavarattr%b))
read(unit=lunit)this%anavarattr%b
2802 if (
associated(this%anavarattr%d))
read(unit=lunit)this%anavarattr%d
2803 if (
associated(this%anavarattr%c))
read(unit=lunit)this%anavarattr%c
2805 if (
associated(this%dativar%r))
read(unit=lunit)this%dativar%r
2806 if (
associated(this%dativar%i))
read(unit=lunit)this%dativar%i
2807 if (
associated(this%dativar%b))
read(unit=lunit)this%dativar%b
2808 if (
associated(this%dativar%d))
read(unit=lunit)this%dativar%d
2809 if (
associated(this%dativar%c))
read(unit=lunit)this%dativar%c
2811 if (
associated(this%datiattr%r))
read(unit=lunit)this%datiattr%r
2812 if (
associated(this%datiattr%i))
read(unit=lunit)this%datiattr%i
2813 if (
associated(this%datiattr%b))
read(unit=lunit)this%datiattr%b
2814 if (
associated(this%datiattr%d))
read(unit=lunit)this%datiattr%d
2815 if (
associated(this%datiattr%c))
read(unit=lunit)this%datiattr%c
2817 if (
associated(this%dativarattr%r))
read(unit=lunit)this%dativarattr%r
2818 if (
associated(this%dativarattr%i))
read(unit=lunit)this%dativarattr%i
2819 if (
associated(this%dativarattr%b))
read(unit=lunit)this%dativarattr%b
2820 if (
associated(this%dativarattr%d))
read(unit=lunit)this%dativarattr%d
2821 if (
associated(this%dativarattr%c))
read(unit=lunit)this%dativarattr%c
2823 call vol7d_alloc_vol (this)
2827 if (
associated(this%volanar))
read(unit=lunit)this%volanar
2828 if (
associated(this%volanaattrr))
read(unit=lunit)this%volanaattrr
2829 if (
associated(this%voldatir))
read(unit=lunit)this%voldatir
2830 if (
associated(this%voldatiattrr))
read(unit=lunit)this%voldatiattrr
2832 if (
associated(this%volanai))
read(unit=lunit)this%volanai
2833 if (
associated(this%volanaattri))
read(unit=lunit)this%volanaattri
2834 if (
associated(this%voldatii))
read(unit=lunit)this%voldatii
2835 if (
associated(this%voldatiattri))
read(unit=lunit)this%voldatiattri
2837 if (
associated(this%volanab))
read(unit=lunit)this%volanab
2838 if (
associated(this%volanaattrb))
read(unit=lunit)this%volanaattrb
2839 if (
associated(this%voldatib))
read(unit=lunit)this%voldatib
2840 if (
associated(this%voldatiattrb))
read(unit=lunit)this%voldatiattrb
2842 if (
associated(this%volanad))
read(unit=lunit)this%volanad
2843 if (
associated(this%volanaattrd))
read(unit=lunit)this%volanaattrd
2844 if (
associated(this%voldatid))
read(unit=lunit)this%voldatid
2845 if (
associated(this%voldatiattrd))
read(unit=lunit)this%voldatiattrd
2847 if (
associated(this%volanac))
read(unit=lunit)this%volanac
2848 if (
associated(this%volanaattrc))
read(unit=lunit)this%volanaattrc
2849 if (
associated(this%voldatic))
read(unit=lunit)this%voldatic
2850 if (
associated(this%voldatiattrc))
read(unit=lunit)this%voldatiattrc
2852 if (.not.
present(unit))
close(unit=lunit)
2854 end subroutine vol7d_read_from_file
2858 elemental doubleprecision function doubledatd(voldat,var)
2859 doubleprecision,
intent(in) :: voldat
2860 type(vol7d_var),
intent(in) :: var
2864 end function doubledatd
2867 elemental doubleprecision function doubledatr(voldat,var)
2868 real,
intent(in) :: voldat
2869 type(vol7d_var),
intent(in) :: var
2871 if (
c_e(voldat))
then 2872 doubledatr=dble(voldat)
2877 end function doubledatr
2880 elemental doubleprecision function doubledati(voldat,var)
2881 integer,
intent(in) :: voldat
2882 type(vol7d_var),
intent(in) :: var
2884 if (
c_e(voldat))
then 2885 if (
c_e(var%scalefactor))
then 2886 doubledati=dble(voldat)/10.d0**var%scalefactor
2888 doubledati=dble(voldat)
2894 end function doubledati
2897 elemental doubleprecision function doubledatb(voldat,var)
2898 integer(kind=int_b),
intent(in) :: voldat
2899 type(vol7d_var),
intent(in) :: var
2901 if (
c_e(voldat))
then 2902 if (
c_e(var%scalefactor))
then 2903 doubledatb=dble(voldat)/10.d0**var%scalefactor
2905 doubledatb=dble(voldat)
2911 end function doubledatb
2914 elemental doubleprecision function doubledatc(voldat,var)
2915 CHARACTER(len=vol7d_cdatalen),
intent(in) :: voldat
2916 type(vol7d_var),
intent(in) :: var
2918 doubledatc = c2d(voldat)
2919 if (
c_e(doubledatc) .and.
c_e(var%scalefactor))
then 2920 doubledatc=doubledatc/10.d0**var%scalefactor
2923 end function doubledatc
2927 elemental integer function integerdatd(voldat,var)
2928 doubleprecision,
intent(in) :: voldat
2929 type(vol7d_var),
intent(in) :: var
2931 if (
c_e(voldat))
then 2932 if (
c_e(var%scalefactor))
then 2933 integerdatd=nint(voldat*10d0**var%scalefactor)
2935 integerdatd=nint(voldat)
2941 end function integerdatd
2944 elemental integer function integerdatr(voldat,var)
2945 real,
intent(in) :: voldat
2946 type(vol7d_var),
intent(in) :: var
2948 if (
c_e(voldat))
then 2949 if (
c_e(var%scalefactor))
then 2950 integerdatr=nint(voldat*10d0**var%scalefactor)
2952 integerdatr=nint(voldat)
2958 end function integerdatr
2961 elemental integer function integerdati(voldat,var)
2962 integer,
intent(in) :: voldat
2963 type(vol7d_var),
intent(in) :: var
2967 end function integerdati
2970 elemental integer function integerdatb(voldat,var)
2971 integer(kind=int_b),
intent(in) :: voldat
2972 type(vol7d_var),
intent(in) :: var
2974 if (
c_e(voldat))
then 2980 end function integerdatb
2983 elemental integer function integerdatc(voldat,var)
2984 CHARACTER(len=vol7d_cdatalen),
intent(in) :: voldat
2985 type(vol7d_var),
intent(in) :: var
2987 integerdatc=c2i(voldat)
2989 end function integerdatc
2993 elemental real function realdatd(voldat,var)
2994 doubleprecision,
intent(in) :: voldat
2995 type(vol7d_var),
intent(in) :: var
2997 if (
c_e(voldat))
then 2998 realdatd=
real(voldat)
3003 end function realdatd
3006 elemental real function realdatr(voldat,var)
3007 real,
intent(in) :: voldat
3008 type(vol7d_var),
intent(in) :: var
3012 end function realdatr
3015 elemental real function realdati(voldat,var)
3016 integer,
intent(in) :: voldat
3017 type(vol7d_var),
intent(in) :: var
3019 if (
c_e(voldat))
then 3020 if (
c_e(var%scalefactor))
then 3021 realdati=float(voldat)/10.**var%scalefactor
3023 realdati=float(voldat)
3029 end function realdati
3032 elemental real function realdatb(voldat,var)
3033 integer(kind=int_b),
intent(in) :: voldat
3034 type(vol7d_var),
intent(in) :: var
3036 if (
c_e(voldat))
then 3037 if (
c_e(var%scalefactor))
then 3038 realdatb=float(voldat)/10**var%scalefactor
3040 realdatb=float(voldat)
3046 end function realdatb
3049 elemental real function realdatc(voldat,var)
3050 CHARACTER(len=vol7d_cdatalen),
intent(in) :: voldat
3051 type(vol7d_var),
intent(in) :: var
3053 realdatc=c2r(voldat)
3054 if (
c_e(realdatc) .and.
c_e(var%scalefactor))
then 3055 realdatc=realdatc/10.**var%scalefactor
3058 end function realdatc
3066 FUNCTION realanavol(this, var)
RESULT(vol)
3067 TYPE(vol7d),
INTENT(in) :: this
3068 TYPE(vol7d_var),
INTENT(in) :: var
3069 REAL :: vol(SIZE(this%ana),size(this%network))
3071 CHARACTER(len=1) :: dtype
3075 indvar =
index(this%anavar, var, type=dtype)
3077 IF (indvar > 0)
THEN 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)
3096 END FUNCTION realanavol
3104 FUNCTION integeranavol(this, var)
RESULT(vol)
3105 TYPE(vol7d),
INTENT(in) :: this
3106 TYPE(vol7d_var),
INTENT(in) :: var
3107 INTEGER :: vol(SIZE(this%ana),size(this%network))
3109 CHARACTER(len=1) :: dtype
3113 indvar =
index(this%anavar, var, type=dtype)
3115 IF (indvar > 0)
THEN 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)
3134 END FUNCTION integeranavol
3142 subroutine move_datac (v7d,&
3143 indana,indtime,indlevel,indtimerange,indnetwork,&
3144 indananew,indtimenew,indlevelnew,indtimerangenew,indnetworknew)
3146 TYPE(vol7d),
intent(inout) :: v7d
3148 integer,
intent(in) :: indana,indtime,indlevel,indtimerange,indnetwork
3149 integer,
intent(in) :: indananew,indtimenew,indlevelnew,indtimerangenew,indnetworknew
3150 integer :: inddativar,inddativarattr
3153 do 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,:)
3221 end subroutine move_datac
3228 subroutine move_datar (v7d,&
3229 indana,indtime,indlevel,indtimerange,indnetwork,&
3230 indananew,indtimenew,indlevelnew,indtimerangenew,indnetworknew)
3232 TYPE(vol7d),
intent(inout) :: v7d
3234 integer,
intent(in) :: indana,indtime,indlevel,indtimerange,indnetwork
3235 integer,
intent(in) :: indananew,indtimenew,indlevelnew,indtimerangenew,indnetworknew
3236 integer :: inddativar,inddativarattr
3239 do 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,:)
3307 end subroutine move_datar
3323 subroutine v7d_rounding(v7din,v7dout,level,timerange,nostatproc)
3324 type(vol7d),
intent(inout) :: v7din
3325 type(vol7d),
intent(out) :: v7dout
3326 type(vol7d_level),
intent(in),
optional :: level(:)
3327 type(vol7d_timerange),
intent(in),
optional :: timerange(:)
3330 logical,
intent(in),
optional :: nostatproc
3332 integer :: nana,nlevel,ntime,ntimerange,nnetwork,nbin
3333 integer :: iana,ilevel,itimerange,indl,indt,itime,inetwork
3334 type(vol7d_level) :: roundlevel(size(v7din%level))
3335 type(vol7d_timerange) :: roundtimerange(size(v7din%timerange))
3336 type(vol7d) :: v7d_tmp
3341 if (
associated(v7din%dativar%r)) nbin = nbin +
size(v7din%dativar%r)
3342 if (
associated(v7din%dativar%i)) nbin = nbin +
size(v7din%dativar%i)
3343 if (
associated(v7din%dativar%d)) nbin = nbin +
size(v7din%dativar%d)
3344 if (
associated(v7din%dativar%b)) nbin = nbin +
size(v7din%dativar%b)
3348 roundlevel=v7din%level
3350 if (
present(level))
then 3351 do ilevel = 1,
size(v7din%level)
3352 if ((any(v7din%level(ilevel) .almosteq. level)))
then 3353 roundlevel(ilevel)=level(1)
3358 roundtimerange=v7din%timerange
3360 if (
present(timerange))
then 3361 do itimerange = 1,
size(v7din%timerange)
3362 if ((any(v7din%timerange(itimerange) .almosteq. timerange)))
then 3363 roundtimerange(itimerange)=timerange(1)
3370 if (optio_log(nostatproc))
then 3371 roundtimerange(:)%timerange=254
3372 roundtimerange(:)%p2=0
3376 nana=
size(v7din%ana)
3377 nlevel=count_distinct(roundlevel,back=.true.)
3378 ntime=
size(v7din%time)
3379 ntimerange=count_distinct(roundtimerange,back=.true.)
3380 nnetwork=
size(v7din%network)
3385 call copy(v7din,v7d_tmp)
3387 call vol7d_convr(v7din,v7d_tmp)
3390 v7d_tmp%level=roundlevel
3391 v7d_tmp%timerange=roundtimerange
3393 do 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)
3424 do ilevel=nlevel+1,
size(v7d_tmp%level)
3425 call init (v7d_tmp%level(ilevel))
3428 do itimerange=ntimerange+1,
size(v7d_tmp%timerange)
3429 call init (v7d_tmp%timerange(itimerange))
3433 CALL copy(v7d_tmp,v7dout,miss=.true.,lsort_timerange=.true.,lsort_level=.true.)
3438 end subroutine v7d_rounding
Classe per gestire un vettore di oggetti di tipo vol7d_var_class::vol7d_var.
Legge un oggetto datetime/timedelta o un vettore di oggetti datetime/timedelta da un file FORMATTED o...
Set of functions that return a trimmed CHARACTER representation of the input variable.
Distruttore per la classe vol7d.
Module for quickly interpreting the OPTIONAL parameters passed to a subprogram.
Classe per la gestione dell'anagrafica di stazioni meteo e affini.
Represent data in a pretty string.
doubleprecision data conversion
Classi per la gestione delle coordinate temporali.
Costruttore per la classe vol7d.
Reduce some dimensions (level and timerage) for semplification (rounding).
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.
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 di un volume completo di dati osservati.
Definisce un oggetto contenente i volumi anagrafica e dati e tutti i descrittori delle loro dimension...
This module defines usefull general purpose function and subroutine.
Classe per la gestione degli intervalli temporali di osservazioni meteo e affini. ...
classe per la gestione del logging
Definition of constants related to I/O units.
Utilities for CHARACTER variables.
Check for problems return 0 if all check passed print diagnostics with log4f.
Definition of constants to be used for declaring variables of a desired type.