Post Processing

The PostProcessing module allows you to process the results of a DDA/CEMD calculation. Mostly for:

  • Computing cross sections and emission patterns.
  • Computing scattered fields.
  • Computing local density of states (LDOS).

The list of functions and a description of how to use them is given in the following section. In general $N$ represents the number of dipoles.

Functions List and Documentation

Functions for Cross Sections and Emission Patterns

Main.CoupledElectricMagneticDipoles.PostProcessing.compute_cross_sections_eMethod
compute_cross_sections_e(knorm,kr,e_inc,alpha_e_dl,input_field;explicit_scattering=true,verbose=true)

Computes the extinction, absorbtion and scattering cross section $\sigma_{ext}$, $\sigma_{abs}$, $\sigma_{sca}$ of a system made out of electric dipoles, illuminated by a plane wave. Note that it should follow the optical theorem, i.e.

\[\sigma_{ext}=\sigma_{abs}+\sigma_{sca}\]

Arguments

  • knorm: wave number in the medium.
  • kr: 2D float array of size $N\times 3$ containing the dimensionless position $k\mathbf{r}$ of each dipole.
  • e_inc: 2D complex array of size $N\times 3$ containing the total incident electric field $\mathbf{E}_{i}$ on each dipole.
  • alpha_e_dl: complex dimensionless electric polarizability of each dipole. See the Alphas module documentation for accepted formats.
  • input_field: 2D complex array of size $N\times 3$ containing the input field $\mathbf{E}_0(\mathbf{r}_i)$ at the position of each dipole. Note that it must be a plane wave.
  • explicit_scattering: boolean that says whether to compute scttering cross section explicitely (true) or to deduce it from the optical theorem (false). By default set to true.
  • verbose: whether to output pieces of information to the standard output at runtime or not. By default set to true.

Outputs

  • a float array of length 3 containing in order: extinction, absorption and scattering cross section. Cross sections are given in units of knorm^{-2}`.
source
Main.CoupledElectricMagneticDipoles.PostProcessing.compute_cross_sections_e_mMethod
compute_cross_sections_e_m(knorm,kr,phi_inc,alpha_e_dl,alpha_m_dl,input_field;explicit_scattering=true,verbose=true)

Computes the extinction, absorbtion and scattering cross section $\sigma_{ext}$, $\sigma_{abs}$, $\sigma_{sca}$ of a system made out of electric and magnetic dipoles, illuminated by a plane wave. Note that it should follow the optical theorem, i.e.

\[\sigma_{ext}=\sigma_{abs}+\sigma_{sca}\]

Arguments

  • knorm: wave number in the medium.
  • kr: 2D float array of size $N\times 3$ containing the dimensionless position $k\mathbf{r}$ of each dipole.
  • phi_inc: 2D complex array of size $N\times 6$ containing the total incident electric and magnetic field $\mathbf{\Phi}_i=(\mathbf{E}_i,\mathbf{H}_i)$ on each dipole.
  • alpha_e_dl: complex dimensionless electric polarizability of each dipole. See the Alphas module documentation for accepted formats.
  • alpha_m_dl: complex dimensionless magnetic polarizability of each dipole. See the Alphas module documentation for accepted formats.
  • input_field: 2D complex array of size $N\times 6$ containing the electric and magnetic input field $\mathbf{\Phi}_0=(\mathbf{E}_0(\mathbf{r}_i),\mathbf{H}_0(\mathbf{r}_i))$ at the position of each dipole. Note that it should be a plane wave.
  • explicit_scattering: boolean that says whether to compute scttering cross section explicitely (true) or to deduce it from the optical theorem (false). By default set to true.
  • verbose: whether to output pieces of information to the standard output at runtime or not. By default set to true.

Outputs

  • a float array of length 3 containing in order: extinction, absorption and scattering cross section. Cross sections are given in units of knorm^{-2}`.
source
Main.CoupledElectricMagneticDipoles.PostProcessing.compute_cross_sections_e_mMethod
compute_cross_sections_e_m(knorm,kr,phi_inc,alpha_dl,input_field;explicit_scattering=true,verbose=true)

Same as compute_cross_sections_e_m(knorm,kr,phi_inc,alpha_e_dl,alpha_m_dl,input_field;explicit_scattering=true,verbose=true), but the electric and magnetic polarizabilities of each dipole are given by a single 6x6 complex matrix. See the Alphas module documentation for accepted formats.

