Closed luv-deluxe closed 4 years ago
Can you please attach the schema file causing the problem and the python code you used for checking?
Here is my variant of python calls for such schema and it gets the same results as the app:
python
Python 2.7.12 (default, Oct 8 2019, 14:14:10)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> M_M1_t = np.matrix([[1, 0], [0, 1]])
>>> M_d1_t = np.matrix([[1, 0.09], [0, 1]])
>>> M_s1_f_t = np.matrix([[1, 0], [4.50549e-7, 0.549451]])
>>> M_s1_b_t = np.matrix([[1, 0], [8.2e-7, 1.82]])
>>> M_d2_t = np.matrix([[1, 0.05], [0, 1]])
>>> M_F1_t = np.matrix([[1, 0], [-2, 1]])
>>> M0_t = M_d2_t * M_s1_f_t * M_d1_t * M_M1_t * M_d1_t * M_s1_b_t * M_d2_t * M_F1_t
>>> M0_t
matrix([[ 0.14480008, 0.42760006],
[-2.00000112, 1.00000101]])
The difference I see here is my ABCD refraction matrix from medium to air on convex curvature (center located after interface - back propagation).
M_s1_f_t = np.matrix([[1, 0], [8.2e-7, 1.82]])
- in my case.
initial n1 = 1.82
final n2 = 1
R = 1e6
A = 1
B = 0
C = (1.82-1) / 1*1e6 = 8.2e-7
D = 1.82 / 1 = 1.82
Obviously M_s1_f_t is different as well.
Maybe I messed up something, but I believe ABCD calculation is fine. Going from right to left makes this refraction convex.
To get C=4.5e-7
I need to have refraction from air with initial n1=1
into medium with final n2=1.82
on concave surface, what essentially happens when propagating from left (M1) to right (lens).
>>> C = (1-1.82)/(-1e6*1.82)
4.5054945054945056e-07
Lets considert it step-by-step:
0) How we calculate the round-trip regarding to d2
:
d2 * s1 (forward propagation) * d1 * M1 * d1 * s1 (back propagation) * d2 * F1
1) s1
Forward propagation - the beam enters the medium, n1=1
, n2=1.82
, surface is concave R<0
.
C = (n1-n2)/(R*n2) = (1-1.82)/(-1e6*1.82) = 4.50549e-07
reZonator uses a bit different convention and to get a concave surface you have to set R>0
, but it also swaps n1
and n2
in formula for C
and eventually it gives the same result:
C = (n2-n1)/(R*n2) = (1.82-1)/(1e6*1.82) = 4.50549e-07
2) s1
Back propagation - the beam exits the medium, n1=1.82
, n2=1
, surface is convex R>0
:
C = (n1-n2)/(R*n2) = (1.82-1)/(1e6*1) = 8.2e-07
Again, reZonator uses a bit different convention and to get a convex surface you have to set R<0
, but it also swaps n1
and n2
in formula for C
and eventually it gives the same result:
C = (n2-n1)/(R*n2) = (1-1.82)/(-1e6) = 8.2e-07
Both of these values you can see in the matrix window for s1
.
Ad. 0 - calculation sequence d2 * s1 (forward) - here, after passing d2 in medium, beam is leaving it through convex surface (from beam's point of view), so I believe rezonator should put (Ad.2) s1 back-propagating matrix (C=8.2e-7), not forward.
Ad. 1,2 - You are correct and I agree - no doubt.
The common rule of matrix optics is that element matrices are multiplied in the direction opposite to the direction of the beam propagation. Here it is mentioned in the doc http://rezonator.orion-project.org/help/round_trip_matrix.html. So when you calculate the round-trip matrix regarding to d2, you say "the beam traversed d2, and before that it entered d2 from air, and before that it traversed d1, and before that it was reflected by M1" and so on.
Since there is no activity, I think it's all clear now so close the issue. Please reopen if there are additional questions,
I do have following scheme with calculated RTM as shown in screenshot.
But, if I calculate it manually (both python and by hand) I get
which is different. I use ABCD (given by reZonator) for each individual component and get same result.