I want to calculate the modes of a cylindrical hollow waveguide (WG) with inner radius 1 um, and outer radius 1.5 um. The surrounding medium is air (both inner and outer regions). The WG is a composition of at least 10 pairs of alternating metal-dielectric thin (20 nm) hollow cylinders. I could find the modes of this WG with FEEM or MODE. Now I want to employ an effective permittivity tensor, treating the WG material as an homogeneous anisotropic material, so that I can use coarser mesh and save time. Next, I will compare the results from both treatments.
The effective permittivity tensor is given in equation (3) of the article Combined Surface Plasmon and Classical Waveguiding through Metamaterial Fiber Design by Smith et al. This is obtained by geometrically rolling up a planar metal-dielectric bilayer stack (which can be described by parallel and perpendicular effective permittivities, given in equations (1) and (2) in the same article). Therefore, I have an anisotropic material where the permittivity at each location varies as a function of azimuth, phi, which is defined by a piecewise function of x and y coordinates.
I know that Lumerical can easily employ anisotropic tensors if the tensor is diagonal and not dependent on the spatial coordinates. If the permittivity tensor is not diagonal then I need first to make it diagonalised, and introduce the eigenvalues and eigenvectors. Since the permittivities are spatially varying in my case, I also run for loops to calculate the eigenvalues and eigenvectors at every spatial position.
To do these, I modified the example script given in the Lumerical Knowledge Base, on the Matrix Transform page, updating the tensor, and the size of the import object. This script is supposed to calculate the diagonalized effective permittivity tensor and the transformation matrix. Doing so, I suppose I created an import object, with size 3x3x3 um, with my spatially varying permittivity tensor. Since my structure is a hollow cylinder, I added a large ring object (index=1) with inner radius, set to the outer radius of the WG, and a smaller cylinder object (index=1) with radius, set to the inner radius of the WG, so that only the WG region is described by the imported object and the surrounding is overwritten by index 1.
How do these sound? I thought everything’s cool but the calculated modes with such a setup are not correct. I attached my script and MODE files. Could you please help me understand what is wrong with my setup/script?