@@ -5,6 +5,8 @@ using ..Common
5
5
export squarescale_reftra
6
6
7
7
function taylorx (dnx,dny,Kx,Ky,λ,l:: PatternedLayer )
8
+ IMa= Diagonal (Kx* 0 .+ 1 )
9
+ IM= [IMa 0 * IMa;0 * IMa IMa]
8
10
k0= 2 π/ real (λ)
9
11
# get the base permittivity
10
12
εxx= get_permittivity (l. materials[1 ],λ,1 )* I
@@ -65,17 +67,17 @@ function taylorx(dnx,dny,Kx,Ky,λ,l::PatternedLayer)
65
67
η= inv (εzz)
66
68
P= [Kx* η* Ky I- Kx* η* Kx;Ky* η* Ky- I - Ky* η* Kx]
67
69
Q= [Kx* Ky+ εyx εyy- Kx* Kx;Ky* Ky- εxx - εxy- Ky* Kx]
68
- A0= [0 I P;Q 0 I ]* k0* l. thickness
70
+ A0= [0 IM P;Q 0 IM ]* k0* l. thickness
69
71
nrm= maximum (sum (abs .(A0),dims= 1 ))
70
72
m= Int (ceil (log2 (nrm)))
71
73
A= A0* 2.0 ^- m
72
74
PQ= P* Q
73
75
PQP= PQ* P
74
76
QP= Q* P
75
77
QPQ= QP* Q
76
- A2= [PQ 0 I; 0 I QP]* (k0* l. thickness* 2.0 ^- m)^ 2
77
- A3= [0 I PQP;QP* Q 0 I ]* (k0* l. thickness* 2.0 ^- m)^ 3
78
- A6= [PQP* QPQ 0 I; 0 I QPQ* PQP]* (k0* l. thickness* 2.0 ^- m)^ 6
78
+ A2= [PQ 0 IM; 0 IM QP]* (k0* l. thickness* 2.0 ^- m)^ 2
79
+ A3= [0 IM PQP;QP* Q 0 IM ]* (k0* l. thickness* 2.0 ^- m)^ 3
80
+ A6= [PQP* QPQ 0 IM; 0 IM QPQ* PQP]* (k0* l. thickness* 2.0 ^- m)^ 6
79
81
# A2=A*A
80
82
# A3=A2*A
81
83
# A6=A3*A3
@@ -89,6 +91,8 @@ function taylorx(dnx,dny,Kx,Ky,λ,l::PatternedLayer)
89
91
return X^ (2 ^ m)
90
92
end
91
93
function squarescalex (dnx,dny,Kx,Ky,λ,l:: PatternedLayer )
94
+ IMa= Diagonal (Kx* 0 .+ 1 )
95
+ IM= [IMa 0 * IMa;0 * IMa IMa]
92
96
k0= 2 π/ real (λ)
93
97
# get the base permittivity
94
98
εxx= get_permittivity (l. materials[1 ],λ,1 )* I
@@ -121,7 +125,7 @@ function squarescalex(dnx,dny,Kx,Ky,λ,l::PatternedLayer)
121
125
η= inv (εzz)
122
126
P= [Kx* η* Ky I- Kx* η* Kx;Ky* η* Ky- I - Ky* η* Kx]
123
127
Q= [Kx* Ky+ εyx εyy- Kx* Kx;Ky* Ky- εxx - εxy- Ky* Kx]
124
- A0= [0 I P;Q 0 I ]* k0* l. thickness
128
+ A0= [0 IM P;Q 0 IM ]* k0* l. thickness
125
129
nrm= maximum (sum (abs .(A0),dims= 1 ))
126
130
m= Int (ceil (log2 (nrm)))
127
131
m= 0
@@ -130,39 +134,45 @@ function squarescalex(dnx,dny,Kx,Ky,λ,l::PatternedLayer)
130
134
return X^ (2 ^ m)
131
135
end
132
136
function taylor_reftra (ψin,m:: RCWAModel ,grd:: RCWAGrid ,λ)
137
+ IMa= Diagonal (grd. Kx* 0 .+ 1 )
138
+ IM= [IMa 0 * IMa;0 * IMa IMa]
139
+ IMb= [IM 0 * IM;0 * IM IM]
133
140
X= [taylorx (grd. dnx,grd. dny,grd. Kx,grd. Ky,λ,l) for l in m. layers]
134
- Xp= I
141
+ Xp= IMb
135
142
for X in X
136
143
Xp*= X
137
144
end
138
145
ref= halfspace (grd. Kx,grd. Ky,m. εsup,λ) # superstrate and substrate
139
146
tra= halfspace (grd. Kx,grd. Ky,m. εsub,λ)
140
- Y= Xp* [I ;- tra. V]
141
- S= [Y [- I ;- ref. V]]\ [I ;- ref. V]* ψin
147
+ Y= Xp* [IM ;- tra. V]
148
+ S= [Y [- IM ;- ref. V]]\ [IM ;- ref. V]* ψin
142
149
to,ro= slicehalf (S)
143
150
144
151
kzin= grd. k0[3 ]# *real(sqrt(get_permittivity(m.εsup,λ)))
145
- R= a2p (0 ro,ro,ref. V,I ,kzin) # compute amplitudes to powers
146
- T= - a2p (to,0 to,tra. V,I ,kzin)
152
+ R= a2p (0 ro,ro,ref. V,IM ,kzin) # compute amplitudes to powers
153
+ T= - a2p (to,0 to,tra. V,IM ,kzin)
147
154
148
155
return R,T
149
156
150
157
end
151
158
function squarescale_reftra (ψin,m:: RCWAModel ,grd:: RCWAGrid ,λ)
159
+ IMa= Diagonal (grd. Kx* 0 .+ 1 )
160
+ IM= [IMa 0 * IMa;0 * IMa IMa]
161
+ IMb= [IM 0 * IM;0 * IM IM]
152
162
X= [squarescalex (grd. dnx,grd. dny,grd. Kx,grd. Ky,λ,l) for l in m. layers]
153
- Xp= I
163
+ Xp= IMb
154
164
for X in X
155
165
Xp*= X
156
166
end
157
167
ref= halfspace (grd. Kx,grd. Ky,m. εsup,λ) # superstrate and substrate
158
168
tra= halfspace (grd. Kx,grd. Ky,m. εsub,λ)
159
- Y= Xp* [I ;- tra. V]
160
- S= [Y [- I ;- ref. V]]\ [I ;- ref. V]* ψin
169
+ Y= Xp* [IM ;- tra. V]
170
+ S= [Y [- IM ;- ref. V]]\ [IM ;- ref. V]* ψin
161
171
to,ro= slicehalf (S)
162
172
163
173
kzin= grd. k0[3 ]# *real(sqrt(get_permittivity(m.εsup,λ)))
164
- R= a2p (0 ro,ro,ref. V,I ,kzin) # compute amplitudes to powers
165
- T= - a2p (to,0 to,tra. V,I ,kzin)
174
+ R= a2p (0 ro,ro,ref. V,IM ,kzin) # compute amplitudes to powers
175
+ T= - a2p (to,0 to,tra. V,IM ,kzin)
166
176
167
177
return R,T
168
178
0 commit comments