comsol各向异性黑磷。
搞黑磷模拟的朋友应该都懂,这玩意儿在不同方向上导电性能差异大到离谱。上次有个哥们拿着实验数据找我,说在COMSOL里死活复现不出黑磷的电流分布,我一看他的模型设置——好家伙,材料属性直接用了各向同性导电,这能对得上才见鬼了。
首先得明白黑磷的导电率张量长啥样。在xy平面内,x方向(锯齿方向)导电率是y方向(扶手椅方向)的5-10倍,垂直方向(z)直接绝缘。咱们得在材料属性里手动输入这个导电率矩阵。这里有个坑:COMSOL默认用直角坐标系,但实际材料方向可能需要旋转坐标系。
先整段核心代码镇楼:
% 黑磷导电率张量定义 sigma_x = 1e3; // S/m 锯齿方向 sigma_y = 2e2; // S/m 扶手椅方向 sigma_z = 1e-5; // S/m 垂直方向 material = mphcreate('material1'); mphselection(material,'geom','domain','1'); mphproperties(material, 'ElectricConductivity', {... [num2str(sigma_x),' 0 0'],... ['0 ',num2str(sigma_y),' 0'],... ['0 0 ',num2str(sigma_z)]});这段代码用LiveLink连接MATLAB控制COMSOL,直接怼进去各向异性参数。注意三个分量必须写成对角矩阵形式,别手贱加什么非对角项——黑磷是正交各向异性,非对角项本来就是零。
实际操作时最容易翻车的是材料坐标系没对齐。遇到过最离谱的案例:有人把黑磷片旋转了30度建模,结果导电率还是按默认坐标系输入,出来的电流线都扭曲成麻花了。这时候需要动坐标系功能:
mphcreate('coord1','workplane'); mphproperties('coord1','type','rectangular','rotation',30); mphselection(material,'coord','coord1');这波操作相当于给材料戴了个VR眼镜,强制让导电率主轴跟着材料方向走。注意旋转角度单位默认是弧度,用degree的话记得换算,别问我怎么知道的(曾经因此浪费了三小时debug)。
边界条件设置也有讲究。各向异性材料里的电场分布会沿着导电率高的方向"溜走",就像水流遇到不同阻力的管道。设置电势边界时建议用斜坡函数渐进加载:
voltage = 0.1; // V mphphysics('em','V0_em',voltage,'boundary',3,'expr',... ['(x<0.1e-6)*',num2str(voltage),' + (x>=0.1e-6)*',num2str(voltage),'*exp(-(x-0.1e-6)^2/1e-14)')]);这个高斯衰减的表达式能避免电场在边界突变导致的数值震荡。有次偷懒直接用阶跃函数,结果计算到第37步就发散,重启三次都没救回来。
后处理阶段更要睁大眼睛。别只看表面电势分布,建议同时监控电流密度矢量和各向异性比:
mphplot('em','pg1','data','d3.Jx_em','data','d3.Jy_em',... 'ratio',['(d3.Jx_em)/(',num2str(sigma_x/sigma_y),'*d3.Jy_em)']);当这个比值明显偏离1时,要么是材料参数设错了,要么是网格剖分把各向异性特性给平均掉了。特别是当黑磷厚度小于10nm时,建议开启边界层网格,不然边缘电流会算成玄学曲线。
最后说个冷知识:COMSOL 6.0开始支持黑磷的DFT计算接口,能直接从第一性原理计算结果导入导电率参数。不过这功能目前还有点傲娇,建议先用实验数据标定,等后续版本优化再尝试自动对接。