238 DOUBLE PRECISION,
INTENT(IN OUT) :: w(*)
239 INTEGER,
INTENT(IN) :: n
240 DOUBLE PRECISION,
INTENT(OUT) :: aux(n)
242 DOUBLE PRECISION :: b(*),x(*),v(*),suma,ratio
245 aux(i)=16.0d0*w((i*i+i)/2)
250 IF(w(ii)+aux(i) /= aux(i))
THEN
260 w(kk+j)=w(kk+j)-w(kk+i)*ratio
271 entry dchslv(w,n,b, x)
272 WRITE(*,*)
'before copy'
276 WRITE(*,*)
'after copy'
281 suma=suma-w(k+ii)*x(k)
286 WRITE(*,*)
'after forward'
291 suma=suma-w(kk+i)*x(k)
297 WRITE(*,*)
'after backward'
308 suma=suma-w(j+(k*k-k)/2)*v(l+(m*m-m)/2)
336 DOUBLE PRECISION,
INTENT(IN) :: w(*)
337 INTEGER,
INTENT(IN) :: n
338 DOUBLE PRECISION,
INTENT(IN OUT) :: aux(n)
340 DOUBLE PRECISION :: suma,sumu,sums
345 IF(w((i*i+i)/2) < w((is*is+is)/2)) is=i
346 IF(w((i*i+i)/2) > w((ir*ir+ir)/2)) ir=i
353 IF(i == ir) suma=1.0d0
356 suma=suma-w(kk+i)*aux(k)
360 sumu=sumu+aux(i)*aux(i)
362 xlan=sngl(w((ir*ir+ir)/2)*dsqrt(sumu))
363 IF(xlan /= 0.0) xlan=1.0/xlan
369 sums=sums+w(is+(i*i-i)/2)**2
373 IF(w((is*is+is)/2) /= 0.0) xla1=sngl(dsqrt(sums)/w((is*is+is)/2))
376 IF(xla1 > 0.0.AND.xlan > 0.0) cond=xla1/xlan
396 SUBROUTINE dbcdec(w,mp1,n, aux) ! decomposition, bandwidth M
403 DOUBLE PRECISION,
INTENT(IN OUT) :: w(mp1,n)
404 INTEGER,
INTENT(IN) :: mp1
405 INTEGER,
INTENT(IN) :: n
406 DOUBLE PRECISION,
INTENT(OUT) :: aux(n)
408 DOUBLE PRECISION :: v(mp1,n),b(n),x(n), vs(*),rxw
414 IF(w(1,i)+aux(i) /= aux(i))
THEN
419 DO j=1,min(mp1-1,n-i)
421 DO k=1,min(mp1-1,n-i)+1-j
422 w(k,i+j)=w(k,i+j)-w(k+j,i)*rxw
429 entry dbcslv(w,mp1,n,b, x)
435 DO j=1,min(mp1-1,n-i)
436 x(j+i)=x(j+i)-w(j+1,i)*x(i)
441 DO j=1,min(mp1-1,n-i)
442 rxw=rxw-w(j+1,i)*x(j+i)
448 entry dbciel(w,mp1,n, v)
452 DO j=i,max(1,i-mp1+1),-1
453 DO k=j+1,min(n,j+mp1-1)
454 rxw=rxw-v(1+abs(i-k),min(i,k))*w(1+k-j,j)
462 entry dbcinb(w,mp1,n, vs)
466 DO j=i,max(1,i-mp1+1),-1
467 DO k=j+1,min(n,j+mp1-1)
468 rxw=rxw-vs((max(i,k)*(max(i,k)-1))/2+min(i,k))*w(1+k-j,j)
479 entry dbcinv(w,mp1,n, vs)
484 DO k=j+1,min(n,j+mp1-1)
485 rxw=rxw-vs((max(i,k)*(max(i,k)-1))/2+min(i,k))*w(1+k-j,j)
509 DOUBLE PRECISION,
INTENT(IN OUT) :: w(mp1,n)
510 INTEGER,
INTENT(IN) :: mp1
511 INTEGER,
INTENT(IN) :: n
512 DOUBLE PRECISION,
INTENT(OUT) :: b(n)
514 DOUBLE PRECISION :: err
524 IF(i+1-j > 0.AND.nj < 5)
THEN
526 rho=sngl(w(j,i+1-j)/(err*dsqrt(w(1,i+1-j))))
527 irho(nj)=ifix(100.0*abs(rho)+0.5)
528 IF(rho < 0.0) irho(nj)=-irho(nj)
531 WRITE(*,102) i,b(i),err,(irho(j),j=1,nj)
534 101 format(5x,
'i Param',7x,
'error',7x,
' c(i,i-1) c(i,i-2)'/)
535 102 format(1x,i5,2g12.4,1x,5i9)
536 103 format(33x,
'(correlation coefficients in percent)')
551 DOUBLE PRECISION,
INTENT(IN OUT) :: w(mp1,n)
552 INTEGER,
INTENT(IN) :: mp1
553 INTEGER,
INTENT(IN) :: n
561 WRITE(*,102) i,(w(j,i),j=1,mp1)
564 101 format(5x,
'i Diag ')
565 102 format(1x,i5,6g12.4)
598 DOUBLE PRECISION,
INTENT(IN OUT) :: w(2,n)
599 INTEGER,
INTENT(IN OUT) :: n
600 DOUBLE PRECISION,
INTENT(OUT) :: aux(n)
602 DOUBLE PRECISION :: v(2,n),b(n),x(n), rxw
608 IF(w(1,i)+aux(i) /= aux(i))
THEN
611 w(1,i+1)=w(1,i+1)-w(2,i)*rxw
618 IF(w(1,n)+aux(n) > aux(n))
THEN
625 entry db2slv(w,n,b, x)
631 x(i+1)=x(i+1)-w(2,i)*x(i)
635 x(i)=x(i)*w(1,i)-w(2,i)*x(i+1)
644 v(2,n-1)=-v(1,n )*w(2,n-1)
646 v(1,i )= w(1,i )-v(2,i )*w(2,i )
647 v(2,i-1)=-v(1,i )*w(2,i-1)
649 v(1,2)= w(1,2)-v(2,2)*w(2,2)
650 v(2,1)=-v(1,2)*w(2,1)
651 v(1,1)= w(1,1)-v(2,1)*w(2,1)
679 SUBROUTINE db3dec(w,n, aux) ! decomposition (M=2)
684 DOUBLE PRECISION,
INTENT(IN OUT) :: w(3,n)
685 INTEGER,
INTENT(IN OUT) :: n
686 DOUBLE PRECISION,
INTENT(OUT) :: aux(n)
689 DOUBLE PRECISION :: v(3,n),b(n),x(n), rxw
695 IF(w(1,i)+aux(i) /= aux(i))
THEN
698 w(1,i+1)=w(1,i+1)-w(2,i)*rxw
699 w(2,i+1)=w(2,i+1)-w(3,i)*rxw
702 w(1,i+2)=w(1,i+2)-w(3,i)*rxw
710 IF(w(1,n-1)+aux(n-1) > aux(n-1))
THEN
711 w(1,n-1)=1.0d0/w(1,n-1)
712 rxw=w(2,n-1)*w(1,n-1)
713 w(1,n)=w(1,n)-w(2,n-1)*rxw
719 IF(w(1,n)+aux(n) > aux(n))
THEN
726 entry db3slv(w,n,b, x)
731 x(i+1)=x(i+1)-w(2,i)*x(i)
732 x(i+2)=x(i+2)-w(3,i)*x(i)
734 x(n)=x(n)-w(2,n-1)*x(n-1)
736 x(n-1)=x(n-1)*w(1,n-1)-w(2,n-1)*x(n)
738 x(i)=x(i)*w(1,i)-w(2,i)*x(i+1)-w(3,i)*x(i+2)
747 v(2,n-1)=-v(1,n )*w(2,n-1)
748 v(3,n-2)=-v(2,n-1)*w(2,n-2)-v(1,n )*w(3,n-2)
749 v(1,n-1)= w(1,n-1) -v(2,n-1)*w(2,n-1)
750 v(2,n-2)=-v(1,n-1)*w(2,n-2)-v(2,n-1)*w(3,n-2)
751 v(3,n-3)=-v(2,n-2)*w(2,n-3)-v(1,n-1)*w(3,n-3)
753 v(1,i )= w(1,i ) -v(2,i )*w(2,i )-v(3,i)*w(3,i )
754 v(2,i-1)=-v(1,i )*w(2,i-1)-v(2,i)*w(3,i-1)
755 v(3,i-2)=-v(2,i-1)*w(2,i-2)-v(1,i)*w(3,i-2)
757 v(1,2)= w(1,2) -v(2,2)*w(2,2)-v(3,2)*w(3,2)
758 v(2,1)=-v(1,2)*w(2,1)-v(2,2)*w(3,1)
759 v(1,1)= w(1,1) -v(2,1)*w(2,1)-v(3,1)*w(3,1)
822 DOUBLE PRECISION,
INTENT(OUT) :: w(*)
823 INTEGER,
INTENT(IN) :: n
825 DOUBLE PRECISION :: epsm,gamm,xchi,beta,delta,theta
831 gamm=max(gamm,abs(w((k*k+k)/2)))
833 xchi=max(xchi,abs(w((j*j-j)/2+k)))
836 beta=sqrt(max(gamm,xchi/max(1.0d0,sqrt(dfloat(n*n-1))),epsm))
837 delta=epsm*max(1.0d0,gamm+xchi)
841 w((k*k-k)/2+i)=w((k*k-k)/2+i)*w((i*i+i)/2)
845 w((j*j-j)/2+k)=w((j*j-j)/2+k)-w((k*k-k)/2+i)*w((j*j-j)/2+i)
850 theta=max(theta,abs(w((j*j-j)/2+k)))
852 w((k*k+k)/2)=1.0d0/max(abs(w((k*k+k)/2)),(theta/beta)**2,delta)
854 w((j*j+j)/2)=w((j*j+j)/2)-w((j*j-j)/2+k)**2*w((k*k+k)/2)
873 DOUBLE PRECISION,
INTENT(OUT) :: w(mp1,n)
874 INTEGER,
INTENT(IN OUT) :: mp1
875 INTEGER,
INTENT(IN) :: n
877 DOUBLE PRECISION :: epsm,gamm,xchi,beta,delta,theta
883 gamm=max(gamm,abs(w(1,k)))
884 DO j=2,min(mp1,n-k+1)
885 xchi=max(xchi,abs(w(j,k)))
888 beta=sqrt(max(gamm,xchi/max(1.0d0,sqrt(dfloat(n*n-1))),epsm))
889 delta=epsm*max(1.0d0,gamm+xchi)
893 w(i,k-i+1)=w(i,k-i+1)*w(1,k-i+1)
895 DO j=2,min(mp1,n-k+1)
896 DO i=max(2,j+k+1-mp1),k
897 w(j,k)=w(j,k)-w(k-i+2,i-1)*w(j-i+k+1,i-1)
901 DO j=2,min(mp1,n-k+1)
902 theta=max(theta,abs(w(j,k)))
904 w(1,k)=1.0d0/max(abs(w(1,k)),(theta/beta)**2,delta)
905 DO j=2,min(mp1,n-k+1)
906 w(1,k+j-1)=w(1,k+j-1)-w(1,k)*w(j,k)**2