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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606

# MPB Release Notes
## MPB 1.11.1
10/23/20
* Fix compilation error on MacOS for `mpb/fields.c`.
## MPB 1.11
10/6/20
* More finegrained control of output verbosity (#119),
and reduction of default verbosity (#122 and #125).
* Add `sqmatrixset` routine in Scheme (#105).
## MPB 1.10
2/19/20
* `(get*point r)` functions now support MPI (#112).
* `withlibctl=dir` now looks in `dir/share/libctl` in addition to `dir` (#106).
## MPB 1.9
6/5/19
* Add optional `printf` callback so that Meep and other `libmpb` users
can capture standard output (#102).
## MPB 1.8
2/13/19
* Experimental `maxwell_set_planewave` function
* Updated for latest libctl (#83).
## MPB 1.7
11/16/18
* Add `maxwell_dominant_planewave` function (#71) and Scheme interface (#73)
## MPB 1.6.2
4/18/2018
* Fixed handling of 0argument band functions (like `randomizefields`)
in Guile 2.2.
* Bugfix in `doteigenvectors` for μ ≠ 1 (#37).
## MPB 1.6.1
1/18/2018
* Corrected some minor release glitches.
## MPB 1.6
1/18/2018
* Support for Guile 2.2.
* Support for magnetic materials (mu) via `mu`/`mudiag`/`muoffdiag`
material properties (thanks to Ling Lu).
* libmpb (for use in Meep) can now be built without Guile.
* `sqmatrixdiagm` and `sqmatrixeigvals` functions (thanks to Ling Lu).
* Migrated documentation to github/markdown/readthedocs (#22).
## MPB 1.5
4/2/2014.
* MPB now also installs a library, for use from within Meep 1.2 or later.
* Support Guile 2.x.
* Support FFTW version 3.x (in addition to FFTW 2.x). Version 3.3 or later
is required for MPI parallelism.
* Support for OpenMP parallelism.
* Use more accurate subpixel averaging algorithm for interfaces between
anisotropic material (see Kottke et al, PRE 77, 036611, 2008).
* Use more accurate geometry routines in recent libctl versions (improves
and speeds subpixel averaging).
* Support using a different k origin in findk.
* Added epsilonfunc wrapper for materialfunc (similar to Meep).
* Added compute1groupvelocity to compute group velocity of a single band.
* Added kinterpolateuniform function, to interpolate with roughly
uniform spacing in reciprocal space.
* Added optimizegridsize! function to round the grid size to a size
that can be handled more efficiently. (Only affects resolution, not
lattice vectors.)
* Allow user to set filenameprefix to false to disable its use.
* Added mpbdata P <angle> option to change the phase angle of the output.
* Added computefielddivergence and routines to get and output the
bound charge density: getchargedensity and outputchargedensity.
* resolution is now an arbitrary real number, not just an integer,
although of course MPB eventually computes an integer grid size.
* Support HDF5 1.8.
* Fix recurring "non positivedefinite matrix in potrf" errors that
were arising due to roundoff errors preventing matrix inversion.
* Fix outputatkpoint to avoid sensitivity to roundoff errors.
* Bug fix in parallel HDF5 support: HDF5 compiled for parallel I/O (MPI)
now works.
* Bug fix in fieldmap!, thanks to Karen Lee for the bug report.
* Bug fix for firstbrillouinzonek, thanks to Mischa Megens.
* Bug fix: getfield and computefieldintegral now use fields with the same
phase as the outputted fields. Thanks to Jim West for the bug report.
* Miscellaneous bug fixes.
## MPB 1.4.2
3/3/2003.
* Interactive prompt is now `mpb>` not `guile>`.
* Output `freqs:` line lists headings as `k1, k2, k3` instead of
`kx, ky, kz` since they are in reciprocallattice, not cartesian,
coordinates. Thanks to Theis Peter Hanson for the suggestion.
* Bug fix in findk for nonorthogonal lattices; thanks to Suxia
(Susan) Yang for tracking down this bug.
* Fixed SunOS problem where k vectors along nosize dimensions failed;
thanks to Benjamin Cowan for the bug report.
* Fixed findk to work for bandmin > 1; thanks to M. Povinelli for
the bug report.
* Fixed findk to work for thunk band functions (which take no arguments
and are called only once instead of perband).
## MPB 1.4.1
9/16/2002.
* Fixed NaN in field normalization when basis determinant was negative.
Thanks to Rumen Iliew for the bug report.
* Fixed compatibility problems with versions of Guile prior to 1.4.
Thanks to Cazimir G. Bostan for bug reports.
* Don't resize lattice basis for gridsize == 1 unless nosize was
explicitly specified; thanks to Tairan Wang for the suggestion.
## MPB 1.4
9/12/2002.
* New findk routine to find k as a function of frequency, instead of
viceversa.
* The Great Field Renormalization: all fields are now normalized
to have unit *integral* of their energy density (instead of
unit sum over the grid points), which is much more useful e.g. for
perturbation theory. (See field normalization section of manual.)
* You can now save fields in Scheme variables to perform computations
combining different fields. Example routines, e.g. to output the
Poynting vector, are included.
* Functions to export (and import) the raw eigenvectors (planewave
amplitudes), as well as to compute dot products of eigenvectors
from different kpoints (e.g. for detecting band crossings).
* allownegativeepsilon function to enable negativedielectric support.
* Added examples/dos.scm to compute density of states via simple
Gaussian histogram, suggested by Xavier Gonze and Doug Allan.
* Bug fix: allow real offdiagonal epsilon elements without requiring
withhermitianeps. Thanks to Doug Allan for the bug report.
* Eliminated floatingpoint error on Alpha for homogeneous structure.
Thanks to F. LopezTejeira for the bug report.
* Added man page for mpbsplit.
* Minor installation fixes.
## MPB 1.3
3/10/2002.
* You can now specify the grid size via the resolution input variable,
instead of via gridsize. In this case, you make e.g. a 2d simulation
by creating a lattice with size nosize in one dimension. The
old syntax is still supported, but the new style is encouraged
(all examples have been updated to the new style).
* New functions to retrieve fields, dielectric functions, etcetera
at any point, interpolated from the grid if necessary; see the
get*point functions in the reference section.
* New computefieldintegral function, analogous to computeenergyintegral;
thanks to Marin Soljacic for the suggestion.
* Support Scheme complex numbers where appropriate (e.g. in epsilonoffdiag
or in the new field integration functions).
* Got rid of NaN when computing the (undefined) group velocity
for zerofrequency states at the Gamma point; arbitrarily
return zero here instead. Thanks to Dmitry N. Chigrin for
reporting floatingpoint exceptions on Alphas.
* Fixed compilation failure for Fortran compilers that use all upper case;
thanks to Steve Lantz of Cornell.
* Added "Fun with Fortran" section to installation manual describing
common Fortran pitfalls; thanks to Steve Lantz for the suggestion.
* Improved BLAS/LAPACK detection; new withblas and withlapack
options to specify these libraries manually.
* Shortened withhermitianepsilon configure option to
withhermitianeps.
* The dataanalysis tutorial is now consistent with h5topng 1.7.
* Use new API from libctl 2.0.
## MPB 1.2.2
12/7/2001.
* Fixed bug that caused erroneous/failed convergence when EVENY/ODDY
constraints were used in three dimensions. Thanks to Rumen Iliew
for the bug report.
* Added convenience functions runyeven, runyodd, runyevenzeven, ...
## MPB 1.2.1
11/20/2001.
* Fixed serious crashing bug in 1.2; thanks to Karl Koch for the bug report.
## MPB 1.2
11/15/2001.
* Added new yparity computation and constraints. See the new
runparity function, which allows you to simultaneously specify
the parity through the y=0 and z=0 planes, for symmetric structures.
See also the displayyparities function.
* z parity is no longer computed by default; see the new
displayyparities and displayzparities functions to pass to (run).
* Return moreaccurate average epsilon, fill factor, and scalar
epsilon values (eigenfrequencies are not affected). Thanks
to Mischa Megens for bugging me.
* Now outputs D and H in consistent units (previously, D was multiplied
by a factor of frequency). Thanks to Michelle Povinelli for worrying.
* epsilon.h5 file now includes extra datasets for all components of the
effective dielectric tensor. (This feature is not yet supported if
you configure withinvsymmetry withhermitianepsilon.)
* runpolarization is replaced by runparity, and runeven/runodd are
deprecated in favor of runzeven/runzodd. runte/runtm are now
equivalent to runzeven/runzodd when invoked for 3d systems.
* Noted new basissize property of geometrylattice, from libctl 1.5.
This makes it easier to use conventional units in the fcc lattice.
* Groupvelocity computation no longer silently invalidates fields
that have been loaded with getdfield, etcetera. Thanks to Marin
Soljacic for the bug report.
* The configure script now checks that guile is in the $PATH. Thanks to
Bing Li and Giridhar Malalahalli for their bug reports.
* Rotated the W and K points of the diamondlattice example so that
they are oriented similarly to those in the Photonic Crystals book
by Joannopoulos et al. (eigenfrequencies are not affected). Thanks
to Robert Sheldon for pointing out that this was confusing.
* Added honeyrods.ctl example file: a 2d honeycomb lattice of rods.
* Added linedefect.ctl example file: a linedefect waveguide in
a 2d triangular lattice of dielectric rods, formed by a missing
row of rods.
## MPB 1.1.1
7/4/2001.
* Fixed bug in Hfield output that caused subtly incorrect Hfield
files (only) for 3d problems when NOT using mpbi.
* Fixed bug that caused mpbi to output incorrect results for 1d
problems (e.g. outputted dielectric functions with zeros).
* Changed default eigensolver tolerance from 1e4 to 1e7.
* Added retrievegap convenience function to return the gap between
two specified bands.
* Fixed typo that prevented compilation of MPI (parallel) version.
* C compiler flags O3 are no longer used by default, since they
don't work with some compilers; most of the performance depends
upon the BLAS and FFTW anyway. (Users wishing greater optimization
can set the CFLAGS environment variable.) Thanks to
Giridhar Malalahalli for the bug report.
## MPB 1.1
5/6/2001.
* Added computeenergyintegral function to make it easier to compute
arbitrary fieldenergy integrals for perturbation theory; thanks to
Marin Soljacic for the suggestion.
* Fixed bug in outputfield routines for the case of a nonzero kz
component, that caused the fields to be multiplied by an exp(ikx)
phase with a k in the wrong direction. Thanks to Jesper Riishede
for the bug report.
## MPB 1.0
2/23/2001.
* At long last, support for distributedmemory parallel machines
with MPI. The computation time (and memory usage) can often improve
nearly linearly with the number of processors. Thanks to
Clarendon Photonics for funding this work.
* Also added mpbsplit script to parallelize in a simpler way, without
MPI, on e.g. SMP machines, by dividing up the list of kpoints
among a number of serial mpb processes.
* Fixed bug in mpbi where artifacts could be introduced in 3d field
and dielectricfunction output files. (This only affected the
output files, not the frequency eigenvalues, etcetera.) Thanks
to Michelle Povinelli for the bug report.
* Added new materialfunction material type, so that you can now
specify that the dielectric tensor be an arbitrary function of
position. Thanks to Peter Bermel for needing this.
* If MPB is configured with the flag withhermitianepsilon, then
complexhermitian dielectric tensors (corresponding to magnetic
materials, which break timereversal symmetry) are supported.
Thanks to Shanhui Fan for pestering me about this.
* Eliminated outputcopies input variable; if you want to visualize
multiple unit cells, you should use mpbdata.
* Added new `nothing` material that punches a hole through other
objects to the background. (This is distinct from defaultmaterial
when epsiloninputfile is used, or for computeenergyinobjects.)
* Fixed inability of MPB 0.13 to run under an old version (1.2) of Guile.
* Now gives an error if kpoint or dielectric tensor is incompatible with
runte/runtm, or if the dielectric tensor is not positivedefinite.
* Default to vendor cc instead of gcc, so that C and Fortran compilers
are in sync. (We default to the vendor f77 because it was probably
used to compile LAPACK/BLAS, and Fortran libraries are picky.)
* The manual now cites our recent publication on the methods behind MPB.
* Bug fix in computeenergyinobjectlist for nonorthogonal lattices.
* Bug fix in combinebandfunctions and other functions of band functions,
which did not handle functions of no arguments ("thunks") correctly
(crashing with an error message). Thanks to Michelle Povinelli for
the bug report.
* Fixed a floatingpoint sensitivity bug in mpbdata that could cause
a crash on the Alpha; thanks to Dominique Caron for the bug report
and debugging information.
## MPB 0.13
1/7/2001.
* Can now take advantage of inversion symmetry in the geometry, gaining
at least a factor of two in speed and a factor of two in memory.
To use this, you configure MPB with withinvsymmetry; the resulting
executable is installed as `mpbi` and only supports inversion symmetry,
so you will usually want to install the ordinary MPB as well.
* Added new eigensolverblocksize input variable, so that MPB can
optionally solve for only a few bands at a time instead of all
at once, reducing memory requirements and often increasing speed.
* Improved handling of the singular (zerofrequency) solutions at
the Gamma (k=0) point. This k point should no longer converge
slowly (or cause additional problems in the targeted eigensolver).
* Manual updates: please see new referencing suggestions; expanded table
of contents; we now use more conventional units in diamond/fcc example.
* You can now pass a "thunk" (function of no arguments) to run, and
it will be evaluated once per kpoint (instead of once per band
per kpoint as for ordinary band functions).
* computefieldenergy function now also returns the fraction of the
energy in the various field components. Thanks to Karl Koch
for the suggestion.
* The filenameprefix variable is now read each time an output function
is called, instead of once per (run), so it can be changed frequently
if desired. Thanks to Karl Koch for the suggestion.
* Added firstbrillouinzone function to transform an arbitrary
kpoint into an equivalent point in the first Brillouin zone.
Thanks to Payam Rabiei for the suggestion.
* In mpbdata, the center of the output cell is now always identical
to the origin of the coordinate system. Thanks to Michelle
Povinelli for pointing out this deficiency.
* Used improved sphericalquadrature formula in computing the
effective dielectric tensor in 3d; this should increase accuracy
somewhat at lower grid resolutions. Thanks to Doug Allan for
helpful discussions.
## MPB 0.12
7/9/2000.
* Added fix*fieldphase functions to allow a deterministic phase
in the output fields, thanks to a suggestion by Doug Allan.
* Added groupvelocity calculation functions (displaygroupvelocities,
etcetera).
* Added e x,y,z option to mpbdata so that you can now specify
an orientation of the output cell (e.g. to make the first axis
the 111 direction of an fcc crystal).
* Added (index n) substitute for epsilon property of dielectrics,
equivalent to (epsilon (* n n)).
* Documented new libgeom features: cone geometric object, coordinate
conversion functions (reciprocal>lattice, lattice>cartesian, etc.),
and vector/matrix rotation.
* computefieldenergy now returns the total, unnormalized energy
in the corresponding field; combined with computeenergyinobjects,
this makes it easy to do some perturbation theory and related
calculations.
* Eigensolver improvements. Periodic reorthogonalization and
renormalization to combat some numerical problems. New
lineminimization code, included with permission from MINPACK2
by Jorge More.
* Fixed breaking of 90degree rotational symmetrybreaking by the mesh
in 2d; thanks to Jim West and Doug Allan of Corning for the bug
report. (In general, some symmetrybreaking by the discretization
seems hard to avoid, however.)
* Fixed bug in field output routines that could cause crashes
for grid sizes not a multiple of 4.
* Bug fix in dielectric function construction for 2d systems: we
now use the xy plane at z=0 as documented, instead of z=0.5.
## MPB 0.11
2/12/2000.
* configure script can now detect and link ATLAS 3.0 accelerated BLAS.
* Added bandrangedata output variable.
* Running mpbdata multiple times on the same file now replaces
the results of the previous run, instead of appending new2,
new3, etcetera.
* Fixed bug in runeven/runodd that could seriously slow or even
prevent eigensolver convergence. Thanks to Payam Rabiei for the
bug report.
* Fixed compilation withouthdf5, or when HDF5 is not found. Thanks
to Rajesh Rengarajan for the bug report.
## MPB 0.10
1/28/2000.
* Added mpbdata utility for postprocessing data (e.g. for unskewing
nonorthogonal lattices). See the data analysis tutorial or
man mpbdata for more information.
* Added new data analysis tutorial to the manual, describing how to
analyze and visualize the results of two sample calculations.
* Added support for a new material type, dielectricanisotropic, so
that you can specify arbitrary real/symmetric dielectric tensors.
* Added new outputatkpoint function to make it easier to output
fields only at a single kpoint in a bandstructure calculation.
* When outputting fields, output all field components (x, y, z, and
real and imaginary parts) to a single HDF5 file. Also include info
on the lattice and kpoint vectors to facilitate postprocessing.
* Added new subsection to the installation manual describing some
generic installation path issues on Unix that were confusing people.
* Use CPPFLAGS environment variable instead of the lessstandard
INCLUDES to pass I flags to the configure script (for header files
in nonstandard locations).
* Added diamond.ctl example file for a 3d diamond (fcc) lattice of spheres.
* Added (brief) mpb man page.
* Fixed zparity output and runeven/odd functions for 2d grids.
* Fixed bug in outputdpwrinobjects. Thanks to Mihai Ibanescu for
the bug report.
* Compilation fixes. We need to set SHELL in the Makefile for make on
some systems. Also added rule to insure ctlio.h is created before
main.c is compiled. Thanks to Christoph Becher for the bug reports.
## MPB 0.9.1
1/7/2000.
* Fixed eigensolver bug where special handling of Gamma (k=0) point could
screw up convergence for subsequent kpoints, causing incorrect results.
* Fixed behavior of filenameprefix input variable; thanks to Karl Koch
for the bug report.
## MPB 0.9
1/2/2000.
* Added runeven and runodd functions, so you can now compute only
even/odd states (with respect to a z=0 mirror plane) in systems with
sufficient symmetry. See also the new zparity output variable.
* Added epsiloninputfile variable, so that you can now read an
arbitrary dielectric function from a file.
* Field file names now include the polarization (e.g. `.tm`).
* Some optimizations in the eigensolver.
* Some documentation improvements; thanks to Edmond Chow for his comments.
* configure should work even when there is no Fortran compiler on your
system (assuming your BLAS, etc., libraries work without Fortran libs).
Thanks to Antti Renko for the bug report.
* Fixed problems detecting BLAS and LAPACK shared libraries in configure.
Thanks to Karri Varris for the bug report.
* Fixed trailing spaces in sed command, which were breaking `make install`
on some systems. Thanks to Ron Chase for the bug report.
## MPB 0.8.1
11/22/1999.
* Added outputhfieldx, outputdfieldy, etcetera, functions for
outputting only specific field components (see manual reference section).
* Sped up HDF5 field output routines.
* Added outputcopies variable to set the number of periods output by
the band output functions (see manual reference section).
## MPB 0.8
11/19/1999.
* Initial public release.
