コード例 #1
0
ファイル: dc_experiments.py プロジェクト: bond-anton/Schottky
def calculate_for_temperature(args):
    silicon, electrode, temperature, voltage_range = args
    print temperature
    db_name = prefix + '_dc_%03.2fK.db' % temperature
    db_name = join(data_dir, db_name)
    project = Project(db_name=db_name, backend='sqlite', hostname='', overwrite=False)
    diode = SchottkyDiode(project, 'Au-nSi_BW', electrode, silicon, DeadLayer=1.5e-7, L=5e-6)
    diode.set_T(temperature)
    potential = []
    field = []
    diode_voltage = []
    diode_voltage_error = []
    current_density = []
    current_density_error = []
    bonding_interface_f = {}
    dopants_f_sum = {}
    z = []
    dopants_f = []
    for voltage in voltage_range:
        diode.set_Va(voltage)
        type_sign = -1 if silicon.dop_type == 'n' else 1
        potential_i = Psi_approx(diode.L, -(diode.V_bi(eV=True) + type_sign * voltage), 0.0)
        potential_i, field_i, z_nodes, rho_err_points, \
            diode_voltage_i, diode_voltage_error_i, \
            current_density_i, current_density_error_i, \
            bonding_interface_f_i, dopants_f_i, \
            measurement_id = Poisson.Reccurent_Poisson_solver(diode, potential_i, Vd_error=1e-6,
                                                              equilibrium_filling=True, t=mp.inf,
                                                              initial_condition_id=-1,
                                                              rho_rel_err=poisson_relative_error, max_iter=100,
                                                              debug=False)
        potential.append(potential_i)
        field.append(field_i)
        diode_voltage.append(diode_voltage_i)
        diode_voltage_error.append(diode_voltage_error_i)
        current_density.append(current_density_i)
        current_density_error.append(current_density_i)
        z.append(z_nodes)
        dopants_f.append(dopants_f_i)
        for trap_key in bonding_interface_f_i.keys():
            try:
                bonding_interface_f[trap_key].append(bonding_interface_f_i[trap_key])
            except KeyError:
                bonding_interface_f[trap_key] = [bonding_interface_f_i[trap_key]]
        for dopant_key in dopants_f_i.keys():
            try:
                dopants_f_sum[dopant_key].append(np.sum(dopants_f_i[dopant_key]))
            except KeyError:
                dopants_f_sum[dopant_key] = [np.sum(dopants_f_i[dopant_key])]

    data = {temperature: {'applied_voltage': voltage_range,
                          'diode_voltage': diode_voltage, 'diode_voltage_error': diode_voltage_error,
                          'current_density': current_density, 'current_density_error': current_density_error}}
    for trap_key in bonding_interface_f.keys():
        data[temperature][trap_key] = bonding_interface_f[trap_key]
    for dopant_key in dopants_f_sum.keys():
        data[temperature][dopant_key + '_sum'] = dopants_f_sum[dopant_key]
    return potential, field, data, z, dopants_f
コード例 #2
0
def bb_animation(f, ax, temperature, z, data, dopants_f, potential):
    db_name = prefix + '_dc_%03.2fK.db' % temperature
    db_name = join(data_dir, db_name)
    project = Project(db_name=db_name,
                      backend='sqlite',
                      hostname='',
                      overwrite=False)
    diode = SchottkyDiode(project,
                          'Au-nSi_BW',
                          electrode,
                          silicon,
                          DeadLayer=1.5e-7,
                          L=5e-6)
    diode.set_T(temperature)
    for i, record in enumerate(data):
        current_temperature = record.keys()[0]
        if current_temperature == temperature:
            df = pd.DataFrame(record[temperature])
            break
    print i
    print potential[i]
    bi_trap_labels = []
    bi_f = []
    for bi in diode.Semiconductor.bonding_interfaces:
        for trap in bi.dsl_tilt.traps:
            bi_trap_labels.append(bi.label + '_tilt_' + trap[0].name + '_F')
        for trap in bi.dsl_tilt.traps:
            bi_trap_labels.append(bi.label + '_twist_' + trap[0].name + '_F')
    for voltage in df['applied_voltage'].values:
        bi_f_i = {}
        for trap_label in bi_trap_labels:
            try:
                df_i = df.loc[df['applied_voltage'] == voltage]
                bi_f_i[trap_label] = df_i[trap_label].values[0]
                print bi_f_i[trap_label]
            except KeyError:
                pass
        bi_f.append(bi_f_i)
    ani = Visual.BandsBendingAnimation(f,
                                       ax,
                                       diode,
                                       potential[i],
                                       df['applied_voltage'].values,
                                       df['diode_voltage'].values,
                                       z * 1e-6,
                                       bi_f,
                                       dopants_f[i],
                                       np.ones(len(potential[i])) *
                                       temperature,
                                       eV=True,
                                       draw_metal=True,
                                       label_bands=True,
                                       fancy_ticks=False,
                                       SchottkyEffect=False,
                                       draw_energies=False,
                                       interval=250)
    return ani
