

    Use NetCDF
!    Use neural

!    type(network) :: Net

    Real, parameter    :: Miss=-99.0
    Integer, Parameter :: Yr1=1983, Yr2=2020
    Integer, Parameter :: Nmodel=2, Nmon=12, Nreg=7, Nlead=6, Nlen=3, Nidx=2
    Integer, Parameter :: Ncase=3            !  "mod","cli","ann","mlr"
    Character (Len=10) :: Model_nm(Nmodel)=(/"RegCM","clWRF"/)
    Character (Len=10) :: IDXname (Nidx)  =(/"spei", "spi"/)
    Integer, Parameter :: Len_SPI (Nlen)  =(/1,3,6/)
    !Character (Len=3), Parameter :: Cases(Ncase)=(/"mod","cli","ann","mlr"/)
    Character (Len=3), Parameter :: Cases(Ncase)=(/"cli","ann","mlr"/)
    !Character (Len=3), Parameter :: Cases(Ncase)=(/"ann","mlr"/)
    !-----------------------------------------------------------------------------
    Real, Allocatable :: Regs(:,:), Lon(:), Lat(:), xlon(:), xlat(:)
    Real, Allocatable :: SPEI_Ann(:,:,:,:)                        ! Nlon,Nlat,Nlead,Ntime
    Real, Allocatable :: SPEI_Hai(:,:,:,:)                        ! Nlon,Nlat,Nlead,Ntime
    Real, Allocatable :: SPEI_obs(:,:,:)                          ! Nlon,Nlat,Ntime
    Real, Allocatable :: Yest(:,:)                                ! Ntime,Myvar
    Integer :: Nlon, Nlat, Ntime, Nt
    !-----------------------------------------------------------------------------
    Real, Allocatable, Dimension(:,:,:) :: SPEI_Reg_obs,SPEI_Reg_Ann,SPEI_Reg_Hai   ! Nreg,Nlead,Ntime           
    Real, Allocatable, Dimension(:,:,:) :: Geo_obs, Geo_Ann, Geo_Hai                ! Nreg,Nlead,Ntime
    Real, Allocatable, Dimension(:,:)   :: Cor_Ann_reg, Cor_Hai_reg, Cor_geo_Ann, Cor_geo_Hai  ! Nreg,Nlead (Correlation between Obs and Model for regions) 
    !-----------------------------------------------------------------------------
    Real, Allocatable, Dimension (:,:,:) :: Cor_a,Cor_h,PC_a,PC_h,POD_a,POD_h,SR_a,SR_h,POFD_a,POFD_h,FAR_a,FAR_h
    Real, Allocatable, Dimension (:,:,:) :: HSS_a,CSI_a,ETS_a,HSS_h,CSI_h,ETS_h
    Real, Allocatable, Dimension (:,:,:) :: Prb_a, Prb_h 

    Real :: a,b,c,d, Thres_obs, Thres_fcs
    Real :: PC0,POD0,SR0,FAR0,POFD0,FBI0,HSS0,CSI0,ETS0
    !-----------------------------------------------------------------------------
    Integer :: ireg, ilead

    Integer :: ilr, inode, itest, Ntest
    !-----------------------------------------------------------------------------
    Character (Len=255) :: Dir_ANN_Save, save_file, Inp_Dir, Out_Dir, Mask_File, Fname
    Character (Len=5)   :: Dr_Lev   ! "mild","moder","seve","extre"

    Namelist /dr_info/    Thres_obs, Thres_fcs, Dr_Lev

    !-----------------------------------------------------------------------------
    Inp_Dir      = "/home/tanpv/Data/562_VNU/0.25_VN/Dr_IDXs_Ope/" 
    Mask_File    = "/home/tanpv/Data/AWC/Mask_VN_0.25_Corrected.nc"
    Out_Dir      = "/home/tanpv/Progs/562_VNU/2024/Ann_New/Dr_Ann_Out/"
    Dir_ANN_Save = "/home/tanpv/Progs/562_VNU/2024/Ann_New/ANN_Save/"
    Ntime = (Yr2-Yr1+1)*Nmon
    !-----------------------------------------------------------------------------
    Open (1, file="Namelist_Veri_Dr.txt",Status="old")
    Read (1, dr_info)
    Close (1)
    Mxvar=Nmodel*Ncase; Myvar=1
    !-----------------------------------------------------------------------------
    Call rd_ncdf_2d (Mask_File,Lon,Lat,Nlon,Nlat,Regs,"reg")
    !-----------------------------------------------------------------------------
    !Threshold = -1.0         ! Drought level
    
    Do idx=1,Nidx            ! "spi", "spei"
       Do ilen=1,Nlen        ! 1, 3, 6
          Call Reinit
          Call Read_all_Dr_IDXs (trim(IDXname(idx)),ilen)
          Do ilead=1,Nlead
             Do ilon=1,Nlon
                Do ilat=1,Nlat
                   if (Regs(ilon,ilat)>0) then
                      Call Veri_New (idx,ilen,ilead,ilon,ilat) 
                      Call Veri_Hai (idx,ilen,ilead,ilon,ilat) 
                   endif
                Enddo
             Enddo
          Enddo
          Call Write_Dr_Veri (trim(IDXname(idx)),ilen)
          ! Calculating regional mean of drought index and geographic extent:
          Do ilead=1,Nlead
             Do ireg=1,Nreg
                Call Calc_Reg (ilead,ireg)
             Enddo
          Enddo
          Call Write_Regional_Dr_Geo (trim(IDXname(idx)),ilen)
       Enddo
    Enddo
   !-----------------------------------------------------------------------------
   CONTAINS
   !-----------------------------------------------------------------------------
   Subroutine Reinit
      if (Allocated (SPEI_Ann)) Deallocate (SPEI_Ann)                        ! Nlon,Nlat,Nlead,Ntime
      if (Allocated (SPEI_Hai)) Deallocate (SPEI_Hai)                        ! Nlon,Nlat,Nlead,Ntime
      if (Allocated (SPEI_obs)) Deallocate (SPEI_obs) 

      if (Allocated (Cor_a)) Deallocate (Cor_a) 
      if (Allocated (Cor_h)) Deallocate (Cor_h)
      if (Allocated (Prb_a)) Deallocate (Prb_a)
      if (Allocated (Prb_h)) Deallocate (Prb_h)
      if (Allocated (PC_a))  Deallocate (PC_a)
      if (Allocated (PC_h))  Deallocate (PC_h)
      if (Allocated (POD_a)) Deallocate (POD_a)
      if (Allocated (POD_h)) Deallocate (POD_h)
      if (Allocated (SR_a))  Deallocate (SR_a)
      if (Allocated (SR_h))  Deallocate (SR_h)
      if (Allocated (POFD_a)) Deallocate (POFD_a)
      if (Allocated (POFD_h)) Deallocate (POFD_h)
      if (Allocated (FAR_a)) Deallocate (FAR_a)
      if (Allocated (FAR_h)) Deallocate (FAR_h)
      if (Allocated (HSS_a)) Deallocate (HSS_a)
      if (Allocated (CSI_a)) Deallocate (CSI_a)
      if (Allocated (ETS_a)) Deallocate (ETS_a)
      if (Allocated (HSS_h)) Deallocate (HSS_h)
      if (Allocated (CSI_h)) Deallocate (CSI_h)
      if (Allocated (ETS_h)) Deallocate (ETS_h)
 
      Allocate (Cor_a (Nlon,Nlat,Nlead))
      Allocate (Cor_h (Nlon,Nlat,Nlead))
      Allocate (Prb_a (Nlon,Nlat,Nlead))
      Allocate (Prb_h (Nlon,Nlat,Nlead))
      Allocate (PC_a  (Nlon,Nlat,Nlead))
      Allocate (PC_h  (Nlon,Nlat,Nlead))
      Allocate (POD_a (Nlon,Nlat,Nlead))
      Allocate (POD_h (Nlon,Nlat,Nlead))
      Allocate (SR_a  (Nlon,Nlat,Nlead))
      Allocate (SR_h  (Nlon,Nlat,Nlead))
      Allocate (POFD_a(Nlon,Nlat,Nlead))
      Allocate (POFD_h(Nlon,Nlat,Nlead))
      Allocate (FAR_a (Nlon,Nlat,Nlead))
      Allocate (FAR_h (Nlon,Nlat,Nlead))
      Allocate (HSS_a (Nlon,Nlat,Nlead))
      Allocate (CSI_a (Nlon,Nlat,Nlead))
      Allocate (ETS_a (Nlon,Nlat,Nlead))
      Allocate (HSS_h (Nlon,Nlat,Nlead))
      Allocate (CSI_h (Nlon,Nlat,Nlead))
      Allocate (ETS_h (Nlon,Nlat,Nlead))
      Cor_a=Miss; Cor_h=Miss; PC_a=Miss; PC_h=Miss; POD_a=Miss; POD_h=Miss; 
      SR_a=Miss; SR_h=Miss; POFD_a=Miss; POFD_h=Miss; FAR_a=Miss; FAR_h=Miss; 
      Prb_a=Miss;Prb_h=Miss
      HSS_a=Miss; CSI_a=Miss; ETS_a=Miss; HSS_h=Miss; CSI_h=Miss; ETS_h=Miss;
      !-----------------------------------
      if (Allocated (SPEI_Reg_obs)) Deallocate (SPEI_Reg_obs)
      if (Allocated (SPEI_Reg_Ann)) Deallocate (SPEI_Reg_Ann)
      if (Allocated (SPEI_Reg_Hai)) Deallocate (SPEI_Reg_Hai)
      if (Allocated (Geo_obs     )) Deallocate (Geo_obs)
      if (Allocated (Geo_Ann     )) Deallocate (Geo_Ann)
      if (Allocated (Geo_Hai     )) Deallocate (Geo_Hai)
      Allocate (SPEI_Reg_obs(Nreg,Nlead,Ntime))
      Allocate (SPEI_Reg_Ann(Nreg,Nlead,Ntime))
      Allocate (SPEI_Reg_Hai(Nreg,Nlead,Ntime))
      Allocate (Geo_obs(Nreg,Nlead,Ntime))
      Allocate (Geo_Ann(Nreg,Nlead,Ntime))
      Allocate (Geo_Hai(Nreg,Nlead,Ntime))
      SPEI_Reg_obs=Miss; SPEI_Reg_Ann=Miss; SPEI_Reg_Hai=Miss
      Geo_obs=Miss; Geo_Ann=Miss; Geo_Hai=Miss

      ! Cor_Ann_reg, Cor_Hai_reg, Cor_geo_Ann, Cor_geo_Hai  ! Nreg,Nlead
      if (Allocated (Cor_Ann_reg)) Deallocate (Cor_Ann_reg)
      if (Allocated (Cor_Hai_reg)) Deallocate (Cor_Hai_reg)
      if (Allocated (Cor_geo_Ann)) Deallocate (Cor_geo_Ann)
      if (Allocated (Cor_geo_Hai)) Deallocate (Cor_geo_Hai)
      Allocate (Cor_Ann_reg(Nreg,Nlead))
      Allocate (Cor_Hai_reg(Nreg,Nlead))
      Allocate (Cor_geo_Ann(Nreg,Nlead))
      Allocate (Cor_geo_Hai(Nreg,Nlead))
      Cor_Ann_reg=Miss; Cor_Hai_reg=Miss; Cor_geo_Ann=Miss; Cor_geo_Hai=Miss;
   End Subroutine Reinit
   !--------------------------------------------------------------------------------
   Subroutine Veri_Hai (idx,ilen,ilead,ilon,ilat)
      Integer :: idx,ilen,ilead,ilon,ilat,ispl, i,j,k,icount
      Real             :: XX(Ntime),YY(Ntime),ytmp
      Double precision :: x1d (Mxvar), y1d (Myvar)
      Real :: Cor, Prob

      YY(1:Ntime) = SPEI_obs(ilon,ilat,1:Ntime)
      XX(1:Ntime) = SPEI_Hai(ilon,ilat,ilead,1:Ntime)
      !--------------------------------------------------------
      Thre=Thres_obs
      Call Correlation(XX(:),YY(:),Ntime,Cor,prob,Miss)
      Call Cate_Veri  (YY(:),XX(:),Ntime,Thre)
      Cor_h(ilon,ilat,ilead)=Cor;  Prb_h(ilon,ilat,ilead)=prob; PC_h  (ilon,ilat,ilead)=PC0 
      POD_h(ilon,ilat,ilead)=POD0; SR_h (ilon,ilat,ilead)=SR0;  POFD_h(ilon,ilat,ilead)=POFD0 
      FAR_h(ilon,ilat,ilead)=FAR0
      HSS_h(ilon,ilat,ilead)=HSS0; CSI_h(ilon,ilat,ilead)=CSI0; ETS_h(ilon,ilat,ilead)=ETS0

      print"(A,10F8.3)","Cor_Hai: ",Cor,PC0,POD0,SR0,POFD0,FAR0,FBI0

   End Subroutine Veri_Hai
   !--------------------------------------------------------------------------------
   Subroutine Veri_New (idx,ilen,ilead,ilon,ilat)
      Character (Len=255) :: save_file
      Integer :: idx,ilen,ilead,ilon,ilat,ispl, i,j,k,icount
      Real             :: XX(Ntime),YY(Ntime)
      Double precision :: x1d (Mxvar), y1d (Myvar)
      Logical :: OK
      Integer, Allocatable :: Check(:)
      Real :: Cor, Prob

      YY(1:Ntime) = SPEI_obs(ilon,ilat,1:Ntime)
      XX(1:Ntime) = SPEI_Ann(ilon,ilat,ilead,1:Ntime)

      Thre=Thres_obs
      Call Correlation(XX(:),YY(:),Ntime,Cor,prob,Miss)
      print*,"------------------------------------------------------------------------------"
      Call Cate_Veri  (YY(:),XX(:),Ntime,Thre)
      Cor_a(ilon,ilat,ilead)=Cor;  Prb_a(ilon,ilat,ilead)=prob; PC_a  (ilon,ilat,ilead)=PC0
      POD_a(ilon,ilat,ilead)=POD0; SR_a (ilon,ilat,ilead)=SR0;  POFD_a(ilon,ilat,ilead)=POFD0 
      FAR_a(ilon,ilat,ilead)=FAR0
      HSS_a(ilon,ilat,ilead)=HSS0; CSI_a(ilon,ilat,ilead)=CSI0; ETS_a(ilon,ilat,ilead)=ETS0

      print"(A,10F8.3)","Cor_New: ",Cor,PC0,POD0,SR0,POFD0,FAR0,FBI0
   End Subroutine Veri_New
   !------------------------------------------------------------------------------
   Subroutine Read_all_Dr_IDXs (IDX_nm,ilen)
     Character (Len=*)  :: IDX_nm
     Character (Len=20) :: Var_nm
     Integer :: it,i,ilen,ilon,ilat,ilead,Nlo,Nla,Nme,Nt,Nt1,Nt2,icas, it1, it2, icpr, ict, icpet
     Real, Allocatable :: X4d(:,:,:,:),X3d(:,:,:),xlon(:),xlat(:),xlead(:),xtime(:)

     write (Fname,"(A,I2.2,A)") trim(Out_Dir)//"Dr_Ann_1983_2020_4PP_"//trim(IDX_nm)//"_",Len_SPI(ilen),".nc"
     Call rd_ncdf_4d (Fname,xlon,xlat,xlead,xtime,Nlo,Nla,Nle,Nt,SPEI_Ann,"ann_new")
     Deallocate (xlon,xlat,xlead,xtime)
     Call rd_ncdf_4d (Fname,xlon,xlat,xlead,xtime,Nlo,Nla,Nle,Nt,SPEI_Hai,"ann_hai")
     Deallocate (xlon,xlat,xlead,xtime)
     Call rd_ncdf_3d (Fname,xlon,xlat,xtime,Nlo,Nla,Nt,SPEI_obs,"obs")
     Deallocate (xlon,xlat,xtime)

     Where (IsNaN(SPEI_Ann)) SPEI_Ann=Miss
     Where (IsNaN(SPEI_Hai)) SPEI_Hai=Miss
     Where (IsNaN(SPEI_obs)) SPEI_obs=Miss
   End Subroutine Read_all_Dr_IDXs
   !------------------------------------------------------------------------------
   Subroutine Cate_Veri (O,F,N,Thre)
     Integer :: N,i
     Real :: O(N),F(N),Thre,Thre1

     Thre1 = Thres_fcs   ! F-Thres > O-Thres
     Where (O/=Miss.AND.O> Thre)   O=0
     Where (F/=Miss.AND.F> Thre1)  F=0
     Where (O/=Miss.AND.O<=Thre)   O=1
     Where (F/=Miss.AND.F<=Thre1)  F=1
     a=0; b=0; c=0; d=0
     Do i=1,N
        if (O(i)==1.AND.F(i)==1) a=a+1
        if (O(i)==1.AND.F(i)==0) c=c+1
        if (O(i)==0.AND.F(i)==1) b=b+1
        if (O(i)==0.AND.F(i)==0) d=d+1
     Enddo
     PC0  =PC  (a,b,c,d)
     POD0 =POD (a,b,c,d)
     SR0  =SR  (a,b,c,d)
     FAR0 =FAR (a,b,c,d)
     POFD0=POFD(a,b,c,d)
     FBI0 =FBI (a,b,c,d)
     HSS0 =HSS (a,b,c,d)
     CSI0 =TS  (a,b,c,d)
     ETS0 =ETS (a,b,c,d)
   End Subroutine Cate_Veri 
   !--------------------------------------------------------------------------------
   Subroutine Calc_Reg (ilead,ireg)
      Integer :: ilead,ireg,ilon,ilat,it,iireg,ic
      Real    :: x1(Nlon*Nlat),x2(Nlon*Nlat),x3(Nlon*Nlat)
      Real    :: X(Ntime), Y(Ntime)
      Real    :: t1,t2,t3,n1,n2,n3,m1,m2,m3
      Real    :: a1,a2,a3,cor,prob

      Do it=1,Ntime   ! Regional Mean of Drought index
         ic=0; x1=Miss; x2=Miss; x3=Miss
         Do ilon=1,Nlon
            Do ilat=1,Nlat
               iireg=Int(Regs(ilon,ilat))
               if (iireg==ireg) then
                  ic=ic+1
                  x1(ic) = SPEI_obs(ilon,ilat,it)
                  x2(ic) = SPEI_Ann(ilon,ilat,ilead,it)
                  x3(ic) = SPEI_Hai(ilon,ilat,ilead,it)
               endif
            Enddo
         Enddo
         SPEI_Reg_obs(ireg,ilead,it) = Ave (x1,ic,Miss)
         SPEI_Reg_Ann(ireg,ilead,it) = Ave (x2,ic,Miss)
         SPEI_Reg_Hai(ireg,ilead,it) = Ave (x3,ic,Miss)
      Enddo
      ! Regional Geographic Extent:
      Do it=1,Ntime
         n1=0; n2=0; n3=0; m1=0; m2=0; m3=0; 
         Do ilon=1,Nlon
            Do ilat=1,Nlat
               iireg=Int(Regs(ilon,ilat))
               if (iireg==ireg) then
                  a1=SPEI_obs(ilon,ilat,it)
                  a2=SPEI_Ann(ilon,ilat,ilead,it)
                  a3=SPEI_Hai(ilon,ilat,ilead,it)
                  if (a1/=Miss) then
                     n1=n1+1
                     if (a1<=Thres_obs) m1=m1+1
                  endif
                  if (a2/=Miss) then
                     n2=n2+1
                     if (a2<=Thres_fcs) m2=m2+1
                  endif
                  if (a3/=Miss) then
                     n3=n3+1
                     if (a3<=Thres_fcs) m3=m3+1
                  endif
               endif
            Enddo
         Enddo
         if (n1>0) Geo_obs(ireg,ilead,it) = m1/n1*100.
         if (n2>0) Geo_Ann(ireg,ilead,it) = m2/n2*100.
         if (n3>0) Geo_Hai(ireg,ilead,it) = m3/n3*100.
      Enddo
      ! Correlation between Model and obs:
      !Do ireg=1,Nreg
      !   Do ilead=1,Nlead
            X(1:Ntime) = SPEI_Reg_obs(ireg,ilead,1:Ntime)
            Y(1:Ntime) = SPEI_Reg_Ann(ireg,ilead,1:Ntime)
            Call Correlation(X,Y,Ntime,Cor,prob,Miss)
            Cor_Ann_reg(ireg,ilead) = Cor
            Y(1:Ntime) = SPEI_Reg_Hai(ireg,ilead,1:Ntime)
            Call Correlation(X,Y,Ntime,Cor,prob,Miss)
            Cor_Hai_reg(ireg,ilead) = Cor

            X(1:Ntime) = Geo_obs(ireg,ilead,1:Ntime)
            Y(1:Ntime) = Geo_Ann(ireg,ilead,1:Ntime)
            Call Correlation(X,Y,Ntime,Cor,prob,Miss)
            Cor_geo_Ann(ireg,ilead) = Cor
            Y(1:Ntime) = Geo_Hai(ireg,ilead,1:Ntime)
            Call Correlation(X,Y,Ntime,Cor,prob,Miss)
            Cor_geo_Hai(ireg,ilead) = Cor
      !   Enddo
      !Enddo
   End Subroutine Calc_Reg
   !--------------------------------------------------------------------------------
   Subroutine Write_Regional_Dr_Geo (IDX_nm,ilen)
      Character (Len=*) :: IDX_nm
      Character (Len=250) :: var_ln1, t_unit, var_ln, var_unit, lon_nm, lat_nm, z_nm, t_nm
      Real, Allocatable, Dimension (:) :: xreg, zlev, xtime
      INteger :: ilen, i, Nz

       Allocate (zlev(Nlead),xtime(Ntime),xreg(Nreg))
      Do i=1,Nreg;  xreg(i)=i; Enddo
      Do i=1,Nlead; zlev(i)=i; Enddo; Do i=1,Ntime; xtime(i)=i; Enddo
      t_unit="months since 1983-01-01 "; lon_nm="reg"; lat_nm="lead"; t_nm="time";
      var_unit="-"
      !----------------------------------
      write (Fname,"(A,I2.2,A)") trim(Out_Dir)//"Dr_Reg_Geo_1983_2020_4PP_"//trim(IDX_nm)//"_",Len_SPI(ilen),"_"//trim(Dr_Lev)//".nc"
      ! Drought index:
      var_ln="Trung binh vung cua chi so han theo Ann_New"
      Call wr_ncdf_3d (Fname,xreg,zlev,xtime,Nreg,Nlead,Ntime,SPEI_Reg_Ann,"new",t_unit, var_ln, var_unit, lon_nm, lat_nm, t_nm, Miss)
      var_ln="Trung binh vung cua chi so han theo Ensemble Mean"
      Call wr_ncdf_3d_apd (Fname,SPEI_Reg_Hai,"hai",Nreg,Nlead,Ntime,var_ln, var_unit, lon_nm, lat_nm, t_nm, Miss)
      var_ln="Trung binh vung cua chi so han quan trac"
      Call wr_ncdf_3d_apd (Fname,SPEI_Reg_obs,"obs",Nreg,Nlead,Ntime,var_ln, var_unit, lon_nm, lat_nm, t_nm, Miss)
      ! Geo extent:
      var_ln="Phan tram dien tich bi han theo Ann_New"
      Call wr_ncdf_3d_apd (Fname,Geo_Ann,"geo_ann",Nreg,Nlead,Ntime,var_ln, var_unit, lon_nm, lat_nm, t_nm, Miss)
      var_ln="Phan tram dien tich bi han theo Ensemble Mean"
      Call wr_ncdf_3d_apd (Fname,Geo_Hai,"geo_hai",Nreg,Nlead,Ntime,var_ln, var_unit, lon_nm, lat_nm, t_nm, Miss)
      var_ln="Phan tram dien tich bi han theo Obs"
      Call wr_ncdf_3d_apd (Fname,Geo_obs,"geo_obs",Nreg,Nlead,Ntime,var_ln, var_unit, lon_nm, lat_nm, t_nm, Miss)
      ! Correlation:
      var_ln="Correlation between Ann and Obs drought index"
      Call wr_ncdf_2d_apd (Fname,Cor_Ann_reg,"cor_ann",Nreg,Nlead, var_ln, var_unit, lon_nm, lat_nm, Miss)
      var_ln="Correlation between Ensemble Mean and Obs drought index"
      Call wr_ncdf_2d_apd (Fname,Cor_Hai_reg,"cor_hai",Nreg,Nlead, var_ln, var_unit, lon_nm, lat_nm, Miss)
      var_ln="Correlation between Ann and Obs geo extent"
      Call wr_ncdf_2d_apd (Fname,Cor_geo_Ann,"cor_geo_ann",Nreg,Nlead, var_ln, var_unit, lon_nm, lat_nm, Miss)
      var_ln="Correlation between Ensemble Mean and Obs geo extent"
      Call wr_ncdf_2d_apd (Fname,Cor_geo_Hai,"cor_geo_hai",Nreg,Nlead, var_ln, var_unit, lon_nm, lat_nm, Miss)
      ! Correlation to text file:
      write (Fname,"(A,I2.2,A)") trim(Out_Dir)//"Corr_Dr_Reg_Geo_1983_2020_"//trim(IDX_nm)//"_",Len_SPI(ilen),"_"//trim(Dr_Lev)//".txt"
      Open (3,file=Fname, Status="Unknown")
      write (3,*) "Correlation between observed drought index and Ann drought index"
      write (3,"(A18,6(4x,A3,I1))") "Sub-reg\L_Time",("LT=",i,i=1,Nlead)
      Do ireg=1,Nreg
         write(3,"(A17,I1,6F8.3)") "IDX Obs-Ann R",ireg,(Cor_Ann_reg(ireg,ilead),ilead=1,Nlead)
      Enddo
      write (3,*) "----------------------"

      write (3,*) "Correlation between observed drought index and Ensemble Mean drought index"
      Do ireg=1,Nreg
         write(3,"(A17,I1,6F8.3)") "IDX Obs-Hai R",ireg,(Cor_Hai_reg(ireg,ilead),ilead=1,Nlead)
      Enddo
      write (3,*) "----------------------"
      write (3,*) "Correlation between observed geo extent and Ann geo extent"
      Do ireg=1,Nreg
         write(3,"(A17,I1,6F8.3)") "Geo Obs-Ann R",ireg,(Cor_geo_Ann(ireg,ilead),ilead=1,Nlead)
      Enddo
      write (3,*) "----------------------"
      write (3,*) "Correlation between observed geo extent and Ensemble Mean geo extent"
      Do ireg=1,Nreg
         write(3,"(A17,I1,6F8.3)") "Geo Obs-Hai R",ireg,(Cor_geo_Hai(ireg,ilead),ilead=1,Nlead)
      Enddo
      Close (3)
   End Subroutine Write_Regional_Dr_Geo
   !--------------------------------------------------------------------------------
   Subroutine Write_Dr_Veri (IDX_nm,ilen) 
      Character (Len=*) :: IDX_nm
      Character (Len=250) :: var_ln1, t_unit, var_ln, var_unit, lon_nm, lat_nm, z_nm, t_nm
      Real, Allocatable, Dimension (:) :: zlev, xtime
      Real, Allocatable :: X4d(:,:,:,:)
       INteger :: ilen, i, Nz

      Allocate (zlev(Nlead),xtime(Ntime))
      Do i=1,Nlead; zlev(i)=i; Enddo; Do i=1,Ntime; xtime(i)=i; Enddo
      t_unit="months since 1983-01-01 "; lon_nm="lon"; lat_nm="lat"; t_nm="lead";
      var_unit="-"

       !----------------------------------
      write (Fname,"(A,I2.2,A)") trim(Out_Dir)//"Veri_Dr_Ann_1983_2020_4PP_"//trim(IDX_nm)//"_",Len_SPI(ilen),"_"//trim(Dr_Lev)//".nc"
      t_nm="lead"
      var_ln="Correlation - Ann New "
      Call wr_ncdf_3d (Fname,Lon,Lat,zlev,Nlon,Nlat,Nlead,Cor_a,"cor_a",t_unit, var_ln, var_unit, lon_nm, lat_nm, t_nm, Miss)
      var_ln="P-value of Correlation - Ann New "
      Call wr_ncdf_3d_apd (Fname,Prb_a,"pv_a",Nlon,Nlat,Nlead,var_ln, var_unit, lon_nm, lat_nm, t_nm, Miss)
      var_ln="Correlation - Ensemble Mean "
      Call wr_ncdf_3d_apd (Fname,Cor_h,"cor_h",Nlon,Nlat,Nlead,var_ln, var_unit, lon_nm, lat_nm, t_nm, Miss)
      var_ln="P-value of Correlation - Ensemble Mean "
      Call wr_ncdf_3d_apd (Fname,Prb_h,"pv_h",Nlon,Nlat,Nlead,var_ln, var_unit, lon_nm, lat_nm, t_nm, Miss)

      var_ln="PC - Ann New "
      Call wr_ncdf_3d_apd (Fname,PC_a,  "pc_a", Nlon,Nlat,Nlead,var_ln, var_unit, lon_nm, lat_nm, t_nm, Miss)
      var_ln="POD - Ann New "
      Call wr_ncdf_3d_apd (Fname,POD_a, "pod_a",Nlon,Nlat,Nlead,var_ln, var_unit, lon_nm, lat_nm, t_nm, Miss)
      var_ln="SR (success ratio) - Ann New "
      Call wr_ncdf_3d_apd (Fname,SR_a,  "sr_a", Nlon,Nlat,Nlead,var_ln, var_unit, lon_nm, lat_nm, t_nm, Miss)
      var_ln="POFD - Ann New "
      Call wr_ncdf_3d_apd (Fname,POFD_a,"pof_a",Nlon,Nlat,Nlead,var_ln, var_unit, lon_nm, lat_nm, t_nm, Miss)
      var_ln="FAR - Ann New "
      Call wr_ncdf_3d_apd (Fname,FAR_a, "far_a",Nlon,Nlat,Nlead,var_ln, var_unit, lon_nm, lat_nm, t_nm, Miss)

      var_ln="HSS - Ann New "
      Call wr_ncdf_3d_apd (Fname,HSS_a, "hss_a",Nlon,Nlat,Nlead,var_ln, var_unit, lon_nm, lat_nm, t_nm, Miss)
      var_ln="CSI - Ann New "
      Call wr_ncdf_3d_apd (Fname,CSI_a, "csi_a",Nlon,Nlat,Nlead,var_ln, var_unit, lon_nm, lat_nm, t_nm, Miss)
      var_ln="ETS - Ann New "
      Call wr_ncdf_3d_apd (Fname,ETS_a, "ets_a",Nlon,Nlat,Nlead,var_ln, var_unit, lon_nm, lat_nm, t_nm, Miss)

      var_ln="PC - Ensemble Mean "
      Call wr_ncdf_3d_apd (Fname,PC_h,  "pc_h", Nlon,Nlat,Nlead,var_ln, var_unit, lon_nm, lat_nm, t_nm, Miss)
      var_ln="POD - Ensemble Mean "
      Call wr_ncdf_3d_apd (Fname,POD_h, "pod_h",Nlon,Nlat,Nlead,var_ln, var_unit, lon_nm, lat_nm, t_nm, Miss)
      var_ln="SR (success ratio) - Ann New "
      Call wr_ncdf_3d_apd (Fname,SR_h,  "sr_h", Nlon,Nlat,Nlead,var_ln, var_unit, lon_nm, lat_nm, t_nm, Miss)
      var_ln="POFD - Ensemble Mean "
      Call wr_ncdf_3d_apd (Fname,POFD_h,"pof_h",Nlon,Nlat,Nlead,var_ln, var_unit, lon_nm, lat_nm, t_nm, Miss)
      var_ln="FAR - Ensemble Mean "
      Call wr_ncdf_3d_apd (Fname,FAR_h, "far_h",Nlon,Nlat,Nlead,var_ln, var_unit, lon_nm, lat_nm, t_nm, Miss)

      !HSS_a,CSI_a,ETS_a,HSS_h,CSI_h,ETS_h

      var_ln="HSS - Ensemble Mean "
      Call wr_ncdf_3d_apd (Fname,HSS_h, "hss_h",Nlon,Nlat,Nlead,var_ln, var_unit, lon_nm, lat_nm, t_nm, Miss)
      var_ln="CSI - Ensemble Mean "
      Call wr_ncdf_3d_apd (Fname,CSI_h, "csi_h",Nlon,Nlat,Nlead,var_ln, var_unit, lon_nm, lat_nm, t_nm, Miss)
      var_ln="ETS - Ensemble Mean "
      Call wr_ncdf_3d_apd (Fname,ETS_h, "ets_h",Nlon,Nlat,Nlead,var_ln, var_unit, lon_nm, lat_nm, t_nm, Miss)
      Deallocate (zlev,xtime)
   End Subroutine Write_Dr_Veri
   !------------------------------------------------------------------------------

   Include "/home/tanpv/Mylibs/sub_rd_ncdf_Tan.F90"
   Include "/home/tanpv/Mylibs/sub_wr_ncdf_Tan.F90"
   Include "/home/tanpv/Mylibs/Function_Valid_Ar1.f90"
   Include "/home/tanpv/Mylibs/Correlation.f90"
   Include "/home/tanpv/Mylibs/Sub_Verification.f90"
   Include "/home/tanpv/Mylibs/Ave.f90"
!   Include "/home/tanpv/Mylibs/Sub_neural_2024.f90"

   !------------------------------------------------------------------------------
   End
   Include "/home/tanpv/Mylibs/Student_Prob.f90"
