libsim Versione 8.0.0

◆ volgrid6d_read_from_file()

subroutine volgrid6d_read_from_file ( type(volgrid6d), intent(out) this,
integer, intent(inout), optional unit,
character(len=*), intent(in), optional filename,
character(len=*), intent(out), optional description,
integer, dimension(8), intent(out), optional tarray,
character(len=*), intent(out), optional filename_auto )
private

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.

Parametri
[out]thisVolume volgrid6d da leggere
[in,out]unitunità su cui è stato aperto un file; se =0 rielaborato internamente (default = elaborato internamente con getunit)
[in]filenamenome del file eventualmente da aprire (default = nome dell'eseguibile.v7d)
[out]filename_autonome del file generato se "filename" è omesso
[out]descriptiondescrizione del volume letto
[out]tarrayvettore come definito da "date_and_time" della data di scrittura del volume

Definizione alla linea 909 del file volgrid6d_class.F90.

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

Generated with Doxygen.