Download gaussj.eso

Back to the list

   1 : C GAUSSJ    SOURCE    PV        08/09/23    21:15:04     6164           
   2 :       subroutine gaussj(a,n,np,b,m,mp)
   3 : c 
   4 : c  resolution d'un systeme lineaire par le pivot de gauss
   5 : c  voir numerical recipee en fortran
   6 : c  en fortran pur
   7 : c  a est la matrice
   8 : c  b contient les econd membre en entree 
   9 : c
  10 :       IMPLICIT INTEGER(I-N)
  11 :       IMPLICIT REAL*8(A-H,O-Z)
  12 :       parameter (nmax=50)
  13 :       dimension a(np,*),b(np,*),ipiv(nmax),indxr(nmax),indxc(nmax)
  14 : *
  15 : *      write (*,*) 'Entrée dans GAUSSJ.'
  16 :       do 11 j=1,n
  17 :         ipiv(j)=0
  18 : 11    continue
  19 :       do 22 i=1,n
  20 :         big=0.d0
  21 :         do 13 j=1,n
  22 :           if(ipiv(j).ne.1)then
  23 :             do 12 k=1,n
  24 :               if (ipiv(k).eq.0) then
  25 :                 if (abs(a(j,k)).ge.big)then
  26 :                   big=abs(a(j,k))
  27 :                   irow=j
  28 :                   icol=k
  29 :                 endif
  30 :               else if (ipiv(k).gt.1) then
  31 :                 write (6,*)  'singular matrix in gaussj.eso'
  32 :               endif
  33 : 12          continue
  34 :           endif
  35 : 13      continue
  36 :         ipiv(icol)=ipiv(icol)+1
  37 :         if (irow.ne.icol) then
  38 :           do 14 l=1,n
  39 :             dum=a(irow,l)
  40 :             a(irow,l)=a(icol,l)
  41 :             a(icol,l)=dum
  42 : 14        continue
  43 :           do 15 l=1,m
  44 :             dum=b(irow,l)
  45 :             b(irow,l)=b(icol,l)
  46 :             b(icol,l)=dum
  47 : 15        continue
  48 :         endif
  49 :         indxr(i)=irow
  50 :         indxc(i)=icol
  51 :         if (a(icol,icol).eq.0.) a(icol,icol)=1.d50
  52 :         pivinv=1.d0/a(icol,icol)
  53 :         a(icol,icol)=1.d0
  54 :         do 16 l=1,n
  55 :           a(icol,l)=a(icol,l)*pivinv
  56 : 16      continue
  57 :         do 17 l=1,m
  58 :           b(icol,l)=b(icol,l)*pivinv
  59 : 17      continue
  60 :         do 21 ll=1,n
  61 :           if(ll.ne.icol)then
  62 :             dum=a(ll,icol)
  63 :             a(ll,icol)=0.d0
  64 :             do 18 l=1,n
  65 :               a(ll,l)=a(ll,l)-a(icol,l)*dum
  66 : 18          continue
  67 :             do 19 l=1,m
  68 :               b(ll,l)=b(ll,l)-b(icol,l)*dum
  69 : 19          continue
  70 :           endif
  71 : 21      continue
  72 : 22    continue
  73 :       do 24 l=n,1,-1
  74 :         if(indxr(l).ne.indxc(l))then
  75 :           do 23 k=1,n
  76 :             dum=a(k,indxr(l))
  77 :             a(k,indxr(l))=a(k,indxc(l))
  78 :             a(k,indxc(l))=dum
  79 : 23        continue
  80 :         endif
  81 : 24    continue    
  82 : 
  83 : *      write (*,*) 'Sortie de GAUSSJ.'
  84 :       return
  85 :       end
  86 : 
  87 : 
  88 : 
  89 :  
  90 :  
  91 :  

© Cast3M 2003 - All rights reserved.
Disclaimer