libsim Versione 7.2.6
|
◆ 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 904 del file volgrid6d_class.F90. 905 IF (itimerange0 == 0 .AND. optio_log(force)) THEN
906 itimerange0 = index(this%timerange, vol7d_timerange_miss)
907 IF (itimerange0 /= 0) this%timerange(itimerange0) = gridinfo%timerange
908 ENDIF
909 IF (itimerange0 == 0) THEN
910 CALL l4f_category_log(this%category,l4f_error, &
911 "volgrid6d: timerange not valid for volume, gridinfo rejected")
912 CALL raise_error()
913 RETURN
914 ENDIF
915 itimerange1 = itimerange0
916ENDIF
917
918ivar = index(this%var, gridinfo%var)
919IF (ivar == 0 .AND. optio_log(force)) THEN
920 ivar = index(this%var, volgrid6d_var_miss)
921 IF (ivar /= 0) this%var(ivar) = gridinfo%var
922ENDIF
923IF (ivar == 0) THEN
924 CALL l4f_category_log(this%category,l4f_error, &
925 "volgrid6d: var not valid for volume, gridinfo rejected")
926 CALL raise_error()
927 RETURN
928ENDIF
929
930DO itimerange = itimerange0, itimerange1
931 DO itime = itime0, itime1
932 IF (ASSOCIATED(this%gaid)) THEN
933 dup = .false.
934 IF (c_e(this%gaid(ilevel,itime,itimerange,ivar))) THEN
935 dup = .true.
936 CALL l4f_category_log(this%category,l4f_warn,"gaid exist: grib duplicated")
937! avoid memory leaks
938 IF (optio_log(clone)) CALL delete(this%gaid(ilevel,itime,itimerange,ivar))
939 ENDIF
940
941 IF (optio_log(clone)) THEN
942 CALL copy(gridinfo%gaid, this%gaid(ilevel,itime,itimerange,ivar))
943#ifdef DEBUG
944 CALL l4f_category_log(this%category,l4f_debug,"cloning to a new gaid")
945#endif
946 ELSE
947 this%gaid(ilevel,itime,itimerange,ivar) = gridinfo%gaid
948 ENDIF
949
950 IF (ASSOCIATED(this%voldati))THEN
951 IF (.NOT.dup .OR. ldup_mode == 0) THEN
952 this%voldati(:,:,ilevel,itime,itimerange,ivar) = decode_gridinfo(gridinfo)
953 ELSE IF (ldup_mode == 1) THEN
954 tmpgrid = decode_gridinfo(gridinfo) ! f2003 automatic allocation
955 WHERE(c_e(tmpgrid))
956 this%voldati(:,:,ilevel,itime,itimerange,ivar) = tmpgrid(:,:)
957 END WHERE
958 ELSE IF (ldup_mode == 2) THEN
959 WHERE(.NOT.c_e(this%voldati(:,:,ilevel,itime,itimerange,ivar)))
960 this%voldati(:,:,ilevel,itime,itimerange,ivar) = decode_gridinfo(gridinfo)
961 END WHERE
962 ENDIF
963 ENDIF
964
965 ELSE
966 CALL l4f_category_log(this%category,l4f_error, &
967 "gaid not allocated, you probably need to call volgrid6d_alloc_vol first")
968 CALL raise_error()
969 RETURN
970 ENDIF
971 ENDDO
972ENDDO
973
974
975END SUBROUTINE import_from_gridinfo
976
977
978!> Export a single grid of a \a volgrid6d object to a \a gridinfo_def object.
979!! A single 2d slice of a \a volgrid6d at a specified location is
980!! written into a \a gridinfo_def object, including the \a grid_id
981!! which can be used for the successive export to file.
982SUBROUTINE export_to_gridinfo(this, gridinfo, itime, itimerange, ilevel, ivar, &
983 gaid_template, clone)
984TYPE(volgrid6d),INTENT(in) :: this !< volume to be exported
985TYPE(gridinfo_def),INTENT(inout) :: gridinfo !< output gridinfo_def object
986INTEGER :: itime !< index within \a this of the element to be exported for the time dimension
|