Here, we describe what has changed between releases of the [[MIT Photonic Bands]] package. You can also refer to the <code>NEWS</code> file in the MPB package (or the <code>ChangeLog</code> file for a more detailed listing).

Here, we describe what has changed between releases of the [[MIT Photonic Bands]] package. You can also refer to the <code>NEWS</code> file in the MPB package (or the <code>ChangeLog</code> file for a more detailed listing).

{{TOCright}}

{{TOCright}}

+

+

+

== MPB 1.5 ==

+

+

<small>April 2, 2014</small>

+

+

* 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.

MPB 1.4

September 12, 2002

New find-k routine to find k as a function of frequency, instead of vice-versa.

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 k-points (e.g. for detecting band crossings).

Eliminated floating-point error on Alpha for homogeneous structure. Thanks to F. Lopez-Tejeira for the bug report.

Added man page for mpb-split.

Minor installation fixes.

MPB 1.3

March 10, 2002

You can now specify the grid size via the resolution input variable, instead of via grid-size. In this case, you make e.g. a 2d simulation by creating a lattice with size no-size 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 compute-field-integral function, analogous to compute-energy-integral; thanks to Marin Soljacic for the suggestion.

Support Scheme complex numbers where appropriate (e.g. in epsilon-offdiag or in the new field integration functions).

Got rid of NaN when computing the (undefined) group velocity for zero-frequency states at the Gamma point; arbitrarily return zero here instead. Thanks to Dmitry N. Chigrin for reporting floating-point 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 --with-blas and --with-lapack options to specify these libraries manually.

MPB 1.2.1

MPB 1.2

November 15, 2001

Added new y-parity computation and constraints. See the new run-parity function, which allows you to simultaneously specify the parity through the y=0 and z=0 planes, for symmetric structures. See also the display-yparities function.

z parity is no longer computed by default; see the new display-yparities and display-zparities functions to pass to (run).

Now outputs D and H in consistent units (previously, D and E were 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 --with-inv-symmetry --with-hermitian-epsilon.)

run-polarization is replaced by run-parity, and run-even/run-odd are deprecated in favor of run-zeven/run-zodd. run-te/run-tm are now equivalent to run-zeven/run-zodd when invoked for 3d systems.

Noted new basis-size property of geometry-lattice, from libctl 1.5. This makes it easier to use conventional units in the fcc lattice.

Group-velocity computation no longer silently invalidates fields that have been loaded with get-dfield, 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 diamond-lattice 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 honey-rods.ctl example file: a 2d honeycomb lattice of rods.

Added line-defect.ctl example file: a line-defect waveguide in a 2d triangular lattice of dielectric rods, formed by a missing row of rods.

MPB 1.1.1

July 4, 2001

Fixed bug in H-field output that caused subtly incorrect H-field files (only) for 3d problems when NOT using mpbi.

Added retrieve-gap 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

May 6, 2001

Added compute-energy-integral function to make it easier to compute arbitrary field-energy integrals for perturbation theory; thanks to Marin Soljacic for the suggestion.

Fixed bug in output-field 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

February 23, 2001

At long last, support for distributed-memory 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 mpb-split script to parallelize in a simpler way, without MPI, on e.g. SMP machines, by dividing up the list of k-points among a number of serial mpb processes.

Fixed bug in mpbi where artifacts could be introduced in 3d field and dielectric-function output files. (This only affected the output files, not the frequency eigenvalues, etcetera.) Thanks to Michelle Povinelli for the bug report.

Added new material-function 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 --with-hermitian-epsilon, then complex-hermitian dielectric tensors (corresponding to magnetic materials, which break time-reversal symmetry) are supported. Thanks to Shanhui Fan for pestering me about this.

Eliminated output-copies input variable; if you want to visualize multiple unit cells, you should use mpb-data.

Added new "nothing" material that punches a hole through other objects to the background. (This is distinct from default-material when epsilon-input-file is used, or for compute-energy-in-objects.)

Fixed inability of MPB 0.13 to run under an old version (1.2) of Guile.

Now gives an error if k-point or dielectric tensor is incompatible with run-te/run-tm, or if the dielectric tensor is not positive-definite.

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 compute-energy-in-object-list for non-orthogonal lattices.

Bug fix in combine-band-functions 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 floating-point sensitivity bug in mpb-data that could cause a crash on the Alpha; thanks to Dominique Caron for the bug report and debugging information.

MPB 0.13

January 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 --with-inv-symmetry; 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 eigensolver-block-size 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 (zero-frequency) solutions at the Gamma (k=0) point. This k point should no longer converge slowly (or cause additional problems in the targeted eigensolver).

You can now pass a "thunk" (function of no arguments) to run, and it will be evaluated once per k-point (instead of once per band per k-point as for ordinary band functions).

compute-field-energy function now also returns the fraction of the energy in the various field components. Thanks to Karl Koch for the suggestion.

The filename-prefix 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 first-brillouin-zone function to transform an arbitrary k-point into an equivalent point in the first Brillouin zone. Thanks to Payam Rabiei for the suggestion.

In mpb-data, 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 spherical-quadrature 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

July 9, 2000

Added fix-*field-phase functions to allow a deterministic phase in the output fields, thanks to a suggestion by Doug Allan.

compute-field-energy now returns the total, unnormalized energy in the corresponding field; combined with compute-energy-in-objects, this makes it easy to do some perturbation theory and related calculations.

Eigensolver improvements. Periodic reorthogonalization and renormalization to combat some numerical problems. New line-minimization code, included with permission from MINPACK-2 by Jorge J. Moré.

Fixed breaking of 90-degree rotational symmetry-breaking by the mesh in 2d; thanks to Jim West and Doug Allan of Corning for the bug report. (In general, some symmetry-breaking 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.

Fixed bug in output-dpwr-in-objects. 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 ctl-io.h is created before main.c is compiled. Thanks to Christoph Becher for the bug reports.

MPB 0.9.1

January 7, 2000

Fixed eigensolver bug where special handling of Gamma (k=0) point could screw up convergence for subsequent k-points, causing incorrect results.