54 real(dp),
parameter:: 
zero=0
    83 interface wrtb;   
module procedure wrtb;                   end 
interface    99 subroutine avco(na,nb,za,zb,z0,a,b) 
   103 integer(spi),
intent(in ):: na,nb
   104 real(sp),    
intent(in ):: za(na),zb(nb),z0
   105 real(sp),    
intent(out):: a(na),b(nb)
   107 integer(spi)                    :: na1,nab,i
   108 real(sp), 
dimension(na+nb,na+nb):: w
   109 real(sp), 
dimension(na)         :: za0,pa
   110 real(sp), 
dimension(nb)         :: zb0,pb
   111 real(sp), 
dimension(na+nb)      :: ab
   117 w(1,1:na)=
u1; ab(1)=
u1   118 do i=2,nab; w(i,1:na)=pa;    pa=pa*za0; w(i,na1:nab)=pb; pb=pb*zb0;
 enddo   120 a=ab(1:na); b=ab(na1:nab)
   133 subroutine davco(na,nb,za,zb,z0,a,b) 
   137 integer(spi),
intent(IN ):: na,nb
   138 real(dp),    
intent(IN ):: za(na),zb(nb),z0
   139 real(dp),    
intent(OUT):: a(na),b(nb)
   141 integer(spi)                   :: na1,nab,i
   142 real(dp),
dimension(na+nb,na+nb):: w
   143 real(dp),
dimension(na)         :: za0,pa
   144 real(dp),
dimension(nb)         :: zb0,pb
   145 real(dp),
dimension(na+nb)      :: ab
   151 w(1,1:na)=
u1; ab(1)=
u1   152 do i=2,nab; w(i,1:na)=pa;    pa=pa*za0; w(i,na1:nab)=pb; pb=pb*zb0;
 enddo   154 a=ab(1:na); b=ab(na1:nab)
   164 subroutine tavco(xa,xb,a,b)
   166 real(dp),
dimension(:),
intent(IN ):: xa,xb
   167 real(dp),
dimension(:),
intent(OUT):: a,b
   171 na=
size(xa); 
if(na /= 
size(a))stop 
'In tavco; sizes of a and xa different'   172 nb=
size(xb); 
if(nb /= 
size(b))stop 
'In tavco; sizes of b and xb different'   189 subroutine dfco(na,nb,za,zb,z0,a,b)
   190 use pietc_s, 
only: u0,u1
   193 integer(spi),
intent(IN )        :: na,nb
   194 real(sp),    
intent(IN )        :: za(na),zb(nb),z0
   195 real(sp),    
intent(OUT)        :: a(na),b(nb)
   197 integer(spi):: na1,nab,i
   198 real(sp), 
dimension(na+nb,na+nb):: w
   199 real(sp), 
dimension(na)         :: za0,pa
   200 real(sp), 
dimension(nb)         :: zb0,pb
   201 real(sp), 
dimension(na+nb)      :: ab
   207 w(1,1:na)=u1; ab(1)=u1
   208 do i=3,nab; w(i,1:na)   =pa*(i-2); pa=pa*za0;
 enddo   209 do i=2,nab; w(i,na1:nab)=pb;       pb=pb*zb0;
 enddo   211 a=ab(1:na); b=ab(na1:nab)
   224 subroutine ddfco(na,nb,za,zb,z0,a,b) 
   228 integer(spi),
intent(in) :: na,nb
   229 real(dp),    
intent(in) :: za(na),zb(nb),z0
   230 real(dp),    
intent(out):: a(na),b(nb)
   232 integer(spi)                    :: na1,nab,i
   233 real(dp), 
dimension(na+nb,na+nb):: w
   234 real(dp), 
dimension(na)         :: za0,pa
   235 real(dp), 
dimension(nb)         :: zb0,pb
   236 real(dp), 
dimension(na+nb)      :: ab
   242 w(1,1:na)=
u1; ab(1)=
u1   243 do i=3,nab; w(i,1:na)   =pa*(i-2); pa=pa*za0;
 enddo   244 do i=2,nab; w(i,na1:nab)=pb;       pb=pb*zb0;
 enddo   246 a=ab(1:na); b=ab(na1:nab)
   257 subroutine tdfco(xa,xb,a,b)
   259 real(dp),
