1. COMSOL光子晶体仿真基础与BIC调控原理
光子晶体作为一种人工设计的周期性介电结构,在光通信、传感和量子光学等领域展现出独特价值。Bound state in the continuum(BIC)作为光子晶体中的特殊光学态,近年来因其无限大的品质因子(Q因子)和完美的光场局域能力备受关注。在COMSOL Multiphysics中实现BIC的仿真研究,需要深入理解以下几个关键概念:
Merging BIC的本质:当两个或多个BIC在动量空间相遇时,会形成所谓的"merging BIC"。这种现象通常发生在特定对称性破缺或参数调谐过程中,表现为能带结构中的平带(flat band)特征。平带的存在意味着群速度为零,是实现光场强局域化的理想平台。
三维能带计算的物理意义:不同于传统电子能带,光子能带描述的是电磁波在周期性结构中的传播特性。三维能带计算能完整展现光子晶体在各个动量方向上的禁带和导带分布,是寻找BIC位置的基础。在COMSOL中,我们通过频域求解器结合周期性边界条件来实现这一计算。
Q因子的工程价值:品质因子Q=ω₀/Δω(ω₀为共振频率,Δω为线宽)直接反映谐振腔的能量存储效率。理论上,理想BIC的Q因子趋近无穷大,但实际结构中会因制备误差、材料损耗等因素而降低。精确计算和拟合Q因子对器件设计至关重要。
提示:在开始仿真前,建议先通过理论计算预估BIC可能出现的位置。对于方形晶格光子晶体,Γ点(k=0)通常是BIC研究的重点区域。
2. COMSOL建模核心步骤详解
2.1 几何建模与材料设置
建立准确的光子晶体模型是仿真成功的前提。对于典型的二维光子晶体平板(实际为三维模型),建议采用以下参数化建模流程:
-
基底结构:创建厚度为h的介质平板,典型值220nm(硅)或300nm(氮化硅)。使用
geometry模块的block功能实现:matlab复制% COMSOL LiveLink脚本示例 model.geom.create('geom1', 3); model.geom('geom1').create('blk1', 'Block'); model.geom('geom1').feature('blk1').set('size', ['a', 'a', 'h']); % a为晶格常数 -
孔洞阵列:采用圆柱孔周期性排列形成光子晶体结构。通过
periodic功能实现阵列复制:matlab复制model.geom('geom1').create('cyl1', 'Cylinder'); model.geom('geom1').feature('cyl1').set('pos', ['a/2', 'a/2', 'h/2']); model.geom('geom1').create('arr1', 'Array'); model.geom('geom1').feature('arr1').selection('input').set('cyl1'); model.geom('geom1').feature('arr1').set('size', [10, 10, 1]); % 10x10超胞 -
材料定义:设置介电常数ε和磁导率μ。对于硅材料在1550nm波段:
matlab复制model.material.create('mat1'); model.material('mat1').propertyGroup('def').set('relpermittivity', '12.1'); model.material('mat1').propertyGroup('def').set('relpermeability', '1');
2.2 物理场与边界条件配置
正确的物理场设置是捕捉BIC现象的关键:
-
电磁波频域接口:选择
Electromagnetic Waves, Frequency Domain,设置求解频率范围覆盖目标波段(如150-200THz)。 -
周期性边界条件:
matlab复制model.physics('ewfd').create('pbc1', 'PeriodicCondition', 2); model.physics('ewfd').feature('pbc1').set('periodicity', ['a', '0', '0']); model.physics('ewfd').feature('pbc1').set('phase', 'k_x*a'); -
完美匹配层(PML):在z方向添加PML吸收边界:
matlab复制model.geom('geom1').create('pml1', 'PML'); model.geom('geom1').feature('pml1').set('thickness', 'lambda0/2'); % λ0为中心波长
注意:对称性破缺是诱导merging BIC的重要手段。可通过调整孔洞形状(如椭圆)或引入位移扰动实现:
matlab复制model.geom('geom1').feature('cyl1').set('radius', ['rx', 'ry']); % rx≠ry时打破C4对称
3. 能带计算与BIC特征提取
3.1 三维能带计算实现
采用参数化扫描结合本征频率研究计算能带:
-
k-path设置:典型路径如Γ-X-M-Γ(方形晶格):
matlab复制k_points = linspace(0, pi/a, 50); % Γ-X路径 for k = k_points model.study('std1').feature('param').set('plistarr', {num2str(k), '0', '0'}); model.study('std1').run; end -
本征模式分析:使用
Eigenfrequency研究步骤,设置搜索频率范围和模式数:matlab复制model.study.create('std1'); model.study('std1').create('eig', 'Eigenfrequency'); model.study('std1').feature('eig').set('neigs', 20); model.study('std1').feature('eig').set('shift', '2*pi*193e12'); % 193THz附近 -
能带可视化:提取特征频率并绘制色散关系:
matlab复制freq = mphglobal(model, 'ewfd.neff', 'dataset', 'dset1'); plot(k_points, real(freq), 'LineWidth', 2);
3.2 BIC识别与平带调控
在能带图中识别BIC的特征表现:
-
平带判据:在Γ点附近寻找几乎不随k变化的平带,其群速度∂ω/∂k≈0。
-
模式分析:通过场分布确认BIC模式:
- 真实BIC:场能量完全局域在结构内部,无辐射损耗
- 准BIC:存在微弱辐射,场分布呈现不对称性
-
调控参数:
matlab复制% 通过改变孔洞半径调控BIC r_sweep = linspace(0.2*a, 0.4*a, 10); for r = r_sweep model.geom('geom1').feature('cyl1').set('radius', r); model.study('std1').run; freq = mphglobal(model, 'ewfd.neff'); % 记录平带频率变化... end
4. Q因子计算与拟合技术
4.1 精确Q因子计算方法
-
时域衰减法:
matlab复制model.study.create('std2'); model.study('std2').create('time', 'Transient'); model.sol.create('sol2'); model.sol('sol2').create('st1', 'StudyStep'); model.sol('sol2').create('v1', 'Variables'); model.sol('sol2').create('t1', 'Time'); % 设置时间步长和求解时间... E_field = mphglobal(model, 'ewfd.Ez', 'dataset', 'dset2'); [Q, f0] = compute_Q_from_time_signal(t, E_field); % 自定义衰减曲线拟合 -
频域线宽法:
matlab复制model.study('std1').feature('freq').set('plist', 'linspace(180e12,200e12,100)'); model.study('std1').run; S11 = mphglobal(model, 'ewfd.S11', 'dataset', 'dset1'); [Q, f0] = fit_lorentzian(freq_range, abs(S11).^2); % 洛伦兹拟合
4.2 Q因子拟合优化
建立Q因子与结构参数的关联模型:
-
参数扫描:
matlab复制params = {'r', 'h', 'epsilon'}; ranges = {linspace(0.2*a,0.4*a,10), linspace(200e-9,300e-9,5), linspace(10,12,5)}; Q_matrix = zeros(length(ranges{1}), length(ranges{2}), length(ranges{3})); for i = 1:length(ranges{1}) for j = 1:length(ranges{2}) for k = 1:length(ranges{3}) model.param.set(params{1}, num2str(ranges{1}(i))); % ...其他参数设置 model.study('std1').run; Q_matrix(i,j,k) = compute_Q(); end end end -
经验公式拟合:
matlab复制% 假设Q与半径r的关系为Q = A*exp(B*r) fitfun = @(p,r) p(1)*exp(p(2)*r); p0 = [1e3, 10]; [p,resnorm] = lsqcurvefit(fitfun, p0, r_sweep, Q_values);
5. 远场偏振计算进阶
远场偏振特性是BIC器件的重要指标,计算需要特殊处理:
-
近场-远场变换:
matlab复制model.physics('ewfd').create('nff1', 'NearToFarField', 2); model.physics('ewfd').feature('nff1').set('surf', 'blk1_top'); model.result.create('farfield', 'PlotGroup3D'); model.result('farfield').create('surf1', 'Surface'); model.result('farfield').feature('surf1').set('expr', 'nff1.Efar'); -
偏振态分析:
matlab复制% 计算Stokes参数 Ex = mphinterp(model, 'nff1.Ex_far', 'coord', xyz); Ey = mphinterp(model, 'nff1.Ey_far', 'coord', xyz); S0 = abs(Ex).^2 + abs(Ey).^2; S1 = abs(Ex).^2 - abs(Ey).^2; S2 = 2*real(conj(Ex).*Ey); S3 = -2*imag(conj(Ex).*Ey); -
偏振椭圆可视化:
matlab复制theta = linspace(0, 2*pi, 100); for phi = 0:pi/6:pi/2 ellipse_x = real(Ex)*cos(theta) - imag(Ey)*sin(theta); ellipse_y = real(Ey)*cos(theta) + imag(Ex)*sin(theta); plot(ellipse_x, ellipse_y); end
在实际操作中,我发现当结构对称性从C4v降低到C2v时,原本简并的BIC会分裂成两个准BIC,其Q因子变化规律符合1/Δ²关系(Δ为对称性破缺强度)。建议在优化时先通过二维模拟快速筛选参数,再开展计算量大的三维验证。