User Tools

Site Tools


GaAs Solar Cell

Author: Takuma Sato, nextnano GmbH

Here we demonstrate that solar cells can be simulated using nextnano. The self-consistent solutions to the Poisson equation coupled with current (drift-diffusion) equation give the figure of merit of solar cells that consists of arbitrary materials. Current-Voltage (I-V) curves and corresponding power and solar cell efficiency as a function of bias voltage are exported to the output folder.

Note: this tutorial illustrates nextnano³ results. Consistent results can be obtained with nextnano++ as well, with the exception of

  1. internal calculation of the generation rate and
  2. solar cell efficiency.

Input files


Here the numerics parameters are optimized for convergence of the calculation in the bias range of interest. Please pay attention to the convergence of the calculation when you change device geometry etc. For the simulation of, the following data must be present and read in by nextnano³:

  • AbsorptionCoefficient_GaAs_300K.dat (material data)
  • Reflectivity_Al0.80Ga0.20As.dat (material data)
  • ASTMG173_AM15G.dat (solar spectral irradiance data)

For the simulation of, the following output file of nextnano³ must be read in, as nextnano++ cannot internally calculate generation rates.

  • \optics\GenerationRateLight_vs_Position_sun1.dat


  • J. Nelson, The Physics of Solar Cells (Imperial College Press, 2003)
  • S.M. Sze and Kwok K. Ng, Physics of Semiconductor Devices (Wiley, 2007)


Figure 1 shows the bandedges and quasi Fermi levels of the device. The device structure is as follows:

  • 0-30nm $\mathrm{Al_{0.8}Ga_{0.2}As}$ Window layer
  • 30-530nm p-doped $\mathrm{GaAs}$
  • 530-3530nm n-doped $\mathrm{GaAs}$
  • 3530-3630nm n-doped $\mathrm{GaAs}$ back surface field layer

Strain is not calculated in this example.

Figure 1: Bandedges and quasi-Fermi levels of the solar cell at zero bias [band_structure\BandEdges (nextnano³) / bias_000_000\bandedges(nextnano++)]

The left side of the device (x=0nm) is illuminated by the sun. As shown in Figure 6, mobile electrons and holes are created mainly in the p-layer. Electrons then flow to the right because of the AlGaAs ternary barrier (0-30nm), and holes to the left. The back of the cell (3530-3630nm) is doped with 10 times larger concentration, so that it prevents the minority carrier (hole) from leaking to the right contact. Since the current from p-layer to n-layer is defined to be positive, the photo-induced current has negative sign.

Simulation procedure

The workflow of the simulation is summarized in Figure 2. To obtain the figures shown in this tutorial,

  1. Prepare three data files, namely (1) spectral irradiance (solar spectrum), (2) reflectivity at the front surface and (3) absorption coefficient. Specify in the input file appropriate paths to these files.
  2. Run the nextnano³ software, and all of your nextnano³ results are in your output folder! Generation rate $G(E,x)$ is internally calculated before the current-Poisson iteration starts. The efficiency–voltage curve is generated as a final result.
  3. If you already have generation rate profile as a .dat file, you can either import it into nextnano³ or in nextnano++.
Figure 2: Workflow of solar cell simulation. Each quantity is explained in the following section.

How does a solar cell work? & How do we simulate it?

1. Solar spectrum

