====== Units ====== Maxwell's equations are scale-invariant. However the program is intended to run in the microscopic scale. To be consistent use for: ^coordinates, lengths | Angstrom (1e-10 m) | ^energy | eV (Electronvolt) | ====== Command list ====== ==== Incidence light ==== ''quad.light.SetthetaPhi(number, number)'' 1. argument: angle theta in degrees 2. argument: angle phi in degrees return value: none Desc: Set the incoming light direction in spherical coordinates. The angle theta must be between 90° and 180°! Otherwise, the light doesn't hit the sample from the top. ''quad.light.SetEnergy(number)'' 1. argument: energy in ev return value: none Desc: Energy of incoming light in eV ''quad.light.SetPolarization (string)'' 1. argument: "S" : Sigma polarization (perpendicular to the scattering plane) "P" : Pi polarization (parallel to the scattering plane) "L" : Left circular polarization "R" : Right circular polarization Desc: Defines the polarization of the incoming light dependent in relation to the HK=0,0 scattering plane. ''quad.light.SetPolarization (string, number)'' 1. argument: "S" : Sigma polarization (perpendicular to the scattering plane) "P" : Pi polarization (parallel to the scattering plane) "L" : Left circular polarization "R" : Right circular polarization 2. argument: Defines index of outgoing beam to define the scattering plane Desc: Defines the polarization of the incoming light dependent on the defined scattering plane. ''quad.light.GetKVector()'' return value: Vec3 Desc: Returns the current wavevector of the incoming light ''quad.light.Setfilter(string)'' 1. argument: "N" : none polarization filter (default) "S" : Sigma polarization filter (perpendicular to the scattering plane) "P" : Pi polarization filter (parallel to the scattering plane) "L" : Left circular polarization filter "R" : Right circular polarization filter Desc: Defines the polarization filter of the outgoing light. ==== Main Functions ==== ''quad.Scatter()'' return value: nothing Desc: Calculates the scattering matrices for the whole layer structure. It depends on almost all parameters given earlier and executes the main routine. ==== Atom creation ==== ''quad.atom.NewScatteringFactorAtom(number, number)'' 1. argument: real part of scattering factor (f1) 2. argument: imaginary part of scattering factor (f2) return value: atom type Desc: Generates a energy-independent atom type ''quad.atom.NewAtom(string)'' 1. argument: short element name like "Ti" for Titanium return value: atom type Desc: tries to find name.ff in order to load the scattering factor files or uses the internal database. ''quad.atom.NewAtom(string, q)'' 1. argument: short element name like "Ti" for Titanium 2. argument: defines the scattering for a certain momentum transfer q [Unit: A^-1] return value: atom type Desc: tries to find name.ff in order to load the scattering factor files or uses the internal database. ''quad.atom.NewMagneticAtom(number, number, number, number, number, number)'' 1. argument: real part of scattering factor (f1) 2. argument: imagninary part of scattering factor (f2) 3. argument: real part of magnetic scattering factor (f1m) 4. argument: imagninary part of magnetic scattering factor (f2m) 5. argument: direction of magnetiztion (theta angle in degrees) 6. argument: direction of magnetization (phi angle in degrees) return value: atom type Desc: Generates a energy-independent atom type with magnetic contributions ''quad.atom.NewScatteringFactorFileAtom(string)'' 1. argument: filename of tabulated scattering factors return value: atom type Desc: Generates a energy-dependent atom type ''quad.atom.NewScatteringTensorFileAtom(string)'' 1. argument: filename of tabulated scattering tensors return value: atom type Desc: Generates a energy-dependent atom type ==== Reciprocal lattice ==== ''quad.rl.Set(vec2, vec2, Decimal number)'' 1. Argument: First unit cell vector in-plane 2. Argument: Second unit cell vector in-plane 3. Argument: unit cell length in z-direction. This argument is necessary to define the l-value in the function SetThetaHKL Desc: Sets the lattice parameters in 2D. Adds the mandatory reciprocal lattice vector (H,K)=(0,0) return value: nothing ''quad.rl.b1()'' ''quad.rl.b2()'' ''quad.rl.b3()'' return value: Vec3 Desc: Returns the three reciprocal lattice vectors. ''quad.rl.GetN()'' return value: integer Desc: return the number of reciprocal lattice vectors calculated. ''quad.rl.AddReciprocalLatticeVector(number, number)'' 1. Argument: Miller indice H of the reciprocal lattice vector 2. Argument: Miller indice K of the reciprocal lattice vector return value: nothing Desc: Adds a reciprocal lattice vector HK to the list of vector, which have to be calculated ''quad.rl.SetRadius(number)'' 1. Argument: Radius in the reciprocal lattice space return value: nothing Desc: Renews the list of reciprocal lattice vectors with a list of all reciprocal lattice vector withing the radius ==== Slab Settings ==== ''quad.slabs.AddSlabs(number, number)'' 1. Argument: number of slabs to create 2. Argument: thickness of each slab return value: nothing ''quad.slabs.AddAtom(number, atom type, Vec3)'' 1. Argument: add to the slab with index i 2. Argument: the variable with the atom type 3. Argument: Position of the atom inside the slab return value: nothing ''quad.slabs.SetStructure(string)'' Desc: Describes the final film structure. These are basically comma seperated slab indices or variables defined in slabs.DefineCrystal Additionally it allows to place brackets and repetitions Examples: "0,1" "100*(0,1)" "100*(1,2), 0" "100*(0,1), 100000*(2)" "100*( 2*(0,1), 2*(3,4) )" "Crys1, Crys2" (if "Crys1" and "Crys2" were defined with slabs.CreateCrystal or the other functions) return value: nothing ''quad.slabs.CreateCrystal(string, string)'' 1. argument: Variable name of this structure. Allowed signs: 'a'-'z', 'A'-'Z', '_', and '0'-'9' if it is not the first sign 2. argument: Crystal definition like in the function slabs.SetStructure return value: nothing Desc: Defines a seperate crystal which can be used in the function slabs.SetStructure ''quad.slabs.CreateHom(string, string)'' 1. argument: Variable name of this structure. Allowed signs: 'a'-'z', 'A'-'Z', '_', and '0'-'9' if it is not the first sign 2. argument: Crystal definition like in the function slabs.SetStructure return value: nothing Desc: Defines a slab of an unordered crystal. The crystal is reduced to a continuum with the correct optical constants ''quad.slabs.CreateInterface(string, string, string, number, number)'' 1. argument: Variable name of this structure. Allowed signs: 'a'-'z', 'A'-'Z', '_', and '0'-'9' if it is not the first sign 2. argument: Crystal definition of the top crystal like in the function slabs.SetStructure 3. argument: Crystal definition of the bottom crystal like in the function slabs.SetStructure 4. argument: Total thickness of this interface with unordered crystal. The interface will be in the center of this slab. 5. argument: Discretization of this interface. (around 3*thickness/sigma) 6. argument: Roughness sigma in Angstrom return value: nothing Desc: Defines a slab with two unordered crystal and a rough interface. ==== General Functions ==== ''quad.PrintStatus()'' return value: nothing ''quad.GetReflectedIntensity(number)'' return value: Decimal Number ''quad.GetTransmittedIntensity(number)'' return value: Decimal Number ''quad.GetReflectedKVector(number)'' return value: Vec3 ''quad.GetTransmittedKVector(number)'' return value: Vec3 ''quad.SetThetaHKL(integer h, integer k, Decimal number l)'' return value: integer (-1 if error) Desc: Calculates the angle theta for a fixed phi angle and given hkl triple. Variable l can be non-integer. Returns the index of the reciprocal lattice vector. a negative number of l means transmission whereas a positive number means reflection. The calculated angle theta is automatically set in the variable light.theta ''quad.SetMultipleScattering(type)'' return value: nothing valid values: MS.KINEMATIC: Kinematical scattering (independent scatterers and independent light) MS.NONE: No multiple scattering is calculated (enable light absorbtion and refraction) MS.LAYER: Interlayer multiple scattering is enabled MS.INTERATOMIC: Interlayer as well as interatomic multiple scattering is enabled (not supported yet) ''quad.SetNumericAccuracy(type)'' (not supported yet) valid values: NUM.FLOAT: The decimals numbers are defined as 4 byte floating point numbers NUM.DOUBLE: The decimals numbers are defined as 8 byte floating point numbers NUM.LONGDOUBLE: The decimals numbers are defined as 10 byte floating point numbers. (Architecture dependent) NUM.QUAD: The decimals numbers are defined as 16 byte floating point numbers ''quad.SetMatrixAccuracy(type)'' valid values: M.DIAGONAL: Neglect off-diagonal terms of the matrices. Very fast but leads to separate scattering channels. M.FULL: Use Full Matrix-Matrix-Multiplications M.BLAS: Like M.FULL but use of BLAS-libraries to increase performance of matrix-matrix-multiplication (not working yet) ==== Queue functions for Parallelization ==== ''quad.queue.Add()'' Desc: Add current light configuration to queue ''quad.queue.Run()'' Desc: Execute the current queue parallelized ''quad.queue.Activate(integer)'' Variable1: Index in the queue beginning from zero Desc: Activates a result of the queue. ''quad.queue.GetN()'' return value: Number of entries in the queue ''quad.queue.Clear()'' Desc: Clears the queue (Bug: Memory is not freed) ==== Fitting functions ==== ''quad.fit.AddVariable(number, number, number, number)'' 1. argument: initial value for number 2. argument: stepsize of 1.arguement in first iteration . If unsure choose 0.1*initial_value. The value must not be zero! 3. argument: lower boundary for variable 4. argument: upper boundary for variable ''quad.fit.SetErrorFunction(function)'' 1. argument: Lua function which should return an error Desc: The function receives a list of parameters (array of numbers), and should return an error (number) ''quad.fit.Iterate(number)'' 1. argument: Number of simplex iterations to perform