On Aug 5, 2008, at 4:02 AM, matt wrote:
> Could you explain how PEC is implemented exactly?  Is the large,  
> negative epsilon a Maxwellian interpretation of a PEC (if so, how?)  
> or is there some hard-coded check in the code which sets the fields  
> to zero if the epsilon is less than some value (if so, where in the  
> code?)

epsilon -> -infinity is equivalent in *effect* to a PEC (which,  
strictly, should be sigma -> +infinity) in the initial-value problem  
with E=0 at the start of the simulation. The electric field is forced  
to be zero inside the material with the PEC boundary conditions ---  
negative epsilon corresponds to exponentially decaying fields, and  
epsilon -> -infinity makes this decay length -> 0.  Another way of  
looking at it is that, in the time-evolution equation  dE/dt = (1/ 
epsilon) curl H, it causes E to be a constant (zero, since the initial  
conditions are E=0).  More careful considerations show that the  
boundary conditions correspond to those of a PEC.

Because of this, Meep doesn't need to do anything special or hard- 
coded in this case (for the most part).

In a similar way, mu -> -infinity is functionally equivalent to a PMC  
in Maxwell's equations.

I should qualify the above statements that this equivalence doesn't  
really hold in the static case.  (e.g. if we started with a nonzero  
static E field as our initial condition, this wouldn't change because  
dE/dt = 0 in the epsilon->-infinity region.)  However, since Meep  
always is looking at the time-varying problem with E=0 initial  
conditions, that doesn't matter.

(Actually, even epsilon -> +infinity should work.  Even though there  
are propagating waves in an epsilon -> +infinity material, the Fresnel  
reflection coefficient goes to unity at an interface with finite  
epsilon, so it acts the same way as a PEC in practice, as long as your  
sources lie outside the epsilon -> +infinity region.  Or, for that  
matter, even if your sources are inside the region since the group  
velocity -> 0 and dE/dt -> 0.)

> Some unrelated side questions -
>
> What does the second argument m refer to here?:
>
> fields::fields(structure *s, double m, bool store_pol_energy) :
>  S(s->S), v(s->v), user_volume(s->user_volume), gv(s->gv), m(m)

m is for cylindrical coordinates, specifying an exp(i*m*phi) angular  
dependence.  See the section of the manual on cylindrical coordinates,  
or the corresponding "m" input variable in the libctl front-end.

It is ignored for non-cylindrical coords.

> Also, is it correct that the subdirectory "hsrc" is now vestigial?

Yup.  It will probably be removed in a release or two.

Steven

_______________________________________________
meep-discuss mailing list
[email protected]
http://ab-initio.mit.edu/cgi-bin/mailman/listinfo/meep-discuss

Reply via email to