This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
qcl:advanced_settings [2017/11/06 10:18] thomas.grange |
qcl:advanced_settings [2022/03/30 16:36] (current) thomas.grange [Definition of graded alloy and graded interfaces] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ===== Advanced settings ===== | + | ====== Advanced settings ====== |
==== Parallelization ==== | ==== Parallelization ==== | ||
+ | |||
+ | === Number of threads === | ||
+ | |||
+ | |||
The number of threads can be controlled using the command <Maximum_Number_of_Threads> | The number of threads can be controlled using the command <Maximum_Number_of_Threads> | ||
<code> | <code> | ||
Line 11: | Line 15: | ||
</code> | </code> | ||
+ | For an automatic setting, use 0 or do not specify this command. In this case, the number of threads will be set to half of the number of physical cores. | ||
- | === Parallization in case of combined Temperature-Voltage sweep === | + | In any case, we recommended that <Maximum_Number_of_Threads> does not exceed the number of **physical** cores (note that when hyperthreading is activated, the number of physical cores is half the one on logical processsors). |
+ | |||
+ | === Parallelization in case of combined Temperature-Voltage sweep === | ||
In the case where a combined Temperature-Voltage sweep is used, there are two levels of parallelization. The first is at the level of the command <Threads> in the <SweepParameters> section. | In the case where a combined Temperature-Voltage sweep is used, there are two levels of parallelization. The first is at the level of the command <Threads> in the <SweepParameters> section. | ||
Line 19: | Line 26: | ||
<SweepType>Temperature-Voltage</SweepType> | <SweepType>Temperature-Voltage</SweepType> | ||
... | ... | ||
- | <Threads>12</Threads> <!-- Parallelization for Temperature-Voltage sweep --> | + | <Threads>6</Threads> <!-- Parallelization for Temperature-Voltage sweep --> |
</SweepParameters> | </SweepParameters> | ||
</code> | </code> | ||
- | The second level of parallelization occurs | + | The second level of parallelization occurs in the <Simulation_Parameter> section: |
+ | <code> | ||
+ | <Simulation_Parameter> | ||
+ | ... | ||
+ | <Maximum_Number_of_Threads>2</Maximum_Number_of_Threads> | ||
+ | ... | ||
+ | </Simulation_Parameter> | ||
+ | </code> | ||
+ | |||
+ | In this example, the total number of threads will be <Threads>* <Maximum_Number_of_Threads> = 6*2 = 12. | ||
+ | |||
+ | |||
+ | ==== Definition of graded alloy and graded interfaces ==== | ||
+ | |||
+ | There are two possibilities to define graded alloy profile. | ||
+ | |||
+ | === Linearly graded alloys === | ||
+ | To define a linear graded alloy profile, two materials first need to be defined in the ''<Material>'' section | ||
+ | For example, | ||
+ | <code> | ||
+ | <Material> | ||
+ | <Name>GaAs</Name> <!-- Binary material --> | ||
+ | <Alias>mat1</Alias> | ||
+ | <Effective_mass_from_kp_parameters>yes</Effective_mass_from_kp_parameters> | ||
+ | </Material> | ||
+ | |||
+ | <Material> | ||
+ | <Name>Al(x)Ga(1-x)As</Name> <!-- Ternary material --> | ||
+ | <Alloy_Composition>0.15</Alloy_Composition> <!-- alloy composition x --> | ||
+ | <Alias>mat2</Alias> | ||
+ | <Effective_mass_from_kp_parameters>yes</Effective_mass_from_kp_parameters> | ||
+ | </Material> | ||
+ | </code> | ||
+ | |||
+ | Then, in the layer definition (named ''<Superlattice>''), the following can be used to define a layer with a linear alloy profile, with composition starting from the material "mat1" and ending with the material "mat2" composition. | ||
+ | <code> | ||
+ | <Layer> <!-- all the material parameters will be linearily interpolated between <Material1> and <Material2> --> | ||
+ | <Material1>mat1</Material1> | ||
+ | <Material2>mat2</Material2> | ||
+ | <Thickness unit="nm">5.0</Thickness> | ||
+ | </Layer> | ||
+ | </code> | ||
+ | |||
+ | |||
+ | === Graded interfaces === | ||
+ | |||
+ | To specify a grading for all the interfaces of the structure, the following command ''<InterfaceWidth>'' has to be included in the ''<Interface_Roughness>'' section. | ||
+ | <code> | ||
+ | <Interface_Roughness> | ||
+ | <InterfaceWidth unit="nm">0.8</InterfaceWidth> | ||
+ | ... | ||
+ | </Interface_Roughness> | ||
+ | </code> | ||
+ | In this case, the alloy profile of the all strucure is convoluted by a Gaussian. For a well defined interface, this results in an error function profile of the form: | ||
+ | $$ | ||
+ | c(z) = c_0 + d_0 \text{erf} \left[2 | ||
+ | \sqrt{ln(2)}(z − z_0)/L \right] | ||
+ | $$ | ||
+ | where $L$ is the quantity specified in ''<InterfaceWidth>''. | ||
+ | |||
+ | ==== Scattering processes ==== | ||
+ | === Contributions of individual scattering processes === | ||
+ | The following command allow to display self-energies and spectral functions for some specific mechanisms, like e.g. scattering due to optical phonons: | ||
+ | <code> | ||
+ | <Scattering> | ||
+ | ... | ||
+ | <Separate_Scattering>yes</Separate_Scattering> | ||
+ | ... | ||
+ | </Scattering> | ||
+ | </code> | ||
+ | This command is only for analysis purpose, and has no influence on the other calculated quantities. It only involves an additionnal calculation of self-energies and Green's functions. | ||
+ | In each basis folder, a folder with the name of the scattering process will appear, containing the retarded self-energy and the spectral function arising only from the specific scattering mechanism. Hence this spectral function gives the contribution to broadening of an individual scattering process. | ||
+ | |||
+ | === Homogeneous Coulomb scattering === | ||
+ | To speed up the calculation, it is possible to consider the assumption of homogeneously distributed Coulomb scatterers (ionized impurities and other charge carriers) using the following command: | ||
+ | <code> | ||
+ | <Scattering> | ||
+ | ... | ||
+ | <Homogeneous_Coulomb>yes</Homogeneous_Coulomb> | ||
+ | ... | ||
+ | </Scattering> | ||
+ | </code> | ||
+ | |||
+ | |||
+ | /*==== Asymetric interface roughness ==== | ||
+ | It is possible to specify asymetric interface roughness using the following command (note: this feature is currently not working due to syntax changes). | ||
+ | <code> | ||
+ | <Interface_Roughness> | ||
+ | |||
+ | <InterfaceAutoCorrelationType> 0 </InterfaceAutoCorrelationType> | ||
+ | <Correlation_Length_in_XY unit="nm"> 8 </Correlation_Length_in_XY> | ||
+ | |||
+ | <Asymmetric_Interfaces> yes </Asymmetric_Interfaces> | ||
+ | <Amplitude_in_Z_Left> 0.1 </Amplitude_in_Z_Left> | ||
+ | <Amplitude_in_Z_Right> 0.2 </Amplitude_in_Z_Right> | ||
+ | |||
+ | </Interface_Roughness> | ||
+ | </code>*/ | ||
+ | |||
+ | ==== Output format for 2D plots ==== | ||
+ | By default, 2D plots are output in a [[http://www.vtk.org|VTK format]] (.vtr extension). | ||
+ | [[http://www.gnuplot.info/|Gnuplot]] files (.plt extension) are also generated (in a file explorer, double click on the file to generate the gnuplot figure). | ||
+ | |||
+ | In addition, to output 2D plots in a [[http://www.avs.com|AVS/Express format]] (.fld extension), the following command "<FLD_format>" can be added in the <Output> section of the input file. | ||
+ | |||
+ | The following commands can be used to control the output formats: | ||
+ | |||
+ | <code> | ||
+ | <Output> | ||
+ | ... | ||
+ | <VTK_format>yes</VTK_format> | ||
+ | <FLD_format>yes</FLD_format> | ||
+ | <Gnuplot_format>yes</Gnuplot_format> | ||
+ | ... | ||
+ | </Output> | ||
+ | </code> | ||
+ | |||
+ | |||
+ | |||
+ | ==== Scaling 1D wavefunctions ==== | ||
+ | In order to scale the output of the square of the wavefunctions (1D plots), the following command can be used: | ||
+ | <code> | ||
+ | <Output> | ||
+ | ... | ||
+ | <ScaleWaveFunction>0.1</ScaleWaveFunction> | ||
+ | ... | ||
+ | </Output> | ||
+ | </code> | ||
+ |