Esempio n. 1
0
def test_getstates(basepath, confname):

    # Config data load
    path = basepath + 'battsimpy/' + confname
    cfr = confreader.reader(path)
    RunInput = cfr.conf_data

    # Initialize the model
    f1d = full_1d.FULL_1D(RunInput)
    p = f1d.pars

    # Create a dummy x and z
    csn0, csp0, ce0, T0 = 0.5 * p.c_s_n_max, 0.5 * p.c_s_p_max, 1200., 298.15
    x = numpy.concatenate((csn0 * numpy.ones(p.Nn * p.SolidOrder_n),
                           csp0 * numpy.ones(p.Np * p.SolidOrder_p),
                           ce0 * numpy.ones(p.Nce), (T0, )))

    phisn0, phisp0, ien0, iep0, phie0, jn0, jp0 = 0.05, 3.8, 0.1, 0.2, 0.3, 0.4, 0.5
    z = numpy.concatenate((phisn0 * numpy.ones(p.Nn),
                           phisp0 * numpy.ones(p.Np), ien0 * numpy.ones(p.Nn),
                           iep0 * numpy.ones(p.Np), phie0 * numpy.ones(p.Nce),
                           jn0 * numpy.ones(p.Nn), jp0 * numpy.ones(p.Np)))

    # Run the function
    states = f1d.get_states(x, z)

    #    x = [c_ss, c_avg]
    #    names = ['c_ss', 'c_avg']
    for k in states:
        print '#########################################'
        print '~~~  ', k, '  ~~~'
        print states[k]
        print
Esempio n. 2
0
def test_getEdgeEtas(basepath, confname):

    # Config data load
    path = basepath + 'battsimpy/' + confname
    cfr = confreader.reader(path)
    RunInput = cfr.conf_data

    # Initialize the model
    f1d = full_1d.FULL_1D(RunInput)
    p = f1d.pars

    #
    T0 = 298.15
    #    io = [10., 1.]
    aFRT_n, aFRT_p = 0.5 * p.Faraday / (p.R * T0), 0.5 * p.Faraday / (p.R * T0)
    Rf = 0.0
    j_rxn0, j_rxnN = (1. / (p.Area * (p.a_s_p * p.L_p))) / p.Faraday, (
        1. / (p.Area * (p.a_s_p * p.L_p))) / p.Faraday * 1.1
    eta1, etaNm1 = (1. / aFRT_n) * math.asinh(
        p.Faraday / (2 * io[0]) * j_rxn0), (1. / aFRT_n) * math.asinh(
            p.Faraday / (2 * io[-1]) * j_rxnN)

    eta0, etaN = f1d.getEdgeEtas(io, aFRT_n, aFRT_p, Rf, j_rxn0, j_rxnN, eta1,
                                 etaNm1)

    x = [eta0, eta1, etaNm1, etaN]
    names = ['eta0', 'eta1', 'etaNm1', 'etaN']
    for i, mat in enumerate(x):
        print '#########################################'
        print '~~~  ', names[i], '  ~~~'
        print mat
        print
Esempio n. 3
0
def test_elytediff(basepath, confname):

    # Config data load
    path = basepath + 'battsimpy/' + confname
    cfr = confreader.reader(path)
    RunInput = cfr.conf_data

    # Initialize the model
    f1d = full_1d.FULL_1D(RunInput)
    p = f1d.pars

    # Execute the cce function
    cer = 1220.
    #    c_e = numpy.ones( p.Nce, dtype='d' )*cer
    c_e = numpy.linspace(.9, 1.1, num=p.Nce, dtype='d') * cer
    i_e = numpy.zeros_like(c_e, dtype='d')

    T = 298.15

    Cur = 0.0

    f1d.cce(c_e)

    c_e_dot, cemats, ce_bcs, c_ex = f1d.electrolyte_diffusion(c_e, i_e, Cur, T)

    x = [c_e_dot, cemats, ce_bcs, c_ex]
    names = ['c_e_dot', 'cemats', 'ce_bcs', 'c_ex']
    #    x = [c_ss, c_avg]
    #    names = ['c_ss', 'c_avg']
    for i, mat in enumerate(x):
        print '#########################################'
        print '~~~  ', names[i], '  ~~~'
        print mat
        print
