summaryrefslogtreecommitdiff
path: root/cavity_design_demo.m
blob: 7bddf35236a095d5b66c2c551349343c9c940d2f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
% Design of a laser cavity with focus on 2  bow-tie resonator
% Notation follows

% "Laser resonators with several mirrors  and lenses with the bow-tie laser
% resonator with compensation for astigmatism  and thermal lens effects as an
% example" by Haim Abitan and Torben Skettrup 2005 J. Opt. A: Pure Appl. Opt. 7 7
% doi:10.1088/1464-4258/7/1/002
% http://dx.doi.org/10.1088/1464-4258/7/1/002


% The cavity defined by two flat mirrors and distance between them dm
% two concave mirrors with curvatures R1 and R2, and the shortest distance between them d1
% d2 is the beam path length from concave mirror -> flat -> flat -> concave mirror.
% dm is part of d2

% let's set some parameters
R1=0.8;
R2=1;
d1=3;
d2=1;
Ltot = d1+d2; % total resonator length

% operational wavelength
lambda = 795e-9;  

%% let's create cavity abcd matrix
% follow figure 4: elements goes as d1, f1, d3, f2
% where f1 and f2 lens mirror equivalent with f_i=R_i/2

abcd_cavity = abcd_mirror(R2)*abcd_free_space(d2)*abcd_mirror(R1)* abcd_free_space(d1);

% spelling out abcd coefficients
A = abcd_cavity(1,1);
B = abcd_cavity(1,2);
C = abcd_cavity(2,1);
D = abcd_cavity(2,2);


if ~isCavityStable(abcd_cavity)
    display('Cavity is unstable !');
    display('We should stop now. There is no stable mode in this cavity');
    error('Not possible to calculate a cavity mode in the unstable cavity');
end

display('Cavity is stable');

% stability parameter see eq.4
u = (A+D+2)/4;

% resonator waist eq.10
w0 = sqrt ( 2*lambda/(pi*abs(C))*sqrt(u*(1-u)) );

% resonator waist location along 1st arm eq.11
z0 = (A-D)/(2*C);

% Everything is periodic with respect to cavity length
% so by taking modulus with respect to its length
% we get rid of nasty virtual waist condition
z0 = mod(z0,Ltot);

% naturally the Gaussian beam curvature radius is huge i.e. wavefront is flat
q0=wr2q(w0, inf, lambda); %Calculate initial q

% time to build the optics set
mirror1.abcd = abcd_mirror( R1 ) ;
mirror1.x = d1;
mirror2.abcd = abcd_mirror( R2 ) ;
mirror2.x = d1 + d2;
optics={mirror1, mirror2};

% display properties setup
lens_width = .03; %Lens width
show_lens_width = 1; %Set to 1 to enable display of lens width on solution propagation plot
show_lens_position = 1; %Set to 1 to enable display of position of center of lens on solution propagation plot
display_prop = [show_lens_width, show_lens_position];


zstart = 0;
qstart = gbeam_propagation(zstart, q0, z0, optics);
zfinal = Ltot;
qfinal = gbeam_propagation(zfinal, q0, z0, optics);

% show beam in the resonator
[waste_at_the_end, radius_at_the_end, waist_at_mirrors] = solution_visualization(qstart,zstart, qfinal, zfinal, optics, lambda, lens_width, display_prop)