dimension(:),
intent(IN ):: xa,xb
   260 real(dp),
dimension(:),
intent(OUT):: a,b
   264 na=
size(xa); 
if(na /= 
size(a))stop 
'In tdfco; sizes of a and xa different'   265 nb=
size(xb); 
if(nb /= 
size(b))stop 
'In tdfco; sizes of b and xb different'   282 subroutine dfco2(na,nb,za,zb,z0,a,b)
   283 use pietc_s, 
only: u0,u1
   286 integer(spi), 
intent(IN ):: na,nb
   287 real(sp),     
intent(IN ):: za(na),zb(nb),z0
   288 real(sp),     
intent(OUT):: a(na),b(nb)
   290 integer(spi)                    :: na1,nab,i
   291 real(sp), 
dimension(na+nb,na+nb):: w
   292 real(sp), 
dimension(na)         :: za0,pa
   293 real(sp), 
dimension(nb)         :: zb0,pb
   294 real(sp), 
dimension(na+nb)      :: ab
   300 w(1,1:na)=u1; ab(1)=u1
   301 do i=4,nab; w(i,1:na)   =pa*(i-2)*(i-3); pa=pa*za0;
 enddo   302 do i=2,nab; w(i,na1:nab)=pb;             pb=pb*zb0;
 enddo   304 a=ab(1:na); b=ab(na1:nab)
   317 subroutine ddfco2(na,nb,za,zb,z0,a,b) 
   321 integer(spi),
intent(IN )           :: na,nb
   322 real(dp),    
intent(IN )           :: za(na),zb(nb),z0
   323 real(dp),    
intent(OUT)           :: a(na),b(nb)
   325 integer(spi)                    :: na1,nab,i
   326 real(dp), 
dimension(na+nb,na+nb):: w
   327 real(dp), 
dimension(na)         :: za0,pa
   328 real(dp), 
dimension(nb)         :: zb0,pb
   329 real(dp), 
dimension(na+nb)      :: ab
   335 w(1,1:na)=
u1; ab(1)=
u1   336 do i=4,nab; w(i,1:na)   =pa*(i-2)*(i-3); pa=pa*za0;
 enddo   337 do i=2,nab; w(i,na1:nab)=pb;             pb=pb*zb0;
 enddo   339 a=ab(1:na); b=ab(na1:nab)
   349 subroutine tdfco2(xa,xb,a,b)
   351 real(dp),
dimension(:),
intent(IN ):: xa,xb
   352 real(dp),
dimension(:),
intent(OUT):: a,b
   356 na=
size(xa); 
if(na /= 
size(a))stop 
'In tdfco2; sizes of a and xa different'   357 nb=
size(xb); 
if(nb /= 
size(b))stop 
'In tdfco2; sizes of b and xb different'   369 pure subroutine clib(m1,m2,mah1,mah2,a)
   370 use pietc_s, 
only: u0
   372 integer(spi), 
intent(IN   ) :: m1, m2, mah1, mah2
   373 real(sp),     
intent(INOUT) :: a(m1,-mah1:mah2)
   375 do j=1,mah1; a(1:min(m1,j),-j)=u0;
 enddo   376 do j=m2-m1+1,mah2; a(max(1,m2-j+1):m1,j)=u0;
 enddo   387 pure subroutine clib_d(m1,m2,mah1,mah2,a)
   390 integer(spi),
intent(IN   ) :: m1, m2, mah1, mah2
   391 real(dp),    
intent(INOUT) :: a(m1,-mah1:mah2)
   393 do j=1,mah1; a(1:min(m1,j),-j)=
u0;
 enddo   394 do j=m2-m1+1,mah2; a(max(1,m2-j+1):m1,j)=
u0;
 enddo   405 pure subroutine clib_c(m1,m2,mah1,mah2,a)
   408 integer(spi), 
intent(IN   ) :: m1, m2, mah1, mah2
   409 complex(dpc), 
intent(INOUT) :: a(m1,-mah1:mah2)
   411 do j=1,mah1; a(1:min(m1,j),-j)=
