Residual gas sub-budgets and updates
Adds residual gas damping and additional molecular species to the residual gas calculations. The gas scattering and gas damping are now tracked separately for each species in an excess gas sub-budget. The damping calculation is done in the infinite volume limit by default but adds corrections for squeezed film damping if specified in the yaml file. The aLIGO excess gas sub-budget is shown below as an example.
The new yaml file fields are explained in this comment. The yaml files in this merge request are simpler and none of the interferometers include squeezed film damping.
For aLIGO, Aplus, and Voyager, H2, N2, and H2O are considered. The numbers for aLIGO are taken from the link in this comment. The numbers for Aplus and Voyager are copied from aLIGO and should be checked. The Cosmic Explorer interferometers additionally consider CO2 and Ar.
Closes #63 (closed).
Merge request reports
Activity
@kevin.kuns very nice. But why not put the full ExcessGas Budget in noises.py and use it in all the IFOs? Is there some reason why the CO2 and Ar components should not be in the aLIGO and Aplus budgets? I don't see why it would hurt to include thm, unless they really add significant calculation time.
Also, this is another reason why it'll be nice to have the sub-budgets at runtime (#83). In that case we wouldn't specify any of the species explicitly in noises.py or the init files.
added 42 commits
-
722770d0...7c146498 - 25 commits from branch
gwinc:master
- d94a4f53 - pass arm cavity and molecular gas properties to res gas function
- 71912107 - add aLIGO excess gas sub-budget for H2, N2, and H2O
- 9cbba893 - add infinite volume residual gas damping
- 401fe8ec - add increased residual gas damping to due squeezed film damping
- 2112e5ac - reparametrize yaml file for squeezed film damping
- ecbf43b2 - can compute separate gas damping for ITMs and ETMs
- 75fb6a49 - Add CO2 and Ar gas noise functions to noises.py
- 181cabef - Gas color
- 81a72783 - add subscripts to residual gas labels
- 4a5b7165 - tweak res gas logic
- 4c228b0e - update residual gas parameters for all ifo's; remove old ExcessGas nb.Noise
- 35b3dced - missing factor in res gas damping
- 76ae9352 - get gas damping temperature from suspension struct
- a4747094 - only use H2, H20, N2, and O2
- bb125561 - simplify residual gas logic
- ecb68405 - make both beamtube and chamber pressure mandatory yaml parameters
- a467add5 - refactor res gas so that all ifo's import the same ExcessGas from noises
Toggle commit list-
722770d0...7c146498 - 25 commits from branch
mentioned in merge request !135 (merged)
What else needs to be done to merge this? Gas damping is a noise that is not currently included in master.
If there's worry about chamber pressures, my idea was to get some data as is done here
https://git.ligo.org/NoiseBudget/aligoNB/-/blob/master/aligoNB/H1/budget.py#L337
For the non-CE ifos, I just ended up setting them equal to the tube pressures for now which, unlike for CE, didn't seem crazy. I'm not sure what good times are to get data for.
757 768 758 769 """ 759 770 style = dict( 760 label='Excess Gas', 761 color='#add00d', 762 linestyle='--', 771 label='H$_2$ scattering', 772 color='xkcd:red orange' 773 ) 774 775 def calc(self): 776 cavity = arm_cavity(self.ifo) 777 species = self.ifo.Infrastructure.ResidualGas.H2 778 n = noise.residualgas.residual_gas_scattering( 779 self.freq, self.ifo, cavity, species) 780 dhdl_sqr, sinc_sqr = dhdl(self.freq, self.ifo.Infrastructure.Length) 909 linestyle='-', 910 ) 911 912 noises = [ 913 ExcessGasScatteringH2, 914 ExcessGasScatteringN2, 915 ExcessGasScatteringH2O, 916 ExcessGasScatteringO2, 917 ExcessGasDampingH2, 918 ExcessGasDampingN2, 919 ExcessGasDampingH2O, 920 ExcessGasDampingO2, 921 ] 922 923 924 def _calc_residual_gas_damping(f, ifo, species, sustf): changed this line in version 4 of the diff
Can someone else sign off on the actual noise calc?
Edited by Jameson Rollins921 ] 922 923 924 def _calc_residual_gas_damping(f, ifo, species, sustf): 925 """Redundant calculation of res gas damping for each species 926 927 Can get rid of if budgets are calculated at runtime 928 """ 929 squeezed_film = ifo.Infrastructure.ResidualGas.get('SqueezedFilm', Struct()) 930 931 if squeezed_film is None: 932 raise ValueError('Must specify either excess damping or a gap') 933 934 # Calculate squeezed film for ETM and ITM seperately if either is given 935 # explicitly. If only one is given, it is not computed for the other one. 936 if ('ETM' in squeezed_film) or ('ITM' in squeezed_film): changed this line in version 4 of the diff
It should be an or. You can specify squeezed film damping for only the ETMs, only the ITMs, both separately, or both the same. This is because the damping between the ITMs and the compensations plates may be different from the damping between the ETMs and the reaction masses. The extra squeezed film damping may also be negligible for one of these but not the other.
added 1 commit
- b7f7ba72 - move calc_residual_gas_damping from noises.py to residualgas.py
- Automatically resolved by Kevin Kuns
125 raise ValueError('Must specify either excess damping or a gap') 126 127 # Eq (5) 128 force_noise += DeltaS0 / (1 + (2*pi*f*diffusion_time)**2) 129 130 # convert force to displacement noise using the suspension susceptibility 131 noise = force_noise * abs(sustf.tst_suscept)**2 132 133 return noise 134 135 136 def calc_residual_gas_damping(f, ifo, species, sustf): 137 """Redundant calculation of res gas damping for each species 138 139 Can get rid of if budgets are calculated at runtime 140 """ added 1 commit
- 0a83defa - rename residual gas functions and update docstrings
added 1 commit
- cee15789 - move gas damping calculation function back to noises.py
It doesn't sound like there are any objections to the actual physics. I therefore assume we can merge this by the middle of next week and am making the summer school lectures with it. Again, residual gas damping is a new noise source not included on master. David has also been specifically asked to discuss residual gas noise.
mentioned in commit ede743c8
This MR breaks compatibility with all budgets that were using the Excess Gas noise source and do not yet have the new parameters in their ifo.yaml files.
It might be better in such cases to either keep the new code backward compatible, or else rename the new noise source and keep the old one around for a while with a deprecation warning.
mentioned in issue #104