Published January 26, 2026 | Version v1
Software Open

StrainDistributionNanowires.jl: Reproducibility repository for numerical simulations on core/shell zincblende and wurtzite nanowires

  • 1. ROR icon Weierstrass Institute for Applied Analysis and Stochastics
  • 2. ROR icon Paul Drude Institute for Solid State Electronics
  • 3. ROR icon Innovations for High Performance Microelectronics

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, run
julia> using TestEnv; TestEnv.activate()
julia> include("scripts/nanowire.jl");
julia> using PyPlot
julia> 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)

Strain distribution in zincblende and wurtzite GaAs nanowires bent by a one-sided (In,Al)As stressor shell: consequences for torsion, chirality, and piezoelectricity
 
We present a finite-strain model that is capable of describing the large deformations in bent nanowire heterostructures. The model incorporates a nonlinear strain formulation derived from the first Piola--Kirchhoff stress tensor, coupled with an energy functional that effectively captures the lattice-mismatch-induced strain field. We use the finite element method (FEM) to solve the resulting partial differential equations and extract cross-sectional maps of the full strain tensor for both zincblende and wurtzite nanowires with lattice-mismatched core and one-sided stressor shell. In either case, we show that the bending is essentially exclusively determined by $\varepsilon_{zz}$. However, the distinct difference in shear strain has important consequences with regard to both the
mechanical deformation and the existence of transverse piezoelectric fields in the nanowires.

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