c0;
 enddo   412 do j=m2-m1+1,mah2; a(max(1,m2-j+1):m1,j)=
c0;
 enddo   425 subroutine cad1b(m1,mah1,mah2,mirror2,a)
   426 use pietc_s, 
only: u0
   428 integer(spi),
intent(IN   ):: m1,mah1,mah2,mirror2
   429 real(sp),    
intent(INOUT):: a(0:m1-1,-mah1:mah2)
   431 integer(spi):: i,i2,jm,jp,jpmax
   433 if(mirror2+mah1 > mah2)stop 
'In CAD1B; mah2 insufficient'   434 do i=0,m1-1; i2=i*2; jpmax=mirror2+mah1-i2; 
if(jpmax <= -mah1)
exit   435    do jm=-mah1,mah2; jp=mirror2-jm-i2; 
if(jp <= jm)
exit   436       a(i,jp)=a(i,jp)+a(i,jm) 
   450 subroutine csb1b(m1,mah1,mah2,mirror2,a)
   451 use pietc_s, 
only: u0
   453 integer(spi),
intent(IN   ):: m1,mah1,mah2,mirror2
   454 real(sp),    
intent(INOUT):: a(0:m1-1,-mah1:mah2)
   456 integer(spi):: i,i2,jm,jp,jpmax
   458 if(mirror2+mah1 > mah2)stop 
'In CSB1B; mah2 insufficient'   459 do i=0,m1-1; i2=i*2; jpmax=mirror2+mah1-i2; 
if(jpmax < -mah1)
exit   460    do jm=-mah1,mah2; jp=mirror2-jm-i2; 
if(jp < jm)
exit   461       a(i,jp)=a(i,jp)-a(i,jm) 
   476 subroutine cad2b(m1,m2,mah1,mah2,mirror2,a)
   477 use pietc_s, 
only: u0
   479 integer(spi),
intent(IN   ):: m1,m2,mah1,mah2,mirror2
   480 real(sp),    
intent(INOUT):: a(1-m1:0,m1-m2-mah1:m1-m2+mah2)
   482 integer(spi):: i,i2,jm,jp,jmmin,nah1,nah2
   484 nah1=mah1+m2-m1; nah2=mah2+m1-m2 
   485 if(mirror2-nah1 > -nah2)stop 
'In CAD2B; mah1 insufficient'   486 do i=0,1-m1,-1; i2=i*2; jmmin=mirror2-nah2-i2; 
if(jmmin >= nah2)
exit   487    do jp=nah2,nah1,-1; jm=mirror2-jp-i2; 
if(jm >= jp)
exit   488       a(i,jm)=a(i,jm)+a(i,jp) 
   503 subroutine csb2b(m1,m2,mah1,mah2,mirror2,a)
   504 use pietc_s, 
only: u0
   506 integer(spi),
intent(IN   ):: m1,m2,mah1,mah2,mirror2
   507 real(sp),    
intent(INOUT):: a(1-m1:0,m1-m2-mah1:m1-m2+mah2)
   509 integer(spi):: i,i2,jm,jp,jmmin,nah1,nah2
   511 nah1=mah1+m2-m1; nah2=mah2+m1-m2 
   512 if(mirror2-nah1 > -nah2)stop 
'In CSB2B; mah1 insufficient'   513 do i=0,1-m1,-1; i2=i*2; jmmin=mirror2-nah2-i2; 
if(jmmin > nah2)
exit   514    do jp=nah2,nah1,-1; jm=mirror2-jp-i2; 
if(jm > jp)
exit   515       a(i,jm)=a(i,jm)-a(i,jp) 
   531 subroutine ldub(m,mah1,mah2,a)
   532 use pietc_s, 
only: u0,u1
   534 integer(spi),
intent(IN   ):: m,mah1, mah2 
   535 real(sp),    
intent(INOUT):: a(m,-mah1:mah2) 
   537 integer(spi):: j, imost, jmost, jp, i
   538 real(sp)    :: ajj, ajji, aij
   546       print 
'(" Failure in LDUB:"/" Matrix requires pivoting or is singular")'   554       a(i,jp-i:jmost-i)=a(i,jp-i:jmost-i)-aij*a(j,1:jmost-j)
   556    a(j,1:jmost-j)=ajji*a(j,1:jmost-j)
   570 subroutine dldub(m,mah1,mah2,a) 
   573 integer(spi),
