Skip to content

Commit c91fd54

Browse files
author
Jon Schlipf
committed
supporting simple and anisotropic layers in taylor as well
1 parent 2c6043d commit c91fd54

File tree

1 file changed

+66
-0
lines changed

1 file changed

+66
-0
lines changed

src/Taylor/Taylor.jl

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,72 @@ using LinearAlgebra,CUDA
33
using ..Common
44

55
export squarescale_reftra
6+
taylorx(dnx,dny,Kx,Ky,λ,l::SimpleLayer)=eigenmodes(dnx,dny,Kx,Ky,λ,l).X
7+
function taylorx(dnx,dny,Kx,Ky,λ,l::AnisotropicLayer)
8+
# probably doable without taylor as well?
9+
IMa=Diagonal(Kx*0 .+1)
10+
IM=[IMa 0*IMa;0*IMa IMa]
11+
k0=2π/real(λ)
12+
#get the base permittivity
13+
εxx=get_permittivity(l.materials[1],λ,1)*I
14+
εxy=get_permittivity(l.materials[1],λ,2)*I
15+
εyx=get_permittivity(l.materials[1],λ,3)*I
16+
εyy=get_permittivity(l.materials[1],λ,4)*I
17+
εzz=get_permittivity(l.materials[1],λ,5)*I
18+
a01=0
19+
a11=-0.10036558103014462001
20+
a21=-0.00802924648241156960
21+
a31=-0.00089213849804572995
22+
23+
b01=0
24+
b11=0.39784974949964507614
25+
b21=1.36783778460411719922
26+
b31=0.49828962252538267755
27+
b41=-0.00063789819459472330
28+
29+
b02=-10.9676396052962062593
30+
b12=1.68015813878906197182
31+
b22=0.05717798464788655127
32+
b32=-0.00698210122488052084
33+
b42=0.00003349750170860705
34+
35+
b03=-0.09043168323908105619
36+
b13=-0.06764045190713819075
37+
b23=0.06759613017704596460
38+
b33=0.02955525704293155274
39+
b43=-0.00001391802575160607
40+
41+
b04=0
42+
b14=0
43+
b24=-0.09233646193671185927
44+
b34=-.01693649390020817171
45+
b44=-0.00001400867981820361
46+
η=inv(εzz)
47+
P=[Kx*η*Ky I-Kx*η*Kx;Ky*η*Ky-I -Ky*η*Kx]
48+
Q=[Kx*Ky+εyx εyy-Kx*Kx;Ky*Ky-εxx -εxy-Ky*Kx]
49+
A0=[0IM P;Q 0IM]*k0*l.thickness
50+
nrm=maximum(sum(abs.(A0),dims=1))
51+
m=Int(ceil(log2(nrm)))
52+
A=A0*2.0^-m
53+
PQ=P*Q
54+
PQP=PQ*P
55+
QP=Q*P
56+
QPQ=QP*Q
57+
A2=[PQ 0IM;0IM QP]*(k0*l.thickness*2.0^-m)^2
58+
A3=[0IM PQP;QP*Q 0IM]*(k0*l.thickness*2.0^-m)^3
59+
A6=[PQP*QPQ 0IM;0IM QPQ*PQP]*(k0*l.thickness*2.0^-m)^6
60+
#A2=A*A
61+
#A3=A2*A
62+
#A6=A3*A3
63+
B1=a01*I+a11*A+a21*A2+a31*A3
64+
B2=b01*I+b11*A+b21*A2+b31*A3+b41*A6
65+
B3=b02*I+b12*A+b22*A2+b32*A3+b42*A6
66+
B4=b03*I+b13*A+b23*A2+b33*A3+b43*A6
67+
B5=b04*I+b14*A+b24*A2+b34*A3+b44*A6
68+
A9=B1*B5+B4
69+
X=B2+(B3+A9)*A9
70+
return X^(2^m)
71+
end
672

773
function taylorx(dnx,dny,Kx,Ky,λ,l::PatternedLayer)
874
IMa=Diagonal(Kx*0 .+1)

0 commit comments

Comments
 (0)