The sun emits light with a range of wavelengths ranging from the ultraviolet, visible to infrared region. The extraterrestrial solar spectrum resembles the spectrum of a black body at $T_{\text{sun}}=5760~\text{K}$ [Nelson Chapter 2]: $$ \frac{2\pi\sin^2\theta_\mathrm{sun}}{h^3c^2}\frac{E^2}{e^{E/k_{\text{B}}T_\mathrm{sun}}-1}, $$ where $E$ is the photon energy and $\theta_\mathrm{sun}=1.44\times 10^{-3}\pi$[rad] when measured from the earth. The solar light travels from the sun to the earth, and then from the outer space to our solar cell devices, during which the spectrum attenuates and changes its shape. The standard solar spectrum assumed in solar cell analysis is called AM1.5G (AM = air mass), which takes into account the attenuation of the intensity and illumination from all angles (rather than direct from the sun) due to scattering in the atmosphere. The spectral photon flux, i.e. the spectrum of the number of incident photons per area per time, is denoted by $\phi(E)~[\mathrm{m^{-2}s^{-1}eV^{-1}}]$. The spectral irradiance, namely the spectrum of the amount of energy supplied per area per time, is given by $L(E)=E\phi(E)$ with the unit of [$\mathrm{Wm^{-2}eV^{-1}}$]. We have taken the AM1.5G spectral irradiance data from this website (Figure 3). If you have space applications in mind, please use the extraterrestrial spectrum, namely air mass zero (AM0). The photon flux is written in the nextnano³ output file optics\PhotonFlux_eV.dat. This file contains two columns. The external photon flux density considers the photons hitting the device. The internal photon flux density is lower because the photons that are reflected or transmitted are not included in this quantity as they will not contribute to the generation rate.

Figure 3: The AM1.5G spectral irradiance $L(E)$, that is, the solar spectrum measured on the earth. nextnano³ reads in the data file ASTMG173_AM15G.dat and stores it in the output file optics\SolarSpectralIrradiance_eV.dat.

The power of incident light $$ P_\mathrm{sun} =\int_0^\infty L(E) \text{d}E=1000~\mathrm{Wm^{-2}}, $$ which is plotted in current\solar_cell_properties.dat as a reference, is solely determined by the condition of the sun and the atmosphere of the earth (for AM0 $P_{\text{sun}}=1353~\text{Wm}^{-2}$). The ultimate challenge of solar cell research is to achieve the most efficient conversion of this energy input into electric power $P_\mathrm{out}~[\mathrm{Wm^{-2}}]$. The figure of merit is therefore defined as $\eta=\frac{P_\mathrm{out}}{P_\mathrm{sun}}$.

2. Generation rate (internal calculation)

(If you already have available data for generation rate, you can skip this section.)

When the sun light illuminates the device, some of the photons are reflected at the front surface (air-semiconductor interface) and the rest enters the device. This effect is taken into account by considering the reflectivity of Al0.8Ga0.2As. Through the absorption of one photon, a pair of mobile electron and hole is created, while the photon flux attenuates exponentially with respect to the penetration depth. The generation rate thus depends not only on the incident photon flux $\phi(E)$ but also on the absorption coefficient $\alpha(E)$ of the material and the reflectivity $R(E)$ at the surface (Figure 2): $$ G(E,x)=N\phi(E)\cdot(1-R(E))\cdot\alpha(E)e^{-α(E)x}, $$ where the parameter number-of-suns $N$ is multiplied to the photon flux $\phi(E)$ to take into account the concentration of sunlight. In the input file, $\alpha(\lambda), R(\lambda), L(\lambda)$ and $N$ are imported as specified in keyword $optical-absorption. These spectra are translated into $\alpha(E), R(E), N\phi(E)$ and substituted into the generation rate formula.

! nextnano3
 import-absorption-spectrum    = yes
 file-absorption-spectrum      = "(directory)\AbsorptionCoefficient_GaAs_300K.dat"

 import-reflectivity-spectrum  = yes
 file-reflectivity-spectrum    = "(directory)\Reflectivity_Al0.80Ga0.20As.dat"

 import-solar-spectrum         = yes
 file-solar-spectrum           = "(directory)\ASTMG173_AM15G.dat" ! G = global, i.e. including diffuse light

!number-of-suns                = 0.0   ! switch off sun if generation rate is imported
 number-of-suns                = 1.0
!number-of-suns                = 100.0 ! optical concentration

