Ejemplo n.º 1
0
def CreateSolution(device, region, name):
    '''
      Creates solution variables
      As well as their entries on each edge
    '''
    ds.node_solution(name=name, device=device, region=region)
    ds.edge_from_node_model(node_model=name, device=device, region=region)
Ejemplo n.º 2
0
def set_default_models():
    for r in (region_si, region_ox):
        ds.edge_from_node_model(device=device, region=r, node_model="x")
        CreateEdgeModel(device=device,
                        region=r,
                        model="xmid",
                        expression="0.5*(x@n0 + x@n1)")
    ds.set_parameter(name="T", value=300.0)
    CreateSolution(device=device, region=region_si, name="Potential")
    CreateSolution(device=device, region=region_ox, name="Potential")
    #
    # need Le and Lh for the Si Equation
    #
    setup_dg_variable(device, region_si, "Le")
    setup_dg_variable(device, region_si, "Lh")
    setup_dg_variable(device, region_ox, "Le")
    setup_dg_variable(device, region_ox, "Lh")

    CreateNodeModel(device=device,
                    region=region_si,
                    model="NetDoping",
                    expression="Nconstant")

    #set the bias
    ds.set_parameter(name=GetContactBiasName("bot"), value=0.0)
    ds.set_parameter(name=GetContactBiasName("top"), value=0.0)
    #available solution reset
    ds.node_solution(name='zero', device=device, region=region_ox)
    ds.node_solution(name='zero', device=device, region=region_si)
Ejemplo n.º 3
0
def SetupInitialResistorSystem(device, region, net_doping=1e16):
    '''
      resistor physics
    '''
    devsim.set_parameter(device=device, region=region, name='net_doping', value=net_doping)
    devsim.node_solution(device=device, region=region, name='Potential')
    devsim.edge_from_node_model(device=device, region=region, node_model='Potential')

    # node models
    for name, equation in (
        ("NetDoping",                 "net_doping"),
      ("IntrinsicElectrons",        "NetDoping"),
      ("IntrinsicCharge",           "-IntrinsicElectrons + NetDoping"),
      ("IntrinsicCharge:Potential", "-IntrinsicElectrons:Potential"),
    ):
        devsim.node_model(device=device, region=region, name=name, equation=equation)

    # edge models
    for name, equation in (
        ("ElectricField",              "(Potential@n0 - Potential@n1)*EdgeInverseLength"),
      ("ElectricField:Potential@n0", "EdgeInverseLength"),
      ("ElectricField:Potential@n1", "-EdgeInverseLength"),
      ("PotentialEdgeFlux",              "Permittivity*ElectricField"),
      ("PotentialEdgeFlux:Potential@n0", "diff(Permittivity*ElectricField, Potential@n0)"),
      ("PotentialEdgeFlux:Potential@n1", "-PotentialEdgeFlux:Potential@n0"),
    ):
        devsim.edge_model(device=device, region=region, name=name, equation=equation)

    ####
    #### PotentialEquation
    ####
    devsim.equation(device=device, region=region, name="PotentialEquation", variable_name="Potential", edge_model="PotentialEdgeFlux", variable_update="log_damp")
Ejemplo n.º 4
0
import test_common

device="MyDevice"
region="MyRegion"

test_common.CreateSimpleMesh(device, region)

###
### Set parameters on the region
###
devsim.set_parameter(device=device, region=region, name="Permittivity", value=3.9*8.85e-14)

###
### Create the Potential solution variable
###
devsim.node_solution(device=device, region=region, name="Potential")

###
### Creates the Potential@n0 and Potential@n1 edge model
###
devsim.edge_from_node_model(device=device, region=region, node_model="Potential")

###
### Electric field on each edge, as well as its derivatives with respect to
### the potential at each node
###
devsim.edge_model(device=device, region=region, name="ElectricField",
                  equation="(Potential@n0 - Potential@n1)*EdgeInverseLength")

