|
◆ vol7d_copy()
subroutine vol7d_class::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 ... vol2 = vol1 fa una cosa diversa rispetto a: TYPE(vol7d) :: vol1, vol2 ... 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] | this | oggetto origine |
[in,out] | that | oggetto destinazione |
[in] | sort | if present and .TRUE., sort all the sortable dimensions |
[in] | unique | se 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] | miss | se fornito e uguale a .TRUE., gli eventuali elementi dei descrittori uguali al corrispondente valore mancante verranno eliminati dall'oggetto riformato |
[in] | lsort_time | if present and .TRUE., sort only time dimension (alternative to sort ) |
[in] | lsort_timerange | if present and .TRUE., sort only timerange dimension (alternative to sort ) |
[in] | lsort_level | if present and .TRUE., sort only level dimension (alternative to sort ) |
[in] | ltime | se 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] | ltimerange | come il precedente per la dimensione timerange |
[in] | llevel | come il precedente per la dimensione level |
[in] | lana | come il precedente per la dimensione ana |
[in] | lnetwork | come il precedente per la dimensione network |
[in] | lanavarr | come il precedente per tutte le possibili dimensioni variabile |
[in] | lanavard | come il precedente per tutte le possibili dimensioni variabile |
[in] | lanavari | come il precedente per tutte le possibili dimensioni variabile |
[in] | lanavarb | come il precedente per tutte le possibili dimensioni variabile |
[in] | lanavarc | come il precedente per tutte le possibili dimensioni variabile |
[in] | lanaattrr | come il precedente per tutte le possibili dimensioni variabile |
[in] | lanaattrd | come il precedente per tutte le possibili dimensioni variabile |
[in] | lanaattri | come il precedente per tutte le possibili dimensioni variabile |
[in] | lanaattrb | come il precedente per tutte le possibili dimensioni variabile |
[in] | lanaattrc | come il precedente per tutte le possibili dimensioni variabile |
[in] | lanavarattrr | come il precedente per tutte le possibili dimensioni variabile |
[in] | lanavarattrd | come il precedente per tutte le possibili dimensioni variabile |
[in] | lanavarattri | come il precedente per tutte le possibili dimensioni variabile |
[in] | lanavarattrb | come il precedente per tutte le possibili dimensioni variabile |
[in] | lanavarattrc | come il precedente per tutte le possibili dimensioni variabile |
[in] | ldativarr | come il precedente per tutte le possibili dimensioni variabile |
[in] | ldativard | come il precedente per tutte le possibili dimensioni variabile |
[in] | ldativari | come il precedente per tutte le possibili dimensioni variabile |
[in] | ldativarb | come il precedente per tutte le possibili dimensioni variabile |
[in] | ldativarc | come il precedente per tutte le possibili dimensioni variabile |
[in] | ldatiattrr | come il precedente per tutte le possibili dimensioni variabile |
[in] | ldatiattrd | come il precedente per tutte le possibili dimensioni variabile |
[in] | ldatiattri | come il precedente per tutte le possibili dimensioni variabile |
[in] | ldatiattrb | come il precedente per tutte le possibili dimensioni variabile |
[in] | ldatiattrc | come il precedente per tutte le possibili dimensioni variabile |
[in] | ldativarattrr | come il precedente per tutte le possibili dimensioni variabile |
[in] | ldativarattrd | come il precedente per tutte le possibili dimensioni variabile |
[in] | ldativarattri | come il precedente per tutte le possibili dimensioni variabile |
[in] | ldativarattrb | come il precedente per tutte le possibili dimensioni variabile |
[in] | ldativarattrc | come il precedente per tutte le possibili dimensioni variabile |
Definizione alla linea 1939 del file vol7d_class.F90.
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. 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. 1959 IF (to_be_sorted) CALL vol7d_reform(this, & 1960 lsort_time=lsort_time, lsort_timerange=lsort_timerange, lsort_level=lsort_level ) 1962 END SUBROUTINE vol7d_smart_sort 1970 SUBROUTINE vol7d_convr(this, that) 1971 TYPE(vol7d), INTENT(IN) :: this 1972 TYPE(vol7d), INTENT(INOUT) :: that 1975 LOGICAL :: fv(1)=(/.false./), tv(1)=(/.true./), acp(1), acn(1) 1976 TYPE(vol7d) :: v7d_tmp 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) 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) 2005 IF ( ASSOCIATED(v7d_tmp%dativar%d)) THEN 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)) 2014 DEALLOCATE(v7d_tmp%voldatid) 2016 v7d_tmp%dativar%r => v7d_tmp%dativar%d 2017 NULLIFY(v7d_tmp%dativar%d) 2020 CALL vol7d_merge(that, v7d_tmp) 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.
|