diff options
author | evmik <evmik@ligo.mit.edu> | 2006-07-05 16:14:33 -0400 |
---|---|---|
committer | evmik <evmik@ligo.mit.edu> | 2006-07-05 16:14:33 -0400 |
commit | 2bf664aafb96cd3ba53445f9676232f2802f1b24 (patch) | |
tree | d7c84e7ee8b9f750bdbd1adcf9fb1d54853d81d5 /session.out | |
download | mode_match-2bf664aafb96cd3ba53445f9676232f2802f1b24.tar.gz mode_match-2bf664aafb96cd3ba53445f9676232f2802f1b24.zip |
initial release
darcs-hash:20060705201433-a6199-84b5b3f84e63c333f070a63f2f0c251fae7e146c
Diffstat (limited to 'session.out')
-rw-r--r-- | session.out | 373 |
1 files changed, 373 insertions, 0 deletions
diff --git a/session.out b/session.out new file mode 100644 index 0000000..7832cf9 --- /dev/null +++ b/session.out @@ -0,0 +1,373 @@ + +Starts dribbling to session.out (2006/7/5, 20:11:29). +(%i2) +dist(z):=(MATRIX([1,z],[0,1]))$ + +(%i3) lens(f):=(MATRIX([1,0],[-1/f,1]))$ + +(%i4) +abcd(optics_system):=block([tmp:MATRIX([1,0],[0,1])], (for i:1 thru length(optics_system) do tmp:optics_system[i].tmp ), return(tmp))$ + +prop(q0,abcd):=(abcd[1][1]*q0+abcd[1][2])/(abcd[2][1]*q0+abcd[2][2])$ + +(%i6) +wr2q(w,r):=1/(1/r-%I*lamb/%PI/(w^2))$ + +(%i7) q2w(q):=sqrt(-lamb/%PI/imagpart(1/q))$ + +(%i8) q2r(q):=block([rp:(realpart(1/q))], + (if (rp = 0) + then + (print("#dbg: R=1/0, will substitute R with something big"), + return(1e100)) + else + return(1/rp) + ) +) $ + +(%i9) + +/* find q0 for such q */ +q2w0(q):=block([w,r,w0], + w:q2w(q),r:q2r(q), + w0:(w/sqrt(1+(%Pi*w^2/lamb/r)^2)), + return (w0) + )$ + +(%i10) q2z0(q):=block([w,r], + w:q2w(q),r:q2r(q), return(r/(1+(lamb*r/%Pi/w^2)^2)) + )$ + +(%i11) q2q0(q):=%I*%Pi*q2w0(q)^2/lamb$ + +(%i12) +q0f2z_for_colim_lens(q0,f):=f+%Pi*q2w(q0)^2/lamb$ + +(%i13) +qf2colim_lens_posit(qstart,f):= block([q0,z0,zd], + q0:q2q0(qstart), + z0:q2z0(qstart), + zd:q0f2z_for_colim_lens(q0,f), + return(zd-z0) +)$ + +(%i14) + +check_real(x):=if featurep(x[1],real) then if featurep(x[2],real) then if featurep(x[3],real) then true else false $ + +(%i15) +check_posit(x):=if (part(x[1],2)>0) then if (part(x[2],2)>0) then if (part(x[3],2)>0) then true else false $ + +(%i16) +check_sm1(x):=if (part(x[1],2)<ltotal) then if (part(x[2],2)<ltotal) then if (part(x[3],2)<ltotal) then true else false $ + +(%i17) +select_realsolutions(x):=block([temp:[]], for i:1 thru length(x) do (if check_real(x[i]) then temp:float(append(temp,[x[i]])) ), return(temp) ) $ + +select_posit_solutions(x):=block([temp:[]], for i:1 thru length(x) do (if check_posit(x[i]) then temp:float(append(temp,[x[i]])) ), return(temp) ) $ + +select_sm1_solutions(x):=block([temp:[]], for i:1 thru length(x) do (if check_sm1(x[i]) then temp:float(append(temp,[x[i]])) ), return(temp) ) $ + +/*=========================================================*/ +/* + match one Gauss beam parameter q0(w0,r0) + to another one qf(wf,qf) + with the help of two known lens. + distance between q0 and qf is 'ltotal' + q0>|----z1-----(f1)------z2-------(f2)------z3--------|>qf + ^ ^ + |-------------------ltotal-------------------------| + the system should looks like above. + */ +/*=========================================================*/ +qffql2z1z2z3(q0,f1,f2,qf,ltotal):=block( + [ + m1,m2,m3,m4,m5,z1,z2,z3, + optics, mfull, + q0r,qoi, qfr,qfi, + eqt,eq1,solut, + eq1,eq2,eq3, + eqn1, eqn2,eqn3, + eqnev1, eqnev2, eqnev3, + slt, rsol + ], + + m1:dist(z1), + m2:lens(f1), + m3:dist(z2), + m4:lens(f2), + m5:dist(z3), + + optics:[m1,m2, m3, m4, m5], + mfull:abcd(optics), + + eqt:qf=prop(q0,mfull), + + q0r:float(realpart(q0)), + q0i:float(imagpart(q0)), + qfr:float(realpart(qf)), + qfi:float(imagpart(qf)), + + eq1:ev(eqt, q0=q0r+q0i*%I, qf=qfr+qfi*%I), + + solut:solve([eq1], [z3]), + + eqn1:imagpart(solut[1]), + eqn2:realpart(solut[1]), + eqn3:z1+z2+z3=ltotal, + + eqnev1:ev(eqn1,numer), + eqnev2:ev(eqn2,numer), + eqnev3:ev(eqn3,numer), + + + slt:solve([eqnev1,eqnev2,eqnev3],[z1,z2,z3]), + + print("slt=",slt), + + rsol:select_realsolutions(slt), + rsol:select_posit_solutions(rsol), + rsol:select_sm1_solutions(rsol), + + print("rsol=",rsol), + + + return(rsol) +); + +(%o20) qffql2z1z2z3(q0, f1, f2, qf, ltotal) := +block([m1, m2, m3, m4, m5, z1, z2, z3, optics, mfull, q0r, qoi, qfr, qfi, eqt, +eq1, solut, eq1, eq2, eq3, eqn1, eqn2, eqn3, eqnev1, eqnev2, eqnev3, slt, +rsol], m1 : dist(z1), m2 : lens(f1), m3 : dist(z2), m4 : lens(f2), +m5 : dist(z3), optics : [m1, m2, m3, m4, m5], mfull : abcd(optics), +eqt : qf = prop(q0, mfull), q0r : float(realpart(q0)), +q0i : float(imagpart(q0)), qfr : float(realpart(qf)), +qfi : float(imagpart(qf)), eq1 : ev(eqt, q0 = q0r + q0i %I, +qf = qfr + qfi %I), solut : solve([eq1], [z3]), eqn1 : imagpart(solut ), + 1 +eqn2 : realpart(solut ), eqn3 : z1 + z2 + z3 = ltotal, + 1 +eqnev1 : ev(eqn1, numer), eqnev2 : ev(eqn2, numer), eqnev3 : ev(eqn3, numer), +slt : solve([eqnev1, eqnev2, eqnev3], [z1, z2, z3]), print("slt=", slt), +rsol : select_realsolutions(slt), rsol : select_posit_solutions(rsol), +rsol : select_sm1_solutions(rsol), print("rsol=", rsol), return(rsol)) +(%i21) /*=========================================================*/ +/* + Zero ewaste to zero waste transformatin with lense + q0|------------(f)-----------|qf0 + ^ ^ ^ + |----z--------| | + | | + |-------------l------------| + we are lookking for z1,l +*/ + q0fq02z1(q0,f,qf):=block([f0,z1,w0tmp:q2w(q0),wftmp:q2w(qf)], + f0:%Pi*w0tmp*wftmp/lamb, + z1:f+w0tmp/wftmp*sqrt(f^2-f0^2), + return(z1) + )$ + +(%i22) q0fq02z2(q0,f,qf):=block([f0,z2,w0tmp:q2w(q0),wftmp:q2w(qf)], + f0:%Pi*w0tmp*wftmp/lamb, + z2:f+wftmp/w0tmp*sqrt(f^2-f0^2), + return(z2) + )$ + +(%i23) q0fq02l(q0,f,qf):=q0fq02z1(q0,f,qf)+q0fq02z2(q0,f,qf)$ + +(%i24) /*=========================================================*/ +/* + for back propogation we need to change R -> -R +*/ +q2bq(q):=wr2q(q2w(q),-q2r(q)); + +(%o24) q2bq(q) := wr2q(q2w(q), - q2r(q)) +(%i25) /*=========================================================*/ +/*=========================================================*/ +/*=========================================================*/ +/*=========================================================*/ + + + +/*=========================================================*/ +/* lets solve final waste to parrallel beam, + (actually back propogation) +*/ +/*=========================================================*/ +/* + this code tryes to find configuration of 3 given lenses with focal + length f1,f2, f_col + in such a way that starting from with initial waste (w0) + and radius (r0) + after propogation through lens 1 (f1 focal length) + and 2 (f2 focal length) + we have a collimated region with length (dist_betw_f2_f_col) + and then after passing through the lense 3 we at some distance + match to the final waste and radius (wend, rend). + Total distance between starting and final lense position will be + calculated in to the 'ltotal' + Beam have a wave length 'lamb'. + Everything calculated in meters. +*/ +/*======== Initial condition ==============================*/ +ltotal:4.85$ + +(%i26) lamb:1.064e-6$ + +(%i27) /* starting waste */ +w0:0.30e-3$ + +(%i28) r0:1e100$ + +(%i29) /* final waste */ +wend:37.09e-6$ + +(%i30) rend:1e100$ + +(%i31) +/* lenses focal length */ +f1:.025$ + +(%i32) f2:.075$ + +(%i33) f_col:0.7118$ + +(%i34) +/* collimated region size */ +dist_betw_f2_f_col:.30$ + +(%i35) /*=========================================================*/ + +optics_after_parral_beam:[lens(-.111),dist(.05)]$ + +(%i36) + q0:ev(wr2q(w0,r0),numer)$ + +(%i37) qend:wr2q(wend,rend)$ + +(%i38) /* +qf:prop(qend,abcd(reverse(optics_after_parral_beam)))$ +float(realpart(qf))$ +float(imagpart(qf))$ +*/ +qf:qend$ + +(%i39) +/*finally position of collimated lens */ +z_col:float(qf2colim_lens_posit(qf,f_col))$ + +Division by 0 +#0: q2w(q=1/(1.0E-100-773.4423732003382*%I/%PI)) +#1: q2w0(q=1/(1.0E-100-773.4423732003382*%I/%PI)) +#2: q2q0(q=1/(1.0E-100-773.4423732003382*%I/%PI)) + -- an error. Quitting. To debug this try debugmode(true); +(%i40) if (z_col <0) + then (print("it is not possible to get collimated beam z_col=",z_col), + quit() +) $ + +Maxima was unable to evaluate the predicate: +z_col < 0 + -- an error. Quitting. To debug this try debugmode(true); +(%i41) qf:prop(qf,abcd([dist(z_col),lens(f_col)]))$ + +(%i42) + + + +qf:prop(qf,abcd([dist(dist_betw_f2_f_col),lens(f2)]) )$ + +(%i43) +/* below something wrong */ +dist2waste:ev(-q2z0(qf),numer)$ + +Division by 0 +#0: q2w(q=((MATRIX([1,0],[-13.33333333333333,1]) . MATRIX([1,0.3],[0,1]) . MATRIX([1,0],[0,1]))[1][1]*((MATRIX...) +#1: q2z0(q=((MATRIX([1,0],[-13.33333333333333,1]) . MATRIX([1,0.3],[0,1]) . MATRIX([1,0],[0,1]))[1][1]*((MATRIX...) + -- an error. Quitting. To debug this try debugmode(true); +(%i44) rad_now:ev(q2r(qf),numer)$ + +(%i45) qf:ev(q2q0(qf),numer)$ + +Division by 0 +#0: q2w(q=((MATRIX([1,0],[-13.33333333333333,1]) . MATRIX([1,0.3],[0,1]) . MATRIX([1,0],[0,1]))[1][1]*((MATRIX...) +#1: q2w0(q=((MATRIX([1,0],[-13.33333333333333,1]) . MATRIX([1,0.3],[0,1]) . MATRIX([1,0],[0,1]))[1][1]*((MATRIX...) +#2: q2q0(q=((MATRIX([1,0],[-13.33333333333333,1]) . MATRIX([1,0.3],[0,1]) . MATRIX([1,0],[0,1]))[1][1]*((MATRIX...) + -- an error. Quitting. To debug this try debugmode(true); +(%i46) /*===========================================*/ + + +space_between_wastes:ev(q0fq02l(q0,f1,qf), numer)$ + +Division by 0 +#0: q2w(q=1/(1.0E-100-11.82222222222223*%I/%PI)) +#1: q0fq02z1(q0=1/(1.0E-100-11.82222222222223*%I/%PI),f=0.025,qf=((MATRIX([1,0],[-13.33333333333333,1]) . MATRIX([1,0.3],[0,1]) . MATRIX([1,0],[0,1]))[1][1]*((MATRIX...) +#2: q0fq02l(q0=1/(1.0E-100-11.82222222222223*%I/%PI),f=0.025,qf=((MATRIX([1,0],[-13.33333333333333,1]) . MATRIX([1,0.3],[0,1]) . MATRIX([1,0],[0,1]))[1][1]*((MATRIX...) + -- an error. Quitting. To debug this try debugmode(true); +(%i47) dist2first_lens:ev(q0fq02z1(q0,f1,qf),numer)$ + +Division by 0 +#0: q2w(q=1/(1.0E-100-11.82222222222223*%I/%PI)) +#1: q0fq02z1(q0=1/(1.0E-100-11.82222222222223*%I/%PI),f=0.025,qf=((MATRIX([1,0],[-13.33333333333333,1]) . MATRIX([1,0.3],[0,1]) . MATRIX([1,0],[0,1]))[1][1]*((MATRIX...) + -- an error. Quitting. To debug this try debugmode(true); +(%i48) dist2first_lens_tmp:ev(q0fq02z2(q0,f1,qf),numer)$ + +Division by 0 +#0: q2w(q=1/(1.0E-100-11.82222222222223*%I/%PI)) +#1: q0fq02z2(q0=1/(1.0E-100-11.82222222222223*%I/%PI),f=0.025,qf=((MATRIX([1,0],[-13.33333333333333,1]) . MATRIX([1,0.3],[0,1]) . MATRIX([1,0],[0,1]))[1][1]*((MATRIX...) + -- an error. Quitting. To debug this try debugmode(true); +(%i49) +z1:ev(dist2first_lens,numer)$ + +(%i50) z2:ev(space_between_wastes+dist2waste,numer)$ + +(%i51) z3:ev(z2+dist_betw_f2_f_col,numer)$ + +(%i52) +ltotal:z3+z_col$ + +(%i53) +/* +qf:wr2q( -q2r(qf), q2w(qf) )$ +*/ + + +/* +rsol:qffql2z1z2z3(q0,f1,f2,qf,ltotal-z_col)$ + print("rsol=",rsol), +*/ + + + with_stdout("answ.txt", + print("##########################################"), + print( "lambda=",lamb), + print( "Ltot=", ltotal), + print( "r0=", r0), + print( "w0=", w0), + print(), + print( "lns1.abcd=abcd_lens(", f1 , ")" ), + print( "lns1.x=", z1 ), + print( "lns2.abcd=abcd_lens(", f2 , ")" ), + print( "lns2.x=", (z2) ), + print( "lns3.abcd=abcd_lens(", f_col , ")" ), + print( "lns3.x=", (z3) ), + print("wf=", wend), + print("rf=", rend), + /* + qfinal:prop(q0,ev(mfull)), + wfinal:float(q2w(qfinal)), + rfinal:float(q2r(qfinal)), + print("#final waste=", wfinal), + print("#I was aiming to final waste"), + print("#final radius=", rfinal), + print("#I was aiming to final radius"), + */ + print("##########################################") + )$ + +(%i54) system("cat answ.txt")$ + +(%i55) system("xterm -e octave abcd.m") $ + +(%i56) +quit()$ |