Simulation d'un fluide avec la méthode SPH

  • Objectif : Implémentation de la simulation d'un fluide représenté par des particules
  • Modélisation du fluide : Les paramètres du fluide sont mis dans les fichiers de données de l'application qui se trouvent dans le répertoire gkit2light/src/master_MecaSim/exec.
  • Travail à effectuer :
    • Complétez le code des différentes méthodes appelées dans ObjetSimuleSPH::Simulation(..) : méthodes se trouvant dans le fichier CalculsSPH.cpp

Récupération de la mise à jour de la base de code

  • Il faut récupérer les modifications de la base Git - ajout des fichiers relatifs à une simulation de fluide basée SPH (ObjetSimuleSPH.h, ObjetSimuleSPH.cpp, CalculsSPH.cpp) et modifications de certains fichiers (Viewer.cpp, Viewer-init.cpp, Param.cpp, etc.)
git pull

Calcul des densités des particules

  • Complétez la méthode suivante permettant de calculer la densité de chaque particule du fluide.
void ObjetSimuleSPH::CalculDensite(){}

Calcul des forces d'interaction entre particules

  • Complétez la méthode suivante 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.
void ObjetSimuleSPH::CalculInteraction(float visco)

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 devons modifier légèrement le solveur dans le cas où nous simulons un fluide par la méthode SPH. Ci-dessous la modification à apporter :
void SolveurExpl::CalculAccel_ForceGravite(...){
// 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
void ObjetSimuleSPH::CollisionPlan()