您的位置:首页 > 业界新闻

MPB以及周围软件的浅谈介绍

2010-08-18 20:34 274 查看
最近在跑MPB程序,把一些心得体会写下来。如果你对这个领域的知识和程序感兴趣,可以发电子邮件到:ghxandsky@gmail.com

a.
如果你喜欢物理,特别是固体物理,又喜欢光学,特别是光子晶体,但是你不熟悉计算机,甚至不知道GNU/Linux和*BSD为何物或者没有安装此系统,
这没关系,先搜索这方面的资料,强化UNIX风格操作系统的基本命令,这个软件将会很适合你。如果有时间,了解一下Scheme,这个语言很大用途,特别
是构建科学计算程序。

b.如果你喜欢计算机,喜欢自由/开源软件,你的机器已经安装了GNU/Linux或者*BSD系统,那么你可以快
速“预览”这个软件,不过,“预览”过后,如果你依然想把源代码洞察清楚,请翻看关于电动力学和固体物理的书籍,甚至还要了解量子力学的内容。如果你只是
从事互联网和计算机行业,这个程序“预览”在此文就为止了,珍惜时间,把精力放在更专注的领域。

c.如果你来自生物信息或者其他搞模拟计算领域的,或许MPB软件的设计“哲学”可以帮助你设计一些高性能计算程序。

d.如果你对以上abc都不“感冒”,纯粹看图片可以了,窥探一下。

以上是我一点心得,但愿可以给读者思想准备。

MPB
全称是MIT Photonic
Bands,顾名思义,是MIT科研人员开发的一套关于光子晶体能带结构计算工具,之所以冠名“光子”,因为计算的目的就是为了让普通光源(激光)发出光
能量通过这些“猜想”结构的晶体,使到某些频谱范围的受到限制,就是“禁带”。利用禁带的现象,可以制作光学滤波器,商业化后可以安装在光纤网络交换机
中,提高光通滤波效率能耗,提升性能价格比,促进大规模应用,提高互联网基础设施的带宽,彻底改变“龟速”状况,提高广大人民群众互联网生活的幸福感,构
建和谐社会(小星越吹越远了.^_^.)。说明一个问题,其实物理学研究和广大人民群众是息息相关。

这里说明我的工作平台:硬件
Intel P4 2.8Mhz(HT)、i865G、DDR 1G、Geforece 6800GT
256RAM(原本买来打游戏的,现在却用来搞可视化)、SATAII 500G;软件平台Debian GNU/Linux Lenny
5.05(32bit) ,only use stable
,具体基础软件版本参看debian.org。总的来说:没有钱买新机器,Debian稳定易用。

安装软件环境:

sudo apt-get install mpb h5utils qtiplot nlpot

这里,安装程序自动关联libctl、fftw和guile。

说明一下程序的基本功能:

a.Guile(GPL)
是GNU工程一个项目,主要提供GNU/Linux系统的语言扩展,暂时发现支持C和Scheme(没有深入挖掘),我们知道C语言很快,Scheme脚
本语言很灵活,可不可以把两者结合?对!Guile可以满足你需求,用C语言写核心程序,Scheme写原始数据脚本和递归控制流程,当然,混合编程是一
个很深的学问,慢慢学习(我曾经想过使用Guile对GSL的封装,可惜已经有别人做了,而且公开了,我思想落伍了)。

b.mpb(GPL)提供能带计算的平面波展开法,包含麦克斯韦方程组的变换展开。详细见源代码。

c.h5utils(GPL)是一个可视化的组件,提供生成二维图和三维可视化文件,.v5d和.vtk,可以分别使用vis5d和paraview软件,具体这些程序哪里下载和安装,请自行搜索或者Email我。

d.qtiplot(GPL),Qt界面的绘图软件,功能齐全。

e.libctl(GPL)是一个关于常用晶体格子的函数库,提供晶格和格点的“描述”,向上支持调用,典型的软件有MPB和MEEP。

f.fftw是广泛使用的离散傅立叶变换库之一,类似有GSL,LAPACK和私有的Intel MKL等。

要注意的是,以上软件使用GNU GPL自由软件协议发行。好的,现在默认你已经安装了以上软件。如果不能很好安装或者想使用最新版本,请到MPB官方网站
下载对应软件的最新版本,按照安装提示自行解压安装。

现在要运行测试了,假设目录位置为mpb/,则编写以下文件:

main.ctl 和 run.sh

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

;-------main.ctl-------------

(set! num-bands 8)

;这里设置八个带,是每一个k点计算带的个数

(set! geometry-lattice (make lattice (size 1 1 no-size)

(basis1 (/ (sqrt 3) 2) 0.5)

(basis2 (/ (sqrt 3) 2) -0.5)))

;这里设置晶格的组成结构,晶格基矢为(1 1 no-size),因为是平面的原因

;这里是元包的两个基矢,注意语法

(set! geometry (list (make cylinder

(center 0 0 0) (radius 0.2) (height infinity)

(material (make dielectric (epsilon 12))))))

;设置格点位置放置的晶系,有方格,球,椭圆,圆柱,锥体,台体

;这里设置圆柱,中心(0 0 0),半径0.2,高为无穷大,绝缘介质中,介电常数e=12

;具体的设置见官方文档

(set! k-points (list (vector3 0 0 0)          ; Gamma

(vector3 0 0.5 0)        ; M

(vector3 (/ -3) (/ 3) 0) ; K

(vector3 0 0 0)))        ; Gamma

;设置布里渊区倒空间的k点模样,由于是三角格子,倒空间也是三角格子,

;注意对称性的关系可以减少范围

(set! k-points (interpolate 4 k-points))

;设置k点,使每个k点间隔4个点内差值细分

(set! resolution 32)

;设置分辨率,也就是精确度

(run-tm (output-at-kpoint (vector3 (/ -3) (/ 3) 0)

fix-efield-phase output-efield-z))

;计算TM模式在矢量方向的数值

(run-te)

;计算TE模式

 
1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

#!/bin/bash

mpb main.ctl >& main.out

h5topng -S 3 epsilon.h5

h5tov5d epsilon.h5

h5tovtk epsilon.h5

mpb-data -r -m 3 -n 32 epsilon.h5

h5ls epsilon.h5

h5topng epsilon.h5:data-new

h5tov5d epsilon.h5:data-new

grep Gap main.out

grep tmfreqs main.out > main.tm.dat

grep tefreqs main.out > main.te.dat

在/mpb目录下输入命令:

$ chmod 755 run.sh  //该为可执行文件

$ ./run.sh                  //执行

等待结果,那么就可以得到图片和数据。



至于怎样绘制main.tm.dat和main.te.dat的数据?首先删除这些文件的第一行,替换删除“tmfreqs:,”,除去“、”替换为空格。好了,打开qtiplot把数据读取进去,划出来就可以了。这里粗糙画画。



这里附加一个其他main.ctl脚本的结构生成的三维图形:



谢谢你能看到这里。.^_^.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