MPB 光子晶体仿真软件使用介绍MPB 光子晶体仿真软件使用介绍.doc

MPB 光子晶体仿真软件使用介绍MPB 光子晶体仿真软件使用介绍.doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
MPB 光子晶体仿真软件使用介绍MPB 光子晶体仿真软件使用介绍

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

文档评论(0)

vshoulrengb3 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档