Anisotropic materials can be represented by a 9-element permittivity tensor \( \varepsilon _{ij} \) where the electric fields \(E\) and displacement fields \(D\) are related via the relation.
$$ D_{i}=\varepsilon_{ij} E_{j} $$
where summation over j is implied on the right hand side. The full anisotropy tensor can be written as a matrix
$$\boldsymbol{\varepsilon} = \begin{bmatrix} \varepsilon_{11} & \varepsilon_{12} & \varepsilon_{13} \\ \varepsilon_{21} & \varepsilon_{22} & \varepsilon_{23} \\ \varepsilon_{31} & \varepsilon_{32} & \varepsilon_{33} \end{bmatrix} $$
The input of anisotropic materials is simple when the permittivity tensor is diagonal
$$\boldsymbol{\varepsilon} = \begin{bmatrix} \varepsilon_{x} & 0& 0 \\ 0 & \varepsilon_{y} & 0 \\ 0 & 0 & \varepsilon_{z} \end{bmatrix}$$
You may find the Liquid crystal simulation video helpful.
Diagonal anisotropic materials
To define an anisotropic material, set the Anisotropy field in the Material database to Diagonal and specify the material model parameters for each diagonal component. When viewing the material data with the material explorer, use the 'axis' property to select the diagonal component to visualize.
General anisotropic materials
If you have a more general form of anisotropy, you first need to perform an eigenvalue decomposition on the permittivity matrix (for example, using the eig script command), as follows
$$\varepsilon _D=U\varepsilon U^\dagger$$
where \(U\) is a unitary matrix and is related to the eigenvectors \(V\) by \(U=V^\dagger\), \(U^† = U^{-1}\) is the complex conjugate transpose of \(U\) and \(\varepsilon _D\) is the diagonal matrix with eigenvalues as diagonal elements.
This process requires \(\varepsilon\) to be normal, implying that \( \left[\varepsilon, \varepsilon^\dagger\right] = \varepsilon \varepsilon^\dagger - \varepsilon^\dagger \varepsilon = 0 \), where \(\dagger\) denotes the conjugate transpose.
After completing this process, the diagonal values of \(\varepsilon_D\) should be entered into the materials database, and the values of \(U\) should be added as a matrix transformation grid attribute.
Example
A simple example on setting up a fully anisotropic material.
#Calculate the diagonal matrix and unitary matrix to set up a fully anisotropic material.
# Define permittivity tensor in the reference coordinate system(x,y,z)
A = [ 1.5, 2,0;-2, 1.5,0;0,0,1.2];
#Calculate eigenvalues and assign to diagonal matrix
Evl=eig(A,1); # calculate eigenvalues
#Place eigenvalues into an array to be set later
DeR=[sqrt(Evl(1));sqrt(Evl(2));sqrt(Evl(3))];
#Set eigenvalues into the material
mymaterial = addmaterial("(n,k) Material");
setmaterial(mymaterial,"name","MOKE");
setmaterial("MOKE", "Anisotropy", 1); # enable diagonal anisotropy
setmaterial("MOKE","Refractive Index", real(DeR));
setmaterial("MOKE","Imaginary Refractive Index", imag(DeR));
# Calculate eigenvectors and assign as matrix transformation grid attribute
Evc=eig(A,2);
addgridattribute("matrix transform"); # add matrix transform grid attribute
# set the complex conjugate transpose of Evc to grid attribute property U
set("U",ctranspose(Evc));
set("name","kerr attribute"); # set Evc to grid attribute property U
Simple anisotropic indices
Anisotropic index values can be set using the material tab in a structure, if a dielectric material is used. To specify an anisotropic refractive index, use a semicolon to separate the diagonal \(xx\), \(yy\), \(zz\) indices. Eg. 1;1.5;1.
Example diagonal anisotropic simulation
$$\varepsilon = \begin{bmatrix} \varepsilon_{x} & 0& 0 \\ 0 & \varepsilon_{y} & 0 \\ 0 & 0 & \varepsilon_{z} \end{bmatrix}$$
The diagonally anisotropic material in the example file ([[diagonal_anisotropy.fsp]]) has a permittivity of n_xx, n_yy, n_zz = [2, 2, 1.001]. The anisotropic nature of the material is easily visible by comparing the field profiles of the Ex and Ez fields. Notice the reflection and refraction visible in the Ex fields that is not present in the Ez fields.
The users may refer to the [[compare-attributes.lsf]] script file to learn how to perform a given LC rotation using different grid attributes. The script sets up the grid attributes in the [[anisotropy-RCWA-FDTD-STACK.fsp]] simulation file. It then compares the phase differences induced by the rotation for s- and p-polarization for FDTD, RCWA, and STACK solvers.
For more information, see the following sub-topics:
Grid attribute tips and introduction
Permittivity rotation grid attribute
Matrix transformation grid attribute
For examples of using a diagonalized permittivity matrix, see: