|
|
★ ★ ★ ★ 小木虫(金币+0.5):给个红包,谢谢回帖交流 zzy870720z(金币+3):谢谢转载,最好注明出处,再次感谢 2010-09-05 15:25:02
电荷密度图MS里面就可以得到,计算时选择电荷密度和差分电荷密度,计算完后分析就可以得到,然后用截图软件截下来就可以了。
如用Origin作图,转发一个给你:
【MS电荷密度在Origin中作图方法
很早就想把这个给大家分享,因为看到一些虫子还在为此发愁。我也用过matlab,但结果不甚理想,所以就想如何在origin中快速实现。
1、Total density map
现在MS中save为文件,当然你需要将你的隐藏文件和扩展名都能显示,在结果文件夹中找到*.chrgm(好像是).
从origin中导入这个文件,得到4列数据,分别为a, b, c, 和charge.
一般的排序是先将a=1,对应的b,c不同,然后才是a=2的,以此类推.
如果你想做(100)面, 将b, c, charge列分别设为x, y, z轴,那么就只选中a=1对应的所有的b, c, charge数据,然后直接可以做出(100)面得电荷密度等高线图,通过调节,可以得到很好的图片。
(????怎么插图片啊???)
如果想得到(010)面的,将原来的数据的b列推至首列,然后选中首列,右键单击选择sort worksheet,这样就会对b列的数据按从小到大的顺序排列,而与之对应的a,c,charge随之改变。
按同样的方法可得到(010)面得电荷密度。
2、差分电荷密度
MS中只能给出显示,存为文件后却无法打开。昨天在一个会上问M C Payne这个问题,他解释说不是他的错,是公司的问题。(具一个牛人说,可用命令行运行后,可得到数据文件。还没试)。如果就现在的差分密度图片如何在Origin中做出来呢?
你需要做的也很简单。将MS的差分密度图片显示后,隐藏其它(包括原子),存为.bmp文件。然后在origin中新建一个空matrix表格。从File的import中选择image,按照默认方式导入刚才的.bmp文件。然后选择你需要的区域,点击右键形成新的Matrix表(其实现实的还是图片)。
再到view中的view mode选择数据,你会得到一个很奇怪的matrix表,别管他,直接对这个matrix做contour图,你会得到差分密度图了,要想获得好的效果,需要很仔细地调节。具体办法,实在太难写出来,等以后再说吧
MS电荷密度和差分密度用Origin作图的补充说明
★ ★ ★ ★ ★ ★ ★ ★
zdhlover(金币+5,VIP+0):辛苦了 11-3 18:42
yjmaxpayne(金币+3,VIP+0):多谢你的分享。 11-7 10:09
aylayl08 问:是否就以origin自动insert值就可以了呢?我估计他问的是一个普遍问题,所以在此发表一个帖子,对原先帖子进行补充。
这个问题我可以很肯定地说,不行!!!
你必须要自己去insert数据。而且最好能等差插入。一般来说,用import image的方法导入origin后,再用data mode显示数据时,你会发现数据都很大,完全不像MS中差分密度的负几到正几。至于原因我原来说过了。你需要在正负分界(也就是所谓差分密度为0)的地方,用粗实线来表示。得到电子(对应MS中为正值)的区域用细实线,在失去电子(对应MS中为负值)的区域用dot线。
如何判定origin作出的图中哪些区域是得或失电子呢?
我建议大家同时打开MS中的原图(差分密度),用Red-white-blue的64band模式显示。这样,你就会发现红色代表失去电子(负值)、蓝色代表得到电子(正值),而且在红-蓝之间一定有白色的区域(或许很细很窄),这就是差分密度为0的区域了。那么,你就可以以此为参照,来确定Origin中的得失电子区域和差分密度为0的分界线了。
同时,我后来发现,在MS中用white-black显示后,还是将band设为64为好,这样导入Origin后能反映出更细微的变化。特此说明,希望对大家有帮助。】
matlab做等电荷密度高线图,也转发一个给你:
【电荷密度图等高线的作法
★ ★ ★
spur(金币+3,VIP+0):感谢帮助!欢迎常来!
这是我师兄编的MATLAB程序用来处理MS电荷密度的等高线做法,分四步:
1.找到电荷密度图的存储文件,一般是在自己所建的计算project中,隐藏的,castep模块是.charg_frm格式的,可以用txt打开后另存为txt格式。
2.读取数据,在matlab命令里输入以下命令:
[path,fn]=uigetfile('*.txt','Open');
fp=fopen([fn,path],'r');
head=fscanf(fp,'%s',4);
data=fscanf(fp,'%f',[4,18*18*144]);
fclose(fp);
这是读取刚才保存的txt数据的,其中18*18*144是可以改的,分别对应a,b,c的重复单元。
3.作矩阵。
a=reshape(data(1, ,[18,18,144]);
b=reshape(data(2, ,[18,18,144]);
c=reshape(data(3, ,[18,18,144]);
d=reshape(data(4, ,[18,18,144]);
其中18*18*144是可以改的,分别对应a,b,c的重复单元,即长宽高的值。
4.作等高线图
layer=1;
contour(reshape(a(:,layer, ,[18,144]),reshape(c(:,layer, ,[18,144]),reshape(d(:,layer, ,[18,144]),8);
layer=1(2,3,4....) 可以修改作图的层数,分别是从前面到后面。最后的8表示显示线条数目,可以自己修改成9,10或其它。
hold on 表示累积作图,hold off表示清空前面的 作图
举例;做表面层和第九层的等高线图
>> layer=9;
contour(reshape(a(:,layer, ,[18,144]),reshape(c(:,layer, ,[18,144]),reshape(d(:,layer, ,[18,144]),8);
>> hold on
>> layer=1;
contour(reshape(a(:,layer, ,[18,144]),reshape(c(:,layer, ,[18,144]),reshape(d(:,layer, ,[18,144]),8);
这是沿侧面做等高线(即xz平面),其它方向作图类似。只要修改其中的参数就可以了,如把a(:,layer, ,[18,144]),reshape(c(:,layer, ,[18,144]),reshape(d(:,layer, ,[18,144]),8);
改为a(layer,:, ,[18,144]),reshape(c(layer,l:, ,[18,144]),reshape(d(layer,:, ,[18,144]),8);
欢迎大家指点。上传附件为样本数据和上述作图txt文档。
特别感谢师兄Mr.Tang.】
[ Last edited by meimeidyh on 2010-9-4 at 16:21 ] |
|