-
Solveur de poisson
Je cherche un solveur de poisson.
Voici l'équation que j'ai à résoudre en 3D (cartésiennes : x,y,z)
div (g) = f(x,y,z)
Cette fonction est connue en chaque point de l'espace (tableau à 3D), me reste à trouver les composantes de mon vecteur g (gx, gy et gz qui sont aussi des tableaux à 3D), en posant évidemment une condition aux bords (par exemple g est nul).
L'équation précédente s'écrit, en discrétisant :
[gx (x+1) - gx (x)] + [gy (y+1) - gy (y)] + [gz (z+1) - gz (z)] = f(x+1/2 , y+1/2 , z+1/2)
... 3 inconnues pour une seule équation (en supposant qu'on connait g en un point)
En ajoutant les equations en (x+3/2 , y+1/2 , z+1/2), (x+1/2 , y+3/2 , z+1/2) et (x+1/2 , y+1/2 , z+3/2) on a alors 4 équations... mais 6 variables.
Faut-il absolument connaître g en deux points successifs ?
-
et bien vu que ton équation est simple, (l'équation de poisson), tu as la discrétisation: ce que tu a écris s'appelle la méthode des différences finies et tes schémas de dérivation sont des schémas avant (car tu va chercher le k+1)
il te manque cela dit des trucs: les conditions de bords... sinon, ton problème de départ (div(g)=f ) est mal posé.
la méthode des différences finies (MDF) se base sur une discrétisation de l'espace par points,
l'espace est un parallélépipède rectangle de dimentions (L,W,H)
on se donne donc des xi, yj et zk tels que
pour tout i dans {1,Nx} , xi=(i-1)* dx avec dx=L/Nx
on fait pareil pour xj et zk sur le même modèle, puis on dit que :
gijk=g(xi,yj,zk) et fijk=f(xi,yj,zk) alors:
dg/dx = (gi+1jk-gijk)/dx pour un schéma avant (bien penser à diviser par le pas d'espace)
ainsi, ton pb de départ devient:
(gi+1jk-gijk)/dx+(gij+1k-gijk)/dy+(gijk+1-gijk)/dz=fijk
tes inconnus sont les gijk on peut inventer un undice l:
il existe un unique l tel que gl=gijk -> g devien un gros vecteur, on écris alors le problème sous forme matricielle:
Ag=f avec A une matrice (représentant l'opération (gi+1jk-gijk)/dx+(gij+1k-gijk)/dy+(gijk+1-gijk)/dz )
maintenant il existe des tas de solveur de problème linéaires permettant de résoudre Ag=f (par exemple pivot de gauss, factorisation LU, gradient conjugué...etc...).
cepedant dan l'opération Ag, lorsque i=Nx, gi+1jk n'existe pas, c'est là qu'intervient la condition de bord!
-
Merci bien pour les explications !
J'en ai parlé avec mon maître de stage qui m'a proposé une toute autre méthode, je la posterai dès que je l'aurai bien comprise.