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()
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()
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()
#!/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]
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)
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))
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)
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)) ]