libsim  Versione6.3.0

◆ volgrid6d_write_on_file()

subroutine volgrid6d_class::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 
)
private

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

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

Generated with Doxygen.