Initial commit
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
! optimally group a gappy order time series into different sections with an average
|
||||
! length
|
||||
subroutine grouping(numpoints,time,windowsize,minnum,
|
||||
×tart,timeend,nsections,nrange,confirmvar,rangemin)
|
||||
implicit none
|
||||
integer numpoints,nsections,minnum,n,i,ipass,j,nrange
|
||||
double precision time(numpoints),timestart(numpoints),
|
||||
& timeend(numpoints),gap,windowsize,diff,fmin(nrange),
|
||||
& fmax(nrange),confirmvar(nrange,numpoints),rangemin(nrange)
|
||||
|
||||
! the first mark is always time(1)-1.0d-9*time(1). time must be ordered from
|
||||
! low to high
|
||||
! rangemin is the minimum range of a variable in a section
|
||||
|
||||
nsections=1
|
||||
n=0
|
||||
timestart(nsections)=time(1)-1.0d-9*time(1)
|
||||
do j=1,nrange
|
||||
fmin(j)=confirmvar(j,1)
|
||||
fmax(j)=confirmvar(j,1)
|
||||
enddo
|
||||
do i=2,numpoints
|
||||
gap=time(i)-time(i-1)
|
||||
if(gap.ge.windowsize.and.nsections.gt.1)then
|
||||
! there is a large gap. Put all members in the current section into the previous
|
||||
! section and start the current section from time(i)
|
||||
timeend(nsections-1)=time(i-1)
|
||||
timestart(nsections)=time(i)
|
||||
n=0
|
||||
do j=1,nrange
|
||||
fmin(j)=confirmvar(j,i)
|
||||
fmax(j)=confirmvar(j,i)
|
||||
enddo
|
||||
else
|
||||
diff=time(i)-timestart(nsections)
|
||||
do j=1,nrange
|
||||
if(fmin(j).gt.confirmvar(j,i))then
|
||||
fmin(j)=confirmvar(j,i)
|
||||
endif
|
||||
if(fmax(j).lt.confirmvar(j,i))then
|
||||
fmax(j)=confirmvar(j,i)
|
||||
endif
|
||||
enddo
|
||||
ipass=1
|
||||
if(diff.lt.windowsize)then
|
||||
ipass=0
|
||||
endif
|
||||
do j=1,nrange
|
||||
if((fmax(j)-fmin(j)).lt.rangemin(j))then
|
||||
ipass=0
|
||||
endif
|
||||
enddo
|
||||
if(ipass.eq.0)then
|
||||
n=n+1
|
||||
else
|
||||
if(n.ge.minnum)then
|
||||
timeend(nsections)=time(i)
|
||||
nsections=nsections+1
|
||||
timestart(nsections)=time(i)
|
||||
n=0
|
||||
do j=1,nrange
|
||||
fmin(j)=confirmvar(j,i)
|
||||
fmax(j)=confirmvar(j,i)
|
||||
enddo
|
||||
else
|
||||
n=n+1
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
enddo
|
||||
nsections=nsections-1
|
||||
timeend(nsections)=time(numpoints)
|
||||
return
|
||||
end
|
||||
Reference in New Issue
Block a user