|
◆ quacontem()
subroutine, public modqctem::quacontem |
( |
type(qctemtype), intent(inout) |
qctem, |
|
|
character (len=10), intent(in), optional |
battrinv, |
|
|
character (len=10), intent(in), optional |
battrcli, |
|
|
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à temporale.
Questo è il vero e proprio controllo di qualità temporale.
- Parametri
-
[in,out] | qctem | Oggetto per il controllo di qualità |
[in] | battrinv | attributo invalidated in input |
[in] | battrcli | attributo con la confidenza climatologica in input |
[in] | battrout | attributo con la confidenza temporale in output |
[in] | anamask | Filtro sulle anagrafiche |
[in] | timemask | Filtro sul tempo |
[in] | levelmask | Filtro sui livelli |
[in] | timerangemask | filtro sui timerange |
[in] | varmask | Filtro sulle variabili |
[in] | networkmask | Filtro sui network |
Definizione alla linea 557 del file modqctem.F90.
557 "It's better to do a reform on ana to v7d after peeling, before spatial QC") 563 if (indbattrcli > 0) then 564 if( .not. vdge(qctem%v7d%voldatiattrb& 565 (indana,indtime,indlevel,indtimerange,inddativarr,indnetwork,indbattrcli))) then 566 call l4f_category_log(qctem%category,l4f_warn,& 567 "It's better to do a reform on ana to v7d after peeling, before spatial QC") 574 if (qctem%operation == "run") then 576 indclevel = index(qctem%clima%level , qctem%v7d%level(indlevel)) 577 indctimerange = index(qctem%clima%timerange , qctem%v7d%timerange(indtimerange)) 581 indcdativarr = index(qctem%clima%dativar%r, qctem%v7d%dativar%r(inddativarr)) 584 call l4f_log(l4f_debug, "QCtem Index:"// to_char(indctime)//to_char(indclevel)//& 585 to_char(indctimerange)//to_char(indcdativarr)//to_char(indcnetworks)) 587 if ( indctime <= 0 .or. indclevel <= 0 .or. indctimerange <= 0 .or. indcdativarr <= 0 & 588 .or. indcnetworks <= 0 ) cycle 597 indtimenear=indtime-1 598 datoprima = qctem%v7d%voldatir (indana ,indtimenear ,indlevel ,indtimerange ,inddativarr, indnetwork ) 599 prima = qctem%v7d%time (indtimenear) 602 if (indbattrinv > 0) then 603 if( invalidated(qctem%v7d%voldatiattrb& 604 (indana,indtimenear,indlevel,indtimerange,inddativarr,indnetwork,indbattrinv))) then 610 if (indbattrcli > 0) then 611 if( .not. vdge(qctem%v7d%voldatiattrb& 612 (indana,indtimenear,indlevel,indtimerange,inddativarr,indnetwork,indbattrcli))) then 619 indtimenear=indtime+1 620 datodopo = qctem%v7d%voldatir (indana ,indtimenear ,indlevel ,indtimerange ,inddativarr, indnetwork ) 621 dopo = qctem%v7d%time (indtimenear) 624 if (indbattrinv > 0) then 625 if( invalidated(qctem%v7d%voldatiattrb& 626 (indana,indtimenear,indlevel,indtimerange,inddativarr,indnetwork,indbattrinv))) then 632 if (indbattrcli > 0) then 633 if( .not. vdge(qctem%v7d%voldatiattrb& 634 (indana,indtimenear,indlevel,indtimerange,inddativarr,indnetwork,indbattrcli))) then 640 IF(.NOT.c_e(datoprima) .and. .NOT.c_e(datodopo) ) cycle 648 call getval(td,asec=asec) 649 if ((c_e(qctem%timeconfidence) .and. asec <= qctem%timeconfidence) .or. & 650 .not. c_e(qctem%timeconfidence)) then 651 if (c_e(datoprima)) gradprima=(datoqui-datoprima) / dble(asec) 655 call getval(td,asec=asec) 656 if ((c_e(qctem%timeconfidence) .and. asec <= qctem%timeconfidence) .or. & 657 .not. c_e(qctem%timeconfidence)) then 658 if (c_e(datodopo)) graddopo =(datodopo-datoqui ) / dble(asec) 663 call l4f_log(l4f_debug, "QCtem gradprima:"// to_char(gradprima)// " graddopo:"//to_char(graddopo)) 666 IF(.NOT.c_e(gradprima) .and. .NOT.c_e(graddopo) ) cycle 671 IF(.NOT.c_e(gradprima) ) then 674 grad= sign(abs(graddopo),-1.d0) 676 else IF(.NOT.c_e(graddopo) ) then 679 grad= sign(abs(gradprima),-1.d0) 683 if (abs(max(abs(gradprima),abs(graddopo))-min(abs(gradprima),abs(graddopo))) < & 684 max(abs(gradprima),abs(graddopo))/2. .and. (sign(1.d0,gradprima)*sign(1.d0,graddopo)) < 0.) then 686 grad= min(abs(gradprima),abs(graddopo)) 689 grad= sign(max(abs(gradprima),abs(graddopo)),-1.d0) 693 if (qctem%operation == "gradient") then 698 if (qctem%operation == "run") then 703 call l4f_log(l4f_debug, "QCtem choice gradient type: spike") 705 indcnetwork=indcnetworks 708 call l4f_log(l4f_debug, "QCtem choice gradient type: gradmax") 710 indcnetwork=indcnetworkg 714 call l4f_log(l4f_debug, "gradiente da confrontare con QCtem clima:"//t2c(grad)) 716 do indcana=1, size(qctem%clima%ana) 718 climaquii=(qctem%clima%voldatir(indcana & 719 ,indctime,indclevel,indctimerange,indcdativarr,indcnetwork)& 720 -tem_b(ind))/tem_a(ind) 722 climaquif=(qctem%clima%voldatir(min(indcana+1, size(qctem%clima%ana)) & 723 ,indctime,indclevel,indctimerange,indcdativarr,indcnetwork)& 724 -tem_b(ind))/tem_a(ind) 727 call l4f_log(l4f_debug, "QCtem clima start:"//t2c(climaquii)) 728 call l4f_log(l4f_debug, "QCtem clima end:"//t2c(climaquif)) 730 if ( c_e(climaquii) .and. c_e(climaquif )) then 732 if ( (grad >= climaquii .and. grad < climaquif) .or. & 733 (indcana == 1 .and. grad < climaquii) .or. & 734 (indcana == size(qctem%clima%ana) .and. grad >= climaquif) ) then 737 call l4f_log(l4f_debug, "QCtem confidence:"// t2c(qctem%clima%voldatiattrb& 738 (indcana,indctime,indclevel,indctimerange,indcdativarr,indcnetwork,1))) 741 qctem%v7d%voldatiattrb( indana, indtime, indlevel, indtimerange, inddativarr, indnetwork, indbattrout)=& 742 qctem%clima%voldatiattrb(indcana,indctime,indclevel,indctimerange,indcdativarr,indcnetwork,1 ) 744 if ( associated ( qctem%data_id_in)) then 746 call l4f_log (l4f_debug, "id: "//t2c(& 747 qctem%data_id_in(indana,indtime,indlevel,indtimerange,indnetwork))) 749 qctem%data_id_out(indana,indtime,indlevel,indtimerange,indnetwork)=& 750 qctem%data_id_in(indana,indtime,indlevel,indtimerange,indnetwork) 762 if (qctem%operation == "gradient") then 774 end subroutine quacontem 782 Controllo di qualità temporale.
|