|
During year 2004/2005, i followed the DEA **analyse numerique** from the
|
|
During year 2004/2005, i followed the DEA **analyse numerique** from the university of [Paris VI](http://www.upmc.fr). This is now called [parcours Analyse Numérique & Équations aux Dérivées Partielles](http://www.ann.jussieu.fr/ANEDP).
|
|
university of [Paris VI](http://www.upmc.fr). This is now called
|
|
|
|
[parcours Analyse Numérique & Équations aux Dérivées
|
|
|
|
Partielles](http://www.ann.jussieu.fr/ANEDP).
|
|
|
|
|
|
|
|
The last chapters are in French.
|
|
The last chapters are in French.
|
|
|
|
|
|
## Research Internship
|
|
## Research Internship
|
|
|
|
|
... | @@ -5,13 +2,7 @@ |
... | @@ -5,13 +2,7 @@ |
|
|
|
|
|
The last chapters are in French.
|
|
The last chapters are in French.
|
|
|
|
|
|
## Research Internship
|
|
## Research Internship
|
|
|
|
|
|
I worked on a new way of doing multiscale image analysis. The idea was
|
|
I worked on a new way of doing multiscale image analysis. The idea was to use the knowledege about disocclusion or [inpainting](http://en.wikipedia.org/wiki/Inpainting) in order to predict the image at a lower lower. One application could be find new compression algorithm. My advisors were [Albert Cohen](http://www.ann.jussieu.fr/\~cohen/) and [Simon Masnou](http://www.ann.jussieu.fr/\~masnou/).
|
|
to use the knowledege about disocclusion or
|
|
|
|
[inpainting](http://en.wikipedia.org/wiki/Inpainting) in order to
|
|
|
|
predict the image at a lower lower. One application could be find new
|
|
|
|
compression algorithm. My advisors were [Albert
|
|
|
|
Cohen](http://www.ann.jussieu.fr/~cohen/) and [Simon
|
|
|
|
Masnou](http://www.ann.jussieu.fr/~masnou/).
|
|
|
|
|
|
|
... | @@ -17,8 +8,7 @@ |
... | @@ -17,8 +8,7 @@ |
|
|
|
|
|
[Read my report
|
|
[Read my report (English)](http://www.freehackers.org/media/orzel/dea/stage/rapport.pdf)
|
|
(English)](http://www.freehackers.org/media/orzel/dea/stage/rapport.pdf)
|
|
|
|
|
|
|
|
## Videos
|
|
## Videos
|
|
|
|
|
|
I did several videos that could have an academic interest.
|
|
I did several videos that could have an academic interest.
|
|
|
|
|
... | @@ -20,9 +10,7 @@ |
... | @@ -20,9 +10,7 @@ |
|
|
|
|
|
## Videos
|
|
## Videos
|
|
|
|
|
|
I did several videos that could have an academic interest.
|
|
I did several videos that could have an academic interest.
|
|
|
|
|
|
[1](http://www.freehackers.org/media/orzel/dea/stage/Lenna_haar_reconstruction.avi)
|
|
[1](http://www.freehackers.org/media/orzel/dea/stage/Lenna_haar_reconstruction.avi) this one shows the image reconstruction from its decomposition on a _Haar_ Basis. Haar basis are the first and simpler example of wavelets.
|
|
this one shows the image reconstruction from its decomposition on a
|
|
|
|
*Haar* Basis. Haar basis are the first and simpler example of wavelets.
|
|
|
|
|
|
|
... | @@ -28,7 +16,5 @@ |
... | @@ -28,7 +16,5 @@ |
|
|
|
|
|
The following videos are experiments related to the methods described in
|
|
The following videos are experiments related to the methods described in my report.The two numbers are the corresponding values for alpha and beta.
|
|
my report.The two numbers are the corresponding values for alpha and
|
|
|
|
beta.
|
|
|
|
|
|
|
|
- [CompressionInterp-.5-.5.avi](http://www.freehackers.org/media/orzel/dea/stage/results/CompressionInterp-.5-.5.avi)
|
|
- [CompressionInterp-.5-.5.avi](http://www.freehackers.org/media/orzel/dea/stage/results/CompressionInterp-.5-.5.avi)
|
|
- [CompressionInterp-.5-1.avi](http://www.freehackers.org/media/orzel/dea/stage/results/CompressionInterp-.5-1.avi)
|
|
- [CompressionInterp-.5-1.avi](http://www.freehackers.org/media/orzel/dea/stage/results/CompressionInterp-.5-1.avi)
|
... | @@ -60,13 +46,7 @@ |
... | @@ -60,13 +46,7 @@ |
|
|
|
|
|
## Horror story
|
|
## Horror story
|
|
|
|
|
|
On of the most frightening thing I've ever done with the computer. They
|
|
On of the most frightening thing I've ever done with the computer. They _requested_ me to write something in [Fortran](http://en.wikipedia.org/wiki/Fortran), so I did an [implementation of the heapsort](http://www.freehackers.org/media/orzel/dea/soft/tri_tas.f). This was academic enought for them, and I'm now free to never use this programming language anymore.
|
|
*requested* me to write something in
|
|
|
|
[Fortran](http://en.wikipedia.org/wiki/Fortran), so I did an
|
|
|
|
[implementation of the
|
|
|
|
heapsort](http://www.freehackers.org/media/orzel/dea/soft/tri_tas.f).
|
|
|
|
This was academic enought for them, and I'm now free to never use this
|
|
|
|
programming language anymore.
|
|
|
|
|
|
|
|
## Projet EDP et méthodes mathématiques en finance
|
|
## Projet EDP et méthodes mathématiques en finance
|
|
|
|
|
... | @@ -70,6 +50,5 @@ |
... | @@ -70,6 +50,5 @@ |
|
|
|
|
|
## Projet EDP et méthodes mathématiques en finance
|
|
## Projet EDP et méthodes mathématiques en finance
|
|
|
|
|
|
![](Exempleput.png "Exempleput.png") Projet realisé dans le cadre de
|
|
![](Exempleput.png "Exempleput.png") Projet realisé dans le cadre de l'évaluation du cours de Messieurs Pironneau et Berestycki.
|
|
l'évaluation du cours de Messieurs Pironneau et Berestycki.
|
|
|
|
|
|
|
... | @@ -75,4 +54,3 @@ |
... | @@ -75,4 +54,3 @@ |
|
|
|
|
|
J'ai choisi le projet 10, sur les méthodes adaptatives pour la
|
|
J'ai choisi le projet 10, sur les méthodes adaptatives pour la résolution de l'équation de Black-Scholes L'énoncé exact est :
|
|
résolution de l'équation de Black-Scholes L'énoncé exact est :
|
|
|
|
|
|
|
... | @@ -78,6 +56,4 @@ |
... | @@ -78,6 +56,4 @@ |
|
|
|
|
|
` Run program 5.1 to 5.5. Adapt it to a barrier option with`
|
|
`Run program 5.1 to 5.5. Adapt it to a barrier option with realistic data. If times allow make the change S -> S/(S+1) which maps R+ into (0,1) and compute a European put in this formulation and compare.`
|
|
` realistic data. If times allow make the change S -> S/(S+1)`
|
|
|
|
` which maps R+ into (0,1) and compute a European put in this`
|
|
|
|
` formulation and compare.`
|
|
|
|
|
|
|
... | @@ -83,10 +59,7 @@ |
... | @@ -83,10 +59,7 @@ |
|
|
|
|
|
- [Rapport du
|
|
- [Rapport du projet](http://www.freehackers.org/media/orzel/dea/finance/rapport_finance.pdf)
|
|
projet](http://www.freehackers.org/media/orzel/dea/finance/rapport_finance.pdf)
|
|
- [Code source du projet (bz2)](http://www.freehackers.org/media/orzel/dea/finance/sources-finance.tar.bz2)
|
|
- [Code source du projet
|
|
- [Code source du projet (tar.gz)](http://www.freehackers.org/media/orzel/dea/finance/sources-finance.tar.gz)
|
|
(bz2)](http://www.freehackers.org/media/orzel/dea/finance/sources-finance.tar.bz2)
|
|
|
|
- [Code source du projet
|
|
|
|
(tar.gz)](http://www.freehackers.org/media/orzel/dea/finance/sources-finance.tar.gz)
|
|
|
|
|
|
|
|
## Projet sur les maillages adaptatifs
|
|
## Projet sur les maillages adaptatifs
|
|
|
|
|
... | @@ -90,9 +63,8 @@ |
... | @@ -90,9 +63,8 @@ |
|
|
|
|
|
## Projet sur les maillages adaptatifs
|
|
## Projet sur les maillages adaptatifs
|
|
|
|
|
|
Projets realises dans le cadre de l'evaluation du cours de Messieurs
|
|
Projets realises dans le cadre de l'evaluation du cours de Messieurs Hecht et Frey, et réalisé en binôme avec Hanen Amor.
|
|
Hecht et Frey, et réalisé en binôme avec Hanen Amor.
|
|
|
|
|
|
|
|
Nous avons choisit de faire deux projets:
|
|
Nous avons choisit de faire deux projets:
|
|
|
|
|
|
- Le projet 4 : Interpolation de maillages en O(n)
|
|
- Le projet 4 : Interpolation de maillages en O(n)
|
... | @@ -95,18 +67,11 @@ |
... | @@ -95,18 +67,11 @@ |
|
|
|
|
|
Nous avons choisit de faire deux projets:
|
|
Nous avons choisit de faire deux projets:
|
|
|
|
|
|
- Le projet 4 : Interpolation de maillages en O(n)
|
|
- Le projet 4 : Interpolation de maillages en O(n)
|
|
- Le projet 8 : Schéma numérique et visualisation 3D pour un problème
|
|
- Le projet 8 : Schéma numérique et visualisation 3D pour un problème d'interaction de particules
|
|
d'interaction de particules
|
|
- [Rapport du projet](http://www.freehackers.org/media/orzel/dea/maillages/rapport.pdf)
|
|
|
|
- [Code source du projet (bz2)](http://www.freehackers.org/media/orzel/dea/maillages/projetmaillage.tar.bz2)
|
|
<!-- -->
|
|
- [Code source du projet (tgz)](http://www.freehackers.org/media/orzel/dea/maillages/projetmaillage.tgz)
|
|
|
|
|
|
- [Rapport du
|
|
|
|
projet](http://www.freehackers.org/media/orzel/dea/maillages/rapport.pdf)
|
|
|
|
- [Code source du projet
|
|
|
|
(bz2)](http://www.freehackers.org/media/orzel/dea/maillages/projetmaillage.tar.bz2)
|
|
|
|
- [Code source du projet
|
|
|
|
(tgz)](http://www.freehackers.org/media/orzel/dea/maillages/projetmaillage.tgz)
|
|
|
|
|
|
|
|
### Projet interpolation
|
|
### Projet interpolation
|
|
|
|
|
... | @@ -110,8 +75,5 @@ |
... | @@ -110,8 +75,5 @@ |
|
|
|
|
|
### Projet interpolation
|
|
### Projet interpolation
|
|
|
|
|
|
Le test suivant vérifie que les lignes de courant sont conservées par
|
|
Le test suivant vérifie que les lignes de courant sont conservées par notre programme d'interpolation. La première image montre une ligne de courant sur le maillage d'entrée. La seconde image montre la même ligne sur notre maillage interpolé.
|
|
notre programme d'interpolation. La première image montre une ligne de
|
|
|
|
courant sur le maillage d'entrée. La seconde image montre la même ligne
|
|
|
|
sur notre maillage interpolé.
|
|
|
|
|
|
|
... | @@ -117,6 +79,5 @@ |
... | @@ -117,6 +79,5 @@ |
|
|
|
|
|
![Vit1 3d.001.png](Vit1_3d.001.png "Vit1 3d.001.png")
|
|
![Vit1 3d.001.png](Vit1_3d.001.png "Vit1 3d.001.png") ![Vit0 3d.001.png](Vit0_3d.001.png "Vit0 3d.001.png")
|
|
![Vit0 3d.001.png](Vit0_3d.001.png "Vit0 3d.001.png")
|
|
|
|
|
|
|
|
### Projet particules
|
|
### Projet particules
|
|
|
|
|
... | @@ -120,20 +81,10 @@ |
... | @@ -120,20 +81,10 @@ |
|
|
|
|
|
### Projet particules
|
|
### Projet particules
|
|
|
|
|
|
- [9 particules n'interagissant
|
|
- [9 particules n'interagissant pas](http://www.freehackers.org/media/orzel/dea/maillages/BouncingMolecule.avi), elles rebondissent juste.
|
|
pas](http://www.freehackers.org/media/orzel/dea/maillages/BouncingMolecule.avi),
|
|
- [validation du tore pour les positions et interactions](http://www.freehackers.org/media/orzel/dea/maillages/ValidationTore.avi) (40 particules)
|
|
elles rebondissent juste.
|
|
- [un phenomène intéressant ou des particules s'aggrègent puis explosent finalement.](http://www.freehackers.org/media/orzel/dea/maillages/agg.avi) (40 particules)
|
|
- [validation du tore pour les positions et
|
|
- [une version ou tout explose](http://www.freehackers.org/media/orzel/dea/maillages/comportementbizarre.avi), pour montrer le type de bug/difficultés que l'on peut rencontrer pendant le développement.
|
|
interactions](http://www.freehackers.org/media/orzel/dea/maillages/ValidationTore.avi)
|
|
|
|
(40 particules)
|
|
|
|
- [un phenomène intéressant ou des particules s'aggrègent puis
|
|
|
|
explosent
|
|
|
|
finalement.](http://www.freehackers.org/media/orzel/dea/maillages/agg.avi)
|
|
|
|
(40 particules)
|
|
|
|
- [une version ou tout
|
|
|
|
explose](http://www.freehackers.org/media/orzel/dea/maillages/comportementbizarre.avi),
|
|
|
|
pour montrer le type de bug/difficultés que l'on peut rencontrer
|
|
|
|
pendant le développement.
|
|
|
|
|
|
|
|
## Projet éléments Finis
|
|
## Projet éléments Finis
|
|
|
|
|
... | @@ -141,8 +92,6 @@ |
... | @@ -141,8 +92,6 @@ |
|
|
|
|
|
L'ensemble du code du projet peut être télécharé ici:
|
|
L'ensemble du code du projet peut être télécharé ici:
|
|
|
|
|
|
- [Le projet
|
|
- [Le projet 2D](http://www.freehackers.org/media/orzel/dea/ThomasCapricelliFem2d.tgz)
|
|
2D](http://www.freehackers.org/media/orzel/dea/ThomasCapricelliFem2d.tgz)
|
|
- [Le projet 3D](http://www.freehackers.org/media/orzel/dea/ThomasCapricelliFem3d.tgz)
|
|
- [Le projet
|
|
|
|
3D](http://www.freehackers.org/media/orzel/dea/ThomasCapricelliFem3d.tgz)
|
|
|
|
|
|
|
... | @@ -148,9 +97,7 @@ |
... | @@ -148,9 +97,7 @@ |
|
|
|
|
|
Le premier contient une copie de fem-v5, légérement modifiée comme
|
|
Le premier contient une copie de fem-v5, légérement modifiée comme indiqué dans les pages précédentes, les différentes versions du programme Laplace, et les fichiers de données correspondants.
|
|
indiqué dans les pages précédentes, les différentes versions du
|
|
|
|
programme Laplace, et les fichiers de données correspondants.
|
|
|
|
|
|
|
|
Le deuxième contient l'ensemble du projet dans sa version 3D.
|
|
Le deuxième contient l'ensemble du projet dans sa version 3D.
|
|
|
|
|
|
### Premiers essais
|
|
### Premiers essais
|
|
|
|
|
... | @@ -152,13 +99,9 @@ |
... | @@ -152,13 +99,9 @@ |
|
|
|
|
|
Le deuxième contient l'ensemble du projet dans sa version 3D.
|
|
Le deuxième contient l'ensemble du projet dans sa version 3D.
|
|
|
|
|
|
### Premiers essais
|
|
### Premiers essais
|
|
|
|
|
|
J'ai modélisé la coupe transversale d'un tuyau transportant deux fluides
|
|
J'ai modélisé la coupe transversale d'un tuyau transportant deux fluides à température constante. 0 pour le tuyau de gauche, et +10 pour le tuyau de droite. L'extérieur du tuyau est à température également constante, égale à +5. (On ne peut mettre que des conditions de Dirichlet pour l'instant).
|
|
à température constante. 0 pour le tuyau de gauche, et +10 pour le tuyau
|
|
|
|
de droite. L'extérieur du tuyau est à température également constante,
|
|
|
|
égale à +5. (On ne peut mettre que des conditions de Dirichlet pour
|
|
|
|
l'instant).
|
|
|
|
|
|
|
|
![Orzel2d 2trous maillage.png](Orzel2d_2trous_maillage.png "Orzel2d 2trous maillage.png")
|
|
![Orzel2d 2trous maillage.png](Orzel2d_2trous_maillage.png "Orzel2d 2trous maillage.png")
|
|
|
|
|
... | @@ -162,11 +105,7 @@ |
... | @@ -162,11 +105,7 @@ |
|
|
|
|
|
![Orzel2d 2trous maillage.png](Orzel2d_2trous_maillage.png "Orzel2d 2trous maillage.png")
|
|
![Orzel2d 2trous maillage.png](Orzel2d_2trous_maillage.png "Orzel2d 2trous maillage.png")
|
|
|
|
|
|
Afin de mieux comprendre ce qu'il se passe, j'ai cassé la symétrie en
|
|
Afin de mieux comprendre ce qu'il se passe, j'ai cassé la symétrie en imposant une source asymétrique dans l'épaisseur du tuyau. Pour ce premier exemple, le gradient est nul sur l'axe y=x, et est linéaire selon l'axe y=-x, négatif en bas à droite, positif en haut à gauche. (La formule est du type -x+y)
|
|
imposant une source asymétrique dans l'épaisseur du tuyau. Pour ce
|
|
|
|
premier exemple, le gradient est nul sur l'axe y=x, et est linéaire
|
|
|
|
selon l'axe y=-x, négatif en bas à droite, positif en haut à gauche. (La
|
|
|
|
formule est du type -x+y)
|
|
|
|
|
|
|
|
![Orzel2d 2trous.png](Orzel2d_2trous.png "Orzel2d 2trous.png")
|
|
![Orzel2d 2trous.png](Orzel2d_2trous.png "Orzel2d 2trous.png")
|
|
|
|
|
... | @@ -170,6 +109,5 @@ |
... | @@ -170,6 +109,5 @@ |
|
|
|
|
|
![Orzel2d 2trous.png](Orzel2d_2trous.png "Orzel2d 2trous.png")
|
|
![Orzel2d 2trous.png](Orzel2d_2trous.png "Orzel2d 2trous.png")
|
|
|
|
|
|
La température sur l'ensemble de l'élément est majorée par 0 et 10,
|
|
La température sur l'ensemble de l'élément est majorée par 0 et 10, c'est-à-dire les températures extrêmes.
|
|
c'est-à-dire les températures extrêmes.
|
|
|
|
|
|
|
... | @@ -175,5 +113,3 @@ |
... | @@ -175,5 +113,3 @@ |
|
|
|
|
|
J'ai ensuite considéré un gradient nul sur l'axe y=-x, et linéaire selon
|
|
J'ai ensuite considéré un gradient nul sur l'axe y=-x, et linéaire selon l'axe y=x, négatif en bas à gauche, positif en haut à droite. (La formule est essentiellement x+y)
|
|
l'axe y=x, négatif en bas à gauche, positif en haut à droite. (La
|
|
|
|
formule est essentiellement x+y)
|
|
|
|
|
|
|
... | @@ -179,8 +115,7 @@ |
... | @@ -179,8 +115,7 @@ |
|
|
|
|
|
Contrairement à l'exemple précédent, la température dépasse les valeurs
|
|
Contrairement à l'exemple précédent, la température dépasse les valeurs extrêmes, en négatif (bas-gauche) ou en positif (haut-droit).
|
|
extrêmes, en négatif (bas-gauche) ou en positif (haut-droit).
|
|
|
|
|
|
|
|
![Orzel2d 2trous2.png](Orzel2d_2trous2.png "Orzel2d 2trous2.png")
|
|
![Orzel2d 2trous2.png](Orzel2d_2trous2.png "Orzel2d 2trous2.png")
|
|
|
|
|
|
Documents:
|
|
Documents:
|
|
|
|
|
... | @@ -182,14 +117,11 @@ |
... | @@ -182,14 +117,11 @@ |
|
|
|
|
|
![Orzel2d 2trous2.png](Orzel2d_2trous2.png "Orzel2d 2trous2.png")
|
|
![Orzel2d 2trous2.png](Orzel2d_2trous2.png "Orzel2d 2trous2.png")
|
|
|
|
|
|
Documents:
|
|
Documents:
|
|
|
|
|
|
- [les modifications apportées à
|
|
- [les modifications apportées à Laplace.cpp](http://www.freehackers.org/media/orzel/dea/DiffFirstTests.html)
|
|
Laplace.cpp](http://www.freehackers.org/media/orzel/dea/DiffFirstTests.html)
|
|
- [Le fichier complet](http://www.freehackers.org/media/orzel/dea/orzel2d_2trous.cpp)
|
|
- [Le fichier
|
|
- [Le fichier mesh utilisé](http://www.freehackers.org/media/orzel/dea/orzel_section_2trous.msh)
|
|
complet](http://www.freehackers.org/media/orzel/dea/orzel2d_2trous.cpp)
|
|
|
|
- [Le fichier mesh
|
|
|
|
utilisé](http://www.freehackers.org/media/orzel/dea/orzel_section_2trous.msh)
|
|
|
|
|
|
|
|
### Prise en compte du tenseur de conductivité
|
|
### Prise en compte du tenseur de conductivité
|
|
|
|
|
... | @@ -193,7 +125,5 @@ |
... | @@ -193,7 +125,5 @@ |
|
|
|
|
|
### Prise en compte du tenseur de conductivité
|
|
### Prise en compte du tenseur de conductivité
|
|
|
|
|
|
Notre première modification vise à prendre en compte le tenseur de
|
|
Notre première modification vise à prendre en compte le tenseur de conductivité en x et y, c'est-à-dire en fonction du matériau, ou encore, en terme Mefisto, du Label.
|
|
conductivité en x et y, c'est-à-dire en fonction du matériau, ou encore,
|
|
|
|
en terme Mefisto, du Label.
|
|
|
|
|
|
|
... | @@ -199,5 +129,3 @@ |
... | @@ -199,5 +129,3 @@ |
|
|
|
|
|
On s'est contenté ici d'utiliser une matrice de conductivité diagonale,
|
|
On s'est contenté ici d'utiliser une matrice de conductivité diagonale, la multiplication par un vecteur revient donc à multiplier chaque composante par la composante correspondante de la diagonale.
|
|
la multiplication par un vecteur revient donc à multiplier chaque
|
|
|
|
composante par la composante correspondante de la diagonale.
|
|
|
|
|
|
|
... | @@ -203,9 +131,3 @@ |
... | @@ -203,9 +131,3 @@ |
|
|
|
|
|
L'équation différentielle vérifiée est alors -div\[A(x)\*grad(t(x))\] =
|
|
L'équation différentielle vérifiée est alors -div\[A(x)\*grad(t(x))\] = f(x), où t(x) représente la température en x, et A(x) la matrice du tenseur de conductivité. Dans la formulation variationnelle discrétisée, on remplace alors le calcul de l'intégrale sur un triangle élémentaire T de (grad(wi),grad(wj)) (produit scalaire), par le calcul de l'intégrale de (A(x)\*wi,wj). Les wi représentent les fonctions chapeaux sur les noeuds du maillage.
|
|
f(x), où t(x) représente la température en x, et A(x) la matrice du
|
|
|
|
tenseur de conductivité. Dans la formulation variationnelle discrétisée,
|
|
|
|
on remplace alors le calcul de l'intégrale sur un triangle élémentaire T
|
|
|
|
de (grad(wi),grad(wj)) (produit scalaire), par le calcul de l'intégrale
|
|
|
|
de (A(x)\*wi,wj). Les wi représentent les fonctions chapeaux sur les
|
|
|
|
noeuds du maillage.
|
|
|
|
|
|
|
... | @@ -211,7 +133,5 @@ |
... | @@ -211,7 +133,5 @@ |
|
|
|
|
|
Implémentation : on définit un tableau de matrices, l'indice du tableau
|
|
Implémentation : on définit un tableau de matrices, l'indice du tableau sera le label du matériau, et chaque matrice sera en fait un tableau de deux éléments.
|
|
sera le label du matériau, et chaque matrice sera en fait un tableau de
|
|
|
|
deux éléments.
|
|
|
|
|
|
|
|
Documents:
|
|
Documents:
|
|
|
|
|
... | @@ -215,10 +135,8 @@ |
... | @@ -215,10 +135,8 @@ |
|
|
|
|
|
Documents:
|
|
Documents:
|
|
|
|
|
|
- [les modifications apportées a
|
|
- [les modifications apportées a Laplace.cpp](http://www.freehackers.org/media/orzel/dea/DiffTenseurConductivite.html)
|
|
Laplace.cpp](http://www.freehackers.org/media/orzel/dea/DiffTenseurConductivite.html)
|
|
- [Le fichier complet](http://www.freehackers.org/media/orzel/dea/LaplaceConductivite.cpp)
|
|
- [Le fichier
|
|
|
|
complet](http://www.freehackers.org/media/orzel/dea/LaplaceConductivite.cpp)
|
|
|
|
|
|
|
|
### Conditions de type Neumann
|
|
### Conditions de type Neumann
|
|
|
|
|
... | @@ -222,8 +140,5 @@ |
... | @@ -222,8 +140,5 @@ |
|
|
|
|
|
### Conditions de type Neumann
|
|
### Conditions de type Neumann
|
|
|
|
|
|
Jusqu'à alors, nous ne pouvions utiliser que des conditions de type
|
|
Jusqu'à alors, nous ne pouvions utiliser que des conditions de type Dirichlet. Je vais rajouter, dans un premier temps, la prise en compte de conditions de type Neumann. C'est le plus facile, car il ne faut modifier que le second membre.
|
|
Dirichlet. Je vais rajouter, dans un premier temps, la prise en compte
|
|
|
|
de conditions de type Neumann. C'est le plus facile, car il ne faut
|
|
|
|
modifier que le second membre.
|
|
|
|
|
|
|
... | @@ -229,6 +144,3 @@ |
... | @@ -229,6 +144,3 @@ |
|
|
|
|
|
Implémentation : Je parcours l'ensemble des côtés qui sont sur la
|
|
Implémentation : Je parcours l'ensemble des côtés qui sont sur la frontière. Pour chaque côté, je vérifie d'abord qu'il fait partie d'une frontière où il y a des conditions de type Neumann. Sinon, bien sûr, je passe au côté suivant.
|
|
frontière. Pour chaque côté, je vérifie d'abord qu'il fait partie d'une
|
|
|
|
frontière où il y a des conditions de type Neumann. Sinon, bien sûr, je
|
|
|
|
passe au côté suivant.
|
|
|
|
|
|
|
... | @@ -234,7 +146,3 @@ |
... | @@ -234,7 +146,3 @@ |
|
|
|
|
|
J'utilise alors une formule d'intégration numérique en 1D pour calculer
|
|
J'utilise alors une formule d'intégration numérique en 1D pour calculer l'intégrale sur le segment. Il ne reste plus qu'à modifier le second membre en conséquence.
|
|
l'intégrale sur le segment. Il ne reste plus qu'à modifier le second
|
|
|
|
membre en conséquence.
|
|
|
|
|
|
|
|
*Premier Test*
|
|
|
|
|
|
|
... | @@ -240,10 +148,7 @@ |
... | @@ -240,10 +148,7 @@ |
|
|
|
|
|
Pour tester cette partie j'ai considéré ce premier exemple : Un carré
|
|
_Premier Test_
|
|
avec un trou au milieu. La température est imposée (Dirichlet) sur le
|
|
|
|
carré, avec un gradient linéaire selon l'axe y : -20 degrés en bas, et
|
|
Pour tester cette partie j'ai considéré ce premier exemple : Un carré avec un trou au milieu. La température est imposée (Dirichlet) sur le carré, avec un gradient linéaire selon l'axe y : -20 degrés en bas, et +20 en haut. J'ai imposé une condition de Neumann nulle sur le cercle intérieur, je dois donc obtenir des isothermes perpendiculaires à la frontière. Ce qui est bien le cas :
|
|
+20 en haut. J'ai imposé une condition de Neumann nulle sur le cercle
|
|
|
|
intérieur, je dois donc obtenir des isothermes perpendiculaires à la
|
|
|
|
frontière. Ce qui est bien le cas :
|
|
|
|
|
|
|
|
![Condition neumann test.png](Condition_neumann_test.png "Condition neumann test.png")
|
|
![Condition neumann test.png](Condition_neumann_test.png "Condition neumann test.png")
|
|
|
|
|
... | @@ -247,5 +152,5 @@ |
... | @@ -247,5 +152,5 @@ |
|
|
|
|
|
![Condition neumann test.png](Condition_neumann_test.png "Condition neumann test.png")
|
|
![Condition neumann test.png](Condition_neumann_test.png "Condition neumann test.png")
|
|
|
|
|
|
*Tests*
|
|
_Tests_
|
|
|
|
|
... | @@ -251,14 +156,5 @@ |
... | @@ -251,14 +156,5 @@ |
|
|
|
|
|
Je fais ensuite un test plus rigoureux. Je pars d'une solution connue,
|
|
Je fais ensuite un test plus rigoureux. Je pars d'une solution connue, sur un objet facile à manipuler. Je vérifie que le résultat obtenu est bien celui attendu. J'ai pris comme objet un anneau, de cercle intérieur de rayon 4, et de cercle extérieur de rayon 10. La température est téta(x,y)=x\*x+y\*y. Ainsi, l'inverse du laplacien est constant égale à -4. Je considère alors le problème avec conditions de Dirichlet sur le cercle intérieur (température = 16) et condition de Neumann sur le cercle extérieur (le gradient vaut 2(x,y) et la normale unitaire au cercle vaut (x,y)/R2, donc la derivée normale vaut 2\*R2). J'obtiens ceci:
|
|
sur un objet facile à manipuler. Je vérifie que le résultat obtenu est
|
|
|
|
bien celui attendu. J'ai pris comme objet un anneau, de cercle intérieur
|
|
|
|
de rayon 4, et de cercle extérieur de rayon 10. La température est
|
|
|
|
téta(x,y)=x\*x+y\*y. Ainsi, l'inverse du laplacien est constant égale à
|
|
|
|
-4. Je considère alors le problème avec conditions de Dirichlet sur le
|
|
|
|
cercle intérieur (température = 16) et condition de Neumann sur le
|
|
|
|
cercle extérieur (le gradient vaut 2(x,y) et la normale unitaire au
|
|
|
|
cercle vaut (x,y)/R2, donc la derivée normale vaut 2\*R2). J'obtiens
|
|
|
|
ceci:
|
|
|
|
|
|
|
|
![Condition neumann test2.png](Condition_neumann_test2.png "Condition neumann test2.png")
|
|
![Condition neumann test2.png](Condition_neumann_test2.png "Condition neumann test2.png")
|
|
|
|
|
... | @@ -262,6 +158,5 @@ |
... | @@ -262,6 +158,5 @@ |
|
|
|
|
|
![Condition neumann test2.png](Condition_neumann_test2.png "Condition neumann test2.png")
|
|
![Condition neumann test2.png](Condition_neumann_test2.png "Condition neumann test2.png")
|
|
|
|
|
|
Ce qui est déjà prometteur, car la température est distribuée
|
|
Ce qui est déjà prometteur, car la température est distribuée radialement entre 4\*4 et 10\*10.
|
|
radialement entre 4\*4 et 10\*10.
|
|
|
|
|
|
|
... | @@ -267,5 +162,3 @@ |
... | @@ -267,5 +162,3 @@ |
|
|
|
|
|
J'ajoute un test en fin de programme qui calcule le max des différences
|
|
J'ajoute un test en fin de programme qui calcule le max des différences entre les températures obtenues, et celles que j'aurais dû obtenir. Voici le code
|
|
entre les températures obtenues, et celles que j'aurais dû obtenir.
|
|
|
|
Voici le code
|
|
|
|
|
|
|
... | @@ -271,19 +164,19 @@ |
... | @@ -271,19 +164,19 @@ |
|
|
|
|
|
` // test de validite`
|
|
```
|
|
` R max = 0.;`
|
|
// test de validité
|
|
` R tetamax =0.;`
|
|
R max = 0.;
|
|
` assert ( Ug.N() == Th.nv );`
|
|
R tetamax =0.;
|
|
` for ( int i = 0 ; i< Th.nv; i++ )`
|
|
assert (Ug.N()==Th.nv);
|
|
` {`
|
|
for ( int i = 0 ; i< Th.nv; i++ ) {
|
|
` R diff;`
|
|
R diff;
|
|
` R2 P;`
|
|
R2 P;
|
|
` `
|
|
P = (R2)(Th.vertices[i]);
|
|
` P = (R2)(Th.vertices[i]);`
|
|
diff = Ug[i]-TetaExact(P) ;
|
|
` diff = Ug[i]-TetaExact(P) ;`
|
|
diff *= diff; // on prend le carre
|
|
` diff *= diff; // on prend le carre`
|
|
if ( diff>max ) max= diff;
|
|
` if ( diff>max ) max= diff;`
|
|
if ( Ug[i]>tetamax ) tetamax= Ug[i];
|
|
` if ( Ug[i]>tetamax ) tetamax= Ug[i];`
|
|
}
|
|
` }`
|
|
printf("Max des carres obtenu : %f\n", max);
|
|
` printf("Max des carres obtenu : %f\n", max);`
|
|
printf("Max des tetas obtenu : %f\n\n", tetamax);
|
|
` printf("Max des tetas obtenu : %f\n\n", tetamax);`
|
|
```
|
|
|
|
|
... | @@ -289,4 +182,3 @@ |
... | @@ -289,4 +182,3 @@ |
|
|
|
|
|
Avec le premier maillage, correspondant à respectivement 16 et 32
|
|
Avec le premier maillage, correspondant à respectivement 16 et 32 segments sur les cercles intérieur et extérieur, j'obtiens :
|
|
segments sur les cercles intérieur et extérieur, j'obtiens :
|
|
|
|
|
|
|
... | @@ -292,3 +184,3 @@ |
... | @@ -292,3 +184,3 @@ |
|
|
|
|
|
` Max des carres obtenu : 0.750861 `
|
|
`Max des carres obtenu : 0.750861`
|
|
|
|
|
... | @@ -294,4 +186,3 @@ |
... | @@ -294,4 +186,3 @@ |
|
|
|
|
|
Avec un maillage plus fin, (50 et 200 segments sur les cercles),
|
|
Avec un maillage plus fin, (50 et 200 segments sur les cercles), j'obtiens :
|
|
j'obtiens :
|
|
|
|
|
|
|
... | @@ -297,7 +188,7 @@ |
... | @@ -297,7 +188,7 @@ |
|
|
|
|
|
` Max des carres obtenu : 0.005458 `
|
|
`Max des carres obtenu : 0.005458`
|
|
|
|
|
|
Ce qui me parait raisonnable pour des températures entre 16 et 100.
|
|
Ce qui me parait raisonnable pour des températures entre 16 et 100.
|
|
|
|
|
|
Documents:
|
|
Documents:
|
|
|
|
|
... | @@ -299,16 +190,12 @@ |
... | @@ -299,16 +190,12 @@ |
|
|
|
|
|
Ce qui me parait raisonnable pour des températures entre 16 et 100.
|
|
Ce qui me parait raisonnable pour des températures entre 16 et 100.
|
|
|
|
|
|
Documents:
|
|
Documents:
|
|
|
|
|
|
- [les modifications apportées à
|
|
- [les modifications apportées à Laplace.cpp](http://www.freehackers.org/media/orzel/dea/DiffNeumann.html)
|
|
Laplace.cpp](http://www.freehackers.org/media/orzel/dea/DiffNeumann.html)
|
|
- [Le fichier complet](http://www.freehackers.org/media/orzel/dea/LaplaceNeumann.cpp)
|
|
- [Le fichier
|
|
- [Le maillage grossier utilisé](http://www.freehackers.org/media/orzel/dea/testfrontiere.msh)
|
|
complet](http://www.freehackers.org/media/orzel/dea/LaplaceNeumann.cpp)
|
|
- [Le maillage fin utilisé](http://www.freehackers.org/media/orzel/dea/testfrontiere_big.msh)
|
|
- [Le maillage grossier
|
|
|
|
utilisé](http://www.freehackers.org/media/orzel/dea/testfrontiere.msh)
|
|
|
|
- [Le maillage fin
|
|
|
|
utilisé](http://www.freehackers.org/media/orzel/dea/testfrontiere_big.msh)
|
|
|
|
|
|
|
|
### Conditions de type Robin/Fourier
|
|
### Conditions de type Robin/Fourier
|
|
|
|
|
... | @@ -312,9 +199,8 @@ |
... | @@ -312,9 +199,8 @@ |
|
|
|
|
|
### Conditions de type Robin/Fourier
|
|
### Conditions de type Robin/Fourier
|
|
|
|
|
|
L'étape suivante consiste à prendre en compte les conditions de type
|
|
L'étape suivante consiste à prendre en compte les conditions de type Robin/Fourier. Pour cela, il faut des données supplémentaires :
|
|
Robin/Fourier. Pour cela, il faut des données supplémentaires :
|
|
|
|
|
|
|
|
- La température extérieure (fluide léchant le bord)
|
|
- La température extérieure (fluide léchant le bord)
|
|
- Le coefficient d'échange
|
|
- Le coefficient d'échange
|
|
|
|
|
... | @@ -317,7 +203,6 @@ |
... | @@ -317,7 +203,6 @@ |
|
|
|
|
|
- La température extérieure (fluide léchant le bord)
|
|
- La température extérieure (fluide léchant le bord)
|
|
- Le coefficient d'échange
|
|
- Le coefficient d'échange
|
|
|
|
|
|
Dans la formulation variationnelle correspondante, il faut alors
|
|
Dans la formulation variationnelle correspondante, il faut alors modifier à la fois le second membre, et la matrice globale.
|
|
modifier à la fois le second membre, et la matrice globale.
|
|
|
|
|
|
|
... | @@ -323,5 +208,3 @@ |
... | @@ -323,5 +208,3 @@ |
|
|
|
|
|
Pour le second membre, on fait exactement comme pour les conditions de
|
|
Pour le second membre, on fait exactement comme pour les conditions de Neumann, en remplaçant UNeumann(P) par GRobin(P) \* TetaExtRobin(P) avec des notations évidentes.
|
|
Neumann, en remplaçant UNeumann(P) par GRobin(P) \* TetaExtRobin(P) avec
|
|
|
|
des notations évidentes.
|
|
|
|
|
|
|
... | @@ -327,9 +210,3 @@ |
... | @@ -327,9 +210,3 @@ |
|
|
|
|
|
Concernant les modifications portant sur la matrice, il faut intégrer
|
|
Concernant les modifications portant sur la matrice, il faut intégrer g.wi.wj, pour chaque segment sur la frontière de Robin. Si je considère g constant, je peux utiliser la formule intégrale(f) sur \[0,1\] <span dir="">\~</span> 1/6(f(0)+4f(1/2)+f(1)), qui est exacte sur les polynômes P2 que je considère ici. Après changement de variable pour se ramener au segment courant, cela revient à g\*longueur(segment)/6, si i est différent de j, et à g\*longueur(segment)/3 si i==j.
|
|
g.wi.wj, pour chaque segment sur la frontière de Robin. Si je considère
|
|
|
|
g constant, je peux utiliser la formule intégrale(f) sur \[0,1\] \~
|
|
|
|
1/6(f(0)+4f(1/2)+f(1)), qui est exacte sur les polynômes P2 que je
|
|
|
|
considère ici. Après changement de variable pour se ramener au segment
|
|
|
|
courant, cela revient à g\*longueur(segment)/6, si i est différent de j,
|
|
|
|
et à g\*longueur(segment)/3 si i==j.
|
|
|
|
|
|
|
... | @@ -335,3 +212,3 @@ |
... | @@ -335,3 +212,3 @@ |
|
|
|
|
|
*Modifications apportées à fem v5*
|
|
_Modifications apportées à fem v5_
|
|
|
|
|
... | @@ -337,6 +214,3 @@ |
... | @@ -337,6 +214,3 @@ |
|
|
|
|
|
Pour modifier la matrice globale, je n'ai pas trouvé de fonction
|
|
Pour modifier la matrice globale, je n'ai pas trouvé de fonction correspondante dans l'API de fem, j'ai donc rajouté la fonction Add2x2Matrice aux fichiers MatriceCreuse_tpl.hpp et MatriceCreuse.hpp, dont voici le code (clairement inspiré de la fonction operator+=)
|
|
correspondante dans l'API de fem, j'ai donc rajouté la fonction
|
|
|
|
Add2x2Matrice aux fichiers MatriceCreuse_tpl.hpp et MatriceCreuse.hpp,
|
|
|
|
dont voici le code (clairement inspiré de la fonction operator+=)
|
|
|
|
|
|
|
... | @@ -342,25 +216,15 @@ |
... | @@ -342,25 +216,15 @@ |
|
|
|
|
|
` template`<class R>
|
|
```
|
|
` MatriceCreuse`<R>` & MatriceProfile`<R>`::add2x2Matrice`
|
|
template<class R> MatriceCreuse<R> & MatriceProfile<R>::add2x2Matrice (int i0, int i1,R a00, R a01, R a11)
|
|
` (int i0, int i1,R a00, R a01, R a11) {`
|
|
{
|
|
` int i,j;`
|
|
int i,j;
|
|
` if (!D) { // matrice vide·`
|
|
if (!D) {
|
|
` cerr << "Big bug empty matrice not handled (yet) in add2x2Matrice" << endl;`
|
|
// matrice vide
|
|
` exit(1);`
|
|
cerr << "Big bug: empty matrice not handled (yet) in add2x2Matrice" << endl;
|
|
` }`
|
|
exit(1);
|
|
` D[i0] += a00;`
|
|
}
|
|
` D[i1] += a11;`
|
|
D[i0] += a00;
|
|
` `
|
|
D[i1] += a11;
|
|
` assert( i0 != i1 );`
|
|
|
|
` `
|
|
assert( i0 != i1 );
|
|
` i=i0; j=i1;`
|
|
|
|
` if (j < i) L[ pL[i+1] - (i-j) ] += a01;`
|
|
|
|
` else if (j > i) U[ pU[j+1] - (j-i) ] += a01;`
|
|
|
|
` `
|
|
|
|
` i=i1; j=i0;`
|
|
|
|
` if (j < i) L[ pL[i+1] - (i-j) ] += a01;`
|
|
|
|
` else if (j > i) U[ pU[j+1] - (j-i) ] += a01;`
|
|
|
|
` `
|
|
|
|
` return *this;`
|
|
|
|
` }`
|
|
|
|
|
|
|
... | @@ -366,3 +230,9 @@ |
... | @@ -366,3 +230,9 @@ |
|
|
|
|
|
*Tests*
|
|
i=i0; j=i1;
|
|
|
|
if (j<i) L[ pL[i+1] - (i-j) ] += a01;
|
|
|
|
else if (j>i) U[ pU[j+1] - (j-i) ] += a01;
|
|
|
|
|
|
|
|
i=i1; j=i0;
|
|
|
|
if (j<i) L[ pL[i+1] - (i-j) ] += a01;
|
|
|
|
else if (j>i) U[ pU[j+1] - (j-i) ] += a01;
|
|
|
|
|
... | @@ -368,9 +238,11 @@ |
... | @@ -368,9 +238,11 @@ |
|
|
|
|
|
Pour tester cette partie, j'ai utilisé le même exemple qu'avec les
|
|
return *this;
|
|
conditions de Neumann. J'impose toujours la température sur la frontière
|
|
}
|
|
intérieure (Dirichlet, donc). Je fixe une température extérieure
|
|
```
|
|
(TetaR=1000 dans cet exemple). La valeur de g se calcule facilement : g
|
|
|
|
= - 2\*R2/(TetaR-R2\*R2).
|
|
_Tests_
|
|
|
|
|
|
|
|
Pour tester cette partie, j'ai utilisé le même exemple qu'avec les conditions de Neumann. J'impose toujours la température sur la frontière intérieure (Dirichlet, donc). Je fixe une température extérieure (TetaR=1000 dans cet exemple). La valeur de g se calcule facilement : g = - 2\*R2/(TetaR-R2\*R2).
|
|
|
|
|
|
J'obtiens, avec le maillage fin :
|
|
J'obtiens, avec le maillage fin :
|
|
|
|
|
... | @@ -374,5 +246,5 @@ |
... | @@ -374,5 +246,5 @@ |
|
|
|
|
|
J'obtiens, avec le maillage fin :
|
|
J'obtiens, avec le maillage fin :
|
|
|
|
|
|
` Max des carres obtenu : 0.299266`
|
|
`Max des carres obtenu : 0.299266`
|
|
|
|
|
... | @@ -378,6 +250,5 @@ |
... | @@ -378,6 +250,5 @@ |
|
|
|
|
|
Qui paraît, encore une fois, raisonnable. Je note quand même que la
|
|
Qui paraît, encore une fois, raisonnable. Je note quand même que la précision est moindre que dans l'exemple avec Dirichlet+Neumann.
|
|
précision est moindre que dans l'exemple avec Dirichlet+Neumann.
|
|
|
|
|
|
|
|
Documents:
|
|
Documents:
|
|
|
|
|
... | @@ -381,12 +252,9 @@ |
... | @@ -381,12 +252,9 @@ |
|
|
|
|
|
Documents:
|
|
Documents:
|
|
|
|
|
|
- [les modifications apportées à
|
|
- [les modifications apportées à Laplace.cpp](http://www.freehackers.org/media/orzel/dea/DiffRobin.html)
|
|
Laplace.cpp](http://www.freehackers.org/media/orzel/dea/DiffRobin.html)
|
|
- [Le fichier complet](http://www.freehackers.org/media/orzel/dea/LaplaceRobin.cpp)
|
|
- [Le fichier
|
|
- [Le maillage fin utilisé](http://www.freehackers.org/media/orzel/dea/testfrontiere_big.msh)
|
|
complet](http://www.freehackers.org/media/orzel/dea/LaplaceRobin.cpp)
|
|
|
|
- [Le maillage fin
|
|
|
|
utilisé](http://www.freehackers.org/media/orzel/dea/testfrontiere_big.msh)
|
|
|
|
|
|
|
|
### Exemple concret en 2D, sans condition de robin
|
|
### Exemple concret en 2D, sans condition de robin
|
|
|
|
|
... | @@ -390,8 +258,7 @@ |
... | @@ -390,8 +258,7 @@ |
|
|
|
|
|
### Exemple concret en 2D, sans condition de robin
|
|
### Exemple concret en 2D, sans condition de robin
|
|
|
|
|
|
Pour traiter un exemple, j'ai choisi de modéliser la température d'une
|
|
Pour traiter un exemple, j'ai choisi de modéliser la température d'une pièce en L dont voici le maillage :
|
|
pièce en L dont voici le maillage :
|
|
|
|
|
|
|
|
![Exemple2d sans robin maillage.png](Exemple2d_sans_robin_maillage.png "Exemple2d sans robin maillage.png")
|
|
![Exemple2d sans robin maillage.png](Exemple2d_sans_robin_maillage.png "Exemple2d sans robin maillage.png")
|
|
|
|
|
... | @@ -395,10 +262,5 @@ |
... | @@ -395,10 +262,5 @@ |
|
|
|
|
|
![Exemple2d sans robin maillage.png](Exemple2d_sans_robin_maillage.png "Exemple2d sans robin maillage.png")
|
|
![Exemple2d sans robin maillage.png](Exemple2d_sans_robin_maillage.png "Exemple2d sans robin maillage.png")
|
|
|
|
|
|
L'intérieur représente l'air de la pièce, les trois petites surfaces
|
|
L'intérieur représente l'air de la pièce, les trois petites surfaces représentent des murs (oui, assez épais, disons qu'il s'agit d'un morceau de château..). Le bâtiment se prolonge sur la gauche et vers le bas, c'est pour cela que je n'ai pas mis de murs à ces endroits. Il y a deux fenêtres, une grande et une petite. Je n'ai pas modelisé de portes car c'est inutile vu les conditions utilisées.
|
|
représentent des murs (oui, assez épais, disons qu'il s'agit d'un
|
|
|
|
morceau de château..). Le bâtiment se prolonge sur la gauche et vers le
|
|
|
|
bas, c'est pour cela que je n'ai pas mis de murs à ces endroits. Il y a
|
|
|
|
deux fenêtres, une grande et une petite. Je n'ai pas modelisé de portes
|
|
|
|
car c'est inutile vu les conditions utilisées.
|
|
|
|
|
|
|
... | @@ -404,6 +266,5 @@ |
... | @@ -404,6 +266,5 @@ |
|
|
|
|
|
Bien entendu, l'air de la pièce et les murs n'ont pas la même
|
|
Bien entendu, l'air de la pièce et les murs n'ont pas la même conductivité.
|
|
conductivité.
|
|
|
|
|
|
|
|
Les conditions imposées sont les suivantes :
|
|
Les conditions imposées sont les suivantes :
|
|
|
|
|
... | @@ -407,6 +268,5 @@ |
... | @@ -407,6 +268,5 @@ |
|
|
|
|
|
Les conditions imposées sont les suivantes :
|
|
Les conditions imposées sont les suivantes :
|
|
|
|
|
|
- Température de 0 degré à l'extérieur, sur le mur et la fenêtre de
|
|
- Température de 0 degré à l'extérieur, sur le mur et la fenêtre de droite (Dirichlet)
|
|
droite (Dirichlet)
|
|
|
|
- Température de 20 degrés sur les murs intérieurs (Dirichlet)
|
|
- Température de 20 degrés sur les murs intérieurs (Dirichlet)
|
... | @@ -412,8 +272,7 @@ |
... | @@ -412,8 +272,7 @@ |
|
- Température de 20 degrés sur les murs intérieurs (Dirichlet)
|
|
- Température de 20 degrés sur les murs intérieurs (Dirichlet)
|
|
- Le mur et la fenêtre du haut sont baignés par le soleil (Condition
|
|
- Le mur et la fenêtre du haut sont baignés par le soleil (Condition de Neumann)
|
|
de Neumann)
|
|
|
|
|
|
|
|
Voici ce que j'obtiens:
|
|
Voici ce que j'obtiens:
|
|
|
|
|
|
![Exemple2d sans robin result.png](Exemple2d_sans_robin_result.png "Exemple2d sans robin result.png")
|
|
![Exemple2d sans robin result.png](Exemple2d_sans_robin_result.png "Exemple2d sans robin result.png")
|
|
|
|
|
... | @@ -415,9 +274,7 @@ |
... | @@ -415,9 +274,7 @@ |
|
|
|
|
|
Voici ce que j'obtiens:
|
|
Voici ce que j'obtiens:
|
|
|
|
|
|
![Exemple2d sans robin result.png](Exemple2d_sans_robin_result.png "Exemple2d sans robin result.png")
|
|
![Exemple2d sans robin result.png](Exemple2d_sans_robin_result.png "Exemple2d sans robin result.png")
|
|
|
|
|
|
On note que le gradient est bien plus grand dans les murs, qui jouent
|
|
On note que le gradient est bien plus grand dans les murs, qui jouent évidemment le rôle d'isolant par rapport à l'extérieur. On observe bien de quelle manière la fenêtre de droite fait passer le froid.
|
|
évidemment le rôle d'isolant par rapport à l'extérieur. On observe bien
|
|
|
|
de quelle manière la fenêtre de droite fait passer le froid.
|
|
|
|
|
|
|
... | @@ -423,7 +280,7 @@ |
... | @@ -423,7 +280,7 @@ |
|
|
|
|
|
*Exemple complet avec condition de robin*
|
|
_Exemple complet avec condition de robin_
|
|
|
|
|
|
![Exemple2d avec robin maillage.png](Exemple2d_avec_robin_maillage.png "Exemple2d avec robin maillage.png")
|
|
![Exemple2d avec robin maillage.png](Exemple2d_avec_robin_maillage.png "Exemple2d avec robin maillage.png")
|
|
|
|
|
|
![Exemple2d avec robin result.png](Exemple2d_avec_robin_result.png "Exemple2d avec robin result.png")
|
|
![Exemple2d avec robin result.png](Exemple2d_avec_robin_result.png "Exemple2d avec robin result.png")
|
|
|
|
|
... | @@ -425,10 +282,9 @@ |
... | @@ -425,10 +282,9 @@ |
|
|
|
|
|
![Exemple2d avec robin maillage.png](Exemple2d_avec_robin_maillage.png "Exemple2d avec robin maillage.png")
|
|
![Exemple2d avec robin maillage.png](Exemple2d_avec_robin_maillage.png "Exemple2d avec robin maillage.png")
|
|
|
|
|
|
![Exemple2d avec robin result.png](Exemple2d_avec_robin_result.png "Exemple2d avec robin result.png")
|
|
![Exemple2d avec robin result.png](Exemple2d_avec_robin_result.png "Exemple2d avec robin result.png")
|
|
|
|
|
|
La température est alors plus homogène dans la pièce (Regarder la
|
|
La température est alors plus homogène dans la pièce (Regarder la surface où la température est entre 20 et 18 degrés)
|
|
surface où la température est entre 20 et 18 degrés)
|
|
|
|
|
|
|
|
Documents:
|
|
Documents:
|
|
|
|
|
... | @@ -432,14 +288,10 @@ |
... | @@ -432,14 +288,10 @@ |
|
|
|
|
|
Documents:
|
|
Documents:
|
|
|
|
|
|
- [les modifications apportées à
|
|
- [les modifications apportées à Laplace.cpp](http://www.freehackers.org/media/orzel/dea/DiffProjet2d.html)
|
|
Laplace.cpp](http://www.freehackers.org/media/orzel/dea/DiffProjet2d.html)
|
|
- [Le fichier complet](http://www.freehackers.org/media/orzel/dea/LaplaceProjet2d.cpp)
|
|
- [Le fichier
|
|
- [Le maillage de la pièce](http://www.freehackers.org/media/orzel/dea/piece.msh)
|
|
complet](http://www.freehackers.org/media/orzel/dea/LaplaceProjet2d.cpp)
|
|
- [Le maillage de la pièce avec le radiateur](http://www.freehackers.org/media/orzel/dea/piecerobin.msh)
|
|
- [Le maillage de la
|
|
|
|
pièce](http://www.freehackers.org/media/orzel/dea/piece.msh)
|
|
|
|
- [Le maillage de la pièce avec le
|
|
|
|
radiateur](http://www.freehackers.org/media/orzel/dea/piecerobin.msh)
|
|
|
|
|
|
|
|
### Passage à la 3D
|
|
### Passage à la 3D
|
|
|
|
|
... | @@ -443,7 +295,5 @@ |
... | @@ -443,7 +295,5 @@ |
|
|
|
|
|
### Passage à la 3D
|
|
### Passage à la 3D
|
|
|
|
|
|
Il s'agit maintenant de faire la même chose, mais en 3D avec des
|
|
Il s'agit maintenant de faire la même chose, mais en 3D avec des tétraèdrisation P1-Lagrange. C'est loing d'être une petite modification locale à un fichier et un minimum de méthodologie était nécessaire.
|
|
tétraèdrisation P1-Lagrange. C'est loing d'être une petite modification
|
|
|
|
locale à un fichier et un minimum de méthodologie était nécessaire.
|
|
|
|
|
|
|
... | @@ -449,3 +299,3 @@ |
... | @@ -449,3 +299,3 @@ |
|
|
|
|
|
*Modifications portant sur le projet*
|
|
_Modifications portant sur le projet_
|
|
|
|
|
... | @@ -451,6 +301,3 @@ |
... | @@ -451,6 +301,3 @@ |
|
|
|
|
|
Dans un premier temps, j'ai recopié l'ensemble du répertoire, et effacé
|
|
Dans un premier temps, j'ai recopié l'ensemble du répertoire, et effacé tous les fichiers dont je n'avais pas besoin (comme par exemple Element_P2h.cpp ou BamgFreeFem.\*). Le fichier Makefile est modifié en conséquence.
|
|
tous les fichiers dont je n'avais pas besoin (comme par exemple
|
|
|
|
Element_P2h.cpp ou BamgFreeFem.\*). Le fichier Makefile est modifié en
|
|
|
|
conséquence.
|
|
|
|
|
|
|
... | @@ -456,13 +303,5 @@ |
... | @@ -456,13 +303,5 @@ |
|
|
|
|
|
Puis j'ai créé les classes R3 (déjà à peu près faite) et Tetraedre. J'ai
|
|
Puis j'ai créé les classes R3 (déjà à peu près faite) et Tetraedre. J'ai modifié l'existant pour qu'au lieu d'utiliser des points R2, des segments et des triangles, on utilise respectivement des points R3, des triangles et des tetraèdres. En particulier, j'ai trouvé pratique de ne pas du tout utiliser R2, et de refaire R3 from scratch. La première raison est que R3 héritait de R2 et cela soulevait de nombreux bugs (par exemple si l'opérateur produit scalaire n'est pas défini dans R3, le compilateur caste automatiquement et silencieusement les points sur des R2 et utilise le produit scalaire R2..). La deuxième raison est que cela permet, grace aux erreurs du compilateur, de trouver toutes les occurences de R2 à remplacer.
|
|
modifié l'existant pour qu'au lieu d'utiliser des points R2, des
|
|
|
|
segments et des triangles, on utilise respectivement des points R3, des
|
|
Ensuite j'ai modifié la fonction Mesh::read() pour être capable de lire les fichiers générés par Mefisto dans le cas 3D. J'ai utilisé le fichier hexaedre.msh pour valider cette partie.
|
|
triangles et des tetraèdres. En particulier, j'ai trouvé pratique de ne
|
|
|
|
pas du tout utiliser R2, et de refaire R3 from scratch. La première
|
|
|
|
raison est que R3 héritait de R2 et cela soulevait de nombreux bugs (par
|
|
|
|
exemple si l'opérateur produit scalaire n'est pas défini dans R3, le
|
|
|
|
compilateur caste automatiquement et silencieusement les points sur des
|
|
|
|
R2 et utilise le produit scalaire R2..). La deuxième raison est que cela
|
|
|
|
permet, grace aux erreurs du compilateur, de trouver toutes les
|
|
|
|
occurences de R2 à remplacer.
|
|
|
|
|
|
|
... | @@ -468,5 +307,5 @@ |
... | @@ -468,5 +307,5 @@ |
|
|
|
|
|
Ensuite j'ai modifié la fonction Mesh::read() pour être capable de lire
|
|
S'est alors posé le problème de FESpace. Cette classe, ainsi que celles associées, sont difficiles à comprendre et surtout à modifier. Ainsi, après plusieurs jours passés à me battre avec ces fichiers, et ayant constaté que ce dont je me servais dans FESpace était en fait directement issu de la classe Mesh, j'ai décidé de supprimer cet intermédiaire. Ce qui n'a posé aucun problème (ce qui ne signifie pas pour autant que cela ait été rapide). Par exemple le champs FESpace.NbOfDF est en fait TTh.nv, etc...
|
|
les fichiers générés par Mefisto dans le cas 3D. J'ai utilisé le fichier
|
|
|
|
hexaedre.msh pour valider cette partie.
|
|
Attention, la classe FESpace a un rôle dans fem-v5 En particulier, mais pas seulement, celui de gérer les Mortars. C'est parce que je limitais les possibilités du programme que j'ai pu faire cela.
|
|
|
|
|
... | @@ -472,10 +311,3 @@ |
... | @@ -472,10 +311,3 @@ |
|
|
|
|
|
S'est alors posé le problème de FESpace. Cette classe, ainsi que celles
|
|
Pour la fonction gradgrad(), j'ai besoin du gradient des fonctions chapeau sur les tétraèdres. Si on considère un sommet A d'un tétraèdre, alors, le gradient de la fonction chapeau valant 1 en A et 0 sur les autres sommets est un vecteur, constant sur le tetraedre, de direction la hauteur issue de la face opposée a A, et de longueur l'inverse de cette hauteur. Ce qui est realisé par la fonction
|
|
associées, sont difficiles à comprendre et surtout à modifier. Ainsi,
|
|
|
|
après plusieurs jours passés à me battre avec ces fichiers, et ayant
|
|
|
|
constaté que ce dont je me servais dans FESpace était en fait
|
|
|
|
directement issu de la classe Mesh, j'ai décidé de supprimer cet
|
|
|
|
intermédiaire. Ce qui n'a posé aucun problème (ce qui ne signifie pas
|
|
|
|
pour autant que cela ait été rapide). Par exemple le champs
|
|
|
|
FESpace.NbOfDF est en fait TTh.nv, etc...
|
|
|
|
|
|
|
... | @@ -481,12 +313,6 @@ |
... | @@ -481,12 +313,6 @@ |
|
|
|
|
|
Attention, la classe FESpace a un rôle dans fem-v5 En particulier, mais
|
|
```plaintext
|
|
pas seulement, celui de gérer les Mortars. C'est parce que je limitais
|
|
R3 Tetraedre::H( int i ) const
|
|
les possibilités du programme que j'ai pu faire cela.
|
|
{
|
|
|
|
assert( i>=0 ); assert( i<4 );
|
|
Pour la fonction gradgrad(), j'ai besoin du gradient des fonctions
|
|
|
|
chapeau sur les tétraèdres. Si on considère un sommet A d'un tétraèdre,
|
|
|
|
alors, le gradient de la fonction chapeau valant 1 en A et 0 sur les
|
|
|
|
autres sommets est un vecteur, constant sur le tetraedre, de direction
|
|
|
|
la hauteur issue de la face opposée a A, et de longueur l'inverse de
|
|
|
|
cette hauteur. Ce qui est realisé par la fonction
|
|
|
|
|
|
|
... | @@ -492,22 +318,11 @@ |
... | @@ -492,22 +318,11 @@ |
|
|
|
|
|
` R3 Tetraedre::H( int i ) const`
|
|
// si i est impair, on inverse c et b pour avoir les
|
|
` { assert( i>=0 ); assert( i<4 );`
|
|
// indices dans l'ordre direct
|
|
` `
|
|
R3 &D = *(vertices[ i ]),
|
|
` // si i est impair, on inverse c et b pour`
|
|
&C = *(vertices[ (i+1 + (i%2))%4 ]),
|
|
` // avoir les indices dans l ordre direct`
|
|
&B = *(vertices[ (i+2 - (i%2))%4 ]),
|
|
` R3 &D = *(vertices[ i ]),`
|
|
&A = *(vertices[ (i+3)%4 ]);
|
|
` &C = *(vertices[ (i+1 + (i%2))%4 ]),`
|
|
|
|
` &B = *(vertices[ (i+2 - (i%2))%4 ]),`
|
|
// check we took the coordinates in the right order
|
|
` &A = *(vertices[ (i+3)%4 ]);`
|
|
assert ( ((B-A)^(C-A),(D-A)) >0 );
|
|
` `
|
|
|
|
` // check we took the coordinates in the right order`
|
|
|
|
` assert ( ((B-A)^(C-A),(D-A)) >0 );`
|
|
|
|
` `
|
|
|
|
` // On cherche HD, avec H dans le plan ABC et HD perpendiculaire a ce plan`
|
|
|
|
` R3 h = ( B-A )^( C-A ); // normal a la face ABC`
|
|
|
|
` R norm = Norme2(h);;`
|
|
|
|
` h /= norm; // h est unitaire`
|
|
|
|
` h /= (6.* volume/norm); // on divise par la longueur de la hauteur`
|
|
|
|
` return h;`
|
|
|
|
` } `
|
|
|
|
|
|
|
... | @@ -513,9 +328,10 @@ |
... | @@ -513,9 +328,10 @@ |
|
|
|
|
|
J'ai reimplémenté les formules d'intégrations numériques sans utiliser
|
|
// On cherche HD, avec H dans le plan ABC et HD perpendiculaire a ce plan
|
|
celles de fem v5. Par curiosité, et aussi dans un soucis de clarté. En
|
|
R3 h = ( B-A )^( C-A ); // normal a la face ABC
|
|
effet, fem-v5 utilise trois fichiers (FormuleIntegration.cpp
|
|
R norm = Norme2(h);;
|
|
FormuleIntegration.hpp QuadratureFormular.hpp), les coefficients sont
|
|
h /= norm; // h est unitaire
|
|
normalisés (QuadratureFormular1d) ou pas (P_QuadratureFormular_T\*),
|
|
h /= (6.* volume/norm); // on divise par la longueur de la hauteur
|
|
l'implémentation utilise parfois des structures, parfois des tableaux ou
|
|
return h;
|
|
même des classes..
|
|
}
|
|
|
|
```
|
|
|
|
|
... | @@ -521,11 +337,3 @@ |
... | @@ -521,11 +337,3 @@ |
|
|
|
|
|
J'ai réussi à garder le fichier gibbs.cpp, qui contient un algorithme
|
|
J'ai reimplémenté les formules d'intégrations numériques sans utiliser celles de fem v5. Par curiosité, et aussi dans un soucis de clarté. En effet, fem-v5 utilise trois fichiers (FormuleIntegration.cpp FormuleIntegration.hpp QuadratureFormular.hpp), les coefficients sont normalisés (QuadratureFormular1d) ou pas (P_QuadratureFormular_T\*), l'implémentation utilise parfois des structures, parfois des tableaux ou même des classes..
|
|
pour renumeroter les éléments du maillage pour optimiser le skyline (et
|
|
|
|
donc la taille en mémoire) de la matrice creuse.
|
|
|
|
|
|
|
|
*Modifications portant sur le programme principal*
|
|
|
|
|
|
|
|
Quelques modifications triviales : les matrices diagonales des tenseurs
|
|
|
|
de conductivités ont maintenant 3 éléments, passage de area à volume
|
|
|
|
dans la fonction gradgrad(), on utilise plus FESpace..
|
|
|
|
|
|
|
... | @@ -531,6 +339,3 @@ |
... | @@ -531,6 +339,3 @@ |
|
|
|
|
|
Puis, pour chaque étape, on adapte à la 3D, en se basant sur notre
|
|
J'ai réussi à garder le fichier gibbs.cpp, qui contient un algorithme pour renumeroter les éléments du maillage pour optimiser le skyline (et donc la taille en mémoire) de la matrice creuse.
|
|
nouvelle infrastructure. Pour construire le second membre, on ne
|
|
|
|
travaille plus avec des triangles mais avec des tétraèdres et on utilise
|
|
|
|
une formule d'intégration 3D. Et Ainsi de suite...
|
|
|
|
|
|
|
... | @@ -536,3 +341,5 @@ |
... | @@ -536,3 +341,5 @@ |
|
|
|
|
|
*Tests*
|
|
_Modifications portant sur le programme principal_
|
|
|
|
|
|
|
|
Quelques modifications triviales : les matrices diagonales des tenseurs de conductivités ont maintenant 3 éléments, passage de area à volume dans la fonction gradgrad(), on utilise plus FESpace..
|
|
|
|
|
... | @@ -538,7 +345,3 @@ |
... | @@ -538,7 +345,3 @@ |
|
|
|
|
|
Vu l'ampleur des modifications apportées, j'ai prévu de nombreux tests,
|
|
Puis, pour chaque étape, on adapte à la 3D, en se basant sur notre nouvelle infrastructure. Pour construire le second membre, on ne travaille plus avec des triangles mais avec des tétraèdres et on utilise une formule d'intégration 3D. Et Ainsi de suite...
|
|
du plus simple au plus complet. Pour chaque test, j'ai un fichier (par
|
|
|
|
exemple donnees_dirichlet_uniforme.cpp), et selon le test que je veux
|
|
|
|
effectuer, j'inclus le fichier correspondant. Cela evite les multiples
|
|
|
|
\#if/#endif dans le code et le rends plus lisible.
|
|
|
|
|
|
|
... | @@ -544,5 +347,3 @@ |
... | @@ -544,5 +347,3 @@ |
|
|
|
|
|
Le premier test consiste à imposer une température nulle sur toutes les
|
|
_Tests_
|
|
faces. On test ainsi que le programme compile et link, et qu'au moins
|
|
|
|
sur un exemple aussi trivial, on obtient bien la bonne température.
|
|
|
|
|
|
|
... | @@ -548,6 +349,3 @@ |
... | @@ -548,6 +349,3 @@ |
|
|
|
|
|
Le deuxieme test (donnees_dirichletnul.cpp) impose une température nulle
|
|
Vu l'ampleur des modifications apportées, j'ai prévu de nombreux tests, du plus simple au plus complet. Pour chaque test, j'ai un fichier (par exemple donnees_dirichlet_uniforme.cpp), et selon le test que je veux effectuer, j'inclus le fichier correspondant. Cela evite les multiples <span dir="">#</span>if/#endif dans le code et le rends plus lisible.
|
|
au bord, mais avec un fOmega non nul. Il permet de tester la
|
|
|
|
construction du second membre, la construction et l'inversion de la
|
|
|
|
matrice.
|
|
|
|
|
|
|
... | @@ -553,7 +351,5 @@ |
... | @@ -553,7 +351,5 @@ |
|
|
|
|
|
Le troisième test est une fonction quelconque. J'ai pris
|
|
Le premier test consiste à imposer une température nulle sur toutes les faces. On test ainsi que le programme compile et link, et qu'au moins sur un exemple aussi trivial, on obtient bien la bonne température.
|
|
2.x.y.z-10.y.x^2+6.x.z^2 , qui n'est pas nulle sur le bord, et dont le
|
|
|
|
laplacien n'est pas nul non plus : cela permet de tester, en plus des
|
|
Le deuxieme test (donnees_dirichletnul.cpp) impose une température nulle au bord, mais avec un fOmega non nul. Il permet de tester la construction du second membre, la construction et l'inversion de la matrice.
|
|
tests précédents, les conditions au bords : Dirichlet, puis Neumann, et
|
|
|
|
enfin Robin/Fourier.
|
|
|
|
|
|
|
... | @@ -559,6 +355,3 @@ |
... | @@ -559,6 +355,3 @@ |
|
|
|
|
|
Enfin le test **donnees_x2y2z2.cpp** est l'exemple classique, et m'a
|
|
Le troisième test est une fonction quelconque. J'ai pris 2.x.y.z-10.y.x^2+6.x.z^2 , qui n'est pas nulle sur le bord, et dont le laplacien n'est pas nul non plus : cela permet de tester, en plus des tests précédents, les conditions au bords : Dirichlet, puis Neumann, et enfin Robin/Fourier.
|
|
permis de comparer les resultats obtenus avec d'autres eleves.
|
|
|
|
|
|
|
|
*Résultats*
|
|
|
|
|
|
|
... | @@ -564,6 +357,5 @@ |
... | @@ -564,6 +357,5 @@ |
|
|
|
|
|
- **donnees_dirichlet_uniforme.cpp** : j'obtiens exactement la
|
|
Enfin le test **donnees_x2y2z2.cpp** est l'exemple classique, et m'a permis de comparer les resultats obtenus avec d'autres eleves.
|
|
temperature attendue.
|
|
|
|
- **donnees_dirichletnul.cpp** : la aussi j'obtiens exactement la
|
|
_Résultats_
|
|
temperature attendue.
|
|
|
|
|
|
|
... | @@ -569,7 +361,4 @@ |
... | @@ -569,7 +361,4 @@ |
|
|
|
|
|
` Max des carres obtenu : 0.000000`
|
|
- **donnees_dirichlet_uniforme.cpp** : j'obtiens exactement la temperature attendue.
|
|
` sqrt : 0.000000`
|
|
- **donnees_dirichletnul.cpp** : la aussi j'obtiens exactement la temperature attendue.
|
|
` Min,Max des tetas obtenu : 0.000000, 1.926837`
|
|
|
|
` Min,Max des tetas reels : 0.000000, 1.926837`
|
|
|
|
` Taux d'erreur : 0.000000`
|
|
|
|
|
|
|
... | @@ -575,4 +364,3 @@ |
... | @@ -575,4 +364,3 @@ |
|
|
|
|
|
- **donnees_quelconque.cpp** : donnees de Dirichlet : La aussi
|
|
`Max des carres obtenu : 0.000000` `sqrt : 0.000000` `Min,Max des tetas obtenu : 0.000000, 1.926837` `Min,Max des tetas reels : 0.000000, 1.926837` `Taux d'erreur : 0.000000`
|
|
j'obtiens exactement la temperature attendue.
|
|
|
|
|
|
|
... | @@ -578,7 +366,5 @@ |
... | @@ -578,7 +366,5 @@ |
|
|
|
|
|
` Max des carres obtenu : 0.000000`
|
|
- **donnees_quelconque.cpp** : donnees de Dirichlet : La aussi j'obtiens exactement la temperature attendue.
|
|
` sqrt : 0.000000`
|
|
|
|
` Min,Max des tetas obtenu : -100.000000, 60.000000`
|
|
`Max des carres obtenu : 0.000000` `sqrt : 0.000000` `Min,Max des tetas obtenu : -100.000000, 60.000000` `Min,Max des tetas reels : -100.000000, 60.000000` `Taux d'erreur : 0.000000`
|
|
` Min,Max des tetas reels : -100.000000, 60.000000`
|
|
|
|
` Taux d'erreur : 0.000000`
|
|
|
|
|
|
|
... | @@ -584,4 +370,3 @@ |
... | @@ -584,4 +370,3 @@ |
|
|
|
|
|
- **donnees_quelconque.cpp** : donnees de Dirichlet, de Neumann et de
|
|
- **donnees_quelconque.cpp** : donnees de Dirichlet, de Neumann et de Robin/Fourier : (c'est le cas le plus difficile)
|
|
Robin/Fourier : (c'est le cas le plus difficile)
|
|
|
|
|
|
|
... | @@ -587,10 +372,5 @@ |
... | @@ -587,10 +372,5 @@ |
|
|
|
|
|
` Max des carres obtenu : 62.684211`
|
|
`Max des carres obtenu : 62.684211` `sqrt : 7.917336` `Min,Max des tetas obtenu : -96.800396, 53.333334` `Min,Max des tetas reels : -100.000000, 60.000000` `Stats under,toomuch : 830, 54` `Taux d'erreur : 4.948335`
|
|
` sqrt : 7.917336`
|
|
|
|
` Min,Max des tetas obtenu : -96.800396, 53.333334`
|
|
|
|
` Min,Max des tetas reels : -100.000000, 60.000000`
|
|
|
|
` Stats under,toomuch : 830, 54`
|
|
|
|
` Taux d'erreur : 4.948335`
|
|
|
|
|
|
|
|
### Exemple 3D
|
|
### Exemple 3D
|
|
|
|
|
... | @@ -594,12 +374,9 @@ |
... | @@ -594,12 +374,9 @@ |
|
|
|
|
|
### Exemple 3D
|
|
### Exemple 3D
|
|
|
|
|
|
Pour l'exemple 3D, j'ai voulu modéliser la température de l'eau d'un
|
|
Pour l'exemple 3D, j'ai voulu modéliser la température de l'eau d'un chauffe-eau, tel que ceux utilisés pour faire du thé, du café.. J'ai donc modélisé sous Mefisto un cylindre (le contenant), et un hexaèdre oblong (résistance chauffante).
|
|
chauffe-eau, tel que ceux utilisés pour faire du thé, du café.. J'ai
|
|
|
|
donc modélisé sous Mefisto un cylindre (le contenant), et un hexaèdre
|
|
|
|
oblong (résistance chauffante).
|
|
|
|
|
|
|
|
![Exemple3d.cylindre.png](Exemple3d.cylindre.png "Exemple3d.cylindre.png")
|
|
![Exemple3d.cylindre.png](Exemple3d.cylindre.png "Exemple3d.cylindre.png")
|
|
|
|
|
|
![Exemple3d.resistance.png](Exemple3d.resistance.png "Exemple3d.resistance.png")
|
|
![Exemple3d.resistance.png](Exemple3d.resistance.png "Exemple3d.resistance.png")
|
|
|
|
|
... | @@ -601,12 +378,7 @@ |
... | @@ -601,12 +378,7 @@ |
|
|
|
|
|
![Exemple3d.cylindre.png](Exemple3d.cylindre.png "Exemple3d.cylindre.png")
|
|
![Exemple3d.cylindre.png](Exemple3d.cylindre.png "Exemple3d.cylindre.png")
|
|
|
|
|
|
![Exemple3d.resistance.png](Exemple3d.resistance.png "Exemple3d.resistance.png")
|
|
![Exemple3d.resistance.png](Exemple3d.resistance.png "Exemple3d.resistance.png")
|
|
|
|
|
|
J'ai triangulé ces deux surfaces..., j'ai 'amelioré' (option 30 du menu
|
|
J'ai triangulé ces deux surfaces..., j'ai 'amelioré' (option 30 du menu surfaces) ces deux surfaces. J'ai ensuite créé un volume (option 8) avec ces deux surfaces fermées. Puis j'ai essayé de tétraedriser ce volume grace à l'option 9 du menu surface. Je n'ai jamais reussi. Je me suis battu pendant une semaine, et jusqu'a 5h du matin la veille de la soutenance mais je n'obtient que "TABLEAU PTXYZD SATURE".
|
|
surfaces) ces deux surfaces. J'ai ensuite créé un volume (option 8) avec
|
|
|
|
ces deux surfaces fermées. Puis j'ai essayé de tétraedriser ce volume
|
|
|
|
grace à l'option 9 du menu surface. Je n'ai jamais reussi. Je me suis
|
|
|
|
battu pendant une semaine, et jusqu'a 5h du matin la veille de la
|
|
|
|
soutenance mais je n'obtient que "TABLEAU PTXYZD SATURE".
|
|
|
|
|
|
|
... | @@ -612,5 +384,3 @@ |
... | @@ -612,5 +384,3 @@ |
|
|
|
|
|
J'ai essayé avec l'hexaèdre seul, j'ai essayé avec une sphère, j'ai
|
|
J'ai essayé avec l'hexaèdre seul, j'ai essayé avec une sphère, j'ai essayé tous les paramètres possibles pour cette option 9. C'est un echec.
|
|
essayé tous les paramètres possibles pour cette option 9. C'est un
|
|
|
|
echec.
|
|
|
|
|
|
|
... | @@ -616,5 +386,2 @@ |
... | @@ -616,5 +386,2 @@ |
|
|
|
|
|
**UPDATE** M.Perronnet m'a expliqué le problème : la surface inférieur
|
|
**UPDATE :** M.Perronnet m'a expliqué le problème : la surface inférieure de l'hexaèdre de la résistance est confondu avec le disque inférieur du cylindre, et cela pose problème à Mefisto. A la rigueur, si le maillage correspondait, cela serait peut-être passé... |
|
de l'hexaèdre de la résistance est confondu avec le disque inférieur du
|
|
\ No newline at end of file |
|
cylindre, c'est ce qui pose problème à Mefisto. A la rigueur, si le
|
|
|
|
maillage correspondait, cela serait peut-être passé... |
|
|