libsim Versione 7.2.6

◆ quaconcli()

subroutine, public quaconcli ( type(qcclitype), intent(inout) qccli,
character (len=10), intent(in), optional battrinv,
character (len=10), intent(in), optional battrout,
logical, dimension(:), intent(in), optional anamask,
logical, dimension(:), intent(in), optional timemask,
logical, dimension(:), intent(in), optional levelmask,
logical, dimension(:), intent(in), optional timerangemask,
logical, dimension(:), intent(in), optional varmask,
logical, dimension(:), intent(in), optional networkmask )

Controllo di Qualità climatico.

Questo è il vero e proprio controllo di qualità climatico. Avendo a disposizione un volume dati climatico contenente i percentili suddivisi per area, altezza sul livello del mare, per mese dell'anno viene selezionato il percentile e sulla base di questo vengono assegnate le opportune confidenze.

Parametri
[in,out]qccliOggetto per il controllo di qualità
[in]battrinvattributo invalidated in input/output
[in]battroutattributo con la confidenza climatologica in output
[in]anamaskFiltro sulle anagrafiche
[in]timemaskFiltro sul tempo
[in]levelmaskFiltro sui livelli
[in]timerangemaskfiltro sui timerange
[in]varmaskFiltro sulle variabili
[in]networkmaskFiltro sui network

Definizione alla linea 1070 del file modqccli.F90.

