Пример #1
0
def testAnalytCylDifn(testDir, dirDict):
    """ Analytical test for diffusion in a cylinder """
    shutil.copy(osp.join(dirDict["baseConfig"], "params_system.cfg"), testDir)
    shutil.copy(osp.join(dirDict["baseConfig"], "params_c.cfg"), testDir)
    psys = osp.join(testDir, "params_system.cfg")
    ptrode = osp.join(testDir, "params_c.cfg")
    P_s = IO.get_config(psys)
    P_s.set("Sim Params", "profileType", "CV")
    P_s.set("Sim Params", "Vset", "0.10")
    P_s.set("Sim Params", "tend", "1e+6")
    P_s.set("Sim Params", "tsteps", "1800")
    P_s.set("Sim Params", "relTol", "1e-7")
    P_s.set("Sim Params", "tramp", "1e-6")
    P_s.set("Particles", "mean_c", "100e-9")
    P_s.set("Particles", "mean_c", "100e-9")
    P_s.set("Particles", "cs0_c", "0.5")
    IO.write_config_file(P_s, psys)
    P = IO.get_config(ptrode)
    P.set("Particles", "type", "diffn")
    P.set("Particles", "discretization", "3e-10")
    P.set("Particles", "shape", "cylinder")
    P.set("Material", "muRfunc", "testIS_ss")
    P.set("Material", "D", "1e-20")
    P.set("Reactions", "rxnType", "BV_raw")
    P.set("Reactions", "k0", "1e+1")
    IO.write_config_file(P, ptrode)
    main.main(psys, keepArchive=False)
    shutil.move(dirDict["simOut"], testDir)
Пример #2
0
def test017(testDir, dirDict, pflag):
    """ test CV continuation """
    shutil.copy(osp.join(dirDict["baseConfig"], "params_system.cfg"), testDir)
    shutil.copy(osp.join(dirDict["baseConfig"], "params_c.cfg"), testDir)
    psys = osp.join(testDir, "params_system.cfg")
    ptrode = osp.join(testDir, "params_c.cfg")
    P_s = IO.get_config(psys)
    P_s.set("Sim Params", "profileType", "CV")
    P_s.set("Sim Params", "Vset", "3.45")
    P_s.set("Sim Params", "tend", "3e3")
    P_s.set("Sim Params", "Nvol_c", "3")
    P_s.set("Sim Params", "Npart_c", "3")
    test008dir = str(osp.join(testDir, "..", "test008", "sim_output"))
    P_s.set("Sim Params", "prevDir", test008dir)
    IO.write_config_file(P_s, psys)
    P = IO.get_config(ptrode)
    P.set("Particles", "type", "homog_sdn")
    P.set("Material", "muRfunc", "LiFePO4")
    IO.write_config_file(P, ptrode)
    main.main(psys, keepArchive=False)
    shutil.move(dirDict["simOut"], testDir)
    if pflag:
        corePlots(testDir, dirDict)
        elytePlots(testDir, dirDict)
        electrodePlots(testDir, dirDict, "c")
        cmpr.bulkpf(testDir, dirDict, "c")
Пример #3
0
def test011(testDir, dirDict, pflag):
    """ Graphite-2param CHR sphere """
    shutil.copy(osp.join(dirDict["baseConfig"], "params_system.cfg"), testDir)
    shutil.copy(osp.join(dirDict["baseConfig"], "params_c.cfg"), testDir)
    psys = osp.join(testDir, "params_system.cfg")
    ptrode = osp.join(testDir, "params_c.cfg")
    P_s = IO.get_config(psys)
    P_s.set("Sim Params", "Crate", "1e-2")
    P_s.set("Sim Params", "relTol", "1e-7")
    P_s.set("Sim Params", "absTol", "1e-7")
    IO.write_config_file(P_s, psys)
    P = IO.get_config(ptrode)
    P.set("Particles", "type", "CHR2")
    P.set("Particles", "discretization", "2e-9")
    P.set("Particles", "shape", "sphere")
    P.set("Material", "muRfunc", "LiC6")
    P.set("Material", "Dfunc", "lattice")
    P.set("Material", "B", "0.1e9")
    P.set("Material", "kappa", "2.5e-10")
    IO.write_config_file(P, ptrode)
    main.main(psys, keepArchive=False)
    shutil.move(dirDict["simOut"], testDir)
    if pflag:
        corePlots(testDir, dirDict)
        electrodePlots(testDir, dirDict, "c")
