libsim  Versione6.3.0

◆ 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]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 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)
1791 
1792 ! lanavari, lanavarb, lanavarc, &
1793 ! lanaattri, lanaattrb, lanaattrc, &
1794 ! lanavarattri, lanavarattrb, lanavarattrc, &
1795 ! ldativari, ldativarb, ldativarc, &
1796 ! ldatiattri, ldatiattrb, ldatiattrc, &
1797 ! ldativarattri, ldativarattrb, ldativarattrc
1798 ! Faccio la riforma fisica dei volumi
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)
1814 
1815 ! Dealloco i vettori di rimappatura
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)
1821 
1822 ! Ricreo gli indici var-attr
1823 CALL vol7d_set_attr_ind(that)
1824 that%time_definition = this%time_definition
1825 
1826 END SUBROUTINE vol7d_copy
1827 
1828 
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&
1848  ,purgeana)
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
1877 
1878 TYPE(vol7d) :: v7dtmp
1879 logical,allocatable :: llana(:)
1880 integer :: i
1881 
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)
1891 
1892 ! destroy old volume
1893 CALL delete(this)
1894 
Distruttori per le 2 classi.

Generated with Doxygen.