Mori 2023 2D Models with Axionlike Production

Neutrino spectra from a set of 2D simulations with axionlike particle production. The models are described in the paper Multi-messenger signals of heavy axionlike particles in core-collapse supernovae: two-dimensional simulations by K. Mori, T. Takiwaki, K. Kotake and S. Horiuchi, Phys. Rev. D 108:063027, 2023.

The following models are supported:

Model

Axion mass [MeV]

Coupling g10

tpb,2000 [ms]

Ediag [1e51 erg]

MPNS [Msun]

Standard

0

390

0.40

1.78

(100, 2)

100

2

385

0.37

1.77

(100, 4)

100

4

362

0.34

1.76

(100, 10)

100

10

395

0.36

1.77

(100, 12)

100

12

357

0.43

1.77

(100, 14)

100

14

360

0.44

1.77

(100, 16)

100

16

367

0.51

1.77

(100, 20)

100

20

330

1.10

1.74

(200, 2)

200

2

374

0.45

1.77

(200, 4)

200

4

376

0.45

1.76

(200, 6)

200

6

333

0.54

1.75

(200, 8)

200

8

323

0.94

1.74

(200, 10)

200

10

319

1.61

1.73

(200, 20)

200

20

248

3.87

1.62

[1]:
from snewpy.neutrino import Flavor
from snewpy.models.ccsn import Mori_2023

from astropy import units as u
from glob import glob

from scipy.interpolate import PchipInterpolator

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
[2]:
mpl.rc('font', size=16)

Initialize the 2D models

Use the param property of the model class to see the available parameters. Models are initialized using the axion_mass and axion_coupling parameters.

[3]:
Mori_2023.param
[3]:
{'axion_mass': <Quantity [  0., 100., 200.] MeV>,
 'axion_coupling': <Quantity [ 0.,  2.,  4.,  6.,  8., 10., 12., 14., 16., 20.] 1e-10 / GeV>,
 'progenitor_mass': <Quantity [20.] solMass>}

The model with axion_mass=0 and axion_coupling=0 is a standard simulation with no ALP production.

[4]:
model_std = Mori_2023(axion_mass=0, axion_coupling=0)
model_std.metadata
[4]:
{'Progenitor mass': <Quantity 20. solMass>,
 'Axion mass': 0,
 'Axion coupling': <Quantity 0. 1e-10 / GeV>,
 'PNS mass': <Quantity 1.78 solMass>}
[5]:
# Initialize a handful of axion models.
models = {}
for (am, ac) in ((100*u.MeV, 2e-10/u.GeV), (200*u.MeV,2e-10/u.GeV), (100*u.MeV,10e-10/u.GeV), (100*u.MeV,20e-10/u.GeV), (200*u.MeV,10e-10/u.GeV), (200*u.MeV,20e-10/u.GeV)):
    models[(am,ac)] = Mori_2023(axion_mass=am, axion_coupling=ac)

models
[5]:
{(<Quantity 100. MeV>,
  <Quantity 2.e-10 1 / GeV>): Mori_2023 Model: t-prof_100_2.dat
 Progenitor mass  : 20.0 solMass
 Axion mass       : 100.0 MeV
 Axion coupling   : 2.0 1e-10 / GeV
 PNS mass         : 1.77 solMass,
 (<Quantity 200. MeV>,
  <Quantity 2.e-10 1 / GeV>): Mori_2023 Model: t-prof_200_2.dat
 Progenitor mass  : 20.0 solMass
 Axion mass       : 200.0 MeV
 Axion coupling   : 2.0 1e-10 / GeV
 PNS mass         : 1.77 solMass,
 (<Quantity 100. MeV>,
  <Quantity 1.e-09 1 / GeV>): Mori_2023 Model: t-prof_100_10.dat
 Progenitor mass  : 20.0 solMass
 Axion mass       : 100.0 MeV
 Axion coupling   : 10.0 1e-10 / GeV
 PNS mass         : 1.77 solMass,
 (<Quantity 100. MeV>,
  <Quantity 2.e-09 1 / GeV>): Mori_2023 Model: t-prof_100_20.dat
 Progenitor mass  : 20.0 solMass
 Axion mass       : 100.0 MeV
 Axion coupling   : 20.0 1e-10 / GeV
 PNS mass         : 1.74 solMass,
 (<Quantity 200. MeV>,
  <Quantity 1.e-09 1 / GeV>): Mori_2023 Model: t-prof_200_10.dat
 Progenitor mass  : 20.0 solMass
 Axion mass       : 200.0 MeV
 Axion coupling   : 10.0 1e-10 / GeV
 PNS mass         : 1.73 solMass,
 (<Quantity 200. MeV>,
  <Quantity 2.e-09 1 / GeV>): Mori_2023 Model: t-prof_200_20.dat
 Progenitor mass  : 20.0 solMass
 Axion mass       : 200.0 MeV
 Axion coupling   : 20.0 1e-10 / GeV
 PNS mass         : 1.62 solMass}

