26 interface swpvv;  
module procedure sswpvv,dswpvv,cswpvv;        end 
interface    28    module procedure sldum,dldum,cldum,sldumf,dldumf,cldumf;     end 
interface    30    module procedure sudlmm,dudlmm,cudlmm,sudlmv,dudlmv,cudlmv;  end 
interface    33 sinvmt, dinvmt, cinvmt, slinmmt, dlinmmt, clinmmt, slinmvt, dlinmvt, clinmvt, &
    34 sinvmtf,dinvmtf,cinvmtf,slinmmtf,dlinmmtf,clinmmtf,slinmvtf,dlinmvtf,clinmvtf,&
    37 interface l1lm;   
module procedure sl1lm,dl1lm,sl1lmf,dl1lmf;  end 
interface    38 interface ldlm;   
module procedure sldlm,dldlm,sldlmf,dldlmf;  end 
interface    39 interface invl;   
module procedure sinvl,dinvl,slinlv,dlinlv;  end 
interface    40 interface invu;   
module procedure sinvu,dinvu,slinuv,dlinuv;  end 
interface    49 subroutine sswpvv(d,e)
    50 real(sp),    
intent(inout) :: d(:), e(:)
    51 real(sp)                   :: tv(size(d))
    60 subroutine dswpvv(d,e)
    61 real(dp), 
intent(inout) :: d(:), e(:)
    62 real(dp)                :: tv(size(d))
    71 subroutine cswpvv(d,e)
    72 complex(dpc),
intent(inout) :: d(:), e(:)
    73 complex(dpc)               :: tv(size(d))
    82 real(sp),
dimension(:,:),
intent(INOUT):: a
    85 if(ff)stop 
'In sinvmt; Unable to invert matrix'    93 real(dp),
dimension(:,:),
intent(inout):: a
    96 if(ff)stop 
'In dinvmt; Unable to invert matrix'   104 complex(dpc),
dimension(:,:),
intent(inout):: a
   107 if(ff)stop 
'In cinvmt; Unable to invert matrix'   108 end subroutine cinvmt
   115 subroutine sinvmtf(a,ff)
   116 use pietc_s, 
only: u1
   117 real(sp),
dimension(:,:),
intent(inout):: a
   118 logical,                
intent(  out):: ff 
   119 integer(spi)                     :: m,i,j,jp,l
   121 integer(spi),
dimension(size(a,1)):: ipiv
   123 if(m /= 
size(a,2))stop 
'In sinvmtf; matrix passed to sinvmtf is not square'   125 call sldumf(a,ipiv,d,ff)
   127    print 
'(" In sinvmtf; failed call to sldumf")'   131 do i=1,m; a(i,i)=u1/a(i,i);
 enddo   133    do j=i+1,m; a(i,j)=-a(j,j)*dot_product(a(i:j-1,j),a(i,i:j-1));
 enddo   137    do i=jp,m; a(i,j)=-a(i,j)-dot_product(a(jp:i-1,j),a(i,jp:i-1));
 enddo   141    do i=1,j; a(i,j)=a(i,j)+dot_product(a(jp:m,j),a(i,jp:m));
 enddo   142    do i=jp,m; a(i,j)=dot_product(a(i:m,j),a(i,i:m));
         enddo   145 do j=m-1,1,-1; l=ipiv(j); 
call sswpvv(a(:,j),a(:,l));
 enddo   146 end subroutine sinvmtf
   153 subroutine dinvmtf(a,ff)
   154 real(dp),
dimension(:,:),
intent(inout):: a
   155 logical,                
intent(  out):: ff
   156 integer(spi)                         :: m,i,j,jp,l
   158 integer(spi), 
dimension(size(a,1))   :: ipiv
   160 if(m /= 
size(a,2))stop 
'In inv; matrix passed to dinvmtf is not square'   162 call dldumf(a,ipiv,d,ff)
   164    print 