source
Main.CoupledElectricMagneticDipoles.PostProcessing.diff_scattering_cross_section_eMethod
diff_scattering_cross_section_e(knorm,kr,e_inc,alpha_e_dl,input_field,ur;verbose=true)

Computes the differential scattering cross section $d \sigma_{sca}/ d\Omega$ of a system made out of electric dipoles in direction(s) ur.

Arguments

  • knorm: wave number in the medium.
  • kr: 2D float array of size $N\times 3$ containing the dimensionless position $k\mathbf{r}$ of each dipole.
  • e_inc: 2D complex array of size $N\times 3$ containing the total incident electric field $\mathbf{E}_{i}$ on each dipole.
  • alpha_e_dl: complex dimensionless electric polarizability of each dipole. See the Alphas module documentation for accepted formats.
  • input_field: 2D complex array of size $N\times 3$ containing the electric input field $\mathbf{E}_0(\mathbf{r}_i)$ at the position of each dipole. Note that it should be a plane wave
  • ur: 1D float vector of length 3 (only one direction) or 2D float array of size $Nu\times 3$ (more thant 1 directions) containing the directions $\mathbf{u_r}$ where the diffrential scattering cross section is computed. Note that these directions vectors are normalized to 1 in the function.
  • verbose: whether to output pieces of information to the standard output at runtime or not. By default set to true.

Outputs

  • an array containing the differential cross section in each direction. Cross sections are given in units of knorm^{-2}`.
source
Main.CoupledElectricMagneticDipoles.PostProcessing.diff_scattering_cross_section_e_mMethod
diff_scattering_cross_section_e_m(knorm,kr,phi_inc,alpha_e_dl,alpha_m_dl,input_field,ur;verbose=true)

Computes the differential scattering cross section $d \sigma_{sca}/ d\Omega$ of a system made out of electric and magnetic dipoles in direction(s) ur.

Arguments

  • knorm: wave number in the medium.
  • kr: 2D float array of size $N\times 3$ containing the dimensionless position $k\mathbf{r}$ of each dipole.
  • phi_inc: 2D complex array of size $N\times 6$ containing the total incident electric and magnetic field $\mathbf{\Phi}_i=(\mathbf{E}_i,\mathbf{H}_i)$ on each dipole.
  • alpha_e_dl: complex dimensionless electric polarizability of each dipole. See the Alphas module documentation for accepted formats.
  • alpha_m_dl: complex dimensionless magnetic polarizability of each dipole. See the Alphas module documentation for accepted formats.
  • input_field: 2D complex array of size $N\times 6$ containing the electric and magnetic input field $\mathbf{\Phi}_0=(\mathbf{E}_0(\mathbf{r}_i),\mathbf{H}_0(\mathbf{r}_i))$ at the position of each dipole. Note that it should be a plane wave.
  • ur: 1D float vector of length 3 (only one direction) or 2D float array of size $Nu\times 3$ (more thant 1 directions) containing the dimensionless positions $\mathbf{u_r}$ where the diffrential scattering cross section is computed. Note that these directions vectors are normalized to 1 in the function.
  • verbose: whether to output pieces of information to the standard output during at runtime or not. By default set to true.

Outputs

  • an array containing the differential cross section in each direction. Cross sections are given in units of knorm^{-2}`.
source
Main.CoupledElectricMagneticDipoles.PostProcessing.diff_scattering_cross_section_e_mMethod
diff_scattering_cross_section_e_m(knorm,kr,phi_inc,alpha_dl,input_field,ur;verbose=true)

Same as diff_scattering_cross_section_e_m(knorm,kr,phi_inc,alpha_e_dl,alpha_m_dl,input_field,ur;verbose=true), but the electric and magnetic polarizabilities of each dipole are given by a single 6x6 complex matrix. See the Alphas module documentation for accepted formats.

source
Main.CoupledElectricMagneticDipoles.PostProcessing.emission_pattern_eMethod
emission_pattern_e(kr,e_inc,alpha_e_dl,ur,krd,dip;verbose=true)

Computes the emission pattern $d P/ d\Omega$ (differential power emitted in a given direction) of a system made out of electric dipoles in direction(s) of position(s) krf.

