! Tinh cac dac trung thong ke cua chi so han
Use netcdf
Implicit None
Integer, Parameter :: Yr1=1986, Yr2=2005, Nmon=12, Nyear=(Yr2-Yr1)+1
Integer, Parameter :: Ntime=Nyear*Nmon, Nreg=7, Nst=131, Nbin=18
Integer, Parameter :: Nlon=40, Nlat=68

Real, Parameter :: Miss = -99.0

Real, Parameter :: Thre_1_PDSI=-2, Thre_2_PDSI=-3, Thre_3_PDSI=-4   ! PDSI: Moderate, Severe, Extreme
Real, Parameter :: BIN_PDSI(Nbin+1)=(/-30,-20,-15,-10,-6,-4,  -3,-2,-1,  0,  1,2,  3,4,6,10,15,20,30/)

Real, Parameter :: Thre_1_SPI=-1, Thre_2_SPI=-1.5, Thre_3_SPI=-2 !  SPI: Moderate, Severe, Extreme
Real, Parameter :: BIN_SPI(Nbin+1) =(/-15.,-10., -6., -4.,-3.,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,3., 4., 6.,10.,15./)
Real :: Thre_1, Thre_2, Thre_3, BIN(Nbin+1)

! Definitions:
Real, Dimension(Nlon,Nlat,Ntime) :: D1, D2, D3    ! (Nlon, Nlat, Ntime); =0/1; D1: Moderate+Severe+Extreme, D2: Severe+Extreme, D3: Extreme
Real, Dimension(Nlon,Nlat,Ntime) :: OD1, OD2, OD3 ! (Nlon, Nlat, Ntime)  =1: No drought event

! Events and Duration, and Time Arrival: (Nlon, Nlat, Ntime), (Nlon, Nlat)
Real, Dimension(Nlon,Nlat,Ntime) :: Dur1, Dur2, Dur3        ! Tan so cac dot
Real, Dimension(Nlon,Nlat)       :: N_Dur1, N_Dur2, N_Dur3  ! Max cua Do dai cac dot

!Real, Dimension(Nlon,Nlat,Ntime) :: Arr1, Arr2, Arr3        ! Time Interval Frequency ? 
!Real, Dimension(Nlon,Nlat)       :: N_Arr1, N_Arr2, N_Arr3  ! (Nlon, Nlat) Max cua khoang thoi gian giua hai dot

Real, Dimension(Nlon,Nlat,Ntime) :: Spel1, Spel2, Spel3 ! Do dai tung dot cua tung tram
Real, Dimension(Nlon,Nlat,Ntime) :: DS1, DS2, DS3, DI1, DI2, DI3 ! Severity & Intensity of each spell at each grid    <<<<<<<<<
Real, Dimension(Nlon,Nlat)       :: N_Spel1, N_Spel2, N_Spel3 ! So dot trong toan chuoi cua tung tram
Real, Dimension(Nlon,Nlat,Ntime) :: IS1, IS2, IS3   ! Chi so dau cua cac dot trong chuoi
Real, Dimension(Nlon,Nlat,Ntime) :: IE1, IE2, IE3   ! Chi so cuoi cua cac dot trong chuoi

Integer :: Max_So_Dot        ! So dot lon nhat cua tat ca cac tram (=Max {Ndot} - Gia tri lon nhat cua N_Spell)
Integer :: Max_Length_Dot    ! Do keo dai dai nhat trong tat ca cac dot cua cac tram (=Max {MaxDot} - Gia tri lon nhat cua Imax)
Integer :: Max_So_Dot_Reg        ! So dot lon nhat cua tat ca cac tram (=Max {Ndot} - Gia tri lon nhat cua N_Spell)
Integer :: Max_Length_Dot_Reg    ! Do keo dai dai nhat trong tat ca cac dot cua cac tram (=Max {MaxDot} - Gia tri lon nhat cua Imax)

! 

!Real :: Spel_Reg1(Nreg,Ntime), Spel_Reg2(Nreg,Ntime), Spel_Reg3(Nreg,Ntime)    ! Do dai tung dot cua tung vung
!Real, Dimension(Nreg,Ntime) :: DS1_Reg, DS2_Reg, DS3_Reg, DI1_Reg, DI2_Reg, DI3_Reg ! ! Severity & Intensity of each spell for each sub-region    <<<<<<<<<
!Real, Dimension(Nreg,Ntime) :: DS1_Reg_Std, DS2_Reg_Std, DS3_Reg_Std, DI1_Reg_Std, DI2_Reg_Std, DI3_Reg_Std   ! Do lech chuan
!Real :: NSpel_Reg1(Nreg), NSpel_Reg2(Nreg), NSpel_Reg3(Nreg)                   ! So dot trong toan chuoi cua tung vung

!Real :: IS_Reg1(Nreg,Ntime), IS_Reg2(Nreg,Ntime), IS_Reg3(Nreg,Ntime)   ! Chi so dau cua cac dot trong chuoi
!Real :: IE_Reg1(Nreg,Ntime), IE_Reg2(Nreg,Ntime), IE_Reg3(Nreg,Ntime)   ! Chi so cuoi cua cac dot trong chuoi

!Real :: D1_reg(Nreg,Ntime), D2_Reg(Nreg,Ntime), D3_Reg(Nreg,Ntime)      ! =0/1
!Real :: OD1_reg(Nreg,Ntime), OD2_Reg(Nreg,Ntime), OD3_Reg(Nreg,Ntime)   ! No drought events