'(" In dinvmtf; failed call to dldumf")'   168 do i=1,m; a(i,i)=1_dp/a(i,i);
 enddo   170    do j=i+1,m; a(i,j)=-a(j,j)*dot_product(a(i:j-1,j),a(i,i:j-1));
 enddo   174    do i=jp,m; a(i,j)=-a(i,j)-dot_product(a(jp:i-1,j),a(i,jp:i-1));
 enddo   178    do i=1,j; a(i,j)=a(i,j)+dot_product(a(jp:m,j),a(i,jp:m));
 enddo   179    do i=jp,m; a(i,j)=dot_product(a(i:m,j),a(i,i:m));
         enddo   182 do j=m-1,1,-1; l=ipiv(j); 
call dswpvv(a(:,j),a(:,l));
 enddo   183 end subroutine dinvmtf
   190 subroutine cinvmtf(a,ff)
   192 complex(dpc),
dimension(:,:),
intent(INOUT):: a
   193 logical,                    
intent(  OUT):: ff
   194 integer(spi)                     :: m,i,j,jp,l
   196 integer(spi),
dimension(size(a,1)):: ipiv
   198 if(m /= 
size(a,2))stop 
'In inv; matrix passed to cinvmtf is not square'   200 call cldumf(a,ipiv,d,ff)
   202    print 
'(" In cinvmtf; failed call to cldumf")'   206 do i=1,m; a(i,i)=
c1/a(i,i);
 enddo   208    do j=i+1,m; a(i,j)=-a(j,j)*sum(a(i:j-1,j)*a(i,i:j-1));
 enddo   212    do i=jp,m; a(i,j)=-a(i,j)-sum(a(jp:i-1,j)*a(i,jp:i-1));
 enddo   216    do i=1,j; a(i,j)=a(i,j)+sum(a(jp:m,j)*a(i,jp:m));
 enddo   217    do i=jp,m; a(i,j)=sum(a(i:m,j)*a(i,i:m));
         enddo   220 do j=m-1,1,-1; l=ipiv(j); 
call cswpvv(a(:,j),a(:,l));
 enddo   221 end subroutine cinvmtf
   229 subroutine slinmmt(a,b)
   230 real(sp),
dimension(:,:),
intent(inout):: a,b
   232 call slinmmtf(a,b,ff)
   233 if(ff)stop 
'In slinmmt; unable to invert linear system'   234 end subroutine slinmmt
   242 subroutine dlinmmt(a,b)
   243 real(dp),
dimension(:,:),
intent(inout):: a,b
   245 call dlinmmtf(a,b,ff)
   246 if(ff)stop 
'In dlinmmt; unable to invert linear system'   247 end subroutine dlinmmt
   255 subroutine clinmmt(a,b)
   256 complex(dpc),
dimension(:,:),
intent(inout):: a,b
   258 call clinmmtf(a,b,ff)
   259 if(ff)stop 
'In clinmmt; unable to invert linear system'   260 end subroutine clinmmt
   269 subroutine slinmmtf(a,b,ff)
   270 real(sp),   
dimension(:,:),
intent(inout):: a,b
   271 logical,                   
intent(  out):: ff
   272 integer(spi),
dimension(size(a,1))       :: ipiv
   276 if(m /= 
size(a,2))stop 
'In inv; matrix passed to slinmmtf is not square'   278      stop 
'In inv; matrix and vectors in slinmmtf have unmatched sizes'   279 call sldumf(a,ipiv,d,ff)
   281    print 
'("In slinmmtf; failed call to sldumf")'   284 call sudlmm(a,b,ipiv)
   285 end subroutine slinmmtf
   294 subroutine dlinmmtf(a,b,ff)
   295 real(dp),
dimension(:,:),   
intent(inout):: a,b
   296 logical,                   
intent(  out):: ff
   297 integer(spi),
dimension(size(a,1)):: ipiv
   301 if(m /= 
size(a,2))stop 
'In inv; matrix passed to dlinmmtf is not square'   303      stop 
'In inv; matrix and vectors in dlinmmtf have unmatched sizes'   304 call dldumf(a,ipiv,d,ff)
   306    print 
