diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/ansi_terminal.adb | 15 | ||||
-rw-r--r-- | src/ansi_terminal.ads | 9 | ||||
-rw-r--r-- | src/datatypes.adb | 8 | ||||
-rw-r--r-- | src/datatypes.ads | 9 | ||||
-rw-r--r-- | src/fluid_simulator.adb | 37 |
5 files changed, 63 insertions, 15 deletions
diff --git a/src/ansi_terminal.adb b/src/ansi_terminal.adb index c356c21..8e47d06 100644 --- a/src/ansi_terminal.adb +++ b/src/ansi_terminal.adb @@ -1,10 +1,18 @@ + +-- Programmed by Jedidiah Barber +-- Licensed under the Sunset License v1.0 + +-- See license.txt for further details + + with Ada.Characters.Latin_1, Ada.Strings.Fixed, Ada.Text_IO; + package body ANSI_Terminal is package Latin renames Ada.Characters.Latin_1; @@ -60,8 +68,10 @@ package body ANSI_Terminal is X, Y : in Integer) return String is - Average_Density : Natural := Integer (Quantity'Ceiling (Input (X, Y).Density / 4.0)); - Bit_Index : Positive := Integer (Input (X, Y).Index) + 1; + Average_Density : constant Natural := + Integer (Quantity'Ceiling (Input (X, Y).Density / 4.0)); + Bit_Index : constant Positive := + Integer (Input (X, Y).Index) + 1; Choice : Natural; begin case Average_Density is @@ -121,3 +131,4 @@ package body ANSI_Terminal is end ANSI_Terminal; + diff --git a/src/ansi_terminal.ads b/src/ansi_terminal.ads index 027f771..9167f1f 100644 --- a/src/ansi_terminal.ads +++ b/src/ansi_terminal.ads @@ -1,8 +1,16 @@ + +-- Programmed by Jedidiah Barber +-- Licensed under the Sunset License v1.0 + +-- See license.txt for further details + + with Datatypes; + package ANSI_Terminal is function Clear_Screen @@ -39,3 +47,4 @@ private end ANSI_Terminal; + diff --git a/src/datatypes.adb b/src/datatypes.adb index 64ff017..30f2d86 100644 --- a/src/datatypes.adb +++ b/src/datatypes.adb @@ -1,4 +1,11 @@ + +-- Programmed by Jedidiah Barber +-- Licensed under the Sunset License v1.0 + +-- See license.txt for further details + + package body Datatypes is @@ -13,3 +20,4 @@ package body Datatypes is end Datatypes; + diff --git a/src/datatypes.ads b/src/datatypes.ads index 50d21f9..403bf0e 100644 --- a/src/datatypes.ads +++ b/src/datatypes.ads @@ -1,9 +1,17 @@ + +-- Programmed by Jedidiah Barber +-- Licensed under the Sunset License v1.0 + +-- See license.txt for further details + + with Ada.Numerics.Generic_Complex_Types, Ada.Containers.Vectors; + package Datatypes is type Quantity is digits 18; @@ -31,3 +39,4 @@ package Datatypes is end Datatypes; + diff --git a/src/fluid_simulator.adb b/src/fluid_simulator.adb index 4f33a2f..b13f107 100644 --- a/src/fluid_simulator.adb +++ b/src/fluid_simulator.adb @@ -1,4 +1,11 @@ + +-- Programmed by Jedidiah Barber +-- Licensed under the Sunset License v1.0 + +-- See license.txt for further details + + with Datatypes, @@ -14,6 +21,7 @@ use type Datatypes.Plane.Complex; + procedure Fluid_Simulator is package ANSI renames ANSI_Terminal; @@ -87,19 +95,21 @@ procedure Fluid_Simulator is Rij : Quantity; begin for P of Store loop - P.Acceleration := Gravity_Factor; - for Q of Store loop - Displacement := P.Place - Q.Place; - Rij := Plane.Modulus (Displacement); - if Rij < Particle_Radius then - Pressure := (P.Density + Q.Density - 2.0 * P0) * - Pressure_Factor * Displacement; - Viscosity := (P.Velocity - Q.Velocity) * Viscosity_Factor; - P.Acceleration := P.Acceleration + - Plane.Compose_From_Cartesian (1.0 - Rij / Particle_Radius) / - P.Density * (Pressure - Viscosity); - end if; - end loop; + if not P.Solid then + P.Acceleration := Gravity_Factor; + for Q of Store loop + Displacement := P.Place - Q.Place; + Rij := Plane.Modulus (Displacement); + if Rij < Particle_Radius then + Pressure := (P.Density + Q.Density - 2.0 * P0) * + Pressure_Factor * Displacement; + Viscosity := (P.Velocity - Q.Velocity) * Viscosity_Factor; + P.Acceleration := P.Acceleration + + Plane.Compose_From_Cartesian (1.0 - Rij / Particle_Radius) / + P.Density * (Pressure - Viscosity); + end if; + end loop; + end if; end loop; end Calculate_Interaction; @@ -150,3 +160,4 @@ begin end Fluid_Simulator; + |