Arguments

  • kr: 2D float array of size $N\times 3$ containing the dimensionless position $k\mathbf{r}$ of each dipole.
  • e_inc: 2D complex array of size $N\times 3$ containing the total incident electric field $\mathbf{E}_{i}$ on each dipole. The user is required to first solve the DDA problem for e_inc in the presence of a point dipole source placed at krd.
  • alpha_e_dl: complex dimensionless electric polarizability of each dipole. See the Alphas module documentation for accepted formats.
  • ur: 1D float vector of length 3 (only one direction) or 2D float array of size $Nu\times 3$ (more thant 1 directions) containing the dimensionless positions $\mathbf{u_r}$ where the diffrential scattering cross section is computed. Note that these directions vectors are normalized to 1 in the function.
  • krd : float vector of length 3 containing the dimensionless position of the point electric dipole source.
  • dip: integer defining the dipole moment (dip = 1,2,3 is an electric dipole along x,y,z respectively)

or complex array of size 3 with the components for the electric dipole moment.

  • verbose: whether to output pieces of information to the standard output at runtime or not. By default set to true.

Outputs

  • an array containing the differential emitted power in directions ur in units of the power emitted by the emitter $P_0$ without any scatterers.
source
Main.CoupledElectricMagneticDipoles.PostProcessing.emission_pattern_e_mMethod
emission_pattern_e_m(kr,phi_inc,alpha_e_dl,alpha_m_dl,ur,krd,dip;verbose=true)

Computes the emission pattern $d \P/ d\Omega$ of a system made out of electric and magnetic dipoles in direction(s) of position(s) krf.

Arguments

  • kr: 2D float array of size $N\times 3$ containing the dimensionless position $k\mathbf{r}$ of each dipole.
  • phi_inc: 2D complex array of size $N\times 6$ containing the total incident electric and magnetic field $\mathbf{\Phi}_i=(\mathbf{E}_i,\mathbf{H}_i)$ on each dipole.
  • alpha_e_dl: complex dimensionless electric polarizability of each dipole. See the Alphas module documentation for accepted formats.
  • alpha_m_dl: complex dimensionless magnetic polarizability of each dipole. See the Alphas module documentation for accepted formats.
  • ur: 1D float vector of length 3 (only one direction) or 2D float array of size $Nu\times 3$ (more thant 1 directions) containing the dimensionless positions $\mathbf{u_r}$ where the diffrential scattering cross section is computed. Note that these directions vectors are normalized to 1 in the function.
  • krd : float vector of length 3 containing the dimensionless position of the point electric and/or magnetic dipole source.
  • dip: integer defining the dipole moment (dip = 1,2,3 is an electric dipole along x,y,z respectively and dip = 4,5,6 is a magnetic dipole along x,y,z respectively)

or complex array of size 6 with the first 3 components for the electric dipole moment and the last 3 components for the magnetic dipole moment.

  • verbose: whether to output pieces of information to the standard output at runtime or not. By default set to true.

Outputs

  • an array containing the differential emitted power in directions ur in units of the power emitted by the emitter $P_0$ without any scatterers.
source
Main.CoupledElectricMagneticDipoles.PostProcessing.emission_pattern_e_mMethod
emission_pattern_e_m(kr,phi_inc,alpha_dl,ur,krd,dip;verbose=true)

Same as emission_pattern_e_m(kr,phi_inc,alpha_e_dl,alpha_m_dl,ur,krd,dip;verbose=true), but the electric and magnetic polarizabilities of each dipole are given by a single 6x6 complex matrix. See the Alphas module documentation for accepted formats.

source

Functions for Scattered Fields

Main.CoupledElectricMagneticDipoles.PostProcessing.field_sca_eMethod
function field_sca_e(kr, alpha_e_dl, e_inc, krf)

Computes the scattered field from a system made out of electric dipoles. Note that the term $e^{ikr}/kr$ is retained, so krf has to be finite.

Arguments

  • kr: 2D float array of size $N\times 3$ containing the dimensionless position $k\mathbf{r}$ of each dipole.
  • alpha_e_dl: complex dimensionless electric polarizability of each dipole. See the Alphas module documentation for accepted formats.
  • e_inc: 2D complex array of size $N\times 3$ containing the total incident electric field $\mathbf{E}_{i}$ on each dipole.
  • krf: 1D float vector of length 3 (only one position) or 2D float array of size $Nu\times 3$ (more thant 1 position) containing the dimensionless positions $k\mathbf{r}_f$ at which the scattered field is computed.
  • verbose: whether to output pieces of information to the standard output at runtime or not. By default set to true.