'("In dlinmmtf; failed call to dldumf")'   309 call dudlmm(a,b,ipiv)
   310 end subroutine dlinmmtf
   319 subroutine clinmmtf(a,b,ff)
   320 complex(dpc),
dimension(:,:),
intent(INOUT):: a,b
   321 logical,                    
intent(  OUT):: ff
   322 integer(spi),
dimension(size(a,1)):: ipiv
   326 if(m /= 
size(a,2))stop 
'In inv; matrix passed to dlinmmtf is not square'   328      stop 
'In inv; matrix and vectors in dlinmmtf have unmatched sizes'   329 call cldumf(a,ipiv,d,ff)
   331    print 
'("In clinmmtf; failed call to cldumf")'   334 call cudlmm(a,b,ipiv)
   335 end subroutine clinmmtf
   343 subroutine slinmvt(a,b)
   344 real(sp),
dimension(:,:),
intent(inout):: a
   345 real(sp),
dimension(:),  
intent(inout):: b
   347 call slinmvtf(a,b,ff)
   348 if(ff)stop 
'In slinmvt; matrix singular, unable to continue'   349 end subroutine slinmvt
   357 subroutine dlinmvt(a,b)
   358 real(dp),
dimension(:,:),
intent(inout):: a
   359 real(dp),
dimension(:),  
intent(inout):: b
   361 call dlinmvtf(a,b,ff)
   362 if(ff)stop 
'In dlinmvt; matrix singular, unable to continue'   363 end subroutine dlinmvt
   371 subroutine clinmvt(a,b)
   372 complex(dpc),   
dimension(:,:),
intent(inout):: a
   373 complex(dpc),   
dimension(:),  
intent(inout):: b
   375 call clinmvtf(a,b,ff)
   376 if(ff)stop 
'In clinmvt; matrix singular, unable to continue'   377 end subroutine clinmvt
   385 subroutine slinmvtf(a,b,ff)
   386 real(sp),
dimension(:,:),
intent(inout):: a
   387 real(sp),
dimension(:),  
intent(inout):: b
   388 logical,                
intent(  out):: ff
   389 integer(spi),
dimension(size(a,1))    :: ipiv
   391 if(
size(a,1) /= 
size(a,2).or. 
size(a,1) /= 
size(b))&
   392      stop 
'In inv; In slinmvtf; incompatible array dimensions'   393 call sldumf(a,ipiv,d,ff)
   395    print 
'("In slinmvtf; failed call to sldumf")'   398 call sudlmv(a,b,ipiv) 
   399 end subroutine slinmvtf
   407 subroutine dlinmvtf(a,b,ff)
   408 real(dp),
dimension(:,:),
intent(inout):: a
   409 real(dp),
dimension(:),  
intent(inout):: b
   410 logical,                
intent(  out):: ff
   411 integer(spi), 
dimension(size(a,1))   :: ipiv
   413 if(
size(a,1) /= 
size(a,2).or. 
size(a,1) /= 
size(b))&
   414      stop 
'In inv; incompatible array dimensions passed to dlinmvtf'   415 call dldumf(a,ipiv,d,ff)
   417    print 
'("In dlinmvtf; failed call to dldumf")'   420 call dudlmv(a,b,ipiv)
   421 end subroutine dlinmvtf
   429 subroutine clinmvtf(a,b,ff)
   430 complex(dpc),
dimension(:,:),
intent(inout):: a
   431 complex(dpc),
dimension(:),  
intent(inout):: b
   432 logical,                    
intent(  out):: ff
   433 integer, 
dimension(size(a,1))            :: ipiv
   435 if(
size(a,1) /= 
size(a,2).or. 
size(a,1) /= 
size(b))&
   436      stop 
'In inv; incompatible array dimensions passed to clinmvtf'   437 call cldumf(a,ipiv,d,ff)
   439    print 
'("In clinmvtf; failed call to cldumf")'   442 call cudlmv(a,b,ipiv)
   443 end subroutine clinmvtf
   451 subroutine iinvf(imat,ff)
   452 integer(spi),
