Ejemplo n.º 1
0
def run():
    test_opts = {
        "filename": "moscap2d.msh",
        "device": "MyDevice",
        "region_ox": "MyOxRegion",
        "region_si": "MySiRegion",
        "interface_siox": "MySiOx",
        "contact_ox": "top",
        "contact_si": "bot",
        "ox_material": "Ox",
        "si_material": "Si"
    }
    instantiate(**test_opts)
    ds.write_devices(file="moscap2d_devsim.msh", type="devsim")
    ds.write_devices(file="moscap2d.tec", type="tecplot")
Ejemplo n.º 2
0
createSiliconDriftDiffusion(device, "bulk")

createSiliconDriftDiffusionAtContact(device, "bulk", "drain")
createSiliconDriftDiffusionAtContact(device, "bulk", "source")
createSiliconDriftDiffusionAtContact(device, "bulk", "body")

devsim.solve(type="dc",
             absolute_error=1.0e30,
             relative_error=1e-5,
             maximum_iterations=30)

devsim.element_from_edge_model(edge_model="ElectricField",
                               device=device,
                               region="bulk")

devsim.write_devices(file="mos_2d_dd.msh", type="devsim")


def format_value(value):
    if isinstance(value, str):
        ret = '"%s"' % value
    elif isinstance(value, float):
        ret = "%g" % value
    else:
        ret = value
    return ret


with open("mos_2d_params.py", "w") as ofh:
    ofh.write('import devsim\n')
    for p in devsim.get_parameter_list():
Ejemplo n.º 3
0
devsim.add_2d_interface( mesh="dog", name="i1", region0="r1", region1="r2", xl=0, xh=1, yl=ymid2, yh=ymid2, bloat=1.0e-10)
devsim.add_2d_contact( mesh="dog", name="top", region="r0", yl=ymin, yh=ymin, bloat=1.0e-10, material="metal")
devsim.add_2d_contact( mesh="dog", name="bot", region="r2", yl=ymax, yh=ymax, bloat=1.0e-10, material="metal")
#contact can only apply interface
devsim.finalize_mesh( mesh="dog")
devsim.create_device(mesh="dog", device=device)

devsim.node_model(device=device, name="NetDoping", region="gas1", equation="1e18")
devsim.node_model(device=device, name="NetDoping", region="r0",   equation="1e18")
devsim.node_model(device=device, name="NetDoping", region="r1",   equation="-1e15")
devsim.node_model(device=device, name="NetDoping", region="r2",   equation="-1e15")
devsim.node_model(device=device, name="NetDoping", region="gas2", equation="-1e15")

devsim.interface_normal_model(device=device, region="r0", interface="i0")
devsim.interface_normal_model(device=device, region="r1", interface="i0")
devsim.interface_normal_model(device=device, region="r1", interface="i1")
devsim.interface_normal_model(device=device, region="r2", interface="i1")

devsim.set_parameter(name="raxis_zero", value=0.0)
devsim.set_parameter(name="raxis_variable", value="x")

for region in ("r0", "r1", "r2"):
    devsim.cylindrical_node_volume(  device=device, region=region)
    devsim.cylindrical_edge_couple(  device=device, region=region)
    devsim.cylindrical_surface_area( device=device, region=region)

devsim.write_devices(file="mesh2d.flps", type="floops")
devsim.write_devices(file="mesh2d.msh",  type="devsim")
devsim.write_devices(file="mesh2d.dat",  type="tecplot")

Ejemplo n.º 4
0
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")
devsim.edge_model(device=device, region=region, name="ElectricField:Potential@n1", equation="-EdgeInverseLength")

devsim.set_parameter(device=device, region=region, name="topbias", value=1.0e-0)
devsim.set_parameter(device=device, region=region, name="botbias", value=0.0)

devsim.edge_model(device=device, region=region, name="PotentialEdgeFlux", equation="Permittivity*ElectricField")
devsim.edge_model(device=device, region=region, name="PotentialEdgeFlux:Potential@n0", equation="diff(Permittivity*ElectricField, Potential@n0)")
devsim.edge_model(device=device, region=region, name="PotentialEdgeFlux:Potential@n1", equation="-PotentialEdgeFlux:Potential@n0")

