|
◆ 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 1786 del file vol7d_class.F90.
1786 lsort.OR.optio_log(lsort_level), lunique, lmiss, remapl, llevel) 1787 CALL vol7d_remap1_vol7d_ana(this%ana, that%ana, & 1788 lsort, lunique, lmiss, remapa, lana) 1789 CALL vol7d_remap1_vol7d_network(this%network, that%network, & 1790 lsort, lunique, lmiss, remapn, lnetwork) 1799 CALL vol7d_reform_finalr(this, that, & 1800 remapa, remapt, remapl, remaptr, remapn, lsort, lunique, lmiss, & 1801 lanavarr, lanaattrr, lanavarattrr, ldativarr, ldatiattrr, ldativarattrr) 1802 CALL vol7d_reform_finald(this, that, & 1803 remapa, remapt, remapl, remaptr, remapn, lsort, lunique, lmiss, & 1804 lanavard, lanaattrd, lanavarattrd, ldativard, ldatiattrd, ldativarattrd) 1805 CALL vol7d_reform_finali(this, that, & 1806 remapa, remapt, remapl, remaptr, remapn, lsort, lunique, lmiss, & 1807 lanavari, lanaattri, lanavarattri, ldativari, ldatiattri, ldativarattri) 1808 CALL vol7d_reform_finalb(this, that, & 1809 remapa, remapt, remapl, remaptr, remapn, lsort, lunique, lmiss, & 1810 lanavarb, lanaattrb, lanavarattrb, ldativarb, ldatiattrb, ldativarattrb) 1811 CALL vol7d_reform_finalc(this, that, & 1812 remapa, remapt, remapl, remaptr, remapn, lsort, lunique, lmiss, & 1813 lanavarc, lanaattrc, lanavarattrc, ldativarc, ldatiattrc, ldativarattrc) 1816 IF ( ASSOCIATED(remapt)) DEALLOCATE(remapt) 1817 IF ( ASSOCIATED(remaptr)) DEALLOCATE(remaptr) 1818 IF ( ASSOCIATED(remapl)) DEALLOCATE(remapl) 1819 IF ( ASSOCIATED(remapa)) DEALLOCATE(remapa) 1820 IF ( ASSOCIATED(remapn)) DEALLOCATE(remapn) 1823 CALL vol7d_set_attr_ind(that) 1824 that%time_definition = this%time_definition 1826 END SUBROUTINE vol7d_copy 1839 SUBROUTINE vol7d_reform(this, sort, unique, miss, & 1840 lsort_time, lsort_timerange, lsort_level, & 1841 ltime, ltimerange, llevel, lana, lnetwork, & 1842 lanavarr, lanavard, lanavari, lanavarb, lanavarc, & 1843 lanaattrr, lanaattrd, lanaattri, lanaattrb, lanaattrc, & 1844 lanavarattrr, lanavarattrd, lanavarattri, lanavarattrb, lanavarattrc, & 1845 ldativarr, ldativard, ldativari, ldativarb, ldativarc, & 1846 ldatiattrr, ldatiattrd, ldatiattri, ldatiattrb, ldatiattrc, & 1847 ldativarattrr, ldativarattrd, ldativarattri, ldativarattrb, ldativarattrc& 1849 TYPE(vol7d), INTENT(INOUT) :: this 1850 LOGICAL, INTENT(IN), OPTIONAL :: sort 1851 LOGICAL, INTENT(IN), OPTIONAL :: unique 1852 LOGICAL, INTENT(IN), OPTIONAL :: miss 1853 LOGICAL, INTENT(IN), OPTIONAL :: lsort_time 1854 LOGICAL, INTENT(IN), OPTIONAL :: lsort_timerange 1855 LOGICAL, INTENT(IN), OPTIONAL :: lsort_level 1863 LOGICAL, INTENT(IN), OPTIONAL :: ltime(:) 1864 LOGICAL, INTENT(IN), OPTIONAL :: ltimerange(:) 1865 LOGICAL, INTENT(IN), OPTIONAL :: llevel(:) 1866 LOGICAL, INTENT(IN), OPTIONAL :: lana(:) 1867 LOGICAL, INTENT(IN), OPTIONAL :: lnetwork(:) 1869 LOGICAL, INTENT(in), OPTIONAL :: & 1870 lanavarr(:), lanavard(:), lanavari(:), lanavarb(:), lanavarc(:), & 1871 lanaattrr(:), lanaattrd(:), lanaattri(:), lanaattrb(:), lanaattrc(:), & 1872 lanavarattrr(:), lanavarattrd(:), lanavarattri(:), lanavarattrb(:), lanavarattrc(:), & 1873 ldativarr(:), ldativard(:), ldativari(:), ldativarb(:), ldativarc(:), & 1874 ldatiattrr(:), ldatiattrd(:), ldatiattri(:), ldatiattrb(:), ldatiattrc(:), & 1875 ldativarattrr(:), ldativarattrd(:), ldativarattri(:), ldativarattrb(:), ldativarattrc(:) 1876 LOGICAL, INTENT(IN), OPTIONAL :: purgeana 1878 TYPE(vol7d) :: v7dtmp 1879 logical, allocatable :: llana(:) 1882 CALL vol7d_copy(this, v7dtmp, sort, unique, miss, & 1883 lsort_time, lsort_timerange, lsort_level, & 1884 ltime, ltimerange, llevel, lana, lnetwork, & 1885 lanavarr, lanavard, lanavari, lanavarb, lanavarc, & 1886 lanaattrr, lanaattrd, lanaattri, lanaattrb, lanaattrc, & 1887 lanavarattrr, lanavarattrd, lanavarattri, lanavarattrb, lanavarattrc, & 1888 ldativarr, ldativard, ldativari, ldativarb, ldativarc, & 1889 ldatiattrr, ldatiattrd, ldatiattri, ldatiattrb, ldatiattrc, & 1890 ldativarattrr, ldativarattrd, ldativarattri, ldativarattrb, ldativarattrc) Distruttori per le 2 classi.
|