feat(gui1d, physics): implement interactive 1D simulator GUI & fix avalanche generation sign bug

- gui1d:
  - Created interactive 1D Diode simulator dashboard (gui1d/app.py, solve_1d.py).
  - Redesigned doping process step editor, layout, and centered legend plots.
  - Implemented state caching for I-V sweeps and grid spacing optimization.
  - Doubled voltage step resolution: 0.05V step for V < 1V, and V/20 step for V >= 1V.
- physics (avalanche bug fix):
  - Fixed charge sign in Hole Continuity Equation for avalanche generation.
  - Created AvalancheGeneration_p in physics/new_physics.py to correctly act as a hole source.
  - Resolved physical breakdown current polarity and negative current leakage at high reverse bias.
This commit is contained in:
pchang718
2026-06-17 23:08:05 +08:00
parent d74c9a4706
commit 44b41698e8
17 changed files with 11315 additions and 367 deletions
+9 -2
View File
@@ -39,7 +39,7 @@ recon_logic = """
time_node_model="NCharge", edge_model=opts['Jn'], edge_volume_model="AvalancheGeneration",
variable_update="positive", node_model="ElectronGeneration", min_error=1e5)
devsim.equation(device=device, region="Silicon", name="HoleContinuityEquation", variable_name="Holes",
time_node_model="PCharge", edge_model=opts['Jp'], edge_volume_model="AvalancheGeneration",
time_node_model="PCharge", edge_model=opts['Jp'], edge_volume_model="AvalancheGeneration_p",
variable_update="positive", node_model="HoleGeneration", min_error=1e5)
try:
@@ -106,7 +106,14 @@ bv_code = code
bv_code = "import pickle\nimport argparse\n" + bv_code
# Turn ON Avalanche by default in solve_sweep_bv.py
bv_code = bv_code.replace('edge_volume_model=""', 'edge_volume_model="AvalancheGeneration"')
bv_code = bv_code.replace(
'name="ElectronContinuityEquation", variable_name="Electrons",\n time_node_model="NCharge", edge_model=opts[\'Jn\'], edge_volume_model=""',
'name="ElectronContinuityEquation", variable_name="Electrons",\n time_node_model="NCharge", edge_model=opts[\'Jn\'], edge_volume_model="AvalancheGeneration"'
)
bv_code = bv_code.replace(
'name="HoleContinuityEquation", variable_name="Holes",\n time_node_model="PCharge", edge_model=opts[\'Jp\'], edge_volume_model=""',
'name="HoleContinuityEquation", variable_name="Holes",\n time_node_model="PCharge", edge_model=opts[\'Jp\'], edge_volume_model="AvalancheGeneration_p"'
)
# Keep Avalanche ON by default
arg_parse = """