Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Ok-landscape
GitHub Repository: Ok-landscape/computational-pipeline
Path: blob/main/latex-templates/templates/astrophysics/gravitational_waves.tex
51 views
unlisted
1
% Gravitational Wave Physics
2
\documentclass[11pt,a4paper]{article}
3
\usepackage[utf8]{inputenc}
4
\usepackage[T1]{fontenc}
5
\usepackage{amsmath,amssymb}
6
\usepackage{graphicx}
7
\usepackage{booktabs}
8
\usepackage{siunitx}
9
\usepackage{geometry}
10
\geometry{margin=1in}
11
\usepackage{pythontex}
12
\usepackage{hyperref}
13
\usepackage{float}
14
15
\title{Gravitational Wave Physics\\Strain, Detection, and Binary Systems}
16
\author{Gravitational Wave Astronomy Group}
17
\date{\today}
18
19
\begin{document}
20
\maketitle
21
22
\begin{abstract}
23
Analysis of gravitational wave generation, propagation, and detection including chirp mass calculations and LIGO sensitivity.
24
\end{abstract}
25
26
\section{Introduction}
27
28
Gravitational waves are ripples in spacetime caused by accelerating masses.
29
30
\begin{pycode}
31
import numpy as np
32
import matplotlib.pyplot as plt
33
plt.rcParams['text.usetex'] = True
34
plt.rcParams['font.family'] = 'serif'
35
36
G = 6.674e-11
37
c = 2.998e8
38
M_sun = 1.989e30
39
pc = 3.086e16 # parsec in meters
40
\end{pycode}
41
42
\section{Chirp Mass}
43
44
$\mathcal{M} = \frac{(m_1 m_2)^{3/5}}{(m_1 + m_2)^{1/5}}$
45
46
\begin{pycode}
47
m1_range = np.linspace(1, 50, 50)
48
m2 = 30 # Fixed second mass
49
50
M_chirp = (m1_range * m2)**(3/5) / (m1_range + m2)**(1/5)
51
52
fig, ax = plt.subplots(figsize=(10, 6))
53
for m2_val in [10, 20, 30, 40]:
54
M_c = (m1_range * m2_val)**(3/5) / (m1_range + m2_val)**(1/5)
55
ax.plot(m1_range, M_c, linewidth=1.5, label=f'$m_2$ = {m2_val} $M_\\odot$')
56
ax.set_xlabel('$m_1$ ($M_\\odot$)')
57
ax.set_ylabel('Chirp Mass ($M_\\odot$)')
58
ax.set_title('Chirp Mass for Binary Systems')
59
ax.legend()
60
ax.grid(True, alpha=0.3)
61
plt.tight_layout()
62
plt.savefig('chirp_mass.pdf', dpi=150, bbox_inches='tight')
63
plt.close()
64
\end{pycode}
65
66
\begin{figure}[H]
67
\centering
68
\includegraphics[width=0.9\textwidth]{chirp_mass.pdf}
69
\caption{Chirp mass for different binary configurations.}
70
\end{figure}
71
72
\section{Gravitational Wave Frequency}
73
74
\begin{pycode}
75
# Orbital frequency to GW frequency
76
M_total = 60 * M_sun # Total mass
77
r_sep = np.logspace(6, 8, 100) * 1000 # Separation in meters
78
79
f_orb = np.sqrt(G * M_total / r_sep**3) / (2 * np.pi)
80
f_gw = 2 * f_orb # GW frequency is twice orbital
81
82
fig, ax = plt.subplots(figsize=(10, 6))
83
ax.loglog(r_sep / 1000, f_gw, 'b-', linewidth=2)
84
ax.set_xlabel('Separation (km)')
85
ax.set_ylabel('GW Frequency (Hz)')
86
ax.set_title('Gravitational Wave Frequency vs Separation')
87
ax.grid(True, alpha=0.3, which='both')
88
plt.tight_layout()
89
plt.savefig('gw_frequency.pdf', dpi=150, bbox_inches='tight')
90
plt.close()
91
\end{pycode}
92
93
\begin{figure}[H]
94
\centering
95
\includegraphics[width=0.9\textwidth]{gw_frequency.pdf}
96
\caption{GW frequency dependence on binary separation.}
97
\end{figure}
98
99
\section{Strain Amplitude}
100
101
$h = \frac{4}{D}\left(\frac{G\mathcal{M}}{c^2}\right)^{5/3}\left(\frac{\pi f}{c}\right)^{2/3}$
102
103
\begin{pycode}
104
D = 400 * 1e6 * pc # Distance (400 Mpc)
105
M_c = 30 * M_sun # Chirp mass
106
f_range = np.logspace(0, 3, 100)
107
108
h = (4 / D) * (G * M_c / c**2)**(5/3) * (np.pi * f_range / c)**(2/3)
109
110
fig, ax = plt.subplots(figsize=(10, 6))
111
ax.loglog(f_range, h, 'b-', linewidth=2)
112
ax.set_xlabel('Frequency (Hz)')
113
ax.set_ylabel('Strain $h$')
114
ax.set_title(f'GW Strain at D = 400 Mpc')
115
ax.grid(True, alpha=0.3, which='both')
116
plt.tight_layout()
117
plt.savefig('gw_strain.pdf', dpi=150, bbox_inches='tight')
118
plt.close()
119
\end{pycode}
120
121
\begin{figure}[H]
122
\centering
123
\includegraphics[width=0.9\textwidth]{gw_strain.pdf}
124
\caption{Gravitational wave strain amplitude.}
125
\end{figure}
126
127
\section{Inspiral Waveform}
128
129
\begin{pycode}
130
# Simple inspiral model
131
M_c_kg = 30 * M_sun
132
t_merge = 1.0 # Time to merger
133
t = np.linspace(0, t_merge - 0.01, 10000)
134
tau = t_merge - t # Time to coalescence
135
136
# Frequency evolution
137
f_t = (1 / np.pi) * (5 / (256 * tau))**(3/8) * (G * M_c_kg / c**3)**(-5/8)
138
f_t = np.clip(f_t, 10, 1000)
139
140
# Phase
141
phi_t = -2 * (tau / (5 * G * M_c_kg / c**3))**(5/8)
142
h_t = np.sin(phi_t)
143
144
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(12, 8), sharex=True)
145
ax1.plot(t, f_t, 'b-', linewidth=1)
146
ax1.set_ylabel('Frequency (Hz)')
147
ax1.set_title('Inspiral Waveform')
148
ax1.set_yscale('log')
149
ax1.grid(True, alpha=0.3)
150
151
ax2.plot(t, h_t, 'b-', linewidth=0.5)
152
ax2.set_xlabel('Time (s)')
153
ax2.set_ylabel('Strain (arb. units)')
154
ax2.set_xlim([0.8, 1])
155
ax2.grid(True, alpha=0.3)
156
plt.tight_layout()
157
plt.savefig('inspiral_waveform.pdf', dpi=150, bbox_inches='tight')
158
plt.close()
159
\end{pycode}
160
161
\begin{figure}[H]
162
\centering
163
\includegraphics[width=0.9\textwidth]{inspiral_waveform.pdf}
164
\caption{Binary inspiral frequency and waveform evolution.}
165
\end{figure}
166
167
\section{LIGO Sensitivity}
168
169
\begin{pycode}
170
# Simplified LIGO noise curve
171
f_ligo = np.logspace(0.5, 4, 500)
172
S_n = 1e-47 * ((f_ligo / 100)**(-4) + 2 * (1 + (f_ligo / 100)**2))
173
h_n = np.sqrt(S_n * f_ligo)
174
175
fig, ax = plt.subplots(figsize=(10, 6))
176
ax.loglog(f_ligo, np.sqrt(S_n), 'b-', linewidth=2, label='LIGO Sensitivity')
177
ax.set_xlabel('Frequency (Hz)')
178
ax.set_ylabel('Strain Noise ($1/\\sqrt{\\mathrm{Hz}}$)')
179
ax.set_title('LIGO Sensitivity Curve')
180
ax.legend()
181
ax.grid(True, alpha=0.3, which='both')
182
ax.set_xlim([10, 3000])
183
plt.tight_layout()
184
plt.savefig('ligo_sensitivity.pdf', dpi=150, bbox_inches='tight')
185
plt.close()
186
\end{pycode}
187
188
\begin{figure}[H]
189
\centering
190
\includegraphics[width=0.9\textwidth]{ligo_sensitivity.pdf}
191
\caption{LIGO detector sensitivity curve.}
192
\end{figure}
193
194
\section{Energy Radiated}
195
196
\begin{pycode}
197
# Energy in GWs
198
eta = 0.25 # Symmetric mass ratio
199
M_total_energy = 60 * M_sun
200
E_rad = eta * M_total_energy * c**2 * 0.1 # ~10% radiated
201
202
distances = np.logspace(7, 10, 100) * pc
203
L_gw = E_rad / 0.1 # Peak luminosity over 0.1 s
204
205
fig, ax = plt.subplots(figsize=(10, 6))
206
ax.loglog(distances / (1e6 * pc), np.sqrt(L_gw * G / (c**3 * distances**2)), 'b-', linewidth=2)
207
ax.set_xlabel('Distance (Mpc)')
208
ax.set_ylabel('Strain')
209
ax.set_title('Detectable Strain vs Distance')
210
ax.grid(True, alpha=0.3, which='both')
211
plt.tight_layout()
212
plt.savefig('strain_distance.pdf', dpi=150, bbox_inches='tight')
213
plt.close()
214
\end{pycode}
215
216
\begin{figure}[H]
217
\centering
218
\includegraphics[width=0.9\textwidth]{strain_distance.pdf}
219
\caption{GW strain as function of source distance.}
220
\end{figure}
221
222
\section{Merger Rate}
223
224
\begin{pycode}
225
# Merger rate density
226
z = np.linspace(0, 2, 100)
227
R_0 = 100 # Local rate per Gpc^3 per year
228
R_z = R_0 * (1 + z)**1.5 # Simple evolution
229
230
fig, ax = plt.subplots(figsize=(10, 6))
231
ax.plot(z, R_z, 'b-', linewidth=2)
232
ax.set_xlabel('Redshift $z$')
233
ax.set_ylabel('Merger Rate (Gpc$^{-3}$ yr$^{-1}$)')
234
ax.set_title('Binary Black Hole Merger Rate')
235
ax.grid(True, alpha=0.3)
236
plt.tight_layout()
237
plt.savefig('merger_rate.pdf', dpi=150, bbox_inches='tight')
238
plt.close()
239
\end{pycode}
240
241
\begin{figure}[H]
242
\centering
243
\includegraphics[width=0.9\textwidth]{merger_rate.pdf}
244
\caption{Merger rate evolution with redshift.}
245
\end{figure}
246
247
\section{Results}
248
249
\begin{pycode}
250
M_c_example = (30 * 30)**(3/5) / (60)**(1/5)
251
print(r'\begin{table}[H]')
252
print(r'\centering')
253
print(r'\caption{GW150914-like Parameters}')
254
print(r'\begin{tabular}{@{}lc@{}}')
255
print(r'\toprule')
256
print(r'Parameter & Value \\')
257
print(r'\midrule')
258
print(f'Chirp mass & {M_c_example:.1f} $M_\\odot$ \\\\')
259
print(f'Energy radiated & {E_rad/M_sun/c**2:.1f} $M_\\odot c^2$ \\\\')
260
print(f'Peak frequency & $\\sim$250 Hz \\\\')
261
print(f'Peak strain & $\\sim 10^{{-21}}$ \\\\')
262
print(r'\bottomrule')
263
print(r'\end{tabular}')
264
print(r'\end{table}')
265
\end{pycode}
266
267
\section{Conclusions}
268
269
Gravitational wave astronomy provides unique insights into compact binary systems and strong-field gravity.
270
271
\end{document}
272
273