! Geographic Area Extent:
!Real :: Area_Reg1(Nreg,Ntime), Area_Reg2(Nreg,Ntime), Area_Reg3(Nreg,Ntime)  !

Real :: PDSI(Nlon,Nlat,Ntime) ! Drought Index
Real :: T2m(Nlon,Nlat,Ntime), Precip(Nlon,Nlat,Ntime)   ! Monthly Temperature and Precipitation 

Real, Allocatable :: Dr_IDX_Tmp(:,:,:)              ! Luu tam thoi PDSI va SPI khi doc SL
Real :: Lon(Nlon), Lat(Nlat), Reg(Nlon,Nlat)

Real, allocatable, dimension (:)   :: loninfo, latinfo
Real, allocatable, dimension (:,:) :: vietnam ! thong tin cac vung khi hau: B1=2, B2=3,..., N3=8
Integer :: nxlon,nxlat

Character (Len=255) :: Dir, Fname, Models
!------------------------------------------------------------------------------
Integer, Parameter :: Nmodels=6, NSce=2, NFuture=2, NSCs=4 ! =NSce*NFuture
Integer, Parameter :: NFile = 36  ! 6 models + 6 models * 2 Scenarios * 2 Future Periods + 5 Ens + 1 Obs
Character (Len=4), Parameter :: SCEname(NSCs)=(/"MF45","MF85","FF45","FF85"/)
Character (Len=100) :: Fname_inp(NFile) !, Fname_Out(NFile)
Namelist /Filenames/ Fname_inp !, Fname_Out
Integer :: ifile, iidx, N_Drou_IDX

Real :: T2m_PDSI(Nlon,Nlat,Ntime,NFile), Precip_PDSI(Nlon,Nlat,Ntime,Nfile), PDSI_All(Nlon,Nlat,Ntime,Nfile)

Character (Len=4) :: Drou_IDX(3), Dr_IDX
Character (Len=10) :: VarName(NFile)=(/"OBS","CNRM_BL","CSIR_BL","ECEA_BL","GFDL_BL","HadG_BL","MPI_BL","Ens_BL", &
                                       "CNRM_MF45","CSIR_MF45","ECEA_MF45","GFDL_MF45","HadG_MF45","MPI_MF45","Ens_MF45", &
                                       "CNRM_MF85","CSIR_MF85","ECEA_MF85","GFDL_MF85","HadG_MF85","MPI_MF85","Ens_MF85", &
                                       "CNRM_FF45","CSIR_FF45","ECEA_FF45","GFDL_FF45","HadG_FF45","MPI_FF45","Ens_FF45", &
                                       "CNRM_FF85","CSIR_FF85","ECEA_FF85","GFDL_FF85","HadG_FF85","MPI_FF85","Ens_FF85"/)

!For output:

! 2-D Arrays: Trung binh thoi gian
Real, dimension (Nlon,Nlat,Nfile) :: Corr_T, Corr_P, Prob_T, Prob_P
!Real :: T_Dist


Real, dimension (Nlon,Nlat,Nfile) :: T2m_Ann, Pre_Ann, T2m_DJF, Pre_DJF, T2m_JJA, Pre_JJA, PDSI_Ave
Real, dimension (Nlon,Nlat,Nfile) :: Dur_Ave_D1, Dur_Max_D1, NSpell_D1  ! Drought Duration and Number of Drought Spells 
Real, dimension (Nlon,Nlat,Nfile) :: Dur_Ave_D2, Dur_Max_D2, NSpell_D2
Real, dimension (Nlon,Nlat,Nfile) :: Dur_Ave_D3, Dur_Max_D3, NSpell_D3
Real, dimension (Nlon,Nlat,Nfile) :: Sev_Ave_D1, Sev_Max_D1, Int_Ave_D1, Int_Max_D1     ! Severity & Intensity
Real, dimension (Nlon,Nlat,Nfile) :: Sev_Ave_D2, Sev_Max_D2, Int_Ave_D2, Int_Max_D2
Real, dimension (Nlon,Nlat,Nfile) :: Sev_Ave_D3, Sev_Max_D3, Int_Ave_D3, Int_Max_D3

! Performance (BL-OBS) and Changes (MF,FF-BL)
Real, dimension (Nlon,Nlat,Nfile) :: Del_T2m_Ann, Del_Pre_Ann, Del_T2m_DJF, Del_Pre_DJF, Del_T2m_JJA, Del_Pre_JJA, Del_PDSI_Ave
Real, dimension (Nlon,Nlat,Nfile) :: Del_Dur_Ave_D1, Del_Dur_Max_D1, Del_NSpell_D1  ! Drought Duration and Number of Drought Spells 
Real, dimension (Nlon,Nlat,Nfile) :: Del_Dur_Ave_D2, Del_Dur_Max_D2, Del_NSpell_D2
Real, dimension (Nlon,Nlat,Nfile) :: Del_Dur_Ave_D3, Del_Dur_Max_D3, Del_NSpell_D3
Real, dimension (Nlon,Nlat,Nfile) :: Del_Sev_Ave_D1, Del_Sev_Max_D1, Del_Int_Ave_D1, Del_Int_Max_D1     ! Severity & Intensity
Real, dimension (Nlon,Nlat,Nfile) :: Del_Sev_Ave_D2, Del_Sev_Max_D2, Del_Int_Ave_D2, Del_Int_Max_D2
Real, dimension (Nlon,Nlat,Nfile) :: Del_Sev_Ave_D3, Del_Sev_Max_D3, Del_Int_Ave_D3, Del_Int_Max_D3


