手性BIC超表面这个方向,算是最近几年光子学社区里热度最高的几个话题之一了。原因也简单:BIC能把Q因子做到极高,手性结构又能带来强烈的圆二色性(CD)响应,两个特性组合在一起,在传感、非线性、偏振调控、低阈值激光这些方向上都有想象空间。但问题在于,复现这类文章需要同时跨过三道坎:电磁场数值仿真的框架怎么搭、手性结构的几何怎么建模、以及BIC模式的物理特征怎么从仿真结果里识别出来。我最初开始用COMSOL波动光学模块复现这类结构时,最大的感受是——论文里那些漂亮的Q因子曲线和CD谱线,背后几乎每一步都是坑。这篇就把我复现手性BIC超表面文章的完整流程、参数设置、以及踩过的坑一起梳理出来,希望能帮你少走点弯路。
1. 复现前的准备:物理模型吃透与仿真思路确定
1.1 手性BIC到底在算什么
BIC的全称是Bound States in the Continuum,连续谱束缚态。名字听着绕,物理图像其实很直观:一般我们认为,束缚态的能量落在连续态之外,比如氢原子束缚态低于电离连续谱;但BIC反常识——它的能量落在辐射连续谱之内,却依然不向外辐射。打个比方,就好比有人在喧嚣的广场中央搭了一个完全隔音的玻璃房,房间里的声音出不去,外面的噪音也进不来。
在超表面里,BIC通常表现为在倒空间某个特殊动量点(比如Γ点)上,某个模式因为对称性保护和所有辐射通道都失配,Q因子趋向无穷大。实际结构中完全处在BIC点时,因为没有辐射损耗,就无法从远场激励起来;但只要你稍微破坏一点结构的对称性,BIC就变成一个高Q的准BIC,远场耦合通道打开,你就能在透射谱或者反射谱上看到一个非常窄的Fano共振峰。手性BIC则是在这个基础上额外引入了手性几何,使得结构对左旋圆偏振(LCP)和右旋圆偏振(RCP)的响应不对称。
复现文章前,我强烈建议你先在纸上回答三个问题:
- 论文里的BIC是哪种类型?是Γ点的对称保护BIC,还是通过调参实现的Friedrich-Wintgen型BIC?
- 手性来源是什么?是结构本身的三维手性,比如倾斜侧壁,还是二维平面内的镜像不对称,比如双椭圆柱错开角度?
- 文章最终展示的是什么量?是透射/反射CD谱,还是本征模式的Q因子随几何参数的变化曲线?
这三个问题决定了你在COMSOL里用什么研究、用什么边界条件、后处理要提取什么。我见过不少同学直接拿着文章的结构图就兴冲冲开始建模,结果算了半天,模式都认不出来,纯粹是前期分析没做到位。
1.2 为什么选COMSOL波动光学
市面上做超表面仿真的工具不少,FDTD类的有Lumerical、FDTD Solutions,严格耦合波分析有RCWA系列工具,还有纯代码的MIT Photonic Bands、S4等等。如果单算周期结构的远场透反射谱,RCWA和FDTD在速度上是有优势的。但复现手性BIC文章,我个人更倾向用COMSOL的波动光学模块。
理由有三条。第一,BIC本质上是本征模式问题,你要找到那个具有无限大Q因子的束缚态,最直接的思路是求解麦克斯韦方程组的本征值问题,COMSOL的“特征频率”研究就是这个逻辑。第二,手性超表面往往需要对结构参数做大批量扫描,比如椭圆的短轴、旋转角、高度、周期,COMSOL的“参数化扫描”(Parametric Sweep)可以自动循环,每次扫描结果都保留下来,非常方便。第三,COMSOL的网格控制特别灵活,BIC模式往往有极端的场局域,场增强区域需要加密网格,其他区域可以相对稀疏,这种非均匀网格配置比均匀网格的FDTD高效得多。
还有一点是后处理能力。COMSOL在结果节点里直接可以画电场模、磁场模、坡印廷矢量、远场辐射图,还能用“派生值”做体积分、面积分。圆二色性光谱要用的左旋/右旋透射率,也不难在结果里组合出来。对于复现文章这种强对比需求的任务,这个能力很重要——你得反复确认仿真结果和文献的电场分布、CD谱趋势一致,而不是只盯着某一两个数字。
2. 几何搭建与材料参数:复现陷阱从第一步开始
2.1 单元结构建模与周期边界
手性BIC超表面的几何花样很多,常见的有:单层手性形状纳米柱(G形、Z形、开口环)、椭圆柱阵列通过不同旋转角构成手性、双层错位纳米盘、以及带倾斜侧壁的矩形柱。
以我复现过的结构为例,单元是衬底上的椭圆柱阵列,椭圆柱在一个周期单元内部有一个旋转角度θ,同时柱子的截面在两两之间错落放置,整体上形成周期性手性排列。这个结构在COMSOL里建模非常简单:画一个长方体作为衬底,上面加一个椭圆,用旋转工具调整角度,再设定周期阵列即可。这里容易出问题的地方是“旋转角”的定义。
如果你用手动旋转的几何体,然后直接做周期边界条件,要特别检查旋转后的椭圆是否在一个单元周期内被正确截断。很多新手直接用一个椭圆放在周期单元内,旋转移出边界后,COMSOL会把它截断,但没有手动把截断后落在另一侧的多余部分拼回到单元内部——这就破坏了结构周期性,算出来的模式根本对不上文献。
推荐的做法是:在“几何”节点里通过“阵列”功能做周期延拓,然后用周期单元的交集操作创建单周期的结构。或者更省事的办法是直接把椭圆的长短轴、旋转角全部定义成全局参数,然后建模时使用“镜像”“旋转”等几何操作,保证几何始终约束在单元内部。
边界条件方面,四周用“周期性条件”并设置为等同于Unit Cell的对面。衬底底面和结构顶部,对于特征频率研究,有两种常见选择:PML(完美匹配层)和散射边界条件(SBC)。我的建议是——计算Q因子时用PML,计算透射/反射谱时用周期端口。
2.2 材料折射率设定:恒定值还是色散模型
材料参数这块,是复现时“结果对不上”的最大来源之一。超表面文章里常用的材料是Si、TiO₂、GaAs、SiN等。它们在中红外到近红外波段的折射率都随波长变化。但很多作者为了简化,在论文正文里给出的是某个中心波长处的固定折射率值,比如“n = 3.476 @ 1550 nm”。
我复现时踩过的坑是这样:第一次我偷懒直接用固定折射率,算出来的共振波长和文献差了几十纳米。后来我细读补充材料才发现,作者用的是完整色散模型数据,是那种来自Palik或SOPRA数据库的实测折射率。
所以,如果你发现所有其他设置都正确,就是共振波长对不上,优先考虑是不是材料色散没有加进去。COMSOL的材料库里自带不少半导体材料的折射率色散数据,比如Si在Visible & Infrared波段有内建的Palik数据。你也可以从材料库选择Crystalline Silicon (Si) - Palik,然后直接应用到域上。
用色散模型之后还有个问题:本征频率计算时,COMSOL的默认求解器是可以处理材料属性随频率变化的情况的,但你需要检查“特征频率”研究的设置,确保求解器在迭代中包含材料色散的频率依赖。也就是说,如果你是用户自定义的折射率表达式,比如n=3.5-0.01λ,需要在材料属性里用函数或者插值表形式,而不是在某个固定波长下算好了直接填一个常数。
表格式的材料折射率输入比较简单:
| 波长(nm) | 折射率n | 消光系数k |
|---|---|---|
| 1200 | 3.506 | 0 |
| 1300 | 3.492 | 0 |
| 1400 | 3.478 | 0 |
| 1500 | 3.466 | 0 |
| 1550 | 3.460 | 0 |
| 1600 | 3.454 | 0 |
这样在模型里设定成插值函数,材料属性里把它引用为折射率n和消光系数k的变量。实测下来,用色散模型之后,共振峰的偏移量和文献基本对上了,最多差个1%。
3. 特征频率求解:把模式找出来是第一步
3.1 本征模式搜索设置
BIC的本质是一个本征模式,所以在COMSOL里最直接的复现路径是用“特征频率”研究来求解。这一步要解决的问题是:怎么确保求解器找到的是你想要的那个BIC模式,而不是一堆无关的模式。
操作上,你需要在“电磁波,频域”物理场接口下添加“特征频率”研究,然后在“特征频率”节点中设置搜索基准值。这个基准值很关键。COMSOL求解特征频率时,本质是求解广义特征值问题,如果你不设定好搜索范围,求解器会默认去找它认为最“容易”的那些低频模式,最后给你返回一堆金属腔体模式和静电场模式,BIC模式根本不会出现。
我的习惯是根据文献中的共振波长先估算一个初始频率值。比如工作波长在1550 nm附近,对应频率约为193.5 THz。那就在特征频率搜索基准里填1.935e14 Hz,求解器会在该频率附近寻找模式。注意COMSOL中角频率和频率的单位区分,通常特征频率节点可以用Hz单位,也可以使用rad/s,如果你填了1.935e14而单位是rad/s,那实际频率只有约30.8 THz,整整差了一个2π因子,这个坑我亲眼见过有同学踩。
另一个更可靠的方法是通过“参数化扫描”配合“特征频率”的“退化模式”选项。手性结构通常有简并或近简并的模式,如果求解器只返回了一个本征模式,你会错过与手性光学响应直接相关的另一个模式。建议把“特征频率”节点下的“期望模式数”设置成4到6个,然后在扫描不同几何参数时,通过Q因子或者电场分布判断哪两个模式是你关心的。
3.2 网格收敛性与Q因子提取
从特征频率结果中提取Q因子是复现文章的核心数据步骤。COMSOL的特征频率求解结果会给出复数本征频率,形式为:
[ \tilde{\omega} = \omega_r + i\omega_i ]
其中实部是振荡角频率,虚部反映了损耗(辐射损耗加材料损耗)。Q因子的计算公式是:
[ Q = \frac{\text{Re}(\tilde{f})}{2,|,\text{Im}(\tilde{f}),|} ]
注意这里的实部和虚部,如果直接用COMSOL界面上的“本征频率”变量,它是以复数形式存储的,你需要创建两个派生值:一个是实部,一个取复数的绝对值来计算Q因子。这一步看着简单,但我见过不少人在后处理里把单位搞混——COMSOL默认本征频率单位是Hz,当你用freq变量做表达式计算时,要小心它到底是角频率h*2π还是普通频率。
网格收敛性是BIC模拟最考验耐心的环节。因为BIC模式具有极端高的Q因子,意味着辐射几乎为零,模式场的能量主要束缚在结构内部和近场区域。数值离散误差会引入人为的辐射损耗,使得你算出来的Q因子偏低。
我做过的做法是这样:先用物理场控制网格(Physics-controlled mesh)在“细化”档位算一遍,记录模式频率和Q。然后把网格切换为用户控制网格,在结构附近、场增强热点区域(通常是椭圆柱两端和衬底界面附近)设置最大单元尺寸为共振波长的1/50到1/80,其他区域保持1/20。
Q因子对网格密度非常敏感。如果发现网格加密后Q还在一直上升、没有收敛趋势,说明结构里有些局部几何细节(比如尖锐棱角、纳米尺度的间隙)没有被充分解析。手性BIC结构往往包含细小的不对称偏移,比如椭圆长轴与x轴只差2度、柱子圆心相对旋转10度之类的,这些细微的几何特征如果网格解析不了,手性响应就完全算不对。
3.3 通过参数扫描连续追踪BIC到准BIC的演化
复现文章最核心的图表之一,往往是“Q因子随结构参数变化的关系图”。比如椭圆柱旋转角度从0°变化到15°,Q因子从几千万指数级下降到一个有限值。这种图就是通过参数化扫描逐步算出来的。
因为BIC模式本身Q因子极高,在理想的对称结构上,本征模式的虚部趋近于零,甚至可能出现数值上的正虚部(这在物理上不守恒)。处理办法是:把破坏对称性的参数,比如椭圆旋转角θ,设为一个全局参数,扫描范围覆盖对称点(θ=0)到完全非对称(θ=15°)。接近对称点时虚部很小,Q因子的数值噪声非常大,可以适当放宽网格加密条件,或者用更高阶的形函数(比如把“电磁波,频域”的形函数阶数从默认的二阶提升到三阶)。
扫描过程中还有一个坑:模式追踪。当你扫描参数θ时,不同的本征模式可能会发生交叉和避免交叉(avoided crossing),模式顺序会发生变化。如果直接看某个固定顺序的“特征频率模式1”的Q值,很可能把不同物理模式的曲线串在一起,画出来的图前后不连贯。解决办法是:在扫描的同时,输出每个模式的电场分量在某个参考点上的值,比如E_z的最大值或者某个体积上的电场能量积分,通过这个数值来判断同一个物理模式的连续性,或者干脆在参数扫描中用一个“全局控制模型”设定模式选择的表达式,让COMSOL自动按场型相似度来追踪。
4. 平面波激发与透射谱计算:手性响应的最终呈现
4.1 傅里叶模式展开与端口场设定
前面说的特征频率分析,解决的是“模式本身长什么样、Q有多高”。但要得到文章里的CD谱(圆二色性光谱)、椭圆度谱,必须再做一次有源驱动仿真:让平面波从衬底或空气一侧入射,计算透射和反射。
这一步我推荐在COMSOL中使用“电磁波,频域”接口下的“周期端口”边界条件。周期端口的好处是:它可以自动进行衍射模式展开,得到各个衍射级次的S参数(透射谱T0、反射谱R0等)。对于亚波长周期结构,通常只需要考虑零级衍射,端口模式数设置成1即可;如果周期较大或入射角较大,就需要检查是否存在高阶衍射,把端口模式数相应调大。
圆偏振光的激发,在COMSOL里有两种实现方式。第一种是端口模式类型设置为“圆形”偏振,直接指定左旋或右旋。第二种是设置两个正交的线性极化端口,然后在其振幅和相位上做叠加,比如用两个端口分别代表x极化和y极化,在激励时令x分量的幅值为1,y分量的幅值为±i,以此获得左旋或右旋圆偏振。
这里最容易踩的坑是“圆偏振的定义方向”。COMSOL场求解中,光的传播方向决定了“从源端看过去”还是“从接收端看过去”的左旋/右旋定义。如果你用两个线性端口叠加,相位正负号颠倒了,左右旋就完全反过来,CD谱的符号也会反号。我建议,每跑完一组激励,先看透射光的偏振态是不是预期的圆偏振,再继续算CD,否则后期排查非常痛苦。
4.2 圆二色性与椭圆度的算法细节
从频域仿真得到透射谱后,CD的计算公式看起来很简单:
[ CD = T_{LCP} - T_{RCP} ]
或者有的文章用归一化形式:
[ CD = \frac{T_{LCP} - T_{RCP}}{T_{LCP} + T_{RCP}} ]
但在手性超表面复现中,你要确认文献用的到底是哪个定义。很多文章里的“CD”(圆二色性)其实是指圆偏振转换差异,比如透射光中与入射同旋性的分量之间的差;也有的文章用的是输出光束的椭圆率(ellipticity),定义为:
[ \eta = \frac{1}{2}\arcsin\left(\frac{2\text{Im}(t_{xx}t_{yy}^* - t_{xy}t_{yx}^*)}{\text{Tr}(T^\dagger T)}\right) ]
如果你只按简单公式算CD,必须分清左右旋透射系数到底是从S参数里哪个分量来的。
我的建议是:在COMSOL里用“周期端口”的S参数来完成矩阵提取。具体来说,你现在有四个关键S参数:
- S_xx:x偏振入射,x偏振透射
- S_xy:y偏振入射,x偏振透射
- S_yx:x偏振入射,y偏振透射
- S_yy:y偏振入射,y偏振透射
然后,左旋圆偏振透射率可以表示为入射光场的线性叠加:
[ T_{LCP} = \frac{1}{2}(S_{xx} + S_{yy} + i(S_{xy} - S_{yx})) ]
右旋圆偏振透射率类似,只是虚部的符号反过来。这组公式在处理各向异性手性超表面时特别有用,因为COMSOL直接给你的是笛卡尔坐标下各组分的透射系数,而不是圆偏振基下的透射系数。
我在实际复现中,通常会在一个“全局计算”节点里定义好这几个表达式,然后扫描频率。扫描的频率范围要覆盖共振峰附近,最好设置成对数间隔,靠近共振峰时网格更密,这样画出来的Fano线型才平滑可读。
还有一点要留意:衬底和空气界面的反射。很多手性超表面是“纳米柱/衬底/空气”三层结构,COMSOL里端口设置在模型顶部和底部,但如果衬底足够厚,你没有把衬底整个建进去,而是用一个半无限厚衬底加PML截断,那透射到衬底里的光PML会吸收掉,你在衬底端的端口测到的透射谱可能包含了PML吸收的影响。更稳妥的做法是:在PML内侧加一层足够厚的衬底实体,端口设置在衬底实体内部,这样得到的S参数是“穿过超表面之后进入衬底”的真实透射率。
5. 复现路上的典型坑:从不能收敛到结果对不上
5.1 网格对称性破坏导致的手性伪影
这是复现手性结构最隐蔽的坑之一。BIC模式的手性响应很敏感,但COMSOL的网格剖分默认情况下会尽量保持几何对称性。问题是,当你的几何包含微小的旋转、偏移,网格剖分器可能无法精确地反映这种手性畸变,导致网格本身造成数值手性。
我遇到过一次这样的诡异现象:计算一个完全没有手性的结构,理论上CD应该为零,但透射谱算出来CD却有0.05的量级,怎么查都查不出原因。后来检查网格统计发现,旋转椭圆附近的网格单元分布不对称——虽然几何旋转了3度,但剖分出来的网格在旋转方向上的加密程度不一致,等效于结构多了一个“数值手性偏差”。
解决方法是:
- 在网格设置里,对结构的所有面统一使用“分布”节点,指定固定单元数,确保几何旋转后网格跟随几何同步变化,而不是重新适应性的调整。
- 用“扫掠”网格在柱体高度方向上做等距分层,避免楔形单元带来的各向异性。
- 算CD之前必须先做“阴性对照”:把几何参数恢复成无手性状态,计算CD,确认趋近于零。
5.2 特征频率求解器找不到高Q模式
在用默认的直接求解器(MUMPS或PARDISO)做特征频率计算时,高Q模式往往隐藏在一堆低Q辐射模式中。COMSOL的默认特征值求解器用的是ARPACK或默认的“特征频率”求解器,它倾向于收敛到虚部较大(损耗较高)的模式,因为它们在数值上更容易被找到。而BIC模式虚部接近零,反而成了“难找”的模式。
解决思路是缩小搜索范围。在“特征频率”的研究设置中,把搜索基准频率值设得离预期共振频率非常近,同时把“目标模式数”设小一点,比如只搜索2个模式,求解器就更容易抓住你想要的解。
还有一种更稳定的技巧:先故意给结构加一个小的材料损耗(比如在折射率虚部上加一个0.001的Im(n)),让模式虚部变大,求解器容易收敛。找到这个有损模式之后,再逐步把损耗降回零,追踪模式实部和虚部的变化。这个过程就像一个“模式热身”,实测下来对付高Q模式特别有效。
5.3 为什么我复现的Q因子比文献低一个量级
这是复现高频问题。文献宣称Q因子50万,你算出来只有3万,心理落差非常大。
最常见的原因就是辐射损耗被网格离散误差稀释了。上一节说的网格收敛性测试是必须做的。如果你网格加密两倍之后Q翻了两倍以上,说明结果还在网格依赖区间,远远没有收敛。BIC模式在结构里高度局域,热点区域单元尺寸要到波长的1/100甚至更细,才能算准Q因子。
第二个原因是周期边界条件的“数值泄漏”。如果单元之间的周期性条件设置不当,电磁场在边界处会出现非物理的反射或泄漏,等效于增加了一个额外辐射通道。要检查周期边界是否正确,可以看电场切向分量在周期边界两侧的连续性,通常画一个边界上的场分布就能看出来。
第三个原因比较隐秘:PML与结构距离太近。PML会吸收所有辐射出去的能量,但如果PML离结构太近,它也会通过消逝场耦合吸收部分束缚模式的能量,导致Q因子偏低。建议PML内表面距离结构至少半个工作波长以上,PML本身的厚度设置成工作波长的1/4到1/2。
5.4 端口模式数与衍射级次的关系
前面提到过周期端口模式数的问题,我单独拿出来说,是因为它直接决定透射谱是否正确。对于周期P的阵列,在波长λ下,允许传播的衍射级次满足光栅方程:
[ m\lambda = P\sin\theta ]
你扫描的频率范围一旦高到某个衍射级次刚好变为传播态(也就是从消逝态变成辐射态),端口模式数必须同步增加,否则计算出的透射谱会在这个波长附近出现莫名其妙的跳变或缺失能量。
我在扫描超表面透射谱时,习惯先粗略估计一下最高频率下的传播衍射级次数,然后把端口模式数设置成比估计值大1到2个,避免瑞利异常波长附近的数值不连续性。虽然这会略微增加计算量,但可以彻底避免“能量不守恒”的困扰。
6. 复现结果如何与文献“对齐”:数据后处理技巧
6.1 无损耗材料下的Q因子近似与远场投影
如果文献里分析的是“无材料损耗”情况下的辐射Q因子,你在复现时会发现COMSOL本征频率虚部几乎为零,Q因子在数值上趋向一个很大的不确定值。这是因为在完全无损耗介质中,理想BIC的辐射损耗数学上严格为零,数值上你得到的虚部主要取决于数值误差,而不是物理量。
处理技巧是:用带折射率虚部材料先算,再从结果中扣除材料损耗的贡献。具体来说,设材料折射率为n = n0 + i k0,材料对应的Q因子近似为:
[ Q_{mat} = \frac{n0}{2k0} ]
然后利用总Q因子满足:
[ \frac{1}{Q_{total}} = \frac{1}{Q_{rad}} + \frac{1}{Q_{mat}} ]
反推出辐射Q因子。这个公式在损耗比较弱时非常准确。我通常的做法是:设置两个k0值(比如0.0001和0.0005),分别算两次Q_total,然后验证反推出来的Q_rad是否一致。如果一致,说明提取的辐射Q因子是可信的——这个一致性命中与否,可以作为你复现结果可靠性的一个判据。
另一种判断BIC模式是否为真“束缚态”的方法是做远场投影。在COMSOL后处理里,可以用“FT”操作符对近场分布做傅里叶变换,得到它在倒空间的分布。BIC的倒空间分布在相应动量点处强度为零,即使受到外部激发也不辐射。看到这个零点,你基本可以确信自己找对了模式。
6.2 对不上的时候怎么办:从“像素级复现”到“趋势对齐”
最后聊聊复现的心态问题。文章复现几乎不会一次到位,所以你需要一套系统的对参数方法。
我的习惯是分三步走:
- 先对共振波长/频率。如果λ对不上,优先查材料色散、几何尺寸量纲、周期边界设置。
- 再对Q因子数量级。如果Q差一个数量级,优先查网格收敛性、PML距离、辐射通道有没有被数值误差污染。
- 最后对CD谱的旋性符号。如果CD符号反了,优先查圆偏振定义方向、几何手性的朝向。
如果共振频率对上了、Q也对上了、CD趋势也对上了,只是数值峰高有20%以内的偏差,那多半是因为文献用了不同的网格精度或者材料虚部数据,这个不用死磕。真正要关注的是物理趋势是否一致——比如“旋转角增大 → CD峰增强但Q下降”这种关系是否复现出来。趋势对齐了,说明你的模型本质上已经和文献是一致的,数值上的微小差异更多来自细节差异。
作为最终校验,我还会复现文章里某张典型的电场分布图(比如共振波长处的|E|分布),对比热点位置、场强相对分布。这个比只看光谱更可靠,因为光谱是全局量,而电场分布是局域量,局域量对模型是否真实还原结构更加敏感。
7. 一些额外想说的实操心得
复现手性BIC超表面的整个流程中,我最大的体会是:这个方向的仿真“会做”容易,“做准”难。特征频率求解和频域透射谱求解,单独看都只是COMSOL的基础操作,但把它们结合在一起,用来验证一个具有极端Q因子和极化选择性的物理现象时,每一步都充满了数值陷阱。
几个小建议分享给你,都是踩坑换来的:
- 所有参数尽量用全局参数定义,包括PML厚度、单元尺寸、网格最大尺寸,这样扫描结构参数时不会因为某个尺寸没跟着变而出现奇怪结果。
- 每改一次几何,先跑一次无手性的对照,确认没有非物理的CD,再加入手性参数。
- 算高Q模式时,不要把两个本征模式同时拿到一个“特征频率”研究里求,分开求、分开追踪更稳定。
- 保存关键参数组合下的场分布图和S参数结果,这不仅方便你自己回溯,也是后期写论文或做补充材料的第一手素材。
做仿真归根结底是一个不断逼近真实的建模过程,COMSOL给你的是工具和自由度,但物理判断力还得靠你在反复调参、对数据、排查问题的循环里慢慢建立起来。希望这篇经验能让你在复现手性BIC文章的时候,少踩几个我踩过的坑。