diff options
author | Eugeniy Mikhailov <evgmik@gmail.com> | 2011-04-13 22:54:04 -0400 |
---|---|---|
committer | Eugeniy Mikhailov <evgmik@gmail.com> | 2011-04-13 22:54:04 -0400 |
commit | e1f4d542650fe7cbb5dd0b8dbf40f422be1ef991 (patch) | |
tree | 09198e7e4983e3385de9087d449e7e9da01ac1dd /waste2waste.max | |
parent | a70fb91882267fc65ca8ab2de019a45a02f5883b (diff) | |
download | mode_match-e1f4d542650fe7cbb5dd0b8dbf40f422be1ef991.tar.gz mode_match-e1f4d542650fe7cbb5dd0b8dbf40f422be1ef991.zip |
maxima related code into separate dir
Ignore-this: 460324d098e59fdff6dd25e2ed0aac2a
darcs-hash:20110414025404-067c0-3f766887d6911a2822b4a0b97f9a8423766438b5
Diffstat (limited to 'waste2waste.max')
-rw-r--r-- | waste2waste.max | 301 |
1 files changed, 0 insertions, 301 deletions
diff --git a/waste2waste.max b/waste2waste.max deleted file mode 100644 index c431352..0000000 --- a/waste2waste.max +++ /dev/null @@ -1,301 +0,0 @@ -writefile("session.out")$ - -dist(z):=(matrix([1,z],[0,1]))$ -lens(f):=(matrix([1,0],[-1/f,1]))$ - -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])$ - -wr2q(w,r):=1/(1/r-%i*lamb/%pi/(w^2))$ -q2w(q):=sqrt(-lamb/%pi/imagpart(1/q))$ -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) - ) -) $ - - -/* 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) - )$ -q2z0(q):=block([w,r], - w:q2w(q),r:q2r(q), return(r/(1+(lamb*r/%pi/w^2)^2)) - )$ -q2q0(q):=%i*%pi*q2w0(q)^2/lamb$ - -q0f2z_for_colim_lens(q0,f):=f+%pi*q2w(q0)^2/lamb$ - -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) -)$ - - -check_real(x):=if featurep(x[1],real) then if featurep(x[2],real) then if featurep(x[3],real) then true else false $ - -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 $ - -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 $ - -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) -); -/*=========================================================*/ -/* - 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) - )$ - 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) - )$ - q0fq02l(q0,f,qf):=q0fq02z1(q0,f,qf)+q0fq02z2(q0,f,qf)$ -/*=========================================================*/ -/* - for back propogation we need to change R -> -R -*/ -q2bq(q):=wr2q(q2w(q),-q2r(q)); -/*=========================================================*/ -/*=========================================================*/ -/*=========================================================*/ -/*=========================================================*/ - - - -/*=========================================================*/ -/* 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:.85$ -lamb:1.064e-6$ -/* starting waste */ -w0:0.675e-3$ -r0:1e100$ -/* final waste */ -wend:0.023e-3$ -rend:1e100$ - -/* lenses focal length */ -f1:.025$ -f2:.055$ -f_col:0.07118$ - -/* collimated region size */ -dist_betw_f2_f_col:.30$ -/*=========================================================*/ - -optics_after_parral_beam:[lens(-.111),dist(.05)]$ - - q0:ev(wr2q(w0,r0),numer)$ - qend:wr2q(wend,rend)$ -/* -qf:prop(qend,abcd(reverse(optics_after_parral_beam)))$ -float(realpart(qf))$ -float(imagpart(qf))$ -*/ -qf:qend$ - -/*finally position of collimated lens */ -z_col:float(qf2colim_lens_posit(qf,f_col))$ -if (z_col <0) - then (print("it is not possible to get collimated beam z_col=",z_col), - quit() -) $ -qf:prop(qf,abcd([dist(z_col),lens(f_col)]))$ - - - -qf:prop(qf,abcd([dist(dist_betw_f2_f_col),lens(f2)]) )$ - -/* below something wrong */ -dist2waste:ev(-q2z0(qf),numer)$ -print( "===============");dist2waste; -rad_now:ev(q2r(qf),numer)$ -qf:ev(q2q0(qf),numer)$ -/*===========================================*/ - - -space_between_wastes:ev(q0fq02l(q0,f1,qf), numer)$ -dist2first_lens:ev(q0fq02z1(q0,f1,qf),numer)$ -dist2first_lens_tmp:ev(q0fq02z2(q0,f1,qf),numer)$ - -z1:ev(dist2first_lens,numer)$ -z2:ev(space_between_wastes+dist2waste,numer)$ -z3:ev(z2+dist_betw_f2_f_col,numer)$ - -ltotal:z3+z_col$ - -/* -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("##########################################") - )$ - system("cat answ.txt")$ - system("xterm -e octave propagation.m") $ - -quit()$ - -/* -solve([eqn1,eqn2,eqn3],[z1,z2,z3]); -*/ - - - -/* - - -z3:ltotal-z1-z2$ -fabcd:ev(mfull)$ -f(z1,z2):=ev(float(abs(qf)-abs(prop(q0,fabcd))))$ -fr(z1,z2):=abs(f(z1,z2)); -fi(z1,z2):=imagpart(f(z1,z2)); -fr(.2,.4); -fi(.2,.4); - -plot3d(f(z1,z2), [z1,0,1],[z2,0,1], ['colour_z,true], [plot_format,gnuplot], -[run_viewer,false]); - -printreal(x):=if featurep(x[1],real) then if featurep(x[2],real) then if featurep(x[3],real) then x; - -printreal(slt[4]);float(ev(realpart(solut),number)); -float(ev(imagpart(solut),number)); -*/ |