libsim  Versione8.0.0

◆ 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 822 del file volgrid6d_class.F90.

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

Generated with Doxygen.