Commit 129380a9 authored by Evan Hall's avatar Evan Hall Committed by Jameson Rollins

Introduce atmospheric infrasound newtonian noise

It is calculated if the YAML model include an 'Atmospheric' section that describes the atmospheric intrasound spectrum and coupling.

Based on Harms LRR (2015), eq. 172 [https://doi.org/10.1007/lrr-2015-3]
parent 254a5862
Pipeline #67406 passed with stages
in 1 minute and 21 seconds
......@@ -38,6 +38,10 @@ def noise_calc(f, ifo):
noises['ITM Thermo-Refractive'] = noise.substratethermal.thermorefractiveITM(f, ifo)
noises['ITM Carrier Density'] = noise.substratethermal.carrierdensity(f, ifo)
# calc atmospheric noise sources, if desired
if 'Atmospheric' in ifo:
noises['Atmospheric Infrasound'] = noise.newtonian.atmois(f, ifo)
# adjust noise curves for multiple bounces - for resonant delay lines
# Brownian noise scales as Neff (correlation-corrected spot number)
# Displacement noises scale as N^2
......@@ -55,6 +59,8 @@ def noise_calc(f, ifo):
noises['Newtonian Gravity'] *= N**2
noises['Seismic'] *= N**2
noises['Coating Thermo-Optic'] *= N
if 'Atmospheric Infrasound' in noises:
noises['Atmospheric Infrasound'] *= N**2
else:
N = ifo.Infrastructure.NFolded
sep_w = ifo.Infrastructure.DelayLineSpotSeparation
......@@ -68,6 +74,8 @@ def noise_calc(f, ifo):
noises['Newtonian Gravity'] *= Ndispl**2
noises['Seismic'] *= Ndispl**2
noises['Coating Thermo-Optic'] *= N_TO
if 'Atmospheric Infrasound' in noises:
noises['Atmospheric Infrasound'] *= Ndispl**2
#noises['Mirror Thermal'] = noises['Substrate Brownian'] + noises['Coating Brownian'] + \
# noises['Substrate Thermo-Elastic'] + noises['Coating Thermo-Optic'] # total mirror thermal
......
......@@ -78,6 +78,14 @@ Seismic:
RayleighWaveSpeed: 250 # m/s
#darmSeiSusFile: 'CryogenicLIGO/Sensitivity/GWINC/seismic.mat'
Atmospheric:
InfrasoundLevel1Hz: 0.01 # Pa/rtHz
InfrasoundExponent: -1
AirPressure: 101325 # Pa
AirDensity: 1.225 # kg/m**3
AdiabaticIndex: 1.4
SoundSpeed: 344 # m/s
Suspension:
Type: 'BQuad'
VHCoupling:
......
......@@ -68,3 +68,34 @@ def gravg(f, ifo):
n /= (omicron**2)
return n * ifo.gwinc.sinc_sqr
def atmois(f, ifo):
import scipy.special as scisp
a_if = ifo.Atmospheric.InfrasoundLevel1Hz
e_if = ifo.Atmospheric.InfrasoundExponent
p_air = ifo.Atmospheric.AirPressure
rho_air = ifo.Atmospheric.AirDensity
ai_air = ifo.Atmospheric.AdiabaticIndex
c_sound = ifo.Atmospheric.SoundSpeed
L = ifo.Infrastructure.Length
ggcst = scipy.constants.G
h = ifo.Seismic.TestMassHeight
w = 2 * pi * f
k = w / c_sound
# Pressure spectrum
psd_if = (a_if * f**e_if)**2
# Harms LRR (2015), eq. 172
# https://doi.org/10.1007/lrr-2015-3
# With an extra factor 2 for two arms
# And with the Bessel terms ignored... for 4 km this amounts to a 10%
# correction at 10 Hz and a 30% correction at 1 Hz
coupling_if = 4./3 * (4 * pi / (k * L * w**2) * ggcst * rho_air / (ai_air * p_air))**2
n_if = coupling_if * psd_if
return n_if * ifo.gwinc.sinc_sqr
......@@ -27,6 +27,11 @@ STYLE_MAP = {
# color = 'xkcd:green',
color = '#15b01a',
),
'Atmospheric Infrasound': dict(
# color = 'xkcd:neon green',
color = '#0cff0c',
ls = '--',
),
'Suspension Thermal': dict(
# color = 'xkcd:deep sky blue',
color = '#0d75f8',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment