Skip to content
Snippets Groups Projects
Commit 87c6b7fb authored by Daniel Brown's avatar Daniel Brown
Browse files

adding bayer-helms coupling coeffiecent routines into simtools

parent 7d4a8152
No related branches found
No related tags found
No related merge requests found
function [ Sg ] = FT_bayer_helms_Sg( n1,n2,X,X_bar,F,F_bar)
%FT_BAYER_HELMS_SG Summary of this function goes here
% Detailed explanation goes here
if mod(n1,2) == 0
mu1_max = n1/2;
else
mu1_max = (n1-1)/2;
end
if mod(n2,2) == 0
mu2_max = n2/2;
else
mu2_max = (n2-1)/2;
end
Sg = 0;
for mu1 = 0:mu1_max
for mu2 = 0:mu2_max
sig_max = min(mu1,mu2);
tmp = 0;
for sig = 0:sig_max
tmp = tmp + (-1)^sig * F_bar^(mu1-sig) * F^(mu2-sig) / (factorial(2*sig) * factorial(mu1-sig) * factorial(mu2 - sig));
end
Sg = Sg + tmp * (-1)^mu1 * X_bar^(n1-2*mu1) * X^(n2-2*mu2) / (factorial(n1-2*mu1) * factorial(n2 - 2*mu2));
end
end
end
function [ Sg ] = FT_bayer_helms_Su( n1,n2,X,X_bar,F,F_bar)
%FT_BAYER_HELMS_SG Summary of this function goes here
% Detailed explanation goes here
Sg = 0;
if n1 > 0 && n2 > 0
if mod(n1-1,2) == 0
mu1_max = n1/2;
else
mu1_max = (n1-1)/2;
end
if mod(n2-1,2) == 0
mu2_max = n2/2;
else
mu2_max = (n2-1)/2;
end
Sg = 0;
for mu1 = 0:mu1_max
for mu2 = 0:mu2_max
sig_max = min(mu1,mu2);
tmp = 0;
for sig = 0:sig_max
tmp = tmp + (-1)^sig * F_bar^(mu1-sig) * F^(mu2-sig) / (factorial(2*sig+1) * factorial(mu1-sig) * factorial(mu2 - sig));
end
Sg = Sg + tmp * (-1)^mu1 * X_bar^(n1-2*mu1-1) * X^(n2-2*mu2-1) / (factorial(n1-2*mu1-1) * factorial(n2 - 2*mu2-1));
end
end
end
end
function [ kn ] = FT_bayer_helms_kn( gp1, gp2, gp_idx, n1, n2, gamma)
%FT_BAYER_HELMS_KN Summary of this function goes here
% Detailed explanation goes here
K = 0.5i .* conj(gp1.q(gp_idx) - gp2.q(gp_idx)) ./ imag(gp1.q(gp_idx));
K0 = (gp1.zr(gp_idx) - gp2.zr(gp_idx))./gp2.zr(gp_idx);
n1_fac = factorial(n1);
n2_fac = factorial(n2);
X_bar = 0;
X = 0;
if gamma ~= 0.0
theta = gp2.w0(gp_idx)./gp2.zr(gp_idx);
gg0 = gamma./theta;
X_bar = 1./ (sqrt(1+conj(K))) * (-1*(gp2.z(gp_idx)/gp2.zr(gp_idx)-1i)*gg0);
X = 1./ (sqrt(1+conj(K))) * (-1*(gp2.z(gp_idx)/gp2.zr(gp_idx)+1i*(1+2*conj(K)))*gg0);
end
F = K./(2.*(1+K0));
F_bar = conj(K)./2;
Ex = exp( -(X.*X_bar * 0.5));
kn = (-1)^n2_fac * Ex * sqrt(n1_fac*n2_fac) * ...
(1+K0)^(n1/2+0.25) * (1-conj(K))^(-(n1+n2+2)/2) ...
* (FT_bayer_helms_Sg(n1,n2,X,X_bar,F,F_bar) - FT_bayer_helms_Su(n1,n2,X,X_bar,F,F_bar));
end
function [ knm ] = FT_bayer_helms_knm( gp_in, gp_out, n1, m1, n2, m2, gamma_x, gamma_y )
%FT_BAYER_HELMS_KNM Summary of this function goes here
% Detailed explanation goes here
knm = FT_bayer_helms_kn(gp_in,gp_out,1,n1,n2,gamma_x) * FT_bayer_helms_kn(gp_in,gp_out,2,m1,m2,gamma_y);
end
% Plots x axis tilt coupling into higher order modes using bayer-helms
% equations
clear all;
z = 0;
w0 = 1e-3;
lambda = 1064e-9;
zr = pi*w0^2/lambda;
q = z + 1i*zr;
gp = FT_init_gauss_param(lambda, 1, 'q',q);
gamma = logspace(-8, -2, 100);
for i=1:length(gamma)
k00_00(i) = FT_bayer_helms_knm(gp, gp, 0,0,0,0, gamma(i), 0);
k00_10(i) = FT_bayer_helms_knm(gp, gp, 0,0,1,0, gamma(i), 0);
k00_20(i) = FT_bayer_helms_knm(gp, gp, 0,0,2,0, gamma(i), 0);
k00_30(i) = FT_bayer_helms_knm(gp, gp, 0,0,3,0, gamma(i), 0);
k00_40(i) = FT_bayer_helms_knm(gp, gp, 0,0,4,0, gamma(i), 0);
end
figure();
semilogx(gamma, abs(k00_00), gamma, abs(k00_10), gamma, abs(k00_20), gamma, abs(k00_30), gamma, abs(k00_40));
xlabel('\gamma_x (misalignment) [rad]');
ylabel('|k_{nmn''m''}|');
title(sprintf('Coupling from x tilt into higher order modes, w_0=%Gm, z=%Gm', w0, z));
legend('k_{0000}','k_{0010}','k_{0020}','k_{0030}','k_{0040}','Location','Best');
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment