Interactive Demo

Explore the physics.

Explore precomputed Semisolve outputs: band structures, electron density, and current characteristics. These are saved results, not live simulations.

HEMT Demo

Al₀.₂₅Ga₀.₇₅N/GaN HEMT — Band Diagram & 2DEG

Self-consistent Schrödinger-Poisson solution showing quantum confinement effects on the 2DEG at the AlGaN/GaN interface.

Band Diagram

SC: semiclassical. The squared wavefunctions are scaled and offset by their eigenenergies for display.

Electron Density (2DEG)
Reference code (before refactor)

The code structure and APIs are expected to change during the refactor. This example is provided for reference.

Python hemt_demo.py
from semisolve.core.structure import Structure1D, Layer
from semisolve.core.mesh import Mesh1D
from semisolve.core.terminals import Terminal1D, LayerBoundary
from semisolve.materials import GaN, AlGaN
from semisolve.solvers import EquilibriumSolver1D
from semisolve.solvers.settings import (
    SemiclassicalSettings, QuantumSettings, ModelType,
)

T = 300.0
structure = Structure1D(
    layers=[
        Layer(material=GaN(Nd=1e15, temperature=T),   thickness=200.0, label="buffer"),
        Layer(material=AlGaN(x=0.25, temperature=T),  thickness=25.0,  label="barrier"),
    ],
    orientation="0001",   # Ga-face — standard HEMT polarity
    temperature=T,
    substrate="buffer",
)
structure.terminals = [
    Terminal1D(name="Bottom", voltage=0.0,
               selector=LayerBoundary(label="buffer",  side="bottom")),
    Terminal1D(name="Top",    voltage=0.0,
               selector=LayerBoundary(label="barrier", side="top")),
]

mesh = Mesh1D(structure=structure, min_step=0.1, max_step=2.0, grading_rate=1.15)
mesh.generate()

# Self-consistent Schrödinger-Poisson solution
solver = EquilibriumSolver1D(mesh)
result = solver.solve(
    model=ModelType.QUANTUM,
    semiclassical=SemiclassicalSettings(tol=1e-6, max_iter=200),
    quantum=QuantumSettings(band="conduction", num_eigenvalues=10,
                            max_iter=300, tolerance=5e-3),
)

print(f"Converged:  {result.converged}")
print(f"Eigenvalues (eV): {result.eigenvalues[:5]}")
PN Diode Demo

GaN PN Diode — I-V Characteristics

Forward bias sweep using the drift-diffusion solver. Select a voltage to see the band diagram under that bias condition.

Forward I-V Curve
Band Diagram under Bias
Reference code (before refactor)

The code structure and APIs are expected to change during the refactor. This example is provided for reference.

Python pn_demo.py
import numpy as np
from semisolve.core.structure import Structure1D, Layer
from semisolve.core.mesh import Mesh1D
from semisolve.core.terminals import Terminal1D, LayerBoundary
from semisolve.materials import GaN
from semisolve.solvers.drift_diffusion import DriftDiffusionSolver1D
from semisolve.solvers.settings import SemiclassicalSettings

T = 300.0
n_gan = GaN(Nd=5e17, temperature=T); n_gan.Ed = 0.03  # Si donor: 30 meV
p_gan = GaN(Na=5e17, temperature=T); p_gan.Ea = 0.20  # Mg acceptor: 200 meV

structure = Structure1D(
    layers=[
        Layer(material=n_gan, thickness=500.0, label="n_layer"),
        Layer(material=p_gan, thickness=500.0, label="p_layer"),
    ],
    temperature=T,
)
structure.terminals = [
    Terminal1D(name="Cathode", voltage=0.0,
               selector=LayerBoundary(label="n_layer", side="bottom")),
    Terminal1D(name="Anode",   voltage=0.0,
               selector=LayerBoundary(label="p_layer", side="top")),
]

mesh = Mesh1D(structure=structure, min_step=0.5, max_step=10.0, grading_rate=1.15)
mesh.generate()

solver = DriftDiffusionSolver1D(mesh, temp=T)
solver.initialize()
settings = SemiclassicalSettings(max_iter=200, tol=1e-8)

# Forward bias sweep
for v in np.arange(0.0, 4.0, 0.1):
    result = solver.solve(applied_voltage=v, settings=settings)
    if result.converged:
        J = solver.compute_current_density() * 1e-4  # A/m2 -> A/cm2
        print(f"V = {v:.1f} V  J = {J:.4e} A/cm2")
インタラクティブ デモ

計算結果から、物理を見る。

