C NORMAM    SOURCE    GOUNAND   25/04/30    21:15:23     12258          
      SUBROUTINE NORMAM(AMORS,AISA,NORMP,NORMD,
     $     IMPR,IRET)
      IMPLICIT REAL*8 (A-H,O-Z)
      IMPLICIT INTEGER (I-N)
C***********************************************************************
C NOM         : NORMAM
C DESCRIPTION : Equilibrage de la matrice avec normp
C               et normd
C
C
C
C
C LANGAGE     : ESOPE
C AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
C               mél : gounand@semt2.smts.cea.fr
C********************************************************
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, 29/04/2003, version initiale
C HISTORIQUE : v1, 29/04/2003, 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 AMORS.PMORS
      POINTEUR AISA.IZA
      POINTEUR NORMP.IZA
      POINTEUR NORMD.IZA
      POINTEUR NORMP2.IZA
      POINTEUR NORMD2.IZA
*
      INTEGER IMPR,IRET
*
* Executable statements
*
      IF (IMPR.GT.5) WRITE(IOIMP,*) 'Entrée dans normam.eso'
* On commence par calculer 1/sqrt(normp) qui va nous servir
      SEGACT NORMP
      NTTDDL=NORMP.A(/1)
      NBVA=NTTDDL
      SEGINI NORMP2
      DO ITTDDL=1,NTTDDL
         NORMP2.A(ITTDDL)=1.D0/(SQRT(NORMP.A(ITTDDL)))
      ENDDO
      SEGACT NORMD
      NBVA=NTTDDL
      SEGINI NORMD2
      DO ITTDDL=1,NTTDDL
         NORMD2.A(ITTDDL)=1.D0/(SQRT(NORMD.A(ITTDDL)))
      ENDDO
*     On norme
      segact AMORS
      segact AISA*MOD
      NTTDD2=AMORS.IA(/1)-1
      IF (NTTDD2.NE.NTTDDL) THEN
         WRITE(IOIMP,*) 'Erreur grave'
         GOTO 9999
      ENDIF
      DO ITTDDL=1,NTTDDL
         JSTRT=AMORS.IA(ITTDDL)
         JSTOP=AMORS.IA(ITTDDL+1)-1
         DO J=JSTRT,JSTOP
            JTTDDL=AMORS.JA(J)
            VAL=AISA.A(J)
            VAL=VAL*NORMP2.A(JTTDDL)*NORMD2.A(ITTDDL)
            AISA.A(J)=VAL
         ENDDO
      ENDDO
      SEGSUP NORMP2
      SEGSUP NORMD2
*
* Normal termination
*
      IRET=0
      RETURN
*
* Format handling
*
*
* Error handling
*
 9999 CONTINUE
      IRET=1
      WRITE(IOIMP,*) 'An error was detected in subroutine normam'
      RETURN
*
* End of subroutine NORMAM
*
      END
 
