Validation of the pp equilibrium against the Fokker-Plank equation solution

Validation of the pp equilibrium against the Fokker-Plank equation solution#

In this tutorial we validate the integral solution for the \(e^{\pm}\) equilibrium, used for the pp jet against the Fokker-Plank equation solution implemented in the JetTimeEvol class (see the Hadronic pp jet model, for more details on the pp hadronic jet model)

Jet pp#

from jetset.jet_model import Jet
from jetset.jetkernel import jetkernel
from astropy import constants as const
from jetset.jet_emitters_factory import EmittersFactory
from jetset.jet_emitters import InjEmittersArrayDistribution
import numpy as np
import matplotlib.pyplot as plt
import jetset
print('tested on jetset',jetset.__version__)
tested on jetset 1.3.0rc7
j=Jet(emitters_distribution='plc',verbose=False,emitters_type='protons')
===> setting C threads to 12
j.parameters.z_cosm.val=z=0.001
j.parameters.beam_obj.val=1
j.parameters.gamma_cut.val=1000/(jetkernel.MPC2_TeV)
j.parameters.NH_pp.val=1
j.parameters.N.val=1
j.parameters.p.val=2.0
j.parameters.B.val=.5
j.parameters.R.val=1E18
j.parameters.gmin.val=1
j.parameters.gmax.val=1E4
j.set_emiss_lim(1E-60)
j.set_IC_nu_size(100)
j.gamma_grid_size=200
j.eval()
gmin=1.0/jetkernel.MPC2_TeV
j.set_N_from_U_emitters(1.0, gmin=gmin)
j.eval()

#j.show_model()

m=j.emitters_distribution.gamma_p>gmin
print('U N(p) p>1 TeV=%e erg/cm-3'%(jetkernel.MPC2*np.trapz(j.emitters_distribution.n_gamma_p[m]*j.emitters_distribution.gamma_p[m],j.emitters_distribution.gamma_p[m])))
U N(p) p>1 TeV=9.999992e-01 erg/cm-3
j.energetic_report(verbose=False)
%matplotlib inline
j.emitters_distribution.plot()
<jetset.plot_sedfit.PlotPdistr at 0x15357b7c0>
../../../../_images/hadronic_validate_temp_ev_10_1.png
j.save_model('hadronic.pkl')
from jetset.jet_model import Jet
j=Jet.load_model('hadronic.pkl')
===> setting C threads to 12

setting up the JetTimeEvol model#

gamma_sec_evovled=np.copy(j.emitters_distribution.gamma_e)
n_gamma_sec_evovled=np.copy(j.emitters_distribution.n_gamma_e)
gamma_sec_inj=np.copy(j.emitters_distribution.gamma_e_second_inj)
n_gamma_sec_inj=np.copy(j.emitters_distribution.n_gamma_e_second_inj)
from jetset.jet_emitters_factory import EmittersFactory
from jetset.jet_emitters import InjEmittersArrayDistribution
q_inj=InjEmittersArrayDistribution(name='array_distr',emitters_type='electrons',gamma_array=gamma_sec_inj,n_gamma_array=n_gamma_sec_inj,normalize=False)
q_inj.parameters
Table length=3
namepar typeunitsvalphys. bound. minphys. bound. maxlogfrozen
gminlow-energy-cut-offlorentz-factor*1.000000e+001.000000e+001.000000e+09FalseFalse
gmaxhigh-energy-cut-offlorentz-factor*1.836150e+071.000000e+001.000000e+15FalseFalse
Qemitters_density1 / (s cm3)1.000000e+000.000000e+00--FalseFalse
None
%matplotlib inline
p=q_inj.plot()
p.ax.plot(gamma_sec_inj, n_gamma_sec_inj,'.',ms=1.5)
[<matplotlib.lines.Line2D at 0x154a84b20>]
../../../../_images/hadronic_validate_temp_ev_17_1.png
from jetset.jet_timedep import JetTimeEvol
from jetset.jet_model import Jet

temp_ev=JetTimeEvol(jet_rad=j,Q_inj=q_inj,only_radiation=True,inplace=True)
===> setting C threads to 12
===> setting C threads to 12
/Users/orion/miniforge3/envs/jetset/lib/python3.10/site-packages/jetset/model_manager.py:158: UserWarning: no cosmology defined, using FlatLambdaCDM(name="Planck13", H0=67.77 km / (Mpc s), Om0=0.30712, Tcmb0=2.7255 K, Neff=3.046, m_nu=[0.   0.   0.06] eV, Ob0=0.048252)
  warnings.warn(m)
temp_ev.Q_inj.parameters.Q.val
1

we use the acc region with escape time equal to radiative region

duration=5E9
duration_acc=0
T_SIZE=np.int32(2E6)

temp_ev.parameters.duration.val=duration

temp_ev.parameters.TStart_Inj.val=0
temp_ev.parameters.TStop_Inj.val=duration
temp_ev.parameters.T_esc_rad.val= 1


temp_ev.parameters.Esc_Index_rad.val=0
temp_ev.parameters.t_size.val=T_SIZE
temp_ev.parameters.num_samples.val=500
temp_ev.IC_cooling='off'
temp_ev.parameters.L_inj.val=0