intent(IN   ):: m,mah1, mah2 
   574 real(dp),    
intent(INOUT):: a(m,-mah1:mah2) 
   576 integer(spi):: j, imost, jmost, jp, i
   577 real(dp)    :: ajj, ajji, aij
   585     print 
'(" Fails in LDUB_d:"/" Matrix requires pivoting or is singular")'   593     a(i,jp-i:jmost-i)=a(i,jp-i:jmost-i)-aij*a(j,1:jmost-j)
   595   a(j,1:jmost-j)=ajji*a(j,1:jmost-j)
   608 subroutine ldltb(m,mah1,a) 
   609 use pietc_s, 
only: u0,u1
   610 integer(spi),
intent(IN   ):: m,mah1
   611 real(sp),    
intent(INOUT):: a(m,-mah1:0) 
   613 integer(spi):: j, imost, jp, i,k
   614 real(sp)    :: ajj, ajji, aij
   621     print 
'(" Fails in LDLTB:"/" Matrix requires pivoting or is singular")'   630        a(i,k-i)=a(i,k-i)-aij*a(k,j-k)
   644 subroutine dldltb(m,mah1,a) 
   646 integer(spi),
intent(IN   ) :: m,mah1
   647 real(dp),    
intent(INOUT) :: a(m,-mah1:0) 
   649 integer(spi):: j, imost, jp, i,k
   650 real(dp)    :: ajj, ajji, aij
   657       print 
'(" Fails in LDLTB_d:"/" Matrix requires pivoting or is singular")'   666          a(i,k-i)=a(i,k-i)-aij*a(k,j-k)
   682 subroutine udlb(m,mah1,mah2,a) 
   684 integer(spi),                    
intent(IN   ) :: m,mah1,mah2
   685 real(sp),
dimension(m,-mah1:mah2),
intent(INOUT) :: a(m,-mah1:mah2)
   687 real(sp),
dimension(m,-mah2:mah1):: at
   689 at=a(m:1:-1,mah2:-mah1:-1); 
call ldub(m,mah2,mah1,at)
   690 a=at(m:1:-1,mah1:-mah2:-1)
   703 subroutine dudlb(m,mah1,mah2,a) 
   705 integer(spi),                    
intent(IN   ) :: m,mah1,mah2
   706 real(dp),
dimension(m,-mah1:mah2),
intent(INOUT) :: a(m,-mah1:mah2)
   708 real(dp),
dimension(m,-mah2:mah1):: at
   710 at=a(m:1:-1,mah2:-mah1:-1); 
call dldub(m,mah2,mah1,at)
   711 a=at(m:1:-1,mah1:-mah2:-1)
   732 subroutine l1ubb(m,mah1,mah2,mbh1,mbh2,a,b)
   733 use pietc_s, 
only: u0,u1
   735 integer(spi), 
intent(IN   ) ::  m,mah1, mah2, mbh1, mbh2 
   736 real(sp),     
intent(INOUT) :: a(m,-mah1:mah2), b(m,-mbh1:mbh2)
   738 integer(spi):: j, imost, jmost, jleast, jp, i
   739 real(sp)    :: ajj, ajji, aij
   747    if(ajj == u0)stop 
'In L1UBB; zero element found in diagonal factor'   749    a(j,jleast-j:jmost-j) = ajji * a(j,jleast-j:jmost-j)
   752       a(i,jp-i:jmost-i) = a(i,jp-i:jmost-i) - aij*a(j,jp-j:jmost-j)
   755    b(j,-mbh1:mbh2) = ajji * b(j,-mbh1:mbh2)
   770 subroutine dl1ubb(m,mah1,mah2,mbh1,mbh2,a,b) 
   773 integer(spi),
intent(IN   ) :: m,mah1, mah2, mbh1, mbh2 
   774 real(dp),    
