PROGRAM ens_ana,77
IMPLICIT NONE
INCLUDE 'enscv.inc'
! INCLUDE 'mp.inc'
INTEGER :: nx,ny,nz
INTEGER :: i,j,ll
INTEGER :: istat,ierr,iSTATUS,nunit
INTEGER :: nmember,nf,anaopt
CHARACTER (LEN=256) :: ensdir,outdir
CHARACTER (LEN=256) :: memberheader(15), anaheader
CHARACTER (LEN=256) :: outheader
CHARACTER (LEN= 6) :: tlevel(50)
REAL :: sp(50,15) ! spread (nf, nvar)
REAL :: mse(50,15),sde(50,15),mnbias(50,15),sdbias(50,15),disp(50,15)
REAL :: corr(50,15),sd1(50,15),sd2(50,15)
REAL :: sum1(50,15),sum2(50,15)
REAL :: amax,amin
REAL :: totlegrid,totlegrid1,totlegrid2
NAMELIST /input_data/ ensdir,nmember,memberheader,nf,tlevel,anaopt,anaheader
NAMELIST /output_data/ outdir,outheader
REAL, ALLOCATABLE :: mslp(:,:)
REAL, ALLOCATABLE :: hgt250(:,:), vort250(:,:), uwind250(:,:), vwind250(:,:)
REAL, ALLOCATABLE :: hgt500(:,:), vort500(:,:), uwind500(:,:), vwind500(:,:)
REAL, ALLOCATABLE :: hgt850(:,:), vort850(:,:), uwind850(:,:), vwind850(:,:)
REAL, ALLOCATABLE :: temp850(:,:)
REAL, ALLOCATABLE :: thck(:,:), rh700(:,:), omega700(:,:),temp2m(:,:), dewp2m(:,:)
REAL, ALLOCATABLE :: accppt(:,:), convppt(:,:)
REAL, ALLOCATABLE :: sreh(:,:),li(:,:),cape(:,:),brn(:,:),cin(:,:),vhel(:,:),pw(:,:)
REAL, ALLOCATABLE :: cmpref(:,:),refl1km(:,:),refl4km(:,:),u10m(:,:),v10m(:,:)
REAL, ALLOCATABLE :: mslpa(:,:)
REAL, ALLOCATABLE :: hgt250a(:,:), vort250a(:,:), uwind250a(:,:), vwind250a(:,:)
REAL, ALLOCATABLE :: hgt500a(:,:), vort500a(:,:), uwind500a(:,:), vwind500a(:,:)
REAL, ALLOCATABLE :: hgt850a(:,:), vort850a(:,:), uwind850a(:,:), vwind850a(:,:)
REAL, ALLOCATABLE :: temp850a(:,:)
REAL, ALLOCATABLE :: thcka(:,:),rh700a(:,:),omega700a(:,:),temp2ma(:,:),dewp2ma(:,:)
REAL, ALLOCATABLE :: accppta(:,:), convppta(:,:)
REAL, ALLOCATABLE :: sreha(:,:),lia(:,:),capea(:,:),brna(:,:),cina(:,:)
REAL, ALLOCATABLE :: vhela(:,:),pwa(:,:)
REAL, ALLOCATABLE :: cmprefa(:,:),refl1kma(:,:),refl4kma(:,:),u10ma(:,:),v10ma(:,:)
REAL, ALLOCATABLE :: mslpm(:,:),hgt250m(:,:),hgt500m(:,:),hgt850m(:,:)
REAL, ALLOCATABLE :: temp850m(:,:),temp2mm(:,:),dewp2mm(:,:),accpptm(:,:),convpptm(:,:)
REAL, ALLOCATABLE :: cmprefm(:,:),refl1kmm(:,:),refl4kmm(:,:),u10mm(:,:),v10mm(:,:)
REAL, ALLOCATABLE :: mslpt(:,:),hgt250t(:,:),hgt500t(:,:),hgt850t(:,:)
REAL, ALLOCATABLE :: temp850t(:,:),temp2mt(:,:),dewp2mt(:,:),accpptt(:,:),convpptt(:,:)
REAL, ALLOCATABLE :: cmpreft(:,:),refl1kmt(:,:),refl4kmt(:,:),u10mt(:,:),v10mt(:,:)
! F.KONG add for probability calculation
REAL, ALLOCATABLE :: pbrain(:,:,:),pbref1(:,:,:),pbref4(:,:,:),pbcref(:,:,:)
REAL :: factor
! end F.KONG
CHARACTER (LEN=256) :: filenm,outfile
CHARACTER (LEN=132) :: char
CHARACTER (LEN=15) :: varname,unitnm
CHARACTER (LEN=40) :: q3dname,q3dunit
! REAL :: qswcorn, qswcorw, qnecorn, qnecorw
INTEGER :: hour,mimute,dweek,day,month,year
INTEGER :: nt,nm
! nproc_x = 1
! nproc_y = 1
! readsplit = 0
! joindmp = 1
! nprocs = 1
! max_fopen = 1
READ(5,input_data,END=100)
WRITE(6,'(/a/)')'Namelist block input_data sucessfully read in.'
WRITE(6,input_data)
READ(5,output_data,END=101)
WRITE(6,'(/a/)')'Namelist block output_data sucessfully read in.'
WRITE(6,output_data)
GO TO 111
100 WRITE(6,'(a)') &
'Error reading NAMELIST block input_data, STOP'
STOP
101 WRITE(6,'(a)') &
'Error reading NAMELIST block output_data, STOP'
STOP
111 CONTINUE
filenm = trim(ensdir)//trim(memberheader(1))//'.mspres'//tlevel(1)
print *, trim(filenm)
CALL getunit
( nunit)
OPEN(UNIT=nunit,FILE=trim(filenm),STATUS='old', FORM='unformatted', &
ERR=9000, IOSTAT=istat)
READ(nunit, ERR=9000, END=9000, IOSTAT=istat) nx,ny,nz
CLOSE(UNIT=nunit)
CALL retunit(nunit)
print *, 'nx,ny:',nx,ny
ALLOCATE(mslp(nx,ny),hgt250(nx,ny),vort250(nx,ny),uwind250(nx,ny),vwind250(nx,ny))
ALLOCATE(hgt500(nx,ny),vort500(nx,ny),uwind500(nx,ny),vwind500(nx,ny))
ALLOCATE(hgt850(nx,ny),vort850(nx,ny),uwind850(nx,ny),vwind850(nx,ny),temp850(nx,ny))
ALLOCATE(thck(nx,ny),rh700(nx,ny),omega700(nx,ny),temp2m(nx,ny),dewp2m(nx,ny))
ALLOCATE(accppt(nx,ny),convppt(nx,ny),sreh(nx,ny),li(nx,ny),cape(nx,ny))
ALLOCATE(brn(nx,ny),cin(nx,ny),vhel(nx,ny),pw(nx,ny),cmpref(nx,ny))
ALLOCATE(refl1km(nx,ny),refl4km(nx,ny),u10m(nx,ny),v10m(nx,ny))
! CALL binread2d(nx,ny,trim(filenm),varname,unitnm,mslp)
! print *, trim(varname),' ',trim(unitnm),nx,ny
!CALL a3dmax0(mslp,1,nx,1,nx-1,1,ny,1,ny,1,1,1,1,amax,amin)
!print *,'MSLP -- amax, amin: ',amax, amin
!stop
if(anaopt == 1) then ! allocate arrays for analysis fields
ALLOCATE(mslpa(nx,ny),hgt250a(nx,ny),vort250a(nx,ny),uwind250a(nx,ny),vwind250a(nx,ny))
ALLOCATE(hgt500a(nx,ny),vort500a(nx,ny),uwind500a(nx,ny),vwind500a(nx,ny))
ALLOCATE(hgt850a(nx,ny),vort850a(nx,ny),uwind850a(nx,ny),vwind850a(nx,ny),temp850a(nx,ny))
ALLOCATE(thcka(nx,ny),rh700a(nx,ny),omega700a(nx,ny),temp2ma(nx,ny),dewp2ma(nx,ny))
ALLOCATE(accppta(nx,ny),convppta(nx,ny),sreha(nx,ny),lia(nx,ny),capea(nx,ny))
ALLOCATE(brna(nx,ny),cina(nx,ny),vhela(nx,ny),pwa(nx,ny),cmprefa(nx,ny))
ALLOCATE(refl1kma(nx,ny),refl4kma(nx,ny),u10ma(nx,ny),v10ma(nx,ny))
endif
ALLOCATE(mslpm(nx,ny),hgt250m(nx,ny),hgt500m(nx,ny),hgt850m(nx,ny))
ALLOCATE(temp850m(nx,ny),temp2mm(nx,ny),dewp2mm(nx,ny),accpptm(nx,ny),convpptm(nx,ny))
ALLOCATE(cmprefm(nx,ny),refl1kmm(nx,ny),refl4kmm(nx,ny),u10mm(nx,ny),v10mm(nx,ny))
ALLOCATE(mslpt(nx,ny),hgt250t(nx,ny),hgt500t(nx,ny),hgt850t(nx,ny))
ALLOCATE(temp850t(nx,ny),temp2mt(nx,ny),dewp2mt(nx,ny),accpptt(nx,ny),convpptt(nx,ny))
ALLOCATE(cmpreft(nx,ny),refl1kmt(nx,ny),refl4kmt(nx,ny),u10mt(nx,ny),v10mt(nx,ny))
ALLOCATE(pbrain(nx,ny,4),pbref1(nx,ny,3),pbref4(nx,ny,3),pbcref(nx,ny,3))
factor = 100./float(nmember) ! probability factor (weight) from each member
! factor = 100./float(nmember)+0.01 ! probability factor (weight) from each member
sp = 0.0
mse = 0.0
sde = 0.0
mnbias = 0.0
corr = 0.0
disp = 0.0
sd1 = 0.0
sd2 = 0.0
sum1 = 0.0
sum2 = 0.0
totlegrid = float(nx*ny)
do nt=1,nf ! begin time loop
! zero following arrays
mslpm=0
hgt250m=0
hgt500m=0
hgt850m=0
temp850m=0
temp2mm=0
dewp2mm=0
accpptm=0
convpptm=0
cmprefm=0
refl1kmm=0
refl4kmm=0
u10mm=0
v10mm=0
mslpt=0
hgt250t=0
hgt500t=0
hgt850t=0
temp850t=0
temp2mt=0
dewp2mt=0
accpptt=0
convpptt=0
cmpreft=0
refl1kmt=0
refl4kmt=0
u10mt=0
v10mt=0
pbrain=0.0
pbref1=0.0
pbref4=0.0
pbcref=0.0
if(anaopt == 1) then ! read in analysis data
filenm = trim(ensdir)//trim(anaheader)//'.mspres'//tlevel(nt)
print *, trim(filenm)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,mslpa)
print *, varname,unitnm,nx,ny
filenm = trim(ensdir)//trim(anaheader)//'.hgt250'//tlevel(nt)
print *, trim(filenm)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,hgt250a)
print *, varname,unitnm,nx,ny
filenm = trim(ensdir)//trim(anaheader)//'.u250__'//tlevel(nt)
print *, trim(filenm)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,uwind250a)
print *, varname,unitnm,nx,ny
filenm = trim(ensdir)//trim(anaheader)//'.v250__'//tlevel(nt)
print *, trim(filenm)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,vwind250a)
print *, varname,unitnm,nx,ny
filenm = trim(ensdir)//trim(anaheader)//'.hgt500'//tlevel(nt)
print *, trim(filenm)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,hgt500a)
print *, varname,unitnm,nx,ny
filenm = trim(ensdir)//trim(anaheader)//'.u500__'//tlevel(nt)
print *, trim(filenm)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,uwind500a)
print *, varname,unitnm,nx,ny
filenm = trim(ensdir)//trim(anaheader)//'.v500__'//tlevel(nt)
print *, trim(filenm)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,vwind500a)
print *, varname,unitnm,nx,ny
filenm = trim(ensdir)//trim(anaheader)//'.hgt850'//tlevel(nt)
print *, trim(filenm)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,hgt850a)
print *, varname,unitnm,nx,ny
filenm = trim(ensdir)//trim(anaheader)//'.u850__'//tlevel(nt)
print *, trim(filenm)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,uwind850a)
print *, varname,unitnm,nx,ny
filenm = trim(ensdir)//trim(anaheader)//'.v850__'//tlevel(nt)
print *, trim(filenm)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,vwind850a)
print *, varname,unitnm,nx,ny
filenm = trim(ensdir)//trim(anaheader)//'.tmp850'//tlevel(nt)
print *, trim(filenm)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,temp850a)
print *, varname,unitnm,nx,ny
filenm = trim(ensdir)//trim(anaheader)//'.temp2m'//tlevel(nt)
print *, trim(filenm)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,temp2ma)
print *, varname,unitnm,nx,ny
filenm = trim(ensdir)//trim(anaheader)//'.dewp2m'//tlevel(nt)
print *, trim(filenm)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,dewp2ma)
print *, varname,unitnm,nx,ny
filenm = trim(ensdir)//trim(anaheader)//'.accppt'//tlevel(nt)
print *, trim(filenm)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,accppta)
print *, varname,unitnm,nx,ny
filenm = trim(ensdir)//trim(anaheader)//'.srh03_'//tlevel(nt)
print *, trim(filenm)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,sreha)
print *, varname,unitnm,nx,ny
filenm = trim(ensdir)//trim(anaheader)//'.vhel__'//tlevel(nt)
print *, trim(filenm)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,vhela)
print *, varname,unitnm,nx,ny
filenm = trim(ensdir)//trim(anaheader)//'.sbcape'//tlevel(nt)
print *, trim(filenm)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,capea)
print *, varname,unitnm,nx,ny
filenm = trim(ensdir)//trim(anaheader)//'.sbcins'//tlevel(nt)
print *, trim(filenm)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,cina)
print *, varname,unitnm,nx,ny
filenm = trim(ensdir)//trim(anaheader)//'.pwat__'//tlevel(nt)
print *, trim(filenm)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,pwa)
print *, varname,unitnm,nx,ny
filenm = trim(ensdir)//trim(anaheader)//'.cmpref'//tlevel(nt)
print *, trim(filenm)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,cmprefa)
print *, varname,unitnm,nx,ny
filenm = trim(ensdir)//trim(anaheader)//'.ref1km'//tlevel(nt)
print *, trim(filenm)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,refl1kma)
print *, varname,unitnm,nx,ny
filenm = trim(ensdir)//trim(anaheader)//'.u10m__'//tlevel(nt)
print *, trim(filenm)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,u10ma)
print *, varname,unitnm,nx,ny
filenm = trim(ensdir)//trim(anaheader)//'.v10m__'//tlevel(nt)
print *, trim(filenm)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,v10ma)
print *, varname,unitnm,nx,ny
endif ! end read in analysis data
do nm=1,nmember ! begin member loop
filenm = trim(ensdir)//trim(memberheader(nm))//'.mspres'//tlevel(nt)
print *, trim(filenm)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,mslp)
print *, varname,unitnm,nx,ny
do i=1,nx
do j=1,ny
mslpm(i,j)=mslpm(i,j)+mslp(i,j)
mslpt(i,j)=mslpt(i,j)+mslp(i,j)*mslp(i,j)
enddo
enddo
filenm = trim(ensdir)//trim(memberheader(nm))//'.hgt250'//tlevel(nt)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,hgt250)
print *, varname,unitnm,nx,ny
do i=1,nx
do j=1,ny
hgt250m(i,j)=hgt250m(i,j)+hgt250(i,j)
hgt250t(i,j)=hgt250t(i,j)+hgt250(i,j)*hgt250(i,j)
enddo
enddo
!
filenm = trim(ensdir)//trim(memberheader(nm))//'.u250__'//tlevel(nt)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,uwind250)
print *, varname,unitnm,nx,ny
!
filenm = trim(ensdir)//trim(memberheader(nm))//'.v250__'//tlevel(nt)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,vwind250)
print *, varname,unitnm,nx,ny
filenm = trim(ensdir)//trim(memberheader(nm))//'.hgt500'//tlevel(nt)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,hgt500)
print *, varname,unitnm,nx,ny
do i=1,nx
do j=1,ny
hgt500m(i,j)=hgt500m(i,j)+hgt500(i,j)
hgt500t(i,j)=hgt500t(i,j)+hgt500(i,j)*hgt500(i,j)
enddo
enddo
filenm = trim(ensdir)//trim(memberheader(nm))//'.u500__'//tlevel(nt)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,uwind500)
print *, varname,unitnm,nx,ny
filenm = trim(ensdir)//trim(memberheader(nm))//'.v500__'//tlevel(nt)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,vwind500)
print *, varname,unitnm,nx,ny
filenm = trim(ensdir)//trim(memberheader(nm))//'.hgt850'//tlevel(nt)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,hgt850)
print *, varname,unitnm,nx,ny
!CALL a3dmax0(hgt850,1,nx,1,nx-1,1,ny,1,ny,1,1,1,1,amax,amin)
!print *,'hgt850 -- amax, amin: ',amax, amin
totlegrid1 = 0.0
do i=1,nx
do j=1,ny
IF(hgt850(i,j) > -500.0) THEN ! excluding -9999.0 grids
hgt850m(i,j)=hgt850m(i,j)+hgt850(i,j)
hgt850t(i,j)=hgt850t(i,j)+hgt850(i,j)*hgt850(i,j)
totlegrid1 = totlegrid1 + 1.0
END IF
enddo
enddo
filenm = trim(ensdir)//trim(memberheader(nm))//'.u850__'//tlevel(nt)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,uwind850)
print *, varname,unitnm,nx,ny
filenm = trim(ensdir)//trim(memberheader(nm))//'.v850__'//tlevel(nt)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,vwind850)
print *, varname,unitnm,nx,ny
filenm = trim(ensdir)//trim(memberheader(nm))//'.tmp850'//tlevel(nt)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,temp850)
print *, varname,unitnm,nx,ny
!CALL a3dmax0(temp850,1,nx,1,nx-1,1,ny,1,ny,1,1,1,1,amax,amin)
!print *,'temp850 -- amax, amin: ',amax, amin
totlegrid2 = 0.0
do i=1,nx
do j=1,ny
IF(temp850(i,j) > -500.0) THEN ! excluding -9999.0 grids
temp850m(i,j)=temp850m(i,j)+temp850(i,j)
temp850t(i,j)=temp850t(i,j)+temp850(i,j)*temp850(i,j)
totlegrid2 = totlegrid2 + 1.0
END IF
enddo
enddo
filenm = trim(ensdir)//trim(memberheader(nm))//'.temp2m'//tlevel(nt)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,temp2m)
print *, varname,unitnm,nx,ny
do i=1,nx
do j=1,ny
temp2mm(i,j)=temp2mm(i,j)+temp2m(i,j)
temp2mt(i,j)=temp2mt(i,j)+temp2m(i,j)*temp2m(i,j)
enddo
enddo
filenm = trim(ensdir)//trim(memberheader(nm))//'.dewp2m'//tlevel(nt)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,dewp2m)
print *, varname,unitnm,nx,ny
do i=1,nx
do j=1,ny
dewp2mm(i,j)=dewp2mm(i,j)+dewp2m(i,j)
dewp2mt(i,j)=dewp2mt(i,j)+dewp2m(i,j)*dewp2m(i,j)
enddo
enddo
filenm = trim(ensdir)//trim(memberheader(nm))//'.accppt'//tlevel(nt)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,accppt)
print *, varname,unitnm,nx,ny
do i=1,nx
do j=1,ny
accpptm(i,j)=accpptm(i,j)+accppt(i,j)
accpptt(i,j)=accpptt(i,j)+accppt(i,j)*accppt(i,j)
enddo
enddo
! calculate probability of accppt
do i=1,nx
do j=1,ny
if(accppt(i,j)/25.4.ge.0.10) pbrain(i,j,1)=pbrain(i,j,1)+factor ! >0.10 inch
if(accppt(i,j)/25.4.ge.0.25) pbrain(i,j,2)=pbrain(i,j,2)+factor ! >0.25 inch
if(accppt(i,j)/25.4.ge.0.50) pbrain(i,j,3)=pbrain(i,j,3)+factor ! >0.50 inch
if(accppt(i,j)/25.4.ge.1.00) pbrain(i,j,4)=pbrain(i,j,4)+factor ! >1.00 inch
enddo
enddo
! 5 more fields to be read in
! print *, '5 more fields to be read in.'
filenm = trim(ensdir)//trim(memberheader(nm))//'.srh03_'//tlevel(nt)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,sreh)
print *, varname,unitnm,nx,ny
filenm = trim(ensdir)//trim(memberheader(nm))//'.vhel__'//tlevel(nt)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,vhel)
print *, varname,unitnm,nx,ny
filenm = trim(ensdir)//trim(memberheader(nm))//'.sbcape'//tlevel(nt)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,cape)
print *, varname,unitnm,nx,ny
filenm = trim(ensdir)//trim(memberheader(nm))//'.sbcins'//tlevel(nt)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,cin)
print *, varname,unitnm,nx,ny
filenm = trim(ensdir)//trim(memberheader(nm))//'.pwat__'//tlevel(nt)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,pw)
print *, varname,unitnm,nx,ny
filenm = trim(ensdir)//trim(memberheader(nm))//'.cmpref'//tlevel(nt)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,cmpref)
print *, varname,unitnm,nx,ny
do i=1,nx
do j=1,ny
cmprefm(i,j)=cmprefm(i,j)+cmpref(i,j)
cmpreft(i,j)=cmpreft(i,j)+cmpref(i,j)*cmpref(i,j)
enddo
enddo
! calculate probability of cmpref
do i=1,nx
do j=1,ny
if(cmpref(i,j).ge.35.0) pbcref(i,j,1)=pbcref(i,j,1)+factor ! >35 dBZ
if(cmpref(i,j).ge.45.0) pbcref(i,j,2)=pbcref(i,j,2)+factor ! >45 dBZ
if(cmpref(i,j).ge.55.0) pbcref(i,j,3)=pbcref(i,j,3)+factor ! >55 dBZ
enddo
enddo
filenm = trim(ensdir)//trim(memberheader(nm))//'.ref1km'//tlevel(nt)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,refl1km)
print *, varname,unitnm,nx,ny
do i=1,nx
do j=1,ny
refl1kmm(i,j)=refl1kmm(i,j)+refl1km(i,j)
refl1kmt(i,j)=refl1kmt(i,j)+refl1km(i,j)*refl1km(i,j)
enddo
enddo
! calculate probability of refl
do i=1,nx
do j=1,ny
if(refl1km(i,j).ge.35.0) pbref1(i,j,1)=pbref1(i,j,1)+factor ! >35 dBZ
if(refl1km(i,j).ge.45.0) pbref1(i,j,2)=pbref1(i,j,2)+factor ! >45 dBZ
if(refl1km(i,j).ge.55.0) pbref1(i,j,3)=pbref1(i,j,3)+factor ! >55 dBZ
enddo
enddo
filenm = trim(ensdir)//trim(memberheader(nm))//'.u10m__'//tlevel(nt)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,u10m)
print *, varname,unitnm,nx,ny
do i=1,nx
do j=1,ny
u10mm(i,j)=u10mm(i,j)+u10m(i,j)
u10mt(i,j)=u10mt(i,j)+u10m(i,j)*u10m(i,j)
enddo
enddo
filenm = trim(ensdir)//trim(memberheader(nm))//'.v10m__'//tlevel(nt)
CALL binread2d
(nx,ny,trim(filenm),varname,unitnm,v10m)
print *, varname,unitnm,nx,ny
do i=1,nx
do j=1,ny
v10mm(i,j)=v10mm(i,j)+v10m(i,j)
v10mt(i,j)=v10mt(i,j)+v10m(i,j)*v10m(i,j)
enddo
enddo
! if(nt == 1 .AND. nm ==1) then
! do j=1,ny
! write(15,'(5e16.8)') (temp850(i,j),i=1,nx)
! enddo
! endif
enddo ! end member loop
! calculate ensemble mean & square spread
do i=1,nx
do j=1,ny
mslpm(i,j)=mslpm(i,j)/float(nmember)
mslpt(i,j)=mslpt(i,j)/float(nmember)-mslpm(i,j)*mslpm(i,j)
hgt250m(i,j)=hgt250m(i,j)/float(nmember)
hgt250t(i,j)=hgt250t(i,j)/float(nmember)-hgt250m(i,j)*hgt250m(i,j)
hgt500m(i,j)=hgt500m(i,j)/float(nmember)
hgt500t(i,j)=hgt500t(i,j)/float(nmember)-hgt500m(i,j)*hgt500m(i,j)
hgt850m(i,j)=hgt850m(i,j)/float(nmember)
hgt850t(i,j)=hgt850t(i,j)/float(nmember)-hgt850m(i,j)*hgt850m(i,j)
temp850m(i,j)=temp850m(i,j)/float(nmember)
temp850t(i,j)=temp850t(i,j)/float(nmember)-temp850m(i,j)*temp850m(i,j)
temp2mm(i,j)=temp2mm(i,j)/float(nmember)
temp2mt(i,j)=temp2mt(i,j)/float(nmember)-temp2mm(i,j)*temp2mm(i,j)
dewp2mm(i,j)=dewp2mm(i,j)/float(nmember)
dewp2mt(i,j)=dewp2mt(i,j)/float(nmember)-dewp2mm(i,j)*dewp2mm(i,j)
accpptm(i,j)=accpptm(i,j)/float(nmember)
accpptt(i,j)=accpptt(i,j)/float(nmember)-accpptm(i,j)*accpptm(i,j)
! convpptm(i,j)=convpptm(i,j)/float(nmember)
! convpptt(i,j)=convpptt(i,j)/float(nmember)-convpptm(i,j)*convpptm(i,j)
cmprefm(i,j)=cmprefm(i,j)/float(nmember)
cmpreft(i,j)=cmpreft(i,j)/float(nmember)-cmprefm(i,j)*cmprefm(i,j)
refl1kmm(i,j)=refl1kmm(i,j)/float(nmember)
refl1kmt(i,j)=refl1kmt(i,j)/float(nmember)-refl1kmm(i,j)*refl1kmm(i,j)
u10mm(i,j)=u10mm(i,j)/float(nmember)
u10mt(i,j)=u10mt(i,j)/float(nmember)-u10mm(i,j)*u10mm(i,j)
v10mm(i,j)=v10mm(i,j)/float(nmember)
v10mt(i,j)=v10mt(i,j)/float(nmember)-v10mm(i,j)*v10mm(i,j)
enddo
enddo
do i=1,nx
do j=1,ny
mslpt(i,j)=abs(mslpt(i,j))
hgt250t(i,j)=abs(hgt250t(i,j))
hgt500t(i,j)=abs(hgt500t(i,j))
hgt850t(i,j)=abs(hgt850t(i,j))
temp850t(i,j)=abs(temp850t(i,j))
temp2mt(i,j)=abs(temp2mt(i,j))
dewp2mt(i,j)=abs(dewp2mt(i,j))
accpptt(i,j)=abs(accpptt(i,j))
! convpptt(i,j)=abs(convpptt(i,j))
cmpreft(i,j)=abs(cmpreft(i,j))
refl1kmt(i,j)=abs(refl1kmt(i,j))
u10mt(i,j)=abs(u10mt(i,j))
v10mt(i,j)=abs(v10mt(i,j))
enddo
enddo
! write out ensemble means
outfile = trim(outdir)//'mean/'//trim(outheader)//'.'
filenm=trim(outfile)//'mslp__'//tlevel(nt)
print *, trim(filenm)
q3dname='MSLP'
q3dunit='hPa'
CALL bindump2d
(nx,ny,trim(filenm),q3dname,q3dunit,mslpm)
filenm=trim(outfile)//'hgt250'//tlevel(nt)
print *, trim(filenm)
q3dname='HGHT'
q3dunit='m'
CALL bindump2d
(nx,ny,trim(filenm),q3dname,q3dunit,hgt250m)
filenm=trim(outfile)//'hgt500'//tlevel(nt)
print *, trim(filenm)
q3dname='HGHT'
q3dunit='m'
CALL bindump2d
(nx,ny,trim(filenm),q3dname,q3dunit,hgt500m)
filenm=trim(outfile)//'hgt850'//tlevel(nt)
print *, trim(filenm)
q3dname='HGHT'
q3dunit='m'
CALL bindump2d
(nx,ny,trim(filenm),q3dname,q3dunit,hgt850m)
filenm=trim(outfile)//'tmp850'//tlevel(nt)
print *, trim(filenm)
q3dname='TMPC'
q3dunit='C'
CALL bindump2d
(nx,ny,trim(filenm),q3dname,q3dunit,temp850m)
filenm=trim(outfile)//'temp2m'//tlevel(nt)
print *, trim(filenm)
q3dname='temp2m'
q3dunit='F'
CALL bindump2d
(nx,ny,trim(filenm),q3dname,q3dunit,temp2mm)
filenm=trim(outfile)//'dewp2m'//tlevel(nt)
print *, trim(filenm)
q3dname='dewp2m'
q3dunit='F'
CALL bindump2d
(nx,ny,trim(filenm),q3dname,q3dunit,dewp2mm)
filenm=trim(outfile)//'accppt'//tlevel(nt)
print *, trim(filenm)
q3dname='RAIN'
q3dunit='mm'
CALL bindump2d
(nx,ny,trim(filenm),q3dname,q3dunit,accpptm)
filenm=trim(outfile)//'cmpref'//tlevel(nt)
print *, trim(filenm)
q3dname='cmpref'
q3dunit='dBZ'
CALL bindump2d
(nx,ny,trim(filenm),q3dname,q3dunit,cmprefm)
filenm=trim(outfile)//'ref1km'//tlevel(nt)
print *, trim(filenm)
q3dname='refl1km'
q3dunit='dBZ'
CALL bindump2d
(nx,ny,trim(filenm),q3dname,q3dunit,refl1kmm)
filenm=trim(outfile)//'u10m__'//tlevel(nt)
print *, trim(filenm)
q3dname='UREL'
q3dunit='m/s'
CALL bindump2d
(nx,ny,trim(filenm),q3dname,q3dunit,u10mm)
filenm=trim(outfile)//'v10m__'//tlevel(nt)
print *, trim(filenm)
q3dname='VREL'
q3dunit='m/s'
CALL bindump2d
(nx,ny,trim(filenm),q3dname,q3dunit,v10mm)
! write out probabilities
outfile = trim(outdir)//'prob/'//trim(outheader)//'.'
filenm=trim(outfile)//'pbr010'//tlevel(nt)
print *, trim(filenm)
q3dname='PBRAIN010'
q3dunit='%'
CALL bindump2d
(nx,ny,trim(filenm),q3dname,q3dunit,pbrain(1,1,1))
filenm=trim(outfile)//'pbr025'//tlevel(nt)
print *, trim(filenm)
q3dname='PBRAIN025'
q3dunit='%'
CALL bindump2d
(nx,ny,trim(filenm),q3dname,q3dunit,pbrain(1,1,2))
filenm=trim(outfile)//'pbr050'//tlevel(nt)
print *, trim(filenm)
q3dname='PBRAIN050'
q3dunit='%'
CALL bindump2d
(nx,ny,trim(filenm),q3dname,q3dunit,pbrain(1,1,3))
filenm=trim(outfile)//'pbr100'//tlevel(nt)
print *, trim(filenm)
q3dname='PBRAIN100'
q3dunit='%'
CALL bindump2d
(nx,ny,trim(filenm),q3dname,q3dunit,pbrain(1,1,4))
filenm=trim(outfile)//'pbz135'//tlevel(nt)
print *, trim(filenm)
q3dname='PBREFLC1KM35'
q3dunit='%'
CALL bindump2d
(nx,ny,trim(filenm),q3dname,q3dunit,pbref1(1,1,1))
filenm=trim(outfile)//'pbz145'//tlevel(nt)
print *, trim(filenm)
q3dname='PBREFLC1KM45'
q3dunit='%'
CALL bindump2d
(nx,ny,trim(filenm),q3dname,q3dunit,pbref1(1,1,2))
filenm=trim(outfile)//'pbz155'//tlevel(nt)
print *, trim(filenm)
q3dname='PBREFLC1KM55'
q3dunit='%'
CALL bindump2d
(nx,ny,trim(filenm),q3dname,q3dunit,pbref1(1,1,3))
filenm=trim(outfile)//'pbcz35'//tlevel(nt)
print *, trim(filenm)
q3dname='PBCMPREF35'
q3dunit='%'
CALL bindump2d
(nx,ny,trim(filenm),q3dname,q3dunit,pbcref(1,1,1))
filenm=trim(outfile)//'pbcz45'//tlevel(nt)
print *, trim(filenm)
q3dname='PBCMPREF45'
q3dunit='%'
CALL bindump2d
(nx,ny,trim(filenm),q3dname,q3dunit,pbcref(1,1,2))
filenm=trim(outfile)//'pbcz55'//tlevel(nt)
print *, trim(filenm)
q3dname='PBCMPREF55'
q3dunit='%'
CALL bindump2d
(nx,ny,trim(filenm),q3dname,q3dunit,pbcref(1,1,3))
! calculate domain rms spread
do i=1,nx
do j=1,ny
sp(nt,1)=sp(nt,1)+mslpt(i,j)
sp(nt,2)=sp(nt,2)+hgt250t(i,j)
sp(nt,3)=sp(nt,3)+hgt500t(i,j)
sp(nt,4)=sp(nt,4)+hgt850t(i,j)
sp(nt,5)=sp(nt,5)+temp850t(i,j)
sp(nt,6)=sp(nt,6)+temp2mt(i,j)
sp(nt,7)=sp(nt,7)+dewp2mt(i,j)
sp(nt,8)=sp(nt,8)+accpptt(i,j)
! sp(nt,9)=sp(nt,9)+convpptt(i,j)
sp(nt,10)=sp(nt,10)+cmpreft(i,j)
sp(nt,11)=sp(nt,11)+refl1kmt(i,j)
sp(nt,12)=sp(nt,12)+u10mt(i,j)
sp(nt,13)=sp(nt,13)+v10mt(i,j)
enddo
enddo
print *,'totlegrid,totlegrid1,totlegrid2:', &
int(totlegrid),int(totlegrid1),int(totlegrid2)
sp(nt,1)=sqrt(sp(nt,1)/totlegrid) ! domain average spread for mslp
sp(nt,2)=sqrt(sp(nt,2)/totlegrid) ! domain average spread for hgt250
sp(nt,3)=sqrt(sp(nt,3)/totlegrid) ! domain average spread for hgt500
sp(nt,4)=sqrt(sp(nt,4)/totlegrid1) ! domain average spread for hgt850
sp(nt,5)=sqrt(sp(nt,5)/totlegrid2) ! domain average spread for temp850
sp(nt,6)=sqrt(sp(nt,6)/totlegrid) ! domain average spread for temp2m
sp(nt,7)=sqrt(sp(nt,7)/totlegrid) ! domain average spread for dewp2m
sp(nt,8)=sqrt(sp(nt,8)/totlegrid) ! domain average spread for accppt
! sp(nt,9)=sqrt(sp(nt,9)/totlegrid) ! domain average spread for convppt
sp(nt,10)=sqrt(sp(nt,10)/totlegrid) ! domain average spread for cmpref
sp(nt,11)=sqrt(sp(nt,11)/totlegrid) ! domain average spread for refl
sp(nt,12)=sqrt(sp(nt,12)/totlegrid) ! domain average spread for u10m
sp(nt,13)=sqrt(sp(nt,13)/totlegrid) ! domain average spread for v10m
! calculate and write out ensemble spread
do i=1,nx
do j=1,ny
mslpt(i,j)=sqrt(mslpt(i,j))
hgt250t(i,j)=sqrt(hgt250t(i,j))
hgt500t(i,j)=sqrt(hgt500t(i,j))
hgt850t(i,j)=sqrt(hgt850t(i,j))
temp850t(i,j)=sqrt(temp850t(i,j))
temp2mt(i,j)=sqrt(temp2mt(i,j))
dewp2mt(i,j)=sqrt(dewp2mt(i,j))
accpptt(i,j)=sqrt(accpptt(i,j))
! convpptt(i,j)=sqrt(convpptt(i,j))
cmpreft(i,j)=sqrt(cmpreft(i,j))
refl1kmt(i,j)=sqrt(refl1kmt(i,j))
u10mt(i,j)=sqrt(u10mt(i,j))
v10mt(i,j)=sqrt(v10mt(i,j))
enddo
enddo
! write out binary format spread fields
outfile = trim(outdir)//'sprd/'//trim(outheader)//'.'
filenm=trim(outfile)//'mslp__'//tlevel(nt)
print *, trim(filenm)
q3dname='MSLP'
q3dunit='hPa'
CALL bindump2d
(nx,ny,trim(filenm),q3dname,q3dunit,mslpt)
filenm=trim(outfile)//'hgt500'//tlevel(nt)
print *, trim(filenm)
q3dname='HGHT'
q3dunit='m'
CALL bindump2d
(nx,ny,trim(filenm),q3dname,q3dunit,hgt500t)
filenm=trim(outfile)//'temp2m'//tlevel(nt)
print *, trim(filenm)
q3dname='temp2m'
q3dunit='F'
CALL bindump2d
(nx,ny,trim(filenm),q3dname,q3dunit,temp2mt)
filenm=trim(outfile)//'dewp2m'//tlevel(nt)
print *, trim(filenm)
q3dname='dewp2m'
q3dunit='F'
CALL bindump2d
(nx,ny,trim(filenm),q3dname,q3dunit,dewp2mt)
filenm=trim(outfile)//'accppt'//tlevel(nt)
print *, trim(filenm)
q3dname='RAIN'
q3dunit='mm'
CALL bindump2d
(nx,ny,trim(filenm),q3dname,q3dunit,accppt)
filenm=trim(outfile)//'ref1km'//tlevel(nt)
print *, trim(filenm)
q3dname='refl1km'
q3dunit='dBZ'
CALL bindump2d
(nx,ny,trim(filenm),q3dname,q3dunit,refl1kmt)
filenm=trim(outfile)//'u10m__'//tlevel(nt)
print *, trim(filenm)
q3dname='u10m'
q3dunit='m/s'
CALL bindump2d
(nx,ny,trim(filenm),q3dname,q3dunit,u10mt)
filenm=trim(outfile)//'v10m__'//tlevel(nt)
print *, trim(filenm)
q3dname='v10m'
q3dunit='m/s'
CALL bindump2d
(nx,ny,trim(filenm),q3dname,q3dunit,v10mt)
if(anaopt ==1) then ! calculate error-related quantities
! calculate mse, ...
do i=1,nx
do j=1,ny
sum1(nt,1)=sum1(nt,1)+mslpm(i,j)
sum1(nt,3)=sum1(nt,3)+hgt500m(i,j)
sum1(nt,5)=sum1(nt,5)+temp850m(i,j)
sum1(nt,6)=sum1(nt,6)+temp2mm(i,j)
sum1(nt,7)=sum1(nt,7)+dewp2mm(i,j)
sum1(nt,8)=sum1(nt,8)+accpptm(i,j)
sum1(nt,11)=sum1(nt,11)+refl1kmm(i,j)
sum1(nt,12)=sum1(nt,12)+u10mm(i,j)
sum1(nt,13)=sum1(nt,13)+v10mm(i,j)
sum2(nt,1)=sum2(nt,1)+mslpa(i,j)
sum2(nt,3)=sum2(nt,3)+hgt500a(i,j)
sum2(nt,5)=sum2(nt,5)+temp850a(i,j)
sum2(nt,6)=sum2(nt,6)+temp2ma(i,j)
sum2(nt,7)=sum2(nt,7)+dewp2ma(i,j)
sum2(nt,8)=sum2(nt,8)+accppta(i,j)
sum2(nt,11)=sum2(nt,11)+refl1kma(i,j)
sum2(nt,12)=sum2(nt,12)+u10ma(i,j)
sum2(nt,13)=sum2(nt,13)+v10ma(i,j)
mse(nt,1)=mse(nt,1)+(mslpm(i,j)-mslpa(i,j))**2
mse(nt,3)=mse(nt,3)+(hgt500m(i,j)-hgt500a(i,j))**2
mse(nt,5)=mse(nt,5)+(temp850m(i,j)-temp850a(i,j))**2
mse(nt,6)=mse(nt,6)+(temp2mm(i,j)-temp2ma(i,j))**2
mse(nt,7)=mse(nt,7)+(dewp2mm(i,j)-dewp2ma(i,j))**2
mse(nt,8)=mse(nt,8)+(accpptm(i,j)-accppta(i,j))**2
mse(nt,11)=mse(nt,11)+(refl1kmm(i,j)-refl1kma(i,j))**2
mse(nt,12)=mse(nt,12)+(u10mm(i,j)-u10ma(i,j))**2
mse(nt,13)=mse(nt,13)+(v10mm(i,j)-v10ma(i,j))**2
mnbias(nt,1)=mnbias(nt,1)+(mslpm(i,j)-mslpa(i,j))
mnbias(nt,3)=mnbias(nt,3)+(hgt500m(i,j)-hgt500a(i,j))
mnbias(nt,5)=mnbias(nt,5)+(temp850m(i,j)-temp850a(i,j))
mnbias(nt,6)=mnbias(nt,6)+(temp2mm(i,j)-temp2ma(i,j))
mnbias(nt,7)=mnbias(nt,7)+(dewp2mm(i,j)-dewp2ma(i,j))
mnbias(nt,8)=mnbias(nt,8)+(accpptm(i,j)-accppta(i,j))
mnbias(nt,11)=mnbias(nt,11)+(refl1kmm(i,j)-refl1kma(i,j))
mnbias(nt,12)=mnbias(nt,12)+(u10mm(i,j)-u10ma(i,j))
mnbias(nt,13)=mnbias(nt,13)+(v10mm(i,j)-v10ma(i,j))
enddo
enddo
sum1(nt,1)=sum1(nt,1)/totlegrid
sum1(nt,3)=sum1(nt,3)/totlegrid
sum1(nt,5)=sum1(nt,5)/totlegrid2
sum1(nt,6)=sum1(nt,6)/totlegrid
sum1(nt,7)=sum1(nt,7)/totlegrid
sum1(nt,8)=sum1(nt,8)/totlegrid
sum1(nt,11)=sum1(nt,11)/totlegrid
sum1(nt,12)=sum1(nt,12)/totlegrid
sum1(nt,13)=sum1(nt,13)/totlegrid
sum2(nt,1)=sum2(nt,1)/totlegrid
sum2(nt,3)=sum2(nt,3)/totlegrid
sum2(nt,5)=sum2(nt,5)/totlegrid2
sum2(nt,6)=sum2(nt,6)/totlegrid
sum2(nt,7)=sum2(nt,7)/totlegrid
sum2(nt,8)=sum2(nt,8)/totlegrid
sum2(nt,11)=sum2(nt,11)/totlegrid
sum2(nt,12)=sum2(nt,12)/totlegrid
sum2(nt,13)=sum2(nt,13)/totlegrid
mse(nt,1)=sqrt(mse(nt,1)/totlegrid)
mse(nt,3)=sqrt(mse(nt,3)/totlegrid)
mse(nt,5)=sqrt(mse(nt,5)/totlegrid2)
mse(nt,6)=sqrt(mse(nt,6)/totlegrid)
mse(nt,7)=sqrt(mse(nt,7)/totlegrid)
mse(nt,8)=sqrt(mse(nt,8)/totlegrid)
mse(nt,11)=sqrt(mse(nt,11)/totlegrid)
mse(nt,12)=sqrt(mse(nt,12)/totlegrid)
mse(nt,13)=sqrt(mse(nt,13)/totlegrid)
mnbias(nt,1)=mnbias(nt,1)/totlegrid
mnbias(nt,3)=mnbias(nt,3)/totlegrid
mnbias(nt,5)=mnbias(nt,5)/totlegrid2
mnbias(nt,6)=mnbias(nt,6)/totlegrid
mnbias(nt,7)=mnbias(nt,7)/totlegrid
mnbias(nt,8)=mnbias(nt,8)/totlegrid
mnbias(nt,11)=mnbias(nt,11)/totlegrid
mnbias(nt,12)=mnbias(nt,12)/totlegrid
mnbias(nt,13)=mnbias(nt,13)/totlegrid
do i=1,nx
do j=1,ny
sd1(nt,1)=sd1(nt,1)+(mslpm(i,j)-sum1(nt,1))**2
sd1(nt,3)=sd1(nt,3)+(hgt500m(i,j)-sum1(nt,3))**2
sd1(nt,5)=sd1(nt,5)+(temp850m(i,j)-sum1(nt,5))**2
sd1(nt,6)=sd1(nt,6)+(temp2mm(i,j)-sum1(nt,6))**2
sd1(nt,7)=sd1(nt,7)+(dewp2mm(i,j)-sum1(nt,7))**2
sd1(nt,8)=sd1(nt,8)+(accpptm(i,j)-sum1(nt,8))**2
sd1(nt,11)=sd1(nt,11)+(refl1kmm(i,j)-sum1(nt,11))**2
sd1(nt,12)=sd1(nt,12)+(u10mm(i,j)-sum1(nt,12))**2
sd1(nt,13)=sd1(nt,13)+(v10mm(i,j)-sum1(nt,13))**2
sd2(nt,1)=sd2(nt,1)+(mslpa(i,j)-sum2(nt,1))**2
sd2(nt,3)=sd2(nt,3)+(hgt500a(i,j)-sum2(nt,3))**2
sd2(nt,5)=sd2(nt,5)+(temp850a(i,j)-sum2(nt,5))**2
sd2(nt,6)=sd2(nt,6)+(temp2ma(i,j)-sum2(nt,6))**2
sd2(nt,7)=sd2(nt,7)+(dewp2ma(i,j)-sum2(nt,7))**2
sd2(nt,8)=sd2(nt,8)+(accppta(i,j)-sum2(nt,8))**2
sd2(nt,11)=sd2(nt,11)+(refl1kma(i,j)-sum2(nt,11))**2
sd2(nt,12)=sd2(nt,12)+(u10ma(i,j)-sum2(nt,12))**2
sd2(nt,13)=sd2(nt,13)+(v10ma(i,j)-sum2(nt,13))**2
sde(nt,1)=sde(nt,1)+(mslpm(i,j)-sum1(nt,1)-mslpa(i,j)+sum2(nt,1))**2
sde(nt,3)=sde(nt,3)+(hgt500m(i,j)-sum1(nt,3)-hgt500a(i,j)+sum2(nt,3))**2
sde(nt,5)=sde(nt,5)+(temp850m(i,j)-sum1(nt,5)-temp850a(i,j)+sum2(nt,5))**2
sde(nt,6)=sde(nt,6)+(temp2mm(i,j)-sum1(nt,6)-temp2ma(i,j)+sum2(nt,6))**2
sde(nt,7)=sde(nt,7)+(dewp2mm(i,j)-sum1(nt,7)-dewp2ma(i,j)+sum2(nt,7))**2
sde(nt,8)=sde(nt,8)+(accpptm(i,j)-sum1(nt,8)-accppta(i,j)+sum2(nt,8))**2
sde(nt,11)=sde(nt,11)+(refl1kmm(i,j)-sum1(nt,11)-refl1kma(i,j)+ &
sum2(nt,11))**2
sde(nt,12)=sde(nt,12)+(u10mm(i,j)-sum1(nt,12)-u10ma(i,j)+sum2(nt,12))**2
sde(nt,13)=sde(nt,13)+(v10mm(i,j)-sum1(nt,13)-v10ma(i,j)+sum2(nt,13))**2
corr(nt,1)=corr(nt,1)+(mslpm(i,j)-sum1(nt,1))*(mslpa(i,j)-sum2(nt,1))
corr(nt,3)=corr(nt,3)+(hgt500m(i,j)-sum1(nt,3))*(hgt500a(i,j)-sum2(nt,3))
corr(nt,5)=corr(nt,5)+(temp850m(i,j)-sum1(nt,5))*(temp850a(i,j)-sum2(nt,5))
corr(nt,6)=corr(nt,6)+(temp2mm(i,j)-sum1(nt,6))*(temp2ma(i,j)-sum2(nt,6))
corr(nt,7)=corr(nt,7)+(dewp2mm(i,j)-sum1(nt,7))*(dewp2ma(i,j)-sum2(nt,7))
corr(nt,8)=corr(nt,8)+(accpptm(i,j)-sum1(nt,8))*(accppta(i,j)-sum2(nt,8))
corr(nt,11)=corr(nt,11)+(refl1kmm(i,j)-sum1(nt,11))*(refl1kma(i,j)- &
sum2(nt,11))
corr(nt,12)=corr(nt,12)+(u10mm(i,j)-sum1(nt,12))*(u10ma(i,j)-sum2(nt,12))
corr(nt,13)=corr(nt,13)+(v10mm(i,j)-sum1(nt,13))*(v10ma(i,j)-sum2(nt,13))
enddo
enddo
sd1(nt,1)=sqrt(sd1(nt,1)/totlegrid)
sd1(nt,3)=sqrt(sd1(nt,3)/totlegrid)
sd1(nt,5)=sqrt(sd1(nt,5)/totlegrid2)
sd1(nt,6)=sqrt(sd1(nt,6)/totlegrid)
sd1(nt,7)=sqrt(sd1(nt,7)/totlegrid)
sd1(nt,8)=sqrt(sd1(nt,8)/totlegrid)
sd1(nt,11)=sqrt(sd1(nt,11)/totlegrid)
sd1(nt,12)=sqrt(sd1(nt,12)/totlegrid)
sd1(nt,13)=sqrt(sd1(nt,13)/totlegrid)
sd2(nt,1)=sqrt(sd2(nt,1)/totlegrid)
sd2(nt,3)=sqrt(sd2(nt,3)/totlegrid)
sd2(nt,5)=sqrt(sd2(nt,5)/totlegrid2)
sd2(nt,6)=sqrt(sd2(nt,6)/totlegrid)
sd2(nt,7)=sqrt(sd2(nt,7)/totlegrid)
sd2(nt,8)=sqrt(sd2(nt,8)/totlegrid)
sd2(nt,11)=sqrt(sd2(nt,11)/totlegrid)
sd2(nt,12)=sqrt(sd2(nt,12)/totlegrid)
sd2(nt,13)=sqrt(sd2(nt,13)/totlegrid)
sde(nt,1)=sqrt(sde(nt,1)/totlegrid)
sde(nt,3)=sqrt(sde(nt,3)/totlegrid)
sde(nt,5)=sqrt(sde(nt,5)/totlegrid2)
sde(nt,6)=sqrt(sde(nt,6)/totlegrid)
sde(nt,7)=sqrt(sde(nt,7)/totlegrid)
sde(nt,8)=sqrt(sde(nt,8)/totlegrid)
sde(nt,11)=sqrt(sde(nt,11)/totlegrid)
sde(nt,12)=sqrt(sde(nt,12)/totlegrid)
sde(nt,13)=sqrt(sde(nt,13)/totlegrid)
sdbias(nt,1)=sd1(nt,1)-sd2(nt,1)
sdbias(nt,3)=sd1(nt,3)-sd2(nt,3)
sdbias(nt,5)=sd1(nt,5)-sd2(nt,5)
sdbias(nt,6)=sd1(nt,6)-sd2(nt,6)
sdbias(nt,7)=sd1(nt,7)-sd2(nt,7)
sdbias(nt,8)=sd1(nt,8)-sd2(nt,8)
sdbias(nt,11)=sd1(nt,11)-sd2(nt,11)
sdbias(nt,12)=sd1(nt,12)-sd2(nt,12)
sdbias(nt,13)=sd1(nt,13)-sd2(nt,13)
! corr(nt,1)=corr(nt,1)/(totlegrid*sd1(nt,1)*sd2(nt,1))
! corr(nt,3)=corr(nt,3)/(totlegrid*sd1(nt,3)*sd2(nt,3))
! corr(nt,5)=corr(nt,5)/(totlegrid*sd1(nt,5)*sd2(nt,5))
! corr(nt,6)=corr(nt,6)/(totlegrid*sd1(nt,6)*sd2(nt,6))
! corr(nt,7)=corr(nt,7)/(totlegrid*sd1(nt,7)*sd2(nt,7))
do ll=1,13
if(sd1(nt,ll)*sd2(nt,ll)<=0.0) then
corr(nt,ll)=1.0
else
if(ll == 5) then
corr(nt,ll)=amin1(corr(nt,ll)/(totlegrid2*sd1(nt,ll)*sd2(nt,ll)),1.0)
else
corr(nt,ll)=amin1(corr(nt,ll)/(totlegrid*sd1(nt,ll)*sd2(nt,ll)),1.0)
endif
endif
enddo
! corr(nt,11)=corr(nt,11)/(totlegrid*sd1(nt,11)*sd2(nt,11))
! corr(nt,12)=corr(nt,12)/(totlegrid*sd1(nt,12)*sd2(nt,12))
! corr(nt,13)=corr(nt,13)/(totlegrid*sd1(nt,13)*sd2(nt,13))
disp(nt,1)=sqrt(2.*(1.-corr(nt,1))*sd1(nt,1)*sd2(nt,1))
disp(nt,3)=sqrt(2.*(1.-corr(nt,3))*sd1(nt,3)*sd2(nt,3))
disp(nt,5)=sqrt(2.*(1.-corr(nt,5))*sd1(nt,5)*sd2(nt,5))
disp(nt,6)=sqrt(2.*(1.-corr(nt,6))*sd1(nt,6)*sd2(nt,6))
disp(nt,7)=sqrt(2.*(1.-corr(nt,7))*sd1(nt,7)*sd2(nt,7))
disp(nt,8)=sqrt(2.*(1.-corr(nt,8))*sd1(nt,8)*sd2(nt,8))
disp(nt,11)=sqrt(2.*(1.-corr(nt,11))*sd1(nt,11)*sd2(nt,11))
disp(nt,12)=sqrt(2.*(1.-corr(nt,12))*sd1(nt,12)*sd2(nt,12))
disp(nt,13)=sqrt(2.*(1.-corr(nt,13))*sd1(nt,13)*sd2(nt,13))
endif ! end calculating error-related quantities
enddo ! end time loop
! write out spread arrays
open(4, file=trim(outdir)//'ens_sp.asc',form='formatted')
write(4,*) '& ntimes =',nf
write(4,'(a)') '& mslp hgt250 hgt500 hgt850 temp850 temp2m dewp2m accppt convppt cmpref refl u10m v10m'
do j=1,nf
write(4,'(i5,13f10.4)') j-1,(sp(j,i),i=1,13)
enddo
close(4)
if(anaopt ==1) then ! write out ensemble error analysis
open(4, file=trim(outdir)//'ens_err_rmse.asc',form='formatted')
write(4,*) '& ntimes =',nf
write(4,'(a)') '& mslp hgt250 hgt500 hgt850 temp850 temp2m dewp2m accppt convppt cmpref refl u10m v10m'
do j=1,nf
write(4,'(i5,13f10.4)') j-1,(mse(j,i),i=1,13)
enddo
close(4)
open(4, file=trim(outdir)//'ens_err_sde.asc',form='formatted')
write(4,*) '& ntimes =',nf
write(4,'(a)') '& mslp hgt250 hgt500 hgt850 temp850 temp2m dewp2m accppt convppt cmpref refl u10m v10m'
do j=1,nf
write(4,'(i5,13f10.4)') j-1,(sde(j,i),i=1,13)
enddo
close(4)
open(4, file=trim(outdir)//'ens_err_mnbias.asc',form='formatted')
write(4,*) '& ntimes =',nf
write(4,'(a)') '& mslp hgt250 hgt500 hgt850 temp850 temp2m dewp2m accppt convppt cmpref refl u10m v10m'
do j=1,nf
write(4,'(i5,13f10.4)') j-1,(mnbias(j,i),i=1,13)
enddo
close(4)
open(4, file=trim(outdir)//'ens_err_sdbias.asc',form='formatted')
write(4,*) '& ntimes =',nf
write(4,'(a)') '& mslp hgt250 hgt500 hgt850 temp850 temp2m dewp2m accppt convppt cmpref refl u10m v10m'
do j=1,nf
write(4,'(i5,13f10.4)') j-1,(sdbias(j,i),i=1,13)
enddo
close(4)
open(4, file=trim(outdir)//'ens_err_corr.asc',form='formatted')
write(4,*) '& ntimes =',nf
write(4,'(a)') '& mslp hgt250 hgt500 hgt850 temp850 temp2m dewp2m accppt convppt cmpref refl u10m v10m'
do j=1,nf
write(4,'(i5,13f10.4)') j-1,(100.*corr(j,i),i=1,13)
enddo
close(4)
open(4, file=trim(outdir)//'ens_err_disp.asc',form='formatted')
write(4,*) '& ntimes =',nf
write(4,'(a)') '& mslp hgt250 hgt500 hgt850 temp850 temp2m dewp2m accppt convppt cmpref refl u10m v10m'
do j=1,nf
write(4,'(i5,13f10.4)') j-1,(disp(j,i),i=1,13)
enddo
close(4)
endif
STOP
9000 CONTINUE ! I/O errors
CLOSE(UNIT=nunit)
CALL retunit(nunit)
IF (istat < 0) THEN
iSTATUS = 2
PRINT *, 'BINREAD2D: I/O ERRORS OCCURRED ', &
'(possible end of record or file): ',istat, iSTATUS
ELSE IF (istat > 0) THEN
iSTATUS = 2
PRINT *, 'BINREAD2D: UNRECOVERABLE I/O ERRORS OCCURRED: ', &
istat,iSTATUS
END IF
END PROGRAM ens_ana