temp_ev.parameters.gmin_grid.val=1.1
temp_ev.parameters.gmax_grid.val=5E7
temp_ev.parameters.gamma_grid_size.val=400

temp_ev.init_TempEv()
temp_ev.region_expansion='off'
temp_ev.show_model()
--------------------------------------------------------------------------------
JetTimeEvol model description
--------------------------------------------------------------------------------

physical setup:

--------------------------------------------------------------------------------
Table length=12
namepar typevalunitsval*units*log
delta ttime2.500000e+03s7.494811449999999e-05R/cFalse
log. samplingtime0.000000e+00NoneFalse
R/ctime3.335641e+07s1.0R/cFalse
IC coolingoffNoneFalse
Sync coolingonNoneFalse
Adiab. coolingonNoneFalse
Reg. expansionoffNoneFalse
Tesc radtime3.335641e+07s1.0R/cFalse
R_rad rad startregion_position1.000000e+18cmNoneFalse
R_H rad startregion_position1.000000e+17cmNoneFalse
T min. synch. cooling6.190400e+01sNoneFalse
L inj (electrons)injected lum.7.490567e+38erg/sNoneFalse
model parameters:

--------------------------------------------------------------------------------
Table length=17
model namenamepar typeunitsvalphys. bound. minphys. bound. maxlogfrozen
jet_time_evdurationtime_grids5.000000e+090.000000e+00--FalseTrue
jet_time_evgmin_gridgamma_grid1.100000e+000.000000e+00--FalseTrue
jet_time_evgmax_gridgamma_grid5.000000e+070.000000e+00--FalseTrue
jet_time_evgamma_grid_sizegamma_grid4.000000e+020.000000e+00--FalseTrue
jet_time_evTStart_Injtime_grids0.000000e+000.000000e+00--FalseTrue
jet_time_evTStop_Injtime_grids5.000000e+090.000000e+00--FalseTrue
jet_time_evT_esc_radescape_time(R/c)*1.000000e+00----FalseTrue
jet_time_evEsc_Index_radfp_coeff_index0.000000e+00----FalseTrue
jet_time_evR_rad_startregion_sizecm1.000000e+180.000000e+00--FalseTrue
jet_time_evR_H_rad_startregion_positioncm1.000000e+170.000000e+00--FalseTrue
jet_time_evm_Bmagnetic_field_index1.000000e+001.000000e+002.000000e+00FalseTrue
jet_time_evt_jet_expexp_start_times1.000000e+050.000000e+00--FalseTrue
jet_time_evbeta_exp_Rbeta_expansionv/c*1.000000e+000.000000e+001.000000e+00FalseTrue
jet_time_evB_radmagnetic_fieldG5.000000e-010.000000e+00--FalseTrue
jet_time_evt_sizetime_grid2.000000e+060.000000e+00--FalseTrue
jet_time_evnum_samplestime_ev_output5.000000e+020.000000e+00--FalseTrue
jet_time_evL_injinj_luminosityerg / s0.000000e+000.000000e+00--FalseTrue
p=temp_ev.plot_pre_run_plot(dpi=100)
../../../../_images/hadronic_validate_temp_ev_22_0.png
p=temp_ev.plot_time_profile()
../../../../_images/hadronic_validate_temp_ev_23_0.png

we perform the evoltion only for injection and cooling, withou acceleration region

temp_ev.run(only_injection=True,cache_SEDs_acc=False,do_injection=True,cache_SEDs_rad=False)
temporal evolution running
0%|          | 0/2000000 [00:00<?, ?it/s]
temporal evolution completed
p=temp_ev.plot_tempev_emitters(region='rad',loglog=False,energy_unit='gamma',pow=0,plot_Q_inj=True)
p.ax.plot(gamma_sec_evovled,n_gamma_sec_evovled,'-',label='analytical solution',lw=4,color='gray',alpha=0.75,zorder=0)
p.ax.legend()
p.setlim(y_min=1E-30,y_max=1E-2)
../../../../_images/hadronic_validate_temp_ev_26_0.png
m=n_gamma_sec_evovled>0
x_analytical=np.log10(gamma_sec_evovled[m])
y_analytical=np.log10(n_gamma_sec_evovled[m])

m=temp_ev.rad_region.time_sampled_emitters.n_gamma[-1]>0
x_num=np.log10(temp_ev.rad_region.time_sampled_emitters.gamma[m])
y_num=np.log10(temp_ev.rad_region.time_sampled_emitters.n_gamma[-1][m])

y_analytical_interp = np.interp(x_num, x_analytical,y_analytical, left=np.nan, right=np.nan)

m=~np.isnan(y_analytical_interp)
m=np.logical_and(m,x_num>0.25)
m=np.logical_and(m,x_num<6)

y_analytical_interp=10**y_analytical_interp[m]
x_out=x_num[m]
y_num=10**y_num[m]
d=np.fabs(y_analytical_interp-y_num)/y_num
assert(all(d<0.25))
plt.plot(x_out,d)
[<matplotlib.lines.Line2D at 0x15580e920>]
../../../../_images/hadronic_validate_temp_ev_29_1.png