Esempio n. 4
0
def test_phiemats(basepath, confname):

    # Config data load
    path = basepath + 'battsimpy/' + confname
    cfr = confreader.reader(path)
    RunInput = cfr.conf_data

    # Initialize the model
    f1d = full_1d.FULL_1D(RunInput)
    p = f1d.pars

    # Execute the cce function
    cer = 1220.
    c_e = numpy.ones(p.Nce) * cer
    cex = numpy.ones(p.Nce + 4) * cer
    cebcs = numpy.ones(4) * cer
    T = 298.15

    f1d.cce(c_e)

    F1, F2, F3, C_phie, C_phie_cex, phiemats = f1d.phi_e_mats(
        c_e, cebcs, cex, T)

    x = [F1, F2, F3, C_phie, C_phie_cex]
    names = ['F1', 'F2', 'F3', 'Cphie', 'Cphiex']
    for i, mat in enumerate(x):
        print '#########################################'
        print '~~~  ', names[i], '  ~~~'
        print mat
        print
Esempio n. 5
0
def test_daesystem(basepath, confname):

    # Config data load
    path = basepath + 'battsimpy/' + confname
    cfr = confreader.reader(path)
    RunInput = cfr.conf_data

    # Initialize the model
    f1d = full_1d.FULL_1D(RunInput)
    p = f1d.pars

    T = 298.15

    Cur = 0.0

    # Create a dummy x and z
    csn0, csp0, ce0, T0 = p.theta_n0 * p.c_s_n_max, p.theta_p0 * p.c_s_p_max, 1220., T
    c_e = ce0 * numpy.ones(p.Nce, dtype='d')
    #    csn = csn0*numpy.ones(p.Nn*p.SolidOrder_n, dtype='d')
    #    csp = csp0*numpy.ones(p.Np*p.SolidOrder_p, dtype='d')
    csn = numpy.linspace((1.0 * p.theta_n0) * p.c_s_n_max,
                         (1.0 * p.theta_n0) * p.c_s_n_max,
                         num=p.Nn * p.SolidOrder_n,
                         dtype='d')
    csp = numpy.linspace((1.0 * p.theta_p0) * p.c_s_p_max,
                         (1.0 * p.theta_p0) * p.c_s_p_max,
                         num=p.Np * p.SolidOrder_p,
                         dtype='d')
    x = numpy.concatenate((csn, csp, c_e, (T0, )))

    print '    x_p0', '       x_n0'
    print p.theta_p0, p.theta_n0

    print csn[0:p.Nn] / p.c_s_n_max

    Un0 = batteqns.refPotential(p.Udat_n, csn[0:p.Nn] / p.c_s_n_max, T)
    Up0 = batteqns.refPotential(p.Udat_p, csp[0:p.Np] / p.c_s_p_max, T)

    print '     Up0', '       Un0'
    print Up0, Un0

    phisn0, phisp0, ien0, iep0, phie0, jn0, jp0 = Un0, Up0, 0.0, 0.0, 0.0, 0.0, 0.0
    z = numpy.concatenate(
        (phisn0, phisp0, ien0 * numpy.ones(p.Nn, dtype='d'),
         iep0 * numpy.ones(p.Np, dtype='d'),
         phie0 * numpy.ones(p.Nce, dtype='d'),
         jn0 * numpy.ones(p.Nn, dtype='d'), jp0 * numpy.ones(p.Np, dtype='d')))

    f1d.cce(c_e)

    f, g = f1d.dae_system(x, z, Cur, get_derivs=1)

    x = [f, g]
    names = ['f', 'g']
    for i, mat in enumerate(x):
        print '#########################################'
        print '~~~  ', names[i], '  ~~~'
        print mat
        print
Esempio n. 6
0
def params_testing(basepath, confname):
    """
    Checks to see that the buildpars method in params will run. Does not do anything
    to ensure the correctness of the data
    """
    # Config data load
    path = basepath + 'battsimpy/' + confname
    cfr = confreader.reader(path)
    RunInput = cfr.conf_data

    Pdat = {'RunInput': RunInput}
    V_init = 4.1

    a = params.params()
    a.buildpars(V_init, Pdat)
Esempio n. 7
0
def test_cce(basepath, confname):

    # Config data load
    path = basepath + 'battsimpy/' + confname
    cfr = confreader.reader(path)
    RunInput = cfr.conf_data

    # Initialize the model
    f1d = full_1d.FULL_1D(RunInput)
    p = f1d.pars

    # Execute the cce function
    c_e = numpy.ones(p.Nce) * 1220.
    f1d.cce(c_e)
    print p.C_ce