If no reflectivity data is specified, perfect interface (zero reflection) is assumed. Here we have manually generated Reflectivity_Al0.80Ga0.20As.dat for the reflectivity of Al0.8Ga0.2As using the Fresnel formula for perpendicular incident light $$ R(\lambda)=|r(\lambda)|^2=\left|\frac{1-[n(\lambda)+i\kappa(\lambda)]}{1+[n(\lambda)+i\kappa(\lambda)]} \right|^2, $$ where the refractive index $n$ and extinction coefficient $\kappa$ of GaAs and AlAs are taken from here. To obtain the values of ternary Al0.8Ga0.2As, we performed linear interpolation. If you consider a textured surface to reduce surface light reflection, please prepare the corresponding reflectivity data and import to the nextnano simulation. $\alpha(E), R(E)$ and $NL(E)$ are stored in the output folder \optics with file names AbsorptionCoefficient.dat, Reflectivity.dat and SolarSpectralIrradiance.dat, respectively.

The resulting generation rate is shown in Figure 4, 5 and 6.

Figure 4: Generation rate as a function of position and energy optics\GenerationRateLight_vs_Position_and_Energy_2Dplot_sun1.dat in units of $10^{18}{\mathrm{cm}}^{-3}{\mathrm{eV}}^{-1}{\mathrm{s}}^{-1}$. This quantity is internally calculated using the absorption coefficient, reflectivity of the front surface and solar spectrum AM1.5G (Figure 3). Photons at around 3V are largely absorbed near the front surface due to a large absorption coefficient, which can be seen in the output optics\AbsorptionCoefficient_eV.dat (not shown). Photons with lower energy, in contrast, travel a longer distance in the device.
Figure 5: Generation rate as a function of energy optics\GenerationRateLight_vs_Energy_sun1.dat (red). nextnano³ obtains this data by integrating Figure 4 with respect to position $x$. Also shown is the result for zero reflection at the front surface (blue curve), where we have set
! nextnano3
 import-reflectivity-spectrum  = no

Obviously, the generation rate becomes larger when the reflection at the front surface is neglected. One can also clearly see, by comparing with Figure 3, that the low energy photons below the bandgap cannot contribute to the carrier generation. For this reason the bandgap of semiconductors affects the solar cell efficiency and is discussed in the context of the Shockley-Queisser efficiency limit.

Figure 6: Generation rate as a function of position optics\GenerationRateLight_vs_Position_sun1.dat. nextnano³ obtains this data by integrating Figure 4 over energy $E$. When the photon flux travels through the device, the intensity diminishes exponentially, leading to the exponential decrease in generation rate. Most of the carrier generation occurs within 500 nm from the front surface, i.e. within the p-layer (30–530 nm). nextnano++ imports this data and stores it in Structure\generation_fixed.dat.

3. Generation rate (import)

If the generation rate data $G(x)=\int G(E,x)\text{d}E$ (Figure 6) is available from literature or publications, you can import the .dat file without worrying about the above mentioned calculation. The data must contain position [$\mathrm{nm}$] in the first column and generation rate [$10^{18}\mathrm{cm^{-3}s^{-1}}$] in the second. In the sample file (nextnano³) and (nextnano++), we import the data generated from

! nextnano3
 source-directory    = "(directory path)"
 import-generation   = yes
 filename-generation = "GenerationRateLight_vs_Position_sun1.dat"

 number-of-suns      = 0.0 ! switch off sun if generation rate is imported

Please switch off the sun so that the internally calculated generation rate is zero.

# nextnano++
      import{ import_from = "GenImportProfile" }

    name     = "GenImportProfile"
    filename = "(directory path)\GenerationRateLight_vs_Position_sun1.dat"
    format   = DAT
    scale    = 1e18  # import data is multiplied by this scaling factor (optional, default value is 1.0)

4. Current-Voltage characteristics

The calculated or imported generation rate contributes to the right-hand side of the coupled current equations for electrons and holes, $$ -e\frac{\partial n}{\partial t}+\nabla\cdot\mathbf{j}_n = -e(G-R),\\ e\frac{\partial p}{\partial t}+\nabla\cdot\mathbf{j}_p = e(G-R), $$ where $G$ and $R$ are the (position-dependent) generation and recombination rates for electron-hole pairs. Here the charge current density $\mathbf{j}_{n,p}$ has a dimension of (charge)(area)-1 and the generation rate has (volume)-1(time)-1. The recombination rate is the sum of three different processes $R=R_\mathrm{rad}+R_\mathrm{Auger}+R_\mathrm{SRH}$. See our Laser diode tutorial, [Nelson] or other literature for details. By solving this current equation and the Poisson equation self-consistently, the program obtains the current density at each bias step. The resulting I-V curve is shown in Figure 7 and 8. For comparison, the dark current has been simulated by setting

