libsim  Versione 7.2.6

◆ volgrid6d_write_on_file()

subroutine volgrid6d_write_on_file ( type(volgrid6d), intent(in)  this,
integer, intent(inout), optional  unit,
character(len=*), intent(in), optional  description,
character(len=*), intent(in), optional  filename,
character(len=*), intent(out), optional  filename_auto 
)

Scrittura su file di un volume Volgrid6d.

Scrittura su file unformatted di un intero volume Volgrid6d. Il volume viene serializzato e scritto su file. 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. Se non viene fornito il nome file viene utilizzato un file di default con nome pari al nome del programma in esecuzione con postfisso ".vg6d". Come parametro opzionale c'è la description che insieme alla data corrente viene inserita nell'header del file.

Parametri
[in]thisvolume volgrid6d da scrivere
[in,out]unitunità su cui scrivere; se passata =0 ritorna il valore rielaborato (default =rielaborato internamente con getlun )
[in]filenamenome del file su cui scrivere
[out]filename_autonome del file generato se "filename" è omesso
[in]descriptiondescrizione del volume

Definizione alla linea 816 del file volgrid6d_class.F90.

817 !! descriptor of the grid in the \a volgrid object is assigned to the
818 !! descriptor contained in \a gridinfo if it is missing in \a volgrid,
819 !! otherwise it is checked and the object is rejected if grids do not
820 !! match.
821 SUBROUTINE import_from_gridinfo(this, gridinfo, force, dup_mode, clone, &
822  isanavar)
823 TYPE(volgrid6d),INTENT(inout) :: this
824 TYPE(gridinfo_def),INTENT(in) :: gridinfo
825 LOGICAL,INTENT(in),OPTIONAL :: force
826 INTEGER,INTENT(in),OPTIONAL :: dup_mode
827 LOGICAL , INTENT(in),OPTIONAL :: clone
828 LOGICAL,INTENT(IN),OPTIONAL :: isanavar
829 
830 CHARACTER(len=255) :: type
831 INTEGER :: itime0, itimerange0, itime1, itimerange1, itime, itimerange, &
832  ilevel, ivar, ldup_mode
833 LOGICAL :: dup
834 TYPE(datetime) :: correctedtime
835 TYPE(vol7d_timerange) :: correctedtimerange
836 REAL,ALLOCATABLE :: tmpgrid(:,:)
837 
838 IF (PRESENT(dup_mode)) THEN
839  ldup_mode = dup_mode
840 ELSE
841  ldup_mode = 0
842 ENDIF
843 
844 call get_val(this%griddim,proj_type=type)
845 
846 #ifdef DEBUG
847 call l4f_category_log(this%category,l4f_debug,"import_from_gridinfo: "//trim(type))
848 #endif
849 
850 if (.not. c_e(type))then
851  call copy(gridinfo%griddim, this%griddim)
852 ! ho gia` fatto init, altrimenti non potrei fare la get_val(this%griddim)
853 ! per cui meglio non ripetere
854 ! call init(this,gridinfo%griddim,categoryappend)
855  CALL volgrid6d_alloc_vol(this, ini=.true.) ! decode?
856 
857 else if (.not. (this%griddim == gridinfo%griddim ))then
858 
859  CALL l4f_category_log(this%category,l4f_error, &
860  "volgrid and gridinfo grid type or size are different, gridinfo rejected")
861  CALL raise_error()
862  RETURN
863 
864 end if
865 
866 ! Cerco gli indici del campo da inserire, se non trovo metto nel primo missing
867 ilevel = index(this%level, gridinfo%level)
868 IF (ilevel == 0 .AND. optio_log(force)) THEN
869  ilevel = index(this%level, vol7d_level_miss)
870  IF (ilevel /= 0) this%level(ilevel) = gridinfo%level
871 ENDIF
872 
873 IF (ilevel == 0) THEN
874  CALL l4f_category_log(this%category,l4f_error, &
875  "volgrid6d: level not valid for volume, gridinfo rejected")
876  CALL raise_error()
877  RETURN
878 ENDIF
879 
880 IF (optio_log(isanavar)) THEN ! assign to all times and timeranges
881  itime0 = 1
882  itime1 = SIZE(this%time)
883  itimerange0 = 1
884  itimerange1 = SIZE(this%timerange)
885 ELSE ! usual case
886  correctedtime = gridinfo%time
887  IF (this%time_definition == 1 .OR. this%time_definition == 2) correctedtime = correctedtime + &
888  timedelta_new(sec=gridinfo%timerange%p1)
889  itime0 = index(this%time, correctedtime)
890  IF (itime0 == 0 .AND. optio_log(force)) THEN
891  itime0 = index(this%time, datetime_miss)
892  IF (itime0 /= 0) this%time(itime0) = correctedtime
893  ENDIF
894  IF (itime0 == 0) THEN
895  CALL l4f_category_log(this%category,l4f_error, &
896  "volgrid6d: time not valid for volume, gridinfo rejected")
897  CALL raise_error()
898  RETURN
899  ENDIF
900  itime1 = itime0
901 
902  correctedtimerange = gridinfo%timerange
903  IF (this%time_definition == 2) correctedtimerange%p1 = 0
904  itimerange0 = index(this%timerange, correctedtimerange)
Index method.

Generated with Doxygen.