intent(INOUT) :: a(m,-mah1:mah2), b(m,-mbh1:mbh2)
   776 integer(spi):: j, imost, jmost, jleast, jp, i
   777 real(dp)    :: ajj, ajji, aij
   785    if(ajj == 
u0)stop 
'In L1UBB_d; zero element found in diagonal factor'   787    a(j,jleast-j:jmost-j) = ajji * a(j,jleast-j:jmost-j)
   790       a(i,jp-i:jmost-i) = a(i,jp-i:jmost-i) - aij*a(j,jp-j:jmost-j)
   793    b(j,-mbh1:mbh2) = ajji * b(j,-mbh1:mbh2)
   817 subroutine l1ueb(m,mah1,mah2,mbh1,mbh2,a,b)
   818 use pietc_s, 
only: u0,u1
   820 integer(spi),
intent(IN   ) :: m,mah1, mah2, mbh1, mbh2 
   821 real(sp),    
intent(INOUT) :: a(0:m,-mah1:mah2), b(m,-mbh1:mbh2)
   823 integer(spi):: j, imost, jmost, jleast, jp, i
   824 real(sp)    :: ajj, ajji, aij
   832    if(ajj == u0)stop 
'In L1UEB; zero element found in diagonal factor'   834    a(j,jleast-j:jmost-j) = ajji * a(j,jleast-j:jmost-j)
   837       a(i,jp-i:jmost-i) = a(i,jp-i:jmost-i) - aij*a(j,jp-j:jmost-j)
   840    b(j,-mbh1:mbh2) = ajji * b(j,-mbh1:mbh2)
   854 subroutine dl1ueb(m,mah1,mah2,mbh1,mbh2,a,b) 
   857 integer(spi),
intent(IN   ):: m,mah1, mah2, mbh1, mbh2 
   858 real(dp),    
intent(INOUT):: a(0:,-mah1:), b(:,-mbh1:)
   860 integer(spi):: j, imost, jmost, jleast, jp, i
   861 real(dp)    :: ajj, ajji, aij
   869    if(ajj == 
u0)stop 
'In L1UEB_D; zero element found in diagonal factor'   871    a(j,jleast-j:jmost-j) = ajji * a(j,jleast-j:jmost-j)
   874       a(i,jp-i:jmost-i) = a(i,jp-i:jmost-i) - aij*a(j,jp-j:jmost-j)
   877    b(j,-mbh1:mbh2) = ajji * b(j,-mbh1:mbh2)
   891 subroutine udlbv(m,mah1,mah2,a,v)
   893 integer(spi),
intent(IN   ):: m, mah1, mah2
   894 real(sp),    
intent(IN   ):: a(m,-mah1:mah2)
   895 real(sp),    
intent(INOUT):: v(m)
   902    do i=j+1,min(m,j+mah1); v(i)=v(i)-a(i,j-i)*vj; enddo; v(j)=a(j,0)*vj
   906    do i=max(1,j-mah2),j-1; v(i)=v(i)-a(i,j-i)*vj;
 enddo   920 subroutine dudlbv(m,mah1,mah2,a,v)
   922 integer(spi),
intent(IN   ) :: m, mah1, mah2
   923 real(dp),    
intent(IN   ) :: a(m,-mah1:mah2)
   924 real(dp),    
intent(INOUT) :: v(m)
   931    do i=j+1,min(m,j+mah1); v(i)=v(i)-a(i,j-i)*vj; enddo; v(j)=a(j,0)*vj
   935    do i=max(1,j-mah2),j-1; v(i)=v(i)-a(i,j-i)*vj;
 enddo   949 subroutine ltdlbv(m,mah1,a,v)
   951 integer(spi),
intent(IN   ) :: m, mah1
   952 real(sp),    
intent(IN   ) :: a(m,-mah1:0)
   953 real(sp),    
intent(INOUT) :: v(m)
   960    do i=j+1,min(m,j+mah1); v(i)=v(i)-a(i,j-i)*vj; enddo; v(j)=a(j,0)*vj
   964    do i=max(1,j-mah1),j-1; v(i)=v(i)-a(j,i-j)*vj;
 enddo   981 integer(spi),
intent(IN   ) :: m, mah1
   982 real(dp),    
intent(IN   ) :: a(m,-mah1:0)
   983 real(dp),    
