The Materials Database

Building a device

Every material named in the layer table comes from a single JSON file. That file is yours to edit — you can correct a parameter or add a material of your own.

01Where the file lives

The copy shipped inside the application is a read-only default. The copy you edit lives outside it, in your own data folder:

  • macOS~/Library/Application Support/Poisson/materials.json
  • Windows%APPDATA%\Poisson\materials.json
  • Linux~/.local/share/Poisson/materials.json

The separation is to avoid editing files inside the installed folder or bundle, preventing the possibility of breaking the install. Keeping your edits outside the installed application avoids that entirely, and preserves them through a reinstall.

02Reveal and Reset

Two entries in the File menu manage it:

  • Reveal Materials File — opens the folder containing your copy. This is close to essential: ~/Library on macOS and %APPDATA% on Windows are both hidden by default, so the file is difficult to reach otherwise.
  • Reset Materials to Defaults… — restores the shipped database.

Reset never destroys your work. Before restoring the defaults it copies your version alongside as materials.json.bak. If a reset turns out to have been a mistake, rename that file back.

03What an entry looks like

The file holds a list of materials. A simple binary carries its parameters as plain named values:

{
  "name": "GaAs",
  "type": "binary",
  "family": "GaAs",
  "is_insulator": false,
  "notes": [],
  "params": {
    "Eg_eV": 1.424,
    "dec_eV": 0.0,
    "eps_r": 13.1,
    "me": 0.067,
    ...
  }
}

An alloy is a ternary instead, and its properties are curves in the mole fraction x rather than fixed numbers. Each curve is one or more segments, and each segment is a quadratic — the three coefficients give c0 + c1x + c2x² over the stated range of x:

"Eg_eV": [
  {"x": [0.0, 0.45], "coeffs": [1.424, 1.247, 0.0]},
  {"x": [0.45, 1.0], "coeffs": [1.900, 0.125, 0.143]}
]

Two segments are used here because the band gap changes character partway across the composition range. In AlGaAs the join sits at x = 0.45, where the alloy turns from direct to indirect — above it the lowest conduction minimum is no longer at the zone centre. A material whose property is a single smooth curve needs only one segment.

A composition exactly on a join takes the lower segment. Segments are tried in order and the first containing the value wins, so entering x = 0.45 for AlGaAs gives the direct branch — a light electron mass and a single valley — even though that is the crossover itself. If you want the material on the indirect side, enter 0.46 or above.

This is easy to miss, because the band edge barely moves across the join: the offset is continuous there by construction. What changes is the density of states, and it changes sharply — the effective mass and the number of equivalent valleys both jump, together raising the conduction-band density of states by more than two orders of magnitude. A structure whose behaviour depends on the alloy being indirect will look perfectly reasonable while being modelled as direct.

04The notes field

Every material can carry a notes list — free text recording where a value came from, how firm it is, and anything a future reader should be wary of. Several of the shipped materials use it heavily.

It is worth writing notes for anything you add. A parameter with no provenance is impossible to audit later, and the difference between a measured value and a plausible estimate matters when a result surprises you.

05Polarisation is not applied automatically

The nitride entries (GaN, AlGaN, InGaN) carry a pol parameter, but Poisson does not act on it: no spontaneous or piezoelectric polarisation charge is added to the solve on its own.

For most materials this makes no difference — in the arsenides and in silicon the effect is negligible. In wurtzite (c-plane) nitrides it is not. Spontaneous and strain polarisation there are large, and a graded or heterostructured AlGaN/GaN layer carries a real bound charge that bends the bands by volts — it is what forms the two-dimensional electron gas in an AlGaN/GaN HEMT with no doping at all.

Read an untouched nitride result as the electrostatics without the polarisation field. It is correct for a non-polar orientation, but for the usual c-plane growth it is missing a first-order effect — and it will not agree with a solver that includes polarisation.

You can, however, put the polarisation in by hand. It is only fixed bound charge, so once you have worked out its magnitude from the polarisation coefficients you enter it the same way you would any other fixed charge:

  • A graded layer — a linear composition ramp gives a uniform bound charge (the gradient of the polarisation is constant). Enter it as a uniform background p- or n-doping on that layer, of density σ = −dP/dx divided by the electron charge.
  • The top surface — use the surface charge boundary condition, which places a fixed sheet at the surface and lets the bands build the field around it.
  • A buried interface (the HEMT sheet) — there is no internal sheet-charge control, so approximate it with a thin, heavily doped layer at the interface whose sheet density equals the polarisation discontinuity ΔP divided by the electron charge.

None of this is automatic, and the sign depends on the growth face and strain state — but a structure built this way carries the correct built-in field, and will line up with a polarisation-aware solver.

06Editing safely

  • The file is read once, at startup. Restart Poisson after editing, or your change will not be picked up.
  • It must remain valid JSON. A stray comma or missing brace will stop the database loading; if that happens, use Reset Materials to Defaults… to get back to a working file — your broken version is preserved as the backup, so you can find the mistake at leisure.
  • Updates will not overwrite. If a later release ships revised material data, Poisson notices and asks what you want to do rather than silently replacing your edited file.