libsim Versione 7.2.4
|
◆ count_distinct_var6d()
conta gli elementi distinti in vect Definizione alla linea 587 del file volgrid6d_var_class.F90. 588INTEGER :: un, i, n, stallo
589
590! forward, grib to bufr
591un = open_package_file('vargrib2bufr.csv', filetype_data)
592n=0
593DO WHILE(.true.)
594 READ(un,*,END=100)
595 n = n + 1
596ENDDO
597
598100 CONTINUE
599
600rewind(un)
601ALLOCATE(conv_fwd(n),stat=stallo)
602IF (stallo /= 0) THEN
603 CALL l4f_log(l4f_fatal,"allocating memory")
604 CALL raise_fatal_error()
605ENDIF
606
607conv_fwd(:) = vg6d_v7d_var_conv_miss
608CALL import_var_conv(un, conv_fwd)
609CLOSE(un)
610
611! backward, bufr to grib
612un = open_package_file('vargrib2bufr.csv', filetype_data)
613! use the same file for now
614!un = open_package_file('varbufr2grib.csv', filetype_data)
615n=0
616DO WHILE(.true.)
617 READ(un,*,END=300)
618 n = n + 1
619ENDDO
620
621300 CONTINUE
622
623rewind(un)
624ALLOCATE(conv_bwd(n),stat=stallo)
625IF (stallo /= 0) THEN
626 CALL l4f_log(l4f_fatal,"allocating memory")
627 CALL raise_fatal_error()
628end if
629
630conv_bwd(:) = vg6d_v7d_var_conv_miss
631CALL import_var_conv(un, conv_bwd)
632DO i = 1, n
633 conv_bwd(i)%c_func%a = 1./conv_bwd(i)%c_func%a
634 conv_bwd(i)%c_func%b = - conv_bwd(i)%c_func%b
635ENDDO
636CLOSE(un)
637
638CONTAINS
639
640SUBROUTINE import_var_conv(un, conv_type)
641INTEGER, INTENT(in) :: un
642TYPE(vg6d_v7d_var_conv), INTENT(out) :: conv_type(:)
643
644INTEGER :: i
645TYPE(csv_record) :: csv
646CHARACTER(len=1024) :: line
647CHARACTER(len=10) :: btable
648INTEGER :: centre, category, number, discipline
649
650DO i = 1, SIZE(conv_type)
651 READ(un,'(A)',END=200)line
652 CALL init(csv, line)
653 CALL csv_record_getfield(csv, btable)
654 CALL csv_record_getfield(csv) ! skip fields for description and unit,
655 CALL csv_record_getfield(csv) ! they correspond to grib information, not bufr Btable
656 CALL init(conv_type(i)%v7d_var, btable=btable)
|