intent(INOUT) :: v(m)
   990    do i=j+1,min(m,j+mah1); v(i)=v(i)-a(i,j-i)*vj; enddo; v(j)=a(j,0)*vj
   994    do i=max(1,j-mah1),j-1; v(i)=v(i)-a(j,i-j)*vj;
 enddo  1010 subroutine udlbx(mx,mah1,mah2,my,a,v)
  1012 integer(spi),
intent(IN   ) :: mx, mah1, mah2, my
  1013 real(sp),    
intent(IN   ) :: a(mx,-mah1:mah2)
  1014 real(sp),    
intent(INOUT) :: v(mx,my)
  1016 integer(spi):: jx, ix
  1019    do ix=jx+1,min(mx,jx+mah1); v(ix,:) = v(ix,:) - a(ix,jx-ix)*v(jx,:);
 enddo  1020    v(jx,:) = a(jx,0) * v(jx,:)
  1023    do ix=max(1,jx-mah2),jx-1; v(ix,:) = v(ix,:) - a(ix,jx-ix)*v(jx,:);
 enddo  1025 end subroutine udlbx  1039 subroutine udlby(my,mah1,mah2,mx,a,v)
  1041 integer(spi),
intent(IN   ) :: my, mah1, mah2, mx
  1042 real(sp),    
intent(IN   ) :: a(my,-mah1:mah2)
  1043 real(sp),    
intent(INOUT) :: v(mx,my)
  1045 integer(spi):: iy, jy
  1048    do iy=jy+1,min(my,jy+mah1); v(:,iy) = v(:,iy)-a(iy,jy-iy)*v(:,jy);
 enddo  1049    v(:,jy)=a(jy,0)*v(:,jy)
  1052    do iy=max(1,jy-mah2),jy-1; v(:,iy)=v(:,iy)-a(iy,jy-iy)*v(:,jy);
 enddo  1054 end subroutine udlby  1066 subroutine udlvb(m,mah1,mah2,v,a)
  1068 integer(spi), 
intent(IN   ) :: m, mah1, mah2
  1069 real(sp),     
intent(IN   ) :: a(m,-mah1:mah2)
  1070 real(sp),     
intent(INOUT) :: v(m)
  1077    do j=i+1,min(m,i+mah2); v(j)=v(j)-vi*a(i,j-i);
 enddo  1082    do j=max(1,i-mah1),i-1; v(j)=v(j)-vi*a(i,j-i);
 enddo  1084 end subroutine udlvb  1098 subroutine udlxb(mx,mah1,mah2,my,v,a)
  1100 integer(spi),
intent(IN   ) :: mx, mah1, mah2, my
  1101 real(sp),    
intent(IN   ) :: a(mx,-mah1:mah2)
  1102 real(sp),    
intent(INOUT) :: v(mx,my)
  1104 integer(spi):: ix, jx
  1107    do jx=ix+1,min(mx,ix+mah2); v(jx,:)=v(jx,:)-v(ix,:)*a(ix,jx-ix);
 enddo  1108    v(ix,:)=v(ix,:)*a(ix,0)
  1111    do jx=max(1,ix-mah1),ix-1; v(jx,:)=v(jx,:)-v(ix,:)*a(ix,jx-ix);
 enddo  1113 end subroutine udlxb  1127 subroutine udlyb(my,mah1,mah2,mx,v,a)
  1129 integer(spi),
intent(IN   ) :: my, mah1, mah2, mx
  1130 real(sp),    
intent(IN   ) :: a(my,-mah1:mah2)
  1131 real(sp),    
intent(INOUT) :: v(mx,my)
  1133 integer(spi):: iy, jy
  1136    do jy=iy+1,min(my,iy+mah2); v(:,jy)=v(:,jy)-v(:,iy)*a(iy,jy-iy);
 enddo  1137    v(:,iy)=v(:,iy)*a(iy,0)
  1140    do jy=max(1,iy-mah1),iy-1; v(:,jy)=v(:,jy)-v(:,iy)*a(iy,jy-iy);
 enddo  1142 end subroutine udlyb  1154 subroutine u1lbv(m,mah1,mah2,a,v)
  1156 integer(spi),
intent(IN   ) :: m, mah1, mah2
  1157 real(sp),    