! Trung binh khong gian
Real :: Xbin(Nbin), Xreg(Nreg+1)    ! Frequency
Real, dimension (Nreg+1,Ntime,Nfile) :: Geo_D1, Geo_D2, Geo_D3                     ! Spatial Extent 7 subregion + Entire Country
Real, dimension (Nreg+1,Ntime,Nfile) :: PDSI_Reg     ! Regional mean of Drought IDX
Real, dimension (Nreg+1,Nbin,Nfile)  :: Freq                                       ! Frequency Distribution of Drought Index

! Bias correction:
!Real, Dimension (Nlon,Nlat) :: PDSI_Clim_O             ! Trung binh 
Real, Dimension (Nlon,Nlat,Nmodels+1) :: PDSI_Clim_BL  ! Clim: 1 OBS + Nmodels
Real, Dimension (Nlon,Nlat,Ntime,Nfile) :: PDSI_All_BC  ! Bias corrected
Real, dimension (Nreg+1,Ntime,Nfile) :: PDSI_Reg_BC    ! Bias corrected


! Frequency of Geo. Extent:
Integer, Parameter :: Nbin_Geo=14
Real, Parameter :: BIN_Geo(Nbin_Geo+1) =(/0., 2., 5., 10., 15., 20., 25., 30., 40., 50., 60., 70., 80., 90., 100./)
Real, dimension (Nreg+1,Nbin_Geo,Nfile)  :: Freq_Geo_D1, Freq_Geo_D2, Freq_Geo_D3 


! Trung binh khong-thoi gian cua cac dac trung
Real, dimension (Nreg+1,Nfile) :: T2m_Ann_Reg, Pre_Ann_Reg, T2m_DJF_Reg, Pre_DJF_Reg, T2m_JJA_Reg, Pre_JJA_Reg, PDSI_Ave_Reg
Real, dimension (Nreg+1,Nfile) :: Dur_Ave_D1_Reg, Dur_Max_D1_Reg, NSpell_Ave_D1_Reg, NSpell_Max_D1_Reg  ! Drought Duration and Number of Drought Spells 
Real, dimension (Nreg+1,Nfile) :: Dur_Ave_D2_Reg, Dur_Max_D2_Reg, NSpell_Ave_D2_Reg, NSpell_Max_D2_Reg
Real, dimension (Nreg+1,Nfile) :: Dur_Ave_D3_Reg, Dur_Max_D3_Reg, NSpell_Ave_D3_Reg, NSpell_Max_D3_Reg
Real, dimension (Nreg+1,Nfile) :: Sev_Ave_D1_Reg, Sev_Max_D1_Reg, Int_Ave_D1_Reg, Int_Max_D1_Reg
Real, dimension (Nreg+1,Nfile) :: Sev_Ave_D2_Reg, Sev_Max_D2_Reg, Int_Ave_D2_Reg, Int_Max_D2_Reg
Real, dimension (Nreg+1,Nfile) :: Sev_Ave_D3_Reg, Sev_Max_D3_Reg, Int_Ave_D3_Reg, Int_Max_D3_Reg
Real, dimension (Nreg+1,Nfile) :: Geo_Ave_D1, Geo_Ave_D2, Geo_Ave_D3

! Performance (BL-OBS) and Changes (MF,FF-BL)
Real, dimension (Nreg+1,Nfile) :: Del_T2m_Ann_Reg, Del_Pre_Ann_Reg, Del_T2m_DJF_Reg, Del_Pre_DJF_Reg, Del_T2m_JJA_Reg, Del_Pre_JJA_Reg, Del_PDSI_Ave_Reg
Real, dimension (Nreg+1,Nfile) :: Del_Dur_Ave_D1_Reg, Del_Dur_Max_D1_Reg, Del_NSpell_Ave_D1_Reg, Del_NSpell_Max_D1_Reg  ! Drought Duration and Number of Drought Spells 
Real, dimension (Nreg+1,Nfile) :: Del_Dur_Ave_D2_Reg, Del_Dur_Max_D2_Reg, Del_NSpell_Ave_D2_Reg, Del_NSpell_Max_D2_Reg
Real, dimension (Nreg+1,Nfile) :: Del_Dur_Ave_D3_Reg, Del_Dur_Max_D3_Reg, Del_NSpell_Ave_D3_Reg, Del_NSpell_Max_D3_Reg
Real, dimension (Nreg+1,Nfile) :: Del_Sev_Ave_D1_Reg, Del_Sev_Max_D1_Reg, Del_Int_Ave_D1_Reg, Del_Int_Max_D1_Reg
Real, dimension (Nreg+1,Nfile) :: Del_Sev_Ave_D2_Reg, Del_Sev_Max_D2_Reg, Del_Int_Ave_D2_Reg, Del_Int_Max_D2_Reg
Real, dimension (Nreg+1,Nfile) :: Del_Sev_Ave_D3_Reg, Del_Sev_Max_D3_Reg, Del_Int_Ave_D3_Reg, Del_Int_Max_D3_Reg
Real, dimension (Nreg+1,Nfile) :: Del_Geo_Ave_D1, Del_Geo_Ave_D2, Del_Geo_Ave_D3

