inter5
C INTER5 SOURCE PASCAL 21/02/24 21:15:10 10898 $ MLDERS,IHORS,IRET) C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C INTERPOLATION LINEAIRE ; recherche par binary search C Source : Donald Knuth, The Art of Computer Programming C Volume 3, Sorting and searching, Third edition, 1997 C Addison-Wesley pp. 409-426 C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 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 ISENS : =0 KTE est croissante =1 KTE est décroissante C IHORS =0 renvoie une erreur si t est en-dehors des bornes C : =1 ne renvoie pas d'erreur si t est en-dehors des bornes C mais la valeur de la fonction pour t le plus proche C : =2 ne renvoie pas d'erreur si t est en-dehors des bornes C et on extrapole lineairement la valeur a partir des bords C IRET : code retour =1 si succès, 0 sinon C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC SMLREEL POINTEUR MLDERS.MLREEL -INC PPARAM -INC CCOPTIO -INC CCREEL * FT0=0.D0 MLREE1=KTE MLREE2=KFT * Cas de bord (bourrin) C WRITE(IOIMP,*) 'IHORS=',IHORS C WRITE(IOIMP,*) 'ISENS=',ISENS C WRITE(IOIMP,*) 'TINF=',TINF C WRITE(IOIMP,*) 'TSUP=',TSUP C---- TRAITEMENT CAS HORS INTERVALLE DE DEFINITION C C Indicateur IHORS : C IHORS = 0 : on doit etre dans l'intervalle de def., sinon erreur C IHORS = 1 : on renvoie la valeur aux bornes C IHORS = 2 : on extrapole lineairement en dehors des bornes C IF (TEMPS.LE.TINF) THEN IF (IHORS.EQ.0) THEN GOTO 50 ELSE IF (IHORS.EQ.1) THEN ELSEIF (IHORS.EQ.2) THEN T1 = TINF IF (ABS(DT).LE.(XPETIT+XZPREC*TM)) THEN RETURN ENDIF ELSE RETURN ENDIF GOTO 70 ELSEIF (TEMPS.GE.TSUP) THEN IF (IHORS.EQ.0) THEN GOTO 50 ELSE IF (IHORS.EQ.1) THEN ELSE IF (IHORS.EQ.2) THEN T2 = TSUP IF (ABS(DT).LE.(XPETIT+XZPREC*TM)) THEN RETURN ENDIF ELSE RETURN ENDIF GOTO 70 ENDIF C---- TRAITEMENT CAS DANS INTERVALLE DE DEFINITION C * Recherche de l'index IDXINF=1 IDXSUP=LON 1 CONTINUE C WRITE(IOIMP,*) 'IDXINF=',IDXINF C WRITE(IOIMP,*) 'IDXSUP=',IDXSUP IF (IDXSUP.LT.IDXINF) GOTO 3 IDXMIL=(IDXINF+IDXSUP)/2 C WRITE(IOIMP,*) 'IDXMIL=',IDXMIL C WRITE(IOIMP,*) 'TEMMIL=',TEMMIL IF (TEMPS.LT.TEMMIL) THEN IDXSUP=IDXMIL-1 GOTO 1 ELSEIF (TEMPS.GT.TEMMIL) THEN IDXINF=IDXMIL+1 GOTO 1 ELSE GOTO 70 ENDIF * Interpolation de la valeur : 3 CONTINUE XP1=(T2-TEMPS)/DT IF (ISPLIN.EQ.1) THEN $ *(DT**2)/6.D0 ELSE ENDIF * Sortie avec resultat 70 CONTINUE IRET=1 RETURN * Sortie avec erreur si IHORS=0 et hors intervalle def. donnees 50 CONTINUE IRET=0 RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales