Switches to the stacking fault submenu of DISCUS. At this sub menu you create a crystal containing stacking faults. Several types of layers can be stacked on top of each other. At present these layers are read from file. In future releases you will be able to call a macro that creates the layer. A layer could be a 2-dimensional layer of atoms or unit cells of any thickness or a 1-dimensional row of atoms or unit cells. The translation vectors from one layer type to the next can be defined and need not be exact values but can be Gaussian distributed. A correlation matrix defines the probabilities of layer sequences. These probabilities only include first neighbor interactions.
Alternatively to the stacking faults ruled by the correlations, you can include random stacking faults. These stascking faults choose at random the next layer type and the translation vector.
You can create the crystal following two alternate choices:
1) The origin of the current layer is the sum of the previous origin and the translation vector
2) The above origin is taken modulo the modulus vectors.
By using the first option, the crystal continuously grows in one direction as given by the translation vector(s). By using the second option the origins are restricted to a finite range around the average translation vector, which results in a zig-zag shaped crystal.
The menu includes a new approach to calculate the Fourier transform that saves considerable computational time.
Further help topics are
Valid commands at this level are
@ ! Execute a macro file (see main help) = ! assigns the value to a variable (see main help) aver ! Sets the intended average translation ccol ! Reads a single column of the correlation matrix cele ! Reads a single element of the correlation matrix crea ! Creates the list of microdomains crow ! Reads a single row of the correlation matrix echo ! echo a string (see main help) eval ! Evaluates an expression for interactive check (see main help) exit ! terminates 'stack' (see main help) four ! calculates the Fourier transform in quick mode help ! gives on line help for symmetry operations (see main help) layer ! Reads the name of a file that contains a layer modulus ! Reads the modulus vector of the translation number ! Reads the number of layers to be created random ! Sets values for random stacking faults rese ! Resets the number of layers to zero rotate ! Set values for rotational disorder of the layers run ! Decorates the list of origins with atoms to create the crystal set ! Sets parameters show ! Shows the current settings sigma ! Reads the sigmas for the translation vectors system ! Executes operating system command (see main help) trans ! Reads the translation vectors wait ! Waits for user input (see main help)
Sets the intended average translation. If the modulus is switched on ==> 'set modulus', and the mode of the translation ==> 'set trans' is set to "fixed", this vector is used.
Read a single column <nr> of the correlation matrix. Following the index <nr>, as many parameters as there are layer types must follow. The sum of any column need not be equal to one.
Reads the value <value> that is stored in element <i>,<j> of the correlation matrix.
Creates the list of layer origins. No changes are done to the actual structure, this is performed by the command ==> 'run'.
Read a single row <nr> of the correlation matrix. Following the index <nr>, as many parameters as there are layer types must follow. The sum of any row need not be equal to one, as long as the sum of all rows is identical.
A crystal with stacking faults can be created in the following step wise manner:
1. Create the distribution of layer origins. 2. Convolute each origin with the corresponding layer.
At this point, the convolution theorem saves a lot of computation time since the Fourier transform of a convolution is equal to the product of the individual Fourier transforms. The Fourier transform approach realised in the stacking fault menu operates by the following steps:
0. The current parameters of the ==> 'fourier' menu are used. 1. For each layer type calculate the Fourier transform of the list of origins. Calculate the Fourier transform of the actual atoms in the layer. Multiply the resulting complex amplitudes and store the results in temporary files. 2. Add the complex amplitudes from all layer types and store the result in internal memory.
The user can then write any desired output value using the ==>'output' sub menu. Note: In order to calculate the Fourier transform of each layer type the atoms in the corresponding file are read into the internal structure array. A previous structure is lost! If necessary save this structure to file by the ==> 'save' command. Note: DISCUS does not compare the space group or lattice constants in the different layer files. You must make sure that these are identical.
Defines a new layer type. The file <filename> must be a standard DISCUS input file that contains a list of atoms. No restrictions apply to the position and types of atoms in the layer. You have to create the layer beforehand using the tools of DISCUS.
Sets the two moduli vectors that are used to restrict the origins to a finite volume around the average translation vector. The plane defined by these two vectors need not to be normal to the average translation.
==> 'set mod' ==> 'set tran' ==> 'aver'
You can create the crystal following two alternate choices:
1) The origin of the current layer is the sum of the previous origin and the translation vector 2) The above origin is taken modulo the modulus vector.
By using the first option, the crystal continuously grows in one direction as given by the translation vector(s). By using the second option one or two coordinates can be constrained to a finite range, which results in a zig-zag shaped crystal. If any of the parameters is not equal to zero, the corresponding coordinate of the origin is taken modulo this parameter.
DISCUS does NOT check whether the moduli vectors are translation vectors of the current space group!
Reads the number of layers to be created.
This command sets values for the random stacking faults. The program selects the next layer type by weighted random choice. The weights are choosen according to the overall probabilities for each layer type. The next layer is then shifted by the corresponding translation vector between the resulting neighbors. In addition a random fraction of the two moduli vectors is added, which results in a random distribution of the next layer origin. random prob,<value> Sets the probability for random stacking faults. <value> must be between zero and one. Set the probability to zero to exclude random stacking faults. random offset,< u>,< v>,< w> If specified this vector is added to the translation vector. You can use this offset to force an increased layer separation for random faults compared to regular stacking faults. random sigma ,<su>,<sv>,<sw> Specifies the sigma's for a Gaussian distribution applied to the components of the offset.
Sets the number of layers and layer types back to zero.
This command sets values for rotational disorder of the stacking faults. The
layers are rotated around three axes, which are defined by the 'axis' command.
The angle of rotation is Gaussian distributed with mean value zero and sigma
defined by the 'sigma' command.
rotate axis, "normal",<u>,<v>,<w> [ "d" | "r" ]
rotate axis, "mod1", <u>,<v>,<w> [ "d" | "r" ]
rotate axis, "mod2", <u>,<v>,<w> [ "d" | "r" ]
The parameter "axis" defines the three axes around which you can rotate the layers. The axis can be given in real space coordinates "d" or reciprocal space coordinates "r". Default is real space. DISCUS does not make any assumptions about the three axes. The layer is rotated first around the "normal" axis, then around "mod1" and finally around "mod2". It is suggested to define "normal" as the axis perpendicular to the layers and "mod1" and "mod2" within the plane of the layers.
Attention!! If you tilt the layer around "mod1" or "mod2" the outer sections of the layer might overlap with the previous layer! rotate mode, [ "all" | "fault" ]
The rotational disorder can affect all layers individually, regardless whether
the previous layer was of the same type as the current layer or not.
Alternatively, a new rotation angle is computed only at a stacking fault, i.e.
if the current layer type is different than the previous layer type. All
following layers of identical type up to the next stacking fault are rotated by
the same angle.
rotate sigma, "normal",<snormal>
rotate sigma, "mod1", <smod1>
rotate sigma, "mod2", <smod2>
The rotation is Gaussian distributed with individual sigma for each axis. The mean value of the distribution is zero. Each new angle is calculated individually from a Gaussian distribution irrespective of the previous value. This forces the average layer orientations to remain constant throughout the crystal. A sigma of zero fixes the roations around the respective axis to zero. rotate status, [ "on" | "off" ]
The rotational disorder is only effective if its status is switched "on".
Decorates the origins with the corresponding atom distribution. Any previously existing structure is lost.
==> "four" ==> "discus four set aver"set "modulus" , { "off" | "on" } If the modulus is set "off", each origin is calculated by adding the corresponding translation vector to the previous origin. This way the crystal grows along the average translation vector. The resulting average translation vector is the sum of all translation vectors weighted by the corresponding probability as stored in the correlation matrix. If the modulus is set "on", each origin is calculated as above. The origin is then expressed as multiples of the two moduli vectors and the average translation. If any of the two multipliers corresponding to the two moduli vectors is larger than |1|, the moduli vector is subtracted from the origin. This has the effect that all origins are no further than the moduli vectors from the average translation. Even though all translation vectors might point in one direction, you can restrict the crystal to any arbitrary direction by defining the average vector ==> 'set trans', ==> 'aver'. set "trans" , { "calculate" | "fixed" } You have two choices to restrict the crystal growth once the modulus is set on. The average translation can be fixed to the value given by ==> 'aver' by setting the parameter of the 'set trans' command to "fixed". Alternatively the average translation is computed using the array of the translation vectors and the correlation matrix.
Shows the current settings.
Read the sigmas of the translation vector between layer type <i> and <j>. The current origin of any layer is calculated by adding the translation vector ==> 'trans' between layer types <i> and <j> to the previous origin. If any sigma is non-zero, a Gaussian distributed value with mean value of zero is added to the corresponding vector component.
Reads the components of the translation vector between layers <i> and <j>. The current origin of any layer is calculated by adding the translation vector between layer types <i> and <j> to the previous origin.