      program LGSsolve
*---------------------------------------------------------------
c
c     Löst ein lineares Gleichungssystem
c     Das Programm bestimmt die Dimension der Matrizen selbständig und
c     geht dabei davon aus, dass die letzte Zeile bzw. Spalte besetzt ist.
c
c
*---------------------------------------------------------------
      implicit   none
      integer    k,L,Dim,MatrixThisDim,RechteSeiteThisDim
      Parameter  (DIM=10)
      integer    IPIV(DIM),INFO
*
      real*8     Matrix(DIM,DIM)
      real*8     RechteSeite(DIM,DIM)
*     
      character  MatrixFilename*50,RechteSeiteFilename*50
      character  Version*50
*
      Version= '# LGSsolve 01 Juergen Schnack  05. 06. 2009'
*---------------------------------------------------------------
*
*     Version
*
      write(6,'(a)') Version
*---------------------------------------------------------------
*
      Matrix = 0.d0
      RechteSeite = 0.d0
*
*     Einlesen
*
      MatrixThisDim = 0
      call GETARG(1,MatrixFileName)
      open(1,file=MatrixFilename)
 100  read(1,*,err=110,end=110) k,L,Matrix(k,L)
      IF(k.gt.MatrixThisDim) MatrixThisDim=k
      IF(L.gt.MatrixThisDim) MatrixThisDim=L
      goto 100
 110  continue
      close(1)
      write(6,*) 'Dimension der Matrix = ',MatrixThisDim

      RechteSeiteThisDim = 0
      call GETARG(2,RechteSeiteFileName)
      open(1,file=RechteSeiteFilename)
 200  read(1,*,err=210,end=210) k,L,RechteSeite(k,L)
      IF(L.gt.RechteSeiteThisDim) RechteSeiteThisDim=L
      goto 200
 210  continue
      close(1)
      write(6,*) 'Dimension der rechten Seite = ',RechteSeiteThisDim
*---------------------------------------------------------------
*
*     Gleichungssystem lösen
*
      call DGESV(MatrixThisDim,RechteSeiteThisDim,Matrix,DIM,IPIV
     &     ,RechteSeite,DIM,INFO)
*---------------------------------------------------------------
*
*     Ausgeben
*
      do k=1,MatrixThisDim
         do L=1,RechteSeiteThisDim
            write(6,'(2i3,f15.7)') k,L,RechteSeite(k,L)
         enddo
      enddo
*
      end