intent(IN   ) :: a(m,-mah1:mah2)
  1158 real(sp),    
intent(INOUT) :: v(m)
  1165    do i=j+1,min(m,j+mah1); v(i)=v(i)-a(i,j-i)*vj;
 enddo  1169    do i=max(1,j-mah2),j-1; v(i)=v(i)-a(i,j-i)*vj;
 enddo  1171 end subroutine u1lbv  1185 subroutine u1lbx(mx,mah1,mah2,my,a,v)
  1187 integer(spi),
intent(IN   ) :: mx, mah1, mah2, my
  1188 real(sp),    
intent(IN   ) :: a(mx,-mah1:mah2)
  1189 real(sp),    
intent(INOUT) :: v(mx,my)
  1191 integer(spi):: ix, jx
  1194    do ix=jx+1,min(mx,jx+mah1); v(ix,:)=v(ix,:)-a(ix,jx-ix)*v(jx,:);
 enddo  1197    do ix=max(1,jx-mah2),jx-1; v(ix,:)=v(ix,:)-a(ix,jx-ix)*v(jx,:);
 enddo  1199 end subroutine u1lbx  1213 subroutine u1lby(my,mah1,mah2,mx,a,v)
  1215 integer(spi),
intent(IN   ) :: my, mah1, mah2, mx
  1216 real(sp),    
intent(IN   ) :: a(my,-mah1:mah2)
  1217 real(sp),    
intent(INOUT) :: v(mx,my)
  1219 integer(spi):: iy, jy
  1222    do iy=jy+1,min(my,jy+mah1); v(:,iy)=v(:,iy)-a(iy,jy-iy)*v(:,jy);
 enddo  1225    do iy=max(1,jy-mah2),jy-1; v(:,iy)=v(:,iy)-a(iy,jy-iy)*v(:,jy);
 enddo  1227 end subroutine u1lby  1239 subroutine u1lvb(m,mah1,mah2,v,a)
  1241 integer(spi),
intent(IN   ) :: m, mah1, mah2
  1242 real(sp),    
intent(IN   ) :: a(m,-mah1:mah2)
  1243 real(sp),    
intent(INOUT) :: v(m)
  1250    do j=i+1,min(m,i+mah2); v(j)=v(j)-vi*a(i,j-i);
 enddo  1254    do j=max(1,i-mah1),i-1; v(j)=v(j)-vi*a(i,j-i);
 enddo  1256 end subroutine u1lvb  1270 subroutine u1lxb(mx,mah1,mah2,my,v,a)
  1272 integer(spi),
intent(IN   ) :: mx, mah1, mah2, my
  1273 real(sp),    
intent(IN   ) :: a(mx,-mah1:mah2)
  1274 real(sp),    
intent(INOUT) :: v(mx,my)
  1276 integer(spi):: ix, jx
  1279    do jx=ix+1,min(mx,ix+mah2); v(jx,:)=v(jx,:)-v(ix,:)*a(ix,jx-ix);
 enddo  1282    do jx=max(1,ix-mah1),ix-1;  v(jx,:)=v(jx,:)-v(ix,:)*a(ix,jx-ix);
 enddo  1284 end subroutine u1lxb  1298 subroutine u1lyb(my,mah1,mah2,mx,v,a)
  1300 integer(spi),
intent(IN   ) :: my, mah1, mah2, mx
  1301 real(sp),    
intent(IN   ) :: a(my,-mah1:mah2)
  1302 real(sp),    
intent(INOUT) :: v(mx,my)
  1304 integer(spi):: iy, jy
  1307    do jy=iy+1,min(my,iy+mah2); v(:,jy)=v(:,jy)-v(:,iy)*a(iy,jy-iy);
 enddo  1310    do jy=max(1,iy-mah1),iy-1;  v(:,jy)=v(:,jy)-v(:,iy)*a(iy,jy-iy);
 enddo  1312 end subroutine u1lyb  1322 subroutine linbv(m,mah1,mah2,a,v)
  1324 integer(spi),
intent(IN   ) :: m, mah1, mah2
  1325 real(sp),    