devsim.equation(device=device, region=region, name="PotentialEquation", variable_name="Potential", edge_model="PotentialEdgeFlux", variable_update="default")

devsim.node_model(device=device, region=region, name="topnode_model"          , equation="Potential - topbias")
devsim.node_model(device=device, region=region, name="topnode_model:Potential", equation="1")

devsim.node_model(device=device, region=region, name="botnode_model"          , equation="Potential - botbias")
devsim.node_model(device=device, region=region, name="botnode_model:Potential", equation="1")

devsim.contact_equation(device=device, contact="top", name="PotentialEquation", variable_name="Potential", node_model="topnode_model", edge_charge_model="PotentialEdgeFlux")
devsim.contact_equation(device=device, contact="bot", name="PotentialEquation", variable_name="Potential", node_model="botnode_model", edge_charge_model="PotentialEdgeFlux")

devsim.solve(type="dc", absolute_error=1.0, relative_error=1e-10, maximum_iterations=30)

print(devsim.get_contact_charge(device=device, contact="top", equation="PotentialEquation"))
print(devsim.get_contact_charge(device=device, contact="bot", equation="PotentialEquation"))

devsim.write_devices(file="trimesh3.msh", type="devsim_data")

Ejemplo n.º 5
0
rvx = "V1.I_ElectronContinuityEquation_real_gradx"
ivx = "V1.I_ElectronContinuityEquation_imag_gradx"
rvy = "V1.I_ElectronContinuityEquation_real_grady"
ivy = "V1.I_ElectronContinuityEquation_imag_grady"

for name, equation in (
    ("noisesource", "4*ElectronCharge^2 * ThermalVoltage * mu_n * Electrons"),
    ("vfield",
     "(%(rvx)s*%(rvx)s+%(ivx)s*%(ivx)s) + (%(rvy)s*%(rvy)s+%(ivy)s*%(ivy)s)" %
     {
         "rvx": rvx,
         "rvy": rvy,
         "ivx": ivx,
         "ivy": ivy
     }),
    ("noise", "vfield * noisesource * NodeVolume"),
):
    devsim.node_model(device=device,
                      region=region,
                      name=name,
                      equation=equation)

print(
    sum(
        devsim.get_node_model_values(device=device,
                                     region=region,
                                     name="noise")))

devsim.write_devices(file="noise_res_2d.flps", type="floops")
Ejemplo n.º 6
0
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

#### Plan is to use this file for full restart, including equations
import devsim
device = "mymos"
devsim.load_devices(file="mos_2d_dd.msh")
import mos_2d_params

devsim.set_parameter(name="debug_level", value="info")
devsim.set_parameter(device=device,
                     region="gate",
                     name="debug_level",
                     value="verbose")

devsim.solve(type="dc",
             absolute_error=1.0e30,
             relative_error=1e-5,
             maximum_iterations=30)

devsim.write_devices(file="mos_2d_restart2.msh", type="devsim")

#set_parameter -device mymos -region gate -name gatebias -value 0.1
#solve -type dc -absolute_error 1.0e30 -relative_error 1e-9 -maximum_iterations 30
Ejemplo n.º 7
0
# Copyright 2013 Devsim LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import devsim
devsim.load_devices(file="mesh2.msh")
devsim.write_devices(file="mesh3.msh", type="devsim_data", device="MyDevice")

Ejemplo n.º 8
0
devsim.add_2d_interface(mesh="mos", name="gate_oxide", region0="gate", region1="oxide")
devsim.add_2d_interface(mesh="mos", name="bulk_oxide", region0="bulk", region1="oxide")
devsim.finalize_mesh(mesh="mos")
devsim.create_device(mesh="mos", device=device)


format_dict= {
    'gate_doping' : gate_doping,
  'source_doping' : source_doping,
  'drain_doping' : drain_doping,
  'body_doping' : body_doping,
  'bulk_doping' : bulk_doping,
  'x_gate_left' : x_gate_left,
  'x_gate_right' : x_gate_right,
  'x_diffusion_decay' : x_diffusion_decay,
  'y_diffusion' : y_diffusion,
  'y_diffusion_decay' : y_diffusion_decay,
  'y_bulk_bottom' : y_bulk_bottom,
}

