IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Fortran Discussion :

Programme equation de la chaleur et enregistrement


Sujet :

Fortran

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Octobre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2017
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Programme equation de la chaleur et enregistrement
    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

  2. #2
    Membre régulier
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Août 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 57
    Points : 91
    Points
    91
    Par défaut
    Bonjour,

    je vais commencer par répondre aux questions , et ferai ensuite quelques remarques:

    * J'ai lancé le code, on n'obtient pas le vecteur initial après 50 unités de temps. Les valeurs ont changé. Ceci dit, quelles sont les CL ?
    Parce que là, la première & la dernière ligne de A me paraissent suspectes

    Par ailleurs, il manque une division par dx**2 du dt dans la formule de mise à jour de U.

    * Il faut les écrire dans un fichier. Par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    OPEN(10,FILE="coincoin.res")
    DO i=1,N
      WRITE(*,*) U(i)
    ENDDO
    CLOSE(10)
    * Le fortran reconnaît le type COMPLEX

    Quelques remarques:

    * je préfère définir N d'abord & en déduire dx. Pour dt, je préfère une boucle du type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     DO WHILE t<=tfinal
       ...
      t=t+dt
    ENDDO
    * Quand je fais de la résolution d'EDP, je mets mes réels en double précision (ça dépend du compilateur, mais souvent on déclare REAL(8) au lieu de REAL )

    * A peut être initialisée à 0 en écrivant simplement A=0.0d0

    * Attention tout de même avec le schéma explicite, le dt/dx**2 me paraît très grand

    Voila, hope this helps

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Octobre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2017
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Super, merci beaucoup! En effet, j'avais oublié le dx. Merci!
    Matlab est-il compatible avec le fichier en sortie? (de sorte que je puisse le tracer graphiquement).

  4. #4
    Membre régulier
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Août 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 57
    Points : 91
    Points
    91
    Par défaut
    A priori oui, le programme de calcul écrira par défaut dans un fichier texte, qu'un load Matlab devrait pouvoir lire. Il y a peut-être la question des notations double précision du Fortran (i.e. 0.3D2 ), je ne me souviens plus si Matlab les digère. Mais de façon générale, j'utilisais souvent Matlab pour post-traiter mes résultats de code Fortran. Et je ne dois pas être le seul

Discussions similaires

  1. programme d'equation de la chaleur
    Par najoua01 dans le forum Débuter
    Réponses: 9
    Dernier message: 30/01/2011, 12h10
  2. programmer equation différentiel sous matlab
    Par alachhab dans le forum MATLAB
    Réponses: 3
    Dernier message: 23/05/2010, 10h01
  3. Equation de la chaleur
    Par kawtar2 dans le forum Fortran
    Réponses: 9
    Dernier message: 10/03/2009, 19h41
  4. equation de la chaleur
    Par mirinda dans le forum Mathématiques
    Réponses: 5
    Dernier message: 25/06/2008, 12h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo