Skip to content
Snippets Groups Projects
Commit 6be7cc30 authored by Xin Shi's avatar Xin Shi
Browse files

Merge branch 'main' into 'main'

清理restart代码

See merge request raser-team/raser!40
parents 87b93b73 1b8f3c45
No related branches found
No related tags found
1 merge request!40清理restart代码
import os
import devsim
import matplotlib
import matplotlib.pyplot as plt
from gen_signal.build_device import Detector
from util.output import output
......@@ -122,16 +122,16 @@ class DevsimMesh():
devsim.edge_from_node_model(device=self.device, region=self.region, node_model="Donors")
def drawDoping(self, path):
fig1=matplotlib.pyplot.figure(num=1,figsize=(4,4))
fig1=plt.figure(num=1,figsize=(4,4))
x=devsim.get_node_model_values(device=self.device, region=self.region, name="x")
fields = ("Donors", "Acceptors")
for i in fields:
y=devsim.get_node_model_values(device=self.device, region=self.region, name=i)
matplotlib.pyplot.semilogy(x, y)
plt.semilogy(x, y)
matplotlib.pyplot.xlabel('x (cm)')
matplotlib.pyplot.ylabel('Density (#/cm^3)')
matplotlib.pyplot.legend(fields)
matplotlib.pyplot.savefig(os.path.join(path, "Doping"))
plt.xlabel('x (cm)')
plt.ylabel('Density (#/cm^3)')
plt.legend(fields)
plt.savefig(os.path.join(path, "Doping"))
......@@ -8,7 +8,6 @@ import devsim
import numpy as np
from . import initial
from . import restart
from . import physics_drift_diffusion
from .create_parameter import delete_init
from util.output import output
......@@ -56,7 +55,13 @@ class loop_section():
def loop_solver(self, circuit_contact, v_current, area_factor):
self.voltage.append(v_current)
devsim.set_parameter(device=self.device, name=physics_drift_diffusion.GetContactBiasName(circuit_contact), value=v_current)
devsim.solve(type="dc", absolute_error=self.paras['absolute_error_VoltageSteps'], relative_error=self.paras['relative_error_VoltageSteps'], maximum_iterations=self.paras['maximum_iterations_VoltageSteps'])
try:
devsim.solve(type="dc", absolute_error=self.paras['absolute_error_VoltageSteps'], relative_error=self.paras['relative_error_VoltageSteps'], maximum_iterations=self.paras['maximum_iterations_VoltageSteps'])
except devsim.error as msg:
path = output(__file__, self.device)
devsim.write_devices(file=os.path.join(path, "last_solvable.dd"), type="tecplot")
raise
if self.solve_model !="wf":
physics_drift_diffusion.PrintCurrents(device=self.device, contact=circuit_contact)
electron_current = devsim.get_contact_current(device=self.device, contact=circuit_contact, equation="ElectronContinuityEquation")
......
import devsim
from .physics_drift_diffusion import *
from .initial import switch_cylindrical_coordinate
def PotentialOnlyRestartSolution(device, region, paras, circuit_contacts, set_contact_type=None):
if paras["Cylindrical_coordinate"]==True:
switch_cylindrical_coordinate(device,region)
else:
pass
CreateSiliconPotentialOnly(device=device, region=region)
for i in devsim.get_contact_list(device=device):
if set_contact_type and i in set_contact_type:
contact_type = set_contact_type[i]
else:
contact_type = {"type" : "Ohmic"}
devsim.set_parameter(device=device, name=GetContactBiasName(i), value=0)
if str(circuit_contacts) in i :
CreateSiliconPotentialOnlyContact(device, region, i, contact_type,True)
else:
devsim.set_parameter(device=device, name=GetContactBiasName(i), value="0.0")
CreateSiliconPotentialOnlyContact(device, region, i, contact_type)
def DriftDiffusionRestartSolution(device, region, paras, irradiation_model=None, irradiation_flux=1e15, impact_model=None, circuit_contacts=None, set_contact_type=None):
if paras["Cylindrical_coordinate"]==True:
switch_cylindrical_coordinate(device,region)
else:
pass
CreateSolution(device, region, "Electrons")
CreateSolution(device, region, "Holes")
CreateSiliconDriftDiffusion(device=device, region=region, impact_model=impact_model, irradiation_model=irradiation_model, irradiation_flux=irradiation_flux)
for i in devsim.get_contact_list(device=device):
if set_contact_type and i in set_contact_type:
contact_type = set_contact_type[i]
else:
contact_type = {"type" : "Ohmic"}
if str(circuit_contacts) in i:
devsim.set_parameter(device=device, name=GetContactBiasName(i), value="0.0")
CreateSiliconDriftDiffusionAtContact(device, region, i, contact_type, True)
else:
devsim.set_parameter(device=device, name=GetContactBiasName(i), value="0.0")
CreateSiliconDriftDiffusionAtContact(device, region, i, contact_type)
......@@ -15,8 +15,6 @@ from .create_parameter import create_parameter, delete_init
from . import save_milestone
from . import loop_section
from . import physics_drift_diffusion
from . import initial
from . import restart
from util.output import output
from .devsim_draw import *
......@@ -28,19 +26,15 @@ noise = []
paras = {
"absolute_error_Initial" : 1e10,
"relative_error_Initial" : 1e-10,
"relative_error_Initial" : 1e-5,
"maximum_iterations_Initial" : 1000,
"absolute_error_DriftDiffusion" : 1e10,
"relative_error_DriftDiffusion" : 1e-10,
"maximum_iterations_DriftDiffusion" : 1000,
"absolute_error_VoltageSteps" : 1e10,
"relative_error_VoltageSteps" : 1e-10,
"relative_error_VoltageSteps" : 1e-5,
"maximum_iterations_VoltageSteps" : 1000,
"milestone_mode" : True,
"milestone_step" : 10,
"milestone_step" : 10.0,
"voltage_step" : 0.1,
"acreal" : 1.0,
......@@ -179,19 +173,6 @@ def main (kwargs):
devsim_device = os.path.join(path, str(v_current)+'V.devsim')
devsim.write_devices(file=dd, type="tecplot")
devsim.write_devices(file=devsim_device, type="devsim")
# # flush devsim memory
# devsim.reset_devsim()
# # Resume solver settings
# devsim.load_devices(file=devsim_device)
# create_parameter(MyDetector, device, region)
# circuit_contacts = MyDetector.device_dict['bias']['electrode']
# devsim.circuit_element(name="V1", n1=physics_drift_diffusion.GetContactBiasName(circuit_contacts), n2=0,
# value=0.0, acreal=paras['acreal'], acimag=paras['acimag'])
# restart.PotentialOnlyRestartSolution(device, region, paras, circuit_contacts=circuit_contacts, set_contact_type=None)
# devsim.solve(type="dc", absolute_error=paras['absolute_error_Initial'], relative_error=paras['relative_error_Initial'], maximum_iterations=paras['maximum_iterations_Initial'])
# restart.DriftDiffusionRestartSolution(device, region, paras, irradiation_model=irradiation_model, irradiation_flux=irradiation_flux, impact_model=impact_model, circuit_contacts=circuit_contacts, set_contact_type=None)
# devsim.solve(type="dc", absolute_error=paras['absolute_error_Initial'], relative_error=paras['relative_error_Initial'], maximum_iterations=paras['maximum_iterations_Initial'])
# delete_init(device, region)
i += 1
v_current = voltage_step*i
......
......@@ -2,15 +2,6 @@
# -*- encoding: utf-8 -*-
import json
import os
import devsim
import matplotlib.pyplot
import numpy as np
from field import model_create
from util.output import output
from util.math import *
class Detector:
"""
......
......@@ -50,9 +50,9 @@ def main(kwargs):
det_name = kwargs['det_name']
my_d = bdv.Detector(det_name)
if kwargs['voltage'] != None:
voltage = kwargs['voltage']
voltage = float(kwargs['voltage'])
else:
voltage = my_d.voltage
voltage = float(my_d.voltage)
if kwargs['absorber'] != None:
absorber = kwargs['absorber']
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment