40m QIL Cryo_Lab CTN SUS_Lab TCS_Lab OMC_Lab CRIME_Lab FEA ENG_Labs OptContFac Mariner WBEEShop
  PSL  Not logged in ELOG logo
Entry  Thu Sep 12 18:12:26 2013, Matt A., Summary, NoiseBudget, Coating Thermal Noise Calculator 6x
    Reply  Fri Sep 13 13:40:43 2013, rana, Summary, NoiseBudget, Coating Thermal Noise Calculator MattThermal.pdf
    Reply  Tue Sep 17 19:43:45 2013, tara, Summary, NoiseBudget, Coating Thermal Noise Calculator 
       Reply  Thu Sep 19 14:55:11 2013, tara, Summary, NoiseBudget, Coating Thermal Noise Calculator ThermalUpdateEmbed.pdfThermalUpdateEmbed2.pdf
          Reply  Thu Sep 19 18:09:18 2013, tara, Summary, NoiseBudget, Coating Thermal Noise Calculator 
Message ID: 1336     Entry time: Thu Sep 12 18:12:26 2013     Reply to this: 1337   1338
Author: Matt A. 
Type: Summary 
Category: NoiseBudget 
Subject: Coating Thermal Noise Calculator 
As part of checking Tara's code for optimizing the coating structure to reduce thermo-optic noise, I wrote this coating thermal noise calculator with all the values needed for calculating the Thermo-elastic, Thermo-refractive, Thermo-optic, and Brownian noise PSD of an GaAs/AlGaAs coating. 

Tara's code is a bastardized version of GWINC, and as such, it's horrible to read, and who knows where there might be errors. 

This code is based on the same papers as GWINC, but written semi- independently. That is: I wrote the code directly from the papers that are referenced in GWINC, and the code was checked against the output of GWINC, but none of the code in GWINC is directly copied, and in some cases, my code is based on the published papers instead of the ArXiv versions which are sometimes less clear. 

While this is currently just one long function, it is heavily commented and referenced, and can be easily augmented into a general-purpose coating thermal-noise calculator.

The code is called CoatingThermalNoiseCalc.m, and it calls only one additional function: the besselzero.m function that GWINC uses to calculate the zeros of a Bessel function.
It takes three inputs: x, firstN, and f. 

'x' is an array of values with each index representing the optical thickness of one layer in units of the laser wavelength, with the first index representing the topmost layer, and the last index representing the layer before the that is against the substrate. Therefore, if you wanted to calculate a 55-layer quarter-wave stack, you could use x = 1/4*ones(1,55); 
If you wanted to use a 1/2 layer cap on top of that, you could use x = [1/2,1/4*ones(1,55)]; etc.

'firstN' in an indicator of whether the top layer has a high index of refraction, or a low index. Therefore, it takes only two inputs: 'nH' or 'nL' for high index or low index, respectively. This entry is not case sensitive.

'f' is an array of frequencies in HZ for which you'd like to calculate the noise. This is generally generated using the logspace command: f = logspace(0,4,1000); would generate an array of 1000 frequencies logarithmically spaced from 1 to 10^4 Hz.

The code returns a structure containing the input frequency, .f, the calculated reflectivity of the layer stack, .Refl, the Transmittivity of the stack, .Trans, (which should equal 1-Refl) the phase of the reflected beam at the surface, .Rphase, the incoherent thermo-elastic noise psd, .SteZ, the incoherent thermo-refractive noise psd, .StrZ, the coherently added thermo-elastic and thermo-refractive noise, called the thermo-optic noise, .StoZ, and the Brownian thermal noise psd, .SbrZ. Where the power spectral densities are in units of m^2/Hz. These noises are for a single mirror with the mirror structure given by x, and currently, the laser wavelentgh is 1064 nm, but that is easily changed in the code, or the code can be easily re-written to accept further inputs. 

All the necessary code is stored in https://nodus.ligo.caltech.edu:30889/svn/trunk/mattabe/CoatingThermalNoiseCalc/
Along with an example.

I've checked the output against that of GWINC in three different cases:

Case 1: two 1/4-wavelength layers
Case 2: 55 1/4-wavelength layers
Case 3: Tara's optimized 55-layer coating

The attached figures show that the two techniques agree to better than 20% of the GWINC output, with most of the mismatch at higher frequencies. I'm not yet sure why that is. It could be due to my improved integration in calculating Evans' thick coating correction, it could be due to my using a different form of the equation for Braginsky's finite substrate correction for the thermo-elastic noise, or it could just be due to some minor differences in the precision of some of the input values. 

If you would like to run the code yourself, and you have any questions, let me know. I've also got the values you would need for calculating silica/tantala coatings.
 

 

Attachment 1: Case1_Noise.pdf  32 kB  | Hide | Hide all
Case1_Noise.pdf
Attachment 2: Case1_Resid.pdf  7 kB  | Hide | Hide all
Case1_Resid.pdf
Attachment 3: Case2_Noise.pdf  39 kB  | Hide | Hide all
Case2_Noise.pdf
Attachment 4: Case2_Resid.pdf  16 kB  | Hide | Hide all
Case2_Resid.pdf
Attachment 5: Case3_Noise.pdf  33 kB  | Hide | Hide all
Case3_Noise.pdf
Attachment 6: Case3_Resid.pdf  16 kB  | Hide | Hide all
Case3_Resid.pdf
ELOG V3.1.3-