import devsim device="MyDevice" region="MyRegion" xmin=0.0 xmax=1.0 ymin=0.0 ### not that ymid my not exactly line up with a 0.5 gathered through summation, so use closes bloat with triangle rule to claim ownership ymid1=0.5 ymid2=0.6 ymax=1.0 devsim.create_2d_mesh( mesh="dog") devsim.add_2d_mesh_line(mesh="dog", dir="y", pos=-0.001, ps=0.001) devsim.add_2d_mesh_line(mesh="dog", dir="x", pos=xmin, ps=0.1) devsim.add_2d_mesh_line(mesh="dog", dir="x", pos=xmax, ps=0.1) devsim.add_2d_mesh_line(mesh="dog", dir="y", pos=ymin, ps=0.1) devsim.add_2d_mesh_line(mesh="dog", dir="y", pos=ymax, ps=0.1) #in order to capture interfaces devsim.add_2d_mesh_line(mesh="dog", dir="y", pos=+1.001, ps=0.001) # color triangles not nodes or edges # error if region doesn't have any triangles # last add_region has highest precedence # allow use of names or tags # check my parser to verify that adding is possible (via dynamic_cast) # note this region won't have equation numbers devsim.add_2d_region( mesh="dog", material="gas", region="gas1", yl=-.001, yh=0.0) devsim.add_2d_region( mesh="dog", material="gas", region="gas2", yl=1.0, yh=1.001) devsim.add_2d_region( mesh="dog", material="Oxide", region="r0", xl=xmin, xh=xmax, yl=ymid1, yh=ymin)
# limitations under the License. # solid state resistor ssac import devsim import test_common devsim.circuit_element(name="V1", n1="topbias", n2=0, acreal=1.0) device = "MyDevice" region = "MyRegion" #### #### Meshing #### devsim.create_2d_mesh(mesh="dog") devsim.add_2d_mesh_line(mesh="dog", dir="x", pos=0, ps=1e-6) devsim.add_2d_mesh_line(mesh="dog", dir="x", pos=1e-5, ps=1e-6) devsim.add_2d_mesh_line(mesh="dog", dir="y", pos=0, ps=1e-6) devsim.add_2d_mesh_line(mesh="dog", dir="y", pos=1e-5, ps=1e-6) devsim.add_2d_mesh_line(mesh="dog", dir="x", pos=-1e-8, ps=1e-8) devsim.add_2d_mesh_line(mesh="dog", dir="x", pos=1.001e-5, ps=1e-8) devsim.add_2d_region(mesh="dog", material="Si", region=region) devsim.add_2d_region(mesh="dog", material="Si", region="air1", xl=-1e-8, xh=0) devsim.add_2d_region(mesh="dog", material="Si", region="air2", xl=1.0e-5, xh=1.001e-5)
x_device_left=(x_bulk_left - air_thickness) x_device_right=(x_bulk_right + air_thickness) y_bulk_top= 0.0 y_oxide_top= (y_bulk_top - oxide_thickness) y_oxide_mid= (0.5 * (y_oxide_top + y_bulk_top)) y_gate_top= (y_oxide_top - gate_thickness) y_gate_mid= (0.5 * (y_gate_top + y_oxide_top)) y_device_top= (y_gate_top - air_thickness) y_bulk_bottom= (y_bulk_top + device_thickness) y_bulk_mid= (0.5 * (y_bulk_top + y_bulk_bottom)) y_device_bottom=(y_bulk_bottom + air_thickness) y_diffusion= (y_bulk_top + diffusion_thickness) devsim.create_2d_mesh( mesh="mos") devsim.add_2d_mesh_line(mesh="mos", dir="y", pos=y_device_top, ps=max_y_spacing) devsim.add_2d_mesh_line(mesh="mos", dir="y", pos=y_gate_top, ps=y_gate_top_spacing) devsim.add_2d_mesh_line(mesh="mos", dir="y", pos=y_gate_mid, ps=y_gate_mid_spacing) devsim.add_2d_mesh_line(mesh="mos", dir="y", pos=y_oxide_top, ps=y_gate_bot_spacing, ns=y_oxide_mid_spacing) devsim.add_2d_mesh_line(mesh="mos", dir="y", pos=y_oxide_mid, ps=y_oxide_mid_spacing) devsim.add_2d_mesh_line(mesh="mos", dir="y", pos=y_bulk_top, ns=y_oxide_mid_spacing, ps=y_channel_spacing) devsim.add_2d_mesh_line(mesh="mos", dir="y", pos=y_diffusion, ps=y_diffusion_spacing) devsim.add_2d_mesh_line(mesh="mos", dir="y", pos=y_bulk_mid, ps=y_bulk_mid_spacing) devsim.add_2d_mesh_line(mesh="mos", dir="y", pos=y_bulk_bottom, ns=y_bulk_bottom_spacing, ps=max_y_spacing) devsim.add_2d_mesh_line(mesh="mos", dir="y", pos=y_device_bottom, ps=max_y_spacing) devsim.add_2d_mesh_line(mesh="mos", dir="x", pos=x_center, ps=x_channel_spacing) devsim.add_2d_mesh_line(mesh="mos", dir="x", pos=x_gate_left, ps=x_channel_spacing) devsim.add_2d_mesh_line(mesh="mos", dir="x", pos=x_bulk_left, ps=x_diffusion_spacing) devsim.add_2d_mesh_line(mesh="mos", dir="x", pos=x_gate_right, ps=x_channel_spacing) devsim.add_2d_mesh_line(mesh="mos", dir="x", pos=x_bulk_right, ps=x_diffusion_spacing)
xmin = -25 x1 = -24.975 x2 = -2 x3 = 2 x4 = 24.975 xmax = 25.0 ymin = 0.0 y1 = 0.1 y2 = 0.2 y3 = 0.8 y4 = 0.9 ymax = 50.0 devsim.create_2d_mesh(mesh=device) devsim.add_2d_mesh_line(mesh=device, dir="y", pos=ymin, ps=0.1) devsim.add_2d_mesh_line(mesh=device, dir="y", pos=y1, ps=0.1) devsim.add_2d_mesh_line(mesh=device, dir="y", pos=y2, ps=0.1) devsim.add_2d_mesh_line(mesh=device, dir="y", pos=y3, ps=0.1) devsim.add_2d_mesh_line(mesh=device, dir="y", pos=y4, ps=0.1) devsim.add_2d_mesh_line(mesh=device, dir="y", pos=ymax, ps=5.0) device = device region = "air" devsim.add_2d_mesh_line(mesh=device, dir="x", pos=xmin, ps=5) devsim.add_2d_mesh_line(mesh=device, dir="x", pos=x1, ps=2) devsim.add_2d_mesh_line(mesh=device, dir="x", pos=x2, ps=0.05) devsim.add_2d_mesh_line(mesh=device, dir="x", pos=x3, ps=0.05) devsim.add_2d_mesh_line(mesh=device, dir="x", pos=x4, ps=2) devsim.add_2d_mesh_line(mesh=device, dir="x", pos=xmax, ps=5)
def createMesh(device, region): devsim.create_2d_mesh(mesh="dog") devsim.add_2d_mesh_line(mesh="dog", dir="x", pos=0, ps=1e-6) devsim.add_2d_mesh_line(mesh="dog", dir="x", pos=0.5e-5, ps=1e-8) devsim.add_2d_mesh_line(mesh="dog", dir="x", pos=1e-5, ps=1e-6) devsim.add_2d_mesh_line(mesh="dog", dir="y", pos=0, ps=1e-6) devsim.add_2d_mesh_line(mesh="dog", dir="y", pos=1e-5, ps=1e-6) devsim.add_2d_mesh_line(mesh="dog", dir="x", pos=-1e-8, ps=1e-8) devsim.add_2d_mesh_line(mesh="dog", dir="x", pos=1.001e-5, ps=1e-8) devsim.add_2d_region(mesh="dog", material="Si", region=region) devsim.add_2d_region(mesh="dog", material="Si", region="air1", xl=-1e-8, xh=0) devsim.add_2d_region(mesh="dog", material="Si", region="air2", xl=1.0e-5, xh=1.001e-5) devsim.add_2d_contact(mesh="dog", name="top", region=region, yl=0.8e-5, yh=1e-5, xl=0, xh=0, bloat=1e-10, material="metal") devsim.add_2d_contact(mesh="dog", name="bot", region=region, xl=1e-5, xh=1e-5, bloat=1e-10, material="metal") devsim.finalize_mesh(mesh="dog") devsim.create_device(mesh="dog", device=device)