nextnano.com
==> nextnano Documentation (New)

nextnano++ software

     

Up

 

 

FAQ: Frequently asked questions

 

  1. I get the error message:

    ERROR: No dirichlet points for Fermi levels were found!
    Terminating program !!
    (Comment: Meanwhile, this error message is different. Once an update has been released, change the FAQ here.)

    Answer: The program does not know at which energy the Fermi level should be located. A solution is this:
       region{
          everywhere{}
          binary { name = "GaAs"  }
          contact{ name = "dummy" }
       }
       contacts{
          fermi{ name = "dummy" bias = 0.0 } # only needed to define reference energy
       }

    This defines the Fermi level to be at 0 eV in the whole device.
     

  2. My Quantum-Current-Poisson calculation fails to converge. How can I avoid this problem?

    Answer: The most common errors are the following:

    a) The maximum number of iterations has been chosen too small (run{}->outer_iteration{}->iterations) and the calculation just needs some more iterations.

    b) The number of electron or hole eigenstates has been chosen too small (e.g. quantum{}->region{}->Gamma{}->num_ev). Check the occupations in the files wf_spectrum_"name quantum region"_"name quantum model".dat. If the occupation does not drop from the ground state to the highest excited state by several orders of magnitude, you need to calculate more states (= more possibilities to fill in charges).

    c) The underrelaxation parameter has been chosen too large (run{} ==> outer_iteration{} ==> alpha_current). Check whether the solution oscillates (residuals do not drop continuously but increase in some iterations). Try to decrease the underrelaxation parameter in order to damp the oscillations.

    d) The minimum charge density in the current equation has been chosen too small (currents{}->minimum_density). Try to increase the minimum charge density to improve conditioning of the current equation. (In fact, the current equation is solved with the charge density = max( "real density", minimum_density)).

 

 