コード例 #3
0
def calculate(args):
    Si, Electrode, T, V_p, V_rb = args
    sample_data_dir = join(dirname(__file__), '03-data')
    db_name = '03_Au_nSi_BW_transient' + '_%02.2fVp_%02.2fVrb_%03.2fK' % (
        V_p, abs(V_rb), T) + '.db'
    db_name = join(sample_data_dir, db_name)
    MyProject = Project(db_name=db_name,
                        backend='sqlite',
                        hostname='',
                        overwrite=False)
    MyDiode = SchottkyDiode(MyProject,
                            'Au-Si_BW',
                            Electrode,
                            Si,
                            DeadLayer=1.5e-7,
                            L=5e-6)
    MyDiode.set_T(T)
    MyDiode.set_Va(V_p)

    type_sign = -1 if MyDiode.Semiconductor.dop_type == 'n' else 1
    Psi = Psi_approx(MyDiode.L, -(MyDiode.V_bi(eV=True) + type_sign * V_p),
                     0.0)

    Psi, E, z_nodes, rho_err_points, Vd, Vd_err, J, J_err, \
        BI_F, dopants_F, ic_id = Poisson.Reccurent_Poisson_solver(MyDiode, Psi, Vd_error=1e-6,
                                                                  equilibrium_filling=True, t=mp.inf,
                                                                  initial_condition_id=-1,
                                                                  rho_rel_err=Poisson_rel_err, max_iter=100,
                                                                  debug=False)

    #plt.plot(z_nodes, -Psi(z_nodes), 'r-o')
    #plt.show()

    MyDiode.set_Va(V_rb)
    Psi, E, z_nodes, rho_err_points, Vd, Vd_err, J, J_err, \
        BI_F, dopants_F, ic_id = Poisson.Reccurent_Poisson_solver(MyDiode, Psi, Vd_error=1e-6,
                                                                  equilibrium_filling=False, fast_traps=['Phosphorus'],
                                                                  t=0.0,
                                                                  initial_condition_id=ic_id,
                                                                  rho_rel_err=Poisson_rel_err, max_iter=100,
                                                                  debug=False)

    #plt.plot(z_nodes, -Psi(z_nodes), 'r-o')
    #plt.show()

    t_points, potential_t, field_d, z_t, diode_voltage_drop_t, current_density_t, \
        bonding_interfaces_f_t, dopants_f_t, last_state_id = Kinetics.traps_kinetics(MyDiode, ic_id,
                                                                                     1e-9, 10e-3, 100e-3,
                                                                                     fast_traps=['Phosphorus'],
                                                                                     rho_rel_err=Poisson_rel_err,
                                                                                     df_threshold=1e-2, debug=True)

    return [T, t_points, bonding_interfaces_f_t, dopants_f_t]
コード例 #4
0
def calculate(args):
    Si, Electrode, T, V_p = args
    sample_data_dir = join(dirname(__file__), '03-data')
    db_name = '03_Au_nSi_BW_transient' + '_%02.2fVp_%02.2fVrb_%03.2fK' % (
        V_p, abs(V_rb), T) + '.db'
    db_name = join(sample_data_dir, db_name)
    MyProject = Project(db_name=db_name,
                        backend='sqlite',
                        hostname='',
                        overwrite=False)
    MyDiode = SchottkyDiode(MyProject,
                            'Au-Si_BW',
                            Electrode,
                            Si,
                            DeadLayer=1.5e-7,
                            L=5e-6)
    MyDiode.set_T(T)
    MyDiode.set_Va(V_p)
    print T

    type_sign = -1 if MyDiode.Semiconductor.dop_type == 'n' else 1
    Psi = Psi_approx(MyDiode.L, -(MyDiode.V_bi(eV=True) + type_sign * V_p),
                     0.0)

    Psi, E, z_nodes, rho_err_points, Vd, Vd_err, J, J_err, \
        BI_F, dopants_F, ic_id = Poisson.Reccurent_Poisson_solver(MyDiode, Psi, Vd_error=1e-6,
                                                                  equilibrium_filling=True, t=mp.inf,
                                                                  initial_condition_id=-1,
                                                                  rho_rel_err=Poisson_rel_err, max_iter=100,
                                                                  debug=False)
    return db_name
