summaryrefslogtreecommitdiff
path: root/abcd.m
diff options
context:
space:
mode:
Diffstat (limited to 'abcd.m')
-rw-r--r--abcd.m135
1 files changed, 135 insertions, 0 deletions
diff --git a/abcd.m b/abcd.m
new file mode 100644
index 0000000..faa46c0
--- /dev/null
+++ b/abcd.m
@@ -0,0 +1,135 @@
+function fs_abcd = abcd_free_space( distance)
+ fs_abcd=[1, distance; 0,1];
+endfunction
+
+function lens_abcd =abcd_lens(focal_distance)
+ lens_abcd = [1, 0; -1/focal_distance, 1];
+endfunction
+
+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;
+ 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;
+ endif
+ q(i)=q_end;
+ endfor
+endfunction
+
+function waste =q2waste(q, lambda)
+ for i=1:size(q,2)
+ waste(i)=sqrt (-lambda/pi/imag(1/q(i)));
+ endfor
+endfunction
+
+function radius =q2radius(q, lambda)
+ for i=1:size(q,2)
+ radius(i)=(1/real(1/q(i)));
+ endfor
+endfunction
+
+function q=waste_r2q(waste,R,lambda)
+ q=1/(1/R-I*lambda/pi/waste/waste);
+endfunction
+
+
+
+
+##########################################
+lambda= 1.064E-6 ;
+Ltot= 1 ;
+r0= 1.0E+100 ;
+w0= 25.63e-6;
+#w0= 3.79E-4 ;
+lns1.abcd=abcd_lens( 0.25 ) ;
+lns1.x= 0.37680270021479 ;
+lns2.abcd=abcd_lens( 0.1 ) ;
+lns2.x= 0.90277021575519 ;
+rf=1e100;
+wf=25.630e-6;
+##########################################
+source("answ.txt")
+
+
+q0=waste_r2q(w0,r0,lambda);
+optics=list(lns1,lns2,lns3);
+optics_forward=optics;
+
+x=0:.01:Ltot;
+printf("=================================\n")
+q1=prop(x,q0,optics);
+printf("=================================\n")
+w1=q2waste(q1, lambda);
+r1=q2radius(q1,lambda);
+
+printf("=================================\n")
+#q1b=prop(Ltot,q0,optics)
+#wb=q2waste(q1b, lambda)
+#rb=-q2radius(q1b,lambda)
+#because of back propogation
+rf=-rf;
+q1b=waste_r2q(wf,rf,lambda);
+
+lns1.x=Ltot-lns1.x;
+lns2.x=Ltot-lns2.x;
+lns3.x=Ltot-lns3.x;
+optics=list(lns3,lns2,lns1);
+q2b=prop(x,q1b,optics);
+printf("=================================\n")
+wb=q2waste(q2b, lambda);
+rb=q2radius(q2b,lambda);
+xb=Ltot-x;
+#plot (x,w1, "1")
+plot (x,w1, "1", xb, wb, "2")
+
+printf("=================================\n")
+printf("======= final check =============\n")
+printf("======= after propogatin ========\n")
+printf("following are theoretical values: \n")
+w0
+r0
+wf
+rf
+q0=waste_r2q(w0,r0,lambda);
+optics=list(lns1,lns2,lns3);
+qtf=prop(Ltot, q0, optics_forward);
+printf("values below should match 'wf' and 'rf': \n")
+waste = q2waste(qtf, lambda)
+radius = q2radius(qtf,lambda)
+
+pause(100)
+quit()
+system("cat answ.txt answ.txt")
+answ=menu("Is it reasonable mode matching?","yes","no")
+if (answ ==1)
+ printf("xxxxxxxxxxxxxxxxxxxxxxxxxxxx")
+ system("cat answ.txt >>good_mode_matching.txt")
+else
+ printf("------------------------------")
+endif
+
+exit
+#
+#gset term postscript
+#gset output "foo.ps"
+#plot (x,w1, "1", xb, wb, "2")
+
+