欢迎来到天天文库
浏览记录
ID:1488180
大小:56.00 KB
页数:11页
时间:2017-11-11
《mpb 光子晶体仿真软件使用介绍》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、MPB使用指南(部分)2006年12月01日星期五MPB使用指南(部分)MPB使用指南在这里,我们会展示如何使用MPB进行二维光子晶体能带计算和输出场分布图的整个过程。你可以从中知道MPB如何工作,也可以了解什么样的东西可以用它来实现。这里所列出的只是一部分,在MPBUserReference里会有更详细的内容。在下一个专题,dataanalysistutorial,会有更多的例子,着重数据的分析和可视化。ctl文件在MPB的使用中,ctl文件是不可缺少的,它的后缀是“ctl”,文件名类似foo.ctl(你可以用你自己喜欢的名字代替foo
2、)。ctl文件包括了所要研究的几何结构,要计算的本征矢量的数目,想要输出的东西和其他你想要计算的东西。ctl是用脚本语言来写的,所以它可以写成一系列简单的命令,来设计几何结构等等。在这个文件中全部是用户输入,循环和其他必须的命令。不过不用担心,你不须要做一个真正的程序员,因为这些语言都是比较简单的,例如你可以不用按顺序来输入,不用理会空格,可以随便插入说明,也可以不理会其他默认的设置。ctl文件是执行在libctl库上面的,而libctl也是建立在Scheme语言上。因此,在一个ctl文件中有三种可能的命令和语法:1.Scheme是由MI
3、T开发出来的一个强大的程序语言,它的语法很简单:所有的状态量都是以下这个形式,(functionarguments...)。我们要在GUNGuile编译器下运行Scheme。你不必学太多的Scheme来写一个基本的ctl文件,你可以在需要的时候再去查找。当然,有兴趣的话,可以参考它们的主页。2.libctl是我们用Guile编写的一个库,它是用来简化Scheme和科学计算软件的接口。libctl设置了一些基本的格式来实现用户接口和定义大量有用的函数。具体参考其主页。3.MPB定义了全部的接口,用来实现光子能带的计算。在manual里,会着
4、重说明它的特点。如果你能去了解一下libctlmanual,你会获益非浅,特别是libctlBasicUserExperience那一节,这样你就可以知道用户接口是怎样的,Scheme语言大概是怎样的(这个是很有用的),还有一些有用的一般性质。在这里我们就不再重复了。那就让我们继续。MPB程序一般是用以下的命令来运行:unix%mpbfoo.ctl>&foo.out这样,程序就会读入ctl文件,并且执行,保存数据在foo.out这个文件里(在mpb-ctl/examples/文件夹里有一些ctl文件的例子)。当然,你也可以直接输入mpb命
5、令,这样就进入了对话模式,你可以继续输入命令然后直接看到结果。计算第一个能带结构我们第一个例子是计算由介质棒构成的四方晶格的二维能带。在我们的ctl文件里,我们会首先指明要仿真的几何结构和参数,然后让它运行和输出。所有的参数都有默认值,每个参数对应着一个Scheme变量,所以我们只须指明哪些是需要修改的。(如果在guile提示符下输入命令:(help),程序会列出所有的参数变量和它们的信息)。其中一个参数是num-bands,是指明在每个K点要计算的能带的数目。如果你在提示符下输入num-bands,它会返回当前值:1——这个数值太小了,
6、可以加大:(set!num-bands8)这就是我们改变参数的过程(如果你现在输入num-bands,它会显示8)。下一步要做的是(与顺序无关),设置我们想要计算能带的K点。这个参数由变量k-points来决定,它是一个三维矢量,默认值是空的。我们把K点取在四方格子的简约布里渊区的转角处,Gamma,X,M,和Gamma:(set!k-points(list(vector3000);Gamma(vector30.500);X(vector30.50.50);M(vector3000)));Gamma注意我们是怎样建立一个list,还有三个
7、矢量vector3;我们可以分多行输入,还可以在分号后加上注释。一般上,我们也要计算三个方向上的K点的能带,这样才可以得到近似连续的能带图。我们可以调用一个函数来插入K点:(set!k-points(interpolate4k-points))这个函数可以在每个转角间线性插入4个K点;如果我们在提示符下输入k-points,它会显示以下的16个点:(#(000)#(0.10.00.0)#(0.20.00.0)#(0.30.00.0)#(0.40.00.0)#(0.500)#(0.50.10.0)#(0.50.20.0)#(0.50.30.
8、0)#(0.50.40.0)#(0.50.50)#(0.40.40.0)#(0.30.30.0)#(0.20.20.0)#(0.10.10.0)#(000))如上面描述的那样,当K点(非归一化
此文档下载收益归作者所有