program Cal_HSS real,parameter :: NSATE=3, NT=AAAA ! Vi lay trung binh ca vung nen NT=ntime real,parameter :: ng=NNNN real :: dat1(NT), obs(NT), HSS1(NSATE), POD1(NSATE), FAR1(NSATE) character (len = 10), dimension (NSATE) :: sate=(/'CMORPH','GSMaP','TRMM'/) ! real :: PC, E, HSS, HSS2 do is=1,NSATE open(2,file="input/ALL_OBS_VVVV.txt",status="old") open(11,file="input/ALL_"//trim(sate(is))//"_VVVV.txt",status="old") Do i=1,NT read(11,*) dat1(i) read(2,*) obs(i) Enddo close(11) close(2) HSS1(is)=THSS(dat1,obs,NT,ng) POD1(is)=TPOD(dat1,obs,NT,ng) FAR1(is)=TFAR(dat1,obs,NT,ng) Enddo write(*,*) "NT===", NT, "NGUONG ===",ng open(3,file="KQ_VVVV.txt",status="unknown") write(3,"A11,F5.1,3(1x,5(F7.3))")"NGUONG=",ng, (HSS1(is),is=1,NSATE), (POD1(is),is=1,NSATE), (FAR1(is),is=1,NSATE) close(3) End Function THSS(X,Y,N,NGU) Integer :: i real :: N,A,B,C,D,NZ real :: NGU, FIX=0.0 Real :: X(N), Y(N) Real :: PC,E A=0 B=0 C=0 D=0 write(*,*) "test2- N, NGUONG",N, NGU Do i = 1, N If ((X(i).ge.NGU).and.(Y(i).ge.NGU).and.(Y(i).ge.FIX)) then A=A+1 Endif If ((X(i).ge.NGU).and.(Y(i).lt.NGU).and.(Y(i).ge.FIX)) then B=B+1 Endif If ((X(i).lt.NGU).and.(Y(i).ge.NGU).and.(Y(i).ge.FIX)) then C=C+1 Endif If ((X(i).lt.NGU).and.(Y(i).lt.NGU).and.(Y(i).ge.FIX)) then D=D+1 Endif Enddo write(*,*) "test3-ABCD --", A, B, C, D NZ=A+B+C+D PC=((A+D)/NZ) E=(((A+C)/NZ)*((A+B)/NZ))+(((B+D)/NZ)*((C+D)/NZ)) THSS=((PC-E)/(1-E)) write(*,*) "test --N, PC, E, THSS --", NZ, PC, E, THSS Return End Function ! POD Function TPOD(X,Y,N,NGU) Integer :: i real :: N,A,B,C,D,NZ real :: NGU,FIX=0.0 Real :: X(N), Y(N) Real :: POD A=0 B=0 C=0 D=0 Do i = 1, N If ((X(i).ge.NGU).and.(Y(i).ge.NGU).and.(Y(i).ge.FIX)) then A=A+1 Endif If ((X(i).ge.NGU).and.(Y(i).lt.NGU).and.(Y(i).ge.FIX)) then B=B+1 Endif If ((X(i).lt.NGU).and.(Y(i).ge.NGU).and.(Y(i).ge.FIX)) then C=C+1 Endif If ((X(i).lt.NGU).and.(Y(i).lt.NGU).and.(Y(i).ge.FIX)) then D=D+1 Endif Enddo POD=(A/(A+C)) TPOD=POD Return End Function ! FAR Function TFAR(X,Y,N,NGU) Integer :: i real :: N,A,B,C,D,NZ real :: NGU,FIX=0.0 Real :: X(N), Y(N) Real :: FAR A=0 B=0 C=0 D=0 Do i = 1, N If ((X(i).ge.NGU).and.(Y(i).ge.NGU).and.(Y(i).ge.FIX)) then A=A+1 Endif If ((X(i).ge.NGU).and.(Y(i).lt.NGU).and.(Y(i).ge.FIX)) then B=B+1 Endif If ((X(i).lt.NGU).and.(Y(i).ge.NGU).and.(Y(i).ge.FIX)) then C=C+1 Endif If ((X(i).lt.NGU).and.(Y(i).lt.NGU).and.(Y(i).ge.FIX)) then D=D+1 Endif Enddo FAR=(B/(A+B)) TFAR=FAR Return End Function