C INTER2 SOURCE MAUGIS 07/03/19 21:15:01 5690 SUBROUTINE INTER2(TEMPS,KTE,KFT,LON,FT0,IRET) C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCc C C INTERPOLATION LINEAIRE C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCc C C Rem : C donne la première valeur si TEMPS=KTE(1) même si KTE(2)=KTE(1) C donne la dernière valeur si TEMPS=KTE(LON) même si KTE(LON-1)=KTE(LON) C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCc C C TEMPS : valeur où interpoler la fonction C KTE : abscisses de la fonction à interpoler C KFT : ordonnées de la fonction à interpoler C LON : longueur de ces deux précédentes listes C FT0 : valeur interpolée de la fonction à l'abscisse TEMPS C IRET : code retour =1 si succès, 0 sinon C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCc C C HISTORIQUE : C C 14/9/90 PP C tenant compte du fait que l'on compare des reels.... C c 4/9/91 C tj valable apres release 91 C C 22/08/06 P. Maugis C . remplacement de 1.D-5*DT par XZPREC C . accepte les cas d'abscisses non strictement croissantes C . accepte des valeurs en dehors de l'intervalle de définition C à XZPREC près ; C donne alors la première (ou la dernière) valeur dans la liste. C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCc IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC SMLREEL -INC CCOPTIO -INC CCREEL FT0=0 MLREE1=KTE MLREE2=KFT C PEG T1=MLREE1.PROG(1) C PEG L1=1 C PEG IF(TEMPS.LT.T1) GOTO 50 T2=MLREE1.PROG(1) L2=1 DT=MLREE1.PROG(2)-T2 * test si valeur inférieure ou égale à la première de la liste *PM IF (TEMPS.LT.T2) THEN IF(TEMPS.LT.(T2-XZPREC)) GOTO 50 IF (TEMPS.LE.T2) THEN FT0=MLREE2.PROG(L2) IRET=1 RETURN ENDIF DO L=2,LON T1=T2 L1=L2 T2=MLREE1.PROG(L) L2=L * la liste est bien croissante ? IF(T1.GT.T2) GOTO 55 * a-t-on encadré l'abscisse fournie ? noter la comparaison stricte IF(TEMPS.LT.T2) GOTO 60 C PEG T1=T2 C PEG L1=L2 ENDDO * La valeur est supérieure ou égale à la dernière de la liste IF(TEMPS.GT.(T2+XZPREC)) GOTO 50 *PM On donne la dernière valeur de la liste FT0=MLREE2.PROG(L2) IRET=1 RETURN * On interpole linéairement la fonction 60 CONTINUE DT=(TEMPS-T1)/(T2-T1) FT1=MLREE2.PROG(L1) FT2=MLREE2.PROG(L2) FT0=(FT2-FT1)*DT+FT1 70 IRET=1 RETURN * "Valeur en dehors de la table" 50 CONTINUE CALL ERREUR(210) IRET=0 RETURN C Temps non croissants dans la liste C "La suite de réels doit être croissante" 55 CALL ERREUR(249) IRET=0 RETURN END