dimension(:,:),
intent(INOUT):: imat
   453 logical,                    
intent(  OUT):: ff
   454 real(dp),
parameter                           :: eps=1.e-6_dp
   455 real(dp),
dimension(size(imat,1),size(imat,1)):: dmat
   456 integer(spi)                                 :: m,i,j
   458 if(m /= 
size(imat,2))stop 
'In inv; matrix passed to iinvf is not square'   459 dmat=imat; 
call inv(dmat,ff)
   463          imat(i,j)=nint(dmat(i,j)); 
if(abs(dmat(i,j)-imat(i,j))>eps)ff=
t   476 subroutine sldum(a,ipiv,d)
   477 real(sp),    
intent(inout) :: a(:,:) 
   478 real(sp),    
intent(  out) :: d
   479 integer(spi),
intent(  out) :: ipiv(:)
   481 call sldumf(a,ipiv,d,ff)
   482 if(ff)stop 
'In sldum; matrix singular, unable to continue'   492 subroutine dldum(a,ipiv,d)
   493 real(dp),    
intent(inout) :: a(:,:) 
   494 real(dp),    
intent(  out) :: d
   495 integer(spi),
intent(  out) :: ipiv(:)
   497 call dldumf(a,ipiv,d,ff)
   498 if(ff)stop 
'In dldum; matrix singular, unable to continue'   508 subroutine cldum(a,ipiv,d)
   509 complex(dpc),
intent(inout) :: a(:,:) 
   510 complex(dpc),
intent(out  ) :: d
   511 integer(spi),
intent(out  ) :: ipiv(:)
   513 call cldumf(a,ipiv,d,ff)
   514 if(ff)stop 
'In cldum; matrix singular, unable to continue'   525 subroutine sldumf(a,ipiv,d,ff)
   526 use pietc_s,
only: u0,u1
   527 real(sp),    
intent(inout) :: a(:,:) 
   528 real(sp),    
intent(  out) :: d
   529 integer(spi),
intent(  out) :: ipiv(:)
   530 logical,     
intent(  out) :: ff
   531 integer(spi):: m,i, j, jp, ibig, jm
   532 real(sp)    :: s(size(a,1)),  aam, aa, abig,  ajj, ajji, aij
   542     print 
'("In sldumf; row ",i6," of matrix vanishes")',i
   552    abig=s(j)*abs(a(j,j))
   565       call sswpvv(a(j,:),a(ibig,:))
   571       print 
'(" failure in sldumf:"/" matrix singular, rank=",i3)',jm
   579       a(i,jp:m) = a(i,jp:m) - aij*a(j,jp:m)
   582 end subroutine sldumf
   592 subroutine dldumf(a,ipiv,d,ff)
   594 real(dp),    
intent(inout) :: a(:,:) 
   595 real(dp),    
intent(  out) :: d
   596 integer,     
intent(  out) :: ipiv(:)
   597 logical(spi),
intent(  out) :: ff
   598 integer(spi)               :: m,i, j, jp, ibig, jm
   599 real(dp)                   :: s(size(a,1)),  aam, aa, abig,  ajj, ajji, aij
   609       print 
'("In dldumf;  row ",i6," of matrix vanishes")',i
   619    abig=s(j)*abs(a(j,j))
   632       call dswpvv(a(j,:),a(ibig,:))
   638       print 
'(" Failure in dldumf:"/" matrix singular, rank=",i3)',jm
   646       a(i,jp:m) = a(i,jp:m) - aij*a(j,jp:m)
   649 end subroutine dldumf
   659 subroutine cldumf(a,ipiv,d,ff)
   661 complex(dpc), 
intent(inout)  :: a(:,:) 
   662 complex(dpc), 
intent(  out)  :: d
   663 integer(spi), 
intent(  out)  :: ipiv(:)
   664 logical,      
