예제 #1
0
def plot_for(z, d):
    cs = CalcSimWrapper()
    ds = InputDatastore('../InputData', 'NiCu', 973)
    ce = ComparisonEngine(cs)
    D = ds.interpolated_diffusivity(10001)
    R = ds.interpolated_resistivity(10001)

    dx = 0.5 * 35e-8
    ndx = 200
    dt = 0.01
    ndt = int(2 * 60 * 60 / 0.01)

    init = ones(ndx)
    init[ndx/2:] = 0

    x = linspace(0, 25, 200)

    ddict = ds.interpolated_experiment_dict(x)

    for I in ddict.keys():
        if I == 0:
            dv = 1
        else:
            dv = d
        r = cs.emigration_factor(z, I, 973)
        mdl = cs.calc_simulation(D, R, init, ndt, dt, dx, r, dv)
        ce = ComparisonEngine(cs)
        lsq, shfit = ce.calibrate(mdl, ddict[I])
        smdl = ce.shift_data(mdl)
        plot(x, ddict[I], label=str.format('Exper. (I={} A/cm^2)', I/100/100))
        plot(x, smdl, label=str.format('Model. (I={} A/cm^2)', I/100/100))

    legend(loc=3)
    show()
예제 #2
0
def basic_test():
    cs = CalcSimWrapper()
    ds = InputDatastore('../InputData', 'NiCu', 973)
    ce = ComparisonEngine(cs)

    D = ds.interpolated_diffusivity(10001)
    R = ds.interpolated_resistivity(10001)

    dx = 0.5*35e-8
    ndx = 200
    dt = cs.optimum_dt(dx, D, 1)
    ndt = cs.num_sim_steps(dt, 2 * 60 * 60)

    init = np.ones(ndx)
    init[ndx/2:] = 0

    res = cs.calc_simulation(D, R, init, ndt, dt, dx, 0, 1)
    res = cs.calc_simulation(D, R, init, ndt, dt, dx, 0, 1)
    x = np.linspace(0, dx * ndx, num=ndx)
    plot(x, res)
    show()
예제 #3
0
from calcsim import CalcSimWrapper
from datastore import InputDatastore
import numpy as np
from pylab import *

ds = InputDatastore('../InputData', 'NiCu', 973)
cs = CalcSimWrapper()

D = ds.interpolated_diffusivity(10001)
R = ds.interpolated_resistivity(10001)

dx = 0.5*35e-8
ndx = 200
dt = cs.optimum_dt(dx, D, 1)
ndt = cs.num_sim_steps(dt, 2 * 60 * 60)

init = np.ones(ndx)
init[ndx/2:] = 0

res = cs.calc_simulation(D, R, init, ndt, dt, dx, 0, 1)
x = np.linspace(0, dx * ndx, num=ndx)
plot(x, res)
show()
예제 #4
0
#!/bin/bash

from datastore import InputDatastore
from calcsim import CalcSimWrapper 
from numpy import *
from scipy.optimize import *
from expercomparison import ComparisonEngine
from itertools import product

ds = InputDatastore('../InputData', 'NiCu')
x = linspace(0, 25, num=100)
fedict = ds.edict_for_direction('forward')
redict = ds.edict_for_direction('reverse')
fexpr = ds.interpolated_experiment_dict(x, fedict)
rexpr = ds.interpolated_experiment_dict(x, redict)
diffusivity = ds.interpolated_diffusivity(1001, 973)
resistivity = ds.interpolated_resistivity(1001, 973)

cs = CalcSimWrapper()
ce = ComparisonEngine(cs)
initcond = ones(100)
initcond[50:] = 0


dt = 0.05
ndt = int(2 * 60 * 60 / 0.05)
dx = 25e-6 / 100

def make_objective(I, direction):
    if direction == 'forward':
        exprd = fexpr[I]
예제 #5
0
aparser = ArgumentParser(description='Searches for the optimum vacancy concentration multiplier')
aparser.add_argument('--inputdata', metavar='DIR', type=str, required=True,
                     help='Directory containing input data')
aparser.add_argument('--outputdir', metavar='DIR', type=str, default='.',
                     help='Directory to stash the output results (plots, tables etc.)')
aparser.add_argument('--dataprefix', metavar='PREFIX', type=str, default='NiCu',
                     help='Prefix to data files')
