1 : C FUS SOURCE CHAT 05/01/13 00:12:27 5004 2 : 3 : SUBROUTINE FUS(TRAC1,TRAC2,FUS1,FUS2,N1,N2,NFUS) 4 : C 5 : C------------------------------------------------------------------------- 6 : C Objet:fusion de deux tableaux de reels de la forme (X1,F(X1),X2,F(X2),...) 7 : C et (Y1,G(Y1),Y2,G(Y2),....);ils contiennent en fait les points de 8 : C 2 courbes de traction definies aux 2 temperatures TINF et TSUP 9 : C encadrant la temperature T,pour laquelle on veut determiner la 10 : C courbe de traction. 11 : C--------------------------------------------------------------------------- 12 : C 13 : C--------------------------------------------------------------------------- 14 : C Entrees: 15 : C ------- 16 : C N1 = nbre de points de la courbe de traction a la temperature TINF. 17 : C TRAC1(N1) = tableau de dimension 2N1 de la forme (X1,F(X1),X2,F(X2),..) 18 : C contenant les points de la courbe de traction a la temperature 19 : C TINF. 20 : C N2 = nbre de points de la courbe de traction a la temperature TSUP. 21 : C TRAC2(N2) = tableau de dimension 2N2 de la forme (Y1,G(Y1),Y2,G(Y2),..) 22 : C contenant les points de la courbe de traction a la temperature 23 : C TSUP. 24 : C--------------------------------------------------------------------------- 25 : C 26 : C--------------------------------------------------------------------------- 27 : C Sorties: 28 : C ------- 29 : C NFUS 30 : C FUS1 = tableau contenant les abscisses completes dans l'ordre croissant 31 : C (i.e. X1,X2,... et Y1,Y2,...) et pour chacune d'elles la valeur 32 : C de la fonction F. 33 : C FUS2 = tableau contenant les abscisses completes dans l'ordre croissant 34 : C (i.e. X1,X2,... et Y1,Y2,...) et pour chacune d'elles la valeur 35 : C de la fonction G. 36 : C--------------------------------------------------------------------------- 37 : C 38 : IMPLICIT INTEGER(I-N) 39 : IMPLICIT REAL*8 (A-H,O-Z) 40 : DIMENSION TRAC1(*),TRAC2(*),FUS1(*),FUS2(*) 41 : C 42 : C---------------------------------------------------------------------- 43 : C on commence par determiner la dimension des tableaux finaux FUS1 et FUS2 44 : C------------------------------------------------------------------------ 45 : NFUS=N1+N2 46 : DO 1 I1=1,2*N1-1,2 47 : DO 2 I2=1,2*N2-1,2 48 : IF (TRAC1(I1).EQ.TRAC2(I2)) THEN 49 : NFUS=NFUS-1 50 : ENDIF 51 : 2 CONTINUE 52 : 1 CONTINUE 53 : C 54 : I1=1 55 : I2=1 56 : I=1 57 : 100 CONTINUE 58 : C----------------------------------------------------------------- 59 : C tant que l'on ne depasse pas la limite des tableaux ... 60 : C----------------------------------------------------------------- 61 : DO WHILE ((I1.LE.(2*N1-1)).AND.(I2.LE.(2*N2-1))) 62 : C 63 : C------------------------------------------------------------------------ 64 : C si l'element du tableau1 ,sur lequel on pointe, est < a l'element du 65 : C tableau2 sur lequel on pointe,on remplit FUS1 avec le plus petit des 66 : C elements sur lesquels on pointe suivi de la valeur de la fonction F 67 : C en ce point;on procede de meme avec FUS2 en le remplissant avec le plus 68 : C petit element suivi de la valeur de la fonction G en ce point; 69 : C le sous-programme DERTRA est ainsi utilise pour calculer la valeur de la 70 : C fonction F ou G aux points ou elles ne sont pas connues 71 : C------------------------------------------------------------------------ 72 : IF (TRAC1(I1).LT.TRAC2(I2)) THEN 73 : FUS1(I)=TRAC1(I1) 74 : FUS1(I+1)=TRAC1(I1+1) 75 : FUS2(I)=TRAC1(I1) 76 : IF (TRAC1(I1).LT.TRAC2(1)) THEN 77 : X=TRAC2(1) 77 : CALL DERTRA(2*N2,TRAC2,X,Y,YPRIM,XINF,XSUP) 78 : WRITE(*,*) 'T1DERTRA(2*N2,TRAC2,X,Y,YPRIM,XINF,XSUP) 82 : FUS2(I+1)=Y 83 : ENDIF 84 : I=I+2 85 : I1=I1+2 86 : 87 : 88 : ELSEIF (TRAC1(I1).GT.TRAC2(I2)) THEN 89 : 90 : FUS1(I)=TRAC2(I2) 91 : FUS2(I)=TRAC2(I2) 92 : FUS2(I+1)=TRAC2(I2+1) 93 : IF (TRAC2(I2).LT.TRAC1(1)) THEN 94 : X=TRAC1(1) 94 : CALL DERTRA(2*N1,TRAC1,X,Y,YPRIM,XINF,XSUP) 95 : WRITE(*,*) 'T1>T2',I,X,Y,YPRIM 96 : FUS1(I+1)=YPRIM*(TRAC2(I2)-X)+TRAC1(I1+1) 97 : ELSE 98 : X=TRAC2(I2) 98 : CALL DERTRA(2*N1,TRAC1,X,Y,YPRIM,XINF,XSUP) 99 : FUS1(I+1)=Y 100 : ENDIF 101 : I=I+2 102 : I2=I2+2 103 : 104 : ELSEIF (TRAC1(I1).EQ.TRAC2(I2)) THEN 105 : FUS1(I)=TRAC1(I1) 106 : FUS1(I+1)=TRAC1(I1+1) 107 : FUS2(I)=TRAC2(I2) 108 : FUS2(I+1)=TRAC2(I2+1) 109 : 110 : 111 : I1=I1+2 112 : I2=I2+2 113 : I=I+2 114 : 115 : ENDIF 116 : ENDDO 117 : C 118 : IF (I1.GT.(2*N1-1)) THEN 119 : DO 10 K=I2,2*N2,2 120 : II1=(I-1) 121 : FUS2(I)=TRAC2(K) 122 : FUS2(I+1)=TRAC2(K+1) 123 : FUS1(I)=TRAC2(K) 124 : X=FUS1(I-2) 124 : CALL DERTRA(II1,FUS1,X,Y,YPRIM,XINF,XSUP) 125 : FUS1(I+1)=YPRIM*(FUS2(I)-X)+FUS1(I-1) 126 : I=I+2 127 : 128 : 10 CONTINUE 129 : 130 : ELSEIF (I2.GT.(2*N2)) THEN 131 : DO 20 K=I1,2*N1,2 132 : II1=(I-1) 133 : FUS1(I)=TRAC1(K) 134 : FUS1(I+1)=TRAC1(K+1) 135 : FUS2(I)=TRAC1(K) 136 : X=FUS2(I-2) 136 : CALL DERTRA(II1,FUS2,X,Y,YPRIM,XINF,XSUP) 137 : FUS2(I+1)=YPRIM*(FUS1(I)-X)+FUS2(I-1) 138 : I=I+2 139 : 140 : 20 CONTINUE 141 : 142 : 143 : ENDIF 144 : RETURN 145 : END 146 : ************************************************************************ 147 :
© Cast3M 2003 - All rights reserved.
Disclaimer