COMSOL 文献复现 COMSOL 仿真手性结构通用模型,计算透射反射率分量 Tlr,Trl,Trr,Tll。 Rlr,Rrl,Rrr,Rll。
在COMSOL里折腾手性结构的电磁仿真,最头疼的就是极化分量计算。今天咱们来聊聊怎么用内置变量搭积木,把透射反射的Tlr、Trl这些魔鬼参数全给揪出来。先甩个模型框架:在RF模块选频域,材料库调出手性介质本构方程,边界条件用散射场分离入射波和反射波------这是基本操作,不展开。

重点在结果处理环节。比如要算左旋圆极化波的透射率Tll,直接调用电场分量玩矢量合成:
matlab
// 圆极化分解
E_inc_L = (ewfd.Ex + 1i*ewfd.Ey)/sqrt(2);
E_trans_L = (ewfd.Ex_tr + 1i*ewfd.Ey_tr)/sqrt(2);
Tll = abs(E_trans_L)^2 / abs(E_inc_L)^2;
这里的1i是关键,把线极化转成圆极化基矢。注意COMSOL的时谐因子是e^{-jωt},所以左旋对应Ex+iEy而不是减号。搞反了的话,数据直接扑街。
交叉极化分量Trl更刺激,得用正交基底投影:
matlab
// 交叉极化透射
E_trans_R = (ewfd.Ex_tr - 1i*ewfd.Ey_tr)/sqrt(2);
Trl = abs(E_trans_R)^2 / abs(E_inc_L)^2;
这波操作相当于把透射场的右旋分量拎出来,看看入射左旋波被转化成右旋的比例。参数命名规律看下标顺序:Trl表示入射R出射L?不不,刚好相反,第一个字母是入射极化,第二个是接收极化。这点记混了,仿真结果能差出个数量级。

反射率计算有个坑------端口积分要区分正向反向波。用场分量ewfd.Ezrf 1和ewfd.Ezrf2分别对应入射和反射端口,结合极化基矢做点积:
matlab
// 反射左旋分量
P_ref_L = abs(dot([ewfd.Ex_ref,ewfd.Ey_ref], [1,1i]/sqrt(2)))^2;
Rll = integrate(P_ref_L, '边界选择反射端口') / 入射功率;
这里integrate函数得选对积分边界,功率归一化别忘了除入射波强度。有个偷懒技巧:在端口设置里勾选"计算散射场",直接用scattered.E变量会更方便。
最后验证模型是否靠谱,做个能量守恒检查:
matlab
total_T = Tll + Trl + Tlr + Trr;
total_R = Rll + Rrl + Rlr + Rrr;
if abs(total_T + total_R -1) > 0.05
error('能量不守恒,检查材料损耗设置');
end
这个验证比啥都有用,特别是手性材料的损耗各向异性参数容易填错。见过有人把gamma_tensor输成标量值,结果反射率飙到200%的灵异事件。模型调通后,记得存成.mph文件模板,下次换个结构尺寸直接改参数就能跑,效率拉满。