! Characteristic Frequency: 
Real, Allocatable, dimension (:,:,:)  :: F_Nspl_D1, F_Nspl_D2, F_Nspl_D3    ! (Nfile, MaxSoDot) Tan so cua So dot han
!Real, Allocatable, dimension (:,:,:) :: F_Nspl_Length_D1, F_Nspl_Length_D2, F_Nspl_Length_D3    ! (Nfile, MaxLength, MaxSoDot) Tan so cua So dot han ung voi tung do dai cac dot

!Real, Dimension(Nfile,Nlon,Nlat,Ntime) :: Dur_D1, Dur_D2, Dur_D3        ! Tan so cac dot
!Real, Dimension(Nfile,Nlon,Nlat)       :: N_Dur_D1, N_Dur_D2, N_Dur_D3  ! Max cua Do dai cac dot

Real, Dimension (Nfile,Nlon,Nlat,Ntime) :: Spel_D1, Spel_D2, Spel_D3 ! Do dai tung dot cua tung tram

!Real, Dimension(Nfile,Nlon,Nlat)       :: N_Spel_D1, N_Spel_D2, N_Spel_D3 ! So dot trong toan chuoi cua tung tram

Integer :: Max_So_Dot_All, Max_Length_Dot_All   ! Cho tat ca cac File
!---------------------------------------------------------------------
!Tan:
!Real, Dimension (Nlon,Nlat,Nfile)          :: N_Spel_D1, N_Spel_D2, N_Spel_D3 ! So dot trong toan chuoi cua tung tram
!Real, Dimension (Nlon,Nlat,Nmodels+1,NSCs) :: DelNSpel_D1, DelNSpel_D2, DelNSpel_D3

! Tue:
Real, dimension (Nreg+1,Nmon,Nfile)     :: T2m_Reg_Mon, Pre_Reg_Mon
Real, dimension (Nreg+1,Nmon,Nmodels+1) :: T_BIAS_BL, P_BIAS_BL           ! Fig.2: Bias cua BL so voi OBS cua Trung binh vung cua Trung binh thang 
Real, dimension (Nlon,Nlat,Nmodels+1)   :: T_BIAS_BL_FMA, P_BIAS_BL_FMA   ! Fig.3: Bias cua BL so voi OBS cua Trung binh 3 thang mua kho (FMA) 
Real, dimension (Nlon,Nlat,Nmodels+1)   :: T_BIAS_BL_JJA, P_BIAS_BL_JJA   ! Fig.3b: Bias cua BL so voi OBS cua Trung binh 3 thang mua mua (JJA) 
Real, dimension (Nreg+1,Nmon,Nmodels+1,NSCs) :: DT2m_Reg, DPrec_Reg       ! Fig.4,5: Changes of T2m and Prec
Real, dimension (Nlon,Nlat,Nmodels+1,NSCs)   :: DT2m_Ann, DPrec_Ann       ! Fig.6,7: Changes of Ann. T2m and Prec

Real, Dimension (Nlon,Nlat,Ntime,Nfile) :: D1_All, D2_All, D3_All   ! All events of all files
Real, Dimension (Nlon,Nlat,Nfile) :: Nmon_D1, Nmon_D2, Nmon_D3      ! Sum over Ntime of D1,2,3 
Real, Dimension (Nlon,Nlat,Nmodels+1,NSCs) :: DelNmon_D1, DelNmon_D2, DelNmon_D3 ! Fig.8,9: Changes of Number of Drought months between Scenerios and BL

Real, Dimension (Nlon,Nlat,Nfile) :: Sum_DS1, Sum_DS2, Sum_DS3   ! Sum over Ntime of Drought Severity based on PDSI & D1-3
Real, Dimension (Nlon,Nlat,Nmodels+1,NSCs) :: DelSum_DS1, DelSum_DS2, DelSum_DS3   ! Fig. 10,11: Changes of Drought Severity between Scenerios and BL

Real, dimension (Nreg+1,Nmon,Nfile) :: Sum_Geo_D1, Sum_Geo_D2, Sum_Geo_D3   ! Sum over Ntime of Geo_D1,2,3
Real, dimension (Nreg+1,Nmon,Nmodels+1,NSCs) :: DelSum_Geo_D1, DelSum_Geo_D2, DelSum_Geo_D3  ! Fig. 14: Change in Spatial extent between Scenerios and BL

! Real, Dimension(Nlon,Nlat,Ntime) :: IS1, IS2, IS3   ! Chi so dau cua cac dot trong chuoi
! Inter-arrival time = IS(n+1) - IS(n) -> Tinh trung binh cho toan chuoi
Real, Dimension (Nlon,Nlat,Nfile) :: Inter_Arr_Time_D1, Inter_Arr_Time_D2, Inter_Arr_Time_D3
Real, Dimension (Nlon,Nlat,Nmodels+1,NSCs) :: Del_Inter_Arr_Time_D1, Del_Inter_Arr_Time_D2, Del_Inter_Arr_Time_D3

! Mean Duration = IE(i) - IS(i) -> Tinh trung binh cho toan chuoi
Real, Dimension (Nlon,Nlat,Nfile) :: Mean_Duration_D1, Mean_Duration_D2, Mean_Duration_D3
Real, Dimension (Nlon,Nlat,Nmodels+1,NSCs) :: Del_Mean_Duration_D1, Del_Mean_Duration_D2, Del_Mean_Duration_D3

!Tan:
Real, Dimension (Nlon,Nlat,Nfile)          :: N_Spel_D1, N_Spel_D2, N_Spel_D3 ! So dot trong toan chuoi cua tung tram
Real, Dimension (Nlon,Nlat,Nmodels+1,NSCs) :: DelNSpel_D1, DelNSpel_D2, DelNSpel_D3

