From 995890ddb4b7efc820d1d528b1afe57d16ce4f51 Mon Sep 17 00:00:00 2001 From: Christopher Wipf <wipf@ligo.mit.edu> Date: Thu, 23 Aug 2018 15:22:44 -0700 Subject: [PATCH] substratethermal: use adiabatic approx for carrier density & thermorefractive noises Note: these are cryo-silicon-only noises. The adiabatic approx is quite accurate and evaluates faster than the exact integral. See also https://git.ligo.org/rana-adhikari/CryogenicLIGO/issues/37 --- gwinc/noise/substratethermal.py | 58 +++++++++++++++++++++++++++++++-- 1 file changed, 55 insertions(+), 3 deletions(-) diff --git a/gwinc/noise/substratethermal.py b/gwinc/noise/substratethermal.py index 9129c0bb..a53ef954 100644 --- a/gwinc/noise/substratethermal.py +++ b/gwinc/noise/substratethermal.py @@ -9,7 +9,31 @@ from ..const import BESSEL_ZEROS as zeta from ..const import J0M as j0m -def carrierdensity(f, ifo): +def carrierdensity_adiabatic(f, ifo): + """strain noise psd arising from charge carrier density + fluctuations in ITM substrate (for semiconductor substrates).""" + + Omega = 2*pi*f + H = ifo.Materials.MassThickness + gammaElec = ifo.Materials.Substrate.ElectronIndexGamma + gammaHole = ifo.Materials.Substrate.HoleIndexGamma + diffElec = ifo.Materials.Substrate.ElectronDiffusion + diffHole = ifo.Materials.Substrate.HoleDiffusion + cdDens = ifo.Materials.Substrate.CarrierDensity + r0 = ifo.Optics.ITM.BeamRadius/np.sqrt(2) + T = ifo.Optics.ITM.Transmittance + L = ifo.Infrastructure.Length + Finesse = 2*pi/T + gPhase = 2*Finesse/pi + + psdElec = 4*H*gammaElec**2*cdDens*diffElec/(pi*r0**4*Omega**2) # units are meters + psdHole = 4*H*gammaHole**2*cdDens*diffHole/(pi*r0**4*Omega**2) # units are meters + psdMeters = 2 * (psdElec + psdHole) # electrons and holes for two ITMs + n = psdMeters / (gPhase*L)**2 + return n + + +def carrierdensity_exact(f, ifo): """Strain noise arising from charge carrier density fluctuations in ITM substrate For semiconductor substrates @@ -37,7 +61,7 @@ def carrierdensity(f, ifo): gPhase = 2*Finesse/pi omega = 2*pi*f - + def integrand(k, om, D): return D * k**3 * exp(-k**2 * w**2/4) / (D**2 * k**4 + om**2) @@ -58,8 +82,34 @@ def carrierdensity(f, ifo): return n +carrierdensity = carrierdensity_adiabatic -def thermorefractiveITM(f, ifo): + +def thermorefractiveITM_adiabatic(f, ifo): + """strain noise psd arising from thermorefractive + fluctuations in ITM substrate (for semiconductor substrates).""" + + Omega = 2*pi*f + H = ifo.Materials.MassThickness + beta = ifo.Materials.Substrate.dndT + kappa = ifo.Materials.Substrate.MassKappa + rho = ifo.Materials.Substrate.MassDensity + C = ifo.Materials.Substrate.MassCM + Temp = ifo.Materials.Substrate.Temp + kBT = scipy.constants.k * Temp + r0 = ifo.Optics.ITM.BeamRadius/np.sqrt(2) + L = ifo.Infrastructure.Length + T = ifo.Optics.ITM.Transmittance + Finesse = 2*pi/T + gPhase = 2*Finesse/pi + + psd = 4*H*beta**2*kappa*kBT*Temp/(pi*r0**4*Omega**2*(rho*C)**2) # units are meters + psdMeters = 2*psd # two ITMs + n = psdMeters / (gPhase*L)**2 + return n + + +def thermorefractiveITM_exact(f, ifo): """Strain noise from thermorefractive fluctuations in ITM substrate For semiconductor substrates. @@ -105,6 +155,8 @@ def thermorefractiveITM(f, ifo): return n +thermorefractiveITM = thermorefractiveITM_adiabatic + def subbrownian(f, ifo): """Strain noise from the Brownian thermal noise due to substrate mechanical loss -- GitLab