! nextnano3
 import-solar-spectrum   = yes
 number-of-suns          = 0.0
# nextnano++
      constant{ rate = 0.0 }

The dark current in the present device behaves like in a diode under forward bias. When the sun illuminates the device, electrons and holes are created and current flows in the reverse direction.

If you change the device geometry or materials and the I-V curve is no longer reasonable, it is likely that the numerical calculation did not converge. Please check the .log file. For the convergence of the current-Poisson equation, you might need to change the settings under $numeric-control (nextnano³) or run{} (nextnano++) keywords. If you need help, feel free to contact us at

Figure 7: I-V characteristics of the solar cell current\IV_characteristics_new.dat (nextnano³). In the bias regime 0-1 V the system works as a solar cell.
Figure 8: I-V characteristics of the solar cell IV_characteristics.dat (nextnano++). In the bias regime 0-1 V the system works as a solar cell.

5. Solar efficiency

From the I-V curve nextnano³ calculates the solar cell power density $P_\mathrm{out}=-IV$ and the efficiency $\eta=\frac{P_\mathrm{out}}{P_\mathrm{sun}}$. For the present device under 1 sun, the maximum efficiency of 17.0% is achieved at the bias 0.9 V (Figure 9, red). The theoretical limit for GaAs (bandgap 1.42 eV at $T=300~K$) is around 30% under the AM1.5 condition without concentration [Sze].

Figure 9: Solar cell efficiency $\eta$ for no sunlight concentration (red) and 100-sun concentration (blue). The data is contained in current\solar_cell_efficiency.dat (nextnano³) or has to be computed from Figure 7 (nextnano++).

The maximum efficiency of the present device increases to 22.3% for 100-sun concentration according to nextnano³ simulation, mainly due to the increase in open circuit voltage (Figure 9, blue). This means one cell operating under 100 suns can produce the same power output as 100 Psun*0.223/(Psun*0.17)=131 cells under 1 sun. Optical concentration reduces the total cost of solar cells since concentrator materials are usually less expensive than the ones for solar cells [Sze].

The .log file and the file solar_cell_info.txt contain additional properties of the solar cell.

 Solar cell results
 short-circuit current:       I_sc    =       184.149021 [A/m^2]  (photo current: It increases with smaller band gap.)
 open-circuit voltage:        U_oc    =        -1.012500 [V]      (U_oc <= built-in potential ~ band gap)
 current at maximum power:    I_max   =       180.613633 [A/m^2]
 voltage at maximum power:    U_max   =        -0.900000 [V]
 maximum power output:        P_max   = U_max * I_max =      -162.552270 [W/m^2] (condition for maximum power output: dP/dV = 0)
 maximum extracted power:     P_solar = - P_max       =       162.552270 [W/m^2]
 incident power:              P_in    =                      1000.369631 [W/m^2]
 ideal conversion efficiency: eta     = P_max / P_in  =        16.249221 %
 fill factor:                 FF      =         0.871824
 In practice, a good fill factor is around 0.8.
 All these results are approximations.
 They are only correct if a lot of voltage steps have been used (i.e. a high resolution of bias steps).

With nextnano++ one can simulate up to the I-V characteristics. We are currently implementing the power-V curve and efficiency-V curve.

The convergence of the simulation is sensitive to the device settings such as the number of suns. If the convergence fails in your original device, please consider changing the settings in $numeric-control (nextnano³) or run{} (nextnano++).

  • Please help us to improve our tutorial. Should you have any questions or comments, please send them to
nnp/1d_gaas_solar_cells.txt · Last modified: 2020/08/31 05:24 by takuma.sato