23 use pkind, only: spi,sp,dp,dpc
54 real(dp),
parameter:: zero=0
83 interface wrtb;
module procedure wrtb;
end interface
99 subroutine avco(na,nb,za,zb,z0,a,b) ! [AVCO]
100 use pietc, only: u0,u1
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) ! [AVCO]
134 use pietc, only: u0,u1
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)
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'
173 call
davco(na,nb,xa,xb,zero,a,b)
189 subroutine dfco(na,nb,za,zb,z0,a,b)! [DFCO]
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) ! Real(dp) version of [DFCO]
225 use pietc, only: u0,u1
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)
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'
266 call
ddfco(na,nb,xa,xb,zero,a,b)
282 subroutine dfco2(na,nb,za,zb,z0,a,b)! [DFCO2]
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) ! Real(dp) version of [DFCO2]
318 use pietc, only: u0,u1
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)
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'
358 call
ddfco2(na,nb,xa,xb,zero,a,b)
369 pure subroutine clib(m1,m2,mah1,mah2,a)! [CLIPB]
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)! [CLIPB]
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)! [CLIPB]
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)! [CAD1B]
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)! [CSB1B]
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)! [CAD2B]
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)! [CSB2B]
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)! [LDUB]
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) ! Real(dp) version of [LDUB]
571 use pietc, only: u0,u1
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) ! Real(sp) version of [LDLTB]
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) ! Real(dp) version of [LDLTB]
645 use pietc, only: u0,u1
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) ! Reversed-index version of ldub [UDLB]
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) ! real(dp) version of udlb [UDLB]
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)! [L1UBB]
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) ! Real(dp) version of [L1UBB]
771 use pietc, only: u0,u1
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)! [L1UEB]
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) ! Real(dp) version of [L1UEB]
855 use pietc, only: u0,u1
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)! [UDLBV]
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)! [udlbv]
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
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)! [UDLBX]
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)! [UDLBY]
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)! [UDLVB]
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)! [UDLXB]
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)! [UDLYB]
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)! [U1LBV]
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)! [U1LBX]
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)! [U1LBY]
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)! [U1LVB]
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)! [U1LXB]
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)! [U1LYB]
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)! [LINBV]
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)! [WRTB]
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)
pure subroutine clib_c(m1, m2, mah1, mah2, a)
Clip (set to zero) the unused values in a banded matrix representation.
pure subroutine clib_d(m1, m2, mah1, mah2, a)
Clip (set to zero) the unused values in a banded matrix representation.
subroutine davco(na, nb, za, zb, z0, a, b)
Double precision version of subroutine avco for midpoint interpolation.
subroutine tdfco(xa, xb, a, b)
Simplified computation of compact differencing coefficients to get derivatives d from cumulatives c...
subroutine dudlbv(m, mah1, mah2, a, v)
Back-substitution step of linear inversion involving banded LDU factored matrix and input vector...
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).
pure subroutine clib(m1, m2, mah1, mah2, a)
Clip (set to zero) the unused values in a banded matrix representation.
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 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)
Standard integer, real, and complex single and double precision kinds.
subroutine ddfco2(na, nb, za, zb, z0, a, b)
Double precision version of DFCO2 to get 2nd-derivative coefficients.
subroutine dl1ubb(m, mah1, mah2, mbh1, mbh2, a, b)
Double precision version of L1UBB.
subroutine tavco(xa, xb, a, b)
Simplified computation of compact midpoint interpolation coefficients.
subroutine dldub(m, mah1, mah2, a)
[L]*[D]*[U] factoring of double precision band-matrix.
Some of the commonly used constants (pi etc) mainly for double-precision subroutines.
subroutine ddfco(na, nb, za, zb, z0, a, b)
Double precision version of dfco for compact differentiation coefficients.
subroutine tdfco2(xa, xb, a, b)
Simplified computation of compact 2nd-derivative coefficients.
subroutine dl1ueb(m, mah1, mah2, mbh1, mbh2, a, b)
Double precision version of L1UEB.