devsim.node_model(name="NetDoping"   , device=device, region="gate", equation="%(gate_doping)s" % format_dict)
devsim.node_model(name="DrainDoping" , device=device, region="bulk", equation="0.25*%(drain_doping)s*erfc((x-%(x_gate_left)s)/%(x_diffusion_decay)s)*erfc((y-%(y_diffusion)s)/%(y_diffusion_decay)s)" % format_dict)
devsim.node_model(name="SourceDoping", device=device, region="bulk", equation="0.25*%(source_doping)s*erfc(-(x-%(x_gate_right)s)/%(x_diffusion_decay)s)*erfc((y-%(y_diffusion)s)/%(y_diffusion_decay)s)" % format_dict)
devsim.node_model(name="BodyDoping", device=device, region="bulk", equation="0.5*%(body_doping)s*erfc(-(y-%(y_bulk_bottom)s)/%(y_diffusion_decay)s)" % format_dict)
devsim.node_model(name="NetDoping"   , device=device, region="bulk", equation="DrainDoping + SourceDoping + %(bulk_doping)s + BodyDoping" % format_dict)

devsim.write_devices( file="mos_2d", type="vtk")
devsim.write_devices( file="mos_2d.flps", type="floops")

Ejemplo n.º 9
0
    qdict['Holes'] = numpy.array(
        ds.get_node_model_values(device=device,
                                 region=region_si,
                                 name="IntrinsicHoles"))
    qdict['Potential'] = numpy.array(
        ds.get_node_model_values(device=device,
                                 region=region_si,
                                 name="Potential"))
    qdict['Le'] = numpy.array(
        ds.get_node_model_values(device=device, region=region_si, name="Le"))
    qdict['Lh'] = numpy.array(
        ds.get_node_model_values(device=device, region=region_si, name="Lh"))
    qdict['q'] = numpy.array(qdict['q'])
    qdict['v'] = numpy.array(qdict['v'])
    quantum_data[index] = qdict
    ds.write_devices(file='myresult.tec', type='tecplot')
#
##print max(get_node_model_values(device=device, region=region_si, name='n_classical'))
##print max(get_node_model_values(device=device, region=region_si, name='n_quantum'))
#
#if carrier_var == 'Electrons':
#  edge_model(device=device, region=region_si, name="surface_term", equation="del_log_n1*EdgeCouple")
#  edge_model(device=device, region=region_si, name="edge_volume_term", equation="del_log_n2*EdgeNodeVolume")
#  node_model(device=device, region=region_si, name="volume_term", equation="Le_eqn*NodeVolume")
#elif carrier_var == 'Holes':
#  edge_model(device=device, region=region_si, name="surface_term", equation="del_log_p1*EdgeCouple")
#  edge_model(device=device, region=region_si, name="edge_volume_term", equation="del_log_p2*EdgeNodeVolume")
#  node_model(device=device, region=region_si, name="volume_term", equation="Lh_eqn*NodeVolume")
#else:
#  raise RuntimeError("Unknown Carrier Type")
#
Ejemplo n.º 10
0
                      equation=equation)

dio2_element_physics.createPotentialOnly(device, region)

dio2_element_physics.createPotentialOnlyContact(device, region, "top")
dio2_element_physics.createPotentialOnlyContact(device, region, "bot")

####
#### Initial DC solution
####
devsim.solve(type="dc",
             absolute_error=1.0,
             relative_error=1e-12,
             maximum_iterations=30)

devsim.write_devices(file="dio2_element_2d_potentialonly.flps", type="floops")

####
#### drift diffusion
####
dio2_element_physics.createSolution(device, region, "Electrons")
dio2_element_physics.createSolution(device, region, "Holes")

####
#### create initial guess from dc only solution
####
devsim.set_node_values(device=device,
                       region=region,
                       name="Electrons",
                       init_from="IntrinsicElectrons")
devsim.set_node_values(device=device,
Ejemplo n.º 11
0
# Copyright 2013 Devsim LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import devsim
devsim.load_devices(file="mesh3.msh")
devsim.write_devices(file="mesh4.msh", type="devsim_data")