Skip to content

Commit 2c6043d

Browse files
author
Jon Schlipf
committed
fixes
1 parent e767723 commit 2c6043d

File tree

1 file changed

+25
-15
lines changed

1 file changed

+25
-15
lines changed

src/Taylor/Taylor.jl

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ using ..Common
55
export squarescale_reftra
66

77
function taylorx(dnx,dny,Kx,Ky,λ,l::PatternedLayer)
8+
IMa=Diagonal(Kx*0 .+1)
9+
IM=[IMa 0*IMa;0*IMa IMa]
810
k0=2π/real(λ)
911
#get the base permittivity
1012
εxx=get_permittivity(l.materials[1],λ,1)*I
@@ -65,17 +67,17 @@ function taylorx(dnx,dny,Kx,Ky,λ,l::PatternedLayer)
6567
η=inv(εzz)
6668
P=[Kx*η*Ky I-Kx*η*Kx;Ky*η*Ky-I -Ky*η*Kx]
6769
Q=[Kx*Ky+εyx εyy-Kx*Kx;Ky*Ky-εxx -εxy-Ky*Kx]
68-
A0=[0I P;Q 0I]*k0*l.thickness
70+
A0=[0IM P;Q 0IM]*k0*l.thickness
6971
nrm=maximum(sum(abs.(A0),dims=1))
7072
m=Int(ceil(log2(nrm)))
7173
A=A0*2.0^-m
7274
PQ=P*Q
7375
PQP=PQ*P
7476
QP=Q*P
7577
QPQ=QP*Q
76-
A2=[PQ 0I;0I QP]*(k0*l.thickness*2.0^-m)^2
77-
A3=[0I PQP;QP*Q 0I]*(k0*l.thickness*2.0^-m)^3
78-
A6=[PQP*QPQ 0I;0I QPQ*PQP]*(k0*l.thickness*2.0^-m)^6
78+
A2=[PQ 0IM;0IM QP]*(k0*l.thickness*2.0^-m)^2
79+
A3=[0IM PQP;QP*Q 0IM]*(k0*l.thickness*2.0^-m)^3
80+
A6=[PQP*QPQ 0IM;0IM QPQ*PQP]*(k0*l.thickness*2.0^-m)^6
7981
#A2=A*A
8082
#A3=A2*A
8183
#A6=A3*A3
@@ -89,6 +91,8 @@ function taylorx(dnx,dny,Kx,Ky,λ,l::PatternedLayer)
8991
return X^(2^m)
9092
end
9193
function squarescalex(dnx,dny,Kx,Ky,λ,l::PatternedLayer)
94+
IMa=Diagonal(Kx*0 .+1)
95+
IM=[IMa 0*IMa;0*IMa IMa]
9296
k0=2π/real(λ)
9397
#get the base permittivity
9498
εxx=get_permittivity(l.materials[1],λ,1)*I
@@ -121,7 +125,7 @@ function squarescalex(dnx,dny,Kx,Ky,λ,l::PatternedLayer)
121125
η=inv(εzz)
122126
P=[Kx*η*Ky I-Kx*η*Kx;Ky*η*Ky-I -Ky*η*Kx]
123127
Q=[Kx*Ky+εyx εyy-Kx*Kx;Ky*Ky-εxx -εxy-Ky*Kx]
124-
A0=[0I P;Q 0I]*k0*l.thickness
128+
A0=[0IM P;Q 0IM]*k0*l.thickness
125129
nrm=maximum(sum(abs.(A0),dims=1))
126130
m=Int(ceil(log2(nrm)))
127131
m=0
@@ -130,39 +134,45 @@ function squarescalex(dnx,dny,Kx,Ky,λ,l::PatternedLayer)
130134
return X^(2^m)
131135
end
132136
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]
133140
X=[taylorx(grd.dnx,grd.dny,grd.Kx,grd.Ky,λ,l) for l in m.layers]
134-
Xp=I
141+
Xp=IMb
135142
for X in X
136143
Xp*=X
137144
end
138145
ref=halfspace(grd.Kx,grd.Ky,m.εsup,λ) #superstrate and substrate
139146
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
142149
to,ro=slicehalf(S)
143150

144151
kzin=grd.k0[3]#*real(sqrt(get_permittivity(m.εsup,λ)))
145-
R=a2p(0ro,ro,ref.V,I,kzin) #compute amplitudes to powers
146-
T=-a2p(to,0to,tra.V,I,kzin)
152+
R=a2p(0ro,ro,ref.V,IM,kzin) #compute amplitudes to powers
153+
T=-a2p(to,0to,tra.V,IM,kzin)
147154

148155
return R,T
149156

150157
end
151158
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]
152162
X=[squarescalex(grd.dnx,grd.dny,grd.Kx,grd.Ky,λ,l) for l in m.layers]
153-
Xp=I
163+
Xp=IMb
154164
for X in X
155165
Xp*=X
156166
end
157167
ref=halfspace(grd.Kx,grd.Ky,m.εsup,λ) #superstrate and substrate
158168
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
161171
to,ro=slicehalf(S)
162172

163173
kzin=grd.k0[3]#*real(sqrt(get_permittivity(m.εsup,λ)))
164-
R=a2p(0ro,ro,ref.V,I,kzin) #compute amplitudes to powers
165-
T=-a2p(to,0to,tra.V,I,kzin)
174+
R=a2p(0ro,ro,ref.V,IM,kzin) #compute amplitudes to powers
175+
T=-a2p(to,0to,tra.V,IM,kzin)
166176

167177
return R,T
168178

0 commit comments

Comments
 (0)