Useful Stuff
Main sources
Voronoi Diagrams
MATLAB script
Books / Papers
JAVA sources
List of parameters
Release Notes v2.1
Release Notes v2
Release Notes v1
Javadoc
Test BZones
Test MiniBZones
Edit this wiki
%Based on QHULL DEMO %http://www.mathworks.com/products/demos/shipping/matlab/qhulldemo.html clear all; close all; clc; disp('+++++++++++++++++++'); disp(' BRILLOUIN ZONES '); disp('(c) Poms 2009 '); disp('+++++++++++++++++++'); a=input(['\n','General triclinic lattice','\n','a: ']); if isempty(a), a=1.2; end b=input('b: '); if isempty(b), b=2; end c=input('c: '); if isempty(c), c=1.5; end alpha=input('alpha: '); if isempty(alpha), alpha=72; end beta=input('beta: '); if isempty(beta), beta=80; end gamma=input('gamma: '); if isempty(gamma), gamma=110; end animation=input('Make an animation and save the movie as gif yes/no: ','s'); if isempty(animation), animation='y'; end alpha=alpha*pi/180; beta=beta*pi/180; gamma=gamma*pi/180; w1 = cos(alpha) - cos(beta) * cos(gamma)/(sin(beta) * sin(gamma)); w2 = sin(gamma)^2 - cos(beta)^2 - cos(alpha)^2 ... + 2*cos(alpha) *cos(beta) * cos(gamma); w2 = sqrt(w2) / (sin(beta) * sin(gamma)); T1 = [a, 0, 0]; T2 = [b * cos(gamma), b * sin(gamma), 0]; T3 = [c * cos(beta), c * w1*sin(beta), c*w2*sin(beta)]; spat=cross(T1,T2)*T3'; G1=2*pi*cross(T2,T3)/spat; G2=2*pi*cross(T3,T1)/spat; G3=2*pi*cross(T1,T2)/spat; X = zeros(125,3); l=1; for i=-2:2; for j=-2:2; for k=-2:2; X(l,:)=i*G1+j*G2+k*G3; l=l+1; end end end cla reset; hold on % Compute Voronoi diagram. [c,v] = voronoin(X); nx = c(v{63},:); tri = convhulln(nx); % Plot the Voronoi diagram. if (animation ~= 'y') fh=figure(1); plot3(X(:,1),X(:,2),X(:,3),'b.','markersize',10); for i = 1:size(tri,1) patch(nx(tri(i,:),1),nx(tri(i,:),2),nx(tri(i,:),3),i,'FaceAlpha',0.85); end % Modify the view. view(3); title('1st Brillouin zone'); axis equal tight off vis3d grid on; camzoom(2); rotate3d on else fh=figure('Position',[10,10,400,300]); %size of the gif! for i = 1:size(tri,1) patch(nx(tri(i,:),1),nx(tri(i,:),2),nx(tri(i,:),3),i,'FaceAlpha',0.85); end title('1st Brillouin zone'); axis equal tight off vis3d camtarget([0,0,0]); loop=36; azimuth=360/loop*[0:loop-1]; view(azimuth(1),30); drawnow; pause(0.1); mov=getframe(gcf); gifname = 'animation.gif'; I = frame2im(mov); [X, map] = rgb2ind(I, 128); imwrite(X, map, gifname, 'GIF', 'WriteMode', 'overwrite', 'DelayTime', 0, 'LoopCount', Inf); for k=2:loop view(azimuth(k),30); drawnow; pause(0.1); mov=getframe(gcf); I = frame2im(mov); [X, map] = rgb2ind(I, 128); imwrite(X, map, gifname, 'GIF', 'WriteMode', 'append', 'DelayTime', 0); end end
<!--{{{--> <link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' /> <!--}}}-->
Background: #fff Foreground: #000 PrimaryPale: #8cf PrimaryLight: #18f PrimaryMid: #04b PrimaryDark: #014 SecondaryPale: #ffc SecondaryLight: #fe8 SecondaryMid: #db4 SecondaryDark: #841 TertiaryPale: #eee TertiaryLight: #ccc TertiaryMid: #999 TertiaryDark: #666 Error: #f88
/*{{{*/ body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];} a {color:[[ColorPalette::PrimaryMid]];} a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];} a img {border:0;} h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;} h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];} h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];} .button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];} .button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];} .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];} .header {background:[[ColorPalette::PrimaryMid]];} .headerShadow {color:[[ColorPalette::Foreground]];} .headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];} .headerForeground {color:[[ColorPalette::Background]];} .headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];} .tabSelected{color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border-left:1px solid [[ColorPalette::TertiaryLight]]; border-top:1px solid [[ColorPalette::TertiaryLight]]; border-right:1px solid [[ColorPalette::TertiaryLight]]; } .tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];} .tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];} .tabContents .button {border:0;} #sidebar {} #sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];} #sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];} #sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];} #sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];} #sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];} .wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];} .wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;} .wizard h2 {color:[[ColorPalette::Foreground]]; border:none;} .wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]]; border:1px solid [[ColorPalette::PrimaryMid]];} .wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];} .wizardFooter {background:[[ColorPalette::PrimaryPale]];} .wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];} .wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid; border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];} .wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];} .wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid; border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];} .wizard .notChanged {background:transparent;} .wizard .changedLocally {background:#80ff80;} .wizard .changedServer {background:#8080ff;} .wizard .changedBoth {background:#ff8080;} .wizard .notFound {background:#ffff80;} .wizard .putToServer {background:#ff80ff;} .wizard .gotFromServer {background:#80ffff;} #messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];} #messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;} .popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];} .popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];} .popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;} .popup li.disabled {color:[[ColorPalette::TertiaryMid]];} .popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;} .popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;} .popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;} .popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];} .listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];} .tiddler .defaultCommand {font-weight:bold;} .shadow .title {color:[[ColorPalette::TertiaryDark]];} .title {color:[[ColorPalette::SecondaryDark]];} .subtitle {color:[[ColorPalette::TertiaryDark]];} .toolbar {color:[[ColorPalette::PrimaryMid]];} .toolbar a {color:[[ColorPalette::TertiaryLight]];} .selected .toolbar a {color:[[ColorPalette::TertiaryMid]];} .selected .toolbar a:hover {color:[[ColorPalette::Foreground]];} .tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];} .selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];} .tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];} .tagging .button, .tagged .button {border:none;} .footer {color:[[ColorPalette::TertiaryLight]];} .selected .footer {color:[[ColorPalette::TertiaryMid]];} .sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;} .sparktick {background:[[ColorPalette::PrimaryDark]];} .error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];} .warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];} .lowlight {background:[[ColorPalette::TertiaryLight]];} .zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];} .imageLink, #displayArea .imageLink {background:transparent;} .annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];} .viewer .listTitle {list-style-type:none; margin-left:-2em;} .viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];} .viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];} .viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];} .viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];} .viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];} .viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];} .viewer code {color:[[ColorPalette::SecondaryDark]];} .viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];} .highlight, .marked {background:[[ColorPalette::SecondaryLight]];} .editor input {border:1px solid [[ColorPalette::PrimaryMid]];} .editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;} .editorFooter {color:[[ColorPalette::TertiaryMid]];} #backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];} #backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;} #backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; } #backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];} #backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;} #backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;} #backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];} .backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];} .backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];} #backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity=60)';} /*}}}*/
/*{{{*/ * html .tiddler {height:1%;} body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;} h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;} h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;} h4,h5,h6 {margin-top:1em;} h1 {font-size:1.35em;} h2 {font-size:1.25em;} h3 {font-size:1.1em;} h4 {font-size:1em;} h5 {font-size:.9em;} hr {height:1px;} a {text-decoration:none;} dt {font-weight:bold;} ol {list-style-type:decimal;} ol ol {list-style-type:lower-alpha;} ol ol ol {list-style-type:lower-roman;} ol ol ol ol {list-style-type:decimal;} ol ol ol ol ol {list-style-type:lower-alpha;} ol ol ol ol ol ol {list-style-type:lower-roman;} ol ol ol ol ol ol ol {list-style-type:decimal;} .txtOptionInput {width:11em;} #contentWrapper .chkOptionInput {border:0;} .externalLink {text-decoration:underline;} .indent {margin-left:3em;} .outdent {margin-left:3em; text-indent:-3em;} code.escaped {white-space:nowrap;} .tiddlyLinkExisting {font-weight:bold;} .tiddlyLinkNonExisting {font-style:italic;} /* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */ a.tiddlyLinkNonExisting.shadow {font-weight:bold;} #mainMenu .tiddlyLinkExisting, #mainMenu .tiddlyLinkNonExisting, #sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;} #sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;} .header {position:relative;} .header a:hover {background:transparent;} .headerShadow {position:relative; padding:4.5em 0 1em 1em; left:-1px; top:-1px;} .headerForeground {position:absolute; padding:4.5em 0 1em 1em; left:0px; top:0px;} .siteTitle {font-size:3em;} .siteSubtitle {font-size:1.2em;} #mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;} #sidebar {position:absolute; right:3px; width:16em; font-size:.9em;} #sidebarOptions {padding-top:0.3em;} #sidebarOptions a {margin:0 0.2em; padding:0.2em 0.3em; display:block;} #sidebarOptions input {margin:0.4em 0.5em;} #sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;} #sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;} #sidebarOptions .sliderPanel input {margin:0 0 0.3em 0;} #sidebarTabs .tabContents {width:15em; overflow:hidden;} .wizard {padding:0.1em 1em 0 2em;} .wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;} .wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;} .wizardStep {padding:1em 1em 1em 1em;} .wizard .button {margin:0.5em 0 0; font-size:1.2em;} .wizardFooter {padding:0.8em 0.4em 0.8em 0;} .wizardFooter .status {padding:0 0.4em; margin-left:1em;} .wizard .button {padding:0.1em 0.2em;} #messageArea {position:fixed; top:2em; right:0; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;} .messageToolbar {display:block; text-align:right; padding:0.2em;} #messageArea a {text-decoration:underline;} .tiddlerPopupButton {padding:0.2em;} .popupTiddler {position: absolute; z-index:300; padding:1em; margin:0;} .popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;} .popup .popupMessage {padding:0.4em;} .popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0;} .popup li.disabled {padding:0.4em;} .popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;} .listBreak {font-size:1px; line-height:1px;} .listBreak div {margin:2px 0;} .tabset {padding:1em 0 0 0.5em;} .tab {margin:0 0 0 0.25em; padding:2px;} .tabContents {padding:0.5em;} .tabContents ul, .tabContents ol {margin:0; padding:0;} .txtMainTab .tabContents li {list-style:none;} .tabContents li.listLink { margin-left:.75em;} #contentWrapper {display:block;} #splashScreen {display:none;} #displayArea {margin:1em 17em 0 14em;} .toolbar {text-align:right; font-size:.9em;} .tiddler {padding:1em 1em 0;} .missing .viewer,.missing .title {font-style:italic;} .title {font-size:1.6em; font-weight:bold;} .missing .subtitle {display:none;} .subtitle {font-size:1.1em;} .tiddler .button {padding:0.2em 0.4em;} .tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;} .isTag .tagging {display:block;} .tagged {margin:0.5em; float:right;} .tagging, .tagged {font-size:0.9em; padding:0.25em;} .tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;} .tagClear {clear:both;} .footer {font-size:.9em;} .footer li {display:inline;} .annotation {padding:0.5em; margin:0.5em;} * html .viewer pre {width:99%; padding:0 0 1em 0;} .viewer {line-height:1.4em; padding-top:0.5em;} .viewer .button {margin:0 0.25em; padding:0 0.25em;} .viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;} .viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;} .viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;} .viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;} table.listView {font-size:0.85em; margin:0.8em 1.0em;} table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;} .viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;} .viewer code {font-size:1.2em; line-height:1.4em;} .editor {font-size:1.1em;} .editor input, .editor textarea {display:block; width:100%; font:inherit;} .editorFooter {padding:0.25em 0; font-size:.9em;} .editorFooter .button {padding-top:0px; padding-bottom:0px;} .fieldsetFix {border:0; padding:0; margin:1px 0px;} .sparkline {line-height:1em;} .sparktick {outline:0;} .zoomer {font-size:1.1em; position:absolute; overflow:hidden;} .zoomer div {padding:1em;} * html #backstage {width:99%;} * html #backstageArea {width:99%;} #backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em;} #backstageToolbar {position:relative;} #backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em;} #backstageButton {display:none; position:absolute; z-index:175; top:0; right:0;} #backstageButton a {padding:0.1em 0.4em; margin:0.1em;} #backstage {position:relative; width:100%; z-index:50;} #backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin-left:3em; padding:1em;} .backstagePanelFooter {padding-top:0.2em; float:right;} .backstagePanelFooter a {padding:0.2em 0.4em;} #backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;} .whenBackstage {display:none;} .backstageVisible .whenBackstage {display:block;} /*}}}*/
/*** StyleSheet for use when a translation requires any css style changes. This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes. ***/ /*{{{*/ body {font-size:0.8em;} #sidebarOptions {font-size:1.05em;} #sidebarOptions a {font-style:normal;} #sidebarOptions .sliderPanel {font-size:0.95em;} .subtitle {font-size:0.8em;} .viewer table.listView {font-size:0.95em;} /*}}}*/
/*{{{*/ @media print { #mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none !important;} #displayArea {margin: 1em 1em 0em;} noscript {display:none;} /* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */ } /*}}}*/
<!--{{{--> <div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'> <div class='headerShadow'> <span class='siteTitle' refresh='content' tiddler='SiteTitle'></span> <span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span> </div> <div class='headerForeground'> <span class='siteTitle' refresh='content' tiddler='SiteTitle'></span> <span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span> </div> </div> <div id='mainMenu' refresh='content' tiddler='MainMenu'></div> <div id='sidebar'> <div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div> <div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div> </div> <div id='displayArea'> <div id='messageArea'></div> <div id='tiddlerDisplay'></div> </div> <!--}}}-->
<!--{{{--> <div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div> <div class='title' macro='view title'></div> <div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div> <div class='tagging' macro='tagging'></div> <div class='tagged' macro='tags'></div> <div class='viewer' macro='view text wikified'></div> <div class='tagClear'></div> <!--}}}-->
<!--{{{--> <div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div> <div class='title' macro='view title'></div> <div class='editor' macro='edit title'></div> <div macro='annotations'></div> <div class='editor' macro='edit text'></div> <div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div> <!--}}}-->
To get started with this blank [[TiddlyWiki]], you'll need to modify the following tiddlers: * [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar) * [[MainMenu]]: The menu (usually on the left) * [[DefaultTiddlers]]: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened You'll also need to enter your username for signing your edits: <<option txtUserName>>
These [[InterfaceOptions]] for customising [[TiddlyWiki]] are saved in your browser Your username for signing your edits. Write it as a [[WikiWord]] (eg [[JoeBloggs]]) <<option txtUserName>> <<option chkSaveBackups>> [[SaveBackups]] <<option chkAutoSave>> [[AutoSave]] <<option chkRegExpSearch>> [[RegExpSearch]] <<option chkCaseSensitiveSearch>> [[CaseSensitiveSearch]] <<option chkAnimate>> [[EnableAnimations]] ---- Also see [[AdvancedOptions]]
<<importTiddlers>>
BZones is a JAVA applet visualizing Brillouin zones by the original author Otto Scheibelhofer, extended by Johannes Poms © 2009
!Books Symmetry principles in solid state and molecular physics by Melvin J. Lax http://books.google.at/books?id=Nr2Uo9u0a8cC&dq=Symmetry+principles+in+solid+state+and+molecular+physics Point groups, space groups, crystals, molecules by R. Mirman http://books.google.at/books?id=fAolOGrjWZ0C&q The Mathematical Theory of Symmetry in Solids by Christopher John Bradley, Arthur P. Cracknell The theory of Brillouin zones and electronic states in crystals by Harry Jones [file:./Jones,%20Theory%20of%20Brillouin%20Zones%20and%20Electronic%20States%20in%20Crystals%20(1960)(ASIN%20B0000CKQ6X).djvu] !Papers The monoclinic lattice isn't well described in above books. There was a series of articles on the Russian Physics Journal (former Soviet Physics Journal) in the 70s covering the geometry of the brillouin zone. Maybe you can get the papers *Dispersion laws in a simple monoclinic lattice Russian Physics Journal Volume 14, Number 4 / April 1971 http://www.springerlink.com/content/g875263511q6654u *Brillouin zone of a base-centered monoclinic lattice Russian Physics Journal Volume 17, Number 7 / Juli 1974 http://www.springerlink.com/content/j4085p1p93144642
[[Useful Stuff]] [[Main sources]] [[Voronoi Diagrams]] [[MATLAB script]]
[[GettingStarted]]
To get started with this blank [[TiddlyWiki]], you'll need to modify the following tiddlers: * [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar) * [[MainMenu]]: The menu (usually on the left) * [[DefaultTiddlers]]: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened You'll also need to enter your username for signing your edits: <<option txtUserName>>
* Original renderer http://www.dgp.toronto.edu/~mjmcguff/learn/java/11-3d/ Some nice applets for inspiration *http://www.crystallographic-software.com/ *http://www.iumsc.indiana.edu/morphology/xmorphDemo.html *http://escher.epfl.ch/crystalOgraph/
Accepted parameters are: |!tag|!default |!type|!description|h |size |400 |int |height of the applet window| |selectable |false |boolean |disables the choice box*| |crystalID |bcc |string |short name of the lattice to be shown**| |a | *** | double |lattice parameter a| |b |*** | double |lattice parameter b| |c |*** |double |lattice parameter c| |alpha |*** |double |lattice parameter alpha| |beta |*** |double |lattice parameter beta| |gamma |*** |double |lattice parameter gamma| |scale |100 or 200 |int |scaling the image inside the square| |elevation |12 |int |coordinate of the point of view| |azimuth |106 |int |coordiante of the point of view| |perspective |false |boolean |perspective on/off| |showaxes |true |boolean |visibility of axes| |showbase |false |boolean |visibility of reciprocal base vectors| |showbasis |falaw |boolean |visibility of base translation vectors| |showsymmetry |true |boolean |visibility of symmetry points and edges| |zoom |true or false |boolean |enables /disables mouse wheel zoom| |caption|c If no parameter is given, or it is not interpreted right, the default value is taken. The right lattice is not chosen by the crystal parameters, you have to do this yourself. * Has no effect in the version without interface ** All 14 Bravais lattices: |scc |simple cubic lattice | |bcc |body centered cubic lattice| |fcc |face centered cubic lattice| |hex |hexagonal lattice| |tets |simple tetragonal lattice| |tetbc |body centered tetragonal lattice| |orthos |simple orthorhombic| |orthobase |base centered orthorhombic| |orthofc|face centered orthorhombic| |orthobc |body centered orthorhombic| |trigonal |primitive trigonal lattice| |monos |simple monoclinic| |monobase |base centered monoclinic| |tri |triclinic lattice| *** every crystallclass uses own default values
{{{ %Based on QHULL DEMO %http://www.mathworks.com/products/demos/shipping/matlab/qhulldemo.html clear all; close all; clc; disp('+++++++++++++++++++'); disp(' BRILLOUIN ZONES '); disp('(c) Poms 2009 '); disp('+++++++++++++++++++'); a=input(['\n','General triclinic lattice','\n','a: ']); if isempty(a), a=1.2; end b=input('b: '); if isempty(b), b=2; end c=input('c: '); if isempty(c), c=1.5; end alpha=input('alpha: '); if isempty(alpha), alpha=72; end beta=input('beta: '); if isempty(beta), beta=80; end gamma=input('gamma: '); if isempty(gamma), gamma=110; end animation=input('Make an animation and save the movie as gif yes/no: ','s'); if isempty(animation), animation='y'; end alpha=alpha*pi/180; beta=beta*pi/180; gamma=gamma*pi/180; w1 = cos(alpha) - cos(beta) * cos(gamma)/(sin(beta) * sin(gamma)); w2 = sin(gamma)^2 - cos(beta)^2 - cos(alpha)^2 ... + 2*cos(alpha) *cos(beta) * cos(gamma); w2 = sqrt(w2) / (sin(beta) * sin(gamma)); T1 = [a, 0, 0]; T2 = [b * cos(gamma), b * sin(gamma), 0]; T3 = [c * cos(beta), c * w1*sin(beta), c*w2*sin(beta)]; spat=cross(T1,T2)*T3'; G1=2*pi*cross(T2,T3)/spat; G2=2*pi*cross(T3,T1)/spat; G3=2*pi*cross(T1,T2)/spat; X = zeros(125,3); l=1; for i=-2:2; for j=-2:2; for k=-2:2; X(l,:)=i*G1+j*G2+k*G3; l=l+1; end end end cla reset; hold on % Compute Voronoi diagram. [c,v] = voronoin(X); nx = c(v{63},:); tri = convhulln(nx); % Plot the Voronoi diagram. if (animation ~= 'y') fh=figure(1); plot3(X(:,1),X(:,2),X(:,3),'b.','markersize',10); for i = 1:size(tri,1) patch(nx(tri(i,:),1),nx(tri(i,:),2),nx(tri(i,:),3),i,'FaceAlpha',0.85); end % Modify the view. view(3); title('1st Brillouin zone'); axis equal tight off vis3d grid on; camzoom(2); rotate3d on else fh=figure('Position',[10,10,400,300]); %size of the gif! for i = 1:size(tri,1) patch(nx(tri(i,:),1),nx(tri(i,:),2),nx(tri(i,:),3),i,'FaceAlpha',0.85); end title('1st Brillouin zone'); axis equal tight off vis3d camtarget([0,0,0]); loop=36; azimuth=360/loop*[0:loop-1]; view(azimuth(1),30); drawnow; pause(0.1); mov=getframe(gcf); gifname = 'animation.gif'; I = frame2im(mov); [X, map] = rgb2ind(I, 128); imwrite(X, map, gifname, 'GIF', 'WriteMode', 'overwrite', 'DelayTime', 0, 'LoopCount', Inf); for k=2:loop view(azimuth(k),30); drawnow; pause(0.1); mov=getframe(gcf); I = frame2im(mov); [X, map] = rgb2ind(I, 128); imwrite(X, map, gifname, 'GIF', 'WriteMode', 'append', 'DelayTime', 0); end end }}} [[brillouin_zones_matlab.m|brillouin_zones_matlab.m]] [img[animation.gif]]
!Brillouin zone The given [[PDF sheets|./symmetrypoints.pdf]] are not perfect, until today nobody knows the real source of them. So I used [["Bradley ,Cracknell - Mathematical Theory of Symmetry"|./Bradley,Cracknell-Mathematical%20Theory%20of%20Symmetry%20in%20Solids%20(chapter%20space%20groups).pdf]] as reference. The two texts use different basis and reciprocal space vectors, besides the monoclinic lattice I used Bradley's definition. So you have to convert the coordinates if you want to compare. !Websites *http://homepage2.nifty.com/a-m/bandmemo/node1.html *http://www.cryst.ehu.es/cgi-bin/cryst/programs/nph-table?from=kv !Rhombohedral - hexagonal coordinates It's more convenient to use hexagonal coordinates http://www.uwgb.edu/DutchS/SYMMETRY/rhombo-lattice.htm To convert coordinates you can use http://qpeng.org/tools/r2h.html or use the formulas http://materials.binghamton.edu/444/part_I/sld048.htm http://cst-www.nrl.navy.mil/lattice/
[[Useful Stuff]] [[Main sources]] [[Voronoi Diagrams]] [[MATLAB script]] [[Books / Papers]] [[JAVA sources]] ---- [[List of parameters]] [[Release Notes v2.1]] [[Release Notes v2]] [[Release Notes v1]] [[Javadoc|../doc/index.html]] [[Test BZones|../btest2.html]] [[Test MiniBZones|../../MiniBzones/minibzonestest.html]] ---- [[Edit this wiki]]
author of v2 I've you want to drop me a couple of lines poms [at] student.tugraz.at
Notes from the original author Otto Scheibelhofer pasted in this wiki ---- <html> <head> <META http-equiv=Content-Type content="text/html; charset=windows-1252"> <title>Documentation of Bzones</title> <! Exported with Notepad++> <style type="text/css"> span { font-family: 'Courier New'; font-size: 10pt; color: #000000; } .sc0 { } </style> </head> <body> <div style="float: left; white-space: pre; line-height: 1; background: #FFFFFF; "><span class="sc0"> Table of Contents 1) General Remarks 2) Personal Remarks 3) A Quick Guide for Introducing New Lattices 1) General Remarks This Applet was made with - jdk1.6.0_10 - Eclipse 3.4.1 The documentation (in Javadoc manner) can be found in the correspondent /doc directory. The source code can be found in the correspondent /src directory. In the folder Bzones, the complete applet with user interface can be found; In the folder Bzones_mini a version without interface can be found. Both versions accept the same parameters, they are enlisted in parameters.html. The versions only differ in the classes: Launch.java and ControlPanel.java. 2) Personal Remarks As I have just little serious Java programming experience, there may be found some unusual solutions or even bad programming style. Anyone should feel free to improve this! 3) A Quick Guide for Introducing New Lattices For the 'even-less-experienced-than-me' users, this is a quick and dirty introduction in introducing a new lattice, in just a few steps. -) Create a new class and let it inherit from AbstractCrystal. (Or just copy and rename an existing class, found in the crystals-subfolder.) -) Import this class in the CrystalMasterList found in the main-subfolder. Add 1 to the numbers of elements in the allCrystals-array. Add your new lattice in the list of crystals. It might then look as: AbstractCrystal[] allCrystals = new AbstractCrystal[9]; allCrystals[0] = new Cscc(); ... allCrystals[7] = new Cmkl(); allCrystals[8] = new Cmynewlattice(); return allCrystals; -) Edit Cmynewlattice.java according to the lattice you desire. You should change the following functions: public String getName() { return "Enter the name of your lattice, as it should appear in the spin wheel"; } public String getCrystalID() { return "short name used internal and as parameter for the mini-applet"; } public GuiModel getguiModel() { // a gui model to your desires and needs GuiModel model = new GuiModel("allowed", "allowed", "b", "90", "80", "70"); return model; } -) Now you can start calculating your lattice points in the function public void calculate(Parameter param) {} With double atilde = param.geta(); and similar you can get the crystal parameters. A bunch of vector operations is provided to help calculating your points. In the end make your points appear on the drawing board with functions this.addSymmetricPoint(vector, "Name of this point"); this.addEdge(starting vector, ending vector); etc. (The other functions can be found in the documentation of the AbstractCrystal class.) -) Compile every now and then. -) Good luck, have fun! </span></div></body> </html>
This is the second release of the applet. I want to thx the v1 author Otto Scheibelhofer for his great work, the usefull advices and feedback. !Changelog !!New Features *Zoom *Mini thumbnails *More crystal classes *Base translation vector = bravais basis vectors (primitive cell) *MATLAB script file for serious !!Enhancements *Tiddlywiki system as doku/help *Source version control system *lots of resources on the svn *smaller bugfixes !Used Software *Java JDK <br>1.6.0_13 *Eclipse Platform <br> Version: 3.4.2 *Eclipse Java Development Tools <br> v 3.4.2 *Subversive SVN Connector <br> v 2.2.0 *Subversive SVN Team Provider <br> v 0.7.8 !Version Control System I set up a [[svn project|http://en.wikipedia.org/wiki/Subversion_(software)]] on our university's SVN server: https://svn.tugraz.at/svn/bzones/ You need your favourite SVN client, a TUGonline account and a manual activation for this repository. Please contact Prof. Peter Hadley p.hadley@tugraz.at to get access. Maybe the source code will be available also on the course website, but for copyright reasons the additional resources won't be public. !Things need to be done *Triclinic BZ also in Applet *New renderer *Migrate to JAVA3D *List of all the symmetry points in k-space <br> in cartesian and reciprocal base vectors *Spell checking ;-)
*Do not show the BTV anymore, because this leads to confusion if a vector of real space is drawn in k-space *Updated Matlab script to save animated gif files [img[animation.gif]]
a JAVA applet to visualize Brillouin zones
[>img[./logo_head.gif]] BZones
I've done a lot of investigation on the topic, hopefully I've collected some useful sources. !Programs At least 2 small programs are out that can visualize both Brillouin zone and Fermi sphere. Unfortunately both are not downloadable * Software from japanese researchers Hiroshi Nakano and Yoshitaka Sato Materials Science and Engineering Vol 294–296 (2000) p542–547 (see [file:./Development%20of%203d%20visualization%20system.pdf]) *BRIZ: a vizualization program for Brillouin zone – Fermi sphere configuration Z. Kristallogr. Vol222 (2007) p718–721 <html><img src="http://www.issp.ac.ru/lsr/images/briz.gif" width="800" height="600"></html> (see [file:./zkri.2007.222.12.pdf]) !Further Software *[[Unisoft|http://www.uni-pc.gwdg.de/eckold/unisoft.html]] can visualise 1st Brillouin zone [img[http://www.uni-pc.gwdg.de/eckold/uni/scshot2.jpg]] *[[XCrySDen|http://www.xcrysden.org]] is a crystalline and molecular structure visualisation program able to # switch between primitive and conventional cell settings # change the number of the displayed unit cells, that is, display smaller or larger portions of a crystal # display the crystal lattice # visualise the Wigner-Seitz cell and Brillouin-zone # k-path selection for band-structure calculations # visualization of Fermi surfaces Note: XCrysden just displays prior generated files so you need other software as well <html><img src="http://www.xcrysden.org/img/xcrysden-in-action.png" width="800" height="600"></html> !Webarchives [[The Bilbao Crystallographic Server|http://www.cryst.ehu.es/html/doc/bcs_links.html]] links to excellent sites. Don't miss [[The interactive course on crystallography|http://lcr.epfl.ch/page37304.html]] with lots of applets. Especially [[the CrystalOgraph Applet|http://escher.epfl.ch/crystalOgraph]] is impressive ;-) Large programe archive [[ccp14|http://www.ccp14.ac.uk/mirror/mirror.htm]] !Videos [[Video using the Visualization ToolKit|http://www.youtube.com/watch?v=wjZwNGr-Nlw]] [[Brillouin zone morphing|http://abulafia.mt.ic.ac.uk/Bulatov/gallery/qmech/bzone/fcc_sc_bcc.mpg]]
Brillouin Zones or Wigner-Seitz cells are closely related to [[Veronoi diagrams|http://en.wikipedia.org/wiki/Voronoi_diagram]] There is a huge field in computing science and mathematics to develop Veronoi algorithm. I found a JAVA Applet [[Voronoi3D|http://www.voronoi3d.com]] on the web that draw my attention. The ([[screenshot|http://www.voronoi3d.com/graphics/chLarge.jpg]]) clearly shows a brillouin zone. With further research I found out that Voronoi algorithm are already implemented in MATLAB. With MATLAB it was rather a easy task: <html><img src="monob.png" width="800" height="600"></html> (Monoclinic basecentered BZ) Use the [[MATLAB script]]