libsim Versione 7.1.11

◆ 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 1762 del file vol7d_class.F90.

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 :: &
1867 lanavarr(:), lanavard(:), lanavari(:), lanavarb(:), lanavarc(:), &
1868 lanaattrr(:), lanaattrd(:), lanaattri(:), lanaattrb(:), lanaattrc(:), &
1869 lanavarattrr(:), lanavarattrd(:), lanavarattri(:), lanavarattrb(:), lanavarattrc(:), &
1870 ldativarr(:), ldativard(:), ldativari(:), ldativarb(:), ldativarc(:), &
1871 ldatiattrr(:), ldatiattrd(:), ldatiattri(:), ldatiattrb(:), ldatiattrc(:), &
1872 ldativarattrr(:), ldativarattrd(:), ldativarattri(:), ldativarattrb(:), ldativarattrc(:)

Generated with Doxygen.