C KMP3      SOURCE    CHAT      05/01/13    00:58:04     5004
      SUBROUTINE KMP3(AM,B,GX,IPADL,NUM,NP,NEL,NPT)
C
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C                                                                C
C     PARTIE NUMERIQUE INTENSE DE CAMTP2, CAS TRIDIMENSIONNEL    C
C                                 CAMTP                          C
C                                                                C
C     POUR OPTIMISER LES ACCES MEMOIRE ON BOUCLE SUR LES         C
C     ELEMENTS A L'INTERIEUR DE LA BOUCLE SUR LES SOMMETS.       C
C                                                                C
C     ON AMELIORE ENCORE LA RESIDENCE DES DONNEES EN TRAITANT    C
C     PAR PAQUETS D'ELEMENTS. LES PAQUETS NE DOIVENT PAS ETRE    C
C     TROP GROS.                                                 C
C                                                                C
C     C'EST LA TECHNIQUE UTILISEE DANS XCV**.                    C
C                                                                C
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C
      IMPLICIT INTEGER(I-N)
      IMPLICIT REAL*8 (A-H,O-Z)
C
      DIMENSION AM(NEL,NP,3),GX(NPT,3),B(1)
      DIMENSION NUM(NP,1),IPADL(1)
C
      LPACK=48
      NNN=MOD(NEL,LPACK)
      IF(NNN.EQ.0) NPACK=NEL/LPACK
      IF(NNN.NE.0) NPACK=1+(NEL-NNN)/LPACK

      DO 8 IPACK=1,NPACK
      KDEB=(IPACK-1)*LPACK+1
      KFIN=KDEB+LPACK-1
      IF(KFIN.GT.NEL) KFIN=NEL
      DO 7 I=1,NP
      DO 6 K=KDEB,KFIN
      IU=IPADL(NUM(I,K))
      GX(IU,1)=GX(IU,1)+AM(K,I,1)*B(K)
      GX(IU,2)=GX(IU,2)+AM(K,I,2)*B(K)
      GX(IU,3)=GX(IU,3)+AM(K,I,3)*B(K)
 6    CONTINUE
 7    CONTINUE

 8    CONTINUE
C
      RETURN
      END


