Travail à effectuer pour simuler le mouvement d'un fluide en utilisant la
méthode
SPH
- Les paramètres du fluide sont mis dans les
fichiers de données de l'application qui se trouvent dans le répertoire
gkit2light/animationphys/exec.
Affichage de l'objet simulé
- Les appels pour
effectuer l'affichage du fluide considéré comme un ensemble de particules
(sphères) en mouvement sont effectués dans la fonction
Viewer::render().
- Juste à comprendre.
Initialisation de l'objet simulé
- La méthode
void ObjetSimuleSPH::initObjetSimule() a
été implémentée.
- Comprenez-la. Vous pouvez la modifier.
Méthode se trouvant dans le fichier
ObjetSimuleSPH.cpp
Calcul des densités des particules
- Complétez la méthode
void ObjetSimuleSPH::CalculDensite()
permettant de calculer la densité de
chaque particule du fluide.
Méthode
se trouvant dans le fichier
ObjetSimuleSPH.cpp.
Boucle de la simulation
- La méthode
ObjetSimuleSPH::Simulation()
a été implémentée. Elle
se trouve dans le fichier ObjetSimuleSPH.cpp.
- Il reste à compléter le code des différentes
méthodes appelées.
Calcul des forces d'interaction entre particules
- Complétez la méthode
void ObjetSimuleSPH::CalculInteraction(float visco)
permettant de calculer les interactions
qu'il y
a entre deux particules i et j, dans le cas où celles-ci rentrent en interaction
l'une avec l'autre.
- Nous ferons directement le calcul de fij / rho_i pour la particule i.
Méthode
se trouve dans le fichier
ObjetSimuleSPH.cpp.
Calcul des vitesses et position
- Comme nous faisons directement le calcul des forces d'interaction entre les particules i
et
j divisées par la densité de la particule i (soit fij / rho_i), nous
obtenons pour le calcul des accélérations :
// On a calcule dans Force[i] : fij / rho_i
// Il ne reste qu'à ajouter le vecteur g de la gravité
A[i] = Force[i] + g;
Calcul de collision
- On considère que le fluide se trouve dans une boite
- Il faut donc gérer les collisions entre les différentes frontières
de
la boite que vous définirez
- Implémentez la méthode
void ObjetSimuleSPH::Collision()
:
méthode
se trouvant dans le fichier ObjetSimuleSPH.cpp.
- Elle peut utiliser la méthode
void ObjetSimuleFluide::applyBoxCollision(int i) mise dans
ObjetSimuleFluide.cpp.