Outputs

  • field_r: 2D complex array of size $Nf\times 6$ containing the scattered electric and magnetic fields by the dipoles at every $k\mathbf{r_f}$. Note that the term $e^{ikr}/kr$ is retained, so krf has to be finite.
source
Main.CoupledElectricMagneticDipoles.PostProcessing.field_sca_e_mMethod
field_sca_e_m(kr, alpha_e_dl, alpha_m_dl, phi_inc, krf; verbose=true)

Computes the scattered field from a system made out of electric and magnetic dipoles.

Arguments

  • kr: 2D float array of size $N\times 3$ containing the dimensionless position $k\mathbf{r}$ of each dipole.
  • alpha_e_dl: complex dimensionless electric polarizability of each dipole. See the Alphas module documentation for accepted formats.
  • alpha_m_dl: complex dimensionless magnetic polarizability of each dipole. See the Alphas module documentation for accepted formats.
  • phi_inc: 2D complex array of size $N\times 6$ containing the total incident electric and magnetic field $\mathbf{\Phi}_i=(\mathbf{E}_i,\mathbf{H}_i)$ on each dipole.
  • krf: 1D float vector of length 3 (only one position) or 2D float array of size $Nu\times 3$ (more thant 1 position) containing the dimensionless positions $k\mathbf{r}_f$ at which the scattered field is computed.
  • verbose: whether to output pieces of information to the standard output at runtime or not. By default set to true.

Outputs

  • field_r: 2D complex array of size $Nf\times 6$ containing the scattered electric and magnetic fields by the dipoles at every $k\mathbf{r_f}$.
source
Main.CoupledElectricMagneticDipoles.PostProcessing.far_field_sca_eMethod
function far_field_sca_e(kr,e_inc,alpha_e_dl,krf)

Computes the scattered field from a system made out of electric dipoles in the far field approximation. Note that the term $e^{ikr}/kr$ is retained, so krf has to be finite.

Arguments

  • kr: 2D float array of size $N\times 3$ containing the dimensionless position $k\mathbf{r}$ of each dipole. Note that these positions have to be far away from the dipoles positions.
  • alpha_e_dl: complex dimensionless electric polarizability of each dipole. See the Alphas module documentation for accepted formats.
  • e_inc: 2D complex array of size $N\times 3$ containing the incident electric field $\mathbf{E}_{i}$ on each dipole.
  • krf: 1D float vector of length 3 (only one position) or 2D float array of size $Nu\times 3$ (more thant 1 position) containing the dimensionless positions $k\mathbf{r}_f$ at which the scattered field is computed.

Outputs

  • field_r: 2D complex array of size $Nf\times 6$ containing the scattered field by the dipoles at every $k\mathbf{r_f}$. Note that the term $e^{ikr}/kr$ is retained, so krf has to be finite.
source
Main.CoupledElectricMagneticDipoles.PostProcessing.far_field_sca_e_mMethod
function far_field_sca_e_m(kr,e_inc,alpha_e_dl,alpha_m_dl,krf)

Computes the scattered field from a system made out of electric and magnetic dipoles in the far field approximation. Note that the term $e^{ikr}/kr$ is retained, so krf has to be finite.

Arguments

  • kr: 2D float array of size $N\times 3$ containing the dimensionless position $k\mathbf{r}$ of each dipole. Note that these positions have to be far away from the dipoles positions.
  • alpha_e_dl: complex dimensionless electric polarizability of each dipole. See the Alphas module documentation for accepted formats.
  • alpha_m_dl: complex dimensionless magnetic polarizability of each dipole. See the Alphas module documentation for accepted formats.
  • phi_inc: 2D complex array of size $N\times 6$ containing the incident electric and magnetic field $\mathbf{\Phi}_i=(\mathbf{E}_i,\mathbf{H}_i)$ on each dipole.
  • krf: 1D float vector of length 3 (only one position) or 2D float array of size $Nu\times 3$ (more thant 1 position) containing the dimensionless positions $k\mathbf{r}_f$ at which the scattered field is computed.

