libsim  Versione6.3.0

◆ vol7d_copy()

subroutine vol7d_copy ( type(vol7d), intent(in)  this,
type(vol7d), intent(inout)  that,
logical, intent(in), optional  sort,
logical, intent(in), optional  unique,
logical, intent(in), optional  miss,
logical, intent(in), optional  lsort_time,
logical, intent(in), optional  lsort_timerange,
logical, intent(in), optional  lsort_level,
logical, dimension(:), intent(in), optional  ltime,
logical, dimension(:), intent(in), optional  ltimerange,
logical, dimension(:), intent(in), optional  llevel,
logical, dimension(:), intent(in), optional  lana,
logical, dimension(:), intent(in), optional  lnetwork,
logical, dimension(:), intent(in), optional  lanavarr,
logical, dimension(:), intent(in), optional  lanavard,
logical, dimension(:), intent(in), optional  lanavari,
logical, dimension(:), intent(in), optional  lanavarb,
logical, dimension(:), intent(in), optional  lanavarc,
logical, dimension(:), intent(in), optional  lanaattrr,
logical, dimension(:), intent(in), optional  lanaattrd,
logical, dimension(:), intent(in), optional  lanaattri,
logical, dimension(:), intent(in), optional  lanaattrb,
logical, dimension(:), intent(in), optional  lanaattrc,
logical, dimension(:), intent(in), optional  lanavarattrr,
logical, dimension(:), intent(in), optional  lanavarattrd,
logical, dimension(:), intent(in), optional  lanavarattri,
logical, dimension(:), intent(in), optional  lanavarattrb,
logical, dimension(:), intent(in), optional  lanavarattrc,
logical, dimension(:), intent(in), optional  ldativarr,
logical, dimension(:), intent(in), optional  ldativard,
logical, dimension(:), intent(in), optional  ldativari,
logical, dimension(:), intent(in), optional  ldativarb,
logical, dimension(:), intent(in), optional  ldativarc,
logical, dimension(:), intent(in), optional  ldatiattrr,
logical, dimension(:), intent(in), optional  ldatiattrd,
logical, dimension(:), intent(in), optional  ldatiattri,
logical, dimension(:), intent(in), optional  ldatiattrb,
logical, dimension(:), intent(in), optional  ldatiattrc,
logical, dimension(:), intent(in), optional  ldativarattrr,
logical, dimension(:), intent(in), optional  ldativarattrd,
logical, dimension(:), intent(in), optional  ldativarattri,
logical, dimension(:), intent(in), optional  ldativarattrb,
logical, dimension(:), intent(in), optional  ldativarattrc 
)

Metodo per creare una copia completa e indipendente di un oggetto vol7d.

Questo metodo crea un duplicato di tutti i membri di un oggetto vol7d, con la possibilità di rielaborarlo durante la copia. Se l'oggetto da copiare è vuoto non perde tempo inutile. Attenzione, il codice:

TYPE(vol7d) :: vol1, vol2
CALL init(vol1)
CALL init(vol2)
... ! riempio vol1
vol2 = vol1

fa una cosa diversa rispetto a:

TYPE(vol7d) :: vol1, vol2
CALL init(vol1)
CALL init(vol2)
... ! riempio vol1
CALL vol7d_copy(vol1, vol2)

nel primo caso, infatti, l'operatore di assegnazione copia solo i componenti statici di vol1 nei corrispondenti elementi di vol2, mentre i componenti che sono allocati dinamicamente (cioè quelli che in ::vol7d hanno l'attributo POINTER, in pratica quasi tutti) non vengono duplicati, ma per essi vol2 conterrà un puntatore al corrispondente elemento a cui già punta vol1, e quindi eventuali cambiamenti al contenuto di uno dei due oggetti influenzerà il contenuto dell'altro; nel secondo caso, invece, vol1 e vol2 sono, dopo la vol7d_copy, 2 istanze completamente indipendenti, ma uguali tra loro per contenuto, della classe vol7d, e quindi hanno vita indipendente.

