|
◆ vol7d_normalize_data()
subroutine, public modqccli::vol7d_normalize_data |
( |
type(qcclitype), intent(inout) |
qccli | ) |
|
Modulo 1: Calcolo dei parametri di normalizzazione dei dati I parametri di normalizzazione sono il 25°, il 50° e il 75° percentile (p25,p50,p75) oppure (p15.87,p50.,p84.13) Tali parametri verranno calcolati per ogni mese, per ogni ora, per ogni area.
Modulo 2: Normalizzazione dati Ciascun dato D verrà normalizzato come segue: DN = (D-p50)*2/(p75-p25) oppure DN = (D-p50)*2/(p16-p84) dove DN è il valore normalizzato. La scelta dei parametri di normalizzazione dipende dal mese, dall'ora, dall'area. - Parametri
-
[in,out] | qccli | volume providing data to be computed, it is modified by the method |
Definizione alla linea 791 del file modqccli.F90.
792 indctimerange,indcdativarr,indcnetwork)
796 write(ident, '("#",i2.2,2i3.3)')k,iarea,desc
797 call init(ana,lat=0.d0,lon=0.d0,ident=ident)
798 indcana= index(qccli%extreme%ana,ana)
799 call l4f_log(l4f_debug, "normalize data Index50:"//to_char(k)
800 to_char(indctime)//to_char(indclevel)//&
801 to_char(indctimerange)//to_char(indcdativarr)//to_char(indcnetwork
802 if (indcana > 0 ) then
803 perc50=qccli%extreme%voldatir(indcana,indctime,indclevel,&
804 indctimerange,indcdativarr,indcnetwork)
808 write(ident, '("#",i2.2,2i3.3)')k,iarea,desc
809 call init(ana,lat=0.d0,lon=0.d0,ident=ident)
810 indcana= index(qccli%extreme%ana,ana)
811 call l4f_log(l4f_debug, "normalize data Index75:"//to_char(k)
812 to_char(indctime)//to_char(indclevel)//&
813 to_char(indctimerange)//to_char(indcdativarr)//to_char(indcnetwork
814 if (indcana > 0 ) then
815 perc75=qccli%extreme%voldatir(indcana,indctime,indclevel,&
816 indctimerange,indcdativarr,indcnetwork)
819 if ( c_e(perc25) .and. c_e(perc50) .and. c_e(perc75) .and. &
820 abs( perc75 - perc25 ) >= spacing( max(abs(perc75),abs(perc25 then
823 call l4f_log(l4f_debug, "normalize data dato in : "//t2c(datoqui
824 datoqui = (datoqui - perc50) / (perc75 - perc25) + &
825 base_value(qccli%v7d%dativar%r(inddativarr)%btable)
826 call l4f_log(l4f_debug, "normalize data dato out : "//t2c(datoqui
834 qccli%v7d%voldatir (indana ,indtime ,indlevel ,indtimerange
835 inddativarr, indnetwork ) = datoqui
843 read (qccli%v7d%ana(indana)%ident, '(a1,i2.2,2i3.3)') mycanc, clev, iarea
844 if (mycanc == canc) then
847 write (qccli%v7d%ana(indana)%ident, '(a1,i2.2,2i3.3)') canc, clev, iarea
852 end SUBROUTINE vol7d_normalize_data
855 real function base_value(btable)
859 real :: base_values(1) =(/273.15 /)
862 ind = index_c(btables,btable)
865 base_value = base_values(ind)
867 call l4f_log(l4f_warn, "modqccli_base_value: variable "//btable// " do not have base value"
873 end function base_value
882 SUBROUTINE quaconcli (qccli,battrinv,battrout,&
883 anamask,timemask,levelmask,timerangemask,varmask,networkmask)
886 type(qcclitype), intent(in out) :: qccli
889 logical , intent(in), optional :: anamask(:)
890 logical , intent(in), optional :: timemask(:)
891 logical , intent(in), optional :: levelmask(:)
892 logical , intent(in), optional :: timerangemask(:)
893 logical , intent(in), optional :: varmask(:)
894 logical , intent(in), optional :: networkmask(:)
897 REAL(kind=fp_geo) :: latc,lonc
900 integer :: indbattrinv,indbattrout
901 logical :: anamaskl(size(qccli%v7d%ana)), timemaskl(size(qccli%v7d%time))
902 size(qccli%v7d%timerange)), varmaskl( size(qccli%v7d%dativar%r size
904 integer :: indana , indtime ,indlevel ,indtimerange ,inddativarr, indnetwork
905 integer :: indcana, indctime,indclevel,indctimerange,indcdativarr,indcnetwork
906 real :: datoqui,climaquii,climaquif, extremequii,extremequif,perc25,perc50
907 integer :: iarea,desc,indn,indvar,k
912 TYPE(vol7d_network) :: network
913 TYPE(vol7d_ana) :: ana
914 TYPE(datetime) :: time, nintime
915 TYPE(vol7d_level):: level
916 type(vol7d_var) :: anavar
917 integer :: iclv(size(qccli%v7d%ana))
924 if ( associated(qccli%v7d%datiattr%b)) then
925 if ( present(battrinv)) then
926 indbattrinv = index_c(qccli%v7d%datiattr%b(:)%btable, battrinv)
928 indbattrinv = index_c(qccli%v7d%datiattr%b(:)%btable, qcattrvarsbtables
932 if ( indbattrinv <= 0 ) then
934 call l4f_category_log(qccli%category,l4f_error, "error finding attribute index in/out "
935 call raise_error( "error finding attribute index in/out "//qcattrvarsbtables
940 if ( present(battrout)) then
941 indbattrout = index_c(qccli%v7d%datiattr%b(:)%btable, battrout)
943 indbattrout = index_c(qccli%v7d%datiattr%b(:)%btable, qcattrvarsbtables
946 if ( indbattrout <= 0 ) then
948 call l4f_category_log(qccli%category,l4f_error, "error finding attribute index in/out "
949 call raise_error( "error finding attribute index in/out "//qcattrvarsbtables
953 if( present(anamask)) then
958 if( present(timemask)) then
963 if( present(levelmask)) then
964 levelmaskl = levelmask
968 if( present(timerangemask)) then
969 timerangemaskl = timerangemask
971 timerangemaskl = .true.
973 if( present(varmask)) then
978 if( present(networkmask)) then
979 networkmaskl = networkmask
981 networkmaskl = .true.
984 qccli%v7d%voldatiattrb(:,:,:,:,:,:,indbattrout)=ibmiss
987 indvar = index(qccli%v7d%anavar, anavar, type=type)
989 do indana=1, size(qccli%v7d%ana)
994 iarea= qccli%in_macroa(indana)
996 if (.not. c_e(iarea)) cycle
1013 if (qccli%height2level) then
1018 do indn=1, size(qccli%v7d%network)
1020 if( indvar > 0 .and. indn > 0 ) then
1023 height=realdat(qccli%v7d%volanad(indana,indvar,indn),qccli%v7d%anavar%d
1025 height=realdat(qccli%v7d%volanar(indana,indvar,indn),qccli%v7d%anavar%r
1027 height=realdat(qccli%v7d%volanai(indana,indvar,indn),qccli%v7d%anavar%i
1029 height=realdat(qccli%v7d%volanab(indana,indvar,indn),qccli%v7d%anavar%b
1031 height=realdat(qccli%v7d%volanac(indana,indvar,indn),qccli%v7d%anavar%c
1037 if (c_e(height)) exit
1040 if (c_e(height)) then
1041 iclv(indana)=firsttrue(cli_level1 <= height .and. height <= cli_level2
|