Semisolveで事前に計算したバンド構造、電子密度、電流特性を確認できます。保存済みの結果を表示するデモで、このページ上で計算を実行するものではありません。

HEMT デモ

Al₀.₂₅Ga₀.₇₅N/GaN HEMT — バンド図と2DEG

自己無撞着なSchrödinger-Poisson解法によって得られた、AlGaN/GaNヘテロ接合界面における2DEGの量子閉じ込め効果を示します。

バンド図

SC:半古典モデル。波動関数の絶対値二乗は、表示用にスケーリングして固有エネルギーに重ねています。

電子密度 (2DEG)
参考コード(改修前)

コード構造・APIは大規模改修に伴い変更される予定です。以下は計算例の参考として掲載しています。

Python hemt_demo.py
from semisolve.core.structure import Structure1D, Layer
from semisolve.core.mesh import Mesh1D
from semisolve.core.terminals import Terminal1D, LayerBoundary
from semisolve.materials import GaN, AlGaN
from semisolve.solvers import EquilibriumSolver1D
from semisolve.solvers.settings import (
    SemiclassicalSettings, QuantumSettings, ModelType,
)

T = 300.0
structure = Structure1D(
    layers=[
        Layer(material=GaN(Nd=1e15, temperature=T),   thickness=200.0, label="buffer"),
        Layer(material=AlGaN(x=0.25, temperature=T),  thickness=25.0,  label="barrier"),
    ],
    orientation="0001",   # Ga-face — standard HEMT polarity
    temperature=T,
    substrate="buffer",
)
structure.terminals = [
    Terminal1D(name="Bottom", voltage=0.0,
               selector=LayerBoundary(label="buffer",  side="bottom")),
    Terminal1D(name="Top",    voltage=0.0,
               selector=LayerBoundary(label="barrier", side="top")),
]

mesh = Mesh1D(structure=structure, min_step=0.1, max_step=2.0, grading_rate=1.15)
mesh.generate()

# Self-consistent Schrödinger-Poisson solution
solver = EquilibriumSolver1D(mesh)
result = solver.solve(
    model=ModelType.QUANTUM,
    semiclassical=SemiclassicalSettings(tol=1e-6, max_iter=200),
    quantum=QuantumSettings(band="conduction", num_eigenvalues=10,
                            max_iter=300, tolerance=5e-3),
)

print(f"Converged:  {result.converged}")
print(f"Eigenvalues (eV): {result.eigenvalues[:5]}")
PN ダイオード デモ

GaN PN ダイオード — 電流-電圧特性

ドリフト-拡散ソルバーを用いた順バイアス掃引。電圧を選択すると、そのバイアス下でのバンドダイアグラムが更新されます。

順バイアス I-V カーブ
バイアス下のバンドダイアグラム
参考コード(改修前)

コード構造・APIは大規模改修に伴い変更される予定です。以下は計算例の参考として掲載しています。

Python pn_demo.py
import numpy as np
from semisolve.core.structure import Structure1D, Layer
from semisolve.core.mesh import Mesh1D
from semisolve.core.terminals import Terminal1D, LayerBoundary
from semisolve.materials import GaN
from semisolve.solvers.drift_diffusion import DriftDiffusionSolver1D
from semisolve.solvers.settings import SemiclassicalSettings

T = 300.0
n_gan = GaN(Nd=5e17, temperature=T); n_gan.Ed = 0.03  # Si donor: 30 meV
p_gan = GaN(Na=5e17, temperature=T); p_gan.Ea = 0.20  # Mg acceptor: 200 meV

structure = Structure1D(
    layers=[
        Layer(material=n_gan, thickness=500.0, label="n_layer"),
        Layer(material=p_gan, thickness=500.0, label="p_layer"),
    ],
    temperature=T,
)
structure.terminals = [
    Terminal1D(name="Cathode", voltage=0.0,
               selector=LayerBoundary(label="n_layer", side="bottom")),
    Terminal1D(name="Anode",   voltage=0.0,
               selector=LayerBoundary(label="p_layer", side="top")),
]

mesh = Mesh1D(structure=structure, min_step=0.5, max_step=10.0, grading_rate=1.15)
mesh.generate()

solver = DriftDiffusionSolver1D(mesh, temp=T)
solver.initialize()
settings = SemiclassicalSettings(max_iter=200, tol=1e-8)

# Forward bias sweep
for v in np.arange(0.0, 4.0, 0.1):
    result = solver.solve(applied_voltage=v, settings=settings)
    if result.converged:
        J = solver.compute_current_density() * 1e-4  # A/m2 -> A/cm2
        print(f"V = {v:.1f} V  J = {J:.4e} A/cm2")