SUBROUTINE CAIMMA ( PMAT , KDIMAT , PBBB , KDIBBB , KRANG , KVEC )
!****-------------------------------------------------------------------
!****    CAIMMA : Impression des matrices d'un systeme lineaire
!****    ------
!****    Auteur : Philippe Caille   31/12/91
!****-------------------------------------------------------------------
!***
!*** Sequence d'appel     : CALL CAIMMA ( PMAT   , KDIMAT , PBBB ,
!*** ----------------                     KDIBBB , KRANG  , KVEC   )
!***
!*** Arguments d'entree   :
!*** ------------------
!***   PMAT   : tableau du premier membre du systeme lineaire
!***   KDIMAT : espacement entre deux colonnes consecutives de PMAT
!***   PBBB   : tableau contenant le second membre du systeme lineaire
!***   KDIBBB : espacement entre deux colonnes consecutives de PBBB
!***   KRANG  : rang du systeme lineaire (dimension utile de PMAT)
!***   KVEC   : nombre de vecteurs dans le second membre
!***
!*** Arguments de sortie  :
!*** -------------------
!***
!*** Sous-programme amont : CANADA
!*** --------------------
!***
!*** Sous-programmes aval :
!*** --------------------
!***
!*** COMMON utilises      : QALOGO
!*** ---------------
!***
!*** Algorithme :
!*** ----------
!***
!*** Modifications :
!*** -------------
!***--------------------------------------------------------------------

USE PARKIND1  ,ONLY : JPIM     ,JPRB
USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK

USE YOMLUN   , ONLY : NULOUT

IMPLICIT NONE

INTEGER(KIND=JPIM),INTENT(IN)    :: KDIMAT 
INTEGER(KIND=JPIM),INTENT(IN)    :: KDIBBB 
INTEGER(KIND=JPIM),INTENT(IN)    :: KRANG 
INTEGER(KIND=JPIM),INTENT(IN)    :: KVEC 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PMAT(KDIMAT,KRANG) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PBBB(KDIBBB,KVEC) 
INTEGER(KIND=JPIM) :: INTOUR, IRESTE

INTEGER(KIND=JPIM) :: IC1, IC2, J1, JJC, JL
REAL(KIND=JPRB) :: ZHOOK_HANDLE

IF (LHOOK) CALL DR_HOOK('CAIMMA',0,ZHOOK_HANDLE)
INTOUR = 0
IRESTE = 0

!**---------------------------------------------------------------------
!**  - 1 -  IMPRESSIONS
!**         -----------

WRITE (NULOUT,201) KRANG

INTOUR = KRANG / 10
IRESTE = KRANG - 10 * INTOUR

IF ( INTOUR >= 1 ) THEN
  DO J1 = 1,INTOUR
    IC1 = (J1-1) * 10 + 1
    IC2 = J1 * 10
    WRITE (NULOUT,202) (JJC, JJC=IC1,IC2)
    DO JL = 1,KRANG
      WRITE (NULOUT,203) JL,(PMAT(JL,JJC), JJC=IC1,IC2)
    ENDDO
  ENDDO
ENDIF

IF ( IRESTE > 0 ) THEN
  IC1 = INTOUR * 10 + 1
  IC2 = KRANG
  WRITE (NULOUT,202) (JJC, JJC=IC1,IC2)
  DO JL=1,KRANG
    WRITE (NULOUT,203) JL,(PMAT(JL,JJC), JJC=IC1,IC2)
  ENDDO
ENDIF

WRITE (NULOUT,204) KVEC

INTOUR = 0
IRESTE = 0

INTOUR = KVEC / 10
IRESTE = KVEC - 10 * INTOUR

IF ( INTOUR >= 1 ) THEN
  DO J1 = 1,INTOUR
    IC1 = (J1-1) * 10 + 1
    IC2 = J1 * 10
    WRITE (NULOUT,202) (JJC, JJC=IC1,IC2)
    DO JL = 1,KRANG
      WRITE (NULOUT,203) JL,(PBBB(JL,JJC), JJC=IC1,KVEC)
    ENDDO
  ENDDO
ENDIF

IF ( IRESTE > 0 ) THEN
  IC1 = INTOUR * 10 + 1
  WRITE (NULOUT,202) (JJC, JJC=IC1,KVEC)
  DO JL = 1,KRANG
    WRITE (NULOUT,203) JL,(PBBB(JL,JJC), JJC=IC1,KVEC)
  ENDDO
ENDIF

!**---------------------------------------------------------------------
!**  - 2 -  FORMATS
!**         -------

201 FORMAT(//,' Impression de la matrice du systeme de rang ',I3)
202 FORMAT(/,' Colonnes:',10(I7,4X))
203 FORMAT(' Ligne ',I2,10E11.3)
204 FORMAT(/,' Impression du second membre de taille ',I3)

!**---------------------------------------------------------------------
IF (LHOOK) CALL DR_HOOK('CAIMMA',1,ZHOOK_HANDLE)
END SUBROUTINE CAIMMA
