libsim Versione 7.2.1

◆ vol7d_append()

subroutine 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]thisprimo oggetto in ingresso, a cui sarà accodato il secondo
[in]thatsecondo oggetto in ingresso, non viene modificato dal metodo
[in]sortse fornito e uguale a .TRUE., i descrittori che supportano un ordinamento (operatori > e/o <) risulteranno ordinati in ordine crescente nell'oggetto finale
[in]bestdataif 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 1756 del file vol7d_class.F90.

1758 lanavarr(:), lanavard(:), lanavari(:), lanavarb(:), lanavarc(:), &
1759 lanaattrr(:), lanaattrd(:), lanaattri(:), lanaattrb(:), lanaattrc(:), &
1760 lanavarattrr(:), lanavarattrd(:), lanavarattri(:), lanavarattrb(:), lanavarattrc(:), &
1761 ldativarr(:), ldativard(:), ldativari(:), ldativarb(:), ldativarc(:), &
1762 ldatiattrr(:), ldatiattrd(:), ldatiattri(:), ldatiattrb(:), ldatiattrc(:), &
1763 ldativarattrr(:), ldativarattrd(:), ldativarattri(:), ldativarattrb(:), ldativarattrc(:)
1764
1765LOGICAL :: lsort, lunique, lmiss
1766INTEGER,POINTER :: remapt(:), remaptr(:), remapl(:), remapa(:), remapn(:)
1767
1768CALL init(that)
1769IF (.NOT.c_e(this)) RETURN ! speedup, nothing to do
1770IF (.NOT.vol7d_check_vol(this)) RETURN ! be safe
1771
1772CALL optio(sort, lsort)
1773CALL optio(unique, lunique)
1774CALL optio(miss, lmiss)
1775
1776! Calcolo le mappature tra volume vecchio e volume nuovo
1777! I puntatori remap* vengono tutti o allocati o nullificati
1778CALL vol7d_remap1_datetime(this%time, that%time, &
1779 lsort.OR.optio_log(lsort_time), lunique, lmiss, remapt, ltime)
1780CALL vol7d_remap1_vol7d_timerange(this%timerange, that%timerange, &
1781 lsort.OR.optio_log(lsort_timerange), lunique, lmiss, remaptr, ltimerange)
1782CALL vol7d_remap1_vol7d_level(this%level, that%level, &
1783 lsort.OR.optio_log(lsort_level), lunique, lmiss, remapl, llevel)
1784CALL vol7d_remap1_vol7d_ana(this%ana, that%ana, &
1785 lsort, lunique, lmiss, remapa, lana)
1786CALL vol7d_remap1_vol7d_network(this%network, that%network, &
1787 lsort, lunique, lmiss, remapn, lnetwork)
1788
1789! lanavari, lanavarb, lanavarc, &
1790! lanaattri, lanaattrb, lanaattrc, &
1791! lanavarattri, lanavarattrb, lanavarattrc, &
1792! ldativari, ldativarb, ldativarc, &
1793! ldatiattri, ldatiattrb, ldatiattrc, &
1794! ldativarattri, ldativarattrb, ldativarattrc
1795! Faccio la riforma fisica dei volumi
1796CALL vol7d_reform_finalr(this, that, &
1797 remapa, remapt, remapl, remaptr, remapn, lsort, lunique, lmiss, &
1798 lanavarr, lanaattrr, lanavarattrr, ldativarr, ldatiattrr, ldativarattrr)
1799CALL vol7d_reform_finald(this, that, &
1800 remapa, remapt, remapl, remaptr, remapn, lsort, lunique, lmiss, &
1801 lanavard, lanaattrd, lanavarattrd, ldativard, ldatiattrd, ldativarattrd)
1802CALL vol7d_reform_finali(this, that, &
1803 remapa, remapt, remapl, remaptr, remapn, lsort, lunique, lmiss, &
1804 lanavari, lanaattri, lanavarattri, ldativari, ldatiattri, ldativarattri)
1805CALL vol7d_reform_finalb(this, that, &
1806 remapa, remapt, remapl, remaptr, remapn, lsort, lunique, lmiss, &
1807 lanavarb, lanaattrb, lanavarattrb, ldativarb, ldatiattrb, ldativarattrb)
1808CALL vol7d_reform_finalc(this, that, &
1809 remapa, remapt, remapl, remaptr, remapn, lsort, lunique, lmiss, &
1810 lanavarc, lanaattrc, lanavarattrc, ldativarc, ldatiattrc, ldativarattrc)
1811
1812! Dealloco i vettori di rimappatura
1813IF (ASSOCIATED(remapt)) DEALLOCATE(remapt)
1814IF (ASSOCIATED(remaptr)) DEALLOCATE(remaptr)
1815IF (ASSOCIATED(remapl)) DEALLOCATE(remapl)
1816IF (ASSOCIATED(remapa)) DEALLOCATE(remapa)
1817IF (ASSOCIATED(remapn)) DEALLOCATE(remapn)
1818
1819! Ricreo gli indici var-attr
1820CALL vol7d_set_attr_ind(that)
1821that%time_definition = this%time_definition
1822
1823END SUBROUTINE vol7d_copy
1824
1825
1836SUBROUTINE 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&
1845 ,purgeana)
1846TYPE(vol7d),INTENT(INOUT) :: this
1847LOGICAL,INTENT(IN),OPTIONAL :: sort
1848LOGICAL,INTENT(IN),OPTIONAL :: unique
1849LOGICAL,INTENT(IN),OPTIONAL :: miss
1850LOGICAL,INTENT(IN),OPTIONAL :: lsort_time
1851LOGICAL,INTENT(IN),OPTIONAL :: lsort_timerange
1852LOGICAL,INTENT(IN),OPTIONAL :: lsort_level
1860LOGICAL,INTENT(IN),OPTIONAL :: ltime(:)
1861LOGICAL,INTENT(IN),OPTIONAL :: ltimerange(:)
1862LOGICAL,INTENT(IN),OPTIONAL :: llevel(:)
1863LOGICAL,INTENT(IN),OPTIONAL :: lana(:)
1864LOGICAL,INTENT(IN),OPTIONAL :: lnetwork(:)
1866LOGICAL,INTENT(in),OPTIONAL :: &

Generated with Doxygen.