Outputs

  • field_r: 2D complex array of size $Nf\times 6$ containing the scattered field by the dipoles at every $k\mathbf{r_f}$. Note that the term $e^{ikr}/kr$ is retained, so krf has to be finite.
source

Functions for LDOS

Main.CoupledElectricMagneticDipoles.PostProcessing.ldos_eMethod
ldos_e(kr, alpha_e_dl, Ainv, krd; dip=nothing, verbose=true)

It Computes local density of states (LDOS) of a system made out of electric dipoles normalized by the LDOS in the host medium without scatterers.

Arguments

  • kr: 2D float array of size $N\times 3$ containing the dimensionless position $k\mathbf{r}$ of each dipole.
  • alpha_e_dl: complex dimensionless electric polarizability of each dipole. See the Alphas module documentation for accepted formats.
  • Ainv: (inverse) DDA matrix.
  • krd: 2D float array of size $Nd\times 3$ containing the dimentionless positions $k\mathbf{r_d}$ where the LDOS is calculated.
  • dip: integer defining the dipole moment (dip = 1,2,3 is an electric dipole along x,y,z respectively)

or complex array of size 3 with the components for the electric dipole moment.

  • verbose: whether to output pieces of information to the standard output at runtime or not. By default set to true.

Outputs

  • LDOS: float array with the LDOS normalized by the LDOS in the host medium without scatterers.
source
Main.CoupledElectricMagneticDipoles.PostProcessing.ldos_e_mMethod
ldos_e_m(kr, alpha_e_dl, alpha_m_dl, Ainv, krd; dip=nothing, verbose=true)

Computes local density of states (LDOS) of a system made out of electric and magnetic dipoles normalized by the LDOS in the host medium without scatterers.

Arguments

  • kr: 2D float array of size $N\times 3$ containing the dimensionless position $k\mathbf{r}$ of each dipole.
  • alpha_e_dl: complex dimensionless electric polarizability of each dipole. See the Alphas module documentation for accepted formats.
  • alpha_m_dl: complex dimensionless magnetic polarizability of each dipole. See the Alphas module documentation for accepted formats.
  • Ainv: (inverse) CEMD matrix.
  • krd: 2D float array of size $Nd\times 3$ containing the dimentionless positions $k\mathbf{r_d}$ where the LDOS is calculated.
  • dip: integer defining the dipole moment (dip = 1,2,3 is an electric dipole along x,y,z respectively and dip = 4,5,6 is a magnetic dipole along x,y,z respectively)

or complex array of size 6 with the first 3 components for the electric dipole moment and the last 3 components for the magnetic dipole moment.

  • verbose: whether to output pieces of information to the standard output at runtime or not. By default set to true.

Outputs

  • LDOS: float array with the LDOS normalized by the LDOS in the host medium without scatterers.
source
Main.CoupledElectricMagneticDipoles.PostProcessing.ldos_e_mMethod
ldos_e_m(kr, alpha_dl, Ainv, krd; dip=nothing, verbose=true)

Same as ldos_e_m(kr, alpha_e_dl, alpha_m_dl, Ainv, krd; dip=nothing, verbose=true), but the electric and magnetic polarizabilities of each dipole are given by a single 6x6 complex matrix. See the Alphas module documentation for accepted formats.

source
Main.CoupledElectricMagneticDipoles.PostProcessing.rad_ldos_eMethod
rad_ldos_e(kr,krd,p,dip;verbose=true)

Computes the radiative part of the LDOS of a system of electric point dipoles scatterers normalized by the LDOS in the host medium without scatterers.

Arguments

  • kr: 2D float array of size $N\times 3$ containing the dimensionless position $k\mathbf{r}$ of each dipole.
  • krd: float array of size 3 containing the dimentionless position $k\mathbf{r_d}$ where the radiative part of the LDOS is calculated.
  • p: 2D complex array of size$Nd\times 3$ containing the electric dipole moments of the dipoles.
  • dip: integer defining the dipole moment (dip = 1,2,3 is an electric dipole along x,y,z respectively)

or complex array of size 3 with the components for the electric dipole moment.

  • verbose: whether to output pieces of information to the standard output during running or not. By default set to true.

Outputs

  • float containing the normalized (by the LDOS in the host medium without scatterers) radiative LDOS at the position krd.
