Case: Dispersion surface tracking (2D scan)
This page demonstrates how to construct a dispersion surface by scanning a 2D parameter space (wave number k and propagation angle θ) and using branch tracking to follow a consistent mode across the scan.
We consider a typical electron–proton plasma and scan:
kin normalized unitsk/k_n, wherek_n = ω_pi/cθfrom 5° to 90°
using PlasmaBO
using PlasmaBO: c0
B0 = 5e-9 # [Tesla]
n = 5.0e6
T = 12.94
ion = Maxwellian(:p, n, T)
electron = Maxwellian(:e, n, T)
species = (ion, electron)
wn = abs(B0 * ion.q / ion.m)
wpi = plasma_frequency(ion.q, n, ion.m)
kn = wpi / c0
wci = wn
# Kinetic solver settings (adjust upward for accuracy)
N = 33Dispersion Curve Scan
julia> using CairoMakiejulia> θ = deg2rad(45);julia> k_ranges = (0.01:1:100) .* kn;julia> results = solve(species, B0, k_ranges, θ; N)Solving dispersion (k, θ)... 10%|██▎ | ETA: 0:00:09 Solving dispersion (k, θ)... 46%|██████████▋ | ETA: 0:00:02 Solving dispersion (k, θ)... 79%|██████████████████▏ | ETA: 0:00:01 Solving dispersion (k, θ)... 100%|███████████████████████| Time: 0:00:03 PlasmaBO.DispersionSolution{StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}, Int64}, Float64, Matrix{Vector{ComplexF64}}}(9.81977277497953e-8:9.819772774979531e-6:0.0009722557024507233, 0.7853981633974483, Vector{ComplexF64}[[-126621.46687532199 - 6.619291202210033e-12im, -126181.2335701638 + 1.3477429931079362e-9im, -125742.53584747175 + 2.1551637704618138e-11im, -2638.5615125116274 - 0.24087074985210188im, -2638.561512511614 - 0.2408707498512648im, -2638.5615125116005 - 0.24087074985111567im, -2638.447079402974 - 0.2651185849412814im, -2638.447079402959 - 0.26511858494172946im, -2638.447079402956 - 0.26511858494165824im, -2638.354345226287 - 0.28028464658641117im … 2638.3543452262793 - 0.2802846465861867im, 2638.4470794029576 - 0.2651185849430437im, 2638.447079402976 - 0.2651185849422006im, 2638.4470794029903 - 0.2651185849418271im, 2638.561512511589 - 0.24087074985064694im, 2638.561512511618 - 0.24087074985124232im, 2638.5615125116406 - 0.24087074985079795im, 125742.53584747238 + 8.413558591254458e-12im, 126181.23357016372 - 1.553510795688885e-9im, 126621.46687532112 - 2.2632436858871854e-11im]; [-126647.93289248455 - 1.5650680751377877e-10im, -126198.78018484717 - 1.4338637779408018e-9im, -125768.49400451631 + 8.535980255963693e-11im, -2671.711147848297 - 24.327945734952436im, -2671.7111478482907 - 24.327945734953914im, -2671.711147595329 - 24.327946383220905im, -2660.1534038758286 - 26.776977079149724im, -2660.153403875815 - 26.776977079149447im, -2660.1533937098125 - 26.77696518560265im, -2650.7873334602878 - 28.308737350695605im … 2650.787333460273 - 28.308737350696024im, 2660.1533937098097 - 26.77696518560265im, 2660.153403875826 - 26.776977079149667im, 2660.153403875835 - 26.776977079149432im, 2671.7111475953343 - 24.327946383219988im, 2671.7111478482943 - 24.327945734952646im, 2671.711147848304 - 24.327945734953285im, 125768.49400451609 + 1.5287484079246184e-10im, 126198.78018484655 - 9.331644036890585e-11im, 126647.93289248465 - 7.549262154396899e-11im]; … ; [-313940.64254257915 - 4.566781805533563e-8im, -313861.5464174454 - 4.975494034733834e-8im, -123618.23036716999 - 2.452403899253347e-5im, -5887.225775507087 - 2360.774219289861im, -5887.056696386653 - 2360.9532339551124im, -5774.271214584535 - 2344.216598344503im, -5223.734491155747 - 2588.810620991687im, -5109.542451363692 - 2214.224837475173im, -5007.815770120998 - 2360.77421928983im, -5006.87270523374 - 2361.6957751309455im … 5006.872705233722 - 2361.695775130945im, 5007.815770121022 - 2360.774219289834im, 5109.542451363663 - 2214.2248374752303im, 5223.734491155755 - 2588.8106209917455im, 5774.271214584511 - 2344.216598344481im, 5887.056696386669 - 2360.953233955107im, 5887.225775507089 - 2360.774219289835im, 123618.23036717041 - 2.452511780415053e-5im, 313861.54641744494 - 4.992125468561426e-8im, 313940.6425425788 - 4.580643064855394e-8im]; [-316611.469178368 - 3.801298100060884e-8im, -316532.8275260989 - 5.776031485952769e-8im, -123505.55495900553 - 2.591586772219883e-5im, -5920.375410843724 - 2384.861294274945im, -5920.19817390094 - 2385.0485721136356im, -5802.211344748056 - 2366.079352138636im, -5259.86577216729 - 2621.3752889475845im, -5147.171836823933 - 2234.949525972812im, -5040.965405457679 - 2384.861294274932im, -5039.996688056799 - 2385.8060513072455im … 5039.996688056835 - 2385.80605130728im, 5040.965405457673 - 2384.861294274937im, 5147.171836824014 - 2234.9495259728474im, 5259.865772167351 - 2621.375288947576im, 5802.211344747993 - 2366.0793521386013im, 5920.198173900962 - 2385.048572113643im, 5920.37541084377 - 2384.8612942749423im, 123505.55495900504 - 2.5914299413428807e-5im, 316532.82752609864 - 5.743277142755687e-8im, 316611.46917836764 - 3.7781134665237914e-8im];;])
plot(results, kn, wn)
using PlasmaBO: plot_branches
# k, ω pairs for initial branch points (see `BranchPoint` for more control over tracking)
initial_point = (50 * kn, -600 * wn *im)
branch = track(results, initial_point)
f, (ax1, ax2) = plot_branches((branch,), kn, wn)
ylims!(ax2, -3500,500)
f
Dispersion Surface Scan (2D)
julia> ks = (0.1:10:100.0) .* kn;julia> θs = deg2rad.(10.0:10.0:90.0);julia> res2d = solve(species, B0, ks, θs; N)Solving dispersion (k, θ)... 34%|███████▉ | ETA: 0:00:02 Solving dispersion (k, θ)... 67%|███████████████▍ | ETA: 0:00:01 Solving dispersion (k, θ)... 100%|███████████████████████| Time: 0:00:03 PlasmaBO.DispersionSolution{StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}, Int64}, Vector{Float64}, Matrix{Vector{ComplexF64}}}(9.81977277497953e-7:9.81977277497953e-5:0.0008847615270256557, [0.17453292519943295, 0.3490658503988659, 0.5235987755982988, 0.6981317007977318, 0.8726646259971648, 1.0471975511965976, 1.2217304763960306, 1.3962634015954636, 1.5707963267948966], Vector{ComplexF64}[[-126621.80021764821 + 7.906280548330459e-11im, -126181.24223376036 + 9.606804021236625e-10im, -125742.87385793895 + 1.493977670558261e-10im, -2642.846860283896 - 3.354675534705303im, -2642.8468602838816 - 3.3546755347064563im, -2642.8468602838375 - 3.354675534705457im, -2641.253117788594 - 3.6923820399545604im, -2641.253117788593 - 3.692382039957252im, -2641.2531177885744 - 3.6923820399573186im, -2639.9615824983894 - 3.903604099867592im … 2639.961582498411 - 3.90360409986704im, 2641.25311778857 - 3.692382039957002im, 2641.2531177885744 - 3.6923820399540546im, 2641.253117788596 - 3.692382039960157im, 2642.846860283867 - 3.3546755347077135im, 2642.846860283872 - 3.3546755347065758im, 2642.846860283873 - 3.3546755347057493im, 125742.8738579396 - 8.126120024724247e-11im, 126181.24223376036 - 9.617493273613547e-10im, 126621.80021764747 - 1.504058387986013e-10im] [-126621.78542391551 + 9.53435946729822e-11im, -126181.27204910958 + 9.873202618571846e-10im, -125742.85883577936 + 1.5955860351230585e-11im, -2642.635357548914 - 3.200994138655156im, -2642.6353575488893 - 3.2009941386547007im, -2642.6353575488797 - 3.200994138659419im, -2641.114626159757 - 3.523229935445812im, -2641.114626159753 - 3.5232299354445624im, -2641.114626159703 - 3.523229935384494im, -2639.8822575298886 - 3.7247756791444253im … 2639.8822575298723 - 3.724775679143326im, 2641.1146261597055 - 3.5232299353839545im, 2641.1146261597637 - 3.523229935444989im, 2641.1146261597687 - 3.523229935445346im, 2642.6353575488815 - 3.2009941386545533im, 2642.635357548889 - 3.200994138659288im, 2642.635357548899 - 3.200994138656082im, 125742.8588357792 - 9.899422181206634e-11im, 126181.2720491096 - 9.915497331978784e-10im, 126621.78542391643 - 1.7905728321299706e-11im] … [-126621.6400258606 + 1.1811145464446504e-10im, -126181.56492171866 - 3.366463311180731e-9im, -125742.71135517812 + 2.1036989340740726e-10im, -2639.044090343314 - 0.5915198082919615im, -2639.044090343305 - 0.5915198082921524im, -2639.0440903432336 - 0.5915198085212409im, -2638.763070541102 - 0.6510665767279842im, -2638.763070541093 - 0.6510665767281486im, -2638.763070537393 - 0.6510665725318832im, -2638.5353380520714 - 0.6883107200582944im … 2638.535338052082 - 0.6883107200589327im, 2638.7630705374145 - 0.651066572532091im, 2638.763070541106 - 0.6510665767269053im, 2638.7630705411198 - 0.6510665767270544im, 2639.044090343223 - 0.5915198085227603im, 2639.0440903433137 - 0.5915198082916403im, 2639.0440903433455 - 0.5915198082905104im, 125742.71135517755 - 1.1720487122813752e-10im, 126181.56492171867 + 3.366398948934101e-9im, 126621.64002586056 - 2.0555283038232988e-10im] [-126621.63488255253 + 2.2079271675524233e-10im, -126181.5752763464 + 8.207056507409739e-10im, -125742.7061435978 + 1.0117337573437655e-11im, -2638.2300161582857 - 3.3796576648370547e-13im, -2638.230016158265 - 6.517009154549669e-14im, -2638.230016158263 + 1.3358203432289883e-12im, -2638.230016158261 - 1.0180745135403027e-12im, -2638.2300161582607 - 7.958078640513122e-13im, -2638.2300161582607 - 2.948752353404416e-13im, -2638.2300161582602 + 1.580957587066223e-13im … 2638.2300161582552 + 7.395023326451764e-15im, 2638.2300161582575 - 1.2576606422953773e-12im, 2638.230016158259 + 1.3145040611561853e-13im, 2638.230016158261 + 1.4654943925052066e-13im, 2638.230016158262 - 5.684341886080802e-14im, 2638.230016158263 + 3.2371384676418763e-13im, 2638.2300161582652 - 2.3584790839360993e-13im, 125742.70614359801 - 2.2359607934845575e-10im, 126181.57527634627 - 9.061981527076292e-10im, 126621.63488255283 - 7.568335711379191e-12im]; [-130046.23180107087 - 1.197548903528633e-10im, -129226.35672741255 - 9.6155346929541e-11im, -126179.48881185625 - 5.941303263195205e-9im, -3104.5312728462313 - 338.82222900534305im, -3104.531272846226 - 338.8222290053442im, -3104.531257968992 - 338.82225557320453im, -2943.563280822035 - 372.93058603577407im, -2943.5632808220325 - 372.9305860357649im, -2943.562949292074 - 372.93003633563535im, -2813.1214069619814 - 394.2641424791306im … 2813.121406962001 - 394.26414247912953im, 2943.5629492920634 - 372.93003633563404im, 2943.5632808220234 - 372.9305860357676im, 2943.563280822053 - 372.93058603576947im, 3104.531257968993 - 338.82225557320413im, 3104.5312728462513 - 338.822229005345im, 3104.5312728462764 - 338.82222900535123im, 126179.48881185596 + 6.952873832233308e-10im, 129226.35672741273 + 1.0780483920793095e-10im, 130046.23180107055 + 1.5289937682472772e-10im] [-130020.12452197904 - 3.7245065493095396e-10im, -129238.364805837 + 6.330328556999908e-10im, -126168.2391310065 - 2.8406386736862244e-9im, -3083.1694966128184 - 323.3004080042097im, -3083.1694966127898 - 323.30040800426514im, -3083.1692757925703 - 323.30080396482396im, -2929.57562631153 - 355.84622347995645im, -2929.5756263107387 - 355.84622347884874im, -2929.5706565882033 - 355.8380503637829im, -2805.1539693956374 - 376.20400084294937im … 2805.1539693956197 - 376.2040008429471im, 2929.570656588191 - 355.8380503637817im, 2929.57562631073 - 355.8462234788461im, 2929.5756263115054 - 355.8462234799576im, 3083.1692757925916 - 323.3008039648239im, 3083.1694966128025 - 323.3004080042652im, 3083.169496612852 - 323.3004080042076im, 126168.23913100574 - 1.0342873224544746e-9im, 129238.36480583737 - 4.806375694917677e-10im, 130020.12452197906 + 7.507883936952393e-10im] … [-129717.76698906356 - 1.2378753918212278e-9im, -129565.62966482002 + 2.583848266064297e-9im, -126098.710472224 + 1.0221405703575977e-10im, -2720.451508850592 - 59.74350063742303im, -2720.4515087463456 - 59.74350089012417im, -2720.4410473859425 - 59.766587047980735im, -2692.068508826259 - 65.75772424952545im, -2692.0685049451395 - 65.7577195586528im, -2691.7332892098607 - 65.28442184344051im, -2671.5739748355004 - 69.5239891893483im … 2671.573974835519 - 69.52398918934828im, 2691.73328920987 - 65.2844218434411im, 2692.068504945123 - 65.75771955865088im, 2692.068508826255 - 65.75772424952568im, 2720.4410473859402 - 59.766587047982235im, 2720.451508746337 - 59.743500890124366im, 2720.4515088505896 - 59.74350063742487im, 126098.71047222399 + 6.124855960951137e-11im, 129565.62966481973 - 2.5689802224271226e-9im, 129717.76698906303 + 1.014842760385822e-9im] [-129668.7665053782 - 6.070254560171891e-11im, -129616.10202991482 - 4.949594349843317e-10im, -126096.80894501742 + 8.319659423231819e-11im, -2638.2300161582657 - 1.184830011879967e-12im, -2638.230016158261 + 5.204725539442734e-13im, -2638.2300161582607 - 1.3847706866434536e-13im, -2638.2300161582584 + 5.790923296444817e-13im, -2638.2300161582575 - 6.252776074688882e-13im, -2638.2300161582557 + 8.910070354055041e-14im, -2638.2300161582543 - 1.3522951020775907e-13im … 2638.2300161582566 + 4.608001805649076e-13im, 2638.2300161582584 + 3.730614957501472e-15im, 2638.2300161582593 - 2.41140440948584e-13im, 2638.2300161582602 + 3.126388037344441e-13im, 2638.230016158262 - 1.0130007943587316e-11im, 2638.2300161582643 + 3.4985347951987933e-12im, 2638.2300161582675 + 9.694467451026867e-13im, 126096.8089450174 - 5.893165677161625e-11im, 129616.10202991356 + 9.515257752743417e-10im, 129668.76650537807 + 3.6293041844799814e-11im]; … ; [-267526.6897011369 - 1.3994509208444169e-8im, -267333.946358465 - 1.4674382043537749e-8im, -126172.77219117148 - 8.131340672375366e-5im, -6336.322160782902 - 2687.095103299819im, -6336.322159074734 - 2687.0951046509094im, -6336.238399861366 - 2687.144919316501im, -5456.912155396817 - 2687.0951032998137im, -5456.911892188299 - 2687.0952728599345im, -5452.350753781641 - 2688.52462771135im, -5059.8879613827985 - 2955.9866247648533im … 5059.887961382808 - 2955.9866247648556im, 5452.350753781654 - 2688.5246277113624im, 5456.911892188262 - 2687.09527285993im, 5456.912155396782 - 2687.0951032998028im, 6336.238399861391 - 2687.1449193165154im, 6336.32215907471 - 2687.095104650914im, 6336.322160782865 - 2687.095103299816im, 126172.7721911718 - 8.131283894074035e-5im, 267333.9463584657 - 1.469106791773811e-8im, 267526.68970113754 - 1.3969838619232178e-8im] [-267503.4261524529 - 4.3239953868651025e-8im, -267319.9842888088 - 4.459623527619073e-8im, -126162.67963775869 - 5.8744886399738675e-5im, -6166.908470060528 - 2563.9963050630895im, -6166.908058156634 - 2563.9966482426676im, -6164.9133446027045 - 2564.449767607717im, -5287.4984646744615 - 2563.996305063083im, -5287.483269961904 - 2564.0081406182776im, -5251.723729621514 - 2561.224472491423im, -4965.899650699197 - 2797.012465938777im … 4965.899650699161 - 2797.0124659387625im, 5251.72372962148 - 2561.224472491431im, 5287.4832699619055 - 2564.008140618274im, 5287.498464674408 - 2563.9963050630718im, 6164.913344602663 - 2564.449767607707im, 6166.908058156643 - 2563.996648242664im, 6166.908470060523 - 2563.9963050630704im, 126162.67963775911 - 5.8745872068587246e-5im, 267319.9842888089 - 4.4617308958549984e-8im, 267503.42615245224 - 4.3379259295761585e-8im] … [-266971.71631718025 + 2.9619072183718597e-10im, -265749.96110866906 + 1.849512564963633e-10im, -118413.00558056646 - 5.612002571968015e-10im, -3290.303438401586 - 473.80736644135624im, -3290.131436873146 - 474.1119982352635im, -3257.822805965366 - 512.8095690843993im, -3222.7561454919373 - 423.95071091180466im, -3065.2065768224734 - 521.5043279591143im, -3061.7978352008 - 514.4723377181131im, -2972.3664005259616 - 742.6364618166098im … 2972.3664005259216 - 742.6364618165837im, 3061.797835200811 - 514.4723377181116im, 3065.2065768224834 - 521.5043279591138im, 3222.756145491907 - 423.95071091185196im, 3257.8228059653384 - 512.8095690843562im, 3290.131436873154 - 474.11199823526454im, 3290.303438401601 - 473.80736644135885im, 118413.00558056663 - 6.775285071235215e-10im, 265749.9611086694 + 2.3555719302412854e-10im, 266971.7163171819 - 6.478186875824576e-10im] [-267036.43382901547 - 4.898498575501509e-10im, -265686.80543264566 + 2.6717414062139985e-11im, -117722.58317984072 - 5.609077796675961e-11im, -2638.2300161585 - 2.1571012684407087e-10im, -2638.2300161582725 + 6.814271369393055e-13im, -2638.230016158257 + 1.5987211554602254e-13im, -2638.230016158255 - 3.4312416070396757e-13im, -2638.2300161582534 - 4.870548409030562e-13im, -2638.230016158253 - 3.7118422218113004e-13im, -2638.2300161582493 - 9.576076959090297e-14im … 2638.230016158248 - 3.410605131648481e-12im, 2638.2300161582525 - 5.488942633746774e-13im, 2638.230016158253 - 2.825096118832758e-13im, 2638.2300161582584 - 4.389788123639213e-13im, 2638.230016158262 - 1.712641628180687e-14im, 2638.2300161582693 - 7.561180514176705e-13im, 2638.230016158337 + 4.767489528156865e-10im, 117722.58317984063 + 5.5983309934693646e-11im, 265686.8054326449 - 2.7210234065933037e-11im, 267036.4338290155 + 7.610412611822391e-10im]; [-293795.7799412524 - 1.4432481243765307e-8im, -293635.9999890175 - 1.4891373775374497e-8im, -126176.20945010283 - 0.00014532935395623114im, -6798.006573345261 - 3022.562656770449im, -6798.00656908272 - 3022.562659875153im, -6797.868548884256 - 3022.6266227249034im, -5918.596567959175 - 3022.562656770461im, -5918.596049435887 - 3022.5629806517422im, -5912.412511842676 - 3023.711054945794im, -5362.54638474189 - 3324.622009475584im … 5362.546384741887 - 3324.622009475587im, 5912.412511842636 - 3023.711054945772im, 5918.596049435929 - 3022.5629806517422im, 5918.596567959147 - 3022.5626567704426im, 6797.868548884275 - 3022.6266227249203im, 6798.006569082643 - 3022.5626598751305im, 6798.00657334532 - 3022.562656770479im, 126176.20945010308 - 0.00014532899078538444im, 293635.9999890174 - 1.4959368854761124e-8im, 293795.77994125214 - 1.4457327779382467e-8im] [-293760.4724871609 - 4.424399724888468e-8im, -293608.73013647407 - 4.564811735065878e-8im, -126161.30746211232 - 0.00010509064661023134im, -6607.44260912447 - 2884.0957189286105im, -6607.44166675861 - 2884.0965047533937im, -6603.932590101881 - 2884.4546989333344im, -5728.032603738362 - 2884.0957189286332im, -5728.005596155226 - 2884.1171287391267im, -5675.996686715461 - 2874.6337340819696im, -5269.211112220586 - 3146.122952895272im … 5269.211112220637 - 3146.1229528953186im, 5675.996686715479 - 2874.6337340819623im, 5728.005596155192 - 2884.1171287391153im, 5728.032603738372 - 2884.0957189286282im, 6603.932590101841 - 2884.454698933323im, 6607.4416667585765 - 2884.09650475338im, 6607.442609124492 - 2884.0957189286496im, 126161.30746211235 - 0.0001050915384781806im, 293608.73013647454 - 4.573576006805524e-8im, 293760.4724871613 - 4.4143234845250845e-8im] … [-292980.778592988 - 1.3707276999817548e-10im, -291734.31812646467 - 7.593634933949916e-11im, -114316.92957399445 - 1.4238087635311076e-9im, -3371.7108569088714 - 532.9593472704901im, -3371.451855609975 - 533.4071868750934im, -3335.464530884462 - 586.1181888842428im, -3304.836685813179 - 469.5498780833616im, -3118.5120151076376 - 586.6109856319107im, -3113.884163132703 - 575.9049885785589im, -3014.4555529182767 - 846.6845431084822im … 3014.45555291828 - 846.684543108508im, 3113.8841631327123 - 575.9049885785543im, 3118.512015107646 - 586.61098563191im, 3304.8366858132194 - 469.5498780833682im, 3335.4645308844456 - 586.1181888842439im, 3371.451855610002 - 533.4071868750989im, 3371.710856908902 - 532.9593472704931im, 114316.92957399435 - 1.221621207149893e-9im, 291734.31812646444 - 1.6720395162558074e-11im, 292980.77859298757 - 2.7959856652159942e-11im] [-293060.78251081146 - 7.725347330542781e-11im, -291674.08543779375 + 1.8046921861403693e-11im, -113340.75968884533 + 3.859058412427481e-11im, -2638.2300161588414 + 2.2831918530903704e-10im, -2638.2300161582643 - 1.5063505998114124e-12im, -2638.230016158255 - 2.489678538054638e-13im, -2638.2300161582507 - 1.0064171718227044e-13im, -2638.23001615825 - 6.269214676930548e-13im, -2638.2300161582493 - 1.2759238110504612e-12im, -2638.2300161582493 - 6.830267090028887e-14im … 2638.2300161582552 - 6.549205622263798e-13im, 2638.2300161582552 + 7.297495940861154e-12im, 2638.230016158258 - 1.1102230246251565e-13im, 2638.2300161582593 - 1.535473137526111e-13im, 2638.2300161582602 - 6.032528195035554e-13im, 2638.2300161582625 - 8.206768598029157e-13im, 2638.2300161593316 + 3.5432506607051402e-9im, 113340.75968884524 - 3.9575652204476816e-11im, 291674.0854377934 + 2.1708817035670513e-11im, 293060.7825108108 + 2.2020518852574483e-10im]])
plot(res2d, kn, wn)
# Choose a reference angle and reference k for seeding the tracked mode
seed = (90.5 * kn, deg2rad(20), (1000 - 3000im) * wn)
branch = track(res2d, seed)
plot_branches((branch,), kn, wn)