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

Reply via email to