! Differences of Drought Characteristics between BL and OBS: May-03, 2018
Real, Dimension (Nlon,Nlat,Nmodels+1) :: Del_BL_Num_of_Mon_D1, Del_BL_Num_of_Mon_D2, Del_BL_Num_of_Mon_D3
Real, Dimension (Nlon,Nlat,Nmodels+1) :: Del_BL_N_Spel_Grd_D1, Del_BL_N_Spel_Grd_D2, Del_BL_N_Spel_Grd_D3
Real, Dimension (Nlon,Nlat,Nmodels+1) :: Del_BL_Droug_Seve_D1, Del_BL_Droug_Seve_D2, Del_BL_Droug_Seve_D3
Real, Dimension (Nlon,Nlat,Nmodels+1) :: Del_BL_Mean_Durat_D1, Del_BL_Mean_Durat_D2, Del_BL_Mean_Durat_D3
Real, Dimension (Nlon,Nlat,Nmodels+1) :: Del_BL_Inter_Arri_D1, Del_BL_Inter_Arri_D2, Del_BL_Inter_Arri_D3

Real, dimension (Nreg+1,Nmodels+1)    :: Del_BL_Reg_Dr_Mon_D1, Del_BL_Reg_Dr_Mon_D2, Del_BL_Reg_Dr_Mon_D3
Real, dimension (Nreg+1,Nmodels+1)    :: Del_BL_Reg_N_Spel_D1, Del_BL_Reg_N_Spel_D2, Del_BL_Reg_N_Spel_D3
Real, dimension (Nreg+1,Nmodels+1)    :: Del_BL_Reg_Dr_Sev_D1, Del_BL_Reg_Dr_Sev_D2, Del_BL_Reg_Dr_Sev_D3
Real, dimension (Nreg+1,Nmodels+1)    :: Del_BL_Reg_Durati_D1, Del_BL_Reg_Durati_D2, Del_BL_Reg_Durati_D3
Real, dimension (Nreg+1,Nmodels+1)    :: Del_BL_Reg_Int_Ar_D1, Del_BL_Reg_Int_Ar_D2, Del_BL_Reg_Int_Ar_D3
Real, dimension (Nreg+1,Nmodels+1)    :: Del_BL_Reg_Geo_Ex_D1, Del_BL_Reg_Geo_Ex_D2, Del_BL_Reg_Geo_Ex_D3

! Regional mean of Drought Characteristics over entire periods and their CHANGES:
Real, dimension (Nreg+1,Nfile) :: DMon1, DMon2, DMon3, &
                                  DGeo1, DGeo2, DGeo3, &
                                  DDur1, DDur2, DDur3, &
                                  DInt1, DInt2, DInt3, &
                                  DSev1, DSev2, DSev3, &   
                                  DSpl1, DSpl2, DSpl3       ! Tan  

Real, Dimension (Nreg+1,Nmodels+1,NSCs) :: Del_DMon1, Del_DMon2, Del_DMon3, &
                                           Del_DGeo1, Del_DGeo2, Del_DGeo3, &
                                           Del_DDur1, Del_DDur2, Del_DDur3, &
                                           Del_DInt1, Del_DInt2, Del_DInt3, &
                                           Del_DSev1, Del_DSev2, Del_DSev3, &
                                           Del_DSpl1, Del_DSpl2, Del_DSpl3      !Tan  

!Real, Dimension (Nlon,Nlat,Nmodels+1,NSCs) :: DelSum_DS1, DelSum_DS2, DelSum_DS3   ! Fig. 10,11: Changes of Drought Severity between Scenerios and BL
!Real, Dimension (Nlon,Nlat,Nmodels+1,NSCs) :: Del_Inter_Arr_Time_D1, Del_Inter_Arr_Time_D2, Del_Inter_Arr_Time_D3
!Real, Dimension (Nlon,Nlat,Nmodels+1,NSCs) :: Del_Mean_Duration_D1, Del_Mean_Duration_D2, Del_Mean_Duration_D3
!Real, Dimension (Nlon,Nlat,Nmodels+1,NSCs) :: DelNmon_D1, DelNmon_D2, DelNmon_D3 ! Fig.8,9: Changes of Number of Drought months between Scenerios and BL

Real, Dimension (Nlon,Nlat,NSCs) :: Agree_DS1, Agree_DS2, Agree_DS3   ! Agreement=(So members cung dau voi Ens)/(Tong so members)
Real, Dimension (Nlon,Nlat,NSCs) :: Agree_Nmon1, Agree_Nmon2, Agree_Nmon3
Real, Dimension (Nlon,Nlat,NSCs) :: Agree_Dur1, Agree_Dur2, Agree_Dur3
Real, Dimension (Nlon,Nlat,NSCs) :: Agree_Int1, Agree_Int2, Agree_Int3

!Real, Dimension (Nreg+1,Nmodels+1,NSCs) :: 

Logical :: status, BS_Correction
!------------------------------------------------------------------------------
Drou_IDX(1)="PDSI"; Drou_IDX(2)="SPI"; Drou_IDX(3)="SPEI"; N_Drou_IDX=3
!-----------------------------------------------------------------------------

!Dir="/home/tanpv/SEACLID_New/RES_New/"   ! Old one (2018)

