summaryrefslogtreecommitdiff
path: root/abcd.m
diff options
context:
space:
mode:
authorEugeniy Mikhailov <evgmik@gmail.com>2011-04-12 17:29:09 -0400
committerEugeniy Mikhailov <evgmik@gmail.com>2011-04-12 17:29:09 -0400
commit6f758b106dc359fa18b5f332edc0b4f18fbdd6ba (patch)
treec6d4aa57ab9c185804c3d867340e675129a25986 /abcd.m
parent6cd92eb7bd2bc23d708e872a8fee1900ee15eef6 (diff)
downloadmode_match-6f758b106dc359fa18b5f332edc0b4f18fbdd6ba.tar.gz
mode_match-6f758b106dc359fa18b5f332edc0b4f18fbdd6ba.zip
added comments and variables name are more readable now
Ignore-this: 41c15ffd065ac70f4508aa9a3f4803ce darcs-hash:20110412212909-067c0-a9a6d4ffa182651939b7aeae5405fbd2600c567a
Diffstat (limited to 'abcd.m')
-rw-r--r--abcd.m45
1 files changed, 27 insertions, 18 deletions
diff --git a/abcd.m b/abcd.m
index 11cbe57..8404314 100644
--- a/abcd.m
+++ b/abcd.m
@@ -10,27 +10,36 @@ function qnew=q_afteer_element(q_old,abcd)
qnew=(q_old*abcd(1,1)+abcd(1,2))/(q_old*abcd(2,1)+abcd(2,2));
endfunction
-function q = prop(x_final, q_in, elements)
- q(size(x_final,2))=0;
- for i=1:size(x_final,2)
- x_final_i=x_final(i);
- xend=0;
- q_end=q_in;
- for k=1:size(elements,2)
- el=nth(elements,k);
- if ( el.x <= x_final_i)
- abcd=abcd_free_space(el.x-xend);
- q_end=q_afteer_element(q_end,abcd);
- q_end=q_afteer_element(q_end,el.abcd);
- xend=el.x;
+function q = prop(x_pos, q_in, elements)
+% calculate the 'q' parameter of the Gaussian beam propagating through optical
+% 'elements' array along 'x' axis at points 'x_pos'
+% takes the gaussian beam with initial q_in parameter at x_pos(1)
+
+ Np=length(x_pos); % number of 'x' points
+ Nel=length(elements);
+ q=0*x_pos; % q vector initialization
+ q(1)=q_in;
+ q_last_calc=q_in;
+ x_last_calc=x_pos(1); % the furthest calculated point
+ for i=2:Np
+ x_pos_i=x_pos(i);
+ for k=1:length(elements)
+ % iterates through optical elements to make sure
+ % we take them in account for the beam propagation
+ el=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_final_i > xend);
- abcd=abcd_free_space(x_final_i-xend);
- q_end=q_afteer_element(q_end,abcd);
- xend=x_final_i;
+ 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_end;
+ q(i)=q_last_calc;
endfor
endfunction