光响应度脚本实现问题

孙老师您好,想请教下官网例子(https://kb.lumerical.com/en/index.html?solar_cells.html)中的理想光响应度是如何实现的?


我是这样写的,但最后一行


并且光源功率很低并不等于10mw。请问这是怎么回事?还有光响应度R应该如何获得?
谢谢老师了!

这个连接
https://kb.lumerical.com/en/index.html?solar_cells.html
是太阳能器件仿真例子的主页,没有具体例子。记住要进到网页里,其上面的联接才是

理想的光响应度应该是不考虑各种损耗,根据理想短路电流算出的。

你脚本有两个问题:
1:必须使用Sourcepower得到光源功率(即脚本中的SP),不能用Getnamed;
2:太阳能器件的光吸收不是用光源功率Sourcepower,而是分析组里面的太阳能光谱本身的功率。你看一下脚本就知道了。另外,因为是平面波,可以直接简化:


AM1.5光强是1000瓦每平方米,你只需要将你仿真器件的截面积乘它就是你这个器件单元上的光源功率。

不好意思 孙老师,之前没点进去发现贴错链接了。是探测器这个例子:https://kb.lumerical.com/en/index.html?photodetectors_inp_uni_travelling_carrier_pd.html
那R应该怎么实现?用?R = Iph/getdata(sp);提示语法错误

我看下面这个例子是用的getnamed,那其中的sourcepower是sp=sourcepower(f)获得的么?我用了提示语法错误,不知道问题出在哪。

sp前面已经算出来了,是变量不是监视器了。Getdata只能从监视器(含光源)里面取数值,参见

getnamed提取的是设置的参数,不是仿真计算后的参数,你可以测试用这两个脚本提取一个监视器的X(X坐标有变化的,例如2D仿真时沿Y方向的监视器;3D仿真时的XY面监视器):
getdata(“monitor”,“x”)
getnamed(“monitor”,“x”);
前者得到的是一个阵列,就是监视器所在位置的X网格点坐标,而后者给出的是监视器本身的X坐标,是一个数,不是阵列。

再有问题请将你的文件和脚本上传。

谢谢老师的精解,可还是没搞明白R具体是怎么求出的,这是源文件和脚本Uploading…
[R.lsf (510 Bytes)]
是官网的例子(https://kb.lumerical.com/en/index.html?photodetectors_inp_uni_travelling_carrier_pd.html)

1.sp=sourcepower(f);求出的;Source power (Watts): 9.21975e-15,远远低于官网所说的10mw,想知道官网inputpower10mw如何获得的;
2.对于探测器,我的理解是R=I/sourcepower,而并非是I/Pabs_total,请问是这样么?
3.最后一行R的求解一直没搞明白怎么获得,不得已请教老师指点。
谢谢孙老师!

A1:10mw是光学仿真分析组里面给出的,
A2:你可能不清楚,sourcepower可以使任意值,因为监视器记录的结果已经是归一化的,与光源绝对功率无关,是分析组里面的功率才是正确的,是实际的功率,所以应该是I/Pabs_total。
A3:理解了第二个问题,这个问题应该明白了吧?
p=getresult(“generation”,“Pabs”);这里已经对波长积分了
G=p.Pabs;
x=p.x;
y=p.y;
z=p.z;
?m=integrate(G,1:3,x,y,z);这是这个体积内的绝对功率
#?R = Iph/getnamed(‘generation’,‘sourcepower’);

#?R = Iph/getdata(sp); # responsivity in A/W
?R = Iph/m;
所以是I/Pabs_total。