⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smt_solve_drv_bound.m

📁 利用电磁场的源激发方法来计算光子晶体波导例如光子晶体光纤
💻 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 + -