怎么使用Pabs 监视器得到absorption和x轴的图像


#1

怎么用Pabs 监视器得到absorption和x轴的图像,监视器用的是三维的,是不是需要对y、z轴积分?有没有相关脚本?


#2

因為Pabs的資料是三維的,所以如果你選擇x 為橫軸,理論上應該是某一個y-z平面的Absorption,你可以利用算好之後所得到的 Visualizer 裡在右上角選Line,Parameter 的地方, x 選 Plot x axis,y與z選你要的平面,這樣應該可以畫出你想要的圖了。


#3

是不是需要对y、z轴积分取决于你的要求啊!


#4

这样得出来的实际上是一条线上的吸收吧,不是块状材料沿x轴的吸收吧,而且纵坐标的单位很大啊,而Pabs——total单位正常


#6

我写的如下:
Pabs=getresult(“Pabs”,“Pabs”);
?integrate2(Pabs,[2,3],y,z);
运行后提示y is not valid function or variable name,z is not valid function or variable name。


#7

你需要将y,z提取出来,getresult得到的Pabs是Dataset,不是一般的矩阵。


#8

那应该使用什么l命令将Pabs里面的矩阵提取出来?提取出来后,后面那个积分可以吗?


#9

x=Pabs.x;
y=Pabs.y;
z=Pabs.z;
p=Pabs.Pabs;
pp=integrate2(p,[2,3],y,z);


#10

谢谢您啊,我再试试看


#11

我扫描的波长范围为1500-2000nm,我想知道怎么提取某一个特定波长下的x,y,z和Pabs?谢谢!


#12

不好意思,最近太忙了,所以一直没来得及弄,我试了下,可以出来与X轴对应的曲线,但是为什么从Pabs导出来的数据Pabs_total的数据要大好几个数量级?我看了下analysis脚本,没发现两者有明显地数量级关系啊,不知道是什么原因。这就导致我用此方法提取出来的数据画的图纵坐标数量级不对。


#13

你需要阅读里面的脚本看看输出是通过什么运算得到的。如果不积分,你就能得到p=Pabs.Pabs是随 xyz 和频率的函数。如果不积分,数值比较大,如果对空间积分,都是微米量级,数值一下子就变小了。你一步一步的将结果抽样显示出来,先不积分,然后分别积分看看。


#14

用Pabs计算后,会出来两个,一个是Pabs,另一个是Pabs_total, Psbs的数据是随x,y,z,lambda变化的函数,这个数据就比Pabs_total大了,Pabs_total 是对Pabs积分得到的。
x=getdata(“field”,“x”);
y=getdata(“field”,“y”);
z=getdata(“field”,“z”);
f=getdata(“field”,“f”);
nx=length(x);
ny=length(y);
nz=length(z);
nf=length(f);

E2_matrix=getelectric(“field”);
if (havedata(“index”,“index_x”)) {
n_matrix=getdata(“index”,“index_x”);
} else {
n_matrix=getdata(“index”,“index_z”);
}

W=meshgrid4d(4,x,y,z,f2pi); # create 4D matrix of f and sourcepower that
SP=meshgrid4d(4,x,y,z,sourcepower(f)); # that is the same size as E2 and n

################################################

calculate power absorption

as a function of x,y,z,f

epsilon = eps0n_matrix^2;
Pabs_matrix = 0.5
WE2_matriximag(epsilon);

normalize results to the source power. Without this line,

Pabs would have units of Watts / m^3

Pabs_matrix = Pabs_matrix / SP;

integrate over spatial dimensions to get the fraction of the

source power absorbed in the volume.

Pabs_integrated = integrate2(Pabs_matrix,1:3,x,y,z);

create data sets

Pabs = rectilineardataset(“Pabs”,x,y,z);
Pabs.addparameter(“lambda”,c/f,“f”,f);
Pabs.addattribute(“Pabs”,Pabs_matrix);

Pabs_total = matrixdataset(“Pabs_total”);**************为什么前面不用定义Pabs_total ?
Pabs_total.addparameter(“lambda”,c/f,“f”,f);
Pabs_total.addattribute(“Pabs_total”,Pabs_integrated);

我运行的脚本程序如下:
Pabs=getresult(“Pabs”,“Pabs”);
x=Pabs.x;
y=Pabs.y;
z=Pabs.z;
p=Pabs.Pabs;
pp=integrate2(p,[2,3],y,z);
得到的pp数值数量级太大了,这是什么原因?是因为我只对y,z积分造成的吗?需要怎么改?麻烦孙老师帮我看下


#15

为什么前面不用定义Pabs_total ?
A:这个是定义Dataset用的。参见Dataset的帖子
因为还有X没有积分,这个也是10的-6 次方的量级啊。如果对XYZ积分,量级就是吸收率,就是1-R-T,在0~1之间。


#16

我需要把算出来的结果×10的-6次方对吧,那我就明白了,谢啦!


#17

你一可以再对X积分开口于PabsTotal一样不?如果一样,就对了,再没有对X(微米量级)积分前函数肯定很大。