C PSOLVE    SOURCE    PV        20/09/26    21:19:38     10724          
      SUBROUTINE PSOLVE(TRANS,KPREC,KMORS,KISA,INVDIA,ILUM,ILUI,Z,R)
      IMPLICIT REAL*8 (A-H,O-Z)
      IMPLICIT INTEGER (I-N)
C***********************************************************************
C NOM         : PSOLVE
C DESCRIPTION : Preconditionner solve : résoud un système avec
C               un préconditionneur
C               Fait l'interface pour les différents types de
C               préconditionneurs
C
C LANGAGE     : ESOPE
C AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
C               mél : gounand@semt2.smts.cea.fr
C***********************************************************************
C APPELES          :
C APPELES (E/S)    :
C APPELES (BLAS)   :
C APPELES (CALCUL) :
C APPELE PAR       :
C***********************************************************************
C SYNTAXE GIBIANE    :
C ENTREES            :
C ENTREES/SORTIES    :
C SORTIES            :
C CODE RETOUR (IRET) : = 0 si tout s'est bien passé
C***********************************************************************
C VERSION    : v1, 09/02/2006, version initiale
C HISTORIQUE : v1, 09/02/2006, création
C HISTORIQUE :
C HISTORIQUE :
C***********************************************************************
C Prière de PRENDRE LE TEMPS de compléter les commentaires
C en cas de modification de ce sous-programme afin de faciliter
C la maintenance !
C***********************************************************************

-INC PPARAM
-INC CCOPTIO
-INC SMMATRIK
      POINTEUR KMORS.PMORS,KISA.IZA
      POINTEUR INVDIA.IZA,ILUM.PMORS,ILUI.IZA
      POINTEUR Z.IZA,R.IZA
*
      CHARACTER*1        TRANS
      INTEGER IMPR,IRET
*
* Executable statements
*
      IF (KPREC.EQ.0) THEN
         CALL GCOPY(R,Z)
      ELSEIF (KPREC.EQ.1) THEN
         N=INVDIA.A(/1)
         CALL PSDIAG(N,INVDIA.A,Z.A,R.A)
      ELSEIF (KPREC.EQ.2) THEN
         N=KMORS.IA(/1)-1
         NNZ=KMORS.JA(/1)
         CALL PSDILU(N,NNZ,KMORS.IA,KMORS.JA,KISA.A,
     $        INVDIA.A,
     $        Z.A,R.A)
      ELSEIF (KPREC.GE.3.AND.KPREC.LE.10) THEN
         N=KMORS.IA(/1)-1
         NNZ=KMORS.JA(/1)
*         N=ILUM.IA(/1)-1
*         NNZ=ILUM.JA(/1)
         CALL PSILU0(TRANS,N,NNZ,ILUM.IA,ILUM.JA,ILUI.A,
     $        Z.A,R.A)
      ELSE
         WRITE(IOIMP,*) 'KPREC=',KPREC,' not allowed'
         GOTO 9999
      ENDIF
*
* Normal termination
*
      RETURN
*
* Format handling
*
*
* Error handling
*
 9999 CONTINUE
      CALL ERREUR(5)
      WRITE(IOIMP,*) 'An error was detected in subroutine psolve'
      RETURN
*
* End of subroutine PSOLVE
*
      END




 
 
 
