libsim Versione 8.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 )
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 811 del file volgrid6d_class.F90.

812!! volgrid6d_alloc(). If the \a force argument is missing or \a
813!! .FALSE. , the volgrid6d object dimension descriptors (time,
814!! timerange, vertical level, physical variable) must already have
815!! space for the corresponding values coming from gridinfo, otherwise
816!! the object will be rejected; this means that all the volgrid6d
817!! dimension descriptors should be correctly assigned. If \a force is
818!! \a .TRUE. , the gridinfo dimension descriptors that do not fit into
819!! available descriptors in the \a volgrid6d structure, will be
820!! accomodated in a empty (i.e. equal to missing value) descriptor, if
821!! available, otherwise the gridinfo will be rejected. The
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.
826SUBROUTINE import_from_gridinfo(this, gridinfo, force, dup_mode, clone, &
827 isanavar)
828TYPE(volgrid6d),INTENT(inout) :: this !< object in which to import
829TYPE(gridinfo_def),INTENT(in) :: gridinfo !< gridinfo object to be imported
830LOGICAL,INTENT(in),OPTIONAL :: force !< if provided and \c .TRUE., the gridinfo is forced into an empty element of \a this, if required and possible
831INTEGER,INTENT(in),OPTIONAL :: dup_mode !< determines the behavior in case of duplicate metadata: if \a dup_mode is not provided or 0, a duplicate field overwrites, if \a dup_mode is 1, duplicate fields are merged with priority to the last
832LOGICAL , INTENT(in),OPTIONAL :: clone !< if provided and \c .TRUE. , clone the gaid's from \a gridinfo to \a this
833LOGICAL,INTENT(IN),OPTIONAL :: isanavar !< if provides and \a .TRUE., the gridinfo object is treated as time-independent and replicated for every time and timerange
834
835CHARACTER(len=255) :: type
836INTEGER :: itime0, itimerange0, itime1, itimerange1, itime, itimerange, &
837 ilevel, ivar, ldup_mode
838LOGICAL :: dup
839TYPE(datetime) :: correctedtime
840TYPE(vol7d_timerange) :: correctedtimerange
841REAL,ALLOCATABLE :: tmpgrid(:,:)
842
843IF (PRESENT(dup_mode)) THEN
844 ldup_mode = dup_mode
845ELSE
846 ldup_mode = 0
847ENDIF
848
849call get_val(this%griddim,proj_type=type)
850
851#ifdef DEBUG
852call l4f_category_log(this%category,l4f_debug,"import_from_gridinfo: "//trim(type))
853#endif
854
855if (.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
862else 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
869end if
870
871! Cerco gli indici del campo da inserire, se non trovo metto nel primo missing
872ilevel = index(this%level, gridinfo%level)
873IF (ilevel == 0 .AND. optio_log(force)) THEN
874 ilevel = index(this%level, vol7d_level_miss)
875 IF (ilevel /= 0) this%level(ilevel) = gridinfo%level
876ENDIF
877
878IF (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
883ENDIF
884
885IF (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)
890ELSE ! 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
Index method.

Generated with Doxygen.