aparser.add_argument('--temperature', type=float, default=973,
                     help='Temperature in K')

args = aparser.parse_args()

accelcs = CalcSimWrapper()

dstore = InputDatastore(args.inputdata, args.dataprefix)
x = np.linspace(0, 25, num=100)
init_cond = np.ones(100)
init_cond[50:] = 0
dt = 0.05
ndt = int(2 * 60 * 60 / 0.05)
dx = 25e-6 / 100


def quicksim(z, cvf, I, exper, direction):
    ce = ComparisonEngine(accelcs)
    if direction == 'reverse':
        I = -np.abs(I)
    else:
        I = np.abs(I)
    diffusivity = dstore.interpolated_diffusivity(10001, args.temperature, precise=True)
예제 #6
0
from calcsimexecutor import CalcSimExecutor
from datastore import InputDatastore
from pylab import *
import defaults
from expercomparison import ComparisonEngine

dstore = InputDatastore("../InputData", "NiCu")

z = 1875
I = 3000
cvfunc = lambda ID: 0.0014 * ID

ioff()
figure()
for T in (1000, 1100, 1200):
    Davg = dstore.interpolated_diffusivity(1001, T).mean()
    n_secs_sim = 1e-12 / Davg
    ndt = int(n_secs_sim / defaults.simulation_dt)
    cse = CalcSimExecutor(dstore, T)

    current_whole = cse.compute(z, cvfunc(I), I, "forward")
    nocurrent = cse.compute(0, 1, 0, "forward")[:, 1]

    x = current_whole[:, 0]
    current = current_whole[:, 1]

    shiftengine = ComparisonEngine(cse.cs)
    lsq, _ = shiftengine.calibrate(current, nocurrent)
    s_current = shiftengine.shift_data(current)

    plot(x, s_current, label="{}K, current".format(T))
예제 #7
0
                     help='Directory containing input data')
aparser.add_argument('--dataprefix', metavar='PREFIX', type=str, default='NiCu',
                     help='Prefix to data files')
aparser.add_argument('--output', metavar='FILE', type=str, required=True,
                     help='File to output to')
aparser.add_argument('--z', type=float, required=True,
                     help='Effective valence')
aparser.add_argument('--cvf', type=float, required=True,
                     help='Vacancy concentration factor')
aparser.add_argument('--direction', type=str, default='forward',
                     help='Direction of application of current')

args = aparser.parse_args()

accelcs = CalcSimWrapper()
dstore = InputDatastore(args.inputdata, args.dataprefix, 973, args.direction)
ce = ComparisonEngine(accelcs)

x = np.linspace(0, 25, num=100)
exper_data = dstore.interpolated_experiment_dict(x)[args.current]
diffusivity = dstore.interpolated_diffusivity(10001)
resistivity = dstore.interpolated_resistivity(10001)
init_cond = np.ones(100)
init_cond[50:] = 0

emigration_T = 973
dt = 0.05
ndt = int(2 * 60 * 60 / 0.05)
dx = 25e-6 / 100

r = accelcs.emigration_factor(args.z, args.current * 100 * 100, emigration_T)
예제 #8
0
    required=True,
    help="Limits of the effective valence search (up to but not including ZMAX)",
)
aparser.add_argument(
    "--cvflim",
    metavar=("CVFMIN", "CVFMAX", "CVFSTEP"),
    nargs=3,
    type=float,
    required=True,
    help="Limits of the vacancy concentration multiplier search (up to but not including CVFSTEP)",
)
aparser.add_argument("--resume", action="store_true", default=False, help="Resume using .csv files in outputdir")

args = aparser.parse_args()

dstore = InputDatastore(args.inputdata, args.dataprefix)
accelcs = CalcSimWrapper()

zrange = np.arange(args.zlim[0], args.zlim[1], args.zlim[2])
cvfrange = np.arange(args.cvflim[0], args.cvflim[1], args.cvflim[2])

fresults = dict()
rresults = dict()

np.savetxt(path.join(args.outputdir, "zrange.csv"), zrange, delimiter=",")
np.savetxt(path.join(args.outputdir, "cvfrange.csv"), cvfrange, delimiter=",")

if args.resume:
    files = [
        path.join(args.outputdir, f) for f in os.listdir(args.outputdir) if path.isfile(path.join(args.outputdir, f))
    ]