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.
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
- 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). - 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.nxforce un nombre de points fixe. - Construction du système Sesame :
sesame.Builder(x)(1D) ousesame.Builder(x, y)sigeometry.lyetgeometry.ny > 1sont fournis (mode 2D). - Génération optique : priorité TMM (si le matériau est dans la base d'indices n/k) → Beer-Lambert → pas d'illumination (obscurité).
- Balayage IV :
run_ivcurve()balaye les tensions et résout le système à chaque point. Tolérance : 1×10⁻⁶, max itérations : 300. - 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.
- 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…)
|
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.