New features

  • All band edges are now contained in one file, together with the Fermi levels.

  • All Fermi levels are now contained in one file.

  • Units were added to output file: total_charges.txt

  • crystal_zb{...}
    crystal_wz{...}
    now also accept z_hkl as input. Previously only x_hkl and y_hkl were supported, the third direction was calculated internally. Exactly two of these three axes have to be specified:
      x_hkl = [ ., ., .]
      y_hkl = [ ., ., .]
      z_hkl = [ ., ., .]

  • output_wavefunctions{
     in_one_file = yes/no #
    prints out the amplitudes into one file and the probabilities into one file (default = yes). If no is chosen, for each eigenvalue a separate file is written out.
    There is an additional file where the square of the wavefunctions are shifted by their respective energy level.

  • output of lattice constants and elastic constants (see strain{})

  • output of band gap (see classical{})

  • output of VTK format for 2D and 3D simulations

  • import data from file (electrostatic potential, alloy profile, strain)

  • new region objects polygon, regular_polygon, hexagon, circle

  • overwriting default material database parameters in the input file

  • See also the change log file:
    C:\Program Files (x86)\nextnano\2015_08_19\nextnano++\change_log_nextnano++.txt

 

 

Bug fixes

  • // intrinsicDensity_(i,j,k) = 0.5 * (eSum + hSum); // comment S. Birner: This equation produced the
                                                          wrong intrinsic density (relevant for recombination rates).
       intrinsicDensity_(i,j,k) = sqrt  (eSum * hSum); // changed by S. Birner (bug fix 2010-05-17).
                                                       // If eSum and hSum are identical, both equations are the same.  // fixed 2010-05-07
     
  • Linear interpolation for doping profile did not work correctly. // fixed 2011-06-03
    geometry_region_doping.h
     
  • Bug in terms of rescaling 8-band k.p material parameters. Instead of
                L'  = L + P'2 /  E_gap
                N+' = N + P'2 /  E_gap
    the term Delta_so/3 was added to the band gap.
    // matGrid(L ,i,j,k) += ( sqr(pnew) - sqr(kpParameters[KpP]) ) / ( eg
    + deltaSO[1] / 3.0 );
    // matGrid(NP,i,j,k) += ( sqr(pnew) - sqr(kpParameters[KpP]) ) / ( eg
    + deltaSO[1] / 3.0 );
       matGrid(L ,i,j,k) += ( sqr(pnew) - sqr(kpParameters[KpP]) ) / ( eg );
       matGrid(NP,i,j,k) += ( sqr(pnew) - sqr(kpParameters[KpP]) ) / ( eg ); // fixed 2011-07-12
     
  • 2 bugs in terms of interpolation of quaternaries of type AxByC1-x-yH (e.g. InxAlyGa1-x-yN) in terms of bowing parameter fAC.
    // const double f13 = ternaryBowing(ternary13,i,y,y-x-y,accessor); // This was a bug: must be 1-x-y
       const double f13 = ternaryBowing(ternary13,i,y,1-x-y,accessor); // fixed 2011-07-13

    // const double t = x*y*f12 - x*(1-x-y)*f13 + y*(1-x-y)*f23; // ternaries bowing
       const double t = x*y*f12 + x*(1-x-y)*f13 + y*(1-x-y)*f23; // ternaries bowing // This was a bug: must be +, fixed 2011-07-13
     
  • fixed another bug for quaternary alloys of type A(x)B(y)C(1-x-y)H, e.g. InxAlyGa1-x-yN
    // const double f23 = ternaryBowing(ternary23,i,x,1-x-y,accessor); // [y f_BC^B + (1-x-y) f_BC^C] This was a bug: must be 'y,1-x-y', and not 'x,1-x-y'.
       const double f23 = ternaryBowing(ternary23,i,y,1-x-y,accessor); // [y f_BC^B + (1-x-y) f_BC^C] fixed by S. Birner, 2012-02-27

    // const double f13 = ternaryBowing(ternary13,i,y,y-x-y,accessor); // [x f_AC^A + (1-x-y) f_AC^C] This was a bug: must be '1-x-y', and not 'y-x-y'.
    // const double f13 = ternaryBowing(ternary13,i,y,1-x-y,accessor); // [x f_AC^A + (1-x-y) f_AC^C] fixed by S. Birner, 2011-07-13. There was still another bug: must be 'x,1-x-y', and not 'y,1-x-y'.
       const double f13 = ternaryBowing(ternary13,i,x,1-x-y,accessor); // [x f_AC^A + (1-x-y) f_AC^C] fixed by S. Birner, 2012-02-27
     
  • fixed a bug for quaternary alloys of type A(x)B(1-x)C(y)D(1-y)
    // const double f23 = ternaryBowing(ternary23,i,x,1-x,accessor); // [y f_CD,B^C + (1-y) f_CD,B^D] This was a bug: must be 'y,1-y', and not 'x,1-x'.
      
    const double f23 = ternaryBowing(ternary23,i,y,1-y,accessor); // [y f_CD,B^C + (1-y) f_CD,B^D] fixed by S. Birner, 2012-02-27

    // const double f34 = ternaryBowing(ternary34,i,y,1-y,accessor); // [x f_AB,D^A + (1-x) f_AB,D^B] This was a bug: must be 'x,1-x', and not 'y,1-y'.
      
    const double f34 = ternaryBowing(ternary34,i,x,1-x,accessor); // [x f_AB,D^A + (1-x) f_AB,D^B] fixed by S. Birner, 2012-02-27
     
  • fixed a bug related to the ordering of fixed charges, i.e. if fixed charge doping regions overlap. fixed 2012-08-16
    charge{ name = "positive-charge"   type = positive}
    charge{ name = "negative-charge"   type = negative}
     
  • Strain tensor output is now in dimensionless units. Before, it was in percent. Now it is consistent to nextnano3.
     
  • For wurtzite, the spin-orbit splitting parameters Delta2 and Delta3 were not read in from the database file. Instead, these values were assumed to be equal to Delta1. // fixed 2014-07-28

 

 

To do... / Feature requests

  • Add bulk k.p dispersion for a grid point specified by the user to the output so that one knows the bulk k.p dispersion of the material parameters (e.g. of an alloy) at this grid point.

  • Change the units of the k_parallel dispersion from 2pi/a to 1/nm.

 

 

Additional tools

  • NEW: AVS to Origin Converter
    To convert AVS/Express data into x,y,z,f(x,y,z) use this Python script: avs2xyz.py (avs2xyz_py.zip)
    contributed by: Jose M. Llorens, Institute of Microelectronics of Madrid, National Spanish Research Council (CSIC), jose.llorens [at] imm.cnm.csic.es
    Note: This script works for both nextnano³ and nextnano++.