1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| subroutine sbilin(table,x,y,step,z)
Implicit none
c Fonction d'interpolation bilinéaire
c table : nom du fichier
c X : première variable
c Y : seconde variable
c step : permet de ne sauvegarder qu'une seule fois la table
c Z : variable de sortie
double precision :: x,y,z,num
real,save :: xmin,xmax,ymin,ymax
integer,save :: xn,yn
integer :: i,i1,i2,j1,j2,ierr,step
real,save,allocatable,dimension(:,:,:) :: m
character(len=2000) :: string
character*(*) :: table
if (step==0) then
c Cette étape ne sera effectuée qu'une seule fois, elle permet de sauvegarder le fichier de données sous forme d'une matrice
c Comptage du nombre de colonne
open(unit=11,file=table)
read(11,fmt="(a)",iostat=ierr) string
yn=1
do i = 2, len_trim(string)
if ( (string(i:i)==' ') .and. (string(i-1:i-1) /= ' ') ) then
yn=yn+1
end if
end do
yn=yn-1
c Comptage du nombre de ligne
xn=-1
do while (ierr==0)
read(11,*,iostat=ierr)
xn=xn+1
end do
close(11)
c Creation de la matrice
allocate(m(0:xn,0:yn,1:10000))
open(unit=11,file=table)
c Lecture du fichier et enregistrement dans une matrice
do i=0,xn
read (11,*) m(i,:)
end do
close(11)
c Définition de xmin,xmax,ymin, ymax,xmin
xmin=m(1,0)
xmax=m(xn,0)
ymin=m(0,1)
ymax=m(0,yn)
step=1
end if |
Partager