Dir="/home/tanpv/SEACLID_New/RES_Post_Grd_2019/"  ! New - 2019
! Lay thong tin cac vung khi hau: B1=2, B2=3,..., N3=8
  Call rd_ncdf_2d ("/home/tanpv/SEACLID/MASK/VN.grid_0.25.nc",loninfo,latinfo,nxlon,nxlat,vietnam,"all")
  if (nxlon/=Nlon.OR.nxlat/=Nlat) then; print*, "Error in domain size !!!"; Stop; endif

  Reg(1:Nlon,1:Nlat) = vietnam(1:Nlon,1:Nlat); Lon(1:Nlon) = loninfo(1:Nlon); Lat(1:Nlat) = latinfo(1:Nlat) 
  Deallocate(loninfo, latinfo, vietnam)
  Where (Reg>1) Reg=Reg-1

Open (1, file = "File_Drou_IDX_2019.txt"); Read (1, Filenames); Close(1)    ! Doc ten file
Do iidx=1, N_Drou_IDX  ! =3 cho 3 chi so PDSI, SPI, SPEI
   Dr_IDX=trim(Drou_IDX(iidx))
   Call Initialization         ! Assign all outputs to Miss
   Do ifile=1, NFile
      Fname=trim(Fname_inp(ifile))//trim(Dr_IDX)//".nc"
      if (iidx==1) then           ! PDSI
         Call Read_PDSI_nc (FName); PDSI_All(1:Nlon,1:Nlat,1:Ntime,ifile) = Dr_IDX_Tmp(1:Nlon,1:Nlat,1:Ntime); Deallocate(Dr_IDX_Tmp)
         Thre_1=Thre_1_PDSI; Thre_2=Thre_2_PDSI; Thre_3=Thre_3_PDSI; BIN(1:Nbin+1)=BIN_PDSI(1:Nbin+1)
         T2m_PDSI(1:Nlon,1:Nlat,1:Ntime,ifile)   = T2m(1:Nlon,1:Nlat,1:Ntime)   ! Luu lai cho SPI
         Precip_PDSI(1:Nlon,1:Nlat,1:Ntime,ifile)= Precip(1:Nlon,1:Nlat,1:Ntime)
      else if (iidx==2) then      ! SPI
         Call Read_SPI_nc (FName);  PDSI_All(1:Nlon,1:Nlat,1:Ntime,ifile) = Dr_IDX_Tmp(1:Nlon,1:Nlat,1:Ntime); Deallocate(Dr_IDX_Tmp)
         Thre_1=Thre_1_SPI; Thre_2=Thre_2_SPI; Thre_3=Thre_3_SPI; BIN(1:Nbin+1)=BIN_SPI(1:Nbin+1)
!         T2m(1:Nlon,1:Nlat,1:Ntime)=T2m_PDSI(1:Nlon,1:Nlat,1:Ntime,ifile)   ! Su dung T2m tu SL tinh PDSI (vi SL tinh SPI khong co T2m)         
      else                        ! SPEI
         Call Read_SPEI_nc (FName); PDSI_All(1:Nlon,1:Nlat,1:Ntime,ifile) = Dr_IDX_Tmp(1:Nlon,1:Nlat,1:Ntime); Deallocate(Dr_IDX_Tmp)
         Thre_1=Thre_1_SPI; Thre_2=Thre_2_SPI; Thre_3=Thre_3_SPI; BIN(1:Nbin+1)=BIN_SPI(1:Nbin+1)
      endif
   Enddo  ! ifile=1, NFile
   Where (PDSI_All/=Miss.AND.PDSI_All<-30) PDSI_All=Miss    ! Avoid singular values
   if (iidx==1) then           ! Xu ly T2m va Prec tu cac file PDSI
      Where (T2m_PDSI<0) T2m_PDSI=Miss; Where (Precip_PDSI<0) Precip_PDSI=Miss
      Where (IsNaN (T2m_PDSI)) T2m_PDSI=Miss; Where (IsNaN (Precip_PDSI)) Precip_PDSI=Miss
   endif

!********************************************

!!!   Call Time_Series_T_P_VN; Stop   ! Print out timeseries of T2m & Prec changes only

!********************************************

   BS_Correction=.false.

!********************************************
   if (BS_Correction) then
   !  Tinh OBS and Model Clim:
      Dir="/home/tanpv/SEACLID_New/RES_BC/"
      Do ifile=1, Nmodels+1
         Call Calc_Clim(ifile)
      Enddo
      Call Calc_Bias_Correction   ! Correction
   endif
!  ********************************************
!  Temp and Prec changes (Tue):
   Call Calc_T_P_Changes        ! Tinh su bien doi cua T, P

