On Apr 30, 2008, at 6:41 PM, Mindy Lee wrote:
>
> Can MPB calculate mode volume? How do we get max (|E|)?
MPB doesn't have a built-in function for this, but you can easily
write one yourself using the compute-energy-integral or compute-field-
integral functions.
How you define "modal volume" really depends upon why you are
computing it, and what physical phenomena you are interested in. For
example, totally different modal-volume definitions are relevant for
e.g. enhancing spontaneous emission (the Purcell effect) or for
enhancing nonlinear effects.
Let me assume that you are interested in the Purcell effect. In this
case, the usual definition of modal volume as a figure of merit in
this case is (derived from the maximum local density of states):
V = integral epsilon |E|^2 / max epsilon |E|^2
You could compute this for a band b in MPB with something like:
(define (print-modal-volume b)
(let ((umax 0))
(get-dfield b)
(compute-field-energy)
(let ((U (compute-energy-integral (lambda (u eps r)
(set! umax (max umax u))
u))))
(print "modal-volume:, " (get-kpoint-index) ", " b ", " (/ U
umax)))))
Note that compute-energy-integral calls the function (lambda (u eps
r) ...) at every point in the grid and passes the corresponding energy
density u, so you can just keep track of the maximum in a local
variable umax.
Then you can just do:
(run print-modal-volume)
and it will output the modal volume via the above integral for every
band and k point.
Regards,
Steven G. Johnson
_______________________________________________
mpb-discuss mailing list
[email protected]
http://ab-initio.mit.edu/cgi-bin/mailman/listinfo/mpb-discuss