DOCUMENTATION
ATOMISTIC PARALLEL SIMULATION OF A RANDOM ALLOY InGaN/GaN QW |
TUTORIALS |
In this example we will see how to perform parallel calculations to study electronic and optical properties of a InGaN/GaN Quantum Well (QW) structure with random alloy InGaN active region, using Empirical Tight Binding (ETB). With tibercad (linux version), it is now possible to run a simulation with a MPI parallel execution on a multicore machine with the command: tibercad -n number_mpi_proc input_file.tib where number_mpi_proc is the number of processes to run in parallel. tibercad -n 4 input_file.tib will parallelize the simulation on 4 cores of the local processor. When running in parallel with MPI, the default is to consider one single device and run solvers in parallel for this device. In Device section, we can set some options controlling parallelization inside the Parallel block: Parallel Here, mpi_processes_per_device sets the number of processes assigned to a given device instance. By default mpi_processes_per_device is set to the value of number_mpi_proc, that is a single device is parallelized on the chosen number of processes. If mpi_processes_per_device < number_mpi_proc, then more than one random alloy device is calculated (in serial or parallel). Thus, for example, on a 4-core machine, with: tibercad -n 4 file.tib 2 devices are calculated, each with parallelization on 2 cores. With tibercad -n 4 file.tib then 4 devices are calculated in parallel, one on each of 4 cores. Finally, by setting: mpi_processes_per_mesh = 1 we impose to execute FEM calculations in serial in any case. NB: In the current version it is not possible to perform a parallel simulation of a device where different portions of the mesh are assigned to different FEM Modules. In order to execute correctly this example you should have the following files in the same working directory: DEVICE STRUCTUREThe device structure is defined in the geometry .geo file and is the following:
In the Device section, the QW heterostructure is described: the InGaN quantum well region, the GaN barriers and buffer regions. The crystal directions are defined as following for a wurtzite crystal structure: y-growth-direction = (1,0,-1,0) The regions are defined in the usual way, then a cluster named quantum for k.p calculations and a cluster atomistic for ETB calculations are defined, in this way: # for k-dot-p ATOMISTIC STRUCTUREAn atomistic representation of the above defined atomistic cluster is generated by means of the Atomistic block Atomistic tb With random_alloy = true we set a random configuration of the InGaN alloy, instead of the default VCA approach. reference_region = qbarrierl The reference region is chosen to provide the lattice parameters with which the crystalline structure is built. In this case the lattice is that of GaN, the material composing the qbarrier. By default a 2D periodicity is applied in yz-plane orthogonal to the x growth direction of this 1D QW structure. In this case, however, we define a custom supercell, with a 20x20 Angstrom size. supercell_size_y = 20 Therefore, the appropriate periodicity vectors will be applied to this defined supercell, not to the default minimal cell. Passivation is finally performed at the ends of the heterostructure passivation = yes A print instruction gives in output the atomic structure for a visualization. Here we add also an optional seed for the random generator, in order to allow for repeatability and reload of results random_generator_seed = MPI_DEV_KEY # 1 In this way, if in the future one wants to repeat or extend calculations with the same random alloy configuration, one has just to set random_generator_seed to the value used in previous calculations, e.g. random_generator_seed = 1 The variable MPI_DEV_KEY is useful when more than one device is calculated in parallel. In this case, each device (that is its random alloy configuration) can be identified by the value of MPI_DEV_KEY (see RUN SIMULATION below). SIMULATION MODULESWe first perform elasticity calculations to obtain the strain tensor in the heterostructure and to apply a strain deformation to the defined atomistic structure. 1. ElasticityNote that it is always highly advisable to solve first elasticity, before a VFF relaxation. This will provide a reasonable first guess for the VFF solver and also will apply the correct deformation to the mesh, assuring that all the atoms are still associated to the correct FEM elements. We solve elasticity for the lattice-mismatch induced strain Module elasticity Note that, in order to apply a strain deformation to the defined atomistic structure, it is convenient to define a mesh deformation with the default number of shape_iterations. mesh_deformation = true In this way, strain will be computed iteratively until the convergence on the structure deformation is reached. 2. VFFNow, based on the displacements obtained from the elasticity solution and projected onto the atomistic structure, we proceed to its relaxation with a valence force field (VFF) approach. We thus solve VFF on the atomic structure: Module vff with the b.c. boundary_conditions = substrate that is, first layer of atoms on x-plane is fixed. 3. Drift-diffusionAs for drift-diffusion, as usual we define a simulation name = driftdiffusion belonging to the model driftdiffusion and associated to the whole device (deafult choice). In this example, we suppose to have performed previously a sweep to the bias point V=2.6. load_state = "dd_bias_"BIAS".tsv" 4. Empirical Tight-BindingFor the atomistic quantum calculations, we define an empirical_tb simulation, named tb: Module empirical_tb In the Module empirical_tb we define the associated regions, given by regions = atomistic ETB Hamiltonian will be created and solved based on the atomistic structure named tb which has been previously built in the Atomistic section and relaxed through the elasticity model and the valence force field one. atomistic_structure = tb Information about potential profile to be applied (due to built-in, polarization fields, etc.) is given by potential_simulation = dd In the Solver block, we define the number of eigenstates to be calculated in valence and conduction band: num_valence_eigenvalues = 8 Moreover, here we set to true the option to use dynamic_search, to improve the solver first guess: dynamic_search = true ETB calculations will be applied to a relaxed atomistic structure, where the atomic positions are displaced from the reference ones. Since we want the TB parameters to be scaled with respect to this displacement, according to Harrison law, we define Harrison_scaling = true In this way, the effect of strain relaxation in the heterostructure will be correctly talken into account in ETB calculations. 4. Optical properties with Empirical Tight-BindingFor the calculation of optical properties, we define a opticstb simulation: Module opticstb The optical matrix and the optical spontaneous emission spectrum are calculated based on ETB Hamiltonian. Simulation is performed with an integration in k-space, choosing the keyword optical_spectrum in the plot command: plot = (optical_spectrum, matrix_elements) k-space integration is defined by the block: k_integration RUN SIMULATIONSWe may now run tiberCAD to calculate and apply strain deformation first with a macroscopic elasticity model (strain) and then with a valence force field one (vff), we solve then driftdiffusion (dd) to get a bias point solution and ETB for calculation of eigenvalues of holes and electrons (tb). Finally, optical spectrum is obtained through opticstb. solve = (strain, vff, dd, tb, opticstb) Usually one may choose to perform a set of simulations of this kind, to get a statistical ensemble of random structures. In this example, since we have set, in Parallel block: mpi_processes_per_device = 1 by executing tibercad with the command: tibercad -n 4 file.tib 4 different devices are simulated in parallel, each one with a different random alloy choice. In this case the variable MPI_DEV_KEY is used as an identifier for a single device process group: resultpath = "output_tb_"MPI_DEV_KEY This means that in general the output will consist of several output directories (in this case 4), one for each "device" calculated. OUTPUTBy using jmol, (an open-source Java viewer for chemical structures in 3D, see http://jmol.sourceforge.net) we can load the atomic structure generated by tiberCAD Atomistic Generator, contained in the file tb.xyz (one in each output directory).
As for tight-binding simulation, the file tb.dat contains a table with the calculated eigenvalues for electrons and holes, together with their occupation index. Finally, opticstb.dat contains the calculated optical matrix elements and the file opticstb_spectrum.dat contains the spontaneous power densities Px, Py and Pz. ATTACHMENTS
|