Skip to content

White Dwarf Binary

Hyun Lim edited this page Aug 31, 2020 · 6 revisions

Problem description

The merging of compact objects, such as neutron stars (NSs) and white dwarfs (WDs), is an interesting phenomenon for study in astrophysics. Here, we present a binary and example of a binary white dwarf (BWD) simulation using FleCSPH.

Generate initial data

To set up the system, we begin by initializing two individual stars. For this example, we consider 0.45 and 0.75 solar mass WDs. Provide radial profiles for the WDs with the following normalized columns: r/Rtot, rho*Rtot^3/Mtot, m/Mtot, and (drho/dr)*Rtot^4/Mtot. Radial profile can be found in here (You can download this file or create WD_M0.49_prof.dat by yourself). Create input_star1.par using below parameters:

#
# White Dwarf
# Initialization
# Use ./sedov_3d_generator <this_file>.par
#
  initial_data_prefix = "wd_0.49_initial"
  # geometry:
  domain_type        = 1                    # 0:box, 1:sphere
  sphere_radius      = 9.824616359799e+08 
  density_profile    = "from file"
  input_density_file = "WD_M0.49_prof.dat"
  # icosahedra lattice with small perturbations
  lattice_nx = 59                          # particle lattice dimension
  lattice_type = 4                         # 0:rectangular, 1:hcp, 2:fcc, 3:icosahedral
  lattice_perturbation_amplitude = 0.10     # in units of sm. length
  # equation of state type and parameters
  eos_type = "white dwarf"
  # density and pressure for relaxation stage
  rho_initial = 1.822425000000e+06
  pressure_initial = 6.665335965511e+22
  # since we only need spherical distribution of particles,
  # set Sedov energy to zero
  sedov_blast_energy = 0.0
  # use a good kernel
  sph_kernel = "Wendland C6"
  sph_eta = 1.6

Using this, we can generate initial data via below command

mpirun -np 1 ./sedov_3d_generator input_star1.par

Repeat for the second star configuration.

Relax with WVT driver

Run the WVT relaxation. Select either Diehl or Arth method in the input file. The number of iterations is currently set to 4000. Create relaxation_wd_wvt.par using below parameters:

#
# White Dwarf Relaxation
# via WVT
# Use ./wvt_3d <this file>
#
# initial data
  initial_data_prefix = "wd_0.49_initial"
  initial_iteration   = 0
  domain_type         = 1                 # 0:box, 1:sphere
  sphere_radius       = 9.824616359799e+08
  rho_initial         = 1.822425000000e+06
  density_profile     = "from file"
  input_density_file  = "WD_M0.49_prof.dat"
# evolution
  final_iteration     = 4000
  adaptive_timestep   = false
# output
  out_screen_every = 1
  out_scalar_every = 10
  out_h5data_every = 20
  output_h5data_prefix = "wvt_wd_relaxed_m0.49" 
# eos
  eos_type = "no eos"
# sph
  sph_kernel     = "Wendland C6"
  sph_eta        = 1.6
  sph_variable_h = true
# wvt
  wvt_method   = "diehl"                  # "arth" or "diehl"
  wvt_boundary = "reflective"             # "reflective" or "frozen"
  wvt_mu       = 1.e-3                    # small fraction of smoothing length
  wvt_ngb      = 60                       # number of desired neighbors
  wvt_convergence_check = true
  wvt_convergence_point = 0.1
  wvt_h_ngb = true
  wvt_cool_down = 0
  wvt_radius = 9.824616359799e+08.      # if problems occur at the edge, reduce to less than total star radius

Using this, we can generate initial data with the following command

mpirun -np <#> ./wvt_3d relaxation_wd_wvt.par

You can check the evolution of the particles with any data analysis and visualization application, e.g., ParaView. However, beware that the density that you will see is not accurate. It is only provided for rough cross-check. For an accurate density.

(OPTIONAL) extract last iteration from wvt_wd_relaxed_m0.45.h5part, with the following requirements: extract_h5part_iteration.py (in flecsph/tools) and wvt_wd_relaxed_m0.45.h5part by running

python extract_h5part_iteration.py -f wvt_star_relaxed.h5part -l

Finally, check that the star is stable under it's own gravity by running

mpirun -np <#> ./newtonian_3d evolution_wd.par

with the following parameter file, evolution.par:

#
# White Dwarf 
# Evolution with FMM
# run by ./newtonian_3d <this_file>
#
# initial data 
  initial_data_prefix = "wd_relaxed_m0.49_<########>"
  initial_iteration = 0
# equation of state 
  eos_type = "wd"
# sph kernel
  sph_kernel = "Wendland C6"
  sph_eta = 1.2
  sph_variable_h = yes
# evolution parameters
  final_iteration = 200
  initial_dt = 2.e-14
  timestep_cfl_factor = 0.5
  adaptive_timestep = yes
  thermokinetic_formulation = FALSE
# output 
  out_screen_every = 10
  out_scalar_every = 10
  out_h5data_every = 20
  output_h5data_prefix = "wd_relaxed_m0.49_ev"
# gravity related parameters:
  enable_fmm = yes
  fmm_macangle = 0.8
  gravitational_constant = 6.67408e-8

If stable, you can optionally extract the last

Run with external Roche potential

In order to accurately reflect orbital effects on the star's configuration, run the single star under gravity with the following parameter file, eforce_evolution.par:

#
# White Dwarf 
# Evolution with FMM
# run by ./newtonian_3d <this_file>
#
# initial data 
  initial_data_prefix = "wd_relaxed_m0.49_ev"
  initial_iteration = 0
# equation of state 
  eos_type = "wd"
# sph kernel
  sph_kernel = "Wendland C6"
  sph_eta = 1.2
  sph_variable_h = yes
# evolution parameters
  final_iteration  = 10000
  initial_dt = 2.e-14
  timestep_cfl_factor = 0.75
  adaptive_timestep = yes
  thermokinetic_formulation = FALSE
# output 
  out_screen_every = 20
  out_scalar_every = 20
  out_h5data_every = 100
  output_h5data_prefix = "wd_relaxed_m0.49_roche"
# gravity related parameters:
  enable_fmm = yes
  fmm_macangle = 0.8
  gravitational_constant = 6.67408e-8
# eforce parameters:
  external_force_type = "orbit"
  mass_neutron_star   = 1.4913525e33  # companion star
  mass_white_dwarf    = 9.916419542156e32  # primary star
  orbital_separation  = 3.064070749e9 # choose orbital separation

Run this with the following command:

mpirun -np <#> ./newtonian_3d eforce_evolution.par

Once you confirm that the star has relaxed into its Roche potential, you can extract the final iteration as before.

Create binary file

Run the following python script to place these stars into a binary. Requirements: make_binary_system.py (in flecsph/tools), star_1.h5part, star_2.h5part.

python make_binary_system.py -f <star1.h5part> <star2.h5part> -a <orbital separation in cm>

make_binary_system.py can be found in tools directory. After successful generation, you will have binary.h5aprt