intent(INOUT) :: a(m,-mah1:mah2), v(m)
  1327 call ldub(m,mah1,mah2,a)
  1328 call udlbv(m,mah1,mah2,a,v)
  1329 end subroutine linbv  1340 subroutine wrtb(m1,m2,mah1,mah2,a)
  1342 integer(spi),
intent(IN) :: m1, m2, mah1, mah2
  1343 real(sp),    
intent(IN) :: a(m1,-mah1:mah2)
  1345 integer(spi):: i1, i2, i, j1, j2, j, nj1
  1349    print 
'(7x,6(i2,10x))',(j,j=-mah1,mah2)
  1354       if(nj1==0)print 
'(1x,i3,6(1x,e12.5))',    i,(a(i,j),j=j1,j2)
  1355       if(nj1==1)print 
'(1x,i3,12x,5(1x,e12.5))',i,(a(i,j),j=j1,j2)
  1356       if(nj1==2)print 
'(1x,i3,24x,4(1x,e12.5))',i,(a(i,j),j=j1,j2)
  1357       if(nj1==3)print 
'(1x,i3,36x,3(1x,e12.5))',i,(a(i,j),j=j1,j2)
  1358       if(nj1==4)print 
'(1x,i3,48x,2(1x,e12.5))',i,(a(i,j),j=j1,j2)
  1359       if(nj1==5)print 
'(1x,i3,60x,1(1x,e12.5))',i,(a(i,j),j=j1,j2)
 
integer, parameter sp
Single precision real kind. 
 
subroutine dldub(m, mah1, mah2, a)
[L]*[D]*[U] factoring of double precision band-matrix. 
 
integer, parameter dp
Double precision real kind. 
 
subroutine dudlbv(m, mah1, mah2, a, v)
Back-substitution step of linear inversion involving banded LDU factored matrix and input vector...
 
Standard integer, real, and complex single and double precision kinds. 
 
real(dp), parameter u0
zero 
 
pure subroutine clib_d(m1, m2, mah1, mah2, a)
Clip (set to zero) the unused values in a banded matrix representation. 
 
real(dp), parameter zero
Double precision real zero. 
 
subroutine dltdlbv(m, mah1, a, v)
Like udlbv, except assuming a is the ltdl decomposition of a SYMMETRIC banded matrix, with only the non-upper part provided (to avoid redundancy) 
 
subroutine davco(na, nb, za, zb, z0, a, b)
Double precision version of subroutine avco for midpoint interpolation. 
 
complex(dpc), parameter c0
complex zero 
 
subroutine tdfco2(xa, xb, a, b)
Simplified computation of compact 2nd-derivative coefficients. 
 
subroutine dl1ubb(m, mah1, mah2, mbh1, mbh2, a, b)
Double precision version of L1UBB. 
 
subroutine ddfco2(na, nb, za, zb, z0, a, b)
Double precision version of DFCO2 to get 2nd-derivative coefficients. 
 
subroutine tavco(xa, xb, a, b)
Simplified computation of compact midpoint interpolation coefficients. 
 
subroutine tdfco(xa, xb, a, b)
Simplified computation of compact differencing coefficients to get derivatives d from cumulatives c...
 
subroutine dudlb(m, mah1, mah2, a)
[U]*[D]*[L] factoring of double precision band matrix A [U] is upper triangular with unit main diagon...
 
subroutine ddfco(na, nb, za, zb, z0, a, b)
Double precision version of dfco for compact differentiation coefficients. 
 
pure subroutine clib(m1, m2, mah1, mah2, a)
Clip (set to zero) the unused values in a banded matrix representation. 
 
real(dp), parameter u1
one 
 
pure subroutine clib_c(m1, m2, mah1, mah2, a)
Clip (set to zero) the unused values in a banded matrix representation. 
 
Some of the commonly used constants (pi etc) mainly for double-precision subroutines. 
 
subroutine dl1ueb(m, mah1, mah2, mbh1, mbh2, a, b)
Double precision version of L1UEB. 
 
integer, parameter spi
Single precision integer kind. 
 
integer, parameter dpc
Double precision real kind. 
 
Routines dealing with the operations of banded matrices. 
 
subroutine dldltb(m, mah1, a)
[L]*[D]*[L^T] factoring of symmetric matrix A (root-free Cholesky).