Files
piscal/dataassim/math/othersupmath/meancyclegapfilling.f
T
2016-02-03 18:52:05 +00:00

60 lines
1.5 KiB
FortranFixed

subroutine meancyclegapfilling(nsamp,xvar,yvar0,nminno0)
implicit none
!Fill gaps in yvar with the mean cycle approach. xvar must be repeated cycles.
integer nsamp,nminno0,nk,nminno
double precision xvar(nsamp),yvar0(nsamp)
integer i,j,k,m,n
double precision yvector(nsamp),fn9999,tiny,yvar(nsamp)
parameter(fn9999=-9999.0d0,tiny=1.0d-7)
!
do i=1,nsamp
yvar(i)=yvar0(i)
enddo
do i=1,nsamp
nminno=nminno0
if(dabs(yvar(i)-fn9999).gt.tiny)goto 70
7 n=0
k=i-1
nk=0
10 if(k.eq.0)goto 30
if(dabs(xvar(k)-xvar(i)).gt.tiny)goto 20
nk=nk+1
if(dabs(yvar0(k)-fn9999).lt.tiny)goto 20
n=n+1
yvector(n)=yvar0(k)
if(nk.ge.nminno/2)goto 30
20 k=k-1
goto 10
30 m=i+1
nk=0
40 if(m.gt.nsamp)goto 60
if(dabs(xvar(m)-xvar(i)).gt.tiny)goto 50
nk=nk+1
if(dabs(yvar0(m)-fn9999).lt.tiny)goto 50
n=n+1
yvector(n)=yvar0(m)
if(nk.ge.nminno/2)goto 60
50 m=m+1
goto 40
60 if(n.lt.nminno0)then
nminno=nminno+1
goto 7
endif
yvar(i)=0.0d0
do m=1,n
yvar(i)=yvar(i)+yvector(m)
enddo
if(n.eq.0)then
yvar(i)=-9.999d+199
else
yvar(i)=yvar(i)/dble(n)
endif
70 continue
enddo
do i=1,nsamp
yvar0(i)=yvar(i)
enddo
return
end
!####################################################################