|
libsim Versione 8.0.0
|
◆ vol7d_alloc()
Metodo per allocare i descrittori delle 7 dimensioni. Riceve un grande numero di parametri opzionali che indicano quali descrittori allocare e con quale estensione; i descrittori non specificati non vengono toccati. Può essere quindi chiamato più volte allocando via via descrittori relativi a dimensioni diverse. Se un descrittore richiesto è già allocato, viene deallocato (perdendone l'eventuale contenuto) e riallocato con l'estensione richiesta. Per i descrittori relativi a dimensioni che non siano variabili o attributi, è possibile specificare l'estensione di una dimensione a 0, in tal caso il descrittore viene comunque allocato con lunghezza nulla, che è diverso da non allocarlo. Per i descrittori di variabili e attributi passare un'estensione 0 equivale a non fornire il parametro. Avere uno o più descrittori dimensionati con estensione nulla fa sì che anche il volume dati successivamente allocato abbia estensione nulla; sebbene ciò appaia inutile, un volume del genere può in realtà servire, in associazione ai metodi vol7d_merge o vol7d_append per estendere un volume esistente aggiungendo elementi in alcune dimensioni (quelle a estensione non nulla, ovviamente) e mantenendo invariato tutto il resto. Per quanto riguarda i descrittori delle dimensioni relative alle variabili, la relativa estensione è specificata con la nomenclatura n<x><y><z> dove <x> può valere:
<y> può valere:
<z> può valere:
Definizione alla linea 1030 del file vol7d_class.F90. 1038IF (ASSOCIATED(this%anavar%r) .OR. ASSOCIATED(this%anavar%d) .OR. &
1039 ASSOCIATED(this%anavar%i) .OR. ASSOCIATED(this%anavar%b) .OR. &
1040 ASSOCIATED(this%anavar%c)) THEN
1041 vol7d_check_vol = vol7d_check_vol .AND. vol7d_check_alloc_ana(this)
1042ENDIF
1043
1044! Attributi dell'anagrafica
1045IF (ASSOCIATED(this%anaattr%r) .AND. ASSOCIATED(this%anavarattr%r) .AND. &
1046 .NOT.ASSOCIATED(this%volanaattrr)) THEN
1047 vol7d_check_vol = .false.
1048ENDIF
1049
1050IF (ASSOCIATED(this%anaattr%d) .AND. ASSOCIATED(this%anavarattr%d) .AND. &
1051 .NOT.ASSOCIATED(this%volanaattrd)) THEN
1052 vol7d_check_vol = .false.
1053ENDIF
1054
1055IF (ASSOCIATED(this%anaattr%i) .AND. ASSOCIATED(this%anavarattr%i) .AND. &
1056 .NOT.ASSOCIATED(this%volanaattri)) THEN
1057 vol7d_check_vol = .false.
1058ENDIF
1059
1060IF (ASSOCIATED(this%anaattr%b) .AND. ASSOCIATED(this%anavarattr%b) .AND. &
1061 .NOT.ASSOCIATED(this%volanaattrb)) THEN
1062 vol7d_check_vol = .false.
1063ENDIF
1064
1065IF (ASSOCIATED(this%anaattr%c) .AND. ASSOCIATED(this%anavarattr%c) .AND. &
1066 .NOT.ASSOCIATED(this%volanaattrc)) THEN
1067 vol7d_check_vol = .false.
1068ENDIF
1069
1070! Dati
1071IF (ASSOCIATED(this%dativar%r) .AND. .NOT.ASSOCIATED(this%voldatir)) THEN
1072 vol7d_check_vol = .false.
1073ENDIF
1074
1075IF (ASSOCIATED(this%dativar%d) .AND. .NOT.ASSOCIATED(this%voldatid)) THEN
1076 vol7d_check_vol = .false.
1077ENDIF
1078
1079IF (ASSOCIATED(this%dativar%i) .AND. .NOT.ASSOCIATED(this%voldatii)) THEN
1080 vol7d_check_vol = .false.
1081ENDIF
1082
1083IF (ASSOCIATED(this%dativar%b) .AND. .NOT.ASSOCIATED(this%voldatib)) THEN
1084 vol7d_check_vol = .false.
1085ENDIF
1086
1087IF (ASSOCIATED(this%dativar%c) .AND. .NOT.ASSOCIATED(this%voldatic)) THEN
1088 vol7d_check_vol = .false.
1089ENDIF
1090
1091! Attributi dei dati
1092IF (ASSOCIATED(this%datiattr%r) .AND. ASSOCIATED(this%dativarattr%r) .AND. &
1093 .NOT.ASSOCIATED(this%voldatiattrr)) THEN
1094 vol7d_check_vol = .false.
1095ENDIF
1096
1097IF (ASSOCIATED(this%datiattr%d) .AND. ASSOCIATED(this%dativarattr%d) .AND. &
1098 .NOT.ASSOCIATED(this%voldatiattrd)) THEN
1099 vol7d_check_vol = .false.
1100ENDIF
1101
1102IF (ASSOCIATED(this%datiattr%i) .AND. ASSOCIATED(this%dativarattr%i) .AND. &
1103 .NOT.ASSOCIATED(this%voldatiattri)) THEN
1104 vol7d_check_vol = .false.
1105ENDIF
1106
1107IF (ASSOCIATED(this%datiattr%b) .AND. ASSOCIATED(this%dativarattr%b) .AND. &
1108 .NOT.ASSOCIATED(this%voldatiattrb)) THEN
1109 vol7d_check_vol = .false.
1110ENDIF
1111
1112IF (ASSOCIATED(this%datiattr%c) .AND. ASSOCIATED(this%dativarattr%c) .AND. &
1113 .NOT.ASSOCIATED(this%voldatiattrc)) THEN
1114 vol7d_check_vol = .false.
1115ENDIF
1116IF (ASSOCIATED(this%dativar%r) .OR. ASSOCIATED(this%dativar%d) .OR. &
1117 ASSOCIATED(this%dativar%i) .OR. ASSOCIATED(this%dativar%b) .OR. &
1118 ASSOCIATED(this%dativar%c)) THEN
1119 vol7d_check_vol = vol7d_check_vol .AND. vol7d_check_alloc_dati(this)
1120ENDIF
1121
1122END FUNCTION vol7d_check_vol
1123
1124
1125!> Metodo per allocare i volumi richiesti di variabili e attributi per
1126!! anagrafica e dati.
1127!! Se alcuni dei descrittori relativi alle dimensioni anagrafica,
1128!! livello verticale, tempo, intervallo temporale (timerange), rete non sono
1129!! stati richiesti preventivamente con la ::vol7d_alloc, essi vengono allocati
1130!! automaticamente da questo metodo
1131!! con estensione di default pari a 1 (non 0!), questo significa, ad esempio,
1132!! che se prevedo di avere soli dati superficiali, cioè ad un solo livello
|