C PROIET    SOURCE    CB215821  24/04/12    21:16:56     11897          

      SUBROUTINE PROIET

C--------------------------------------------------------------------
C
C                         OPERATEUR PROIET
C--------------------------------------------------------------------
C
C
C       PROJECTION  D'UN CHAMELEM AUX NOEUDS DUN MAILLAGE
C       PROJECTION ET VALEUR D'UN CHAMELEM AUX NOEUDS OU AUX
C    POINTS D INTEGRATION  D UN MODELE POUVANT COMPORTER DES COQUES
C    INTEGREES (LA COMPOSANTE T  SI PRESENTE SERA  DECOMPOSEE
C    EN T TINF TSUP SI NECESSAIRE SUIVANT LA FORMULATION DE LA COQUE
C       PROJECTION  D'UN CHAMELEM PAR MINIMISATION DE L INTEGRALE
C
C            INT (U1i - U2i)**2  SUR LES ELEMENT RECEPTEURS
C
C
C
C     - 'POLY' :
C            PROJECTION SUR GEO2 DES COMPOSANTES D'UN CHPOINT CHP1
C            DEFINI SUR GEO1 PAR UNE METHODE DE LISSAGE ( adaptee
C            pour des champs magnetostatique)
C
C SYNTAXE :
C
C      CHPO1    = PROIET    MAIL2   CHEL1
C
C      MCHEL1    = PROIET    MOD1   (CARA )   CHEL1 (MOD2)
C
C      MCHEL1    = PROIET    MOD1   CHEL1  (MOD2)  (MINI  (NB ))
C
C      OBJ1    = "POLY" GEO1 GEO2 CHP1 ENT1 MOT1 ("POIDS" X1 X2)
C
C      CHPO2  = PROIET MOD2 CHPO3 
C
C
C ENTREE :
C   SANS OPTION :
C                 MAIL2 = OBJET DE TYPE MAILLAGE.
C
C                 CHEL1 = OBJET DE TYPE  MCHAML.
C
C                 MOD1 = MODELE
C                 CARA = CARACTERISTIQUE DE LA COQUE (MCHAML) si il y a des
C       des sous zones coques dans le modele
C
C                 MOD2 = MODELE NAVIER-STOKES NLIN
C
C                 CHPO3 = OBJET CHPOINT solution KRES
C
C   POLY :
C                 GEO1 = OBJET DE TYPE MAILLAGE
C                 GEO2 = OBJET DE TYPE MAILLAGE
C                 CHP1 = OBJET DE TYPE MCHAML
C                 ENT1 = ENTIER (PRECISE LE TYPE DE SYMETRIE)
C                 MOT1 = MOT 'PLAN' OU 'AXIS'
C                 POIDS = MOT FACULTATIF
C
C SORTIE   :
C
C
C
C     NORA DAVIDOVICH- 15/2/89
C     NOUVEAUX CHAMELEMS P DOWLATYARI OCT. 91
C     MODIFICATION FLEURET 01/96 - OPTION 'ARMA'
C     MODIFICATION VIGAN   03/97 - OPTION 'COQU'
C--------------------------------------------------------------------
      IMPLICIT INTEGER(I-N)
      IMPLICIT REAL*8(A-H,O-Z)

-INC PPARAM
-INC CCOPTIO
-INC SMCHAML
-INC SMMODEL
-INC SMCOORD

      PARAMETER (NCLE = 7)
      CHARACTER*4 MOTCLE(NCLE)

      DATA  MOTCLE /'POLY','NOEU','GRAV','RIGI','MASS','STRE','MINI'/

*
      segact mcoord
*
C-----LECTURE DE L'OPTION
      IVAL = 0
      CALL LIRMOT(MOTCLE,NCLE,IVAL,0)
C
C-----OPTION POLY
      IF (IVAL.EQ.1)  THEN
        CALL LISSAG
        RETURN
      ENDIF

C- Par defaut, le support est aux noeuds
      IF (IVAL.EQ.0) IVAL = 2

      IPGEA = 0
      CALL LIROBJ('MAILLAGE',IPGEA,0,iretou)
      IF (IERR.NE.0) RETURN

C- Projection d'un champ par element defini aux noeuds sur un maillage
      IF (IPGEA.GT.0) THEN

        CALL LIROBJ('MCHAML  ',IPCHEL,1,iretou)
        CALL ACTOBJ('MCHAML  ',IPCHEL,1)
        IF (IERR.NE.0) RETURN
C Verification du support aux noeuds
        CALL QUESUP(0,IPCHEL,0,1,iretou,iret2)
        IF (iretou.GT.1) THEN
          CALL ERREUR(903)
          RETURN
        ENDIF

        CALL PRO2(IPGEA,IPCHEL,1, IPOUT,-1)

        IF (IERR.EQ.0) THEN
          CALL ACTOBJ('CHPOINT ',IPOUT,1)
          CALL ECROBJ('CHPOINT ',IPOUT)
        ENDIF

        RETURN

C- Projection d'un champ par element aux noeuds sur le support d'un modele
c*      ELSE IF (IPGEA.EQ.0) THEN
      ELSE
        CALL LIROBJ('MMODEL  ',ipmod1,1,iretou)
        CALL ACTOBJ('MMODEL  ',ipmod1,1)
        IF (IERR.NE.0) RETURN
        
        CALL LIROBJ('CHPOINT ',IPCHP1,0,iretou)
        IF (IPCHP1.gt.0) then
          call actobj('CHPOINT ',ipchp1,1)
          if (ierr.ne.0) return
          call pronli(ipmod1,ipchp1,ipout)
          if (ierr.ne.0) return
          call ecrobj('CHPOINT ',ipout)
          return
        ENDIF
        
        CALL LIROBJ('MCHAML  ',IPCHE1,1,iretou)
        CALL ACTOBJ('MCHAML  ',IPCHE1,1)
        IF (IERR.NE.0) RETURN
        CALL LIROBJ('MCHAML  ',IPCHE2,0,iretou)
        IF (IERR.NE.0) RETURN

        IF (IPCHE2.NE.0) THEN
          CALL ACTOBJ('MCHAML  ',IPCHE2,1)
          IPCHEL = IPCHE2
          IPCARA = IPCHE1
        ELSE
          IPCHEL = IPCHE1
          IPCARA = 0
        ENDIF
C Cas particulier de la presence d'un champ de CARACTERISTIQUES
C On permute eventuellement l'ordre mais normalement il faut respecter
C l'ordre de la notice "IPCARA IPCHEL"
        IF (IPCARA.NE.0) THEN
          mchelm = IPCARA
          SEGACT,mchelm
          IF (titche(1:16).NE.'CARACTERISTIQUES') THEN
c le champ de caracteristiques a peut etre ete donne en deuxieme, on
c teste en inversant les deux champs par elements fournis
             IPCHEL = IPCHE1
             IPCARA = IPCHE2

             mchelm = IPCARA
             SEGACT,mchelm
             IF (titche(1:16).NE.'CARACTERISTIQUES') THEN
               MOTERR(1:16) = 'CARACTERISTIQUES'
               CALL ERREUR(565)
             ENDIF
          ENDIF
          IF (IERR.NE.0) RETURN
        ENDIF
C Verification du support aux noeuds
        CALL QUESUP(0,IPCHEL,0,1,iretou,iret2)
        IF (iretou.GT.1) THEN
          CALL ERREUR(903)
          RETURN
        ENDIF

C       Extension du MMODEL en cas de modele de MELANGE
        CALL MODETE(ipmod1,MMODEL,IMELAN)
C
        ISUP = 1
C- Option 'MINI'
        IF (IVAL.EQ.7) THEN
          CALL PROM(MMODEL,IPCARA,IPCHEL,ISUP, IPOUT)
C- Projection sur support ISUP
        ELSE
          IF (IVAL.GT.1.AND.IVAL.LT.7) ISUP = IVAL-1
          CALL PRON(MMODEL,IPCARA,IPCHEL,ISUP, IPOUT)
        ENDIF
        IF (IERR.NE.0) RETURN
        
        CALL ACTOBJ('MCHAML  ',IPOUT,1)
        CALL ECROBJ('MCHAML  ',IPOUT)
      ENDIF

      END
 
 
 
 