intent(  out)  :: ff
   665 integer(spi)                 :: m,i, j, jp, ibig, jm
   666 complex(dpc)                 :: ajj, ajji, aij
   667 real(dp)                     :: aam,aa,abig
   668 real(dp),
dimension(size(a,1)):: s
   678       print 
'("In cldumf;  row ",i6," of matrix vanishes")',i
   688    abig=s(j)*abs(a(j,j))
   701       call cswpvv(a(j,:),a(ibig,:))
   707       print 
'(" Failure in cldumf:"/" matrix singular, rank=",i3)',jm
   715       a(i,jp:m) = a(i,jp:m) - aij*a(j,jp:m)
   718 end subroutine cldumf
   729 subroutine sudlmm(a,b,ipiv)
   730 use pietc_s, 
only: u1
   731 integer(spi),
dimension(:),  
intent(in)    :: ipiv 
   732 real(sp),    
dimension(:,:),
intent(in)    :: a 
   733 real(sp),    
dimension(:,:),
intent(inout) :: b 
   734 integer(spi):: m,i, k, l
   742     s = s - sum(b(1:i-1,k)*a(i,1:i-1))
   748     b(i,k) = b(i,k) - sum(b(i+1:m,k)*a(i,i+1:m))
   752 end subroutine sudlmm
   763 subroutine dudlmm(a,b,ipiv)
   765 integer(spi),
dimension(:),  
intent(in   ) :: ipiv 
   766 real(dp),    
dimension(:,:),
intent(in   ) :: a 
   767 real(dp),    
dimension(:,:),
intent(inout) :: b 
   768 integer(spi):: m,i, k, l
   776       s = s - sum(b(1:i-1,k)*a(i,1:i-1))
   782       b(i,k) = b(i,k) - sum(b(i+1:m,k)*a(i,i+1:m))
   786 end subroutine dudlmm
   797 subroutine cudlmm(a,b,ipiv)
   799 integer(spi),
dimension(:),  
intent(in   ) :: ipiv 
   800 complex(dpc),
dimension(:,:),
intent(in   ) :: a 
   801 complex(dpc),
dimension(:,:),
intent(inout) :: b 
   802 integer(spi):: m,i, k, l
   803 complex(dpc):: s,aiii
   810       s = s - sum(b(1:i-1,k)*a(i,1:i-1))
   816       b(i,k) = b(i,k) - sum(b(i+1:m,k)*a(i,i+1:m))
   820 end subroutine cudlmm
   830 subroutine sudlmv(a,b,ipiv)
   831 use pietc_s, 
only: u1
   832 integer(spi),
dimension(:),  
intent(in   ):: ipiv 
   833 real(sp),    
dimension(:,:),
intent(in   ):: a 
   834 real(sp),    
dimension(:),  
intent(inout):: b 
   835 integer(spi):: m,i, l
   842    s = s - sum(b(1:i-1)*a(i,1:i-1))
   848    b(i) = b(i) - sum(b(i+1:m)*a(i,i+1:m))
   851 end subroutine sudlmv
   861 subroutine dudlmv(a,b,ipiv)
   863 integer(spi),
dimension(:),  
intent(in   ) :: ipiv(:) 
   864 real(dp),    
dimension(:,:),
intent(in   ) :: a(:,:) 
   865 real(dp),    
dimension(:),  
intent(inout) :: b(:) 
   866 integer(spi):: m,i, l
   873    s = s - sum(b(1:i-1)*a(i,1:i-1))
   879    b(i) = b(i) - sum(b(i+1:m)*a(i,i+1:m))
   882 end subroutine dudlmv
   892 subroutine cudlmv(a,b,ipiv)
   894 integer(spi),
dimension(:),  
intent(in   ) :: ipiv(:) 
   895 complex(dpc),
dimension(:,:),
intent(in   ) :: a(:,:) 
   896 complex(dpc),
dimension(:),  
intent(inout) :: b(:) 
   897 integer(spi):: m,i, l
   898 complex(dpc):: s,aiii
   904    s = s - sum(b(1:i-1)*a(i,1:i-1))
   910    b(i)= b(i) - sum(b(i+1:m)*a(i,i+1:m))
   913 end subroutine cudlmv
   920 subroutine sl1lm(a,b) 
   921 real(sp),