Пример #4
0
def test015(testDir, dirDict, pflag):
    """ testRS homog with CVsegments, bulkCond, partCond """
    shutil.copy(osp.join(dirDict["baseConfig"], "params_system.cfg"), testDir)
    shutil.copy(osp.join(dirDict["baseConfig"], "params_c.cfg"), testDir)
    psys = osp.join(testDir, "params_system.cfg")
    ptrode = osp.join(testDir, "params_c.cfg")
    P_s = IO.get_config(psys)
    P_s.set("Sim Params", "profileType", "CVsegments")
    P_s.set("Sim Params", "Npart_c", "3")
    P_s.set("Sim Params", "Nvol_c", "3")
    P_s.set("Sim Params", "segments",
            "[(-0.3, 25), (0., 10), (0.3, 30)]")
    P_s.set("Sim Params", "tramp", "1e+0")
    P_s.set("Sim Params", "absTol", "1e-5")
    P_s.set("Conductivity", "simBulkCond_c", "true")
    P_s.set("Conductivity", "sigma_s_c", "1e-2")
    P_s.set("Conductivity", "simPartCond_c", "true")
    P_s.set("Conductivity", "G_mean_c", "1e-14")
    IO.write_config_file(P_s, psys)
    P = IO.get_config(ptrode)
    P.set("Particles", "type", "homog")
    P.set("Material", "muRfunc", "testRS")
    P.set("Reactions", "rxnType", "BV_raw")
    IO.write_config_file(P, ptrode)
    main.main(psys, keepArchive=False)
    shutil.move(dirDict["simOut"], testDir)
    if pflag:
        corePlots(testDir, dirDict)
        elytePlots(testDir, dirDict)
        electrodePlots(testDir, dirDict, "c")
        cmpr.bulkpf(testDir, dirDict, "c")
Пример #5
0
def test001(testDir, dirDict, pflag):
    """ LFP ACR C3 """
    shutil.copy(osp.join(dirDict["baseConfig"], "params_system.cfg"), testDir)
    shutil.copy(osp.join(dirDict["baseConfig"], "params_c.cfg"), testDir)
    psys = osp.join(testDir, "params_system.cfg")
    ptrode = osp.join(testDir, "params_c.cfg")
    P_s = IO.get_config(psys)
    P_s.set("Sim Params", "Crate", "1e-2")
    IO.write_config_file(P_s, psys)
    P = IO.get_config(ptrode)
    P.set("Particles", "type", "ACR")
    P.set("Material", "muRfunc", "LiFePO4")
    IO.write_config_file(P, ptrode)
    main.main(psys, keepArchive=False)
    shutil.move(dirDict["simOut"], testDir)
    if pflag:
        corePlots(testDir, dirDict)
        electrodePlots(testDir, dirDict, "c")
Пример #6
0
def test013(testDir, dirDict, pflag):
    """ Solid solution, diffn cylinder, homog, testIS_ss, LiMn2O4_ss2
    Marcus, BV_raw
    cathode + separator + anode
    """
    shutil.copy(osp.join(dirDict["baseConfig"], "params_system.cfg"), testDir)
    shutil.copy(osp.join(dirDict["baseConfig"], "params_c.cfg"), testDir)
    shutil.copy(osp.join(dirDict["baseConfig"], "params_a.cfg"), testDir)
    psys = osp.join(testDir, "params_system.cfg")
    ptrodec = osp.join(testDir, "params_c.cfg")
    ptrodea = osp.join(testDir, "params_a.cfg")
    P_s = IO.get_config(psys)
    P_s.set("Sim Params", "profileType", "CV")
    P_s.set("Sim Params", "Vset", "3.8")
    P_s.set("Sim Params", "tsteps", "25")
    P_s.set("Sim Params", "Nvol_c", "2")
    P_s.set("Sim Params", "Nvol_s", "2")
    P_s.set("Sim Params", "Nvol_a", "2")
    P_s.set("Particles", "cs0_c", "0.2")
    P_s.set("Particles", "cs0_a", "0.95")
    P_s.set("Electrolyte", "elyteModelType", "dilute")
    IO.write_config_file(P_s, psys)
    P = IO.get_config(ptrodec)
    P.set("Particles", "type", "homog")
    P.set("Particles", "shape", "sphere")
    P.set("Material", "muRfunc", "LiMn2O4_ss2")
    P.set("Reactions", "rxnType", "Marcus")
    IO.write_config_file(P, ptrodec)
    P = IO.get_config(ptrodea)
    P.set("Particles", "discretization", "2.5e-9")
    P.set("Particles", "shape", "cylinder")
    P.set("Material", "muRfunc", "testIS_ss")
    P.set("Reactions", "rxnType", "BV_raw")
    IO.write_config_file(P, ptrodea)
    main.main(psys, keepArchive=False)
    shutil.move(dirDict["simOut"], testDir)
    if pflag:
        corePlots(testDir, dirDict)
        elytePlots(testDir, dirDict)
        electrodePlots(testDir, dirDict, "c")
        cmpr.bulkpf(testDir, dirDict, "c")
        electrodePlots(testDir, dirDict, "a")
        cmpr.bulkpf(testDir, dirDict, "a")
