C NORMB5    SOURCE    CB215821  18/04/04    21:15:09     9798           
      SUBROUTINE NORMB5(ITAB,IRIG,VNOR)
************************************************************************
* NOM         : NORMB5
* DESCRIPTION : Sous-programme de NNOR associe a la normalisation L2
*               d'un objet TABLE de sous-type 'BASE_DE_MODES' (indice
*               'MODES' de la table de sous-type 'BASE_MODALE')
************************************************************************
* APPELE PAR : nnor.eso
************************************************************************
* ENTREES : ITAB = pointeur vers la TABLE contenant les modes a normer
*                  (ATTENTION : NNOR EST UNE DIRECTIVE)
*           IRIG = pointeur vers la RIGIDITE associee a la norme L2
*                  (0 si aucune)
* SORTIES : VNOR = coefficient de normalisation
************************************************************************
      IMPLICIT INTEGER(I-N)
      IMPLICIT REAL*8(A-H,O-Z)
      

-INC PPARAM
-INC CCOPTIO

      CHARACTER*8 TYPRET,CHARRE
      LOGICAL L0,L1

      IM = 0
 10   CONTINUE
      IM = IM + 1
      TYPRET = ' '
      CALL ACCTAB(ITAB,'ENTIER',IM,X0,' ',L0,IP0,
     &                   TYPRET,I1,X1,CHARRE,L1,ITMOD)

      IF (ITMOD.NE.0 .AND. TYPRET.EQ.'TABLE   ') THEN

         CALL ACCTAB(ITMOD,'MOT',I0,X0,'DEFORMEE_MODALE',L0,IP0,
     &                 'CHPOINT',I1,X1,' ',L1,ICHPOI)
         CALL NORMB3(ICHPOI,IRIG,VNOR)
         IF (IERR.NE.0) RETURN
         CALL ECCTAB(ITMOD,'MOT',I0,X0,'DEFORMEE_MODALE',L0,IP0,
     &                 'CHPOINT',I1,X1,' ',L1,ICHPOI)
*
         CALL ACCTAB(ITMOD,'MOT',I0,X0,'MASSE_GENERALISEE',L0,IP0,
     &                'FLOTTANT',I1,XMGEN,' ',L1,IP1)
         XMGEN = XMGEN / ( VNOR * VNOR )
         CALL ECCTAB(ITMOD,'MOT',I0,X0,'MASSE_GENERALISEE',L0,IP0,
     &                'FLOTTANT',I1,XMGEN,' ',L1,IP1)
*
         CALL ACCTAB(ITMOD,'MOT',I0,X0,'DEPLACEMENTS_GENERALISES',L0,
     &               IP0,'TABLE',I1,X1,' ',L1,ITDG)
         DO IN = 1,3
            CALL ACCTAB(ITDG,'ENTIER',IN,X0,' ',L0,IP0,
     &                     'FLOTTANT',I1,XQ,' ',L1,IP1)
             XQ = XQ / VNOR
            CALL ECCTAB(ITDG,'ENTIER',IN,X0,' ',L0,IP0,
     &                     'FLOTTANT',I1,XQ,' ',L1,IP1)
         ENDDO

         TYPRET = ' '
         CALL ACCTAB(ITMOD,'MOT',I0,X0,'CONTRAINTE_MODALE',L0,IP0,
     &                    TYPRET,I1,X1,CHARRE,L1,ICHML)
         IF (ICHML.NE.0 .AND. TYPRET.EQ.'MCHAML  ') THEN
C           Division du MCHAML par le FLOTTANT PGRAND
            IOPERA=5
            IARGU =2
            I1    =0
            CALL OPCHE1(ICHML,IOPERA,IARGU,I1,PGRAND,ICHML2,IRET)
            IF (IRET.EQ.0) CALL ERREUR(5)
            CALL ECCTAB(ITMOD,'MOT',I0,X0,'CONTRAINTE_MODALE',L0,IP0,
     &                     'MCHAML',I1,X1,' ',L1,ICHML2)
         ENDIF

         GOTO 10
      ENDIF

      RETURN
      END

 
