Download chmsmq.eso

Back to the list

   1 : C CHMSMQ    SOURCE    CHAT      05/01/12    22:00:15     5004           
   2 :       SUBROUTINE CHMSMQ(Z,Y,N,NXDIM,IER)
   3 : C=======================================================================        
   4 : C        ISSU DE TRIOEF ( TRSIMQ)
   5 : C                                                                               
   6 : C OBJET: TROUVE LA SOLUTION D'UN ENSEMBLE DE N<=NXDIM EQUATIONS LINEAIRES       
   7 : C NON HOMOGENES Y=Z.X: TROUVE X                                                 
   8 : C                                                                               
   9 : C ARGUMENTS: Z(NXDIM,NXDIM): MATRICE DES COEFFICIENTS                           
  10 : C            Y(NYDIM): TABLEAU DES RESIDUS                                      
  11 : C            N :DIMENSION ACTUELLE DU TABLEAU Z                                 
  12 : C            NXDIM: DIMENSION MAXIMUM DU TABLEAU Z                              
  13 : C                                                                               
  14 : C EST APPELLEE PAR CHMSLV
  15 : C IER=8  SI LA MATRICE EST SINGULIERE
  16 : C                                                                               
  17 : C    FORTRAN 77
  18 : C                                                                               
  19 : C=======================================================================        
  20 :       IMPLICIT INTEGER(I-N)
  21 :       IMPLICIT REAL*8(A-H,O-Z)                                                  
  22 :       DIMENSION Z(NXDIM,NXDIM),Y(NXDIM)                                         
  23 :                                                                                 
  24 : C     PROVISION FOR N=1                                                         
  25 :       IF(N.EQ.1) THEN
  26 :       Y(1)=Y(1)/Z(1,1)                                                          
  27 :       RETURN                                                                    
  28 :       ENDIF
  29 :                                                                                 
  30 : C     ELEMENT OF ELIMINATION                                                    
  31 :                                                                                 
  32 :       L1=N-1
  33 :       DO 10 M=1,L1
  34 :       ZMAX=0.D0
  35 :       IMAX=0                                                                    
  36 :                                                                                 
  37 : C     FIND MAX OF COLUMN                                                        
  38 :                                                                                 
  39 :       DO 20 I=M,N                                                               
  40 :         IF(ABS(Z(I,M)).LE.ZMAX) GO TO 20                                        
  41 :         IMAX=I                                                                  
  42 :         ZMAX=ABS(Z(I,M))                                                        
  43 : 20    CONTINUE                                                                  
  44 :                                                                                 
  45 : C     ERROR RETURN                                                              
  46 :                                                                                 
  47 :       IF(IMAX.EQ.0) THEN
  48 :       IER=8
  49 :       RETURN
  50 :       ENDIF
  51 :                                                                                 
  52 : C     ROW INTERCHANGE                                                           
  53 :                                                                                 
  54 :       IF(IMAX.NE.M) THEN
  55 :                                                                                 
  56 :             V=Y(M)                                                                    
  57 :             Y(M)=Y(IMAX)                                                              
  58 :             Y(IMAX)=V                                                                 
  59 :                                                                                       
  60 :             DO 40 J=M,N                                                               
  61 :                V=Z(M,J)                                                               
  62 :                Z(M,J)=Z(IMAX,J)                                                       
  63 :                Z(IMAX,J)=V                                                            
  64 : 40          CONTINUE
  65 :       ENDIF
  66 :                                                                                 
  67 :                                                                                 
  68 : C     DIAGONALIZE                                                               
  69 :                                                                                 
  70 :       M1=M+1                                                                    
  71 :       DO 70 I=M1,N                                                              
  72 :          V=Z(I,M)/Z(M,M)                                                        
  73 :          Y(I)=Y(I)-V*Y(M)                                                       
  74 :          DO 65 J=M,N                                                            
  75 :             Z(I,J)=Z(I,J)-V*Z(M,J)                                              
  76 : 65       CONTINUE                                                               
  77 : 70    CONTINUE                                                                  
  78 :                                                                                 
  79 : 10    CONTINUE                                                                  
  80 :                                                                                 
  81 : C     BACK SUBSTITUTE                                                           
  82 :                                                                                 
  83 :       Y(N)=Y(N)/Z(N,N)                                                          
  84 :       L1=N-1
  85 :       DO 100 K=1,L1
  86 :          I=N-K                                                                  
  87 :          I1=I+1                                                                 
  88 :          DO 90 J=I1,N                                                           
  89 :             Y(I)=Y(I)-Y(J)*Z(I,J)                                               
  90 :  90      CONTINUE                                                               
  91 :          Y(I)=Y(I)/Z(I,I)                                                       
  92 : 100   CONTINUE                                                                  
  93 :                                                                                 
  94 :       RETURN                                                                    
  95 :       END                                                                       
  96 :  
  97 :  

© Cast3M 2003 - All rights reserved.
Disclaimer