Open Sheshuk opened 6 months ago
In O'Connor 2015 that model forms a black hole. In O'Connor 2013 those models do not (when the simulation ends) form black holes In Zha 2021, many do form black holes, including: s16, s17, s19.89, s19, s20, s21, s22.39, s22, s23, s24, s26, s30, and s33 those that don't are s18, s25
We should check the Walk 2019 models, I think there are black hole in there. There may be some black holes in the Warren models, that will take some digging though, there are so many.
On a different note, some of the Zha 2021 models undergo a quark-hadron phase transition. This could be the subject of a future tag?
For Warren_2020, here’s a code snippet I wrote a while back:
import h5py
from snewpy import model_path
def explodes(f: h5py._hl.files.File):
"""Returns bool indicating whether simulation exploded successfully.
A simulation is considered to explode if its diagnostic explosion energy
exceeds 1e49 ergs. This is in line with the definition of explosion time
in arXiv:1902.01340v2, p. 16."""
return f['sim_data']['expl_energy'][-1][1] > 1e49
def core_bounce_time(f: h5py._hl.files.File):
"""Returns core bounce time, i.e. earliest time with a non-zero shock radius."""
for (time, radius) in f['sim_data']['shock_radius']:
if radius > 0.00001:
return time
def bh_formation_time(f: h5py._hl.files.File):
"""Returns black hole formation time.
For low-compactness progenitors, black hole formation time might be longer than
simulation time, see discussion in arXiv:1902.01340v2, p. 16."""
if explodes(f):
raise ValueError(f"{f} explodes successfully. Cannot determine black hole formation time.")
t_bounce = core_bounce_time(f)
t_max = f['sim_data']['shock_radius'][-1][0]
if t_max < 4.99:
return t_max - t_bounce
else:
# TODO: estimate from free-fall timescale instead of raising ValueError?
raise ValueError(f"Simulation stopped at {t_max - t_bounce:.6} s post-bounce. Neither explosion nor black hole formation observed.")
# all available progenitor masses
masses = ['9.0', '9.25', '9.5', '9.75', '10.0', '10.25', '10.5', '10.75', '11.0', '11.25', '11.5', '11.75', '12.0', '12.25', '12.5', '12.75', '13.0', '13.1', '13.2', '13.3', '13.4', '13.5', '13.6', '13.7', '13.8', '13.9', '14.0', '14.1', '14.2', '14.3', '14.4', '14.5', '14.6', '14.7', '14.8', '14.9',
'15.0', '15.1', '15.2', '15.3', '15.4', '15.5', '15.6', '15.7', '15.8', '15.9', '16.0', '16.1', '16.2', '16.3', '16.4', '16.5', '16.6', '16.7', '16.8', '16.9', '17.0', '17.1', '17.2', '17.3', '17.4', '17.5', '17.6', '17.7', '17.8', '17.9',
'18.0', '18.1', '18.2', '18.3', '18.4', '18.5', '18.6', '18.7', '18.8', '18.9', '19.0', '19.1', '19.2', '19.3', '19.4', '19.5', '19.6', '19.7', '19.8', '19.9', '20.0', '20.1', '20.2', '20.3', '20.4', '20.5', '20.6', '20.7', '20.8', '20.9',
'21.0', '21.1', '21.2', '21.3', '21.4', '21.5', '21.6', '21.7', '21.8', '21.9', '22.0', '22.1', '22.2', '22.3', '22.4', '22.5', '22.6', '22.7', '22.8', '22.9', '23.0', '23.1', '23.2', '23.3', '23.4', '23.5', '23.6', '23.7', '23.8', '23.9',
'24.0', '24.1', '24.2', '24.3', '24.4', '24.5', '24.6', '24.7', '24.8', '24.9', '25.0', '25.1', '25.2', '25.3', '25.4', '25.5', '25.6', '25.7', '25.8', '25.9', '26.0', '26.1', '26.2', '26.3', '26.4', '26.5', '26.6', '26.7', '26.8', '26.9',
'27.0', '27.1', '27.2', '27.3', '27.4', '27.5', '27.6', '27.7', '27.8', '27.9', '28.0', '28.1', '28.2', '28.3', '28.4', '28.5', '28.6', '28.7', '28.8', '28.9', '29.0', '29.1', '29.2', '29.3', '29.4', '29.5', '29.6', '29.7', '29.8', '29.9',
'30.0', '31', '32', '33', '35', '40', '45', '50', '55', '60', '70', '80', '100', '120']
a_lambda = '1.23' # mixing length parameter
for m in masses:
filename = f"{model_path}/Warren_2020/stir_a{a_lambda}/stir_multimessenger_a{a_lambda}_m{m}.h5"
f = h5py.File(filename, 'r')
if explodes(f):
print(f"{a_lambda}, {m} explodes.")
else:
try:
print(f"{a_lambda}, {m} forms black hole at {bh_formation_time(f):.6} s post-bounce.")
except ValueError as e:
print(f"{a_lambda}, {m} [UNKNOWN]: {e}")
Thanks a lot @evanoconnor and @JostMigenda! I will implement this.
In Zha 2021, many do form black holes, including: s16, s17, s19.89, s19, s20, s21, s22.39, s22, s23, s24, s26, s30, and s33 those that don't are s18, s25
I'm a bit confused, since the paper https://iopscience.iop.org/article/10.3847/1538-4357/abec4c says (page 2)
All the progenitor models used in this work ... collapse to BHs in a reasonably short time
Does that mean that these models make failing supernovae, but s18 and s25 do not form BH at the end of the simulation, but will eventually?
@Sheshuk yes, those two will form black holes, I.e. they are failed supernovae, but haven’t reached the actually black hole formation. I guess this is the idea of the tag, is to flag that the end is the time of black hole formation, rather than the simulation on the whole has failed? Or not?
I guess that statement on page two is a bit ambiguous. The point was that if the explosion failed, these would make black holes in a reasonable short time, O(s), because the compactness is high enough (not necessarily that they do so in the simulations). Lower compactness models may accrete for 10s, 100s, or even longer seconds before black hole formation (if they fail).
I see, thank you for the explanation! Maybe then we need a special tag "failed"? Or "explodes"? Would the users want this list? Anyway, probably this is not for this PR.
So now the following snippet
from snewpy.models.registry_model import get_models_table
table = get_models_table(init=True) #Some metadata is seen only after the initialization
models_bh = table[table['Black hole']==True]
for m in models_bh:
print(m['model'],m['init_params'])
produces the following list:
snewpy.models.ccsn.Fornax_2022 {'progenitor_mass':
Ok, just to follow up here. The idea is to flag models where the shock hasn't been revived by the end of the simulation? If so, I would't call this a black hole tag. I think a black hole tag would be more appropriate for a simulation that ends when the black hole forms.
there is not a one-to-one mapping with no shock revival at some time and black hole formation. For example, there can be simulations that have successful explosions and still have black hole formation, also ones that are not exploding when the simulation ends but may later explode and leave a neutron star.
So we should be careful and clear with the definition.
Yes, original idea was to tag the black hole formation during the simulation.
We can make any other tags, that could be useful for grouping simulations. Knowing if the given model is leading to (eventual) explosion would be useful for searches of failed supernovae signals.
I think we tagged most BH formations now, so if there are no other models to mark, I would consider this finished.
Ok,
then I expect many of the Fornax ones are incorrectly tagged, the 12Msun (first in the list), failed to explode, but doesn’t actually form a black hole at that time, it is only simulated to ~1 second.
then I expect many of the Fornax ones are incorrectly tagged, the 12Msun (first in the list), failed to explode, but doesn’t actually form a black hole at that time, it is only simulated to ~1 second.
For the Fornax_2022 I tagged the ones which have 'bh' in the file names. Is there a better way to get this information? Maybe there is some information in the data file?
In general it would be nice to add all accessible info to the metadata
OK, looks like it's slightly more complicated then I expected.
I suggest just setting the metadata["Explodes"] = False
for these models - so at least it's possible to study the signals of failed supernovae.
And adding the black hole formation as a separate issue.
The goal here is to tag the models which lead to black hole formation:
This is work related to issue #303
We already have the
Black hole
flag in the Fornax_2022 model metadata. (edit: it should bemetadata["Explodes"] == False
) It would be nice to tag all the models with black hole formation, so the user can easily study this scenario in all existing models.revival_time==0
s18, s25
bh
in filename