Best Practices for Production Calculations

This page collects practical advice that is not covered by the task-oriented guides. For step-by-step setup of contacts, SCF tuning, and standard workflows, see Guides.

See also

Choosing a Contact Type – choosing between energy-independent self-energies, 1D chain, and Bethe lattice contacts.

Configuration and Tuning – SCF damping, Pulay mixing, ETA, fermiMethod, and integration tolerances.

Guide 5: Workflow Recipes – warm-starts, IV sweeps, and checkpointing.

System Preparation

Contact Placement

  • Choose chemically reasonable contact sites (e.g. thiol on Au, terminating Si atom for a nanowire).

  • Maintain consistent contact-molecule distances when comparing geometries.

  • Consider multiple contact configurations if conductance is sensitive to binding site.

Basis Set Selection

  • For light-element systems, a compact all-electron basis such as STO-3G or 6-31G is fine for testing and quick convergence checks.

  • Boundary atoms must use a minimal basis - This applies to 1D or 3D contacts, due to poor conditioning of the overlap matrix (to be fixed in future versions with regularization methods)

  • For heavy elements (Au, Pt, transition metals), use an ECP basis such as LANL2DZ to keep the orbital count tractable.

  • Move to a polarized basis (6-31G(d,p), def2-SVP) for production transport.

DFT Setup

Functional Selection

From a pure physics perspective, using a functional with exchange will never be accurate: the charges from any atom outside of the device boundary cannot possibly be included in the two-electron integrals. However, in practice, hybrid functionals like B3LYP have produced the best results for isolated molecular systems. Therefore, benchmarking your results against multiple functionals is always recommended: find one that works relatively well for your system and doesn’t make the reviewers too mad.

Integration Parameters

Integration is used only by the energy-dependent class (gauNEGF.scfE.NEGFE). The default adaptive integrator is correct for most cases; see Configuration and Tuning for the ADAPTIVE_INTEGRATION_TOL constraint.

Manually Setting the Integration Grid

For cases where the adaptive integrator is too slow or unstable, you can fix the grid directly:

negf.setIntegralLimits(
     N1=100,     # integration points from Emin to mu
     N2=50,      # integration points from Eminf to Emin
     Emin=-500   # lower bound (eV)
)

This bypasses adaptive refinement entirely; use only after you have a working adaptive run for comparison.

Adding Temperature

Temperature affects the contact Fermi-Dirac distribution. It is set per-contact on the energy-dependent class:

from gauNEGF.scfE import NEGFE

negf = NEGFE('molecule', basis='lanl2dz')
negf.setSigma(lContact=[1], rContact=[2], sig=-0.05j, T=300)

See Configuration and Tuning for the global TEMPERATURE config constant.

Validation Checks

Zero Bias

  • Compare with literature conductance values for similar systems.

  • Check the transmission profile inside the HOMO-LUMO gap (should be small).

  • Verify DOS features: molecular orbitals should be sharp, contact-induced broadening should be smooth.

Finite Bias

  • Check current symmetry under positive and negative bias.

  • Check for hysteresis by sweeping voltage forward and backward.

  • Monitor charge conservation across the device region.

Spin Systems

  • Verify charge and multiplicity match the intended state.

  • Check for spin contamination (<S^2>) in unrestricted runs.

  • For non-collinear (spin='g') cases, inspect the system spin direction after SCF convergence.