Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 06-05-2013 09:29:51
- math@
- Membre
- Inscription : 28-11-2011
- Messages : 13
[Fortran] Demande de l'aide en fortran
Bonjour tout le monde,
voilà j'ai un projet à faire c la résolution d'un système linéaire de par la méthode du gradient conjugué j'ai fait tout le programme (presque) mais j'ai un problème avec la solution finale elle explose ça fait des jours que je travaille sur ce projet mais je comprends pas d'où vient le problème si quelqu'un peut m'aider je serai vraiment reconnaissante.
Merci d'avance.
PS: j'ai pas mis mon code car il est long je vois pas comment insérer une pièce jointe!
Hors ligne
#2 06-05-2013 11:33:48
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 385
Re : [Fortran] Demande de l'aide en fortran
Bonjour,
Il va te falloir espérer que quelqu'un connaissant le fortran passe...
Mais dans quel délai ?...
Sinon, je ne saurais trop te conseiller de t'adresser à un forum spécialisé dans le fortran :
http://www.developpez.net/forums/f157/a … s/fortran/
@+
Hors ligne
#3 06-05-2013 12:52:09
- math@
- Membre
- Inscription : 28-11-2011
- Messages : 13
Re : [Fortran] Demande de l'aide en fortran
Salut yoshi
j'ai essayé déjà dans ce forum mais ça n'a pas marché il me faut un connaisseur de fortran et des méthodes numériques en même temps mais en tout les cas merci je vais voir ailleurs
Hors ligne
#4 06-05-2013 16:24:18
- Denis
- Invité
Re : [Fortran] Demande de l'aide en fortran
Bonjour,
J'ai quelques questions qui peuvent vous aider:
1) que veut dire exploser, out of memory ? stack overflow?, ne répond pas dans le temps espéré?, etc...
2) avez-vous testé votre programme sur des systèmes linéaires petits (type 1x1)n avec ou sans solution etc...?
3) avez vous analysé la complexité de votre programme ?
Cordialement.
Denis
#6 13-05-2013 10:16:57
- math@
- Membre
- Inscription : 28-11-2011
- Messages : 13
Re : [Fortran] Demande de l'aide en fortran
Bonjour tout le monde,
Je suis vraiment désolée de ne pas pouvoir répondre plus tôt à vos message, ma matrice est un peu "spéciale" je peux pas prendre une taille petite le problème qui n’embête c'est la condition initiale qui est une gaussienne normalement je dois avoir une gaussienne sur un intervalle [-5,5] centré en 0 mais je trouve pas ça et même pour les valeurs des abscisse je trouve x= 50, 100 ...
Volà la partie du code de la solution initiale j'espère avoir des réponse merci d'avance
program gaussienne
implicit none
integer, parameter :: n=100
integer :: i
real*8, dimension(:), allocatable :: U
real*8:: pi,sigma,x1,x2,l,dx,abcs
allocate(u(2*n+2))
x1=-5.D0
x2=5.D0
l=x2-x1
dx=l/(2*n+1)
pi = 4.D0*datan(1.D0)
sigma = .15D0
!print*,pi
do i = 1,2*n+2
abcs = i * dx - l/2.D0
!U(i) = (1.D0/sqrt(2.D0*pi))*exp(-.5D0*abcs**2)
U(i) = 1.D0/sqrt(2.D0*pi)/sigma*exp((-.5D0*abcs**2)/sigma**2)
end do
print*,u
open(UNIT = 10, FILE = 'solution_ini.dat')
do i = 1,2*n+2
write(10,*) U(i)
end do
close(10)
end program gaussienne
Hors ligne
#7 13-05-2013 13:02:38
- MathRack
- Membre
- Inscription : 02-04-2012
- Messages : 78
Re : [Fortran] Demande de l'aide en fortran
Bonjour,
Si tu nous communique qu'une partie de ton code, on ne pourra t'aider qu'en partie...
... normalement je dois avoir une gaussienne sur un intervalle [-5,5] centré en 0 mais je trouve pas ça et même pour les valeurs des abscisse je trouve x= 50, 100 ...
Je ne vois pas dans quelle partie de ton programme tu affiches la variable abscisse (abcs).
- une gaussienne, c'est une fonction dont le support n'est pas borné. Donc si tu génères des valeurs aléatoires qui suivent une loi gaussienne, tu en auras en dehors de l'intervalle [-5,5]. Une gaussienne est définie par sa moyenne (0 dans ton cas) et son écart-type (sigma=0.15 dans ton cas???).
- si tu veux juste générer l'enveloppe de la gaussienne sur l'intervalle [-5,5], tu dois modifier la ligne 18 :
abcs = (i-1) * dx - l/2.D0
La variable abcs va alors parcourir l'intervalle [-5,5] (bornes comprises).
- Je te conseille d'écrire proprement la fonction gaussienne juste pour être certain qu'il n'y ait pas de surprises :
U(i) = exp( -0.5D0 * (abcs**2) / (sigma**2) ) / ( sqrt(2.D0*pi) * sigma )
- Et pour vérifier / tracer l'enveloppe de ta gaussienne, je te conseille :
do i = 1,2*n+2
write(10,*) (i-1) * dx - l/2.D0, U(i)
end do
Ton fichier va contenir des lignes de la forme " x(i), U(x(i))". Très facile à tracer avec xmgrace par exemple :
"xmgrace -nxy solution_ini.dat "
Cordialement,
Mathrack
Hors ligne
#8 14-05-2013 04:03:09
- denis7cordas
- Membre
- Inscription : 06-05-2013
- Messages : 1
Re : [Fortran] Demande de l'aide en fortran
Bonjour,
Suite à la réponse de Mathrack, sans être un expert en Fortran, je donnerai les indications suivantes, valables quelque soit le langage de programmation.
1) D'une manière générale dans un programme de "calcul numérique", je pense par expérience qu' il vaut mieux pré calculer tout ce qu'on peut pré calculer. Par exemple les constantes :
INTEGER N
DOUBLE PRECISION PI,TWOPI,RTWOPI,SIGMA, DOUBLESIGMACARRE, DX
PARAMETER(PI=3.141592653589793D0,TWOPI=2D0*PI,RTWOPI=SQRT(TWOPI),SIGMA=.15D0, DOUBLESIGMACARRE=2D0*SIGMA*SIGMA, N=100, DX=1D0/(2D0*N+1)
2) Il vaut mieux utiliser les expressions algébriques simples et quand on peut éviter les puissances. Simplifier les expressions et éviter les divisions en virgule flottante à répétition c'est moins coûteux et plus précis suivant les machines:
abcs = (i-1) * DX - l/2.D0
U(i) = 1/(exp( (abcs*abcs) /DOUBLESIGMACARRE ) * (RTWOPI * SIGMA ))
Je ne garantis pas que ma syntaxe soit la bonne mais en gros l'idée c'est de laisser le moins possible de travail à l'optimiseur.
3) Si l'édition du graphe proposé par Mathrack ne fonctionne pas, je testerai avec quelques valeurs de N telle que 1, 5, 10.
Cordialement
Denis
Hors ligne
#10 15-05-2013 09:55:29
- math@
- Membre
- Inscription : 28-11-2011
- Messages : 13
Re : [Fortran] Demande de l'aide en fortran
Bonjour,
Voilà le code que j'ai implémenté. je travaille sur les équation de green naghdi, le but c'est résoudre un système de type tAAX=tACY ou tA est la transposée de A et C est une matrice aussi
l'erreur c dans le calcul de la solution finale et je comprends pas d'où vient le problème
http://pastebin.com/5kkyec1t
http://pastebin.com/YhbynDPi
http://pastebin.com/WyAmsexR
http://pastebin.com/7MdG9w6p
http://pastebin.com/LnZeLRLG
http://pastebin.com/9iidjXCi
http://pastebin.com/1twEPtSt
le système que je veux résoudre
[tex]
$\left\{\begin{array}{ll}
\partial_{t}\zeta + h\partial_{x}u = 0\\\\
\left( I-\dfrac{\alpha}{3}h^{2}\partial_{xx}\right) \left( \partial_{t}u+\left( 1-\dfrac{1}{\alpha}\right) g\partial_{x}\zeta\right) +\dfrac{g}{\alpha}\partial_{x}\zeta = 0\\
\end{array}\right.$
[/tex]
le schéma numérique
[tex]
$\left\{\begin{array}{ll}
\zeta_{i}^{n+1} = \zeta_{i}^{n} - h\dfrac{\delta t}{4\delta x}(u_{i+1}^{n+1}-u_{i-1}^{n+1} + u_{i+1}^{n}-u_{i-1}^{n})\\\\
\dfrac{\alpha}{12}\left(1-\dfrac{1}{\alpha}\right)g \zeta^{n+1}_{i-2}-\left(\left(1-\dfrac{1}{\alpha}\right)g\dfrac{\delta x^2}{4h^2}+\dfrac{\alpha}{6}\left(1-\dfrac{1}{\alpha}\right)g+\dfrac{g\delta x^2}{4\alpha h^2}\right)\zeta^{n+1}_{i-1}+\\\\ \left(\left(1-\dfrac{1}{\alpha}\right)g\dfrac{\delta x^2}{4h^2}+\dfrac{\alpha}{6}\left(1-\dfrac{1}{\alpha}\right)g+\dfrac{g\delta x^2}{4\alpha h^2}\right)\zeta^{n+1}_{i+1}-\dfrac{\alpha}
{12}\left(1-\dfrac{1}{\alpha}\right)g \zeta^{n+1}_{i+2}\\\\-\dfrac{\alpha\delta x}{3\delta t}U^{n+1}_{i-1}+\left(\dfrac{\delta x^3}{\delta t h^2}+\dfrac{2\alpha\delta x}{3\delta t}\right)U^{n+1}_{i}-\dfrac{\alpha\delta x}{3\delta t}U^{n+1}_{i+1} =
-\dfrac{\alpha}{12}\left(1-\dfrac{1}{\alpha}\right)g \zeta^{n}_{i-2}+\\\\
\left(\left(1-\dfrac{1}{\alpha}\right)g\dfrac{\delta x^2}{4h^2}+\dfrac{\alpha}{6}\left(1-\dfrac{1}{\alpha}\right)g+\dfrac{g\delta x^2}{4\alpha h^2}\right)\zeta^{n}_{i-1}-
\left(\left(1-\dfrac{1}{\alpha}\right)g\dfrac{\delta x^2}{4h^2}+\dfrac{\alpha}{6}\left(1-\dfrac{1}{\alpha}\right)g+\dfrac{g\delta x^2}{4\alpha h^2}\right)\zeta^{n}_{i+1}\\\\-\dfrac{\alpha}{12}\left(1-\dfrac{1}{\alpha}\right)g \zeta^{n}_{i+2}-\dfrac{\alpha\delta x}{3\delta t}U^{n}_{i-1}+\left(\dfrac{\delta x^3}{\delta t h^2}+\dfrac{2\alpha\delta x}{3\delta t}\right)U^{n}_{i}-\dfrac{\alpha\delta x}{3\delta t}U^{n}_{i+1}
\end{array}\right.$
[/tex]
j'ai multiplié la 2ème équation par dx^3/h_0^2
les coeffs des matrices
[tex]
$a_1 = \dfrac{\alpha\delta t}{12}$\\\\
$a_2 = \left(1-\dfrac{1}{\alpha}\right)g $\\\\
$a = a_1*a_2$\\\\
$b_1 = \dfrac{g\delta t\delta x^2}{4h_0^2}$\\\\
$b_2 = \dfrac{\alpha\delta t}{6}$\\\\
$b = b_1+(b_2*a_2)$\\\\
$c = \dfrac{\alpha\delta x}{3}$\\\\
$d_1 = \dfrac{\delta x^3}{h_0^2}$\\\\
$d_2 = \dfrac{2\alpha\delta x}{3}$\\\\
$e = \dfrac{\delta t h_0}{4\delta x}$\\\\
[/tex]
la matrice A
[tex]
$ \left(\begin{array}{c|c}
\begin{matrix}
1 &0 &0 &0 &0 &\cdots &0\\
0 &1 &0 &0 &0 &\cdots &0 \\
0 &0 &1 &0 &0 &\cdots &0\\
\vdots &\ddots &\ddots &\vdots\\
\vdots &\ddots &\ddots &\vdots\\
0 &0 &0 &\cdots &0 &1 &0 \\
0 &0 &0 &0 &\cdots &0 &1
\end{matrix}
&
\begin{matrix}
0 &e &0 &0 &\cdots &0 &-e\\
-e &0 &e &0 &0 &\cdots &0\\
0 &-e &0 &e &0 &0 &\cdots\\
\vdots &\ddots &\ddots &\vdots\\
\vdots &\ddots &\ddots &\vdots\\
0 &0 &\cdots &0 &-e &0 &e\\
e &0 &0 &\cdots &0 &-e &0
\end{matrix}\\
\hline
\begin{matrix}
0 &b &-a &0 &\cdots &a &-b\\
-b &0 &b &-a &0 &\cdots &a\\
a &-b &0 &b &-a &0 &\cdots\\
\vdots &\ddots &\ddots &\vdots\\
\vdots &\ddots &\ddots &\vdots\\
-a &0 &\cdots &a &-b &0 &b\\
b &-a &0 &\cdots &a &-b &0
\end{matrix}
&
\begin{matrix}
d &-c &0 &0 &0 &\cdots &-c\\
-c &d &-c &0 &0 &0 &\cdots\\
0 &-c &d &-c &0 &\cdots &0\\
\vdots &\ddots &\ddots &\vdots\\
\vdots &\ddots &\ddots &\vdots\\
0 &0 &0 &\cdots &-c &d &-c \\
-c &0 &0 &0 &\cdots &-c &d
\end{matrix}
\end{array}\right)$
[/tex]
la transposée de A
[tex]
$ \left(\begin{array}{c|c}
\begin{matrix}
1 &0 &0 &0 &0 &\cdots &0\\
0 &1 &0 &0 &0 &\cdots &0 \\
0 &0 &1 &0 &0 &\cdots &0\\
\vdots &\ddots &\ddots &\vdots\\
\vdots &\ddots &\ddots &\vdots\\
0 &0 &0 &\cdots &0 &1 &0 \\
0 &0 &0 &0 &\cdots &0 &1
\end{matrix}
&
\begin{matrix}
0 &e &0 &0 &\cdots &0 &-e\\
-e &0 &e &0 &0 &\cdots &0\\
0 &-e &0 &e &0 &0 &\cdots\\
\vdots &\ddots &\ddots &\vdots\\
\vdots &\ddots &\ddots &\vdots\\
0 &0 &\cdots &0 &-e &0 &e\\
e &0 &0 &\cdots &0 &-e &0
\end{matrix}\\
\hline
\begin{matrix}
0 &b &-a &0 &\cdots &a &-b\\
-b &0 &b &-a &0 &\cdots &a\\
a &-b &0 &b &-a &0 &\cdots\\
\vdots &\ddots &\ddots &\vdots\\
\vdots &\ddots &\ddots &\vdots\\
-a &0 &\cdots &a &-b &0 &b\\
b &-a &0 &\cdots &a &-b &0
\end{matrix}
&
\begin{matrix}
d &-c &0 &0 &0 &\cdots &-c\\
-c &d &-c &0 &0 &0 &\cdots\\
0 &-c &d &-c &0 &\cdots &0\\
\vdots &\ddots &\ddots &\vdots\\
\vdots &\ddots &\ddots &\vdots\\
0 &0 &0 &\cdots &-c &d &-c \\
-c &0 &0 &0 &\cdots &-c &d
\end{matrix}
\end{array}\right)$
[/tex]
la matrice C
[tex]
$ \left(\begin{array}{c|c}
\begin{matrix}
1 &0 &0 &0 &0 &\cdots &0\\
0 &1&0 &0 &0 &\cdots &0 \\
0 &0 &1 &0 &0 &\cdots &0\\
\vdots &\ddots &\ddots &\vdots\\
\vdots &\ddots &\ddots &\vdots\\
0 &0 &0 &\cdots &0 &1 &0 \\
0 &0 &0 &0 &\cdots &0 &1
\end{matrix}
&
\begin{matrix}
0 &-e &0 &0 &\cdots &0 &e\\
e &0 &-e &0 &0 &\cdots &0\\
0 &e &0 &-e &0 &0 &\cdots\\
\vdots &\ddots &\ddots &\vdots\\
\vdots &\ddots &\ddots &\vdots\\
0 &0 &\cdots &0 &e &0 &-e\\
-e &0 &0 &\cdots &0 &e &0
\end{matrix}\\
\hline
\begin{matrix}
0 &-b &a &0 &\cdots &-a &b\\
b&0 &-b &a &0 &\cdots &-a\\
-a &b &0 &-b &a &0 &\cdots\\
\vdots &\ddots &\ddots &\vdots\\
\vdots &\ddots &\ddots &\vdots\\
a &0 &\cdots &-a &b &0 &-b\\
-b &a &0 &\cdots &-a &b &0
\end{matrix}
&
\begin{matrix}
d &-c &0 &0 &0 &\cdots &-c\\
-c &d &-c &0 &0 &0 &\cdots\\
0 &-c &d &-c &0 &\cdots &0\\
\vdots &\ddots &\ddots &\vdots\\
\vdots &\ddots &\ddots &\vdots\\
0 &0 &0 &\cdots &-c &d &-c \\
-c &0 &0 &0 &\cdots &-c &d
\end{matrix}
\end{array}\right)$
[/tex]
Si quelqu'un peut m'aider je serai vraiment reconnaissante.
Merci d'avance
Cordialement
math@
Hors ligne
#11 15-05-2013 11:02:29
- MathRack
- Membre
- Inscription : 02-04-2012
- Messages : 78
Re : [Fortran] Demande de l'aide en fortran
Bonjour,
Il y a un bon petit volume de code. Je vais jeter un oeil plus tard dans la journée mais ça va me prendre un peu de temps pour te répondre. L'erreur est visible dans la solution finale... Mais l'origine de l'erreur peut être dans nimporte quelle étape du programme!
Concernant les informations dans ton post :
1 - Tu notes X les variables au pas de temps k+1 et Y les variables au pas de temps k?
2 - Ok pour le système à résoudre. Quelles sont les conditions aux limites / conditions initiales?
3 - Le premier schéma numérique me semble OK. Le deuxième c'est vraiment l'usine à gaz...
4 - Dans les matrices décrites, il n'y a jamais les coefficients a1, a2, b1, b2, d1,d2?
5 - La matrice tA est identique à A dans ton post... On parle bien de l'opération de transposition classique ?
6 - La majorité des schémas numériques ont un domaine de stabilité. En dehors de ce domaine de stabilité, le calcul est souvent instable et conduit à une solution fausse. As-tu vérifié l'existence d'un critère de stabilité pour ton schéma numérique? (la condition CFL limite souvent le pas de temps par exemple)
7 - Est-ce que ces équations ont une solution analytique? (par exemple pour tester le programme sur une solution stationnaire...)
Dans le programme principal, tu as :
abcs = i * dx - l/2.D0
Tu souhaites donc que la variable abcs couvre un intervalle qui commence après xdeb et termine après xfin?
Cordialement,
MathRack
Hors ligne
#12 15-05-2013 11:15:19
- math@
- Membre
- Inscription : 28-11-2011
- Messages : 13
Re : [Fortran] Demande de l'aide en fortran
Bonjour MathRack,
1 - j'ai noté X les varibles au pas de temps k+1 et Y les variable au pas de temps K.
2 - Les conditions aux limites sont des conditions périodiques et la conditions initiale c'est une gaussienne.
3 - Pour le schéma j'ai utilisé Crank Niclson en temps et des schéma centrés en espace.
4 - j'ai utilisé les coeffs a1,a2,b1,b2 ... car les coefficients a,b,d ont une syntaxe énorme est j'avais peur de me tromper c'est pour cette raison que j'ai utilisé a1,a2 ...
5 - je me suis trompé dans la matrice et voilà la bonne matrice
[tex]
\left(\begin{array}{c|c}
\begin{matrix}
1 &0 &0 &0 &0 &\cdots &0\\
0 &1&0 &0 &0 &\cdots &0 \\
0 &0 &1 &0 &0 &\cdots &0\\
\vdots &\ddots &\ddots &\vdots\\
\vdots &\ddots &\ddots &\vdots\\
0 &0 &0 &\cdots &0 &1 &0 \\
0 &0 &0 &0 &\cdots &0 &1
\end{matrix}
&\begin{matrix}
0 &-b &a &0 &\cdots &-a &b\\
b &0 &-b &a &0 &\cdots &-a\\
-a &b &0 &-b &a &0 &\cdots\\
\vdots &\ddots &\ddots &\vdots\\
\vdots &\ddots &\ddots &\vdots\\
a &0 &\cdots &-a &b &0 &-b\\
-b &a &0 &\cdots &-a &b &0
\end{matrix}\\
\hline
\begin{matrix}
0 &-e &0 &0 &\cdots &0 &e\\
e &0 &-e &0 &0 &\cdots &0\\
0 &e &0 &-e &0 &0 &\cdots\\
\vdots &\ddots &\ddots &\vdots\\
\vdots &\ddots &\ddots &\vdots\\
0 &0 &\cdots &0 &e &0 &-e\\
-e &0 &0 &\cdots &0 &e &0
\end{matrix}
&
\begin{matrix}
d &-c &0 &0 &0 &\cdots &-c\\
-c &d &-c &0 &0 &0 &\cdots\\
0 &-c &d &-c &0 &\cdots &0\\
\vdots &\ddots &\ddots &\vdots\\
\vdots &\ddots &\ddots &\vdots\\
0 &0 &0 &\cdots &-c &d &-c \\
-c &0 &0 &0 &\cdots &-c &d
\end{matrix}
\end{array}\right)
[/tex]
6 - 7 - J'ai pas calculé la solution analytique car l'équation est compliquée
Merci et bonne journée
math@
Hors ligne
#13 15-05-2013 13:08:11
- MathRack
- Membre
- Inscription : 02-04-2012
- Messages : 78
Re : [Fortran] Demande de l'aide en fortran
Re,
1 - Dans le programme principal, tu as :
abcs = i * dx - l/2.D0
Tu souhaites donc que la variable abcs couvre un intervalle qui commence après xdeb et termine après xfin?
2 - La gaussienne utilisée comme condition initiale c'est un peu embêtant :
- la fonction est bien périodique, même valeur en x=-5 et x=5 car elle est paire
- la dérivée première n'est pas périodique car elle est impaire
Donc la condition initiale est continue, dérivable mais la dérivée première n'est pas continue. Et dans l'EDP, il y a des dérivées 2 & 3...
3 - Si on pose u=0, la première équation du système montre que [tex]\zeta[/tex] ne va pas dépendre du temps. La deuxième équation du système donne :
[tex]0 = g \partial_x \left( \zeta - \frac{h^2}{3}\left( \alpha - 1 \right) \partial_{xx} \zeta\right)[/tex]
On trouve [tex]\zeta = constante[/tex] si [tex]\alpha=1[/tex]. Si non, en fonction du signe de [tex]\alpha-1[/tex], on trouve des solutions en cos & sin ou cosh & sinh.
Je te conseille d'essayer une condition initiale avec u=0 et un [tex]\zeta[/tex] en cos & sin. Normalement, la solution doit rester constante (aux erreur d'arrondi près). Si ça marche le bloc supérieur gauche des matrices est bien codé. Attention : ton programme doit adapter la longueur du domaine numérique à la période des solutions en cos & sin.
MathRack
Dernière modification par MathRack (15-05-2013 13:10:55)
Hors ligne
#14 15-05-2013 14:15:31
- math@
- Membre
- Inscription : 28-11-2011
- Messages : 13
Re : [Fortran] Demande de l'aide en fortran
pour le 1er point, oui je souhaite que mon abcs couvre l'intervalle [xbed,xfin] et qu'elle soit centrée au milieu de cet intervalle.
et pour la gaussienne dans mon cas elle n'est pas paire (j'ai exp(-(x-l/2))!!!
Pour la condition initiale je peux pas mettre que u=0? car j'ai un système de 2 équations et 2 inconnus W([tex]\zeta[/tex],u)!
Dernière modification par math@ (15-05-2013 14:21:15)
Hors ligne
#15 15-05-2013 14:52:06
- MathRack
- Membre
- Inscription : 02-04-2012
- Messages : 78
Re : [Fortran] Demande de l'aide en fortran
Remonte au post #7 : il faut remplacer [tex]i \times dx[/tex] par [tex](i-1) \times dx[/tex].
Tu as [tex](i-1) \times dx \in [0,L] [/tex] et donc [tex]abcs \in [- 0.5 L , 0.5 L][/tex]. Comme ta gaussienne est en [tex]abcs^2[/tex], elle est bien périodique.
Pour avoir la condition initiale u=0 et [tex]\zeta=cos(...)[/tex] dans la variable X0 qui est de taille 2n+2 :
do i = 1, n+1
X0(i)=cos(...)
enddo
! u0 = 0
X0(n+2:2*n+2)=0
Es-tu certaine de ta condition initiale en gaussienne? Tu utilises :
...
do i = 1, 2*n+2
abcs = i * dx - l/2.D0
U(i) = 1.D0 / sqrt(2.D0*pi) / sigma * exp(-.5d0 * abcs**2 / sigma**2)
end do
Pour avoir une condition initiale gaussienne sur les variables u et zeta, il faut remplacer par:
...
do i = 1, n+1
abcs = (i-1) * dx - l/2.D0
! zeta gaussienne
U(i) = 1.D0 / sqrt(2.D0*pi) / sigma * exp(-.5d0 * abcs**2 / sigma**2)
! u gaussienne
U(n+1+i) = 1.D0 / sqrt(2.D0*pi) / sigma * exp(-.5d0 * abcs**2 / sigma**2)
end do
Tu dois forcément mettre une condition initiale sur u ET sur zeta...
Dernière modification par MathRack (15-05-2013 14:54:38)
Hors ligne
#17 15-05-2013 15:37:46
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 385
Re : [Fortran] Demande de l'aide en fortran
Bonjour,
@Math
Puis-je savoir en quoi
exp(-(x-l/2)) !!!
est différent de ce que j'avais corrigé en
[tex]e^{-\left(x-\frac l 2\right)}[/tex]
et que tu as de nouveau rétabli dans sa forme initiale ????
Merci.
Yoshi
Modérateur
Hors ligne
#18 15-05-2013 15:55:40
- MathRack
- Membre
- Inscription : 02-04-2012
- Messages : 78
Re : [Fortran] Demande de l'aide en fortran
oui ma condition initiale est bien une gaussienne (c'est le prof qui a imposé cette condition)
Je te confirme que la condition initiale suivante :
...
do i = 1, 2*n+2
abcs = i * dx - l/2.D0
U(i) = 1.D0 / sqrt(2.D0*pi) / sigma * exp(-.5d0 * abcs**2 / sigma**2)
end do
Te donnes un tableau de taille 2n+2 qui est l'enveloppe d'une gaussienne sur [tex][-0.5L,0.5L][/tex].
Mais il faut faire attention car le tableau U est la condition initiale pour les variables [tex]\zeta[/tex] et [tex]u[/tex]. La première moitié du tableau (1 à n+1) correspond à [tex]\zeta[/tex] et la deuxième moitié (n+2 à 2n+2) à [tex]u[/tex]. En utilisant cette condition initiale, tes variables [tex]\zeta[/tex] et [tex]u[/tex] ne sont pas périodiques!!! Je pense que c'est un peu maladroit d'appeler ta condition initiale U car c'est la condition initiale pour tes 2 variables...
Hors ligne
#19 16-05-2013 08:55:40
- math@
- Membre
- Inscription : 28-11-2011
- Messages : 13
Re : [Fortran] Demande de l'aide en fortran
Bonjour,
@Math
Puis-je savoir en quoi
exp(-(x-l/2)) !!!
est différent de ce que j'avais corrigé en
[tex]e^{-\left(x-\frac l 2\right)}[/tex]
et que tu as de nouveau rétabli dans sa forme initiale ????Merci.
Yoshi
Modérateur
Bonjour Yoshi,
Il y a pas de différence entre les deux écritures mais j'ai écrit exp(-(x-l/2)) pour poser une question sur la périodicité de la gaussienne
math@
Hors ligne
#20 16-05-2013 09:11:45
- MathRack
- Membre
- Inscription : 02-04-2012
- Messages : 78
Re : [Fortran] Demande de l'aide en fortran
Autant pisser dans un violon (et pas sur un vieux lion)... Encore une fois :
1 - Le nombre de points dans l'espace physique est [tex]n+1[/tex] et pas [tex]2n+2[/tex].
2 - Donc le [tex]dx[/tex] que tu utilises est faux.
3 - Le tableau U qui contient la condition initiale doit être affecté en 2 parties, d'abord [tex]\zeta_0[/tex] dans U(1:n+1) puis [tex]u_0[/tex] dans U(n+2:2n+2)
4 - Je te conseille enfin de chercher les solutions de l'EDP du post #13. En choisir une en cos & sin. Adapter [tex]\alpha[/tex], xdeb et xfin dans tes paramètres pour que la solution analytique soit solution numérique. Utiliser le [tex]\zeta[/tex] analytique comme condition initiale [tex]\zeta_0[/tex] avec [tex]u_0=0[/tex]. Et enfin calculer quelques pas de temps pour voir si la solution est bien stationnaire.
Cordialement,
MathRack
Dernière modification par MathRack (16-05-2013 09:18:41)
Hors ligne
#23 16-05-2013 15:06:14
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 385
Re : [Fortran] Demande de l'aide en fortran
Bonjour,
J'ai ajouté une _ de chaque côté de @ : cherches-tu vraiment à te faire spammer ?
Il existe des robots spécialisés dans la collecte des adresses en clair sur les forums !
Les enlever pour l'envoi d'un message...
@+
Hors ligne
Pages : 1