! Tinh cac dac trung:
   Max_So_Dot_All=-999; Max_Length_Dot_All=-999
   Do ifile=1, NFile
      !if (BS_Correction) then
      !   PDSI(1:Nlon,1:Nlat,1:Ntime) = PDSI_All_BC(1:Nlon,1:Nlat,1:Ntime,ifile)
      !else
         PDSI(1:Nlon,1:Nlat,1:Ntime) = PDSI_All   (1:Nlon,1:Nlat,1:Ntime,ifile)
      !endif
      T2m(1:Nlon,1:Nlat,1:Ntime)   = T2m_PDSI(1:Nlon,1:Nlat,1:Ntime,ifile)
      Precip(1:Nlon,1:Nlat,1:Ntime)= Precip_PDSI(1:Nlon,1:Nlat,1:Ntime,ifile)     
      Call Calc_Time_Ave_Grd (ifile)        ! Tinh T2m_Ann, Pre_Ann, T2m_DJF, Pre_DJF, T2m_JJA, Pre_JJA, PDSI_Ave(Nlon,Nlat,Nfile)
      Call Calc_Freq_All_Timeseries (ifile)  ! Tinh phan bo tan suat cho toan chuoi cua tung vung:    Freq(Nreg+1,Nbin,Nfile)
      Call Define_Drought_Events            ! Xac dinh su kien han (0/1) tung thang cho tung tram: D1, D2,...,OD1, OD2,...,
      D1_All(:,:,:,ifile)=D1(:,:,:); D2_All(:,:,:,ifile)=D2(:,:,:); D3_All(:,:,:,ifile)=D3(:,:,:)
      Call Calc_Spells                       ! Tinh tan so theo do dai cac dot va tan so tung dot
      Call Calc_Mean_Inter_Arr_Time (ifile)       ! Tinh khoang thoi gian giua hai dot han lien tiep
      Call Calc_Dur_and_Num_of_Spells_Grd (ifile) ! Tinh Dur_Ave_D1, Dur_Max_D1, NSpell_D1,...
      Call Calc_DS_DI_Grd                   ! Tinh Drought Severity and Intensity for each drought spell
      Call Calc_Seve_and_Inten_Grd (ifile)  ! Tinh Mean & Max of Drought Severity and Intensity at gridbox: Sev_Ave_D1, Sev_Max_D1, Int_Ave_D1, Int_Max_D1
      Call Calc_Geographic_Extent (ifile)   ! Tinh Spatial Extent
      Call Calc_Reg_Mean_Max (ifile)        ! Tinh Trung binh khong-thoi gian cua cac dac trung
 
      Spel_D1(ifile,:,:,:)=Spel1(:,:,:); Spel_D2(ifile,:,:,:)=Spel2(:,:,:); Spel_D3(ifile,:,:,:)=Spel3(:,:,:)
      N_Spel_D1(:,:,ifile)=N_Spel1(:,:); N_Spel_D2(:,:,ifile)=N_Spel2(:,:); N_Spel_D3(:,:,ifile)=N_Spel3(:,:)

      if (Max_So_Dot_All<Max_So_Dot) Max_So_Dot_All=Max_So_Dot; if (Max_Length_Dot_All<Max_Length_Dot) Max_Length_Dot_All=Max_Length_Dot
   Enddo
print*,"111111:",Max_So_Dot_All,Max_Length_Dot_All
   if (.not.Allocated(F_Nspl_D1)) Allocate(F_Nspl_D1(1:Max_Length_Dot_All,1:Max_So_Dot_All,1:Nfile))
   if (.not.Allocated(F_Nspl_D2)) Allocate(F_Nspl_D2(1:Max_Length_Dot_All,1:Max_So_Dot_All,1:Nfile))
   if (.not.Allocated(F_Nspl_D3)) Allocate(F_Nspl_D3(1:Max_Length_Dot_All,1:Max_So_Dot_All,1:Nfile))
   F_Nspl_D1=Miss; F_Nspl_D2=Miss; F_Nspl_D3=Miss
print*,"22222"   
   
   Call Calc_Time_Ave_Grd_Changes  ! Tinh sai khac giua Baseline va OBS, va Changes (MF/FF-BL) tren luoi
   Call Calc_Reg_Mean_Max_Changes  ! Nhu tren nhung cho vung
   Call Calc_Correlation_Drou_T_P ! Tuong quan DrIDX & T2m,Prec

   Call Calc_Freq_Of_Characteristics  ! Tinh tan so cua cac dac trung theo 
   Call Calc_Freq_Geo_Reg             ! Tinh phan bo tan suat cua Geographic extent
   Call Calc_Reg_Mean_IDX             ! Regional mean Timeseries of IDX for each region

! Tue:
  Call Calc_T_P_Changes
  Call Calc_Drought_Characteristics

print*,"333"

   Fname=trim(Dir)//trim(Dr_IDX)//"_Time_Average_Grd.nc"
   Call Write_3D_Time_Average_Array(Fname)
   Fname=trim(Dir)//trim(Dr_IDX)//"_Frequency_Distribution_Reg.nc"
   Call Write_3D_Frequancy(Fname)
   Fname=trim(Dir)//trim(Dr_IDX)//"_Geographic_Extent_Reg.nc"
   Call Write_3D_Geo_Extent(Fname)
   Fname=trim(Dir)//trim(Dr_IDX)//"_Regional_Characteristics.nc"
   Call Write_2D_Regional_Characteristics(Fname)
   Fname=trim(Dir)//trim(Dr_IDX)//"_Time_Average_Grd_Changes.nc"
   Call Write_3D_Time_Average_Array_Changes (Fname)
   Fname=trim(Dir)//trim(Dr_IDX)//"_Regional_Characteristics_Changes.nc"
   Call Write_2D_Regional_Characteristics_Changes (Fname)

   Fname=trim(Dir)//trim(Dr_IDX)//"_Corr_T_P_Dr.nc"
   Call Write_Corr_T_P_DrIDX (Fname)
