Simulation · Jonction simple

Homojonction

Simulation drift-diffusion 1D (ou 2D optionnel) d'une jonction p-n dans un matériau uniforme. Module implémenté dans simulations/homojunction.py, résolution via SESAME NIST ≥ 2.0.

Courbe J-V homojunction
Fig. 1 — Courbe J-V typique générée par SPARC (homojonction Si). Remplacez cette image par votre propre résultat (img/iv_curve.png).

Principe physique

Le module résout de manière couplée et itérative les trois équations fondamentales du transport semi-conducteur en régime stationnaire :

∇²φ = −q(p − n + Nd⁺ − Na⁻) / (εr ε₀)          [Poisson]
(1/q) ∇·Jn + G − R = 0                            [Continuité e⁻]
−(1/q) ∇·Jp + G − R = 0                           [Continuité h⁺]

Jn = q μn n E + q Dn ∇n    (courant électrons)
Jp = q μp p E − q Dp ∇p    (courant trous)
D = μ kT/q                  (relation Einstein)

La génération optique G(x) est calculée soit par Beer-Lambert monochromatique, soit par Transfer Matrix Method (TMM) spectral AM1.5G selon le mode optical_model.

Flux d'exécution interne

  1. Préparation du matériau : apply_temperature_to_material() applique les modèles Varshni (Eg), T^1.5 (Nc, Nv), Masetti (mobilité) et T^-0.5 (durée de vie).
  2. Maillage adaptatif : sim.create_mesh() génère un maillage raffiné autour de la jonction. Paramètre de contrôle : mesh_refinement (défaut : 3×10⁻⁶ cm). geometry.nx force un nombre de points fixe.
  3. Construction du système Sesame : sesame.Builder(x) (1D) ou sesame.Builder(x, y) si geometry.ly et geometry.ny > 1 sont fournis (mode 2D).
  4. Génération optique : priorité TMM (si le matériau est dans la base d'indices n/k) → Beer-Lambert → pas d'illumination (obscurité).
  5. Balayage IV : run_ivcurve() balaye les tensions et résout le système à chaque point. Tolérance : 1×10⁻⁶, max itérations : 300.
  6. Validation physique : rejet si Jsc > 2 A/cm² (limite robuste AM1.5G). Interpolation si < 10% de points NaN. Repli analytique (single-diode) si Sesame diverge.
  7. Extraction des métriques : sim.extract_iv_parameters() puis _junction_parameters() pour les grandeurs physiques de la jonction.

Paramètres d'entrée

Clé JSON Type Unité Défaut Description
materials.active string requis Identifiant du matériau ("Si", "GaAs", "CdTe"…)
geometry.thickness_n float cm 1×10⁻⁵ Épaisseur de la couche émetteur (région N)
geometry.thickness_p float cm 2×10⁻⁴ Épaisseur de la couche base (région P)
geometry.nx int auto Nombre de nœuds du maillage 1D
geometry.ly float cm (Optionnel) Active le mode 2D, dimension latérale
geometry.ny int 1 (Optionnel) Nombre de nœuds en Y (min 7 en 2D)
doping.n_region float cm⁻³ 1×10¹⁷ Concentration donneurs (Nd)
doping.p_region float cm⁻³ 1×10¹⁵ Concentration accepteurs (Na)
voltages.start/stop/points float/int V 0→0.7/50 Plage de balayage de tension
illumination.photon_flux float ph/cm²/s Flux photonique incident (Beer-Lambert)
illumination.absorption_coefficient float cm⁻¹ Coefficient d'absorption monochromatique
optical_model string "auto" "auto" | "tmm" | "beer_lambert"
mesh_refinement float cm 3×10⁻⁶ Largeur de raffinage autour de la jonction
temperature float K 300.0 Température de simulation

Sorties et métriques extraites

Clé de sortie Unité Description
current_density A/cm² Tableau de densité de courant (convention PV positive)
voltages V Tableau des tensions simulées
jsc mA/cm² Courant de court-circuit
voc V Tension de circuit ouvert
fill_factor Facteur de remplissage FF
efficiency % Rendement de conversion PCE
vbi V Tension de diffusion interne calculée
depletion_width_total cm Largeur totale de la zone de déplétion Wd
electric_field_max V/cm Champ électrique pic à la jonction
diffusion_length_n/p cm Longueurs de diffusion Ln = √(Dn·τn)
band_diagram eV Profils Ec, Ev, Ef sur tout le maillage
quasi_fermi_levels eV Niveaux quasi-Fermi Efn et Efp
optical_model Mode optique effectivement utilisé
simulation_diagnostics Drapeaux de validité (iv_metrics_valid, scientific_readiness…)
Diagramme de bande
Fig. 2 — Diagramme de bandes (Ec, Ev, Ef) à l'équilibre. Remplacez par votre propre résultat (img/band_diagram.png).

Exemple de configuration JSON

config_si_homo.json
{
  "simulation_name": "si_homo_standard",
  "simulation_type": "homojunction",
  "materials": { "active": "Si" },
  "geometry": {
    "thickness_n": 1e-5,
    "thickness_p": 2e-4,
    "nx": 150
  },
  "doping": {
    "n_region": 1e18,
    "p_region": 1e15
  },
  "voltages": { "start": 0.0, "stop": 0.72, "points": 60 },
  "illumination": {
    "enabled": true,
    "photon_flux": 2.5e17,
    "absorption_coefficient": 1e4
  },
  "optical_model": "auto",
  "temperature": 300.0
}

Mises en garde et limites

Convergence. Si Sesame ne converge pas (Maximum iterations reached), augmentez geometry.nx ou réduisez le pas de tension. SPARC tente automatiquement un repli analytique (modèle à une diode) puis signale fallback_simulation_mode: "analytical_single_diode".
Mode 2D. En mode 2D (geometry.ly défini), si le Jsc calculé dépasse 2 A/cm², SPARC bascule automatiquement en 1D (fallback). Le flag fallback_from_2d_short_circuit_current: true apparaît dans les résultats.
TMM vs Beer-Lambert. Le mode "auto" utilise la Transfer Matrix Method (TMM) spectrale si le matériau est dans la base d'indices de réfraction interne (Si, GaAs, CdTe…). Sinon, il replie sur Beer-Lambert et le log indique TMM échoué → repli Beer-Lambert.

Références

  • van Roosbroeck, W. (1950). Theory of the flow of electrons and holes in germanium. Bell System Technical Journal.
  • Selberherr, S. (1984). Analysis and Simulation of Semiconductor Devices. Springer.
  • Ward, D. et al. (2022). Sesame: A 1D/2D semiconductor device simulator. NIST.