Skip to content

Simple fluid simulation using Finite Differences Method in C++

Notifications You must be signed in to change notification settings

jzuern/fluid-demo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Zum Ausführen des Programms benötigt:

- OpenMP Unterstützung
- GnuPlot (Header sind in Programm-Ordner enthalten)


Kurze Beschreibung:

Dieses Programm dient als kleine Demo einer simplen Fluidsimulation. Hierzu wird eine Fluidbox mit beliebig zu wählenden Randbedinungen betrachtet (in diesem Fall wurden 3 Jets, die aus dem unteren Rand der Box strömen, implementiert). Mit dem Starten des Programms kann an einer beliebigen Stelle der Box mit einem Mausklick ein rundes Hindernis für die Strömung eingebracht werden. Dieses interagiert bidirektional mit der Strömung (-> Objekt beeinflusst Strömung und Strömung beeinflusst die Bewegung des Objekts). Zusätzlich steht es unter dem Einfluss der Schwerkraft.

Es wurden stark vereinfachte Navier-Stokes Gleichungen für die Simulation der Fluidmechanik verwendet. Es handelt sich um einen sehr einfachen Solver, wie er bspw. in Computerspielen implementiert werden kann, wo primär der Fokus auf ansprechender und fluid-ähnlicher Optik und weniger auf einer exakter Lösung der Gleichungen liegt.

In der header-Datei lassen sich Simulationsparameter wie: Zeitschrittgröße und Größe der Simulationsbox, sowie Fluid-Parameter wie Viskosität und Diffusivität frei einstellen.

Das Grundgerüst des Solvers stammt aus einem ensprechenden Paper zu dem Thema. Alles weitere (Visualisierung, Maus-Interaktion, Fluid-Objekt-Interaktion, Parallelisierung,...) stammt von mir.


Implementierung:

Das Programm besteht aus 6 Dateien:

- fluidDemo.cpp: Enthält main-function des Programms, wo die Simulationsschleife ausgeführt wird, und einige inline Funktionen
- fluidFuncs.cpp: Enthält die für die Fluidmechanik benötigten Algorithmen
- Obstacle.cpp,Obstacle.h: Header und Klassenkörper der Klasse Obstacle. Gemäß eines OO-Ansatzes wurde das sich bewegende Objekt im Fluid als Instanz einer Klasse Obstacle implementiert
- defines.h: Header des kompletten Programms mit Funktion-Deklarationen, Makro-Definition, Einstellen der Simulationsparameter und setzen globaler Variablen.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

To compile and run the programm you will need:
- OpenMP support
- GnuPlot (header file is included in source)

Short description:
This program serves as a small demo of a simple fluid simulation.
Heavily simplified Navier Stokes equations were used to model the fluid behavior.
The header.h file contains simulation parameters such as time step size or fluid viscosity.

About

Simple fluid simulation using Finite Differences Method in C++

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published