Lithium niobate phase-shifter#
Reproducing [1]
using Gridap
using Gridap.Geometry
using GridapGmsh
using Femwell.Maxwell.Waveguide
using Femwell.Maxwell.Electrostatic
using GridapMakie, CairoMakie
model = GmshDiscreteModel("mesh.msh")
Ω = Triangulation(model)
labels = get_face_labeling(model)
τ = CellField(get_face_tag(labels, num_cell_dims(model)), Ω)
conductivity = [
"core" => 7.5,
"slab" => 28.4,
"electrode_left" => 3.9,
"electrode_right" => 3.9,
"env" => 3.9,
]
σ(tag) = Dict(get_tag_from_name(labels, u) => v for (u, v) in conductivity)[tag]
p0 = compute_potential(
σ ∘ τ,
Dict("electrode_left___slab" => 1.0, "electrode_right___slab" => 0.0),
order = 2,
)
plot_potential(p0)
fig, _, plt =
plot(get_triangulation(potential(p0)), (σ ∘ τ) * ∇(potential(p0)) ⋅ VectorValue(1, 0))
Colorbar(fig[1, 2], plt)
display(fig)
voltages = 0:10:100
voltages_neffs = []
for voltage in voltages
epsilons = [
"core" => 1.989,
"env" => 1.445,
"slab" => 2.211,
"electrode_left" => 1.445,
"electrode_right" => 1.445,
]
ε(tag) = Dict(get_tag_from_name(labels, u) => v for (u, v) in epsilons)[tag]
ε_perturbation =
0.5 * 2.211^3 * 31e-6 * ∇(potential(p0)) ⋅ VectorValue(-1, 0) *
voltage *
((tag -> get_tag_from_name(labels, "slab") == tag) ∘ τ)
modes = calculate_modes(
model,
(ε ∘ τ + ε_perturbation) * (ε ∘ τ + ε_perturbation),
λ = 1.55,
order = 0,
)
push!(voltages_neffs, n_eff(modes[1]))
end
LoadError: InitError: could not load library "/home/runner/.julia/artifacts/99d60057d12d06a133c92bdc6e07757e710cd5c6/lib/libpangocairo-1.0.so"
/home/runner/.julia/artifacts/99d60057d12d06a133c92bdc6e07757e710cd5c6/lib/libpangoft2-1.0.so.0: undefined symbol: FcConfigSetDefaultSubstitute
during initialization of module Pango_jll
in expression starting at /home/runner/work/femwell/femwell/src/Maxwell/Waveguide/Waveguide.jl:1
in expression starting at /home/runner/work/femwell/femwell/src/Maxwell/Maxwell.jl:1
in expression starting at /home/runner/work/femwell/femwell/src/Femwell.jl:1
Stacktrace:
[1] dlopen(s::String, flags::UInt32; throw_error::Bool)
@ Base.Libc.Libdl ./libdl.jl:117
[2] dlopen(s::String, flags::UInt32)
@ Base.Libc.Libdl ./libdl.jl:116
[3] macro expansion
@ ~/.julia/packages/JLLWrappers/Kp7TC/src/products/library_generators.jl:63 [inlined]
[4] __init__()
@ Pango_jll ~/.julia/packages/Pango_jll/16ssY/src/wrappers/x86_64-linux-gnu.jl:22
[5] run_module_init(mod::Module, i::Int64)
@ Base ./loading.jl:1134
[6] register_restored_modules(sv::Core.SimpleVector, pkg::Base.PkgId, path::String)
@ Base ./loading.jl:1122
[7] _include_from_serialized(pkg::Base.PkgId, path::String, ocachepath::String, depmods::Vector{Any})
@ Base ./loading.jl:1067
[8] _tryrequire_from_serialized(modkey::Base.PkgId, path::String, ocachepath::String, sourcepath::String, depmods::Vector{…})
@ Base ./loading.jl:1481
[9] _require_search_from_serialized(pkg::Base.PkgId, sourcepath::String, build_id::UInt128)
@ Base ./loading.jl:1574
[10] _require(pkg::Base.PkgId, env::String)
@ Base ./loading.jl:1938
[11] __require_prelocked(uuidkey::Base.PkgId, env::String)
@ Base ./loading.jl:1812
[12] #invoke_in_world#3
@ ./essentials.jl:926 [inlined]
[13] invoke_in_world
@ ./essentials.jl:923 [inlined]
[14] _require_prelocked(uuidkey::Base.PkgId, env::String)
@ Base ./loading.jl:1803
[15] macro expansion
@ ./loading.jl:1790 [inlined]
[16] macro expansion
@ ./lock.jl:267 [inlined]
[17] __require(into::Module, mod::Symbol)
@ Base ./loading.jl:1753
[18] #invoke_in_world#3
@ ./essentials.jl:926 [inlined]
[19] invoke_in_world
@ ./essentials.jl:923 [inlined]
[20] require(into::Module, mod::Symbol)
@ Base ./loading.jl:1746
[21] include(mod::Module, _path::String)
@ Base ./Base.jl:495
[22] include(x::String)
@ Femwell.Maxwell ~/work/femwell/femwell/src/Maxwell/Maxwell.jl:1
[23] top-level scope
@ ~/work/femwell/femwell/src/Maxwell/Maxwell.jl:3
[24] include(mod::Module, _path::String)
@ Base ./Base.jl:495
[25] include(x::String)
@ Femwell ~/work/femwell/femwell/src/Femwell.jl:1
[26] top-level scope
@ ~/work/femwell/femwell/src/Femwell.jl:3
[27] include(mod::Module, _path::String)
@ Base ./Base.jl:495
[28] _require(pkg::Base.PkgId, env::String)
@ Base ./loading.jl:2014
[29] __require_prelocked(uuidkey::Base.PkgId, env::String)
@ Base ./loading.jl:1812
[30] #invoke_in_world#3
@ ./essentials.jl:926 [inlined]
[31] invoke_in_world
@ ./essentials.jl:923 [inlined]
[32] _require_prelocked(uuidkey::Base.PkgId, env::String)
@ Base ./loading.jl:1803
[33] macro expansion
@ ./loading.jl:1790 [inlined]
[34] macro expansion
@ ./lock.jl:267 [inlined]
[35] __require(into::Module, mod::Symbol)
@ Base ./loading.jl:1753
[36] #invoke_in_world#3
@ ./essentials.jl:926 [inlined]
[37] invoke_in_world
@ ./essentials.jl:923 [inlined]
[38] require(into::Module, mod::Symbol)
@ Base ./loading.jl:1746
Bibliography#
[1]
Huangpu Han, Fan Yang, Chenghao Liu, Zhengfang Wang, Yunpeng Jiang, Guangyue Chai, Shuangchen Ruan, and Bingxi Xiang. High-performance electro-optical mach–zehnder modulators in a silicon nitride–lithium niobate thin-film hybrid platform. Photonics, 9(7):500, July 2022. URL: https://doi.org/10.3390/photonics9070500, doi:10.3390/photonics9070500.