intlin
C INTLIN SOURCE BP208322 20/06/16 21:15:05 10627 IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) *--------------------------------------------------------------------* * * * INTERPOLATION LINEAIRE D'UNE VALEUR * * * * Parametres: * * * * e TEMPS Abscisse a interpoler * * e KTE LISTREEL des abscisses triees par ordre croissant * * e KFT LISTREEL des ordonnees * * e LON Longueur de la LISTREEL des abscisses * * e/s L1 indice de debut de recherche dans les abscisses * * e/s L2 = L1+1 (a priori toujours vrai) * * s FT0 Valeur interpolee * * s IRET IRET = 1, succes * * s IRET IRET = 0, echec * * * *--------------------------------------------------------------------* -INC SMLREEL FT0 = 0.D0 MLREE1 = KTE MLREE2 = KFT c * verif temporaire c if(L1.GE.LON) then c write(*,*) 'impossible d interpoler entre ',L1,' et ',LON c IRET = 0 c return c endif * temps en dehors de la liste ? * tentative de rattrapage (bp,2020) * bp: d'apres mesure sur 1 cas (a faire evoluer si besoin), * la tolerance de 1D-5 devrait assurer le test sur * l'erreur cumulee jusqu'a environ 1E7 pas de temps * (on suppose que le pas de temps ne varie pas trop) IRET = 1 c write(*,*) 't=',TEMPS,'~',T1,'on prend PROG(',L1,')=',FT0 ELSEIF (ABS(TEMPS-TL).LT.TOL) THEN IRET = 1 c write(*,*) 't=',TEMPS,'~',TL,'on prend PROG(',LON,')=',FT0 ELSE * temps en dehors de la liste c write(*,*) 't=',TEMPS,'out of [',T1,' - ',TL,'] !!!' IRET = 0 ENDIF RETURN ENDIF * recherche dans la liste DO 10 L = L2,LON L2 = L L1 = L2 10 CONTINUE * interpolation lineaire 20 CONTINUE IRET = 1 * END
© Cast3M 2003 - Tous droits réservés.
Mentions légales