intent(in   ):: a(:,:)
   922 real(sp),
intent(inout):: b(:,:)
   925 if(ff)stop 
'In sl1lm; matrix singular, unable to continue'   933 subroutine dl1lm(a,b) 
   934 real(dp),
intent(in   ):: a(:,:)
   935 real(dp),
intent(inout):: b(:,:)
   938 if(ff)stop 
'In dl1lm; matrix singular, unable to continue'   947 subroutine sl1lmf(a,b,ff)
   948 use pietc_s, 
only: u0
   949 real(sp),
intent(in   ):: a(:,:)
   950 real(sp),
intent(inout):: b(:,:)
   951 logical, 
intent(  out):: ff
   952 integer(spi):: m,j, jm, jp, i
   959    s = a(j,j) - sum(b(j,1:jm)*b(j,1:jm))
   962       print 
'("sL1Lmf detects nonpositive a, rank=",i6)',jm
   968       s = a(i,j) - sum(b(i,1:jm)*b(j,1:jm))
   973 end subroutine sl1lmf
   981 subroutine dl1lmf(a,b,ff) 
   983 real(dp),
intent(in   ) :: a(:,:) 
   984 real(dp),
intent(inout) :: b(:,:) 
   985 logical, 
intent(  out) :: ff
   986 integer(spi):: m,j, jm, jp, i
   993   s = a(j,j) - sum(b(j,1:jm)*b(j,1:jm))
   996      print 
'("dL1LMF detects nonpositive A, rank=",i6)',jm
  1002     s = a(i,j) - sum(b(i,1:jm)*b(j,1:jm))
  1007 end subroutine dl1lmf
  1015 subroutine sldlm(a,b,d)
  1016 real(sp),
intent(in   ):: a(:,:)
  1017 real(sp),
intent(inout):: b(:,:)
  1018 real(sp),
intent(  out):: d(:)
  1020 call sldlmf(a,b,d,ff)
  1021 if(ff)stop 
'In sldlm; matrix singular, unable to continue'  1022 end subroutine sldlm
  1030 subroutine dldlm(a,b,d)
  1031 real(dp),
intent(in   ):: a(:,:)
  1032 real(dp),
intent(inout):: b(:,:)
  1033 real(dp),
intent(  out):: d(:)
  1035 call dldlmf(a,b,d,ff)
  1036 if(ff)stop 
'In dldlm; matrix singular, unable to continue'  1037 end subroutine dldlm
  1046 subroutine sldlmf(a,b,d,ff) 
  1047 use pietc_s, 
only: u0,u1
  1048 real(sp), 
intent(in   ):: a(:,:)
  1049 real(sp), 
intent(inout):: b(:,:)
  1050 real(sp), 
intent(  out):: d(:)
  1051 logical,  
intent(  out):: ff
  1052 integer(spi):: m,j, jm, jp, i
  1059   d(j)=a(j,j) - sum(b(1:jm,j)*b(j,1:jm))
  1063      print 
'("In sldlmf; singularity of matrix detected")'  1064      print 
'("Rank of matrix: ",i6)',jm
  1069      b(j,i)=a(i,j) - dot_product(b(1:jm,j),b(i,1:jm))
  1074 end subroutine sldlmf
  1083 subroutine dldlmf(a,b,d,ff) 
  1085 real(dp), 
intent(IN   ) :: a(:,:)
  1086 real(dp), 
intent(INOUT) :: b(:,:)
  1087 real(dp), 
intent(  OUT) :: d(:)
  1088 logical,  
intent(  OUT) :: ff
  1089 integer(spi):: m,j, jm, jp, i
  1093 do j=1,m; jm=j-1; jp=j+1
  1094   d(j)=a(j,j) - sum(b(1:jm,j)*b(j,1:jm))
  1098      print 
