libsim Versione 8.0.0

◆ dba2v7d()

subroutine dba2v7d ( type(vol7d), intent(inout) this,
type(dbametaanddata), dimension(:), intent(inout) metaanddatav,
integer, intent(in), optional time_definition,
type(vol7d_network), intent(in), optional set_network )
private

import dba objects in vol7d

Parametri
[in]time_definition0=time is reference time ; 1=time is validity time (default=1)

Definizione alla linea 834 del file vol7d_dballe_class.F03.

835allocate(starvars%dcv(ndativarattr))
836
837nanavarattr = count_distinct(toarray_charl(anavarattrl) , back=.true.)
838allocate(anavarattra(nanavarattr))
839call pack_distinct_c (toarray_charl(anavarattrl) , anavarattra , back=.true.)
840status = anavarattrl%delete()
841allocate(anastarvars%dcv(nanavarattr))
842
843
844cn: do n=1,ndativarattr
845 do i =1, size(metaanddatav)
846 do j=1, size(metaanddatav(i)%dataattrv%dataattr)
847 do k=1, size(metaanddatav(i)%dataattrv%dataattr(j)%attrv%dcv)
848 if (c_e(metaanddatav(i)%metadata%datetime%datetime)) then
849 if (metaanddatav(i)%dataattrv%dataattr(j)%attrv%dcv(k)%dat%btable == dativarattra(n))then
850 allocate(starvars%dcv(n)%dat,source=metaanddatav(i)%dataattrv%dataattr(j)%attrv%dcv(k)%dat)
851 cycle cn
852 end if
853 end if
854 end do
855 end do
856 end do
857end do cn
858
859
860dn: do n=1,nanavarattr
861 do i =1, size(metaanddatav)
862 do j=1, size(metaanddatav(i)%dataattrv%dataattr)
863 do k=1, size(metaanddatav(i)%dataattrv%dataattr(j)%attrv%dcv)
864 if (.not. c_e(metaanddatav(i)%metadata%datetime%datetime)) then
865 if (metaanddatav(i)%dataattrv%dataattr(j)%attrv%dcv(k)%dat%btable == anavarattra(n))then
866 allocate(anastarvars%dcv(n)%dat,source=metaanddatav(i)%dataattrv%dataattr(j)%attrv%dcv(k)%dat)
867 cycle dn
868 end if
869 end if
870 end do
871 end do
872 end do
873end do dn
874
875
876!!--------------------------------------------------------------------------
877
878
879!!
880!! count all unique metadata
881!!
882
883if(ldegnet) then
884 nnetwork=1
885else
886 !nnetwork = count_distinct(metaanddatav(:)%metadata%network%vol7d_network, back=.TRUE.)
887 allocate (tmpnetwork(size(metaanddatav(:))),&
888 source=metaanddatav(:)%metadata%network%vol7d_network)
889 call sort(tmpnetwork)
890 nnetwork = count_distinct_sorted(tmpnetwork)
891end if
892
893!ntime = count_distinct(metaanddatav(:)%metadata%datetime%datetime, &
894! mask=c_e(metaanddatav(:)%metadata%datetime%datetime),back=.TRUE.)
895allocate (tmptime(size(metaanddatav(:))),&
896 source=metaanddatav(:)%metadata%datetime%datetime)
897call sort(tmptime)
898ntime = count_distinct_sorted(tmptime,mask=c_e(tmptime))
899
900!ntimerange = count_distinct(metaanddatav(:)%metadata%timerange%vol7d_timerange, &
901! mask=c_e(metaanddatav(:)%metadata%timerange%vol7d_timerange), back=.TRUE.)
902allocate (tmptimerange(size(metaanddatav(:))),&
903 source=metaanddatav(:)%metadata%timerange%vol7d_timerange)
904call sort(tmptimerange)
905ntimerange = count_distinct_sorted(tmptimerange,mask=c_e(tmptimerange))
906
907!nlevel = count_distinct(metaanddatav(:)%metadata%level%vol7d_level, &
908! mask=c_e(metaanddatav(:)%metadata%level%vol7d_level),back=.TRUE.)
909allocate (tmplevel(size(metaanddatav(:))),&
910 source=metaanddatav(:)%metadata%level%vol7d_level)
911call sort(tmplevel)
912nlevel = count_distinct_sorted(tmplevel,mask=c_e(tmplevel))
913
914!nana = count_distinct(metaanddatav(:)%metadata%ana%vol7d_ana, back=.TRUE.)
915allocate (tmpana(size(metaanddatav(:))),&
916 source=metaanddatav(:)%metadata%ana%vol7d_ana)
917call sort(tmpana)
918nana = count_distinct_sorted(tmpana)
919
920!!$if(ldegnet) then
921!!$ nnetwork=1
922!!$else
923!!$ nnetwork = size(metaanddatav(:)%metadata%network%vol7d_network)
924!!$end if
925!!$ntime = size(metaanddatav(:)%metadata%datetime%datetime)
926!!$ntimerange = size(metaanddatav(:)%metadata%timerange%vol7d_timerange)
927!!$nlevel = size(metaanddatav(:)%metadata%level%vol7d_level)
928!!$nana = size(metaanddatav(:)%metadata%ana%vol7d_ana)
929
930 ! var
931
932ndativarr = 0
933ndativari = 0
934ndativarb = 0
935ndativard = 0
936ndativarc = 0
937
938do i =1 ,size(vars%dcv)
939 associate(dato => vars%dcv(i)%dat)
940 select type (dato)
941 type is (dbadatar)
942 ndativarr = ndativarr + 1
943 type is (dbadatai)
944 ndativari = ndativari + 1
945 type is (dbadatab)
946 ndativarb = ndativarb + 1
947 type is (dbadatad)
948 ndativard = ndativard + 1
949 type is (dbadatac)
950 ndativarc = ndativarc + 1
951 end select
952 end associate
953end do
954
955
956 !attr
957
958ndatiattrr = 0
959ndatiattri = 0
960ndatiattrb = 0
961ndatiattrd = 0
962ndatiattrc = 0
963
964do i =1 ,size(starvars%dcv)
965 associate(dato => starvars%dcv(i)%dat)
966 select type (dato)
967 type is (dbadatar)
968 ndatiattrr = ndatiattrr + 1
969 type is (dbadatai)
970 ndatiattri = ndatiattri + 1
971 type is (dbadatab)
972 ndatiattrb = ndatiattrb + 1
973 type is (dbadatad)
974 ndatiattrd = ndatiattrd + 1
975 type is (dbadatac)
976 ndatiattrc = ndatiattrc + 1
977 end select
978 end associate
979end do
980
981
982 ! ana var
983
984nanavarr = 0
985nanavari = 0
986nanavarb = 0
987nanavard = 0
988nanavarc = 0
989
990do i =1 ,size(anavars%dcv)
991 associate(dato => anavars%dcv(i)%dat)
992 select type (dato)
993 type is (dbadatar)
994 nanavarr = nanavarr + 1
995 type is (dbadatai)
996 nanavari = nanavari + 1
997 type is (dbadatab)
998 nanavarb = nanavarb + 1
999 type is (dbadatad)
1000 nanavard = nanavard + 1
1001 type is (dbadatac)
1002 nanavarc = nanavarc + 1
1003 end select
1004 end associate
1005end do
1006
1007
1008 ! ana attr
1009
1010nanaattrr = 0
1011nanaattri = 0
1012nanaattrb = 0
1013nanaattrd = 0
1014nanaattrc = 0
1015
1016do i =1 ,size(anastarvars%dcv)
1017 associate(dato => anastarvars%dcv(i)%dat)
1018 select type (dato)
1019 type is (dbadatar)
1020 nanaattrr = nanaattrr + 1
1021 type is (dbadatai)
1022 nanaattri = nanaattri + 1
1023 type is (dbadatab)
1024 nanaattrb = nanaattrb + 1
1025 type is (dbadatad)
1026 nanaattrd = nanaattrd + 1
1027 type is (dbadatac)
1028 nanaattrc = nanaattrc + 1
1029 end select
1030 end associate
1031end do
1032
1033
1034 !refine
1035
1036ndativarattrr=0
1037ndativarattri=0
1038ndativarattrb=0
1039ndativarattrd=0
1040ndativarattrc=0
1041
1042if (ndatiattrr > 0 ) ndativarattrr=ndativarr+ndativari+ndativarb+ndativard+ndativarc
1043if (ndatiattri > 0 ) ndativarattri=ndativarr+ndativari+ndativarb+ndativard+ndativarc
1044if (ndatiattrb > 0 ) ndativarattrb=ndativarr+ndativari+ndativarb+ndativard+ndativarc
1045if (ndatiattrd > 0 ) ndativarattrd=ndativarr+ndativari+ndativarb+ndativard+ndativarc
1046if (ndatiattrc > 0 ) ndativarattrc=ndativarr+ndativari+ndativarb+ndativard+ndativarc
1047
1048
1049nanavarattrr=0
1050nanavarattri=0
1051nanavarattrb=0
1052nanavarattrd=0
1053nanavarattrc=0
1054
1055if (nanaattrr > 0 ) nanavarattrr=nanavarr+nanavari+nanavarb+nanavard+nanavarc
1056if (nanaattri > 0 ) nanavarattri=nanavarr+nanavari+nanavarb+nanavard+nanavarc
1057if (nanaattrb > 0 ) nanavarattrb=nanavarr+nanavari+nanavarb+nanavard+nanavarc
1058if (nanaattrd > 0 ) nanavarattrd=nanavarr+nanavari+nanavarb+nanavard+nanavarc
1059if (nanaattrc > 0 ) nanavarattrc=nanavarr+nanavari+nanavarb+nanavard+nanavarc
1060
1061
1062CALL init(this,time_definition=ltime_definition)
1063
1064!!$print *, "nana=",nana, "ntime=",ntime, "ntimerange=",ntimerange, &
1065!!$ "nlevel=",nlevel, "nnetwork=",nnetwork, &
1066!!$ "ndativarr=",ndativarr, "ndativari=",ndativari, &
1067!!$ "ndativarb=",ndativarb, "ndativard=",ndativard, "ndativarc=",ndativarc,&
1068!!$ "ndatiattrr=",ndatiattrr, "ndatiattri=",ndatiattri, "ndatiattrb=",ndatiattrb,&
1069!!$ "ndatiattrd=",ndatiattrd, "ndatiattrc=",ndatiattrc,&
1070!!$ "ndativarattrr=",ndativarattrr, "ndativarattri=",ndativarattri, "ndativarattrb=",ndativarattrb,&
1071!!$ "ndativarattrd=",ndativarattrd, "ndativarattrc=",ndativarattrc
1072!!$
1073!!$print *,"nanaattrr,nanaattri,nanaattrb,nanaattrd,nanaattrc"
1074!!$print *,nanaattrr,nanaattri,nanaattrb,nanaattrd,nanaattrc
1075
1076
1077call vol7d_alloc (this, &
1078nana=nana, ntime=ntime, ntimerange=ntimerange, &
1079nlevel=nlevel, nnetwork=nnetwork, &
1080ndativarr=ndativarr, ndativari=ndativari, ndativarb=ndativarb, ndativard=ndativard, ndativarc=ndativarc,&
1081ndatiattrr=ndatiattrr, ndatiattri=ndatiattri, ndatiattrb=ndatiattrb, ndatiattrd=ndatiattrd, ndatiattrc=ndatiattrc,&
1082ndativarattrr=ndativarattrr, &
1083ndativarattri=ndativarattri, &
1084ndativarattrb=ndativarattrb, &
1085ndativarattrd=ndativarattrd, &
1086ndativarattrc=ndativarattrc,&
1087nanavarr=nanavarr, nanavari=nanavari, nanavarb=nanavarb, nanavard=nanavard, nanavarc=nanavarc,&
1088nanaattrr=nanaattrr, nanaattri=nanaattri, nanaattrb=nanaattrb, nanaattrd=nanaattrd, nanaattrc=nanaattrc,&
1089nanavarattrr=nanavarattrr, &
1090nanavarattri=nanavarattri, &
1091nanavarattrb=nanavarattrb, &
1092nanavarattrd=nanavarattrd, &
1093nanavarattrc=nanavarattrc)
1094
1095
1096! fill metadata removing contextana metadata
1097
1098!nana=count_and_pack_distinct(metaanddatav(:)%metadata%ana%vol7d_ana,this%ana, back=.TRUE.)
1099!this%ana=pack_distinct(metaanddatav(:)%metadata%ana%vol7d_ana, nana, back=.TRUE.)
1100this%ana=pack_distinct_sorted(tmpana, nana)
1101deallocate(tmpana)
1102!call sort(this%ana)
1103
1104!ntime=count_and_pack_distinct(metaanddatav(:)%metadata%datetime%datetime,this%time, &
1105! mask=c_e(metaanddatav(:)%metadata%datetime%datetime), back=.TRUE.)
1106!this%time=pack_distinct(metaanddatav(:)%metadata%datetime%datetime, ntime, &
1107! mask=c_e(metaanddatav(:)%metadata%datetime%datetime),back=.TRUE.)
1108this%time=pack_distinct_sorted(tmptime, ntime,mask=c_e(tmptime))
1109deallocate(tmptime)
1110!call sort(this%time)
1111
1112!ntimerange=count_and_pack_distinct(metaanddatav(:)%metadata%timerange%vol7d_timerange,this%timerange, &
1113! mask=c_e(metaanddatav(:)%metadata%timerange%vol7d_timerange), back=.TRUE.)
1114!this%timerange=pack_distinct(metaanddatav(:)%metadata%timerange%vol7d_timerange, ntimerange, &
1115! mask=c_e(metaanddatav(:)%metadata%timerange%vol7d_timerange), back=.TRUE.)
1116this%timerange=pack_distinct_sorted(tmptimerange, ntimerange,mask=c_e(tmptimerange))
1117deallocate(tmptimerange)
1118!call sort(this%timerange)
1119
1120!nlevel=count_and_pack_distinct(metaanddatav(:)%metadata%level%vol7d_level,this%level, &
1121! mask=c_e(metaanddatav(:)%metadata%level%vol7d_level), back=.TRUE.)
1122!this%level=pack_distinct(metaanddatav(:)%metadata%level%vol7d_level, nlevel, &
1123! mask=c_e(metaanddatav(:)%metadata%level%vol7d_level), back=.TRUE.)
1124this%level=pack_distinct_sorted(tmplevel, nlevel,mask=c_e(tmplevel))
1125deallocate(tmplevel)
1126!call sort(this%level)
1127
1128if(ldegnet)then
1129 nnetwork=1
1130 ALLOCATE(this%network(1))
1131 this%network(1)=set_network
1132else
1133 !nnetwork=count_and_pack_distinct(metaanddatav(:)%metadata%network%vol7d_network,this%network, back=.TRUE.)
1134 !this%network=pack_distinct(metaanddatav(:)%metadata%network%vol7d_network, nnetwork, back=.TRUE.)
1135 this%network=pack_distinct_sorted(tmpnetwork, nnetwork)
1136 deallocate(tmpnetwork)
1137end if
1138!call sort(this%network)
1139
1140 ! var
1141
1142ndativarr = 0
1143ndativari = 0
1144ndativarb = 0
1145ndativard = 0
1146ndativarc = 0
1147
1148do i =1 ,size(vars%dcv)
1149 associate(dato => vars%dcv(i)%dat)
1150 select type (dato)
1151 type is (dbadatar)
1152 ndativarr = ndativarr + 1
1153 call init (this%dativar%r(ndativarr), btable=dato%btable)
1154 type is (dbadatai)
1155 ndativari = ndativari + 1
1156 call init (this%dativar%i(ndativari), btable=dato%btable)
1157 type is (dbadatab)
1158 ndativarb = ndativarb + 1
1159 call init (this%dativar%b(ndativarb), btable=dato%btable)
1160 type is (dbadatad)
1161 ndativard = ndativard + 1
1162 call init (this%dativar%d(ndativard), btable=dato%btable)
1163 type is (dbadatac)
1164 ndativarc = ndativarc + 1
1165 call init (this%dativar%c(ndativarc), btable=dato%btable)
1166 end select
1167 end associate
1168end do
1169
1170
1171 !attr
1172
1173ndatiattrr = 0
1174ndatiattri = 0
1175ndatiattrb = 0
1176ndatiattrd = 0
1177ndatiattrc = 0
1178
1179do i =1 ,size(starvars%dcv)
1180 associate(dato => starvars%dcv(i)%dat)
1181 select type (dato)
1182 type is (dbadatar)
1183 ndatiattrr = ndatiattrr + 1
1184 call init (this%datiattr%r(ndatiattrr), btable=dato%btable)
1185 type is (dbadatai)
1186 ndatiattri = ndatiattri + 1
1187 call init (this%datiattr%i(ndatiattri), btable=dato%btable)
1188 type is (dbadatab)
1189 ndatiattrb = ndatiattrb + 1
1190 call init (this%datiattr%b(ndatiattrb), btable=dato%btable)
1191 type is (dbadatad)
1192 ndatiattrd = ndatiattrd + 1
1193 call init (this%datiattr%d(ndatiattrd), btable=dato%btable)
1194 type is (dbadatac)
1195 ndatiattrc = ndatiattrc + 1
1196 call init (this%datiattr%c(ndatiattrc), btable=dato%btable)
1197 end select
1198 end associate
1199end do
1200
1201
1202 ! ana var
1203
1204nanavarr = 0
1205nanavari = 0
1206nanavarb = 0
1207nanavard = 0
1208nanavarc = 0
1209
1210do i =1 ,size(anavars%dcv)
1211 associate(dato => anavars%dcv(i)%dat)
1212 select type (dato)
1213 type is (dbadatar)
1214 nanavarr = nanavarr + 1
1215 call init (this%anavar%r(nanavarr), btable=dato%btable)
1216 type is (dbadatai)
1217 nanavari = nanavari + 1
1218 call init (this%anavar%i(nanavari), btable=dato%btable)
1219 type is (dbadatab)
1220 nanavarb = nanavarb + 1
1221 call init (this%anavar%b(nanavarb), btable=dato%btable)
1222 type is (dbadatad)
1223 nanavard = nanavard + 1
1224 call init (this%anavar%d(nanavard), btable=dato%btable)
1225 type is (dbadatac)
1226 nanavarc = nanavarc + 1
1227 call init (this%anavar%c(nanavarc), btable=dato%btable)
1228 end select
1229 end associate
1230end do
1231
1232
1233 ! ana attr
1234
1235nanaattrr = 0
1236nanaattri = 0
1237nanaattrb = 0
1238nanaattrd = 0
1239nanaattrc = 0
1240
1241do i =1 ,size(anastarvars%dcv)
1242 associate(dato => anastarvars%dcv(i)%dat)
1243 select type (dato)
1244 type is (dbadatar)
1245 nanaattrr = nanaattrr + 1
1246 call init (this%anaattr%r(nanaattrr), btable=dato%btable)
1247 type is (dbadatai)
1248 nanaattri = nanaattri + 1
1249 call init (this%anaattr%i(nanaattri), btable=dato%btable)
1250 type is (dbadatab)
1251 nanaattrb = nanaattrb + 1
1252 call init (this%anaattr%b(nanaattrb), btable=dato%btable)
1253 type is (dbadatad)
1254 nanaattrd = nanaattrd + 1
1255 call init (this%anaattr%d(nanaattrd), btable=dato%btable)
1256 type is (dbadatac)
1257 nanaattrc = nanaattrc + 1
1258 call init (this%anaattr%c(nanaattrc), btable=dato%btable)
1259 end select
1260 end associate
1261end do
1262
1263
1264 ! here we colcolate the link from attributes and vars
1265do i =1, size(vars%dcv)
1266 associate(dato => vars%dcv(i)%dat)
1267 if ( ndativarattri > 0 ) call init(this%dativarattr%i(i),btable=dato%btable)
1268 if ( ndativarattrr > 0 ) call init(this%dativarattr%r(i),btable=dato%btable)
1269 if ( ndativarattrd > 0 ) call init(this%dativarattr%d(i),btable=dato%btable)
1270 if ( ndativarattrb > 0 ) call init(this%dativarattr%b(i),btable=dato%btable)
1271 if ( ndativarattrc > 0 ) call init(this%dativarattr%c(i),btable=dato%btable)
1272 end associate
1273end do
1274
1275do i =1, size(anavars%dcv)
1276 associate(dato => anavars%dcv(i)%dat)
1277 if ( nanavarattri > 0 ) call init(this%anavarattr%i(i),btable=dato%btable)
1278 if ( nanavarattrr > 0 ) call init(this%anavarattr%r(i),btable=dato%btable)
1279 if ( nanavarattrd > 0 ) call init(this%anavarattr%d(i),btable=dato%btable)
1280 if ( nanavarattrb > 0 ) call init(this%anavarattr%b(i),btable=dato%btable)
1281 if ( nanavarattrc > 0 ) call init(this%anavarattr%c(i),btable=dato%btable)
1282 end associate
1283end do
1284
1285 ! set index in dativaratt*
1286call vol7d_set_attr_ind(this)
1287
1288call vol7d_alloc_vol (this)
1289
1290 ! Ora qui bisogna metterci dentro idati
1291indana = 0
1292indtime = 0
1293indnetwork = 0
1294indtime = 0
1295indtimerange = 0
1296indlevel = 0
1297do i =1, size(metaanddatav)
1298
1299 indana = index_sorted(this%ana, metaanddatav(i)%metadata%ana%vol7d_ana)
1300
1301 if (ldegnet)then
1302 indnetwork=1
1303 else
1304 indnetwork = index_sorted(this%network, metaanddatav(i)%metadata%network%vol7d_network)
1305 endif
1306
1307 if (c_e(metaanddatav(i)%metadata%datetime%datetime) .and. &
1308 c_e(metaanddatav(i)%metadata%timerange%vol7d_timerange) .and. &
1309 c_e(metaanddatav(i)%metadata%level%vol7d_level) ) then ! dati
1310
1311 indtime = index_sorted(this%time, metaanddatav(i)%metadata%datetime%datetime)
1312 indtimerange = index_sorted(this%timerange, metaanddatav(i)%metadata%timerange%vol7d_timerange)
1313 indlevel = index_sorted(this%level, metaanddatav(i)%metadata%level%vol7d_level)
1314
1315 do j=1, size(metaanddatav(i)%dataattrv%dataattr)
1316
1317 associate(dato => metaanddatav(i)%dataattrv%dataattr(j)%dat)
1318 select type (dato)
1319 type is (dbadatai)
1320 inddativar = firsttrue(dato%btable == this%dativar%i%btable)
1321 this%voldatii( &
1322 indana,indtime,indlevel,indtimerange,inddativar,indnetwork &
1323 ) = dato%value
1324
1325 type is (dbadatar)
1326 inddativar = firsttrue(dato%btable == this%dativar%r%btable)
1327 this%voldatir( &
1328 indana,indtime,indlevel,indtimerange,inddativar,indnetwork &
1329 ) = dato%value
1330
1331 type is (dbadatad)
1332 inddativar = firsttrue(dato%btable == this%dativar%d%btable)
1333 this%voldatid( &
1334 indana,indtime,indlevel,indtimerange,inddativar,indnetwork &
1335 ) = dato%value
1336
1337 type is (dbadatab)
1338 inddativar = firsttrue(dato%btable == this%dativar%b%btable)
1339 this%voldatib( &
1340 indana,indtime,indlevel,indtimerange,inddativar,indnetwork &
1341 ) = dato%value
1342
1343 type is (dbadatac)
1344 inddativar = firsttrue(dato%btable == this%dativar%c%btable)
1345 this%voldatic( &
1346 indana,indtime,indlevel,indtimerange,inddativar,indnetwork &
1347 ) = dato%value
1348
1349 end select
1350
1351
1352 ! dati attributes
1353 do k=1, size(metaanddatav(i)%dataattrv%dataattr(j)%attrv%dcv)
1354 associate(attr => metaanddatav(i)%dataattrv%dataattr(j)%attrv%dcv(k)%dat)
1355 select type (attr)
1356
1357 type is (dbadatai)
1358 inddativarattr = firsttrue(dato%btable == this%dativarattr%i%btable)
1359 indattrvar = firsttrue(attr%btable == this%datiattr%i%btable)
1360 this%voldatiattri( &
1361 indana,indtime,indlevel,indtimerange,inddativarattr,indnetwork,indattrvar &
1362 ) = attr%value
1363 type is (dbadatar)
1364 inddativarattr = firsttrue(dato%btable == this%dativarattr%r%btable)
1365 indattrvar = firsttrue(attr%btable == this%datiattr%r%btable)
1366 this%voldatiattrr( &
1367 indana,indtime,indlevel,indtimerange,inddativarattr,indnetwork,indattrvar &
1368 ) = attr%value
1369 type is (dbadatad)
1370 inddativarattr = firsttrue(dato%btable == this%dativarattr%d%btable)
1371 indattrvar = firsttrue(attr%btable == this%datiattr%d%btable)
1372 this%voldatiattrd( &
1373 indana,indtime,indlevel,indtimerange,inddativarattr,indnetwork,indattrvar &
1374 ) = attr%value
1375 type is (dbadatab)
1376 inddativarattr = firsttrue(dato%btable == this%dativarattr%b%btable)
1377 indattrvar = firsttrue(attr%btable == this%datiattr%b%btable)
1378 this%voldatiattrb( &
1379 indana,indtime,indlevel,indtimerange,inddativarattr,indnetwork,indattrvar &
1380 ) = attr%value
1381 type is (dbadatac)
1382 inddativarattr = firsttrue(dato%btable == this%dativarattr%c%btable)
1383 indattrvar = firsttrue(attr%btable == this%datiattr%c%btable)
1384 this%voldatiattrc( &
1385 indana,indtime,indlevel,indtimerange,inddativarattr,indnetwork,indattrvar &
1386 ) = attr%value
1387
1388 end select
1389 end associate
1390 end do
1391 end associate
1392 end do
1393
1394 else
1395 ! ana
1396 do j=1, size(metaanddatav(i)%dataattrv%dataattr)
1397
1398 associate(dato => metaanddatav(i)%dataattrv%dataattr(j)%dat)
1399 select type (dato)
1400 type is (dbadatai)
1401 indanavar = firsttrue(dato%btable == this%anavar%i%btable)
1402 this%volanai( &
1403 indana,indanavar,indnetwork &
1404 ) = dato%value
1405
1406 type is (dbadatar)
1407 indanavar = firsttrue(dato%btable == this%anavar%r%btable)
1408 this%volanar( &
1409 indana,indanavar,indnetwork &
1410 ) = dato%value
1411
1412 type is (dbadatad)
1413 indanavar = firsttrue(dato%btable == this%anavar%d%btable)
1414 this%volanad( &
1415 indana,indanavar,indnetwork &
1416 ) = dato%value
1417
1418 type is (dbadatab)
1419 indanavar = firsttrue(dato%btable == this%anavar%b%btable)
1420 this%volanab( &
1421 indana,indanavar,indnetwork &
1422 ) = dato%value
1423
1424 type is (dbadatac)
1425 indanavar = firsttrue(dato%btable == this%anavar%c%btable)
1426 this%volanac( &
1427 indana,indanavar,indnetwork &
1428 ) = dato%value
1429
1430 end select
1431
1432
1433 ! ana attributes
1434 do k=1, size(metaanddatav(i)%dataattrv%dataattr(j)%attrv%dcv)
1435 associate(attr => metaanddatav(i)%dataattrv%dataattr(j)%attrv%dcv(k)%dat)
1436 select type (attr)
1437
1438 type is (dbadatai)
1439 indanavarattr = firsttrue(dato%btable == this%anavarattr%i%btable)
1440 indattrvar = firsttrue(attr%btable == this%anaattr%i%btable)
1441 this%volanaattri( &
1442 indana,indanavarattr,indnetwork,indattrvar &
1443 ) = attr%value
1444 type is (dbadatar)
1445 indanavarattr = firsttrue(dato%btable == this%anavarattr%r%btable)
1446 indattrvar = firsttrue(attr%btable == this%anaattr%r%btable)
1447 this%volanaattrr( &
1448 indana,indanavarattr,indnetwork,indattrvar &
1449 ) = attr%value
1450 type is (dbadatad)
1451 indanavarattr = firsttrue(dato%btable == this%anavarattr%d%btable)
1452 indattrvar = firsttrue(attr%btable == this%anaattr%d%btable)
1453 this%volanaattrd( &
1454 indana,indanavarattr,indnetwork,indattrvar &
1455 ) = attr%value
1456 type is (dbadatab)
1457 indanavarattr = firsttrue(dato%btable == this%anavarattr%b%btable)
1458 indattrvar = firsttrue(attr%btable == this%anaattr%b%btable)
1459 this%volanaattrb( &
1460 indana,indanavarattr,indnetwork,indattrvar &
1461 ) = attr%value
1462 type is (dbadatac)
1463 indanavarattr = firsttrue(dato%btable == this%anavarattr%c%btable)
1464 indattrvar = firsttrue(attr%btable == this%anaattr%c%btable)
1465 this%volanaattrc( &
1466 indana,indanavarattr,indnetwork,indattrvar &
1467 ) = attr%value
1468
1469 end select
1470 end associate
1471 end do
1472 end associate
1473 end do
1474 end if
1475end do
1476
1477contains
1478
1479!!$!> /brief Return an dbadcv from a mixlist with dbadata* type
1480!!$function todcv_dbadat(this)
1481!!$type(dbadcv) :: todcv_dbadat !< array
1482!!$type(mixlist) :: this
1483!!$
1484!!$integer :: i
1485!!$
1486!!$allocate (todcv_dbadat%dcv(this%countelements()))
1487!!$
1488!!$call this%rewind()
1489!!$i=0
1490!!$do while(this%element())
1491!!$ i=i+1
1492!!$
1493!!$ associate (dato => this%current())
1494!!$ select type (dato)
1495!!$ type is (dbadatar)
1496!!$ allocate(todcv_dbadat%dcv(i)%dat,source=dato)
1497!!$ type is (dbadatai)
1498!!$ allocate(todcv_dbadat%dcv(i)%dat,source=dato)
1499!!$ type is (dbadatab)
1500!!$ allocate(todcv_dbadat%dcv(i)%dat,source=dato)
1501!!$ type is (dbadatad)
1502!!$ allocate(todcv_dbadat%dcv(i)%dat,source=dato)
1503!!$ type is (dbadatac)
1504!!$ allocate(todcv_dbadat%dcv(i)%dat,source=dato)
1505!!$ end select
1506!!$ end associate
1507!!$
1508!!$ call this%next()
1509!!$end do
1510!!$end function todcv_dbadat
1511
1512!!$! Definisce le funzioni count_distinct e pack_distinct
1513!!$#define VOL7D_POLY_TYPE TYPE(dbadata)
1514!!$#define VOL7D_POLY_TYPES _dbadata
1515!!$#undef ENABLE_SORT
1516!!$#include "array_utilities_inc.F90"
1517!!$#undef VOL7D_POLY_TYPE
1518!!$#undef VOL7D_POLY_TYPES
1519
1520
1521end subroutine dba2v7d
1522
1523
1524subroutine vol7d_dballe_import_dballevar(this)
1525
1526type(vol7d_var),pointer :: this(:)
1527INTEGER :: i,un,n
1528
1529IF (associated(this)) return
1530IF (allocated(blocal)) then
1531 ALLOCATE(this(size(blocal)))
1532 this=blocal
1533 return
1534end if
1535
1536un = open_dballe_file('dballe.txt', filetype_data)
1537IF (un < 0) then
1538
1539 call l4f_log(l4f_error,"error open_dballe_file: dballe.txt")
1540 CALL raise_error("error open_dballe_file: dballe.txt")
1541 return
1542end if
1543
1544n = 0
1545DO WHILE(.true.)
1546 READ(un,*,END=100)
1547 n = n + 1
1548ENDDO
1549100 CONTINUE
1550
1551IF (n > 0) THEN
1552 ALLOCATE(this(n))
1553 ALLOCATE(blocal(n))
1554 rewind(un)
1555 readline: do i = 1 ,n
1556 READ(un,'(1x,A6,1x,a65,a24,i4)')blocal(i)%btable,blocal(i)%description,blocal(i)%unit,&
1557 blocal(i)%scalefactor
1558 blocal(i)%btable(:1)="B"
1559 !print*,"B=",blocal(i)%btable
1560 !print*," D=",blocal(i)%description
1561 !PRINT*," U=",blocal(i)%unit
1562 !PRINT*," D=",blocal(i)%scalefactor
1563 ENDDO readline
1564
1565 CALL l4f_log(l4f_info,'Found '//trim(to_char(i-1))//' variables in dballe master table')
1566
1567 this=blocal
1568
1569ENDIF
1570CLOSE(un)
1571
1572END SUBROUTINE vol7d_dballe_import_dballevar
1573
1574
1575
1576!> \brief Integra il vettore delle variabili in vol7d con le descrizioni e le unità di misura
1577!!eventualmente mancanti.
1578
1579subroutine vol7d_dballe_set_var_du(this)
1580
1581TYPE(vol7d) :: this !< oggetto vol7d con le variabili da completare
1582integer :: i,j
1583type(vol7d_var),pointer :: dballevar(:)
1584
1585nullify(dballevar)
1586call vol7d_dballe_import_dballevar(dballevar)
1587
1588#undef VOL7D_POLY_NAME
1589#define VOL7D_POLY_NAME dativar
1590
1591
1592#undef VOL7D_POLY_TYPES_V
1593#define VOL7D_POLY_TYPES_V r
1594#include "vol7d_dballe_class_var_du.F90"
1595#undef VOL7D_POLY_TYPES_V
1596#define VOL7D_POLY_TYPES_V i
1597#include "vol7d_dballe_class_var_du.F90"
1598#undef VOL7D_POLY_TYPES_V
1599#define VOL7D_POLY_TYPES_V b
1600#include "vol7d_dballe_class_var_du.F90"
1601#undef VOL7D_POLY_TYPES_V
1602#define VOL7D_POLY_TYPES_V d
1603#include "vol7d_dballe_class_var_du.F90"
1604#undef VOL7D_POLY_TYPES_V
1605#define VOL7D_POLY_TYPES_V c
1606#include "vol7d_dballe_class_var_du.F90"
1607#undef VOL7D_POLY_TYPES_V
1608
1609#undef VOL7D_POLY_NAME
1610#define VOL7D_POLY_NAME anavar
1611
1612
1613#undef VOL7D_POLY_TYPES_V
1614#define VOL7D_POLY_TYPES_V r
1615#include "vol7d_dballe_class_var_du.F90"
1616#undef VOL7D_POLY_TYPES_V
1617#define VOL7D_POLY_TYPES_V i
1618#include "vol7d_dballe_class_var_du.F90"
1619#undef VOL7D_POLY_TYPES_V
1620#define VOL7D_POLY_TYPES_V b
1621#include "vol7d_dballe_class_var_du.F90"
1622#undef VOL7D_POLY_TYPES_V
1623#define VOL7D_POLY_TYPES_V d
1624#include "vol7d_dballe_class_var_du.F90"
1625#undef VOL7D_POLY_TYPES_V
1626#define VOL7D_POLY_TYPES_V c
1627#include "vol7d_dballe_class_var_du.F90"
1628#undef VOL7D_POLY_TYPES_V
1629
1630
1631#undef VOL7D_POLY_NAME
1632#define VOL7D_POLY_NAME datiattr
1633
1634
1635#undef VOL7D_POLY_TYPES_V
1636#define VOL7D_POLY_TYPES_V r
1637#include "vol7d_dballe_class_var_du.F90"
1638#undef VOL7D_POLY_TYPES_V
1639#define VOL7D_POLY_TYPES_V i
1640#include "vol7d_dballe_class_var_du.F90"
1641#undef VOL7D_POLY_TYPES_V
1642#define VOL7D_POLY_TYPES_V b
1643#include "vol7d_dballe_class_var_du.F90"
1644#undef VOL7D_POLY_TYPES_V
1645#define VOL7D_POLY_TYPES_V d
1646#include "vol7d_dballe_class_var_du.F90"
1647#undef VOL7D_POLY_TYPES_V
1648#define VOL7D_POLY_TYPES_V c
1649#include "vol7d_dballe_class_var_du.F90"
1650#undef VOL7D_POLY_TYPES_V
1651
1652
1653#undef VOL7D_POLY_NAME
1654#define VOL7D_POLY_NAME anaattr
1655
1656
1657#undef VOL7D_POLY_TYPES_V
1658#define VOL7D_POLY_TYPES_V r
1659#include "vol7d_dballe_class_var_du.F90"
1660#undef VOL7D_POLY_TYPES_V
1661#define VOL7D_POLY_TYPES_V i
1662#include "vol7d_dballe_class_var_du.F90"
1663#undef VOL7D_POLY_TYPES_V
1664#define VOL7D_POLY_TYPES_V b
1665#include "vol7d_dballe_class_var_du.F90"
1666#undef VOL7D_POLY_TYPES_V
1667#define VOL7D_POLY_TYPES_V d
1668#include "vol7d_dballe_class_var_du.F90"
1669#undef VOL7D_POLY_TYPES_V
1670#define VOL7D_POLY_TYPES_V c
1671#include "vol7d_dballe_class_var_du.F90"
1672#undef VOL7D_POLY_TYPES_V

Generated with Doxygen.