

Alguns conceitos de fotometria¶
- Brilho, ou Intensidade de uma fonte luminosa não depende da distância, o fluxo depende da distância.
- Brilho é o mesmo ma fonte e no detector, é uma fluxo de energia emergindo da fonte ou sendo coletadfo no receptor.
- Nenhum instrumento ótico aumenta o brilho dos objetos.
Se temos uma fonte resolvida, com determinado tmanho angular, podemos definir a densidade espectral de fluxo
O fluxo espectral depende com o quadrado da distância
A luminosidade (espectral) é a potência total irradiada pela fonte (por unidade de frequência)
Para o corpo negro, deduzimos a densidade de energia espectral, mas temos uma relação entre esta e o brilho#:
Fluxos e Magnitudes¶
- Brilho - Intensidade específica
- Dimensão:
- Unidades:
- Densidade de Fluxo Espectral
- Densidade de Fluxo do Corpo Negro
- Unidades
Magnitudes
import sys
sys.path.append('../')
from pathlib import Path
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import src.astroufcg.astro.SPECUTILS as utils
%matplotlib inline
%load_ext rich
WARNING: Failed to load Vega spectrum from /home/lbarosi/synphot/calspec/alpha_lyr_stis_011.fits; Functionality involving Vega will be severely limited: FileNotFoundError(2, 'No such file or directory') [stsynphot.spectrum]
# Download dos arquivos de dados
urls = []
filenames = []
# URL of STScI Solar Spectrum
# Espectro solar de referência
urls.append("https://archive.stsci.edu/hlsps/reference-atlases/cdbs/grid/solsys/solar_spec.fits")
filenames.append("../data/spectra/solar_spec.fits")
# Espectro solar para calibração HST
urls.append("https://archive.stsci.edu/hlsps/reference-atlases/cdbs/calspec/sun_reference_stis_002.fits")
filenames.append("../data/spectra/solar_spectrum_cal.fits")
# Spectro solar de alta resolução
urls.append(r"https://vizier.cds.unistra.fr/viz-bin/getCatFile?-plus=-%2b&VI/159/./sp/Spectre_HR_LATMOS_Meftah_V1.txt")
filenames.append("../data/spectra/solar_spectrum_HR.txt")
# Linhas espectrais do Sol
urls.append("https://mark4sun.jpl.nasa.gov/toon/solar/solar_merged.108.gz")
filenames.append("../data/spectra/solar_lines.gz")
# for url, name in zi/p(urls, filenames):
# utils.download_file(url, name)
# Gera espectros de specutils e synphot
spectra = utils.generate_spectra(filenames=filenames)
# Visualizando os espectros
utils.show_spectra_units(spectra)
# Ajuste de Corpo Negro
bb_spectra = utils.fit_blackbody(spectra["HST"]["specutils"], 5700, scale=utils.scale)
spectra.update(bb_spectra["Spectra"])
utils.plot_spectra(spectra, range=[300, 1500]);
# filters = utils.get_filters()
# utils.plot_filters(filters);
# observations = utils.make_observations(spectra)
# utils.plot_observations(observations["HST"]);
Estimando as propriedades do Sol¶
Pressão:¶
$$\frac{dP}{dr} = -\frac{Gm}{r^2}\rho \Rightarrow P_c \approx \frac{3 GM^2}{4\pi R^4} \ T_c = \frac{P_c \mu m_H}{\rho k}
$$
import astropy.constants as const
P_sun = 3 * const.G * utils.m_sun**2 / (4 * np.pi * utils.r_sun**4)
from IPython.display import display, Math, Latex
formatted_value = np.format_float_scientific(P_sun / const.atm, precision=2, exp_digits=1)
# Display the result
display(
Math(
r"P_{\odot} = \frac{3 G M_{\odot}^2}{4 \pi R_{\odot}^4} = "
+ formatted_value.replace("e", " \\times 10^{")
+ "}"
+ r"atm"
)
)
T_sun = P_sun * 0.62 * const.m_p / (const.k_B * (utils.m_sun / (4 / 3 * np.pi * utils.r_sun**3)))
from IPython.display import display, Math, Latex
formatted_value = np.format_float_scientific(T_sun.value, precision=2, exp_digits=1)
# Display the result
display(
Math(
r"T_c = \frac{P_c \mu m_H}{\rho k} = "
+ formatted_value.replace("e", " \\times 10^{")
+ "}K"
)
)
Comprimento Médio Livre (λ)
O comprimento médio livre de um fóton no plasma solar pode ser calculado como:
onde:
- é a densidade numérica de elétrons,
- é a seção de choque de Thomson.
No núcleo do Sol, é da ordem de alguns milímetros a centímetros.
Tempo Médio de Difusão
A caminhada aleatória significa que o fóton percorre uma distância efetiva muito maior do que o raio solar . O número médio de passos necessários para que o fóton escape é:
O tempo total de saída é dado por:
onde é a velocidade da luz.
Raio Clássico do Elétron
O raio clássico do elétron $r_e$ é uma quantidade associada à escala característica de interação eletromagnética com o elétron. Ele é dado pela fórmula:
Substituindo os valores:
Esse é o raio clássico do elétron, também conhecido como a escala na qual o elétron espalha radiação eletromagnética.
Seção de Choque Thomson
A seção de choque Thomson () descreve a probabilidade de um fóton interagir com um elétron por meio do espalhamento elástico (espalhamento Thomson). Ela é calculada como:
Substituindo :
Densidade de Elétrons
from astropy import units as u
from scipy.constants import epsilon_0, physical_constants
n_e = 3 * utils.m_sun / (4 * np.pi * utils.r_sun**3 * const.m_p)
r_e = physical_constants["classical electron radius"][0] * u.m
sigma_T = 8 * np.pi / 3 * r_e**2
sigma_T_data = const.sigma_T
lambda_ = 1 / (n_e * sigma_T)
t_flight = utils.r_sun**2 / (lambda_ * const.c)
n_e_value = np.format_float_scientific(n_e.value, precision=2, exp_digits=1)
display(
Math(
r"n_e = "
+ n_e_value.replace("e", " \\times 10^{")
+ "}m^{-3}"
)
)
lambda_value = np.format_float_scientific(lambda_.value, precision=2, exp_digits=1)
display(
Math(
r"\lambda = "
+ lambda_value.replace("e", " \\times 10^{")
+ "}m"
)
)
t_value = np.format_float_scientific(t_flight.to(u.year).value, precision=2, exp_digits=1)
display(
Math(
r"\tau = "
+ t_value.replace("e", " \\times 10^{")
+ "} anos"
)
)
Fusão Nuclear¶
m_He = physical_constants["alpha particle mass"][0] * u.kg
# Diferença de massa
delta_m = (4 * const.m_p) - m_He
# Energia liberada (E = delta_m * c^2)
E = (delta_m * const.c**2).to(u.J)
# Exibir o resultado em joules
print(f"A energia liberada na fusão de 4 prótons para formar hélio-4 é: {E}")
t_sun = 0.1 * 0.007 * utils.m_sun * const.c**2 / (const.L_sun)
print(t_sun.to(u.year))
A energia liberada na fusão de 4 prótons para formar hélio-4 é: 4.119026419012018e-12 J
10355461539.936829 yr
import pandas as pd
import numpy as np
import holoviews as hv
hv.extension('bokeh')
from bokeh.plotting import show
import hvplot.pandas # Importando o hvplot para DataFrames
import panel as pn
dataFile = Path("../../data/misc/AME2020.txt")
# Carregar os dados
data = pd.read_csv(dataFile, sep=r'\s+', comment='#')
A = np.array(data['A'])
elem = np.array(data['EL'])
BA = np.array(data['B_A'])
A2N = {4: 'He', 12: 'C', 16: 'O', 20: 'Ne', 24: 'Mg', 28: 'Si', 32: 'S', 36: 'Ar', 40: 'Ca'}
# Criar DataFrame para plotagem
df = pd.DataFrame({'A': A, 'B_A': BA, 'Element': [A2N.get(a, '') for a in A]})
# Função para gerar o plot
def plot(log_x=False):
plot = df.hvplot.scatter(
x='A', y='B_A',
logx=log_x,
xlabel='A', ylabel='B/A',
title='Gráfico de B/A vs A',
hover_cols=['Element']
)
line = df.hvplot.line(x='A', y='B_A', logx=log_x)
labels = hv.Labels(df, ['A', 'B_A'], 'Element').opts(text_baseline='bottom', yoffset=1, fontsize=1)
return (plot * line * labels)
# Botão para alternar entre linear e log
log_toggle = pn.widgets.Toggle(name='Escala Log X', button_type='success')
@pn.depends(log_toggle.param.value)
def update_plot(log_x):
return plot(log_x)
# Layout
#plot = pn.Column(log_toggle, update_plot).servable()
plot(log_x=False)
plot(log_x=True)
# pp Gamow energy
EG = 493. # keV
# Temperature
T = 1.6e7 # K
k = 8.6173303e-8 # Boltzman constant in keV/K
# Range of energies in keV
E = np.linspace(1.0,100.0,501)
Boltz = np.exp(-E/(k*T))
Gamow = np.exp(-np.sqrt(EG/E))
Total = Boltz*Gamow
# limits
from matplotlib.ticker import MultipleLocator, LogLocator, NullFormatter
minE = 1.0 # keV
maxE = 100.0
minY = 1.0e-12 # dimensionless
maxY = 1.0
axisFontSize = 12
fig,ax = plt.subplots(figsize=(16, 8))
lwidth = 1.5
ax.tick_params('both',length=6,width=lwidth,which='major',direction='in',top=True,right=True)
ax.tick_params('both',length=3,width=lwidth,which='minor',direction='in',top=True,right=True)
ax.set_xlim(minE, maxE)
ax.set_xlabel(r'E [keV]',fontsize=axisFontSize)
ax.set_xscale('log')
ax.set_xticks([1.,10.,100.])
ax.set_xticklabels(['1','10','100'])
ax.set_ylim(minY,maxY)
ax.set_yscale('log')
ax.yaxis.set_major_locator(LogLocator(base=10.0,subs=(1.0,),numticks=100))
ax.yaxis.set_minor_locator(LogLocator(base=10.0,subs=np.arange(2,10)*0.1,numticks=100))
ax.yaxis.set_minor_formatter(NullFormatter())
ax.set_yticks([1.0e-12, 1.0e-11, 1.0e-10, 1.0e-9, 1.0e-8, 1.0e-7, 1.0e-6, 1.0e-5, 1.0e-4, 0.001, 0.01, 0.1, 1.0])
ax.set_yticklabels([r'10$^{-12}$',' ',r'10$^{-10}$',' ',r'10$^{-8}$',' ',r'10$^{-6}$',' ',r'10$^{-4}$',' ', '0.01',' ','1'])
# Boltzmann Factor
ax.plot(E,Boltz,':',color='black',lw=1)
ax.text(20.0,1e-6,'Boltzmann',color='black',fontsize=axisFontSize,ha='left',va='center')
# Gamow Factor
ax.plot(E,Gamow,'--',color='black',lw=1)
ax.text(40.0,0.01,'tunneling',color='black',fontsize=axisFontSize,ha='left',va='center')
# Product Boltzmann * Gamow
ax.plot(E,Total,'-',color='black',lw=1)
ax.text(E[np.where(Total==np.max(Total))],0.2*np.max(Total),'GP',va='center',ha='center',fontsize=axisFontSize)
# Make the plot
plt.show()
Estimativa da Barreira de Potencial Coulombiano na Fusão Nuclear¶
A barreira de potencial coulombiano para a fusão de dois prótons pode ser estimada pela energia potencial elétrica:
A energia térmica média das partículas no núcleo do Sol é:
Comparação e Profundidade do Poço de Potencial¶
A barreira de Coulomb (1.71 MeV) é muito maior do que a energia térmica média das partículas (0.0013 MeV). Isso sugere que, para a fusão ocorrer no Sol, os prótons precisam atravessar essa barreira via efeito túnel quântico.
A profundidade efetiva do “poço” de interação nuclear pode ser estimada considerando que, ao se aproximarem o suficiente para a força forte agir, os prótons se ligam, liberando energia adicional. Essa profundidade está na ordem de dezenas de MeV.
import astropy.constants as const
# Carga elementar (Coulomb)
e = const.e.si
# Permissividade do vácuo (F/m)
epsilon0 = epsilon_0 * u.Unit("F/m")
# Raio aproximado do próton (m)
r_proton = physical_constants["proton rms charge radius"][0] * u.m
# Constante de Boltzmann (J/K)
k_B = const.k_B
# Temperatura do núcleo do Sol (K)
T_core = T_sun
# Estimativa da barreira de potencial coulombiana (J)
U = (1 / (4 * np.pi * epsilon0)) * (e * e / r_proton)
# Converter para MeV (1 eV = 1.602e-19 J, 1 MeV = 1e6 eV)
U_MeV = U.to(u.eV, u.mass_energy()).to(u.MeV)
# # Energia térmica média (J)
E_thermal = k_B * T_core
# # Converter para MeV
E_thermal_MeV = E_thermal.to(u.eV, equivalencies=u.temperature_energy()).to(u.MeV)
U_MeV, E_thermal_MeV
m_e = physical_constants["electron mass"][0] * u.kg
m_p = physical_constants["proton mass"][0] * u.kg
m_n = physical_constants["neutron mass"][0] * u.kg
M = physical_constants['deuteron mass'][0] * u.kg
Z = 1
A = 2
B = (Z*m_p + (A-Z)*m_n - M - Z*m_e).to(u.eV, u.mass_energy()).to(u.MeV)
B
Autor | Luciano Barosi |
---|---|
Última Modificação | 07-03-2022 |
Alterações | Descrição das modificações |