Files
Dean Huang e9bd61b56f start
2025-12-08 10:11:12 +08:00

70 lines
2.0 KiB
Python

# Copyright 2013 DEVSIM LLC
#
# SPDX-License-Identifier: Apache-2.0
import devsim
from devsim import get_contact_list, get_region_list, set_parameter, set_node_values
from devsim.python_packages.model_create import CreateSolution
from devsim.python_packages.simple_physics import (
GetContactBiasName,
SetOxideParameters,
SetSiliconParameters,
CreateSiliconPotentialOnly,
CreateSiliconPotentialOnlyContact,
CreateSiliconDriftDiffusion,
CreateSiliconDriftDiffusionAtContact,
CreateOxidePotentialOnly,
CreateSiliconOxideInterface,
)
devsim.load_devices(file="mos_2d_dd.msh")
device = devsim.get_device_list()[0]
device = "mymos"
silicon_regions = ("gate", "bulk")
oxide_regions = ("oxide",)
regions = ("gate", "bulk", "oxide")
interfaces = ("bulk_oxide", "gate_oxide")
for i in silicon_regions:
SetSiliconParameters(device, i, 300)
CreateSiliconPotentialOnly(device, i)
for i in oxide_regions:
SetOxideParameters(device, i, 300)
CreateOxidePotentialOnly(device, i, "log_damp")
### Set up contacts
contacts = get_contact_list(device=device)
for i in contacts:
tmp = get_region_list(device=device, contact=i)
r = tmp[0]
print("%s %s" % (r, i))
CreateSiliconPotentialOnlyContact(device, r, i)
set_parameter(device=device, name=GetContactBiasName(i), value=0.0)
for i in interfaces:
CreateSiliconOxideInterface(device, i)
for i in silicon_regions:
CreateSolution(device, i, "Electrons")
CreateSolution(device, i, "Holes")
set_node_values(
device=device, region=i, name="Electrons", init_from="IntrinsicElectrons"
)
set_node_values(device=device, region=i, name="Holes", init_from="IntrinsicHoles")
CreateSiliconDriftDiffusion(device, i, "mu_n", "mu_p")
for c in contacts:
tmp = get_region_list(device=device, contact=c)
r = tmp[0]
CreateSiliconDriftDiffusionAtContact(device, r, c)
devsim.solve(
type="dc", absolute_error=1.0e30, relative_error=1e-5, maximum_iterations=30
)