コード例 #5
0
def calculate(args):
    Si, Electrode, T, V_p = args
    sample_data_dir = join(dirname(__file__), '03-data')
    db_name = '03_Au_nSi_BW_transient' + '_%02.2fVp_%02.2fVrb_%03.2fK' % (V_p, abs(V_rb), T) + '.db'
    db_name = join(sample_data_dir, db_name)
    MyProject = Project(db_name=db_name, backend='sqlite', hostname='', overwrite=False)
    MyDiode = SchottkyDiode(MyProject, 'Au-Si_BW', Electrode, Si, DeadLayer=1.5e-7, L=5e-6)
    MyDiode.set_T(T)
    MyDiode.set_Va(V_p)
    print T

    type_sign = -1 if MyDiode.Semiconductor.dop_type == 'n' else 1
    Psi = Psi_approx(MyDiode.L, -(MyDiode.V_bi(eV=True) + type_sign * V_p), 0.0)

    Psi, E, z_nodes, rho_err_points, Vd, Vd_err, J, J_err, \
        BI_F, dopants_F, ic_id = Poisson.Reccurent_Poisson_solver(MyDiode, Psi, Vd_error=1e-6,
                                                                  equilibrium_filling=True, t=mp.inf,
                                                                  initial_condition_id=-1,
                                                                  rho_rel_err=Poisson_rel_err, max_iter=100,
                                                                  debug=False)
    return db_name
コード例 #6
0
ファイル: dc_experiments.py プロジェクト: bond-anton/Schottky
def bb_animation(f, ax, temperature, z, data, dopants_f, potential):
    db_name = prefix + '_dc_%03.2fK.db' % temperature
    db_name = join(data_dir, db_name)
    project = Project(db_name=db_name, backend='sqlite', hostname='', overwrite=False)
    diode = SchottkyDiode(project, 'Au-nSi_BW', electrode, silicon, DeadLayer=1.5e-7, L=5e-6)
    diode.set_T(temperature)
    for i, record in enumerate(data):
        current_temperature = record.keys()[0]
        if current_temperature == temperature:
            df = pd.DataFrame(record[temperature])
            break
    print i
    print potential[i]
    bi_trap_labels = []
    bi_f = []
    for bi in diode.Semiconductor.bonding_interfaces:
        for trap in bi.dsl_tilt.traps:
            bi_trap_labels.append(bi.label + '_tilt_' + trap[0].name + '_F')
        for trap in bi.dsl_tilt.traps:
            bi_trap_labels.append(bi.label + '_twist_' + trap[0].name + '_F')
    for voltage in df['applied_voltage'].values:
        bi_f_i = {}
        for trap_label in bi_trap_labels:
            try:
                df_i = df.loc[df['applied_voltage'] == voltage]
                bi_f_i[trap_label] = df_i[trap_label].values[0]
                print bi_f_i[trap_label]
            except KeyError:
                pass
        bi_f.append(bi_f_i)
    ani = Visual.BandsBendingAnimation(f, ax, diode, potential[i],
                                       df['applied_voltage'].values,
                                       df['diode_voltage'].values,
                                       z * 1e-6,
                                       bi_f, dopants_f[i],
                                       np.ones(len(potential[i])) * temperature,
                                       eV=True, draw_metal=True, label_bands=True,
                                       fancy_ticks=False, SchottkyEffect=False, draw_energies=False,
                                       interval=250)
    return ani
