subroutine INTERPOL_BARI(X,CHAMP,MAILLX,MAILLY,INTERPOL) !==========INTERPOL_BARI=============== !SUBROUTINE permettant l'interpolation lineaire en un point donne !afin de calculer la valeur d'un vecteur en ce meme point. !Entree : X, vecteur position, MAILL : maillage, CHAMP : les valeur du champ !dont on souhaite connaitre la valeur en X. !Sortie : INTERPOL: la valeur interpolee du champ a la position X !MARLAN, 2011 implicit none real(kind=8),dimension(:),intent(in) :: X, MAILLX, MAILLY real(kind=8),dimension(:,:),intent(in) :: CHAMP real(kind=8),intent(out)::INTERPOL real(kind=8),dimension(size(MAILLX)):: TEMPMAILLX real(kind=8),dimension(size(MAILLY)):: TEMPMAILLY real(kind=8) :: HI,HJ,INTERPOL1,INTERPOL2 integer,dimension(2,2):: POSXY TEMPMAILLX=MAILLX POSXY(1,1)=minloc(abs(X(1)-TEMPMAILLX),dim=1) if(minval(abs(X(1)-TEMPMAILLX))/=0.0) TEMPMAILLX(POSXY(1,1))=TEMPMAILLX(POSXY(1,1))+10.0 POSXY(2,1)=minloc(abs(X(1)-TEMPMAILLX),dim=1) TEMPMAILLY=MAILLY POSXY(1,2)=minloc(abs(X(2)-TEMPMAILLY),dim=1) if(minval(abs(X(2)-TEMPMAILLY))/=0.0) TEMPMAILLY(POSXY(1,2))=TEMPMAILLY(POSXY(1,2))+10.0 POSXY(2,2)=minloc(abs(X(2)-TEMPMAILLY),dim=1) if(minval(abs(X(1)-TEMPMAILLX))/=0.0) HI=-(MAILLX(POSXY(1,1))-X(1))/(MAILLX(POSXY(2,1))-MAILLX(POSXY(1,1))) if(minval(abs(X(2)-TEMPMAILLY))/=0.0) HJ=-(MAILLY(POSXY(1,2))-X(2))/(MAILLY(POSXY(2,2))-MAILLY(POSXY(1,2))) INTERPOL1=(1-HI)*CHAMP(POSXY(1,1),POSXY(1,2))+HI*CHAMP(POSXY(2,1),POSXY(1,2)) INTERPOL2=(1-HI)*CHAMP(POSXY(1,1),POSXY(2,2))+HI*CHAMP(POSXY(2,1),POSXY(2,2)) INTERPOL=(1-HJ)*INTERPOL1+HJ*INTERPOL2 end subroutine INTERPOL_BARI