On 10/30/2017 07:08 AM, Dan Tovey wrote:
I would like to modify meep to use purely antisymmetric (real)
susceptibility tensors - i.e. the sigma_n parameters in the
'Materials' section of the manual. My question is: how does meep
internally store and propagate the susceptibility tensor? Is this in a
reduced form, e.g. as the three user-specified diagonal and
off-diagonal elements, with the symmetric assumption implemented only
when they are used, or are the user-specified elements used to build
the full 3x3 matrix (implementing the symmetric assumption) first, and
it is this which is then stored and propagated? If the former case,
what are the main places where the symmetric nature of the matrix is
implemented? If the latter case, in which part of the code is this done?
The sigma array is stored as part of the susceptibility class in
src/meep.hpp:155
realnum *sigma[NUM_FIELD_COMPONENTS][5];
NUM_FIELD_COMPONENTS is 20 (defined in src/meep/vec.hpp) which refers to
the total number of field components (Ex, Ey, Ez, Er, Ep, Hx, Hy, Hz,
...) and 5 is the number of directions (X,Y,Z,R, P). The sigma array is
initialized by structure::add_susceptibility (src/structure.cpp) which
in turn invokes structure_chunk::add_susceptibility
(src/anisotropic_averaging.cpp). (For a review of the concept of
"chunks", refer to section 2.2 of the Meep paper
<http://ab-initio.mit.edu/%7Eoskooi/papers/Oskooi10.pdf>.) Although Meep
can store the entire 3x3 matrix for sigma, currently sigma can only be
an anisotropic, real-symmetric tensor. There have been some discussions
regarding adding support for gyrotropic media
<https://github.com/stevengj/meep/issues/60> and we hope to get to this
in the near future.
The polarization field updates is defined in
lorentzian_susceptibility::update_P (src/susceptibility.cpp:169).
_______________________________________________
meep-discuss mailing list
meep-discuss@ab-initio.mit.edu
http://ab-initio.mit.edu/cgi-bin/mailman/listinfo/meep-discuss