==================================== Probing Cusp-Core with Star Clusters ==================================== The standard |LCDM| model, in the linear regime, provides an unparalleled match to observations (e.g. the 12 peak match of the CMB :cite:`ex_npbh-Planck2018`). However, in the non-linear regime, such as galaxy scale and smaller, there are long-standing tensions between simulation and observation -- not the least of which is the 'cusp-core' problem (compare cuspy models from :cite:`ex_npbh-Dubinski1991` to the observations of :cite:`ex_npbh-Moore1994`). This tension might be resolved by dark matter (DM) -baryon interactions, such as by supernovae (SN). For instance, during galaxy formation a burst or series of bursts of star formation might inject energy into the local (central) DM, thus transforming a cusp into a core :cite:`ex_npbh-Navarro1996`. There should be a lower mass bound under which a galaxy will have insufficient integrated SN energy to effect the DM cusp-core transformation :cite:`ex_npbh-Penarrubia2012`. Thus, it is of particular interest to examine the central DM density of faint and low mass galaxies as these systems are the most likely to retain an unevolved cusped DM profile :cite:`ex_npbh-Read2016`. Perhaps the most promising method of probing the central DM densities of galaxies is through a survival analysis technique. In essence, star clusters orbiting a galaxy with a cuspy profiles will feel the effects of dynamical friction :cite:`ex_npbh-Hernandez1998`, while for galaxies with a cored profile the dynamical friction ceases inside the core :cite:`ex_npbh-Read2006`. Consequently, in cuspy profiles the star-cluster rapidly sinks to the center of the galaxy, while in a cored profile the star cluster maintains a long-term stable orbit :cite:`ex_npbh-Penarrubia2009`. This method has been applied to Fornax :cite:`ex_npbh-Cole2012`, Sagittarious :cite:`ex_npbh-Penarrubia2009`, and most recently Eridanus II :cite:`ex_npbh-Contenta2018`. It is this last system that is the most promising both for understanding the cusp-core problem, but also (explained in a different section) for probing the nature of DM: particle or macroscopic object. Eridanus II is an ultra-faint dwarf galaxy discovered by the Dark Energy Survey :\cite:`ex_npbh-Bechtol2015, Koposov2015`. It is thought to be a distant (366 kpc from the Sun) Milky Way satellite, though this is uncertain :cite:`ex_npbh-Li2017`. Eridanus II has a half-light radius of :math:`R_{1/2} = 2.31 \rm{[asec]}`. Most importantly, Eri II has a star cluster at a projected distance of ~45 pc from the center of Eri II. The star cluster is fainter and more extended than is expected for star cluster in the Milky Way :cite:`ex_npbh-Harris2010`. The host dwarf galaxy is modeled as a static potential. Based on :cite:`ex_npbh-Read2016` the best-choice parameterization is that of a cored-NFW potential. The parameters are given by observation: :math:`R_{1/2}=0.28 [\rm{kpc}]` :cite:`ex_npbh-Crnojevic2016`, core :math:`n=1` :cite:`ex_npbh-Read2016`, :math:`M_{200}=~4.7 \times 10^8 [\rm{M}_\odot]` :cite:`ex_npbh-Maccio2007`. However as in :cite:`ex_npbh-Contenta2018` the actual potential used is a spherical Dehnen potential :cite:`ex_npbh-Dehnen1993` which is fit to a core-NFW potential with the given parameters: :math:`4.79 \times 10^8 [\rm{M}_\odot]`, :math:`r_0=0.877 [\rm{kpc}]`, :math:`\alpha=0` :cite:`ex_npbh-Contenta2018`, .. math:: \rho(r) = \frac{\mathrm{amp}\cdot(3-\alpha)}{4\,\pi\,a^3}\,\frac{1}{(r/a)^{\alpha}\,(1+r/a)^{4-\alpha}} The best-fit Dehnen Potential is shown in the following figure. .. image:: ../_static/contenta18/contenta18_fig_2b.png :width: 300px :align: center :height: 300px :alt: alternate text In addition to the static potential, also implemented is the `galpy `_ Chandrasekhar dynamical friction, which roughly follows :cite:`ex_npbh-Petts2016`. .. math:: \mathbf{F}(\mathbf{x},\mathbf{v}) = -2\pi\,[G\,M]\,[G\,\rho(\mathbf{x})]\,\ln[1+\Lambda^2] \,\left[\mathrm{erf}(X)-\frac{2X}{\sqrt{\pi}}\exp\left(-X^2\right)\right]\,\frac{\mathbf{v}}{|\mathbf{v}|^3}\, The :cite:`ex_npbh-Petts2016` dynamical friction matches N-body simulations and also the desired core-stalling behavior necessary to explain the long-term survival of the Eri II star cluster :cite:`ex_npbh-Goerdt2006`, if it is actually old. For computational reasons, the dynamical friction calculations are restricted to outside the core-stalling radius (:cite:`ex_npbh-Bovy2015`). There are good reasons to believe that the star cluster is old. When comparing Eri II to similar stellar mass dwarf galaxies (:cite:`ex_npbh-McConnachie2012` and :cite:`ex_npbh-Contenta2018`) the stellar populations are consistent with a population at least 5 Gyr old. The star cluster is modeled as a Plummer sphere (:cite:`ex_npbh-Plummer1911`) with initial half-mass radius 10 pc (:cite:`ex_npbh-Contenta2018`). The stellar IMF is an modified Kroupa IMF (:cite:`ex_npbh-Kroupa2001`), with mass range fixed between 0.1 and 100 :math:`\rm{M}_\odot` and a metallicity of Z=0.0008. Kinematically, the star cluster is set on a circular orbit at an initial distance of 140 pc (:cite:`ex_npbh-Contenta2018`). Given this initial setup, the system is simulated for 10 Gyr, allowing the star cluster to sink into the Eri II potential and achieve a stable core-stalled orbit. The details of the simulation are given in the following section. ------------- ******************** Running a Simulation ******************** We now explain how a simulation is set up to reproduce the results of |C18| :cite:`ex_npbh-Contenta2018`. There are two primary sections: a broad overview of the method of the code, and a detailed step-by-step through the workings of the code (see `Following the Code`_). Overview ######## .. graphviz:: digraph { rankdir=LR graph [fontsize=10 fontname="Verdana"] node [shape=record fontsize=10 fontname="Verdana"] subgraph cluster_new_sim { label = "Make No-PBH System" "Dehnen Spherical Potential"; "Star Cluster"; "Dynamical Friction"; } "Parameters" -> "Command Script"; "Command Script" -> "New Simulation"; "Command Script" -> "Reload Simulation"; "New Simulation" -> "Dehnen Spherical Potential" [ lhead=cluster_new_sim ]; "Dehnen Spherical Potential" -> "System" [ ltail=cluster_new_sim ] ; "Reload Simulation" -> "System" [ label = "Initial System + Snapshot" ]; "System" -> "simulate_EriII"; } Each simulation starts in a script folder that defines all the relevant parameters. The code is structured this way such that the outputs of each simulation are self-contained and easily reproduced. Very little of the actual simulation code is contained in the script folder, instead residing in an installable code repository. This project is called `eridanus_pbh` and can be installed from the github repository to which these are the docs. A pip installable version may follow. From the parameters, the main script controller is called. The function of the script controller is to ensure that the appropriate output folders exist / are created, to create the system or load the system from a snapshot, and finally to pass the system to the simulation functions. This is shown schematically, above. Following the Code ################## In this section we follow the code in detail. The previous schematic gave a broad overview of the code structure, this schematic is a more complete step-by-step of the code operation. .. graphviz:: digraph "Simulation Steps" { compound=true graph [fontsize=10 fontname="Verdana"]; node [shape=record fontsize=10 fontname="Verdana"]; subgraph cluster_setup { subgraph cluster_new_sim { label = "Make No-PBH System" subgraph cluster_star_cluster { label = "Star Cluster" "Initialize Cluster" -> "Bound Cluster"; "Initialize Cluster" -> "Unbound Cluster"; "Bound Cluster" -> "Unbound Cluster"; } "Dehnen Spherical Potential" -> "Gravity Bridge"; "Dehnen Spherical Potential" -> "Initialize Cluster" [ lhead=cluster_star_cluster ]; "Dehnen Spherical Potential" -> "Dynamical Friction"; "Bound Cluster" -> "Gravity Bridge"; "Unbound Cluster" -> "Gravity Bridge"; "Dynamical Friction" -> "Gravity Bridge"; } subgraph cluster_reload_sim { label = "Reload Simulation" "Load Setup" -> "Combined Snapshot"; "Load Subsystem Snapshots " -> "Combined Snapshot"; "Combined Snapshot" -> "Remake Gravity Bridge" [ label="connect subsytems" ]; } "Continue Sim." -> "Load Setup" [ lhead=cluster_reload_sim ]; "Remake Gravity Bridge" -> "System" [ ltail=cluster_reload_sim ]; "New Sim." -> "Dehnen Spherical Potential" [ lhead=cluster_new_sim ]; "Gravity Bridge" -> "System" [ ltail=cluster_new_sim ]; } subgraph cluster_sim_EriII { label = "Simulate EriII" "Stellar Evolution 1" -> "Run Gravity" [ label="1/2 time step" ]; "Run Gravity" -> "Stellar Evolution 2" [ label="1/2 time step" ]; "Stellar Evolution 2" -> "Save Snapshot"; "Save Snapshot" -> "Stellar Evolution 1" [ label="loop over time" ] } "Parameters" -> "Script Command" [ label = "Parser" ]; "Script Command" -> "Continue Sim." [ label = "from_(last_)snap" ]; "Script Command" -> "New Sim." [ label = "from_start" ]; "System" -> "Stellar Evolution 1" [ lhead=cluster_sim_EriII ]; } The following is an example of the parameters which determine a simulation. In this case, the simulation is for a star cluster originating 140 pc from the center of the Eridanus center. The star cluster has a mass of :math:`1.9\times 10^4 [\rm{M}_\odot]` and half-mass radius of 10 pc. These are the best-fit values from :cite:`ex_npbh-Contenta2018`. Also, this simulation has a 100 percent smooth and non-dissipational DM component that is described by a Dehnen spherical potential :cite:`ex_npbh-Dehnen1993` with a mass of :math:`4.79\times 10^8 [\rm{M}_\odot]` and scale radius :math:`0.877 [\rm{kpc}]`. Again, these are the Contenta et. al (2018) :cite:`ex_npbh-Contenta2018` best-fit results. :: _TIME_START = 0.0 | amu.Myr _TIME_HALT = 12 | amu.Myr _TIME_STEP = 50 | amu.kyr _TIME_SNAP = 1 | amu.Myr # for taking a snapshot # Eridanus Full Potential (CORED) # from Contenta 2018 _ERI_CORE_POT_MASS = 4.79e8 * apu.solMass _ERI_CORE_POT_A = 0.877 * apu.kpc # STAR CLUSTER _SC_MASS = 1.9e4 | amu.MSun _SC_R_HM = 10 | amu.parsec # best-fit half mass radius _SC_POSITION = [0.14, 0, 0] | amu.kpc _SC_VEL_DIR = [0, 1, 0] # for circular velocity # evolution _SC_STELLAR_EVLN = SSE # gravity _SC_GRAVITY_CODE = BHTree _SC_TSTEP = _TIME_STEP / 2.0 _SC_NUM_WORKERS = 8 _SC_OPENING_ANGLE = 0.6 _SC_SMOOTHING_LENGTH = 0.1 | amu.parsec # dynamical friction _USE_DF = True _DYNFRIC_R_MIN = 0.05 | amu.kpc _DYNFRIC_TSTEP = 10 | amu.Myr Following the setting of parameters, a parser object is constructed with all the parameters as the default values. This is not because the parameter values will be changed at runtime, though they could be and the change recorded, but entirely for code practice compliance with astropy templates. The parser object is passed to the program `main`, which is the *Script Command* from the schematic. The `main` program first parses the arguments, then ensures that the appropriate output folders exist / are created. These folders are an `output/` and `figures/` folder, the former contains the initial condition and snapshots while the latter holds plots generated during the script running. Next the command script determines whether to start a new simulation (if given the flag `--new_sim`), continue from a specified snapshot (`--from_snap`), or the most recent snapshot (`--from_last_snap`). Starting a New Simulation ************************* - Dehnen Spherical Potential - Star Cluster Continue a Simulation ********************* continue ------------- **** Coda **** Philosophical Note ################## This project is working to embrace the newest format of the Astropy Affiliate Package system. For details on the coding guidelines, see `Coding Guidelines `_, and `here `_ for a research project-focused form of the template package. References ########## .. rubric:: References .. bibliography:: ../references.bib :style: unsrt :cited: :start: continue :labelprefix: ~pbh :keyprefix: ex_npbh- .. replacements .. |C18| replace:: Contenta (2018) .. |LCDM| replace:: :math:`\Lambda \rm{CDM}`