Пример #7
0
def test012(testDir, dirDict, pflag):
    """ Solid solution, diffn sphere, homog, LiC6_coke_ss2, LiMn2O4_ss2
    BV_mod01, BV_mod02
    cathode + anode
    """
    shutil.copy(osp.join(dirDict["baseConfig"], "params_system.cfg"), testDir)
    shutil.copy(osp.join(dirDict["baseConfig"], "params_c.cfg"), testDir)
    shutil.copy(osp.join(dirDict["baseConfig"], "params_a.cfg"), testDir)
    psys = osp.join(testDir, "params_system.cfg")
    ptrodec = osp.join(testDir, "params_c.cfg")
    ptrodea = osp.join(testDir, "params_a.cfg")
    P_s = IO.get_config(psys)
    P_s.set("Sim Params", "Crate", "1e-2")
    P_s.set("Sim Params", "capFrac", "0.67")
    P_s.set("Sim Params", "tsteps", "25")
    P_s.set("Sim Params", "Nvol_c", "2")
    P_s.set("Sim Params", "Nvol_a", "2")
    P_s.set("Sim Params", "Vmin", "2e0")
    P_s.set("Particles", "cs0_c", "0.2")
    P_s.set("Particles", "cs0_a", "0.495")
    P_s.set("Electrolyte", "elyteModelType", "SM")
    IO.write_config_file(P_s, psys)
    P = IO.get_config(ptrodec)
    P.set("Particles", "type", "homog")
    P.set("Particles", "shape", "cylinder")
    P.set("Material", "muRfunc", "LiMn2O4_ss2")
    P.set("Reactions", "rxnType", "BV_mod01")
    IO.write_config_file(P, ptrodec)
    P = IO.get_config(ptrodea)
    P.set("Particles", "discretization", "2.5e-9")
    P.set("Particles", "shape", "sphere")
    P.set("Material", "muRfunc", "LiC6_coke_ss2")
    P.set("Reactions", "rxnType", "BV_mod02")
    IO.write_config_file(P, ptrodea)
    main.main(psys, keepArchive=False)
    shutil.move(dirDict["simOut"], testDir)
    if pflag:
        corePlots(testDir, dirDict)
        elytePlots(testDir, dirDict)
        electrodePlots(testDir, dirDict, "c")
        cmpr.bulkpf(testDir, dirDict, "c")
        electrodePlots(testDir, dirDict, "a")
        cmpr.bulkpf(testDir, dirDict, "a")
Пример #8
0
def test019(testDir, dirDict, pflag):
    """ SM electrolyte with LFP homog, sep + cathode, significant elyte polarization """
    shutil.copy(osp.join(dirDict["baseConfig"], "params_system.cfg"), testDir)
    shutil.copy(osp.join(dirDict["baseConfig"], "params_c.cfg"), testDir)
    psys = osp.join(testDir, "params_system.cfg")
    ptrode = osp.join(testDir, "params_c.cfg")
    P_s = IO.get_config(psys)
    P_s.set("Sim Params", "Nvol_c", "3")
    P_s.set("Sim Params", "Nvol_s", "3")
    P_s.set("Geometry", "L_c", "120e-6")
    P_s.set("Geometry", "L_s", "90e-6")
    P_s.set("Electrolyte", "elyteModelType", "SM")
    IO.write_config_file(P_s, psys)
    P = IO.get_config(ptrode)
    P.set("Particles", "type", "homog")
    P.set("Material", "muRfunc", "LiFePO4")
    IO.write_config_file(P, ptrode)
    main.main(psys, keepArchive=False)
    shutil.move(dirDict["simOut"], testDir)
    if pflag:
        corePlots(testDir, dirDict)
        elytePlots(testDir, dirDict)
        electrodePlots(testDir, dirDict, "c")
