libsim  Versione7.2.6

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

1768 CALL init(that)
1769 IF (.NOT.c_e(this)) RETURN ! speedup, nothing to do
1770 IF (.NOT.vol7d_check_vol(this)) RETURN ! be safe
1771 
1772 CALL optio(sort, lsort)
1773 CALL optio(unique, lunique)
1774 CALL optio(miss, lmiss)
1775 
1776 ! Calcolo le mappature tra volume vecchio e volume nuovo
1777 ! I puntatori remap* vengono tutti o allocati o nullificati
1778 CALL vol7d_remap1_datetime(this%time, that%time, &
1779  lsort.OR.optio_log(lsort_time), lunique, lmiss, remapt, ltime)
1780 CALL vol7d_remap1_vol7d_timerange(this%timerange, that%timerange, &
1781  lsort.OR.optio_log(lsort_timerange), lunique, lmiss, remaptr, ltimerange)
1782 CALL vol7d_remap1_vol7d_level(this%level, that%level, &
1783  lsort.OR.optio_log(lsort_level), lunique, lmiss, remapl, llevel)
1784 CALL vol7d_remap1_vol7d_ana(this%ana, that%ana, &
1785  lsort, lunique, lmiss, remapa, lana)
1786 CALL 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
1796 CALL vol7d_reform_finalr(this, that, &
1797  remapa, remapt, remapl, remaptr, remapn, lsort, lunique, lmiss, &
1798  lanavarr, lanaattrr, lanavarattrr, ldativarr, ldatiattrr, ldativarattrr)
1799 CALL vol7d_reform_finald(this, that, &
1800  remapa, remapt, remapl, remaptr, remapn, lsort, lunique, lmiss, &
1801  lanavard, lanaattrd, lanavarattrd, ldativard, ldatiattrd, ldativarattrd)
1802 CALL vol7d_reform_finali(this, that, &
1803  remapa, remapt, remapl, remaptr, remapn, lsort, lunique, lmiss, &
1804  lanavari, lanaattri, lanavarattri, ldativari, ldatiattri, ldativarattri)
1805 CALL vol7d_reform_finalb(this, that, &
1806  remapa, remapt, remapl, remaptr, remapn, lsort, lunique, lmiss, &
1807  lanavarb, lanaattrb, lanavarattrb, ldativarb, ldatiattrb, ldativarattrb)
1808 CALL 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
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)
1818 
1819 ! Ricreo gli indici var-attr
1820 CALL vol7d_set_attr_ind(that)
1821 that%time_definition = this%time_definition
1822 
1823 END SUBROUTINE vol7d_copy
1824 
1825 
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&
1845  ,purgeana)
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(:), &
1870  ldativarr(:), ldativard(:), ldativari(:), ldativarb(:), ldativarc(:), &
1871  ldatiattrr(:), ldatiattrd(:), ldatiattri(:), ldatiattrb(:), ldatiattrc(:), &
1872  ldativarattrr(:), ldativarattrd(:), ldativarattri(:), ldativarattrb(:), ldativarattrc(:)
1873 LOGICAL,INTENT(IN),OPTIONAL :: purgeana
1874 
1875 TYPE(vol7d) :: v7dtmp
1876 logical,allocatable :: llana(:)

Generated with Doxygen.