Michal-Szczygiel / fluid_simulation

A simple implementation of advection (without a diffusion term) in a randomly generated 2-dimensional carrier field.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

O projekcie:

Niniejszy projekt stanowi prostą implementację modelu adwekcji (bez członu dyfuzji) w losowo generowanym 2-wymiarowym polu nośnym. Do całkowania równania zastosowano prosty ale za to dość stabilny schemat typu Upwind. Nośne pole wektorowe generowano poprzez wyznaczenie rotacji z 2-wymiarowego pola skalarnego będącego obrazem szumu typu Super Simplex (opisana metoda).

Jump start:

W katalogu 'bin' znajdują się prekompilowane programy (Windows x86-64, Linux x86-64). Program korzysta z plików konfiguracyjnych .json, aby wykonać pełne wywołanie przykładowej symulacji użyj: './fluid_simulation config.json'. Dołączony plik konfiguracyjny 'config.json' zawiera następującje klucze (wszystkie klucze są wymagane):

  • mass_distr_file_path - ścieżka do pliku graficznego z początkowym rozkładem masy (obsługiwane są popularne formaty graficzne jak .bmp, .png, .jpeg ...),
  • output_directory_path - ścieżka do folderu na pliki wynikowe (kolejne klatki symulacji zapisane w formacie .png),
  • frames_number - liczba generowanych klatek,
  • simulation_factor - mnożnik szybkości symulacji,
  • target_resolution - docelowa rozdzielczość generowanych klatek (obsługiwane rozdzielczości: 480, 720, 1080, 1440, 2160),
  • flow_field_scale - skalowanie pola wektorowego (aby otrzymać "gęste" pole wektorowe (z dużą ilościa małych wirów) zmniejsz ten parametr),
  • dynamize_flow_field - randomizacja pola wektorowego w trakcie symulacji (symulacja dość powolna w przypadku 'true'),
  • randomize_flow_field - randomizacja początkowego stanu pola wektorowego

Wygenerowane klatki można złożyć w animację np. przy użyciu 'Edytora wideo' (Windows).

Efekt działania programu:

Początkowy rozkład masy pochodzi z pliku graficznego (w tym przypadku była to bitmapa przygotowana w MS Paint)

Początkowym rozkładem masy może być dowolny obraz 🎲

About

A simple implementation of advection (without a diffusion term) in a randomly generated 2-dimensional carrier field.


Languages

Language:Rust 100.0%