print*,">>>"
   Fname=trim(Dir)//trim(Dr_IDX)//"_Freq_Num_Spell_and_Duration.nc"
   Call Write_Freq_Of_Characteristics (Fname)
   Fname=trim(Dir)//trim(Dr_IDX)//"_Freq_Geo_Extent_Reg.nc"
   Call Write_Freq_Geo_Reg (Fname)

   Fname=trim(Dir)//trim(Dr_IDX)//"_Timeseries_Of_IDX_Reg_Mean.nc"
   Call Write_Timeseries_Of_IDX_Reg_Mean (Fname)

! Tue:
   Fname=trim(Dir)//trim(Dr_IDX)//"_T_P_Changes_Reg.nc"
   Call Write_T_P_Changes_Reg (Fname)
   Fname=trim(Dir)//trim(Dr_IDX)//"_T_P_Changes_Grd.nc"
   Call Write_T_P_Changes_Grd (Fname)
   Fname=trim(Dir)//trim(Dr_IDX)//"_Drought_Characteristics_Grd.nc"
   Call Write_Drought_Characteristics_Grd (Fname)
   Fname=trim(Dir)//trim(Dr_IDX)//"_Drought_Characteristics_Reg.nc"
   Call Write_Drought_Characteristics_Reg (Fname)
   Fname=trim(Dir)//trim(Dr_IDX)//"_Drought_Characteristics_2D_Reg.nc"
   Call Write_Drought_Characteristics_2D_Reg (Fname)   
   Fname=trim(Dir)//trim(Dr_IDX)//"_Diff_BL_OBS_Chars_Reg.nc"
   Call Write_2D_Reg_Diff_BL_OBS_Chars (Fname)

   Fname=trim(Dir)//trim(Dr_IDX)//"_Drought_Charac_Agreement_of_Changes.nc"
   Call Write_Drought_Characteristics_Changes_Agreement (Fname)

print*,"<<<"
!   Deallocate(F_Nspl_D1,F_Nspl_D2,F_Nspl_D3) !, F_Nspl_Length_D1,F_Nspl_Length_D2,F_Nspl_Length_D3)
Enddo
!Call Print_Test(Spel_Reg1,NSpel_Reg1)

CONTAINS
!-----------------------------------------------------------------------------

!!! Include "SUB_New/Time_Series_T_P_VN.f90"  ! No need for droughts 


Include "SUB_New/Calc_T_P_Changes.f90"
Include "SUB_New/Calc_Drought_Characteristics.f90"
Include "SUB_New/Calc_Mean_Inter_Arr_Time.f90"
Include "SUB_New/Write_T_P_Changes_Reg.f90"
Include "SUB_New/Write_T_P_Changes_Grd.f90"
Include "SUB_New/Write_Drought_Characteristics_Grd.f90"
Include "SUB_New/Write_Drought_Characteristics_Reg.f90"
Include "SUB_New/Write_Drought_Characteristics_2D_Reg.f90"
Include "SUB_New/Write_Drought_Characteristics_Changes_Agreement.f90"

Include "SUB_New/Initialization.f90"
Include "SUB_New/Calc_DS_DI_Grd.f90"
Include "SUB_New/Calc_Dur_and_Num_of_Spells_Grd.f90"
Include "SUB_New/Calc_Geographic_Extent.f90"
Include "SUB_New/Calc_Reg_Mean_Max.f90"
Include "SUB_New/Calc_Seve_and_Inten_Grd.f90"
Include "SUB_New/Calc_Spells.f90"
Include "SUB_New/Calc_Time_Ave_Grd.f90"
Include "SUB_New/Calc_Freq_All_Timeseries.f90"

Include "SUB_New/Frequency.f90"
Include "SUB_New/Corre_Coeff.f90"
Include "SUB_New/Calc_Freq_Of_Characteristics.f90"
Include "SUB_New/Calc_Freq_Geo_Reg.f90"
Include "SUB_New/Calc_Reg_Mean_IDX.f90"
Include "SUB_New/Write_Corr_T_P_DrIDX.f90"
Include "SUB_New/Write_Freq_Of_Characteristics.f90"
Include "SUB_New/Write_Freq_Geo_Reg.f90"

Include "SUB_New/Define_Drought_Events.f90"
Include "SUB_New/Read_Data.f90"
Include "SUB_New/Spatial_Ave.f90"
Include "SUB_New/Spatial_Max.f90"
Include "SUB_New/Time_Ave.f90"
Include "SUB_New/Calc_Time_Ave_Grd_Changes.f90"
Include "SUB_New/Calc_Reg_Mean_Max_Changes.f90"
Include "SUB_New/Write_2D_Regional_Characteristics.f90"
Include "SUB_New/Write_3D_Frequancy.f90"
Include "SUB_New/Write_3D_Geo_Extent.f90"
Include "SUB_New/Write_3D_Time_Average_Array.f90"
Include "SUB_New/Write_3D_Time_Average_Array_Changes.f90"
Include "SUB_New/Write_2D_Regional_Characteristics_Changes.f90"
Include "SUB_New/Write_2D_Reg_Diff_BL_OBS_Chars.f90"

Include "SUB_New/Calc_Correlation_Drou_T_P.f90"
Include "SUB_New/Calc_Clim.f90"
Include "SUB_New/Calc_Bias_Correction.f90"
Include "SUB_New/Write_Timeseries_Of_IDX_Reg_Mean.f90"

Include "../Libs/sub_rd_ncdf.F90"
Include "../Libs/sub_wr_ncdf_Tan.F90"
Include "All_Num_Dr_Spells.f90"  ! Tinh ca do dai tung dot

!-----------------------------------------------------------------------------
END
Include "SUB_New/Student_Prob.f90"


