Bonjour à tous, j'essaye de résoudre l'équation de la chaleur en dimension 1 sur un segment [a,b] par Fortran. J'ai réussi à faire un programme fonctionnel qui me donne à la fin un vecteur mais:
- J'obtiens à la fin encore le vecteur de condition initiale, pourquoi?
- Comment enregistrer à la fin mes valeurs de mon vecteur U? ( A la place je les copie colle du terminal puis je les trace dans un éditeur graphique )
- Comment utiliser un vecteur complexe en entrée? ( Par exemple, exp(ix) quelquechose ).

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
program  heatequation
implicit none
 
!Iteration variables
integer :: i
integer :: k
integer :: j
 
!Numerical Parameters
 
real, parameter :: xa=0.
real, parameter :: xb=15.
real, parameter :: dx =0.01
real, parameter :: dt=0.1
integer, parameter :: N=(xb-xa)/dx+1 
real, dimension(N,N) :: A
integer, parameter :: T=50
integer :: TT
real, dimension(N) :: U0 
real, dimension(N) :: U
real, dimension(N) :: V
real :: PI=3.1415926
 
!Initial condition 
do i=1,N
   U(i)=SIN((i-1)*PI*dx/xb)
end do
 
!Laplacian matrix
do j=1,N
do i=1,N
   A(i,j)=0
end do
end do
do k=1,N-1
   A(k,k)=-2
   A(k+1,k)=1
   A(k,k+1)=1
end do
A(N,N)=-2
 
!Solving PDE
TT=T/dt
do i=1,TT
   U=U+dt*matmul(A,U)
end do
 
print*,'U at time T is equal to',U
end program heatequation