Parametri
[in]thisoggetto origine
[in,out]thatoggetto destinazione
[in]sortif present and .TRUE., sort all the sortable dimensions
[in]uniquese fornito e uguale a .TRUE., gli eventuali elementi duplicati nei descrittori dell'oggetto iniziale verranno collassati in un unico elemento (con eventuale perdita dei dati relativi agli elementi duplicati)
[in]missse fornito e uguale a .TRUE., gli eventuali elementi dei descrittori uguali al corrispondente valore mancante verranno eliminati dall'oggetto riformato
[in]lsort_timeif present and .TRUE., sort only time dimension (alternative to sort )
[in]lsort_timerangeif present and .TRUE., sort only timerange dimension (alternative to sort )
[in]lsort_levelif present and .TRUE., sort only level dimension (alternative to sort )
[in]ltimese fornito, deve essere un vettore logico della stessa lunghezza di thistime indicante quali elementi della dimensione time mantenere (valori .TRUE.) e quali scartare (valori .FALSE.) nel volume copiato; in alternativa può essere un vettore di lunghezza 1, in tal caso, se .FALSE. , equivale a scartare tutti gli elementi (utile principalmente per le variabili); è compatibile col parametro miss
[in]ltimerangecome il precedente per la dimensione timerange
[in]llevelcome il precedente per la dimensione level
[in]lanacome il precedente per la dimensione ana
[in]lnetworkcome il precedente per la dimensione network
[in]lanavarrcome il precedente per tutte le possibili dimensioni variabile
[in]lanavardcome il precedente per tutte le possibili dimensioni variabile
[in]lanavaricome il precedente per tutte le possibili dimensioni variabile
[in]lanavarbcome il precedente per tutte le possibili dimensioni variabile
[in]lanavarccome il precedente per tutte le possibili dimensioni variabile
[in]lanaattrrcome il precedente per tutte le possibili dimensioni variabile
[in]lanaattrdcome il precedente per tutte le possibili dimensioni variabile
[in]lanaattricome il precedente per tutte le possibili dimensioni variabile
[in]lanaattrbcome il precedente per tutte le possibili dimensioni variabile
[in]lanaattrccome il precedente per tutte le possibili dimensioni variabile
[in]lanavarattrrcome il precedente per tutte le possibili dimensioni variabile
[in]lanavarattrdcome il precedente per tutte le possibili dimensioni variabile
[in]lanavarattricome il precedente per tutte le possibili dimensioni variabile
[in]lanavarattrbcome il precedente per tutte le possibili dimensioni variabile
[in]lanavarattrccome il precedente per tutte le possibili dimensioni variabile
[in]ldativarrcome il precedente per tutte le possibili dimensioni variabile
[in]ldativardcome il precedente per tutte le possibili dimensioni variabile
[in]ldativaricome il precedente per tutte le possibili dimensioni variabile
[in]ldativarbcome il precedente per tutte le possibili dimensioni variabile
[in]ldativarccome il precedente per tutte le possibili dimensioni variabile
[in]ldatiattrrcome il precedente per tutte le possibili dimensioni variabile
[in]ldatiattrdcome il precedente per tutte le possibili dimensioni variabile
[in]ldatiattricome il precedente per tutte le possibili dimensioni variabile
[in]ldatiattrbcome il precedente per tutte le possibili dimensioni variabile
[in]ldatiattrccome il precedente per tutte le possibili dimensioni variabile
[in]ldativarattrrcome il precedente per tutte le possibili dimensioni variabile
[in]ldativarattrdcome il precedente per tutte le possibili dimensioni variabile
[in]ldativarattricome il precedente per tutte le possibili dimensioni variabile
[in]ldativarattrbcome il precedente per tutte le possibili dimensioni variabile
[in]ldativarattrccome il precedente per tutte le possibili dimensioni variabile

Definizione alla linea 1939 del file vol7d_class.F90.