'("In dldlmf; singularity of matrix detected")'  1099      print 
'("Rank of matrix: ",i6)',jm
  1104      b(j,i)=a(i,j) - dot_product(b(1:jm,j),b(i,1:jm))
  1109 end subroutine dldlmf
  1117 real(sp),
dimension(:,:),
intent(inout):: a
  1118 a=transpose(a); 
call sinvl(a); a=transpose(a)
  1119 end subroutine sinvu
  1127 real(dp),
dimension(:,:),
intent(inout):: a
  1128 a=transpose(a); 
call dinvl(a); a=transpose(a)
  1129 end subroutine dinvu
  1136 use pietc_s, 
only: u0,u1
  1137 real(sp), 
intent(inout) :: a(:,:) 
  1138 integer(spi):: m,j, i
  1144       a(i,j)=-a(i,i)*sum(a(j:i-1,j)*a(i,j:i-1))
  1147 end subroutine sinvl
  1155 real(dp), 
intent(inout) :: a(:,:) 
  1156 integer(spi):: m,j, i
  1162       a(i,j)=-a(i,i)*sum(a(j:i-1,j)*a(i,j:i-1))
  1165 end subroutine dinvl
  1173 subroutine slinlv(a,u)
  1174 real(sp),
intent(in   ) :: a(:,:)
  1175 real(sp),
intent(inout) :: u(:)
  1177 if(
size(a,1) /= 
size(a,2) .or. 
size(a,1) /= 
size(u))&
  1178      stop 
'In slinlv; incompatible array dimensions'  1179 do i=1,
size(u); u(i)=(u(i) - sum(u(:i-1)*a(i,:i-1)))/a(i,i);
 enddo  1180 end subroutine slinlv
  1188 subroutine dlinlv(a,u)
  1189 real(dp),
intent(in   ) :: a(:,:)
  1190 real(dp),
intent(inout) :: u(:)
  1192 if(
size(a,1) /= 
size(a,2) .or. 
size(a,1) /= 
size(u))&
  1193      stop 
'In dlinlv; incompatible array dimensions'  1194 do i=1,
size(u); u(i)=(u(i) - sum(u(:i-1)*a(i,:i-1)))/a(i,i);
 enddo  1195 end subroutine dlinlv
  1203 subroutine slinuv(a,u)
  1204 real(sp),
intent(in   ) :: a(:,:)
  1205 real(sp),
intent(inout) :: u(:)
  1207 if(
size(a,1) /= 
size(a,2) .or. 
size(a,1) /= 
size(u))&
  1208      stop 
'In linuv; incompatible array dimensions'  1209 do i=
size(u),1,-1; u(i)=(u(i) - sum(a(i+1:,i)*u(i+1:)))/a(i,i);
 enddo  1210 end subroutine slinuv
  1218 subroutine dlinuv(a,u)
  1219 real(dp), 
intent(in   ) :: a(:,:)
  1220 real(dp), 
intent(inout) :: u(:)
  1222 if(
size(a,1) /= 
size(a,2) .or. 
size(a,1) /= 
size(u))&
  1223      stop 
'In dlinuv; incompatible array dimensions'  1224 do i=
size(u),1,-1; u(i)=(u(i) - sum(a(i+1:,i)*u(i+1:)))/a(i,i);
 enddo  1225 end subroutine dlinuv
 
integer, parameter sp
Single precision real kind. 
 
integer, parameter dp
Double precision real kind. 
 
Standard integer, real, and complex single and double precision kinds. 
 
logical, parameter f
for pain-relief in logical ops 
 
real(dp), parameter u0
zero 
 
complex(dpc), parameter c1
complex one 
 
complex(dpc), parameter c0
complex zero 
 
logical, parameter t
for pain-relief in logical ops 
 
real(dp), parameter u1
one 
 
Some of the commonly used constants (pi etc) mainly for double-precision subroutines. 
 
integer, parameter spc
Single precision real kind. 
 
integer, parameter spi
Single precision integer kind. 
 
integer, parameter dpc
Double precision real kind.