TD ::
Indications
supplémentaires pour l'écriture des programmes C++
- Utiliser
comme point de départ le programme EF2d-2011.cpp
de
l'archive semaine_07.tar.gz
- Quelques points particuliers à surveiller
- Le vecteur résultat du produit matrice-vecteur
(fonction addMatMul) est assemblé seulement pour
les points du
maillage qui n'appartiennent pas aux frontières avec des conditions de
Dirichlet ; c'est la partie
if( ! K[i].onGamma() ) Ax[ig] +=
M_K[i][j] *
x[jg];
Attention,
- pour les questions Q2a et Q2b nous
n'avons pas des conditions de Dirichlet
- pour la question Q2c on impose
des conditions de Dirichlet seulement à une partie de la frontière
(Gamma_4).
- La visualisation des résultats
se fait avec
Gnuplot (analyser l'écriture du fichier plot)
dans le
programme EF2d-2011.cpp
splot "plot" using 1:2:3 w l
- Utiliser aussi la fonction suivante (gnuplot-iso.hpp)
pour
tracer les lignes de niveau (comme sous FreeFem++)
- Communication C++ --> FreeFem++
; on va
utiliser les résultats générés par le programme C++ et les lire dans le
script FreeFem++
- on va d'abord écrire la solution C++ dans un
fichier (x.sol) ; bien entendu, x est un
KN<R>
{
ofstream f("x.sol");
f << x << endl;
}
- on va lire ce fichier dans FreeFem++ et
comparer les deux solutions
- fespace Vh(Th,P1);
// espace P1
- Vh u ; // solution
calculée par
FreeFem++
- ....
- Vh ucpp; // solution
C++
- ifstream
ficcpp("x.sol") ; //
lecture du fichier sauvergardé par C++
- ficcpp
>> ucpp[ ] ;
- u = u - uccpp; //
différence
entre les deux solutions
- plot(u, cmm =
"difference entre
les deux solutions", value=1, wait=1);
La
différence entre
la solution C++ et la solution FreeFem doit être
- ~ <
1.e-6 (si la précison démandée dans le grad conj est eps=1e-6).
- ~ <
1.e-10 (si la précison démandée dans le grad conj est eps=1e-10).
- (à faire) Communication FreeFem++
--> C++ :
- sauvegarder la solution FreeFem++
dans un
fichier,
- lire cette solution dans C++,
- calculer la norme de la différence
entre les
deux solutions
- visualiser la solution FreeFem++
avec
Gnuplot
-
Exemples de résultats obtenus avec les programmes
C++
- (Question
Q2b) Visualisation 3D
de
la solution et comparaison avec la solution FreeFem++ pour le même
cas
- (Question Q2b) Visualisation des lignes
de niveau : plot_explicite_0.25_isos.pdf
- (Question Q2b) (Communication C++
--> FreeFem++)
-
|