コード例 #7
0
def calculate(args):
    Si, Electrode, T, V_p, V_rb = args
    sample_data_dir = join(dirname(__file__), '03-data')
    db_name = '03_Au_nSi_BW_transient' + '_%02.2fVp_%02.2fVrb_%03.2fK' % (V_p, abs(V_rb), T) + '.db'
    db_name = join(sample_data_dir, db_name)
    MyProject = Project(db_name=db_name, backend='sqlite', hostname='', overwrite=False)
    MyDiode = SchottkyDiode(MyProject, 'Au-Si_BW', Electrode, Si, DeadLayer=1.5e-7, L=5e-6)
    MyDiode.set_T(T)
    MyDiode.set_Va(V_p)

    type_sign = -1 if MyDiode.Semiconductor.dop_type == 'n' else 1
    Psi = Psi_approx(MyDiode.L, -(MyDiode.V_bi(eV=True) + type_sign * V_p), 0.0)

    Psi, E, z_nodes, rho_err_points, Vd, Vd_err, J, J_err, \
        BI_F, dopants_F, ic_id = Poisson.Reccurent_Poisson_solver(MyDiode, Psi, Vd_error=1e-6,
                                                                  equilibrium_filling=True, t=mp.inf,
                                                                  initial_condition_id=-1,
                                                                  rho_rel_err=Poisson_rel_err, max_iter=100,
                                                                  debug=False)

    #plt.plot(z_nodes, -Psi(z_nodes), 'r-o')
    #plt.show()

    MyDiode.set_Va(V_rb)
    Psi, E, z_nodes, rho_err_points, Vd, Vd_err, J, J_err, \
        BI_F, dopants_F, ic_id = Poisson.Reccurent_Poisson_solver(MyDiode, Psi, Vd_error=1e-6,
                                                                  equilibrium_filling=False, fast_traps=['Phosphorus'],
                                                                  t=0.0,
                                                                  initial_condition_id=ic_id,
                                                                  rho_rel_err=Poisson_rel_err, max_iter=100,
                                                                  debug=False)

    #plt.plot(z_nodes, -Psi(z_nodes), 'r-o')
    #plt.show()

    t_points, potential_t, field_d, z_t, diode_voltage_drop_t, current_density_t, \
        bonding_interfaces_f_t, dopants_f_t, last_state_id = Kinetics.traps_kinetics(MyDiode, ic_id,
                                                                                     1e-9, 10e-3, 100e-3,
                                                                                     fast_traps=['Phosphorus'],
                                                                                     rho_rel_err=Poisson_rel_err,
                                                                                     df_threshold=1e-2, debug=True)

    return [T, t_points, bonding_interfaces_f_t, dopants_f_t]
コード例 #8
0
                               fancy_labels=False)
plt.show()

#Si, Electrode, T, V_p, V_rb = args
sample_data_dir = join(dirname(__file__), '01-data')
db_name = '01_Au_nSi_BW_transient' + '_%02.2fVp_%02.2fVrb_%03.2fK' % (
    V_p, abs(V_rb), T) + '.db'
db_name = join(sample_data_dir, db_name)
print(db_name)
MyProject = Project(db_name=db_name,
                    backend='sqlite',
                    hostname='',
                    overwrite=False)
MyDiode = SchottkyDiode(MyProject,
                        'Au-Si_BW',
                        Electrode,
                        Si,
                        DeadLayer=1.5e-7,
                        L=5e-6)
MyDiode.set_T(T)
MyDiode.set_Va(V_p)

type_sign = -1 if MyDiode.Semiconductor.dop_type == 'n' else 1
Psi = Psi_approx(MyDiode.L, -(MyDiode.V_bi(eV=True) + type_sign * V_p), 0.0)

Psi, E, z_nodes, rho_err_points, Vd, Vd_err, J, J_err, \
    BI_F, dopants_F, ic_id = Poisson.Reccurent_Poisson_solver(MyDiode, Psi, Vd_error=1e-6,
                                                              equilibrium_filling=True, t=mp.inf,
                                                              initial_condition_id=-1,
                                                              rho_rel_err=Poisson_rel_err, max_iter=100,
                                                              debug=False)
z_nodes = np.linspace(0, 3e-6, num=500, dtype=np.float)
コード例 #9
0
Psi_list = [[] for i in range(T_range.size)]
Poisson_rel_err = 1e-1

T = 80

_, ax = plt.subplots()
BW.energy_distribution_diagram(ax, T, Si, electron_volts=True, fancy_labels=False)
plt.show()

