### Table of Contents

## Simulation algorithms

#### Overview of the different algorithms implemented

*Parratt*

- For optical isotropic material
- Very fast
- very stable algorithm
- can calculate only sigma- and pi-light. Circluar polarization modelled as average of sigma- and pi-light.
- magnetic contributions are included approximately for circular polarized light.
- The magnetic dichroism in the Parratt formalism is implemented by changing the magnetization of the sample. Because of the limitations of Parratt a dichroism by changing the polarization of the light is not possible.

*Zak*

- For optical isotropic material with magnetic contributions
- very slow
- stable algorithm
- arbitrary polarization of incident light
- top layer must be vacuum for calculating reflectivity
- top and bottom layer must be vacuum for calcuting transmission
- magnetization can have any direction in the material
- The magnetic dichroism is implemented by changing the polarization of the light. A change of the magnetization is not possible. Due to symmetry of the XMCD effect this is not a limitation.

*Matrix*

- For optical anisotropic material which can contain every effect that can be modelled by a dielectric tensor (e. g. magnetism, crystal structure, orbitals)
- very slow
- algorithm can be numerically unstable
- arbitrary polarization of incident light
- top layer must be vacuum for calculating reflectivity
- top and bottom layer must be vacuum for calcuting transmission

### Simulation modes

The reflectivity is a function of <m>R(q_z, E)</m> with the wave vector <m>q_z = 2 k_0 sin(theta)</m>, angle of incidence <m>theta</m> and energy E. Several simulation modes are implemented to calculate the proper reflectivity.

##### Reflectivity

*monochromatic*

- Calculates the reflectivity <m>R(q_z)</m> for a given polarization and energy of the incoming light.
- The polarization is defined as “Ray 1” in the “Polarzation” tab.
- The energy is defined in the “Reflectivity Settings” tab.

*dichroic*

- Calculates the reflectivity <m>R(q_z)</m> for two given polarizations and one constant energy of the incoming light.
- The polarizations are defined as “Ray 1” and “Ray 2” in the polarzation tab.
- The energy is defined in the “Reflectivity Settings” tab.

*asymmetry*

- Calculates the asymmetry <m>A(q_z)</m> for two given polarizations and one constant energy of the incoming light. The asymmetry is defined as:

<m>A={R^{+} - R^{-}} / {R^{+} + R^{-}} </m>

- The polarizations are defined as “Ray 1” and “Ray 2” in the polarzation tab.
- The energy is defined in the “Reflectivity Settings” tab.

##### Energy Scan

*monochromatic*

*dichroic*

*asymmetry*

##### map

*monochromatic*

- Calculates the reflectivity <m>R(q_z, E)</m> of the sample for a given polarization and energy of the incoming light.
- The polarization is defined as “Ray 1” in the “Polarzation” tab.
- The energy is defined in the “Reflectivity Settings” tab.

### Options

There are several options to alter the behaviour of the algorithms

##### Option Algorithm

Here you can choose the algorithm for the simulation

*Parrat*: activates the parratt algorithm

*Full matrix formalism*: activates matrix algorithm

*Zak matrix formalism*: activates zak algorithm

##### Option Precision

The algorithm are implemented with different accuracies. For most systems the precision “double” is sufficient. In most cases the precision option is only useful for the full matrix formalism because it can be numerically unstable.

*float*: uses the accuracy of the 4-byte floating point numbers

*double*: uses the accuracy of the 8-byte floating point numbers

*long double*: uses the accuracy of the 10-byte floating point numbers

*60 digits*: uses a floating point numbers with an accuracy of 60 digits. (Very slow, but very accurate)

#### roughness calculation

The interface roughness makes your model real. ReMagX uses a model known as Nevot&Croce which defines the interface with a continuous change of the optical constants delta and beta.

*Nevot&Croce*: Use a very efficient model to simulation interface roughness.

*layer segmentation*: Enable layer segmentation (see chapter “Adaptive Layer Segmentation”)