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

Reply via email to