libsim  Versione8.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 
)

import dba objects in vol7d

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

Definizione alla linea 845 del file vol7d_dballe_class.F03.

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
857 end do cn
858 
859 
860 dn: 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
873 end do dn
874 
875 
876 !!--------------------------------------------------------------------------
877 
878 
879 !!
880 !! count all unique metadata
881 !!
882 
883 if(ldegnet) then
884  nnetwork=1
885 else
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)
891 end if
892 
893 !ntime = count_distinct(metaanddatav(:)%metadata%datetime%datetime, &
894 ! mask=c_e(metaanddatav(:)%metadata%datetime%datetime),back=.TRUE.)
895 allocate (tmptime(size(metaanddatav(:))),&
896  source=metaanddatav(:)%metadata%datetime%datetime)
897 call sort(tmptime)
898 ntime = 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.)
902 allocate (tmptimerange(size(metaanddatav(:))),&
903  source=metaanddatav(:)%metadata%timerange%vol7d_timerange)
904 call sort(tmptimerange)
905 ntimerange = 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.)
909 allocate (tmplevel(size(metaanddatav(:))),&
910  source=metaanddatav(:)%metadata%level%vol7d_level)
911 call sort(tmplevel)
912 nlevel = count_distinct_sorted(tmplevel,mask=c_e(tmplevel))
913 
914 !nana = count_distinct(metaanddatav(:)%metadata%ana%vol7d_ana, back=.TRUE.)
915 allocate (tmpana(size(metaanddatav(:))),&
916  source=metaanddatav(:)%metadata%ana%vol7d_ana)
917 call sort(tmpana)
918 nana = 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 
932 ndativarr = 0
933 ndativari = 0
934 ndativarb = 0
935 ndativard = 0
936 ndativarc = 0
937 
938 do 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
953 end do
954 
955 
956  !attr
957 
958 ndatiattrr = 0
959 ndatiattri = 0
960 ndatiattrb = 0
961 ndatiattrd = 0
962 ndatiattrc = 0
963 
964 do 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
979 end do
980 
981 
982  ! ana var
983 
984 nanavarr = 0
985 nanavari = 0
986 nanavarb = 0
987 nanavard = 0
988 nanavarc = 0
989 
990 do 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
1005 end do
1006 
1007 
1008  ! ana attr
1009 
1010 nanaattrr = 0
1011 nanaattri = 0
1012 nanaattrb = 0
1013 nanaattrd = 0
1014 nanaattrc = 0
1015 
1016 do 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
1031 end do
1032 
1033 
1034  !refine
1035 
1036 ndativarattrr=0
1037 ndativarattri=0
1038 ndativarattrb=0
1039 ndativarattrd=0
1040 ndativarattrc=0
1041 
1042 if (ndatiattrr > 0 ) ndativarattrr=ndativarr+ndativari+ndativarb+ndativard+ndativarc
1043 if (ndatiattri > 0 ) ndativarattri=ndativarr+ndativari+ndativarb+ndativard+ndativarc
1044 if (ndatiattrb > 0 ) ndativarattrb=ndativarr+ndativari+ndativarb+ndativard+ndativarc
1045 if (ndatiattrd > 0 ) ndativarattrd=ndativarr+ndativari+ndativarb+ndativard+ndativarc
1046 if (ndatiattrc > 0 ) ndativarattrc=ndativarr+ndativari+ndativarb+ndativard+ndativarc
1047 
1048 
1049 nanavarattrr=0
1050 nanavarattri=0
1051 nanavarattrb=0
1052 nanavarattrd=0
1053 nanavarattrc=0
1054 
1055 if (nanaattrr > 0 ) nanavarattrr=nanavarr+nanavari+nanavarb+nanavard+nanavarc
1056 if (nanaattri > 0 ) nanavarattri=nanavarr+nanavari+nanavarb+nanavard+nanavarc
1057 if (nanaattrb > 0 ) nanavarattrb=nanavarr+nanavari+nanavarb+nanavard+nanavarc
1058 if (nanaattrd > 0 ) nanavarattrd=nanavarr+nanavari+nanavarb+nanavard+nanavarc
1059 if (nanaattrc > 0 ) nanavarattrc=nanavarr+nanavari+nanavarb+nanavard+nanavarc
1060 
1061 
1062 CALL 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 
1077 call vol7d_alloc (this, &
1078 nana=nana, ntime=ntime, ntimerange=ntimerange, &
1079 nlevel=nlevel, nnetwork=nnetwork, &
1080 ndativarr=ndativarr, ndativari=ndativari, ndativarb=ndativarb, ndativard=ndativard, ndativarc=ndativarc,&
1081 ndatiattrr=ndatiattrr, ndatiattri=ndatiattri, ndatiattrb=ndatiattrb, ndatiattrd=ndatiattrd, ndatiattrc=ndatiattrc,&
1082 ndativarattrr=ndativarattrr, &
1083 ndativarattri=ndativarattri, &
1084 ndativarattrb=ndativarattrb, &
1085 ndativarattrd=ndativarattrd, &
1086 ndativarattrc=ndativarattrc,&
1087 nanavarr=nanavarr, nanavari=nanavari, nanavarb=nanavarb, nanavard=nanavard, nanavarc=nanavarc,&
1088 nanaattrr=nanaattrr, nanaattri=nanaattri, nanaattrb=nanaattrb, nanaattrd=nanaattrd, nanaattrc=nanaattrc,&
1089 nanavarattrr=nanavarattrr, &
1090 nanavarattri=nanavarattri, &
1091 nanavarattrb=nanavarattrb, &
1092 nanavarattrd=nanavarattrd, &
1093 nanavarattrc=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.)
1100 this%ana=pack_distinct_sorted(tmpana, nana)
1101 deallocate(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.)
1108 this%time=pack_distinct_sorted(tmptime, ntime,mask=c_e(tmptime))
1109 deallocate(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.)
1116 this%timerange=pack_distinct_sorted(tmptimerange, ntimerange,mask=c_e(tmptimerange))
1117 deallocate(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.)
1124 this%level=pack_distinct_sorted(tmplevel, nlevel,mask=c_e(tmplevel))
1125 deallocate(tmplevel)
1126 !call sort(this%level)
1127 
1128 if(ldegnet)then
1129  nnetwork=1
1130  ALLOCATE(this%network(1))
1131  this%network(1)=set_network
1132 else
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)
1137 end if
1138 !call sort(this%network)
1139 
1140  ! var
1141 
1142 ndativarr = 0
1143 ndativari = 0
1144 ndativarb = 0
1145 ndativard = 0
1146 ndativarc = 0
1147 
1148 do 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
1168 end do
1169 
1170 
1171  !attr
1172 
1173 ndatiattrr = 0
1174 ndatiattri = 0
1175 ndatiattrb = 0
1176 ndatiattrd = 0
1177 ndatiattrc = 0
1178 
1179 do 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
1199 end do
1200 
1201 
1202  ! ana var
1203 
1204 nanavarr = 0
1205 nanavari = 0
1206 nanavarb = 0
1207 nanavard = 0
1208 nanavarc = 0
1209 
1210 do 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
1230 end do
1231 
1232 
1233  ! ana attr
1234 
1235 nanaattrr = 0
1236 nanaattri = 0
1237 nanaattrb = 0
1238 nanaattrd = 0
1239 nanaattrc = 0
1240 
1241 do 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
1261 end do
1262 
1263 
1264  ! here we colcolate the link from attributes and vars
1265 do 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
1273 end do
1274 
1275 do 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
1283 end do
1284 
1285  ! set index in dativaratt*
1286 call vol7d_set_attr_ind(this)
1287 
1288 call vol7d_alloc_vol (this)
1289 
1290  ! Ora qui bisogna metterci dentro idati
1291 indana = 0
1292 indtime = 0
1293 indnetwork = 0
1294 indtime = 0
1295 indtimerange = 0
1296 indlevel = 0
1297 do 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
1475 end do
1476 
1477 contains
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 
1521 end subroutine dba2v7d
1522 
1523 
1524 subroutine vol7d_dballe_import_dballevar(this)
1525 
1526 type(vol7d_var),pointer :: this(:)
1527 INTEGER :: i,un,n
1528 
1529 IF (associated(this)) return
1530 IF (allocated(blocal)) then
1531  ALLOCATE(this(size(blocal)))
1532  this=blocal
1533  return
1534 end if
1535 
1536 un = open_dballe_file('dballe.txt', filetype_data)
1537 IF (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
1542 end if
1543 
1544 n = 0
1545 DO WHILE(.true.)
1546  READ(un,*,end=100)
1547  n = n + 1
1548 ENDDO
1549 100 CONTINUE
1550 
1551 IF (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 
1569 ENDIF
1570 CLOSE(un)
1571 
1572 END SUBROUTINE vol7d_dballe_import_dballevar
1573 
1574 
1575 
1578 
1579 subroutine vol7d_dballe_set_var_du(this)
1580 
1581 TYPE(vol7d) :: this
1582 integer :: i,j
1583 type(vol7d_var),pointer :: dballevar(:)
1584 
1585 nullify(dballevar)
1586 call 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
1673 
1674 
1675 deallocate(dballevar)
1676 
1677 return
1678 
1679 end subroutine vol7d_dballe_set_var_du
1680 
1681 
1682 

Generated with Doxygen.