devsim.edge_model(device=device, region=region, name="ElectricField:Potential@n0",
                  equation="EdgeInverseLength")
Ejemplo n.º 5
0
def createSolution(device, region, name):
    devsim.node_solution(device=device, region=region, name=name)
    devsim.edge_from_node_model(device=device, region=region, node_model=name)
Ejemplo n.º 6
0
def SetupCarrierResistorSystem(device, region):
    '''
    This adds electron continuity
  '''
    devsim.node_solution(device=device, region=region, name='Electrons')
    devsim.edge_from_node_model(device=device,
                                region=region,
                                node_model='Electrons')
    devsim.set_node_values(device=device,
                           region=region,
                           name='Electrons',
                           init_from='IntrinsicElectrons')

    ####
    #### PotentialNodeCharge
    ####
    for name, equation in (
        ("PotentialNodeCharge", "-ElectronCharge*(-Electrons + NetDoping)"),
        ("PotentialNodeCharge:Electrons", "+ElectronCharge"),
    ):
        devsim.node_model(device=device,
                          region=region,
                          name=name,
                          equation=equation)

    ####
    #### PotentialEquation modified for carriers present
    ####
    devsim.equation(device=device,
                    region=region,
                    name='PotentialEquation',
                    variable_name='Potential',
                    node_model='PotentialNodeCharge',
                    edge_model="PotentialEdgeFlux",
                    variable_update="default")

    ####
    #### vdiff, Bern01, Bern10
    ####
    for name, equation in (
        ("vdiff", "(Potential@n0 - Potential@n1)/ThermalVoltage"),
        ("vdiff:Potential@n0", "ThermalVoltage^(-1)"),
        ("vdiff:Potential@n1", "-ThermalVoltage^(-1)"),
        ("Bern01", "B(vdiff)"),
        ("Bern01:Potential@n0", "dBdx(vdiff)*vdiff:Potential@n0"),
        ("Bern01:Potential@n1", "dBdx(vdiff)*vdiff:Potential@n1"),
        ("Bern10", "Bern01 + vdiff"),
        ("Bern10:Potential@n0", "Bern01:Potential@n0 + vdiff:Potential@n0"),
        ("Bern10:Potential@n1", "Bern01:Potential@n1 + vdiff:Potential@n1"),
    ):
        devsim.edge_model(device=device,
                          region=region,
                          name=name,
                          equation=equation)

    ####
    #### Electron Current
    ####
    current_equation = "ElectronCharge*mu_n*EdgeInverseLength*ThermalVoltage*(Electrons@n1*Bern10 - Electrons@n0*Bern01)"
    for name, equation in (
        ("ElectronCurrent", current_equation),
        ("ElectronCurrent:Electrons@n0",
         "simplify(diff(%s, Electrons@n0))" % current_equation),
        ("ElectronCurrent:Electrons@n1",
         "simplify(diff(%s, Electrons@n1))" % current_equation),
        ("ElectronCurrent:Potential@n0",
         "simplify(diff(%s, Potential@n0))" % current_equation),
        ("ElectronCurrent:Potential@n1",
         "simplify(diff(%s, Potential@n1))" % current_equation),
    ):
        devsim.edge_model(device=device,
                          region=region,
                          name=name,
                          equation=equation)

    ####
    #### Time derivative term
    ####
    for name, equation in (
        ("NCharge", "-ElectronCharge * Electrons"),
        ("NCharge:Electrons", "-ElectronCharge"),
    ):
        devsim.node_model(device=device,
                          region=region,
                          name=name,
                          equation=equation)

    ####
    #### Electron Continuity Equation
    ####
    devsim.equation(device=device,
                    region=region,
                    name="ElectronContinuityEquation",
                    variable_name="Electrons",
                    edge_model="ElectronCurrent",
                    time_node_model="NCharge",
                    variable_update="positive")