module inout
  implicit none
  integer,dimension(:),allocatable,private  ::sonde_position
  integer,private                           ::Nsondes
contains
  
  !---------------------------------------------------------------!
  !                                                               !
  !             Initialisation de l'ecriture                      !
  !                                                               !
  !---------------------------------------------------------------!
    
  subroutine Init_ecriture(N)
    implicit none
    integer, intent(in)          ::N             !nombre de points de 
                                                 !discrétisation
    !variables locales
    real                         ::h,pos
    integer                      ::i
    character(len=15)            ::Name,num
    
    
    h=1./(N+1.)
    
    !Ouverture du fichier pos_sondes.inp
    open(unit=10,file='pos_sondes.inp',status='old')
    
    !lecture du nombre de sondes
    read(10,*)Nsondes
    
    allocate(sonde_position(Nsondes))
    
    do i=1,Nsondes
       read(10,*)pos
       if ((pos.lt.0.).or.(pos.gt.1.)) then
          print*,"probleme dans Init_ecriture"
          print*,"la sonde suivante n'est pas dans le domaine [0,1]"
          print*,'i=',i
          print*,'position=',pos
          stop
       endif
       sonde_position(i)=floor(pos/h)
       write(num,'(I8)')i
       open(unit=15,file=trim(adjustl('Sonde_'//trim(adjustl(num))//'.dat')),&
            &status="unknown")
       write(15,*)"#Sonde numero",i
       write(15,*)"#Position",pos
       close(15)
    enddo
    
    close(10)
    
  end subroutine Init_ecriture
  
  !---------------------------------------------------------------!
  !                                                               !
  !                 Ecriture d'un pas de temps                    !
  !                                                               !
  !---------------------------------------------------------------!
  
  subroutine ecriture(u,n,t,nit)
    implicit none
    !variables d'entree
    real,dimension(0:n+1),intent(in)   ::u         !solution
    integer,intent(in)                 ::n,nit     !dimension,nb iteration
    real,intent(in)                    ::t         !temps
    !variables locales
    character(len=30)                  ::num
    integer                            ::i
    real                               ::h
    
    !ecriture de la solution à un temps donné
    write(num,*)nit
    open(unit=15,file="solution_"//trim(adjustl(num))//".dat",status='unknown')
    
    write(15,*)"#Temps=",t
    
    h=1./(n+1)
    
    do i=0,(n+1)
       write(15,'(2(f16.8,4x))')i*h,u(i)
    enddo
    
    close(15)
    
    !Ecriture des sondes
    do i=1,Nsondes
       write(num,'(I8)')i
       open(unit=15,file=trim(adjustl('Sonde_'//trim(adjustl(num))//'.dat')),&
            &status='old',access='append')
       write(15,'(2(f16.8,4x))')t,u(sonde_position(i))
       close(15)
    enddo
  end subroutine ecriture
  
end module inout
