fusnua
C FUSNUA SOURCE CB215821 15/05/04 21:15:05 8516 C_____________________________________________________________________ C C REUNION DE DEUX OBJETS DE TYPE "NUAGE" C C Entrees : C --------- C IPO1 Pointeur sur le 1 er objet NUAGE C IPO2 Pointeur sur le 2 eme objet NUAGE C C Sortie : C -------- C IPO3 Pointeur de l'objet NUAGE resultat ( =0 SI ECHEC ) C C Suo le 05/94 C_____________________________________________________________________ C IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) C -INC PPARAM -INC CCOPTIO -INC SMNUAGE IPO3=0 C La dimension des objets NUAGE IF (IERR.NE.0) RETURN IF (IERR.NE.0) RETURN IF (IERR.NE.0) RETURN IF (IERR.NE.0) RETURN C On active les deux objets NUAGE MNUAG1=IPO1 MNUAG2=IPO2 SEGACT,MNUAG1,MNUAG2 C On compare les noms et les types des composantes. Comme C resultats on a II=nombre de composantes communes et JJ=nombre C de type communs sous le meme nom entre MNUAG1 et MNUAG2 II=0 JJ=0 NVA1 = MNUAG1.NUANOM(/2) NVA2 = MNUAG2.NUANOM(/2) IF ( (NVA1 * NVA2) .GT. 0 ) THEN C Les 2 NUAGES ne sont pas VIDES DO 10 I=1,NVA1 DO 20 J=1,NVA2 IF (MNUAG1.NUANOM(I).EQ.MNUAG2.NUANOM(J)) THEN II=II+1 IF (MNUAG1.NUATYP(I).EQ.MNUAG2.NUATYP(J))JJ=JJ+1 ENDIF 20 CONTINUE 10 CONTINUE ELSE C Un des 2 NUAGES est VIDES (ou les 2) IF (NVA1 .GT. 0) THEN SEGINI,MNUAGE=MNUAG1 ELSE SEGINI,MNUAGE=MNUAG2 ENDIF IPO3=MNUAGE SEGDES,MNUAGE GOTO 90 ENDIF C Reunion par allongement des objets MNUAG1 et MNUAG2 C si les noms des composantes, les types des composantes C ainsi que le nombre de variable sont tous les memes IF (NVAR1.EQ.NVAR2.AND.NVAR1.EQ.II.AND.NVAR1.EQ.JJ)THEN NVAR=NVAR1 SEGINI,MNUAGE IPO3=MNUAGE NBCOUP=NBCO1+NBCO2 DO 30 I=1,NVAR1 NUANOM(I)=MNUAG1.NUANOM(I) NUATYP(I)=MNUAG1.NUATYP(I) C Composante de type FLOTTANT IF (MNUAG1.NUATYP(I).EQ.'FLOTTANT') THEN NUAVF1=MNUAG1.NUAPOI(I) SEGACT,NUAVF1 SEGINI,NUAVFL NUAPOI(I)=NUAVFL DO 100 J=1,NVAR1 IF (MNUAG1.NUANOM(I).EQ.MNUAG2.NUANOM(J)) THEN NUAVF2=MNUAG2.NUAPOI(J) GOTO 110 ENDIF 100 CONTINUE 110 CONTINUE SEGACT,NUAVF2 DO 120 K=1,NBCO1 NUAFLO(K)=NUAVF1.NUAFLO(K) 120 CONTINUE DO 130 K=1,NBCO2 NUAFLO(NBCO1+K)=NUAVF2.NUAFLO(K) 130 CONTINUE SEGDES,NUAVFL,NUAVF1,NUAVF2 C Composante de type MOT ELSEIF (MNUAG1.NUATYP(I).EQ.'MOT ') THEN NUAVM1=MNUAG1.NUAPOI(I) SEGACT,NUAVM1 SEGINI,NUAVMO NUAPOI(I)=NUAVMO DO 200 J=1,NVAR1 IF (MNUAG1.NUANOM(I).EQ.MNUAG2.NUANOM(J)) THEN NUAVM2=MNUAG2.NUAPOI(J) GOTO 210 ENDIF 200 CONTINUE 210 CONTINUE SEGACT,NUAVM2 DO 220 K=1,NBCO1 NUAMOT(K)=NUAVM1.NUAMOT(K) 220 CONTINUE DO 230 K=1,NBCO2 NUAMOT(NBCO1+K)=NUAVM2.NUAMOT(K) 230 CONTINUE SEGDES,NUAVMO,NUAVM1,NUAVM2 C Composante de type LOGIQUE ELSEIF (MNUAG1.NUATYP(I).EQ.'LOGIQUE ') THEN NUAVL1=MNUAG1.NUAPOI(I) SEGACT,NUAVL1 SEGINI,NUAVLO NUAPOI(I)=NUAVLO DO 300 J=1,NVAR1 IF (MNUAG1.NUANOM(I).EQ.MNUAG2.NUANOM(J)) THEN NUAVL2=MNUAG2.NUAPOI(J) GOTO 310 ENDIF 300 CONTINUE 310 CONTINUE SEGACT,NUAVL2 DO 320 K=1,NBCO1 NUALOG(K)=NUAVL1.NUALOG(K) 320 CONTINUE DO 330 K=1,NBCO2 NUALOG(NBCO1+K)=NUAVL2.NUALOG(K) 330 CONTINUE SEGDES,NUAVLO,NUAVL1,NUAVL2 C Composante d'autres types ELSE NUAVI1=MNUAG1.NUAPOI(I) SEGACT,NUAVI1 SEGINI,NUAVIN NUAPOI(I)=NUAVIN DO 400 J=1,NVAR1 IF (MNUAG1.NUANOM(I).EQ.MNUAG2.NUANOM(J)) THEN NUAVI2=MNUAG2.NUAPOI(J) GOTO 410 ENDIF 400 CONTINUE 410 CONTINUE SEGACT,NUAVI2 DO 420 K=1,NBCO1 NUAINT(K)=NUAVI1.NUAINT(K) 420 CONTINUE DO 430 K=1,NBCO2 NUAINT(NBCO1+K)=NUAVI2.NUAINT(K) 430 CONTINUE SEGDES,NUAVIN,NUAVI1,NUAVI2 ENDIF 30 CONTINUE SEGDES,MNUAGE GOTO 90 ENDIF C Reunion en ajoutant dans le 1er objet NUAGE toutes les C composantes du 2eme NUAGE si les deux ne comportent pas C de noms de composante communs et de plus leur nombre de C uplets (NBCO1 et NBCO2) est identique IF (NBCO1.EQ.NBCO2.AND.II.EQ.0) THEN NVAR=NVAR1+NVAR2 SEGINI,MNUAGE IPO3=MNUAGE DO 40 I=1,NVAR1 NUANOM(I)=MNUAG1.NUANOM(I) NUATYP(I)=MNUAG1.NUATYP(I) NUAPOI(I)=MNUAG1.NUAPOI(I) 40 CONTINUE DO 50 I=1,NVAR2 J=NVAR1+I NUANOM(J)=MNUAG2.NUANOM(I) NUATYP(J)=MNUAG2.NUATYP(I) NUAPOI(J)=MNUAG2.NUAPOI(I) 50 CONTINUE SEGDES,MNUAGE GOTO 90 ENDIF C Message d'erreur 90 CONTINUE SEGDES,MNUAG1,MNUAG2 C RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales