📄 smt_solve_drv_bound.m
字号:
clear
clf
smt_init
load -mat nanowire.gd
lambda = 0.633e-6;
k0 = 2*pi/lambda;
sClass = 'p4';
positions = distribute(oGd);
positions = cut_pos(oGd, positions, sClass);
% real part of Neff
points_r = 30; % number of samples on the real axis
min_Neff_r = 2.0005;
max_Neff_r = 2.0015;
% imaginary part of Neff
min_Neff_i = 1e-10;
max_Neff_i = 0.0002;
points_i = points_r*(max_Neff_i-min_Neff_i)/(max_Neff_r-min_Neff_r);
points = points_r*points_i;
Neff_r = linspace(min_Neff_r, max_Neff_r, points_r);
Neff_i = linspace(min_Neff_i, max_Neff_i, points_i);
isLeaky = 0; % find bound modes, not leaky modes.
acc = zeros(points_i, points_r); % Accuracy function
tic
for ir = 1:points_r
for ii = 1:points_i
Neff = Neff_r(ir)-j*Neff_i(ii);
error = smt_solve(Neff, oGd, positions, k0, isLeaky);
acc(ii,ir) = 1/error;
fraction_done = ((ir-1)*points_i+ii)/points;
fprintf(1, 'percent done: %d\n', round(fraction_done*100))
t = toc;
fprintf(1,'minutes to go: %6.2f\n', (1-fraction_done)/fraction_done*t/60)
if length(Neff_i) == 1
plot(Neff_r(1:ir), acc(1,1:ir),'r-', Neff_r(1:ir), acc(1,1:ir), 'k*')
axis tight
grid
drawnow
continue
end
imagesc(Neff_r, Neff_i, acc);
set(gca,'ydir','normal')
colorbar
axis image
drawnow
end
pause(0.1) % To allow CTRL-C to stop the loop
end
[r,c] = m_max(acc);
fprintf(1,'maximum at:\nbeta_r = %6.10f\nbeta_i = %6.10f\n', Neff_r(c), Neff_i(r))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -