04 BigFloat
In this example, we demonstrate how to compute with BigFloat
.
# The basic setup is same with example-01
using AstroIO
using AstroPlot
using AstroPlot.ColorSchemes
using Colors
using CSV, DataFrames
using Plots
pyplot() # Need PyPlot to be installed
using AstroNbodySim
using PhysicalParticles
using Unitful, UnitfulAstro
astro()
mkpathIfNotExist("output")
astro()
G = Constant(BigFloat, uAstro).G
mass = BigFloat("1.0e10")u"Msun"
D = BigFloat("2.0")u"kpc"
binary_orbit_period(mass, D) = 2 * pi * sqrt(0.5 * D^3 / G / mass)
binary_rot_vel(mass, D) = sqrt(G * mass / D / 2.0)
vel = binary_rot_vel(mass, D)
T = binary_orbit_period(mass, D)
@info "Estimated Period: $(T)"
@info "Estimated Rotation Vel: $(vel)"
data = StructArray(Star(BigFloat, Int, uAstro, id = i) for i in 1:2)
data.Pos[1] = PVector(+0.5*BigFloat(D), BigFloat(0.0)*u"kpc", BigFloat(0.0)*u"kpc")
data.Pos[2] = PVector(-0.5*BigFloat(D), BigFloat(0.0)*u"kpc", BigFloat(0.0)*u"kpc")
data.Vel[1] = PVector(BigFloat(0.0)*u"kpc/Gyr", +BigFloat(vel), BigFloat(0.0)*u"kpc/Gyr")
data.Vel[2] = PVector(BigFloat(0.0)*u"kpc/Gyr", -BigFloat(vel), BigFloat(0.0)*u"kpc/Gyr")
data.Mass .= mass
TimeEnd = 0.030u"Gyr"
TimeStep = 0.00002u"Gyr"
TimeBetweenSnapshots = 0.0005u"Gyr"
big = Simulation(
deepcopy(data);
TimeEnd,
TimeBetweenSnapshots,
TimeStep,
OutputDir = "output/BigFloat",
constants = Constant(BigFloat, uAstro),
ZeroValues = ZeroValue(BigFloat, uAstro),
ForceSofteningTable = [BigFloat("1.0e-4")*u"kpc" for i in 1:6],
)
compute_force(big)
compute_potential(big)
display(big.simdata.Acc)
display(big.simdata.Potential)
run(big)
display(big.simdata.Pos)