source
Main.CoupledElectricMagneticDipoles.PostProcessing.rad_ldos_e_mMethod
rad_ldos_e_m(kr,krd,p,m,dip;verbose=true)

Computes the radiative part of the LDOS of a system of electric and magnetic point dipoles scatterers normalized by the LDOS in the host medium without scatterers.

Arguments

  • kr: 2D float array of size $N\times 3$ containing the dimensionless position $k\mathbf{r}$ of each dipole.
  • krd: float array of size 3 containing the dimentionless position $k\mathbf{r_d}$ where the LDOS is calculated.
  • p: 2D complex array of size$Nd\times 3$ containing the electric dipole moments of the dipoles.
  • m: 2D complex array of size$Nd\times 3$ containing the magnetic dipole moments of the dipoles.
  • dip: integer defining the dipole moment (dip = 1,2,3 is an electric dipole along x,y,z respectively and dip = 4,5,6 is a magnetic dipole along x,y,z respectively)

or complex array of size 6 with the first 3 components for the electric dipole moment and the last 3 components for the magnetic dipole moment.

  • verbose: whether to output pieces of information to the standard output at runtime or not. By default set to true.

Outputs

  • float containing the normalized (by the LDOS in the host medium without scatterers) radiative LDOS at the position krd.
source
Main.CoupledElectricMagneticDipoles.PostProcessing.nonrad_ldos_eMethod
nonrad_ldos_e(p,e_inc,dip;verbose=true)

Computes the non-radiative part of the LDOS of a system of electric point dipoles scatterers normalized by the LDOS in the host medium without scatterers. Note that the scattering problem has to be solved previously using a point dipole source as input field.

Arguments

  • p: 2D complex array of size$Nd\times 3$ containing the electric dipole moments of the dipoles. It has to be previously computed by one of the DDACore functions and compute_dipole_moment.
  • e_inc: 2D complex array of size $N\times 3$ containing the total incident electric field $\mathbf{E}_{i}$ on each dipole. It has to be previously computed by one of the DDACore functions, setting the input field to be a point dipole source.
  • dip: integer defining the dipole moment (dip = 1,2,3 is an electric dipole along x,y,z respectively)

or complex array of size 3 with the components for the electric dipole moment.

  • verbose: whether to output pieces of information to the standard output at runtime or not. By default set to true.

Outputs

  • float array containing the normalized non-radiative LDOS at everey position of krd.
source
Main.CoupledElectricMagneticDipoles.PostProcessing.nonrad_ldos_e_mMethod
nonrad_ldos_e_m(p,m,phi_inc,dip;verbose=true)

Computes the non-radiative part of the LDOS of a system of electric and magnetic point dipoles scatterers normalized by the LDOS in the host medium without scatterers. Note that the scattering problem has to be solved previously using a point dipole source as input field.

Arguments

  • p: 2D complex array of size$Nd\times 3$ containing the electric dipole moments of the dipoles. It has to be previously computed by one of the DDACore functions and compute_dipole_moment.
  • m: 2D complex array of size$Nd\times 3$ containing the magnetic dipole moments of the dipoles. It has to be previously computed by one of the DDACore functions, setting the input field to be a point dipole source.
  • phi_inc: 2D complex array of size $N\times 6$ containing the total incident electric and magnetic field $\mathbf{\Phi}_i=(\mathbf{E}_i,\mathbf{H}_i)$ on each dipole.
  • dip: integer defining the dipole moment (dip = 1,2,3 is an electric dipole along x,y,z respectively and dip = 4,5,6 is a magnetic dipole along x,y,z respectively)

or complex array of size 6 with the first 3 components for the electric dipole moment and the last 3 components for the magnetic dipole moment.

  • verbose: whether to output pieces of information to the standard output at runtime or not. By default set to true.

Outputs

  • 1D float array containing the normalized non-radiative LDOS at everey position of krd.
source

Utilities Functions

Main.CoupledElectricMagneticDipoles.PostProcessing.compute_dipole_momentMethod
compute_dipole_moment(alpha,phi_inc)

Computes the dipole moment (magnetic or electric) of a dipole with polarizability alpha under an incident field phi_inc. alpha can be:

  • a complex scalar
  • a 1D complex array of size $N$
  • a $3\times 3$ or $6\times 6$ complex matrix.
  • a 3D complex array of size $N\times 3\times 3$ or $N\times 6\times 6$
source