StrainDistributionNanowires.jl: Reproducibility repository for numerical simulations on core/shell zincblende and wurtzite nanowires
Authors/Creators
Description
Data repository that contains all scripts and data needed to reproduce the numerical results and figures from the manuscript:
Strain distribution in zincblende and wurtzite GaAs nanowires bent by a one-sided (In,Al)As stressor shell: consequences for torsion, chirality, and piezoelectricity
by Yiannis Hadjimichael, Oliver Brandt, Christian Merdon, Costanza Lucia Manganelli, and Patricio Farrel.
Overview
The simulations in this repository rely on the Julia package ElectroMechanicsFEM.jl, which solves the electromechanical equations (elasticity and piezoelectricity) using the finite volume method. The model incorporates a nonlinear strain formulation based on the first Piola–Kirchhoff stress tensor, coupled with an energy functional that effectively captures the lattice-mismatch-induced strain field. Applications of this system include zincblende and wurtzite nanowires, as well as bimetal beams with
a lattice-mismatched core and a one-sided stressor shell.
Directory Structure
The repository is organized into the following main folders:
- `data/`
Contains all files with simulated and analytical data for the nanowire's curvature and $\varepsilon_{zz}$ elastic axial strain. The numerical data are generated with ElectroMechanicsFEM.jl and the analytical expressions are created using Mathematica (version ≥ 14.3.0). These files are used to calculate the curvature and axial strain plots. This folder also includes additional strain data needed to reproduce the strain and polarization figures in the manuscript. These files can also be regenerated using the scripts provided in the `scripts/` folder. - `output/`
Contains figures generated by the files in the `postprocess/` folder. - `postprocess/`
Contains all scripts for postprocessing simulation results and generating the manuscript figures. Plotting requires MATLAB (version ≥ R2023a). Currently, plotting calls directly MATLAB or indirectly via bash files, as the postprocess functionality was designed to use SPHiNX to calculate the band structure and other optical properties. Later on, these routines will be replaced by Julia scripts. - `scripts/`
Contains the main simulation scripts to solve the electromechanical equations, including material and geometry parameters.
Usage
To reproduce the results from the paper, you will need a Julia installation (version ≥ 1.10.0).
1. Clone this repository.> git clone https://github.com/NUMSEMIC/StrainDistributionNanowires.jl> cd StrainDistributionNanowires.jl
2. Start Julia and instantiate the project dependencies (first time only; it takes a while and it will download all necessary dependencies and the pyplot backend).> julia --project=.julia> using Pkg; Pkg.instantiate()
3. Reproduce the manuscript's figures from the saved simulation files.
Each figure can be generated by running the corresponding script from the `postprocess/` folder. The final figures within the manuscript were edited using Inkscape.
To generate Figure 1 and Figure S4 run in a terminal> sh plot_strain.sh cs1_rotate=90_ZincBlende111_C15_Al0.5> sh plot_strain.sh cs1_rotate=90_Wurtzite0001_Al0.5> sh plot_strain.sh cs2_rotate=0_ZincBlende111_C15_Al0.5> sh plot_strain.sh cs2_rotate=0_Wurtzite0001_Al0.5
The above commands will produce three figures for each case (strain1.pdf, strain2.pdf, piezo.pdf)
that correspond to the strain and piezoelectric polarization components.
All figures are saved in the `output/` folder.
Similarly, to generate Figure S2 in the supplementary material run in a terminal> sh plot_strain.sh cs1_rotate=0_ZincBlende111_C15_Al0.5> sh plot_strain.sh cs1_rotate=0_Wurtzite0001_Al0.5> sh plot_strain.sh cs2_rotate=90_ZincBlende111_C15_Al0.5> sh plot_strain.sh cs2_rotate=90_Wurtzite0001_Al0.5
To generate Figure 4a run in Matlab>> curvature('cs1')
and to generate Figures 4b and 5, then run in Matlab>> curvature('cs2')
4. Run simulations
The following command generates a basic nanowire simulation:> julia --project=.julia> using TestEnv; TestEnv.activate()julia> include("scripts/nanowire.jl"); Nanowire.main()
All existing data in the `data/` folder can be reproduced by the main function in Nanowire.jl.
For instance, to generate the data for Figure 1a, runjulia> using TestEnv; TestEnv.activate()julia> include("scripts/nanowire.jl");julia> using PyPlotjulia> Nanowire.main(geometry=[30,20,10,2000],cross_section=1,rotate=90,mstruct=ZincBlende111_C15,stressor_x=0.5,Plotter=PyPlot,postprocess=true,force=true)
Abstract (English)
Files
StrainDistributionNanowires.zip
Files
(36.2 MB)
| Name | Size | Download all |
|---|---|---|
|
md5:286b33e8bd9e5982a8811d2fea2e9964
|
36.2 MB | Preview Download |
Additional details
Funding
- Leibniz Association
- NUMSEMIC J89/2019
- Deutsche Forschungsgemeinschaft
- Variational Methods for Predicting Complex Phenomena in Engineering Structures and Materials 441470105
Software
- Repository URL
- https://github.com/NUMSEMIC/StrainDistributionNanowires.jl
- Programming language
- Julia , MATLAB
- Development Status
- Active