Plot Model Luminosities

Compare axion model luminosity to the standard 2D simulation.

Higher mass models with stronger coupling constants should produce a decrease in neutrino luminosity at all flavors relative to the reference simulation.

[6]:
for (m,c), model in models.items():

    fig, axes = plt.subplots(2, 4, figsize=(28, 8), sharex=True,
                         gridspec_kw={'height_ratios':[3.2,1], 'hspace':0})

    Lmin,  Lmax  = 1e99, -1e99
    dLmin, dLmax = 1e99, -1e99

    for j, (flavor) in enumerate([Flavor.NU_E, Flavor.NU_E_BAR, Flavor.NU_X, Flavor.NU_X_BAR]):
        ax = axes[0][j]

        ax.plot(model_std.time, model_std.luminosity[flavor]/1e51, 'k', label=r'$20M_\odot$ reference')  # Report luminosity in [foe/s]
        Lmin = np.minimum(Lmin, np.min(model_std.luminosity[flavor].to_value('1e51 erg/s')))
        Lmax = np.maximum(Lmax, np.max(model_std.luminosity[flavor].to_value('1e51 erg/s')))

        modlabel = rf"{flavor.to_tex()}: $m_a=${m.to_string(format='latex_inline')}\n     $g_{{a\gamma}}=${c.to_string(format='latex_inline')}"
        ax.plot(model.time, model.luminosity[flavor]/1e51,  # Report luminosity in units foe/s
                label=modlabel,
                color='C0' if flavor.is_electron else 'C1',
                ls='-' if flavor.is_neutrino else ':',
                lw=2)
        if j==0:
            ax.set(ylabel=r'luminosity [$10^{51}$ erg s$^{-1}$]')

        ax.legend(fontsize=12)
        ax.set(xlim=(model_std.time[0].to_value('s'), model_std.time[-1].to_value('s')))

        ax = axes[1][j]
        tmin = np.maximum(model.time[0], model_std.time[0]).to_value('s')
        tmax = np.minimum(model.time[-1], model_std.time[-1]).to_value('s')
        times = np.arange(tmin, tmax, 0.001)*u.s

        Lstd = PchipInterpolator(model_std.time, model_std.luminosity[flavor].to_value('1e51 erg/s'))
        Lstd_t = Lstd(times)
        select = Lstd_t != 0

        Lmod = PchipInterpolator(model.time, model.luminosity[flavor].to_value('1e51 erg/s'))
        Lmod_t = Lmod(times)
        dL = (Lmod_t[select] - Lstd_t[select]) / Lstd_t[select]

        dLmin = np.minimum(dLmin, np.min(dL))
        dLmax = np.maximum(dLmax, np.max(dL))

        ax.plot(times[select], dL)
        if j==0:
            ax.set(xlabel='time [s]',
                   ylabel=r'$\Delta L_\nu/L_\nu$')

    for j in range(4):
        axes[0][j].set(ylim=(Lmin, 1.1*Lmax))
        axes[1][j].set(ylim=(dLmin, dLmax))

    fig.suptitle(rf"Axionlike model: $m_a=${m.to_string(format='latex_inline')}, $g_{{a\gamma}}=${c.to_string(format='latex_inline')}")
../../_images/nb_ccsn_Mori_2023_9_0.png
../../_images/nb_ccsn_Mori_2023_9_1.png
../../_images/nb_ccsn_Mori_2023_9_2.png
../../_images/nb_ccsn_Mori_2023_9_3.png
../../_images/nb_ccsn_Mori_2023_9_4.png
../../_images/nb_ccsn_Mori_2023_9_5.png