Esempio n. 8
0
def test_init(basepath, confname):

    # Config data load
    path = basepath + 'battsimpy/' + confname
    cfr = confreader.reader(path)
    RunInput = cfr.conf_data

    f1d = full_1d.FULL_1D(RunInput)

    for key in f1d.varinf:
        print '#########################################'
        print '~~~  ', key, '  ~~~'
        print
        for subkey in f1d.varinf[key]:
            print '\t~~~  ', subkey, '  ~~~'
            print '\t', f1d.varinf[key][subkey]
            print
Esempio n. 9
0
def test_soldiff(basepath, confname):

    # Config data load
    path = basepath + 'battsimpy/' + confname
    cfr = confreader.reader(path)
    RunInput = cfr.conf_data

    # Initialize the model
    f1d = full_1d.FULL_1D(RunInput)
    p = f1d.pars

    # Setup the solid_diffusion function inputs
    elec = 'cathode'
    if elec == 'cathode':
        x, r = p.Np, p.SolidOrder_p
        csmax = p.c_s_p_max
        asf = p.a_s_p * p.L_p
        csdat, Dsdat = p.csdat_p, p.Dsdat_p
        theta_0 = 0.3596914899
    elif elec == 'anode':
        x, r = p.Nn, p.SolidOrder_n
        csmax = p.c_s_n_max
        asf = p.a_s_n * p.L_n
        csdat, Dsdat = p.csdat_n, p.Dsdat_n
        theta_0 = 0.83058516056702

    cs_sz = x * r
    csr = theta_0 * csmax
    c_s = numpy.ones(cs_sz, dtype='d') * csr
    j_rxn = (1. / (p.Area * (asf))) / p.Faraday * numpy.zeros(x, dtype='d')
    msz = (x, r)
    T = 298.15

    c_s_dot, c_ss, c_avg, As, Bs = f1d.solid_diffusion(c_s, j_rxn, T, csdat,
                                                       Dsdat, msz)

    x = [c_s_dot[0:p.Np], c_ss, c_avg, As[:, :, 0], Bs[:, 0]]
    names = ['c_s_dot', 'c_ss', 'c_avg', 'As', 'Bs']
    #    x = [c_ss, c_avg]
    #    names = ['c_ss', 'c_avg']
    for i, mat in enumerate(x):
        print '#########################################'
        print '~~~  ', names[i], '  ~~~'
        print mat
        print
Esempio n. 10
0
def test_thermFactors(basepath, confname):

    # Config data load
    path = basepath + 'battsimpy/' + confname
    cfr = confreader.reader(path)
    RunInput = cfr.conf_data

    Pdat = {'RunInput': RunInput}
    V_init = 4.1

    p = params.params()
    p.buildpars(V_init, Pdat)

    plt.figure(1)
    plt.plot(p.Udat_p['x'], p.Udat_p['activity'], label='cathode')
    plt.plot(p.Udat_n['x'], p.Udat_n['activity'], label='anode')
    plt.legend()
    plt.show()
Esempio n. 11
0
def test_precsAmats(basepath, confname):

    # Config data load
    path = basepath + 'battsimpy/' + confname
    cfr = confreader.reader(path)
    RunInput = cfr.conf_data

    Pdat = {'RunInput': RunInput}
    V_init = 4.1

    p = params.params()
    p.buildpars(V_init, Pdat)

    x = [p.A1n, p.A2n, p.A1p, p.A2p]
    names = ['A1n', 'A2n', 'A1p', 'A2p']
    for i, mat in enumerate(x):
        print '#########################################'
        print '~~~  ', names[i], '  ~~~'
        print mat
        print
Esempio n. 12
0
def test_cspre(basepath, confname):

    # Config data load
    path = basepath + 'battsimpy/' + confname
    cfr = confreader.reader(path)
    RunInput = cfr.conf_data

    # Initialize the model
    f1d = full_1d.FULL_1D(RunInput)

    # Execute the phi_s_mats function
    p = f1d.pars

    x = [p.A_csn_pre, p.B_csn_pre, p.A_csp_pre, p.B_csp_pre]
    names = ['An', 'Bn', 'Ap', 'Bp']
    for i, mat in enumerate(x):
        print '#########################################'
        print '~~~  ', names[i], '  ~~~'
        print mat
        print
Esempio n. 13
0
def test_jacpre(basepath, confname):

    # Config data load
    path = basepath + 'battsimpy/' + confname
    cfr = confreader.reader(path)
    RunInput = cfr.conf_data

    # Initialize the model
    f1d = full_1d.FULL_1D(RunInput)

    # Execute the jac_pre function
    f1d.jac_pre()
    p = f1d.pars

    x = [p.f_x, p.f_z, p.g_x, p.g_z]
    names = ['fx', 'fz', 'gx', 'gz']
    for i, mat in enumerate(x):
        print '#########################################'
        print '~~~  ', names[i], '  ~~~'
        print mat
        print