1072 if (anamaskl(indana).and.timemaskl(indtime).and.levelmaskl(indlevel).and. &
1073 timerangemaskl(indtimerange).and.varmaskl(inddativarr).and.networkmaskl(indnetwork).and.&
1074 c_e(qccli%v7d%voldatir(indana,indtime,indlevel,indtimerange,inddativarr,indnetwork)))then
1075
1076 if (indbattrinv > 0) then
1077 if( invalidated(qccli%v7d%voldatiattrb&
1078 (indana,indtime,indlevel,indtimerange,inddativarr,indnetwork,indbattrinv))) then
1079
1080 ! invalidated flag allready set
1081#ifdef DEBUG
1082 call l4f_log (l4f_debug,"qccli: skip station for a preceding invalidated flag")
1083#endif
1084 cycle
1085 end if
1086 end if
1087
1088 nintime=qccli%v7d%time(indtime)+timedelta_new(minute=30)
1089 CALL getval(nintime, month=mese, hour=ora)
1090
1091 time=cyclicdatetime_to_conventional(cyclicdatetime_new(month=mese, hour=ora))
1092 !call init(time, year=1001, month=mese, day=1, hour=ora, minute=00)
1093
1094!!$ print *,"data convenzionale per percentili: ",t2c(time)
1095
1096 level=qccli%v7d%level(indlevel)
1097
1098 call init(network,"qcclima-perc")
1099
1100 indcnetwork = index(qccli%extreme%network , network)
1101 indctime = index(qccli%extreme%time , time)
1102 indclevel = index(qccli%extreme%level , level)
1103 indctimerange = index(qccli%extreme%timerange , qccli%v7d%timerange(indtimerange))
1104
1105 ! attenzione attenzione TODO
1106 ! se leggo da bufr il default è char e non reale
1107 indcdativarr = index(qccli%extreme%dativar%r, qccli%v7d%dativar%r(inddativarr))
1108
1109!!$ print *,"dato ",qccli%v7d%timerange(indtimerange)
1110!!$ print *,"clima ",qccli%clima%timerange
1111!!$ call l4f_log(L4F_INFO,"Index:"// to_char(indctime)//to_char(indclevel)//&
1112!!$ to_char(indctimerange)//to_char(indcdativarr)//to_char(indcnetwork))
1113
1114 !if (indcana <= 0 .or. indctime <= 0 .or. indclevel <= 0 .or. indctimerange <= 0 .or. indcdativarr <= 0 &
1115 ! .or. indcnetwork <= 0 ) cycle
1116
1117!!$ print *,"vector time"
1118!!$ do i=1,size(qccli%extreme%time)
1119!!$ call display(qccli%extreme%time(i))
1120!!$ end do
1121!!$ print *,"time"
1122!!$ call display(time)
1123!!$ call display(level)
1124!!$ call display(qccli%v7d%timerange(indtimerange))
1125!!$ print *,"indici percentili",indctime,indclevel,indctimerange,indcdativarr,indcnetwork
1126 if (indctime <= 0 .or. indclevel <= 0 .or. indctimerange <= 0 .or. indcdativarr <= 0 &
1127 .or. indcnetwork <= 0 ) cycle
1128
1129 datoqui = qccli%v7d%voldatir (indana ,indtime ,indlevel ,indtimerange ,inddativarr, indnetwork )
1130
1131 if (c_e(datoqui)) then
1132
1133 ! find extreme in volume
1134 extremequii=rmiss
1135 extremequif=rmiss
1136 perc25=rmiss
1137 perc50=rmiss
1138 perc75=rmiss
1139
1140!!$ do i=1, size(qccli%extreme%ana)
1141!!$ print *,i
1142!!$ call display(qccli%extreme%ana(i))
1143!!$ end do
1144
1145 if (associated(qccli%extreme%voldatir)) then
1146
1147 if (qccli%height2level) then
1148 k=iclv(indana)
1149 else
1150 k=0
1151 end if
1152
1153
1154!!$ do i =1,size(qccli%extreme%ana)
1155!!$ call display(qccli%extreme%ana(i))
1156!!$ end do
1157
1158 desc=25 ! minimum
1159 write(ident,'("#",i2.2,2i3.3)')k,iarea,desc ! macro-area e descrittore
1160 call init(ana,ident=ident,lat=latc,lon=lonc)
1161 indcana=index(qccli%extreme%ana,ana)
1162 if (indcana > 0 )then
1163 perc25=qccli%extreme%voldatir(indcana,indctime,indclevel,indctimerange,indcdativarr,indcnetwork)
1164 end if
1165
1166 desc=50 ! mediana
1167 write(ident,'("#",i2.2,2i3.3)')k,iarea,desc ! macro-area e descrittore
1168 call init(ana,ident=ident,lat=latc,lon=lonc)
1169 indcana=index(qccli%extreme%ana,ana)
1170!!$ call display(ana)
1171!!$ print *,"indcana 50 ",indcana
1172 if (indcana > 0 )then
1173 perc50=qccli%extreme%voldatir(indcana,indctime,indclevel,indctimerange,indcdativarr,indcnetwork)
1174 end if
1175
1176 desc=75 ! maximum
1177 write(ident,'("#",i2.2,2i3.3)')k,iarea,desc ! macro-area e descrittore
1178 call init(ana,ident=ident,lat=latc,lon=lonc)
1179 indcana=index(qccli%extreme%ana,ana)
1180 if (indcana > 0 )then
1181 perc75=qccli%extreme%voldatir(indcana,indctime,indclevel,indctimerange,indcdativarr,indcnetwork)
1182 end if
1183 end if
1184
1185 if ( .not. c_e(perc25) .or. .not. c_e(perc50) .or. .not. c_e(perc75)) cycle
1186
1187!!$ print *, "datoqui: ",datoqui,"clima ->",perc25,perc50,perc75
1188
1189 !http://it.wikipedia.org/wiki/Funzione_di_ripartizione_della_variabile_casuale_normale
1190 ! 3.65 for 0.01% each side ( 0.02% total )
1191 extremequii=perc50 - (perc75 - perc25) *1.3 * 3.65 ! 1.3 to go to standard deviation and 3.65 to make 3.65 sigma
1192 extremequif=perc50 + (perc75 - perc25) *1.3 * 3.65 ! 1.3 to go to standard deviation and 3.65 to make 3.65 sigma
1193
1194#ifdef DEBUG
1195 call l4f_log (l4f_debug,"qccli: gross error check "//t2c(extremequii)//">"//t2c(datoqui)//"<"//t2c(extremequif))
1196#endif
1197
1198
1199 if ( datoqui <= extremequii .or. extremequif <= datoqui ) then
1200 ! make gross error check
1201
1202 !ATTENZIONE TODO : inddativarr È UNA GRANDE SEMPLIFICAZIONE NON VERA SE TIPI DI DATO DIVERSI !!!!
1203#ifdef DEBUG
1204 call l4f_log (l4f_debug,"qccli: gross error check flag set to bad")
1205#endif
1206 qccli%v7d%voldatiattrb(indana,indtime,indlevel,indtimerange,inddativarr,indnetwork,indbattrout)=qcpar%gross_error
1207
1208 if ( associated ( qccli%data_id_in)) then
1209#ifdef DEBUG
1210 call l4f_log (l4f_debug,"id: "//t2c(&
1211 qccli%data_id_in(indana,indtime,indlevel,indtimerange,indnetwork)))
1212#endif
1213 qccli%data_id_out(indana,indtime,indlevel,indtimerange,indnetwork)=&
1214 qccli%data_id_in(indana,indtime,indlevel,indtimerange,indnetwork)
1215 end if
1216
1217
1218 else if (.not. vdge(qccli%v7d%voldatiattrb(indana,indtime,indlevel,indtimerange,&
1219 inddativarr,indnetwork,indbattrout))) then
1220
1221 ! gross error check allready done
1222#ifdef DEBUG
1223 call l4f_log (l4f_warn,"qccli: skip station for a preceding gross error check flagged bad")
1224#endif
1225 else
1226
1227 ! normalize wihout call the subroutine to be more fast and do not change data volume
1228
1229 !print *," --------> ",perc25,perc50,perc75,base_value(qccli%v7d%dativar%r(inddativarr)%btable)
1230 datoqui = (datoqui - perc50) / (perc75 - perc25) + base_value(qccli%v7d%dativar%r(inddativarr)%btable)
1231 !print *,"normalizzato=",datoqui
1232
1233 ! start to compare with clima dataset (NDI)
1234 call init(network,"qcclima-ndi")
1235 ! reset the level to standard input data for everyone
1236 level=qccli%v7d%level(indlevel)
1237 time=cyclicdatetime_to_conventional(cyclicdatetime_new(month=mese))
1238
1239 indcnetwork = index(qccli%clima%network , network)
1240 indctime = index(qccli%clima%time , time)
1241 indclevel = index(qccli%clima%level , level)
1242 indctimerange = index(qccli%clima%timerange , qccli%v7d%timerange(indtimerange))
1243
1244 ! attenzione attenzione TODO
1245 ! se leggo da bufr il default è char e non reale
1246 indcdativarr = index(qccli%clima%dativar%r, qccli%v7d%dativar%r(inddativarr))
1247
1248
1249!!$ print *,"indici clima", indctime, indclevel, indctimerange, indcdativarr, indcnetwork
1250 if (indctime <= 0 .or. indclevel <= 0 .or. indctimerange <= 0 .or. indcdativarr <= 0 &
1251 .or. indcnetwork <= 0 ) cycle
1252
1253 !climat check
1254
1255 do desc=1,size(qccli%clima%ana)
1256
1257 climaquii=rmiss
1258 climaquif=rmiss
1259
1260 write(ident,'("#",i2.2,2i3.3)')0,0,min(desc,size(qccli%clima%ana)-1) *10 ! macro-area e descrittore
1261 call init(ana,ident=ident,lat=0d0,lon=0d0)
1262 indcana=index(qccli%clima%ana,ana)
1263 if (indcana > 0 )then
1264 climaquif=qccli%clima%voldatir(indcana,indctime,indclevel,indctimerange,indcdativarr,indcnetwork)
1265 end if
1266
1267
1268 write(ident,'("#",i2.2,2i3.3)')0,0,(desc-1)*10 ! macro-area e descrittore
1269 call init(ana,ident=ident,lat=0d0,lon=0d0)
1270 indcana=index(qccli%clima%ana,ana)
1271! call display(ana)
1272! print*,indcana
1273 if (indcana > 0 )then
1274 climaquii=qccli%clima%voldatir(indcana,indctime,indclevel,indctimerange,indcdativarr,indcnetwork)
1275 end if
1276
1277
1278!!$ call l4f_log (L4F_INFO,"ident: "//qccli%clima%ana(indcana)%ident//ident)
1279 !if ( match(qccli%clima%ana(indcana)%ident,ident) .and. c_e(climaquii) .and. c_e(climaquif)) then
1280 if ( c_e(climaquii) .and. c_e(climaquif )) then
1281
1282!!$ print *, "son qua",trim(qccli%clima%ana(indcana)%ident),trim(ident)
1283!!$ where (match(qccli%clima%ana(:)%ident,ident).and. &
1284!!$ c_e(qccli%clima%voldatir(indcana,indctime,indclevel,indctimerange,indcdativarr,indcnetwork)))
1285!!$ call l4f_log (L4F_INFO,"macroarea,iarea,mese,altezza,level "//&
1286!!$ trim(to_char(qccli%in_macroa(indana)))//" "//trim(to_char(iarea))&
1287!!$ //" "//trim(to_char(mese))//" "//trim(to_char(altezza))//" "//trim(to_char(level)))
1288!!$
1289
1290!!$ print*,"ndi=",climaquii,datoqui,climaquif
1291
1292 if ( (climaquii <= datoqui.and. datoqui < climaquif) .or. &
1293 (desc == 1 .and. datoqui < climaquii) .or. &
1294 (desc == size(qccli%clima%ana) .and. datoqui >= climaquif) ) then
1295
1296 if (c_e(qccli%clima%voldatiattrb(indcana &
1297 ,indctime,indclevel,indctimerange,indcdativarr,indcnetwork,1))) then
1298
1299 !ATTENZIONE TODO : inddativarr È UNA GRANDE SEMPLIFICAZIONE NON VERA SE TIPI DI DATO DIVERSI !!!!
1300
1301 !indcana is the left value as descr-1
1302 qccli%v7d%voldatiattrb(indana,indtime,indlevel,indtimerange,inddativarr,indnetwork,indbattrout)=&
1303 max(qccli%clima%voldatiattrb&
1304 (indcana,indctime,indclevel,indctimerange,indcdativarr,indcnetwork,1)&
1305 , 1_int_b) ! 0 reserved for gross error check
1306
1307#ifdef DEBUG
1308 call l4f_log (l4f_debug,"data ndi: "//t2c(datoqui)//"->"//&
1309 t2c(qccli%clima%voldatiattrb(indcana,indctime,indclevel,indctimerange,indcdativarr,indcnetwork,1))&
1310 //" : "//t2c(qccli%v7d%time(indtime)))
1311 call l4f_log (l4f_debug,"limits: "//t2c(indcana)//":"//qccli%clima%ana(indcana)%ident//&
1312 " : "//t2c(climaquii)//" - "//t2c(climaquif)//" : "//t2c(qccli%clima%time(indctime)))
1313 call l4f_log (l4f_debug,"qccli: clima check "//t2c(datoqui)//" confidence: "//&
1314 t2c(qccli%v7d%voldatiattrb(indana,indtime,indlevel,indtimerange,inddativarr,indnetwork,indbattrout))&
1315 //" : "//t2c(qccli%v7d%time(indtime)))
1316#endif
1317
1318
1319 if ( associated ( qccli%data_id_in)) then
1320#ifdef DEBUG
1321 call l4f_log (l4f_debug,"id: "//t2c(&
1322 qccli%data_id_in(indana,indtime,indlevel,indtimerange,indnetwork)))
1323#endif
1324 qccli%data_id_out(indana,indtime,indlevel,indtimerange,indnetwork)=&
1325 qccli%data_id_in(indana,indtime,indlevel,indtimerange,indnetwork)
1326 end if
1327 end if
1328 end if
1329!!$ end where
1330 end if
1331 end do
1332 end if
1333 end if
1334 end if
1335 end do
1336 end do
1337 end do
1338 end do
1339 end do
1340!!$ end forall
1341end do
1342
1343!!$print*,"risultato"
1344!!$print *,qccli%v7d%voldatiattrb(:,:,:,:,:,:,indbattrout)
1345!!$print*,"fine risultato"
1346
1347
1348return
1349
1350end subroutine quaconcli
1351
1352
1353!>\brief Return a conventional level for climatological definition.
1354!! Starting from heigth of station in meter return a level where is defined (I hope)
1355!! the climatological value
1356subroutine cli_level(heigth,level)
1357
1358real,intent(in) :: heigth !< heigth of station in meter
1359TYPE(vol7d_level),intent(out):: level !< level where is defined the climatological value (layer)
1360
1361integer :: i
1362
1363i=imiss
1364
1365if (c_e(heigth)) then
1366 i=firsttrue(cli_level1 <= heigth .and. heigth <= cli_level2 )
1367end if
1368
1369if (i >= 1 .and. i <= 10 ) then
1370 call init(level, 102,cli_level1(i)*1000,102,cli_level2(i)*1000)
1371else
1372 if (c_e(i)) CALL l4f_log(l4f_debug,"cli_level: strange level, heigth: "//to_char(heigth))
1373 call init(level)
1374end if
1375
1376end subroutine cli_level
1377
1378
1379!> Initialize level according to climate definition at SIMC
1380subroutine cli_level_generate(level)
1381
1382TYPE(vol7d_level),intent(out):: level(:) !< level where is defined the climatological value (layer)
1383
1384integer :: i
1385
1386if (size(level) /= cli_nlevel ) then
1387 call l4f_log(l4f_error,"cli_level_generate: level dimension /= "//trim(to_char(cli_nlevel)))
1388 call raise_error("cli_level_generate: level dimension /= "//trim(to_char(cli_nlevel)))
1389end if
1390
1391do i=1,cli_nlevel
1392 call init(level(i), 102,cli_level1(i)*1000,102,cli_level2(i)*1000)
1393end do
1394
1395end subroutine cli_level_generate
1396
1397
1398!!$subroutine qccli_validate(qccli)
1399!!$type(qcclitype),intent(in) :: qccli
1400!!$
1401!!$!todo da validare
1402!!$
1403!!$return
1404!!$end subroutine qccli_validate
1405
1406
1407!> Rielabora le macroarea facendole Valentine/Elements thinking
1408!> OBSOLETA
1409integer function supermacroa(macroa)
1410
1411integer, intent(in) :: macroa
1412 ! rielabora le macroarea facendole Valentine thinking
1413
1414supermacroa=imiss
1415
1416if (macroa == 1 .or. macroa == 2 .or. macroa == 4 ) supermacroa=3
1417if (macroa == 3 .or. macroa == 5 .or. macroa == 6 ) supermacroa=2
1418if (macroa == 7 .or. macroa == 8 ) supermacroa=1
1419
1420!!$ ! rielabora le macroarea facendole Valentine thinking
1421!!$
1422!!$ if (qccli%in_macroa(indana) == 1 .or. qccli%in_macroa(indana) == 2 .or. qccli%in_macroa(indana) == 4 ) iarea=3
1423!!$ if (qccli%in_macroa(indana) == 3 .or. qccli%in_macroa(indana) == 5 .or. qccli%in_macroa(indana) == 6 ) iarea=2
1424!!$ if (qccli%in_macroa(indana) == 7 .or. qccli%in_macroa(indana) == 8 ) iarea=1
1425
1426end function supermacroa
1427
1428
1429SUBROUTINE qc_compute_percentile(this, perc_vals,cyclicdt,presentperc, presentnumb)
1430
1431TYPE(qcclitype),INTENT(inout) :: this !< volume providing data to be computed and output data. Input data are not modified by the method, apart from performing a \a vol7d_alloc_vol on it
1432!TYPE(timedelta),INTENT(in) :: step !< length of the step over which the statistical processing is performed
1433!TYPE(datetime),INTENT(in),OPTIONAL :: start !< start of statistical processing interval
1434!TYPE(datetime),INTENT(in),OPTIONAL :: stopp !< end of statistical processing interval
1435real,intent(in) :: perc_vals(:) !< percentile values to use in compute, between 0. and 100.
1436TYPE(cyclicdatetime),INTENT(in) :: cyclicdt !< cyclic date and time
1437real, optional :: presentperc !< percentual of data present for compute (default=not used)
1438integer, optional :: presentnumb !< number of data present for compute (default=not used)
1439!!$logical, optional :: height2level !< use conventional level starting from station height
1440
1441integer :: indana,indtime,indvar,indnetwork,indlevel ,indtimerange ,inddativarr,i,j,k,iana,narea
1442
1443REAL, DIMENSION(:),allocatable :: perc
1444TYPE(vol7d_var) :: var
1445character(len=vol7d_ana_lenident) :: ident
1446character(len=1) :: type
1447integer :: areav(size(this%v7d%ana)),iclv(size(this%v7d%ana))
1448real :: height
1449logical,allocatable :: mask(:,:,:),maskplus(:,:,:), maskarea(:)
1450integer,allocatable :: area(:)
1451real :: lpresentperc
1452integer :: lpresentnumb
1453
1454lpresentperc=optio_r(presentperc)
1455lpresentnumb=optio_i(presentnumb)
1456
1457allocate (perc(size(perc_vals)))
1458
1459call delete(this%extreme)
1460CALL init(this%extreme, time_definition=this%v7d%time_definition)
1461
1462call init(var, btable="B01192") ! MeteoDB station ID that here is the number of area
1463
1464type=cmiss
1465indvar = index(this%v7d%anavar, var, type=type)
1466indnetwork=min(1,size(this%v7d%network))
1467
1468if( indvar > 0 .and. indnetwork > 0 ) then
1469 select case (type)
1470 case("d")
1471 areav=integerdat(this%v7d%volanad(:,indvar,indnetwork),this%v7d%anavar%d(indvar))
1472 case("r")
1473 areav=integerdat(this%v7d%volanar(:,indvar,indnetwork),this%v7d%anavar%r(indvar))
1474 case("i")
1475 areav=integerdat(this%v7d%volanai(:,indvar,indnetwork),this%v7d%anavar%i(indvar))
1476 case("b")
1477 areav=integerdat(this%v7d%volanab(:,indvar,indnetwork),this%v7d%anavar%b(indvar))
1478 case("c")
1479 areav=integerdat(this%v7d%volanac(:,indvar,indnetwork),this%v7d%anavar%c(indvar))
1480 case default
1481 areav=imiss
1482 end select
1483else
1484 areav=imiss
1485end if
1486
1487allocate(maskarea(size(this%v7d%ana)))
1488maskarea(:)= areav(:) /= imiss
1489narea=count_distinct(areav,maskarea)
1490allocate(area(narea))
1491area=pack_distinct(areav,narea,maskarea)
1492deallocate(maskarea)
1493if (this%height2level) then
1494 call vol7d_alloc(this%extreme,nana=narea*size(perc_vals)*cli_nlevel)
1495else
1496 call vol7d_alloc(this%extreme,nana=narea*size(perc_vals))
1497endif
1498
1499if (this%height2level) then
1500
1501 call init(var, btable="B07030") ! height
1502
1503 type=cmiss
1504 indvar = index(this%v7d%anavar, var, type=type)
1505
1506!!$#ifdef DEBUG
1507!!$ CALL l4f_log(L4F_DEBUG, 'SIZE this anavar r '//t2c(SIZE(this%v7d%anavar%r)))
1508!!$ if (ASSOCIATED(this%anavar%r)) then
1509!!$ CALL l4f_log(L4F_DEBUG, 'SIZE this anavar r '//t2c(SIZE(this%anavar%r)))
1510!!$ CALL l4f_log(L4F_DEBUG, 'SIZE this anavar r btable '//t2c(this%anavar%r(SIZE(this%anavar%r))%btable))
1511!!$ endif
1512!!$ CALL l4f_log(L4F_DEBUG, 'SIZE this anavar i '//t2c(SIZE(this%anavar%i)))
1513!!$ if (ASSOCIATED(this%anavar%i)) then
1514!!$ CALL l4f_log(L4F_DEBUG, 'SIZE this anavar i '//t2c(SIZE(this%anavar%i)))
1515!!$ CALL l4f_log(L4F_DEBUG, 'SIZE this anavar i btable '//t2c(this%anavar%i(SIZE(this%anavar%i))%btable))
1516!!$ endif
1517!!$ CALL l4f_log(L4F_DEBUG, 'SIZE this anavar d '//t2c(SIZE(this%anavar%d)))
1518!!$ if (ASSOCIATED(this%anavar%d)) then
1519!!$ CALL l4f_log(L4F_DEBUG, 'SIZE this anavar d '//t2c(SIZE(this%anavar%d)))
1520!!$ CALL l4f_log(L4F_DEBUG, 'SIZE this anavar d btable '//t2c(this%anavar%d(SIZE(this%anavar%d))%btable))
1521!!$ endif
1522!!$ CALL l4f_log(L4F_DEBUG, 'SIZE this anavar b '//t2c(SIZE(this%anavar%b)))
1523!!$ if (ASSOCIATED(this%anavar%b)) then
1524!!$ CALL l4f_log(L4F_DEBUG, 'SIZE this anavar b '//t2c(SIZE(this%anavar%b)))
1525!!$ CALL l4f_log(L4F_DEBUG, 'SIZE this anavar b btable '//t2c(this%anavar%d(SIZE(this%anavar%b))%btable))
1526!!$ endif
1527!!$ CALL l4f_log(L4F_DEBUG, 'SIZE this anavar c '//t2c(SIZE(this%anavar%c)))
1528!!$ if (ASSOCIATED(this%anavar%c)) then
Index method.

Generated with Doxygen.