|
◆ 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 572 del file modqctem.F90.
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)//& 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 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) 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 Functions that return a trimmed CHARACTER representation of the input variable.
Operatore di valore assoluto di un intervallo.
Controllo di qualità temporale.
Restituiscono il valore dell'oggetto in forma di stringa stampabile.
Restituiscono il valore dell'oggetto nella forma desiderata.
|