libsim Versione 7.2.4
|
◆ volgrid6d_read_from_file()
Lettura da file di un volume Volgrid6d. Lettura da file unformatted di un intero volume Volgrid6d. Questa subroutine comprende volgrid6d_alloc e volgrid6d_alloc_vol. Il file puo' essere aperto opzionalmente dall'utente. Si possono passare opzionalmente unità e nome del file altrimenti assegnati internamente a dei default; se assegnati internamente tali parametri saranno in output.
Definizione alla linea 892 del file volgrid6d_class.F90. 893 ENDIF
894 IF (itimerange0 == 0) THEN
895 CALL l4f_category_log(this%category,l4f_error, &
896 "volgrid6d: timerange not valid for volume, gridinfo rejected")
897 CALL raise_error()
898 RETURN
899 ENDIF
900 itimerange1 = itimerange0
901ENDIF
902
903ivar = index(this%var, gridinfo%var)
904IF (ivar == 0 .AND. optio_log(force)) THEN
905 ivar = index(this%var, volgrid6d_var_miss)
906 IF (ivar /= 0) this%var(ivar) = gridinfo%var
907ENDIF
908IF (ivar == 0) THEN
909 CALL l4f_category_log(this%category,l4f_error, &
910 "volgrid6d: var not valid for volume, gridinfo rejected")
911 CALL raise_error()
912 RETURN
913ENDIF
914
915DO itimerange = itimerange0, itimerange1
916 DO itime = itime0, itime1
917 IF (ASSOCIATED(this%gaid)) THEN
918 dup = .false.
919 IF (c_e(this%gaid(ilevel,itime,itimerange,ivar))) THEN
920 dup = .true.
921 CALL l4f_category_log(this%category,l4f_warn,"gaid exist: grib duplicated")
922! avoid memory leaks
923 IF (optio_log(clone)) CALL delete(this%gaid(ilevel,itime,itimerange,ivar))
924 ENDIF
925
926 IF (optio_log(clone)) THEN
927 CALL copy(gridinfo%gaid, this%gaid(ilevel,itime,itimerange,ivar))
928#ifdef DEBUG
929 CALL l4f_category_log(this%category,l4f_debug,"cloning to a new gaid")
930#endif
931 ELSE
932 this%gaid(ilevel,itime,itimerange,ivar) = gridinfo%gaid
933 ENDIF
934
935 IF (ASSOCIATED(this%voldati))THEN
936 IF (.NOT.dup .OR. ldup_mode == 0) THEN
937 this%voldati(:,:,ilevel,itime,itimerange,ivar) = decode_gridinfo(gridinfo)
938 ELSE IF (ldup_mode == 1) THEN
939 tmpgrid = decode_gridinfo(gridinfo) ! f2003 automatic allocation
940 WHERE(c_e(tmpgrid))
941 this%voldati(:,:,ilevel,itime,itimerange,ivar) = tmpgrid(:,:)
942 END WHERE
943 ELSE IF (ldup_mode == 2) THEN
944 WHERE(.NOT.c_e(this%voldati(:,:,ilevel,itime,itimerange,ivar)))
945 this%voldati(:,:,ilevel,itime,itimerange,ivar) = decode_gridinfo(gridinfo)
946 END WHERE
947 ENDIF
948 ENDIF
949
950 ELSE
951 CALL l4f_category_log(this%category,l4f_error, &
952 "gaid not allocated, you probably need to call volgrid6d_alloc_vol first")
953 CALL raise_error()
954 RETURN
955 ENDIF
956 ENDDO
957ENDDO
958
959
960END SUBROUTINE import_from_gridinfo
961
962
967SUBROUTINE export_to_gridinfo(this, gridinfo, itime, itimerange, ilevel, ivar, &
968 gaid_template, clone)
969TYPE(volgrid6d),INTENT(in) :: this
970TYPE(gridinfo_def),INTENT(inout) :: gridinfo
971INTEGER :: itime
972INTEGER :: itimerange
973INTEGER :: ilevel
974INTEGER :: ivar
|