C FSUR      SOURCE    CB215821  23/07/12    21:15:05     11704          
*
      SUBROUTINE FSUR
*
*-----------------------------------------------------------------------
*
*                     OPERATEUR FSUR
*
*-----------------------------------------------------------------------
*
      IMPLICIT INTEGER(I-N)
      IMPLICIT REAL*8 (A-H,O-Z)
*

-INC SMCOORD
-INC PPARAM
-INC CCOPTIO
-INC SMCHPOI
*
      PARAMETER (NTYPE = 3, NTYPR = 1)
      CHARACTER*4 MTYPE(NTYPE),MTYPR(NTYPR)
*
      DATA MTYPE / 'MASS','COQU','POUT' /
      DATA MTYPR / 'PROJ' /
*
      IMLU   = 0
      IPMODL = 0
      IPCHPS = 0
      IPVECT = 0
      IPMAIL = 0
      IPCARA = 0
      IPCHPF = 0
*
*-----------------------------------------------------------------------
*     LECTURE DES ARGUMENTS
*-----------------------------------------------------------------------
*
*  ON LIT UN MOT-CLE OBLIGATOIRE
*
      CALL LIRMOT(MTYPE,NTYPE,IMLU,1)
      IF (IERR.NE.0) RETURN
*
*  ON LIT UN MMODEL OBLIGATOIRE
*
      CALL LIROBJ('MMODEL  ',IPMODL,1,iret)
      CALL ACTOBJ('MMODEL  ',IPMODL,1)
      IF (IERR.NE.0) RETURN
*
*  ON LIT SOIT UN CHAMP POINT, SOIT UN VECTEUR
*
      CALL LIROBJ('CHPOINT ',IPCHPS,0,iretch)
      IF(iretch .EQ. 1) CALL ACTOBJ('CHPOINT ',IPCHPS,1)
      IF (IERR.NE.0) RETURN
*
*     IF (IPCHPS .EQ. 0) THEN
      IF (iretch .EQ. 0) THEN
        CALL LIROBJ('POINT   ',IPVECT,1,iret)
        IF (IERR.NE.0) RETURN
      ENDIF
*
*-----------------------------------------------------------------------
*        ON A LU LE MOT   MASSIF
*-----------------------------------------------------------------------
      SEGACT,MCOORD
      IF (IMLU.EQ.1) THEN
*
*       SI ON A LU UN VECTEUR, IL FAUT LIRE UN MAILLAGE OBLIGATOIREMENT
*
        IF (IPVECT .NE. 0) THEN
          CALL LIROBJ('MAILLAGE',IPMAIL,1,iret)
          CALL ACTOBJ('MAILLAGE',IPMAIL,1)
          IF (IERR.NE.0) RETURN
        ENDIF
*
*       LECTURE D'UN MCHAML DE CARACTERISTIQUES FACULTATIVE
*
        CALL LIROBJ('MCHAML  ',IPCARA,0,iret)
        IF(iret .EQ. 1) CALL ACTOBJ('MCHAML  ',IPCARA,1)
        IF (IERR.NE.0) RETURN
*
*       CALCUL DU CHAMP POINT DE FORCES NODALES EQUIVALENTES
*
        CALL FSURMA(IPMODL,IPCHPS,IPVECT,IPMAIL,IPCARA, IPCHPF)
*
*-----------------------------------------------------------------------
*        ON A LU LE MOT   COQUE
*-----------------------------------------------------------------------
      ELSE IF (IMLU.EQ.2) THEN
*
*       LECTURE D'UN MCHAML DE CARACTERISTIQUES FACULTATIVE
*
        CALL LIROBJ('MCHAML',IPCARA,0,iret)
        IF(iret .EQ. 1) CALL ACTOBJ('MCHAML  ',IPCARA,1)
        IF (IERR.NE.0) RETURN
*
*       CALCUL DU CHAMP POINT DE FORCES NODALES EQUIVALENTES
*
        CALL FSURCO(IPMODL,IPCHPS,IPVECT,IPCARA, IPCHPF)
*
*-----------------------------------------------------------------------
*        ON A LU LE MOT   POUT
*-----------------------------------------------------------------------
      ELSE IF (IMLU.EQ.3) THEN
*
        IVPROJ = 0
*
*       LECTURE DU MOT-CLE FACULTATIF 'PROJ'
*
        CALL LIRMOT(MTYPR,NTYPR,IPROJ,0)
        IF (IERR.NE.0) RETURN
*
*       LECTURE DU VECTEUR SI MOT-CLE 'PROJ' A ETE LU
*
        IF (IPROJ.EQ.1) THEN
          CALL LIROBJ('POINT   ',IVPROJ,1,iret)
          IF (IERR.NE.0) RETURN
        ENDIF
*
*       CALCUL DU CHAMP POINT DE FORCES NODALES EQUIVALENTES
*
        CALL FSURPO(IPMODL,IPCHPS,IPVECT,IVPROJ, IPCHPF)
*
      ENDIF
      SEGDES,MCOORD
*
*-----------------------------------------------------------------------
*     FIN DU TRAITEMENT
*-----------------------------------------------------------------------
*
* --> SORTIE PREMATUREE EN CAS D'ERREUR LORS DU CALCUL DES FORCES
*
      IF (IERR.NE.0 .OR. IPCHPF.EQ.0) RETURN
*
* --> LE CHAMP DE FORCES NODALES EQUIVALENTES EST DE NATURE DISCRETE
*     LE NUMERO DE L HARMONIQUE EST PRIS EGAL A NIFOUR
*     POUR TOUTES LES COMPOSANTES DU CHPOINT
*
      MCHPOI = IPCHPF
      SEGACT,MCHPOI*MOD
      NAT = MAX(JATTRI(/1),1)
      NSOUPO = IPCHP(/1)
      SEGADJ,MCHPOI
      JATTRI(1) = 2
      DO 10 i = 1, NSOUPO
        MSOUPO = IPCHP(i)
        SEGACT,MSOUPO*MOD
        DO 11 j = 1, NOHARM(/1)
          NOHARM(j) = NIFOUR
 11     CONTINUE
 10   CONTINUE
*
* --> ECRITURE DU CHPOINT RESULTAT
*
      CALL ACTOBJ('CHPOINT ',IPCHPF,1)
      CALL ECROBJ('CHPOINT ',IPCHPF)

      END





 