1939  ENDIF
1940  ENDDO
1941 ENDIF
1942 IF (optio_log(lsort_timerange)) THEN
1943  DO i = 2, SIZE(this%timerange)
1944  IF (this%timerange(i) < this%timerange(i-1)) THEN
1945  to_be_sorted = .true.
1946  EXIT
1947  ENDIF
1948  ENDDO
1949 ENDIF
1950 IF (optio_log(lsort_level)) THEN
1951  DO i = 2, SIZE(this%level)
1952  IF (this%level(i) < this%level(i-1)) THEN
1953  to_be_sorted = .true.
1954  EXIT
1955  ENDIF
1956  ENDDO
1957 ENDIF
1958 
1959 IF (to_be_sorted) CALL vol7d_reform(this, &
1960  lsort_time=lsort_time, lsort_timerange=lsort_timerange, lsort_level=lsort_level )
1961 
1962 END SUBROUTINE vol7d_smart_sort
1963 
1964 
1970 SUBROUTINE vol7d_convr(this, that)
1971 TYPE(vol7d),INTENT(IN) :: this
1972 TYPE(vol7d),INTENT(INOUT) :: that
1973 LOGICAL :: anaconv ! dovra` diventare un parametro
1974 INTEGER :: i
1975 LOGICAL :: fv(1)=(/.false./), tv(1)=(/.true./), acp(1), acn(1)
1976 TYPE(vol7d) :: v7d_tmp
1977 
1978 ! richiede modifiche per convertirte i dati di anagrafica
1979 ! per ora sempre disabilitato
1980 anaconv = .false.
1981 IF (anaconv) THEN
1982  acp=fv
1983  acn=tv
1984 ELSE
1985  acp=tv
1986  acn=fv
1987 ENDIF
1988 
1989 ! Volume con solo i dati reali e tutti gli attributi
1990 ! l'anagrafica e` copiata interamente se necessario
1991 CALL vol7d_copy(this, that, &
1992  lanavarr=tv, lanavard=acp, lanavari=acp, lanavarb=acp, lanavarc=acp, &
1993  ldativarr=tv, ldativard=fv, ldativari=fv, ldativarb=fv, ldativarc=fv)
1994 
1995 ! Volume solo di dati double
1996 CALL vol7d_copy(this, v7d_tmp, &
1997  lanavarr=fv, lanavard=acn, lanavari=fv, lanavarb=fv, lanavarc=fv, &
1998  lanaattrr=fv, lanaattrd=fv, lanaattri=fv, lanaattrb=fv, lanaattrc=fv, &
1999  lanavarattrr=fv, lanavarattrd=fv, lanavarattri=fv, lanavarattrb=fv, lanavarattrc=fv, &
2000  ldativarr=fv, ldativard=tv, ldativari=fv, ldativarb=fv, ldativarc=fv, &
2001  ldatiattrr=fv, ldatiattrd=fv, ldatiattri=fv, ldatiattrb=fv, ldatiattrc=fv, &
2002  ldativarattrr=fv, ldativarattrd=fv, ldativarattri=fv, ldativarattrb=fv, ldativarattrc=fv)
2003 
2004 ! converto a dati reali
2005 IF (ASSOCIATED(v7d_tmp%dativar%d)) THEN ! .and. associated(v7d_tmp%voldatid) ?
2006 ! alloco i dati reali e vi trasferisco i double
2007  ALLOCATE(v7d_tmp%voldatir(SIZE(v7d_tmp%voldatid, 1), SIZE(v7d_tmp%voldatid, 2), &
2008  SIZE(v7d_tmp%voldatid, 3), SIZE(v7d_tmp%voldatid, 4), SIZE(v7d_tmp%voldatid, 5), &
2009  SIZE(v7d_tmp%voldatid, 6)))
2010  DO i = 1, SIZE(v7d_tmp%dativar%d)
2011  v7d_tmp%voldatir(:,:,:,:,i,:) = &
2012  realdat(v7d_tmp%voldatid(:,:,:,:,i,:), v7d_tmp%dativar%d(i))
2013  ENDDO
2014  DEALLOCATE(v7d_tmp%voldatid)
2015 ! trasferisco le variabili
2016  v7d_tmp%dativar%r => v7d_tmp%dativar%d
2017  NULLIFY(v7d_tmp%dativar%d)
2018 
2019 ! fondo con il volume definitivo
2020  CALL vol7d_merge(that, v7d_tmp)
2021 ELSE
2022  CALL delete(v7d_tmp)
2023 ENDIF
2024 
2025 
2026 ! Volume solo di dati interi
2027 CALL vol7d_copy(this, v7d_tmp, &
2028  lanavarr=fv, lanavard=fv, lanavari=acn, lanavarb=fv, lanavarc=fv, &
2029  lanaattrr=fv, lanaattrd=fv, lanaattri=fv, lanaattrb=fv, lanaattrc=fv, &
Distruttori per le 2 classi.

Generated with Doxygen.