C PUISCP SOURCE CHAT 05/01/13 02:39:13 5004 SUBROUTINE PUISCP(IPEV1,IPEV2,IRET,INV,ICOUL) IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) C C======================================================================= C = = C = APPELE PAR PUIS = C = = C = CONSTRUCTION D'UN OBJET DE TYPE EVOL CONTENANT LE PRODUIT OU LE = C = RAPPORT TERME A TERME DE DEUX OBJETS EVOLUTION DE SOUS-TYPE = C = COMPLEXE = C = = C = SYNTAXE : PROD = EVOLF * EVOLV (COUL) = C = = C = ON EXECUTE LE PRODUIT TERME A TERME DES ORDONNEES DES DEUX = C = OBJETS EVOLUTION DE SOUS-TYPE COMPLEXE EVOLF ET EVOLV. = C = LES ABSCISSES DE PROD, L'OBJET AINSI CREE, SONT CELLES = C = DE EVOLF ET EVOLV. = C = = C = = C = CREATION : 4/12/87 = C = F.ROULLIER = C = = C======================================================================= C -INC CCOPTIO -INC SMEVOLL -INC SMLREEL SEGMENT TEMPP IMPLIED DR(NPT),DI(NPT),DM(NPT),DP(NPT) IMPLIED AA(NPT),AB(NPT),BA(NPT),BB(NPT),DENOM(NPT) ENDSEGMENT C CHARACTER*72 TI CHARACTER*4 ITYP1,ITYP2 C C LES 2 OBJETS EVOLUTION DOIVENT ETRE DE SOUS-TYPE COMPLEXE C MEVOL1=IPEV1 MEVOL2=IPEV2 SEGACT MEVOL1,MEVOL2 ITYP1=MEVOL1.ITYEVO ITYP2=MEVOL1.ITYEVO IF (ITYP1.EQ.'COMP') GO TO 198 197 MOTERR(1:8)='EVOLUTIO' CALL ERREUR(302) SEGDES MEVOL1,MEVOL2 RETURN C C BOUCLE SUR LES COURBES C 198 NC1=MEVOL1.IEVOLL(/1) NC2=MEVOL2.IEVOLL(/1) IF(NC1.NE.NC2) THEN CALL ERREUR(111) RETURN ENDIF NC=NC1 C C CREATION DE L'OBJET PRODUIT DE TYPE EVOLUTION (COMPLEXE) C N=NC1 SEGINI MEVOLL IRET=MEVOLL TI(1:72)=TITREE IEVTEX=TI ITYEVO=MEVOL1.ITYEVO C DO 201 IC=1,NC,2 KEVOL1=MEVOL1.IEVOLL(IC) KEVOL2=MEVOL2.IEVOLL(IC) SEGACT KEVOL1,KEVOL2 C C TEST DES SOUS-TYPES C ITYP1=KEVOL1.NUMEVY ITYP2=KEVOL2.NUMEVY C MLREE1=KEVOL1.IPROGX MLREE2=KEVOL2.IPROGX C C TEST DES LONGUEURS DES 2 SOUS-OBJETS EVOLUTION C SEGACT MLREE1,MLREE2 L1=MLREE1.PROG(/1) L2=MLREE2.PROG(/1) IF(L1.EQ.L2) GO TO 10 CALL ERREUR(337) GOTO 400 10 CONTINUE C C LES ABSCISSES DOIVENT ETRE IDENTIQUES C CALL VERIPR(MLREE1.PROG,MLREE2.PROG,L1,IRETOU,1.D-2) IF(IRETOU.NE.0) GO TO 11 CALL ERREUR(394) GO TO 400 11 CONTINUE SEGDES MLREE1,MLREE2 C C DEFINITION DES PARAMETRES POUR IC C SEGINI KEVOLL IEVOLL(IC)=KEVOLL TYPX='LISTREEL' TYPY='LISTREEL' KEVTEX=TI C NOMEVX=KEVOL1.NOMEVX NOMEVY=KEVOL1.NOMEVY NUMEVX=ICOUL NUMEVY=KEVOL1.NUMEVY C C DEFINITION DE PROGX POUR IC C MLREE1=KEVOL1.IPROGX SEGACT MLREE1 JG=L1 SEGINI MLREEL IPROGX=MLREEL DO 20 I=1,L1 PROG(I)=MLREE1.PROG(I) 20 CONTINUE SEGDES KEVOLL,MLREEL,MLREE1 SEGDES KEVOL1 C C DEFINITION DES PARAMETRES POUR IC+1 C SEGINI KEVOLL TYPX='LISTREEL' TYPY='LISTREEL' IEVOLL(IC+1)=KEVOLL KEVOL1=MEVOL1.IEVOLL(IC+1) SEGACT KEVOL1 MLREE1=KEVOL1.IPROGX SEGACT MLREE1 KEVTEX=TI C NOMEVX=KEVOL1.NOMEVX NOMEVY=KEVOL1.NOMEVY NUMEVX=ICOUL NUMEVY=KEVOL1.NUMEVY C C DEFINITION DE PROGX POUR IC+1 C JG=L1 SEGINI MLREEL IPROGX=MLREEL DO 21 I=1,L1 PROG(I)=MLREE1.PROG(I) 21 CONTINUE SEGDES KEVOLL,MLREEL,KEVOL1,KEVOL2 C C NPT=L1 C C IF (ITYP1.EQ.'MODU') GO TO 200 C SEGINI TEMPP KEVOL1=MEVOL1.IEVOLL(IC) SEGACT KEVOL1 MLREE1=KEVOL1.IPROGY SEGACT MLREE1 DO 100 I=1,L1 AB(I)=MLREE1.PROG(I) 100 CONTINUE SEGDES KEVOL1,MLREE1 C KEVOL1=MEVOL1.IEVOLL(IC+1) SEGACT KEVOL1 MLREE1=KEVOL1.IPROGY SEGACT MLREE1 DO 120 I=1,L1 BB(I)=MLREE1.PROG(I) 120 CONTINUE SEGDES KEVOL1,MLREE1 C KEVOL1=MEVOL2.IEVOLL(IC) KEVOL2=MEVOL2.IEVOLL(IC+1) SEGACT KEVOL1,KEVOL2 MLREE1=KEVOL1.IPROGY MLREE2=KEVOL2.IPROGY SEGACT MLREE1,MLREE2 IF (ITYP2.EQ.'MODU') THEN DO 130 I=1,L1 DM(I)=MLREE1.PROG(I) DP(I)=MLREE2.PROG(I) 130 CONTINUE CALL CONVCP(DR,DI,DM,DP,L1,-1) ELSE DO 131 I=1,L1 DR(I)=MLREE1.PROG(I) DI(I)=MLREE2.PROG(I) 131 CONTINUE ENDIF DO 140 I=1,L1 AA(I)=AB(I)*DR(I) AB(I)=AB(I)*DI(I) BA(I)=BB(I)*DR(I) BB(I)=BB(I)*DI(I) 140 CONTINUE IF (INV.EQ.1) GO TO 142 DO 143 I=1,L1 A=MLREE1.PROG(I) B=MLREE2.PROG(I) DENOM(I)=A*A+B*B 143 CONTINUE 142 CONTINUE SEGDES KEVOL1,KEVOL2,MLREE1,MLREE2 C C KEVOLL=MEVOLL.IEVOLL(IC) SEGACT KEVOLL*MOD JG=L1 SEGINI MLREEL IPROGY=MLREEL C IF(INV.EQ.1) THEN DO 30 I=1,L1 PROG(I)=AA(I)-BB(I) 30 CONTINUE ELSE DO 31 I=1,L1 IF(DENOM(I).GT.1.D-20) THEN PROG(I)=(AA(I)+BB(I))/DENOM(I) ELSE WRITE(IOIMP,*)' VALEURS NULLES DANS L OBJET EVOLUTION', & 'DIVISEUR : RESULTAT MIS A 0' PROG(I)=0.D0 GOTO 31 ENDIF 31 CONTINUE ENDIF C SEGDES KEVOLL,MLREEL C KEVOLL=MEVOLL.IEVOLL(IC+1) SEGACT KEVOLL*MOD JG=L1 SEGINI MLREEL IPROGY=MLREEL C C IF(INV.EQ.1) THEN DO 32 I=1,L1 PROG(I)=AB(I)+BA(I) 32 CONTINUE ELSE DO 33 I=1,L1 IF(DENOM(I).GT.1.D-20) THEN PROG(I)=(BA(I)-AB(I))/DENOM(I) ELSE WRITE(IOIMP,*)' VALEURS NULLES DANS L OBJET EVOLUTION', & 'DIVISEUR : RESULTAT MIS A 0' PROG(I)=0.D0 GOTO 33 ENDIF 33 CONTINUE ENDIF C SEGSUP TEMPP SEGDES KEVOLL,KEVOL1,KEVOL2 C GO TO 201 200 CONTINUE SEGINI TEMPP KEVOL1=MEVOL1.IEVOLL(IC) KEVOL2=MEVOL1.IEVOLL(IC+1) SEGACT KEVOL1,KEVOL2 MLREE1=KEVOL1.IPROGY MLREE2=KEVOL2.IPROGY SEGACT MLREE1,MLREE2 DO 210 I=1,L1 AA(I)=MLREE1.PROG(I) BB(I)=MLREE2.PROG(I) 210 CONTINUE SEGDES KEVOL1,MLREE1 SEGDES KEVOL2,MLREE2 C KEVOL1=MEVOL2.IEVOLL(IC) KEVOL2=MEVOL2.IEVOLL(IC+1) SEGACT KEVOL1,KEVOL2 MLREE1=KEVOL1.IPROGY MLREE2=KEVOL2.IPROGY SEGACT MLREE1,MLREE2 IF (ITYP2.EQ.'PREE') THEN DO 230 I=1,L1 DR(I)=MLREE1.PROG(I) DI(I)=MLREE2.PROG(I) 230 CONTINUE CALL CONVCP(DR,DI,DM,DP,L1,1) ELSE DO 231 I=1,L1 DM(I)=MLREE1.PROG(I) DP(I)=MLREE2.PROG(I) 231 CONTINUE ENDIF IF (INV.EQ.1) THEN DO 240 I=1,L1 AA(I)=AA(I)*DM(I) BB(I)=BB(I)+DP(I) 240 CONTINUE ELSE DO 243 I=1,L1 IF(DM(I).GT.1.D-20) THEN AA(I)=AA(I)/DM(I) ELSE WRITE(IOIMP,*)' VALEURS NULLES DANS L OBJET EVOLUTION', & 'DIVISEUR : RESULTAT MIS A 0' AA(I)=0.D0 ENDIF BB(I)=BB(I)-DP(I) 243 CONTINUE ENDIF DO 244 I=1,L1 IF (BB(I).GT.180.D0) THEN BB(I)=BB(I)-360.D0 ELSE IF(BB(I).LT.-180.D0) THEN BB(I)=BB(I)+360.D0 ENDIF 244 CONTINUE SEGDES KEVOL1,KEVOL2,MLREE1,MLREE2 C KEVOLL=MEVOLL.IEVOLL(IC) SEGACT KEVOLL*MOD JG=L1 SEGINI MLREEL IPROGY=MLREEL C DO 330 I=1,L1 PROG(I)=AA(I) 330 CONTINUE SEGDES KEVOLL,MLREEL C KEVOLL=MEVOLL.IEVOLL(IC+1) SEGACT KEVOLL*MOD SEGINI MLREEL IPROGY=MLREEL C DO 332 I=1,L1 PROG(I)=BB(I) 332 CONTINUE SEGDES MLREEL C SEGSUP TEMPP SEGDES KEVOLL,KEVOL1,KEVOL2 C SEGDES MEVOLL,MEVOL1,MEVOL2 201 CONTINUE C 400 CONTINUE RETURN END