# Si, Electrode, T, V_p, V_rb = args
sample_data_dir = join(dirname(__file__), "01-data")
db_name = "01_Au_nSi_BW_transient" + "_%02.2fVp_%02.2fVrb_%03.2fK" % (V_p, abs(V_rb), T) + ".db"
db_name = join(sample_data_dir, db_name)
print db_name
MyProject = Project(db_name=db_name, backend="sqlite", hostname="", overwrite=False)
MyDiode = SchottkyDiode(MyProject, "Au-Si_BW", Electrode, Si, DeadLayer=1.5e-7, L=5e-6)
MyDiode.set_T(T)
MyDiode.set_Va(V_p)

type_sign = -1 if MyDiode.Semiconductor.dop_type == "n" else 1
Psi = Psi_approx(MyDiode.L, -(MyDiode.V_bi(eV=True) + type_sign * V_p), 0.0)

Psi, E, z_nodes, rho_err_points, Vd, Vd_err, J, J_err, BI_F, dopants_F, ic_id = Poisson.Reccurent_Poisson_solver(
    MyDiode,
    Psi,
    Vd_error=1e-6,
    equilibrium_filling=True,
    t=mp.inf,
    initial_condition_id=-1,
    rho_rel_err=Poisson_rel_err,
    max_iter=100,
コード例 #10
0
def calculate_for_temperature(args):
    silicon, electrode, temperature, voltage_range = args
    print temperature
    db_name = prefix + '_dc_%03.2fK.db' % temperature
    db_name = join(data_dir, db_name)
    project = Project(db_name=db_name,
                      backend='sqlite',
                      hostname='',
                      overwrite=False)
    diode = SchottkyDiode(project,
                          'Au-nSi_BW',
                          electrode,
                          silicon,
                          DeadLayer=1.5e-7,
                          L=5e-6)
    diode.set_T(temperature)
    potential = []
    field = []
    diode_voltage = []
    diode_voltage_error = []
    current_density = []
    current_density_error = []
    bonding_interface_f = {}
    dopants_f_sum = {}
    z = []
    dopants_f = []
    for voltage in voltage_range:
        diode.set_Va(voltage)
        type_sign = -1 if silicon.dop_type == 'n' else 1
        potential_i = Psi_approx(diode.L,
                                 -(diode.V_bi(eV=True) + type_sign * voltage),
                                 0.0)
        potential_i, field_i, z_nodes, rho_err_points, \
            diode_voltage_i, diode_voltage_error_i, \
            current_density_i, current_density_error_i, \
            bonding_interface_f_i, dopants_f_i, \
            measurement_id = Poisson.Reccurent_Poisson_solver(diode, potential_i, Vd_error=1e-6,
                                                              equilibrium_filling=True, t=mp.inf,
                                                              initial_condition_id=-1,
                                                              rho_rel_err=poisson_relative_error, max_iter=100,
                                                              debug=False)
        potential.append(potential_i)
        field.append(field_i)
        diode_voltage.append(diode_voltage_i)
        diode_voltage_error.append(diode_voltage_error_i)
        current_density.append(current_density_i)
        current_density_error.append(current_density_i)
        z.append(z_nodes)
        dopants_f.append(dopants_f_i)
        for trap_key in bonding_interface_f_i.keys():
            try:
                bonding_interface_f[trap_key].append(
                    bonding_interface_f_i[trap_key])
            except KeyError:
                bonding_interface_f[trap_key] = [
                    bonding_interface_f_i[trap_key]
                ]
        for dopant_key in dopants_f_i.keys():
            try:
                dopants_f_sum[dopant_key].append(
                    np.sum(dopants_f_i[dopant_key]))
            except KeyError:
                dopants_f_sum[dopant_key] = [np.sum(dopants_f_i[dopant_key])]

    data = {
        temperature: {
            'applied_voltage': voltage_range,
            'diode_voltage': diode_voltage,
            'diode_voltage_error': diode_voltage_error,
            'current_density': current_density,
            'current_density_error': current_density_error
        }
    }
    for trap_key in bonding_interface_f.keys():
        data[temperature][trap_key] = bonding_interface_f[trap_key]
    for dopant_key in dopants_f_sum.keys():
        data[temperature][dopant_key + '_sum'] = dopants_f_sum[dopant_key]
    return potential, field, data, z, dopants_f