From 952fcf6bba01c73a0dad2f54799c0ce41aa32688 Mon Sep 17 00:00:00 2001
From: Charlotte Bond <czb@star.sr.bham.ac.uk>
Date: Wed, 8 Jan 2014 13:33:17 +0000
Subject: [PATCH] tidying and conforming to vinet09 layout

---
 src/new/thermal/FT_thermal_lens.m             |  4 +++-
 .../FT_thermal_lens_from_bulk_absorption.m    | 17 +++++++-------
 .../FT_thermal_lens_from_coating_absorption.m | 23 +++++++++++--------
 3 files changed, 26 insertions(+), 18 deletions(-)

diff --git a/src/new/thermal/FT_thermal_lens.m b/src/new/thermal/FT_thermal_lens.m
index 64d0e6e..d9d4a51 100644
--- a/src/new/thermal/FT_thermal_lens.m
+++ b/src/new/thermal/FT_thermal_lens.m
@@ -6,6 +6,8 @@
 % returns the lens as well as the approximate (Gaussian weighted) 
 % paraboloid.
 %
+% N.B. Currently only valid for an incident LG00 mode.
+%
 % beam:     Structure containing beam parameters (FT_init_thermal_beam.m)
 % mirror:   Structure containing mirror parameters 
 %           (FT_init_thermal_mirror.m)
@@ -32,7 +34,7 @@ function [Z,c,p] = FT_thermal_lens(beam,mirror,r,option,num_terms)
         [Z,coeffs] = FT_thermal_lens_from_coating_absorption(beam,mirror,r,num_terms);
         [c,p] = FT_approximate_paraboloid_for_thermal_lens(coeffs,mirror.X,mirror.a,beam.w);
         
-    % thermal lens from bulk absorption
+    % Thermal lens from bulk absorption
     elseif strcmp(option,'bulk')
        
         [Z,coeffs] = FT_thermal_lens_from_bulk_absorption(beam,mirror,r,num_terms);
diff --git a/src/new/thermal/FT_thermal_lens_from_bulk_absorption.m b/src/new/thermal/FT_thermal_lens_from_bulk_absorption.m
index d9527f5..d157028 100644
--- a/src/new/thermal/FT_thermal_lens_from_bulk_absorption.m
+++ b/src/new/thermal/FT_thermal_lens_from_bulk_absorption.m
@@ -33,14 +33,13 @@ function [Z_bulk,coeffs] = FT_thermal_lens_from_bulk_absorption(beam,mirror,r,nu
     % Currently only valid for LG00
     p = 0;
     l = 0;  
-    
     a = mirror.a;
     h = mirror.h;
     K = mirror.K;
     dn_dT = mirror.dn_dT;
     Babs = mirror.Babs;
     X = mirror.X;
-    P = beam.P;
+    Power = beam.P;
     lambda = beam.lambda;
     w = beam.w;
     
@@ -48,21 +47,23 @@ function [Z_bulk,coeffs] = FT_thermal_lens_from_bulk_absorption(beam,mirror,r,nu
     r_abs = abs(r);
 
     % Constant
-    c = dn_dT * Babs*P*h / (pi*K); 
+    c = dn_dT * Babs*Power*h / (pi*K); 
     
     % Calculating coefficients
-    zeta_0s = FT_bessel_zeros(0,X,num_terms);
-    p_0s = FT_calculate_fourier_bessel_coefficients(0,0,X,w,a,num_terms);
+    zeta_n = FT_bessel_zeros(2*l,X,num_terms);
+    pn = FT_calculate_fourier_bessel_coefficients(p,l,X,w,a,num_terms);
     
     % Calculating sum of terms to approximate thermal lens
     Z_bulk=0;
     
     for s=1:num_terms
         
-        coeffs(s) = c * (1 - (2*X*a/(zeta_0s(s)*h) * sinh(zeta_0s(s)*h/(2*a))) / (zeta_0s(s)*sinh(zeta_0s(s)*h/(2*a)) + X*cosh(zeta_0s(s)*h/(2*a))));
-        coeffs(s) = coeffs(s) * exp(-zeta_0s(s)^2*w^2/(8*a^2)) / ((zeta_0s(s)^2+X^2) * (besselj(0,zeta_0s(s))^2));
+        gamma_n = zeta_n(s)*h/(2*a);
+        d1n = zeta_n(s)*sinh(gamma_n)+X*cosh(gamma_n);
         
-        Z_bulk = Z_bulk +  coeffs(s)*besselj(0,zeta_0s(s)*r_abs/a);
+        coeffs(s) = c * pn(s)/(zeta_n(s)^2) * (1-(X/gamma_n)*sin(gamma_n)/d1n);
+
+        Z_bulk = Z_bulk +  coeffs(s)*besselj(2*l,zeta_n(s)*r_abs/a);
     end
           
 
diff --git a/src/new/thermal/FT_thermal_lens_from_coating_absorption.m b/src/new/thermal/FT_thermal_lens_from_coating_absorption.m
index 93a4d50..734f2f8 100644
--- a/src/new/thermal/FT_thermal_lens_from_coating_absorption.m
+++ b/src/new/thermal/FT_thermal_lens_from_coating_absorption.m
@@ -30,36 +30,41 @@
 function [Z_coat,coeffs] = FT_thermal_lens_from_coating_absorption(beam,mirror,r,num_terms)
     
     % Mirror and beam parameters 
-    % Currently only valid LG00
+    % Currently only valid LG00 
     p = 0;
-    l = 0; 
+    l = 0;
     a = mirror.a;
     h = mirror.h;
     K = mirror.K;
     dn_dT = mirror.dn_dT;
     Cabs = mirror.Cabs;
-    X = mirror.X
-    P = beam.P;
+    X = mirror.X;
+    Power = beam.P;
     lambda = beam.lambda;
     w = beam.w;
     
+    
     % Lens is axis-symmetric
     r_abs = abs(r);
 
     % Constant
-    c = dn_dT * Cabs*P / (pi*K); 
+    c = dn_dT * Cabs*Power / (pi*K); 
     
     % Calculating coefficients
-    zeta_0s = FT_bessel_zeros(0,X,num_terms);
-    p_0s = FT_calculate_fourier_bessel_coefficients(0,0,X,w,a,num_terms);
+    zeta_n = FT_bessel_zeros(2*l,X,num_terms);
+    pn = FT_calculate_fourier_bessel_coefficients(p,l,X,w,a,num_terms);
     
     % Calculating sum of terms to approximate thermal lens
     Z_coat=0;
     
     for s=1:num_terms
         
-        coeffs(s) = c*p_0s(s)*(1/zeta_0s(s)) * (1-exp(-zeta_0s(s)*h/a))/(zeta_0s(s)+X-(zeta_0s(s)-X)*exp(-zeta_0s(s)*h/a));
-        Z_coat = Z_coat +  coeffs(s)*besselj(0,zeta_0s(s)*r_abs/a);
+        % Coefficients
+        gamma_n = zeta_n(s)*h/(2*a);
+        d1n = zeta_n(s)*sinh(gamma_n)+X*cosh(gamma_n);
+        
+        coeffs(s) = c*pn(s)*(1/zeta_n(s)) * sinh(gamma_n)/d1n;
+        Z_coat = Z_coat +  coeffs(s)*besselj(2*l,zeta_n(s)*r_abs/a);
     end
           
 
-- 
GitLab