Esempio n. 14
0
def test_fullocp(basepath, confname):

    # Config data load
    path = basepath + 'battsimpy/' + confname
    cfr = confreader.reader(path)
    RunInput = cfr.conf_data

    Pdat = {'RunInput': RunInput}
    V_init = 4.1

    p = params.params()
    p.buildpars(V_init, Pdat)

    print 'xn0:', p.theta_n0
    print 'xp0:', p.theta_p0

    plt.figure(1)
    plt.plot(p.xs, p.Up, label='U_p')
    plt.plot(p.xs, p.Ua, label='U_n')
    plt.plot(p.xs, p.OCP, label='OCP')
    plt.legend()
    plt.show()
Esempio n. 15
0
import confreader

path = '/Users/mk/Desktop/battsim/battsimpy/data/Model_v1/Model_Pars/des_prop.txt'
#path = '/Users/mk/Desktop/battsim/battsimpy/testConf.conf'

testdat = confreader.reader(path)

print testdat.conf_data
Esempio n. 16
0
def test_cnsolver(basepath, confname):

    # Config data load
    path = basepath + 'battsimpy/' + confname
    cfr = confreader.reader(path)
    RunInput = cfr.conf_data

    # Initialize the model
    f1d = full_1d.FULL_1D(RunInput)
    p = f1d.pars

    T = 298.15

    Cur = 0.0

    # Create a dummy x and z
    csn0, csp0, ce0, T0 = p.theta_n0 * p.c_s_n_max, p.theta_p0 * p.c_s_p_max, 1220., T
    c_e = ce0 * numpy.ones(p.Nce, dtype='d')
    #    csn = csn0*numpy.ones(p.Nn*p.SolidOrder_n, dtype='d')
    #    csp = csp0*numpy.ones(p.Np*p.SolidOrder_p, dtype='d')
    csn = numpy.linspace((1.0 * p.theta_n0) * p.c_s_n_max,
                         (1.0 * p.theta_n0) * p.c_s_n_max,
                         num=p.Nn * p.SolidOrder_n,
                         dtype='d')
    csp = numpy.linspace((1.0 * p.theta_p0) * p.c_s_p_max,
                         (1.0 * p.theta_p0) * p.c_s_p_max,
                         num=p.Np * p.SolidOrder_p,
                         dtype='d')
    x = numpy.concatenate((csn, csp, c_e, (T0, )))

    #    print '    x_p0','       x_n0'
    #    print p.theta_p0, p.theta_n0

    #    print csn[0:p.Nn]/p.c_s_n_max

    Un0 = batteqns.refPotential(p.Udat_n, csn[0:p.Nn] / p.c_s_n_max, T)
    Up0 = batteqns.refPotential(p.Udat_p, csp[0:p.Np] / p.c_s_p_max, T)
    #
    #    print '     Up0','       Un0'
    #    print Up0, Un0

    phisn0, phisp0, ien0, iep0, phie0, jn0, jp0 = Un0, Up0, 0.0, 0.0, 0.0, 0.0, 0.0
    z = numpy.concatenate(
        (phisn0, phisp0, ien0 * numpy.ones(p.Nn, dtype='d'),
         iep0 * numpy.ones(p.Np, dtype='d'),
         phie0 * numpy.ones(p.Nce, dtype='d'),
         jn0 * numpy.ones(p.Nn, dtype='d'), jp0 * numpy.ones(p.Np, dtype='d')))

    f1d.cce(c_e)

    Cur_vec = numpy.array([Cur, Cur, Cur], dtype='d')

    x_nxtf, z_nxtf, newtonStats = f1d.cn_solver(x, z, Cur_vec)

    states = f1d.get_states(x_nxtf, z_nxtf)

    plt.figure(1)
    plt.plot(states['phi_e'])
    plt.ylim([-1, 1])
    #    plt.plot(states['c_e'])
    #    plt.ylim([1219,1221])
    plt.show()

    x = [x_nxtf, z_nxtf, newtonStats]
    names = ['x_nxtf', 'z_nxtf', 'newtonStats']
    for i, mat in enumerate(x):
        print '#########################################'
        print '~~~  ', names[i], '  ~~~'
        print mat
        print