|
◆ vol7d_append()
subroutine vol7d_class::vol7d_append |
( |
type(vol7d), intent(inout) |
this, |
|
|
type(vol7d), intent(in) |
that, |
|
|
logical, intent(in), optional |
sort, |
|
|
logical, intent(in), optional |
bestdata, |
|
|
logical, intent(in), optional |
ltimesimple, |
|
|
logical, intent(in), optional |
ltimerangesimple, |
|
|
logical, intent(in), optional |
llevelsimple, |
|
|
logical, intent(in), optional |
lanasimple, |
|
|
logical, intent(in), optional |
lnetworksimple |
|
) |
| |
Metodo per accodare un oggetto vol7d ad un altro.
Si tratta di un metodo molto potente e versatile; i descrittori delle dimensioni del volume finale conterranno i valori dei corrispondenti descrittori del primo e del secondo volume e i volumi di anagrafica e dati conterranno i valori dei due volumi ai posti giusti, e valori mancanti per le nuove combinazioni che eventualmente si verranno a creare. Se i volumi multidimensionali di anagrafica e/o dati dei 2 oggetti hanno un'intersezione non nulla, negli elementi comuni il volume finale conterrà il corrispondente elemento del secondo volume. Attenzione che, durante l'esecuzione del metodo, la memoria richiesta è pari alla memoria complessiva occupata dai 2 volumi iniziali più la memoria complessiva del volume finale, per cui, nel caso di volumi grandi, ci potrebbero essere problemi di esaurimento della memoria centrale. Se l'oggetto that è vuoto non perde tempo inutile,
- Da fare:
- nel caso di elementi comuni inserire la possibiità (opzionale per non penalizzare le prestazioni quando ciò non serve) di effettuare una scelta più ragionata dell'elemento da tenere, almeno controllando i dati mancanti se non le flag di qualità
- Da fare:
- "rateizzare" l'allocazione dei volumi per ridurre l'occupazione di memoria nel caso siano allocati contemporaneamente volumi di variabili e di attributi o più volumi di tipi diversi
- Da fare:
- il parametro that è dichiarato INOUT perché la vol7d_alloc_vol può modificarlo, bisognerebbe implementare una vol7d_check_vol che restituisca errore anziché usare la vol7d_alloc_vol.
- Parametri
-
[in,out] | this | primo oggetto in ingresso, a cui sarà accodato il secondo |
[in] | that | secondo oggetto in ingresso, non viene modificato dal metodo |
[in] | sort | se fornito e uguale a .TRUE., i descrittori che supportano un ordinamento (operatori > e/o <) risulteranno ordinati in ordine crescente nell'oggetto finale |
[in] | bestdata | if provided and .TRUE. in case of overlapping volumes keep valid data where available, or data from the second volume if both valid |
Definizione alla linea 1768 del file vol7d_class.F90.
1769 IF (.NOT.c_e(this)) RETURN 1770 IF (.NOT.vol7d_check_vol(this)) RETURN 1779 lsort.OR.optio_log(lsort_time), lunique, lmiss, remapt, ltime) 1781 lsort.OR.optio_log(lsort_timerange), lunique, lmiss, remaptr, ltimerange 1783 lsort.OR.optio_log(lsort_level), lunique, lmiss, remapl, llevel) 1785 lsort, lunique, lmiss, remapa, lana) 1787 lsort, lunique, lmiss, remapn, lnetwork) 1797 remapa, remapt, remapl, remaptr, remapn, lsort, lunique, lmiss, & 1798 lanavarr, lanaattrr, lanavarattrr, ldativarr, ldatiattrr, ldativarattrr 1800 remapa, remapt, remapl, remaptr, remapn, lsort, lunique, lmiss, & 1801 lanavard, lanaattrd, lanavarattrd, ldativard, ldatiattrd, ldativarattrd 1803 remapa, remapt, remapl, remaptr, remapn, lsort, lunique, lmiss, & 1804 lanavari, lanaattri, lanavarattri, ldativari, ldatiattri, ldativarattri 1806 remapa, remapt, remapl, remaptr, remapn, lsort, lunique, lmiss, & 1807 lanavarb, lanaattrb, lanavarattrb, ldativarb, ldatiattrb, ldativarattrb 1809 remapa, remapt, remapl, remaptr, remapn, lsort, lunique, lmiss, & 1810 lanavarc, lanaattrc, lanavarattrc, ldativarc, ldatiattrc, ldativarattrc 1813 IF ( ASSOCIATED(remapt)) DEALLOCATE(remapt) 1814 IF ( ASSOCIATED(remaptr)) DEALLOCATE(remaptr) 1815 IF ( ASSOCIATED(remapl)) DEALLOCATE(remapl) 1816 IF ( ASSOCIATED(remapa)) DEALLOCATE(remapa) 1817 IF ( ASSOCIATED(remapn)) DEALLOCATE(remapn) 1821 that%time_definition = this%time_definition 1823 END SUBROUTINE vol7d_copy 1836 SUBROUTINE vol7d_reform(this, sort, unique, miss, & 1837 lsort_time, lsort_timerange, lsort_level, & 1838 ltime, ltimerange, llevel, lana, lnetwork, & 1839 lanavarr, lanavard, lanavari, lanavarb, lanavarc, & 1840 lanaattrr, lanaattrd, lanaattri, lanaattrb, lanaattrc, & 1841 lanavarattrr, lanavarattrd, lanavarattri, lanavarattrb, lanavarattrc, & 1842 ldativarr, ldativard, ldativari, ldativarb, ldativarc, & 1843 ldatiattrr, ldatiattrd, ldatiattri, ldatiattrb, ldatiattrc, & 1844 ldativarattrr, ldativarattrd, ldativarattri, ldativarattrb, ldativarattrc& 1846 TYPE(vol7d), INTENT(INOUT) :: this 1847 LOGICAL, INTENT(IN), OPTIONAL :: sort 1848 LOGICAL, INTENT(IN), OPTIONAL :: unique 1849 LOGICAL, INTENT(IN), OPTIONAL :: miss 1850 LOGICAL, INTENT(IN), OPTIONAL :: lsort_time 1851 LOGICAL, INTENT(IN), OPTIONAL :: lsort_timerange 1852 LOGICAL, INTENT(IN), OPTIONAL :: lsort_level 1860 LOGICAL, INTENT(IN), OPTIONAL :: ltime(:) 1861 LOGICAL, INTENT(IN), OPTIONAL :: ltimerange(:) 1862 LOGICAL, INTENT(IN), OPTIONAL :: llevel(:) 1863 LOGICAL, INTENT(IN), OPTIONAL :: lana(:) 1864 LOGICAL, INTENT(IN), OPTIONAL :: lnetwork(:) 1866 LOGICAL, INTENT(in), OPTIONAL :: & 1867 lanavarr(:), lanavard(:), lanavari(:), lanavarb(:), lanavarc(:), & 1868 lanaattrr(:), lanaattrd(:), lanaattri(:), lanaattrb(:), lanaattrc(:), & 1869 lanavarattrr(:), lanavarattrd(:), lanavarattri(:), lanavarattrb(:), lanavarattrc 1873 LOGICAL, INTENT(IN), OPTIONAL :: purgeana 1875 TYPE(vol7d) :: v7dtmp 1876 logical, allocatable :: llana(:)
|