Пример #9
0
def test014(testDir, dirDict, pflag):
    """ LFP homog with CCsegments, MHC, Rser """
    shutil.copy(osp.join(dirDict["baseConfig"], "params_system.cfg"), testDir)
    shutil.copy(osp.join(dirDict["baseConfig"], "params_c.cfg"), testDir)
    psys = osp.join(testDir, "params_system.cfg")
    ptrode = osp.join(testDir, "params_c.cfg")
    P_s = IO.get_config(psys)
    P_s.set("Sim Params", "profileType", "CCsegments")
    P_s.set("Sim Params", "segments",
            "[(1., 25), (-2., 10), (0., 30)]")
    P_s.set("Sim Params", "tramp", "1e+0")
    P_s.set("Sim Params", "Rser", "1e-3")
    IO.write_config_file(P_s, psys)
    P = IO.get_config(ptrode)
    P.set("Particles", "type", "homog")
    P.set("Material", "muRfunc", "LiFePO4")
    P.set("Reactions", "rxnType", "MHC")
    IO.write_config_file(P, ptrode)
    main.main(psys, keepArchive=False)
    shutil.move(dirDict["simOut"], testDir)
    if pflag:
        corePlots(testDir, dirDict)
        electrodePlots(testDir, dirDict, "c")
Пример #10
0
def test004(testDir, dirDict, pflag):
    """ LFP CHR sphere with noise  """
    shutil.copy(osp.join(dirDict["baseConfig"], "params_system.cfg"), testDir)
    shutil.copy(osp.join(dirDict["baseConfig"], "params_c.cfg"), testDir)
    psys = osp.join(testDir, "params_system.cfg")
    ptrode = osp.join(testDir, "params_c.cfg")
    P_s = IO.get_config(psys)
    P_s.set("Sim Params", "Crate", "1e-2")
    IO.write_config_file(P_s, psys)
    P = IO.get_config(ptrode)
    P.set("Particles", "type", "CHR")
    P.set("Particles", "discretization", "2e-9")
    P.set("Particles", "shape", "sphere")
    P.set("Material", "muRfunc", "LiFePO4")
    P.set("Material", "noise", "true")
    P.set("Material", "numnoise", "100")
    P.set("Material", "Dfunc", "lattice")
    P.set("Material", "dgammadc", "-2e-30")
    IO.write_config_file(P, ptrode)
    main.main(psys, keepArchive=False)
    shutil.move(dirDict["simOut"], testDir)
    if pflag:
        corePlots(testDir, dirDict)
        electrodePlots(testDir, dirDict, "c")
Пример #11
0
def test008(testDir, dirDict, pflag):
    """ LFP homog_sdn """
    shutil.copy(osp.join(dirDict["baseConfig"], "params_system.cfg"), testDir)
    shutil.copy(osp.join(dirDict["baseConfig"], "params_c.cfg"), testDir)
    psys = osp.join(testDir, "params_system.cfg")
    ptrode = osp.join(testDir, "params_c.cfg")
    P_s = IO.get_config(psys)
    P_s.set("Sim Params", "Crate", "1e-2")
    P_s.set("Sim Params", "Nvol_c", "3")
    P_s.set("Sim Params", "Npart_c", "3")
    P_s.set("Particles", "stddev_c", "25e-9")
    P_s.set("Sim Params", "capFrac", "0.6")
    IO.write_config_file(P_s, psys)
    P = IO.get_config(ptrode)
    P.set("Particles", "type", "homog_sdn")
    P.set("Material", "muRfunc", "LiFePO4")
    IO.write_config_file(P, ptrode)
    main.main(psys, keepArchive=False)
    shutil.move(dirDict["simOut"], testDir)
    if pflag:
        corePlots(testDir, dirDict)
        elytePlots(testDir, dirDict)
        electrodePlots(testDir, dirDict, "c")
        cmpr.bulkpf(testDir, dirDict, "c")
Пример #12
0
from argparse import RawTextHelpFormatter

from mpet.version import __version__
import mpet.main as main

desc = """MPET - Multiphase Porous Electrode Theory
This software is designed to run simulations of batteries with porous electrodes
using porous electrode theory, which is a volume-averaged, multiscale approach
to capture the coupled behavior of electrolyte and active material within
electrodes.

If you use this software in academic work, please cite the relevant references
detailing its development as presented in the LICENSE file.

See also: https://bitbucket.org/bazantgroup/mpet"""

parser = argparse.ArgumentParser(description=desc,
                                 formatter_class=RawTextHelpFormatter)
parser.add_argument('file', help='MPET system configuration file')
parser.add_argument('-v',
                    '--version',
                    action='version',
                    version='%(prog)s ' + __version__)
args = parser.parse_args()

try:
    main.main(sys.argv[1])
except IndexError:
    print("ERROR: No parameter file specified. Aborting")
    raise