mpb improvements?
Greg Werner <[email protected]>
| Newsgroups | gmane.comp.science.photonic-bands |
|---|---|
| Message-ID | <[email protected]> |
There are a couple of suggestions that were made some time ago on the list that have not been incorporated into mpb 1.4.2. I think that one of them might count as a bug (though it may not affect many people)...the other I'm not sure about. Is there a list of known bugs in 1.4.2? (Are there known bugs in 1.4.2?) I'd like to know what the consensus (or expert opinion, rather) on these issues is, in case I'm making a mistake. Admittedly, the "issues" are pretty small. First, I'm pretty sure there's a bug in the "first-brillouin-zone" procedure. It was described in the mpb users list, ab-initio.mit.edu/cgi-bin/mailman/private/mpb-discuss/2004-April/000007.html (I can't see this link any more). Basically, the procedure translates a vector by reciprocal lattice basis vectors and takes the shortest result, then repeats until it finds the shortest vector that is equal to the original vector up to a reciprocal lattice vector. The problem is that if b1 and b2 are reciprocal lattice basis vectors, k + b1 and k + b2 may be longer than k, while k+b1+b2 may be shorter. The fix is simple: in mpb-ctl/mpb.scm, change the "try-all" function so that it tries diagonals too: b1, b2, b3, (which it does already), b1+b2, b1-b2, ... , b1 - b2 + b3, b1 + b2 - b3 (13 in all). Second, someone suggested a slight change to the averaging of the dielectric over a cell. The claim was that, e.g., with mesh-size 4, mpb samples points within the interval -1/2 to 1/2 at locations -3/6 -1/6 1/6 3/6, whereas with this change, it samples points at -3/8 -1/8 1/8 3/8. ab-initio.mit.edu/cgi-bin/mailman/private/mpb-discuss/2004-July/000066.html (again, I can't see this link anymore) This seems reasonable to me, since the points would be equally spaced over the whole lattice. I'll offer another test, on a cubic lattice of sapphire spheres (rotated so that the dielectric tensor is not diagonal): Here are the first 6 band frequencies with grids of N x N x N for a k vector of (0.1,0.2,0.3) (times 2pi), with mesh-size 7. N freq (c/a) of first 6 modes using mpb 1.4.2 16, 0.260688, 0.269213, 0.391221, 0.413273, 0.424603, 0.500248 32, 0.260662, 0.269210, 0.389662, 0.411626, 0.422824, 0.498832 64, 0.261040, 0.269523, 0.389486, 0.411522, 0.422587, 0.498649 128, 0.261228, 0.269676, 0.389437, 0.411513, 0.422524, 0.498642 N freq (c/a) of first 6 modes using mpb 1.4.2 + above change 16, 0.261050, 0.269517, 0.390861, 0.412963, 0.424180, 0.500194 32, 0.261153, 0.269624, 0.389750, 0.411814, 0.422887, 0.499032 64, 0.261253, 0.269703, 0.389537, 0.411612, 0.422630, 0.498773 128, 0.261343, 0.269774, 0.389479, 0.411576, 0.422563, 0.498718 It doesn't seem to make much difference (and I think that higher mesh-sizes will reduce the difference). However, it's interesting to look at the Richardson extrapolation of the frequency (assuming O(dx^2) error in frequency). I'll just show the frequencies extrapolated from N=8 and N=16: mpb 1.4.2:, 0.260653, 0.269209, 0.389142, 0.411077, 0.422231, 0.498360 w/ change:, 0.261356, 0.269815, 0.389583, 0.411554, 0.422573, 0.498692 and those extroplated from N=64 and N=128: mpb 1.4.2:, 0.261291, 0.269727, 0.389421, 0.411510, 0.422503, 0.498640 w/ change:, 0.261373, 0.269798, 0.389460, 0.411564, 0.422541, 0.498700 It seems to me that this change is beneficial. Thanks, Greg.