numerics
Loading...
Searching...
No Matches
nbody::NBodySim Struct Reference

#include <nbody.hpp>

Public Member Functions

void reset (Scenario s)
 Reset to a preset scenario.
 
void step (double dt)
 Advance by exactly one time step dt.
 
std::vector< std::pair< int, int > > check_merges ()
 
int n () const
 
double kinetic_energy () const
 
double potential_energy () const
 
double total_energy () const
 
double energy_drift () const
 Relative energy drift since reset: (E - E0) / |E0|.
 
void make_accel (const num::Vector &pos, num::Vector &acc) const
 Fill acc from current positions (gravitational acceleration on each body).
 

Public Attributes

std::vector< Bodybodies
 
num::Vector q
 Positions: [x0,y0, x1,y1, ...].
 
num::Vector v
 Velocities: [vx0,vy0, vx1,vy1, ...].
 
double t = 0.0
 
double G = 1.0
 
double E0 = 0.0
 Initial total energy (for drift tracking)
 
double soft = 1e-3
 Softening length (avoids singularities)
 
bool use_verlet = true
 true = Verlet (symplectic), false = RK4
 
bool enable_merges = false
 true = check_merges() is active (Galaxy scenario)
 

Detailed Description

Definition at line 52 of file nbody.hpp.

Member Function Documentation

◆ check_merges()

std::vector< std::pair< int, int > > nbody::NBodySim::check_merges ( )

Check all pairs for contact; merge overlapping bodies. Returns the list of (removed_idx, swapped_from_idx) operations in order so the caller can mirror them on any parallel index array (e.g. trails).

Definition at line 118 of file main.cpp.

References bodies, n(), q, and v.

Referenced by main().

◆ energy_drift()

double nbody::NBodySim::energy_drift ( ) const
inline

Relative energy drift since reset: (E - E0) / |E0|.

Definition at line 82 of file nbody.hpp.

References E0, and total_energy().

Referenced by main().

◆ kinetic_energy()

double nbody::NBodySim::kinetic_energy ( ) const

Definition at line 70 of file main.cpp.

References bodies, n(), and v.

Referenced by total_energy().

◆ make_accel()

void nbody::NBodySim::make_accel ( const num::Vector pos,
num::Vector acc 
) const

Fill acc from current positions (gravitational acceleration on each body).

Definition at line 53 of file main.cpp.

References num::BasicVector< T >::begin(), bodies, num::BasicVector< T >::end(), G, n(), and soft.

Referenced by step().

◆ n()

int nbody::NBodySim::n ( ) const
inline

Definition at line 75 of file nbody.hpp.

References bodies.

Referenced by check_merges(), kinetic_energy(), main(), make_accel(), potential_energy(), and step().

◆ potential_energy()

double nbody::NBodySim::potential_energy ( ) const

Definition at line 77 of file main.cpp.

References bodies, G, n(), q, and soft.

Referenced by total_energy().

◆ reset()

void nbody::NBodySim::reset ( Scenario  s)

Reset to a preset scenario.

Definition at line 165 of file main.cpp.

References nbody::BinaryPlus, bodies, E0, enable_merges, nbody::Figure8, G, q, soft, nbody::SolarSystem, t, total_energy(), and v.

Referenced by main().

◆ step()

void nbody::NBodySim::step ( double  dt)

Advance by exactly one time step dt.

Definition at line 89 of file main.cpp.

References make_accel(), n(), num::ode_rk4(), num::ode_verlet(), q, t, use_verlet, and v.

Referenced by main().

◆ total_energy()

double nbody::NBodySim::total_energy ( ) const
inline

Definition at line 79 of file nbody.hpp.

References kinetic_energy(), and potential_energy().

Referenced by energy_drift(), and reset().

Member Data Documentation

◆ bodies

std::vector<Body> nbody::NBodySim::bodies

Definition at line 53 of file nbody.hpp.

Referenced by check_merges(), kinetic_energy(), main(), make_accel(), n(), potential_energy(), and reset().

◆ E0

double nbody::NBodySim::E0 = 0.0

Initial total energy (for drift tracking)

Definition at line 58 of file nbody.hpp.

Referenced by energy_drift(), and reset().

◆ enable_merges

bool nbody::NBodySim::enable_merges = false

true = check_merges() is active (Galaxy scenario)

Definition at line 62 of file nbody.hpp.

Referenced by main(), and reset().

◆ G

double nbody::NBodySim::G = 1.0

Definition at line 57 of file nbody.hpp.

Referenced by make_accel(), potential_energy(), and reset().

◆ q

num::Vector nbody::NBodySim::q

Positions: [x0,y0, x1,y1, ...].

Definition at line 54 of file nbody.hpp.

Referenced by check_merges(), main(), potential_energy(), reset(), and step().

◆ soft

double nbody::NBodySim::soft = 1e-3

Softening length (avoids singularities)

Definition at line 59 of file nbody.hpp.

Referenced by make_accel(), potential_energy(), and reset().

◆ t

double nbody::NBodySim::t = 0.0

Definition at line 56 of file nbody.hpp.

Referenced by main(), reset(), and step().

◆ use_verlet

bool nbody::NBodySim::use_verlet = true

true = Verlet (symplectic), false = RK4

Definition at line 61 of file nbody.hpp.

Referenced by main(), and step().

◆ v

num::Vector nbody::NBodySim::v

Velocities: [vx0,vy0, vx1,vy1, ...].

Definition at line 55 of file nbody.hpp.

Referenced by check_merges(), kinetic_energy(), reset(), and step().


The documentation for this struct was generated from the following files: