summaryrefslogtreecommitdiff
path: root/abcd.m
diff options
context:
space:
mode:
authorEugeniy Mikhailov <evgmik@gmail.com>2011-04-13 11:10:28 -0400
committerEugeniy Mikhailov <evgmik@gmail.com>2011-04-13 11:10:28 -0400
commite75e6f968d620fde5d5596092e6c6b0f2cc4aa94 (patch)
tree687bdfc42ff71a588e2bfb7208df78747914c99e /abcd.m
parent855e0053c56bbe2555e87b180f3bf3f3ecccf121 (diff)
downloadmode_match-e75e6f968d620fde5d5596092e6c6b0f2cc4aa94.tar.gz
mode_match-e75e6f968d620fde5d5596092e6c6b0f2cc4aa94.zip
beam propagation function renamed and moved to separate files
Ignore-this: 972fa9dce2f57e8ddb1624bab32be1ed darcs-hash:20110413151028-067c0-a7e6d0c98e2856fdff930d4bf3216056eb937367
Diffstat (limited to 'abcd.m')
-rw-r--r--abcd.m80
1 files changed, 0 insertions, 80 deletions
diff --git a/abcd.m b/abcd.m
index ac9b1db..814615c 100644
--- a/abcd.m
+++ b/abcd.m
@@ -29,87 +29,7 @@ function optics = arrange_optics_along_x(optics_unsorted)
end
end
-function q = prop_forward(x_pos, q_in, x_in, optics_elements)
-% calculate the 'q' parameter of the Gaussian beam propagating through optical
-% 'optics_elements' only in the positive direction along 'x' axis at points 'x_pos'
-% takes the gaussian beam with initial q_in parameter at x_in
-%
-% all x_pos must be to the right of x_in
-% x_pos must be monotonic!
- if (any(x_pos < x_in))
- error('all beam positions must be to the right of the x_in');
- end
-
- optics_elements=arrange_optics_along_x(optics_elements);
-
- % Forward propagation to the right of x_in
- Np=length(x_pos); % number of 'x' points
- Nel=length(optics_elements) ;
- q=0*x_pos; % q vector initialization
- q_last_calc=q_in;
- x_last_calc=x_in; % the furthest calculated point
- for i=1:Np
- x_pos_i=x_pos(i);
- for k=1:length(optics_elements)
- % iterates through optics_elements to make sure
- % we take them in account for the beam propagation
- el=optics_elements{k};
- if ( (x_last_calc < el.x) && (el.x <= x_pos_i) )
- abcd=abcd_free_space(el.x-x_last_calc);
- q_last_calc=q_afteer_element(q_last_calc,abcd);
- q_last_calc=q_afteer_element(q_last_calc,el.abcd);
- x_last_calc=el.x;
- endif
- endfor
- if (x_pos_i > x_last_calc);
- abcd=abcd_free_space(x_pos_i-x_last_calc);
- q_last_calc=q_afteer_element(q_last_calc,abcd);
- x_last_calc=x_pos_i;
- endif
- q(i)=q_last_calc;
- endfor
-end
-
-function q = prop(x_pos, q_in, x_in, optics_elements)
-% calculate the 'q' parameter of the Gaussian beam propagating through optical
-% 'optics_elements' array along 'x' axis at points 'x_pos'
-% takes the gaussian beam with initial q_in parameter at x_in
-% x_pos must be monotonic!
-
- q=0*x_pos; % q vector initialization
- if any(x_pos >= x_in)
- % Forward propagation to the right of x_in
- q(x_pos >= x_in) = prop_forward(x_pos(x_pos>=x_in), q_in, x_in, optics_elements);
- end
-
- if any(x_pos < x_in)
- % Backward propagation part the left of x_in
- % do it as forward propagation of the reverse beam
- x_backw=x_pos(x_pos<x_in);
- % now let's reflect the beam with respect to x_in
- % and solve the problem as forward propagating.
- x_backw=x_in-x_backw;
- % now we need to flip x positions
- x_backw=fliplr(x_backw);
- % reflected beam means inverted radius of curvature or real part of q parameter
- q_in_backw = -real(q_in) + 1i*imag(q_in);
- optics_elements_backw=optics_elements;
- % we need to flip all optics elements around x_in as well
- for i=1:length(optics_elements_backw)
- optics_elements_backw{i}.x=x_in-optics_elements_backw{i}.x;
- end
-
- q_backw = prop_forward(x_backw, q_in_backw, 0, optics_elements_backw);
- % now we need to flip the radius of curvature again
- q_backw = -real(q_backw) + 1i*imag(q_backw);
-
- % final assignment of the backwards propagating beam
- % which we need to flip back
- q(x_pos<x_in) = fliplr(q_backw);
- end
-
-endfunction
function waste =q2waste(q, lambda)
for i=1:size(q,2)