/*
 * lib_base_model_1d.java
 */

import com.comsol.model.*;
import com.comsol.model.util.*;

/** Model exported on May 15 2026, 10:26 by COMSOL 6.4.0.421. */
public class lib_base_model_1d {

  public static Model run() {
    Model model = ModelUtil.create("Model");

//    From the File menu, choose New.
//    In the New window, click Model Wizard.
//    In the Model Wizard window, click 1D.
//    In the Select Physics tree, select Electrochemistry > Batteries > Lithium-Ion Battery (liion).
//    Click Add.
//    Click Study.
//    In the Select Study tree, select Preset Studies for Selected Physics Interfaces > Time Dependent with Initialization.
//    Click Done.

    model.component().create("comp1", true);

    model.component("comp1").geom().create("geom1", 1);

    model.component("comp1").mesh().create("mesh1");

    model.component("comp1").physics().create("liion", "LithiumIonBatteryMPH", "geom1");

    model.study().create("std1");
    model.study("std1").create("cdi", "CurrentDistributionInitialization");
    model.study("std1").feature("cdi").set("solnum", "auto");
    model.study("std1").feature("cdi").set("notsolnum", "auto");
    model.study("std1").feature("cdi").set("outputmap", new String[]{});
    model.study("std1").feature("cdi").set("ngenAUX", "1");
    model.study("std1").feature("cdi").set("goalngenAUX", "1");
    model.study("std1").feature("cdi").set("ngenAUX", "1");
    model.study("std1").feature("cdi").set("goalngenAUX", "1");
    model.study("std1").create("time", "Transient");
    model.study("std1").feature("time").set("initialtime", "0");
    model.study("std1").feature("time").set("solnum", "auto");
    model.study("std1").feature("time").set("notsolnum", "auto");
    model.study("std1").feature("time").set("outputmap", new String[]{});

//    Load the parameters from a text file.
//    In the Model Builder window, under Global Definitions, click Parameters 1.
//    In the Settings window for Parameters, locate the Parameters section.
//    Click Load from File.
//    Browse to the model's Application Library folder and double-click the file lib_base_model_1d_parameters.txt.
//    To import content from file, use:
//    model.param().loadFile("FILENAME");
    model.param().set("epss_neg", "0.6", "Active electrode volume fraction, negative");
    model.param().set("epss_pos", "0.6", "Active electrode volume fraction, positive");
    model.param().set("epss_binder_neg", "0.1", "Binder volume fraction, negative");
    model.param().set("epss_binder_pos", "0.1", "Binder volume fraction, positive");
    model.param().set("epsl_neg", "1-epss_neg-epss_binder_neg", "Electrolyte volume fraction, negative");
    model.param().set("epsl_sep", "0.4", "Separator volume fraction");
    model.param().set("epsl_pos", "1-epss_pos-epss_binder_pos", "Electrolyte volume fraction, positive");
    model.param().set("sigmas_neg", "1[S/m]", "Effective electrode conductivity, negative");
    model.param().set("sigmas_pos", "1[S/m]", "Effective electrode conductivity, positive");
    model.param().set("rp_neg", "6[um]", "Electrode particle radius, negative");
    model.param().set("rp_pos", "5[um]", "Electrode particle radius, positive");
    model.param().set("cs_max_neg", "31507[mol/m^3]", "Maximum concentration, negative");
    model.param().set("cs_max_pos", "49000[mol/m^3]", "Maximum concentration, positive");
    model.param().set("i0_ref_neg", "10[A/m^2]", "Exchange current density at 50% lithiation, negative");
    model.param().set("i0_ref_pos", "10[A/m^2]", "Exchange current density at 50% lithiation, positive");
    model.param().set("L_sep", "20[um]", "Separator thickness");
    model.param().set("L_pos", "45[um]", "Positive electrode thickness");
    model.param()
         .set("L_neg", "(1-0.1)*epss_pos*cs_max_pos*L_pos/(0.8*epss_neg*cs_max_neg)", "Negative electrode thickness");
    model.param().set("L_ccs", "10[um]", "Thickness of current collectors");
    model.param().set("V_cell", "90[%]*(10.5[mm])^2*pi*70[mm]", "Active cell volume");
    model.param().set("A_cell", "V_cell/(L_neg+L_sep+L_pos+L_ccs/2)", "Cell area");
    model.param().set("soc_init", "0", "Initial SOC");
    model.param().set("T", "25[degC]", "Temperature");

//    Add some data for the electrolyte and the electrodes from the material library.
//    In the Materials toolbar, click Add Material to open the Add Material window.
//    In the tree, select Battery > Electrolytes > LiPF6 in 3:7 EC:EMC (Liquid, Li-ion Battery).
//    Right-click and choose Add to Component 1 (comp1).

    model.component("comp1").material().create("mat1", "Common");
    model.component("comp1").material("mat1").propertyGroup("def").func().create("an1", "Analytic");
    model.component("comp1").material("mat1").propertyGroup()
         .create("ElectrolyteConductivity", "ElectrolyteConductivity", "Electrolyte conductivity");
    model.component("comp1").material("mat1").propertyGroup("ElectrolyteConductivity").func()
         .create("an1", "Analytic");
    model.component("comp1").material("mat1").propertyGroup()
         .create("SpeciesProperties", "SpeciesProperties", "Species properties");
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func().create("an1", "Analytic");
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func()
         .create("int1", "Interpolation");
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func()
         .create("int2", "Interpolation");
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func()
         .create("int3", "Interpolation");
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func().create("an2", "Analytic");
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func()
         .create("int4", "Interpolation");
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func()
         .create("int5", "Interpolation");
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func()
         .create("int6", "Interpolation");
    model.component("comp1").material("mat1").propertyGroup()
         .create("ElectrolyteSaltConcentration", "ElectrolyteSaltConcentration", "Electrolyte salt concentration");
    model.component("comp1").material("mat1").label("LiPF6 in 3:7 EC:EMC (Liquid, Li-ion Battery)");
    model.component("comp1").material("mat1").propertyGroup("def").func("an1").set("funcname", "Dl");
    model.component("comp1").material("mat1").propertyGroup("def").func("an1")
         .set("expr", "1.01e3*exp(1.01*c)*exp(-1.56e3/T)*exp(-4.87e2/T*c)*1e-6");
    model.component("comp1").material("mat1").propertyGroup("def").func("an1").set("args", new String[]{"c", "T"});
    model.component("comp1").material("mat1").propertyGroup("def").func("an1").set("fununit", "cm^2/s");
    model.component("comp1").material("mat1").propertyGroup("def").func("an1")
         .set("argunit", new String[]{"mol/L", "K"});
    model.component("comp1").material("mat1").propertyGroup("def").func("an1")
         .set("plotaxis", new String[]{"on", "on"});
    model.component("comp1").material("mat1").propertyGroup("def").func("an1")
         .set("plotfixedvalue", new String[]{"0", "0"});
    model.component("comp1").material("mat1").propertyGroup("def").func("an1")
         .set("plotargs", new String[][]{{"c", "0", "3000"}, {"T", "263.15[K]", "263.15[K]"}});
    model.component("comp1").material("mat1").propertyGroup("def")
         .set("diffusion", new String[]{"Dl(min(max(c,eps),3[M]),min(max(T,-10[degC]),50[degC]))", "0", "0", "0", "Dl(min(max(c,eps),3[M]),min(max(T,-10[degC]),50[degC]))", "0", "0", "0", "Dl(min(max(c,eps),3[M]),min(max(T,-10[degC]),50[degC]))"});
    model.component("comp1").material("mat1").propertyGroup("def")
         .setPropertyInfo("diffusion", "Johannes Landesfeind and Hubert A. Gasteiger, Temperature and Concentration Dependence of the Ionic Transport Properties of Lithium-Ion Battery Electrolytes, Journal of The Electrochemical Society, 166 (14) A3079-A3097 (2019)");
    model.component("comp1").material("mat1").propertyGroup("def").addInput("concentration");
    model.component("comp1").material("mat1").propertyGroup("def").addInput("temperature");
    model.component("comp1").material("mat1").propertyGroup("ElectrolyteConductivity").func("an1")
         .set("funcname", "sigmal");
    model.component("comp1").material("mat1").propertyGroup("ElectrolyteConductivity").func("an1")
         .set("expr", "5.21e-1*(1+(T-2.28e2))*c*(1-1.06*sqrt(c)+3.53e-1*(1-3.59e-3*exp(1000/T))*c)/(1+c^4*1.48e-3*(exp(1000/T)))");
    model.component("comp1").material("mat1").propertyGroup("ElectrolyteConductivity").func("an1")
         .set("args", new String[]{"c", "T"});
    model.component("comp1").material("mat1").propertyGroup("ElectrolyteConductivity").func("an1")
         .set("fununit", "mS/cm");
    model.component("comp1").material("mat1").propertyGroup("ElectrolyteConductivity").func("an1")
         .set("argunit", new String[]{"mol/L", "K"});
    model.component("comp1").material("mat1").propertyGroup("ElectrolyteConductivity").func("an1")
         .set("plotaxis", new String[]{"on", "on"});
    model.component("comp1").material("mat1").propertyGroup("ElectrolyteConductivity").func("an1")
         .set("plotfixedvalue", new String[]{"0", "0"});
    model.component("comp1").material("mat1").propertyGroup("ElectrolyteConductivity").func("an1")
         .set("plotargs", new String[][]{{"c", "0", "5000"}, {"T", "-10[degC]", "50[degC]"}});
    model.component("comp1").material("mat1").propertyGroup("ElectrolyteConductivity")
         .set("sigmal", new String[]{"sigmal(max(c,eps),min(max(T,-10[degC]),50[degC]))", "0", "0", "0", "sigmal(max(c,eps),min(max(T,-10[degC]),50[degC]))", "0", "0", "0", "sigmal(max(c,eps),min(max(T,-10[degC]),50[degC]))"});
    model.component("comp1").material("mat1").propertyGroup("ElectrolyteConductivity")
         .setPropertyInfo("sigmal", "Johannes Landesfeind and Hubert A. Gasteiger, Temperature and Concentration Dependence of the Ionic Transport Properties of Lithium-Ion Battery Electrolytes, Journal of The Electrochemical Society, 166 (14) A3079-A3097 (2019)");
    model.component("comp1").material("mat1").propertyGroup("ElectrolyteConductivity").addInput("concentration");
    model.component("comp1").material("mat1").propertyGroup("ElectrolyteConductivity").addInput("temperature");
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func("an1").set("funcname", "TDF");
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func("an1")
         .set("expr", "p1_TDF(T)*c^2+p2_TDF(T)*c+p3_TDF(T)");
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func("an1")
         .set("args", new String[]{"c", "T"});
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func("an1").set("fununit", "1");
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func("an1")
         .set("argunit", new String[]{"mol/L", "K"});
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func("an1")
         .set("plotaxis", new String[]{"on", "on"});
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func("an1")
         .set("plotfixedvalue", new String[]{"0", "0"});
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func("an1")
         .set("plotargs", new String[][]{{"c", "0", "3000"}, {"T", "-10[degC]", "50[degC]"}});
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func("int1")
         .set("funcname", "p1_TDF");
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func("int1")
         .set("table", new String[][]{{"263.15", "2.45e-1"}, 
         {"273.15", "7.23e-1"}, 
         {"283.15", "7.36e-1"}, 
         {"293.15", "6.65e-1"}, 
         {"303.15", "3.7e-1"}, 
         {"313.15", "1.85e-2"}, 
         {"323.15", "-3.92e-2"}});
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func("int1")
         .set("fununit", new String[]{"1"});
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func("int1")
         .set("argunit", new String[]{"K"});
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func("int2")
         .set("funcname", "p2_TDF");
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func("int2")
         .set("table", new String[][]{{"263.15", "4.49e-1"}, 
         {"273.15", "9.8e-2"}, 
         {"283.15", "-1.55e-1"}, 
         {"293.15", "-2.57e-1"}, 
         {"303.15", "7.6e-1"}, 
         {"313.15", "1.75"}, 
         {"323.15", "1.76"}});
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func("int2")
         .set("fununit", new String[]{"1"});
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func("int2")
         .set("argunit", new String[]{"K"});
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func("int3")
         .set("funcname", "p3_TDF");
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func("int3")
         .set("table", new String[][]{{"263.15", "3.41e-1"}, 
         {"273.15", "5e-1"}, 
         {"283.15", "8.63e-1"}, 
         {"293.15", "1.03"}, 
         {"303.15", "7.17e-1"}, 
         {"313.15", "4.8e-1"}, 
         {"323.15", "6.75e-1"}});
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func("int3")
         .set("fununit", new String[]{"1"});
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func("int3")
         .set("argunit", new String[]{"K"});
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func("an2")
         .set("funcname", "tplus");
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func("an2")
         .set("expr", "p1_tplus(T)*c^2+p2_tplus(T)*c+p3_tplus(T)");
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func("an2")
         .set("args", new String[]{"c", "T"});
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func("an2").set("fununit", "1");
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func("an2")
         .set("argunit", new String[]{"mol/L", "K"});
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func("an2")
         .set("plotaxis", new String[]{"on", "on"});
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func("an2")
         .set("plotfixedvalue", new String[]{"0", "0"});
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func("an2")
         .set("plotargs", new String[][]{{"c", "0", "3000"}, {"T", "-10[degC]", "50[degC]"}});
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func("int4")
         .set("funcname", "p1_tplus");
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func("int4")
         .set("table", new String[][]{{"263.15", "4.1e-2"}, 
         {"273.15", "1.04e-1"}, 
         {"283.15", "1.09e-1"}, 
         {"293.15", "1.4e-1"}, 
         {"303.15", "2.97e-2"}, 
         {"313.15", "-1.39e-2"}, 
         {"323.15", "-5.87e-3"}});
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func("int4")
         .set("fununit", new String[]{"1"});
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func("int4")
         .set("argunit", new String[]{"K"});
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func("int5")
         .set("funcname", "p2_tplus");
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func("int5")
         .set("table", new String[][]{{"263.15", "-3.63e-1"}, 
         {"273.15", "-3.38e-1"}, 
         {"283.15", "-4.12e-1"}, 
         {"293.15", "-5.74e-1"}, 
         {"303.15", "-2.1e-1"}, 
         {"313.15", "-9.01e-2"}, 
         {"323.15", "-1.3e-1"}});
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func("int5")
         .set("fununit", new String[]{"1"});
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func("int5")
         .set("argunit", new String[]{"K"});
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func("int6")
         .set("funcname", "p3_tplus");
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func("int6")
         .set("table", new String[][]{{"263.15", "-9.17e-2"}, 
         {"273.15", "2.13e-1"}, 
         {"283.15", "3.98e-1"}, 
         {"293.15", "5.57e-1"}, 
         {"303.15", "4.92e-1"}, 
         {"313.15", "5.26e-1"}, 
         {"323.15", "6.12e-1"}});
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func("int6")
         .set("fununit", new String[]{"1"});
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").func("int6")
         .set("argunit", new String[]{"K"});
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties")
         .set("transpNum", "tplus(min(max(c,eps),3[M]),min(max(T,-10[degC]),50[degC]))");
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties")
         .setPropertyInfo("transpNum", "Johannes Landesfeind and Hubert A. Gasteiger, Temperature and Concentration Dependence of the Ionic Transport Properties of Lithium-Ion Battery Electrolytes, Journal of The Electrochemical Society, 166 (14) A3079-A3097 (2019)");
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties")
         .set("fcl", "TDF(min(max(c,eps),3[M]),min(max(T,-10[degC]),50[degC]))-1");
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties")
         .setPropertyInfo("fcl", "Johannes Landesfeind and Hubert A. Gasteiger, Temperature and Concentration Dependence of the Ionic Transport Properties of Lithium-Ion Battery Electrolytes, Journal of The Electrochemical Society, 166 (14) A3079-A3097 (2019)");
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").addInput("concentration");
    model.component("comp1").material("mat1").propertyGroup("SpeciesProperties").addInput("temperature");
    model.component("comp1").material("mat1").propertyGroup("ElectrolyteSaltConcentration").identifier("cElsalt");
    model.component("comp1").material("mat1").propertyGroup("ElectrolyteSaltConcentration")
         .set("cElsalt", "1200[mol/m^3]");

    model.component("comp1").geom("geom1").run();

//    In the tree, select Battery > Electrodes > Graphite, LixC6 MCMB (Negative, Li-ion Battery).
//    Right-click and choose Add to Component 1 (comp1).

    model.component("comp1").material().create("mat2", "Common");
    model.component("comp1").material("mat2").propertyGroup("def").func().create("int1", "Interpolation");
    model.component("comp1").material("mat2").propertyGroup("def").func().create("int2", "Interpolation");
    model.component("comp1").material("mat2").propertyGroup("def").func().create("int3", "Interpolation");
    model.component("comp1").material("mat2").propertyGroup("def").func().create("int4", "Interpolation");
    model.component("comp1").material("mat2").propertyGroup()
         .create("ElectrodePotential", "ElectrodePotential", "Equilibrium potential");
    model.component("comp1").material("mat2").propertyGroup()
         .create("OperationalSOC", "OperationalSOC", "Operational electrode state of charge");
    model.component("comp1").material("mat2").propertyGroup().create("ic", "ic", "Intercalation strain");
    model.component("comp1").material("mat2").propertyGroup("ic").func().create("int1", "Interpolation");
    model.component("comp1").material("mat2").propertyGroup()
         .create("EquilibriumConcentration", "EquilibriumConcentration", "Equilibrium concentration");
    model.component("comp1").material("mat2").propertyGroup()
         .create("EquilibriumPotentialWithDOCInput", "EquilibriumPotentialWithDOCInput", "Equilibrium potential (using degree of conversion as model input)");
    model.component("comp1").material("mat2").propertyGroup()
         .create("EquilibriumDegreeOfConversion", "EquilibriumDegreeOfConversion", "Equilibrium degree of conversion");
    model.component("comp1").material("mat2").label("Graphite, LixC6 MCMB (Negative, Li-ion Battery)");
    model.component("comp1").material("mat2").propertyGroup("def").func("int1").set("funcname", "E_int");
    model.component("comp1").material("mat2").propertyGroup("def").func("int1")
         .set("table", new String[][]{{"0", "32.47"}, {"0.333", "28.56"}, {"0.5", "58.06"}, {"1", "108.67"}});
    model.component("comp1").material("mat2").propertyGroup("def").func("int1").set("fununit", new String[]{"GPa"});
    model.component("comp1").material("mat2").propertyGroup("def").func("int1").set("argunit", new String[]{"1"});
    model.component("comp1").material("mat2").propertyGroup("def").func("int2").set("funcname", "nu_int");
    model.component("comp1").material("mat2").propertyGroup("def").func("int2")
         .set("table", new String[][]{{"0", "0.32"}, {"0.333", "0.39"}, {"0.5", "0.34"}, {"1", "0.24"}});
    model.component("comp1").material("mat2").propertyGroup("def").func("int2").set("fununit", new String[]{""});
    model.component("comp1").material("mat2").propertyGroup("def").func("int3").set("funcname", "Eeq");
    model.component("comp1").material("mat2").propertyGroup("def").func("int3")
         .set("table", new String[][]{{"0", "2.781186612"}, 
         {"0.01", "1.520893224"}, 
         {"0.02", "0.893922607"}, 
         {"0.03", "0.581284406"}, 
         {"0.04", "0.42452844"}, 
         {"0.05", "0.344895805"}, 
         {"0.06", "0.303146342"}, 
         {"0.07", "0.279578072"}, 
         {"0.08", "0.264093089"}, 
         {"0.09", "0.251347845"}, 
         {"0.1", "0.238588379"}, 
         {"0.11", "0.224803164"}, 
         {"0.12", "0.210294358"}, 
         {"0.13", "0.196408586"}, 
         {"0.14", "0.184624188"}, 
         {"0.15", "0.175188157"}, 
         {"0.16", "0.167373311"}, 
         {"0.17", "0.160452107"}, 
         {"0.18", "0.154025412"}, 
         {"0.19", "0.147948522"}, 
         {"0.2", "0.142214997"}, 
         {"0.21", "0.13688271"}, 
         {"0.22", "0.132033114"}, 
         {"0.23", "0.127747573"}, 
         {"0.24", "0.124091616"}, 
         {"0.25", "0.121103387"}, 
         {"0.26", "0.11878567"}, 
         {"0.27", "0.117102317"}, 
         {"0.28", "0.115980205"}, 
         {"0.29", "0.115317054"}, 
         {"0.3", "0.114993965"}, 
         {"0.31", "0.114890105"}, 
         {"0.32", "0.114886278"}, 
         {"0.33", "0.114884619"}, 
         {"0.34", "0.114873068"}, 
         {"0.35", "0.114824904"}, 
         {"0.36", "0.114644725"}, 
         {"0.37", "0.114372614"}, 
         {"0.38", "0.114017954"}, 
         {"0.39", "0.11359371"}, 
         {"0.4", "0.11311133"}, 
         {"0.41", "0.112575849"}, 
         {"0.42", "0.111980245"}, 
         {"0.43", "0.111297682"}, 
         {"0.44", "0.110470149"}, 
         {"0.45", "0.109393081"}, 
         {"0.46", "0.107900592"}, 
         {"0.47", "0.10576964"}, 
         {"0.48", "0.102783317"}, 
         {"0.49", "0.09889031"}, 
         {"0.5", "0.094391564"}, 
         {"0.51", "0.089921069"}, 
         {"0.52", "0.086112415"}, 
         {"0.53", "0.083265315"}, 
         {"0.54", "0.081326247"}, 
         {"0.55", "0.080074892"}, 
         {"0.56", "0.07928329"}, 
         {"0.57", "0.078778765"}, 
         {"0.58", "0.078447703"}, 
         {"0.59", "0.078220432"}, 
         {"0.6", "0.078055641"}, 
         {"0.61", "0.077929111"}, 
         {"0.62", "0.077826563"}, 
         {"0.63", "0.077739397"}, 
         {"0.64", "0.077662227"}, 
         {"0.65", "0.077591472"}, 
         {"0.66", "0.077524557"}, 
         {"0.67", "0.077459463"}, 
         {"0.68", "0.077394455"}, 
         {"0.69", "0.077327934"}, 
         {"0.7", "0.077258337"}, 
         {"0.71", "0.077184077"}, 
         {"0.72", "0.077103499"}, 
         {"0.73", "0.077014851"}, 
         {"0.74", "0.076916258"}, 
         {"0.75", "0.07680571"}, 
         {"0.76", "0.07668104"}, 
         {"0.77", "0.07653992"}, 
         {"0.78", "0.076379839"}, 
         {"0.79", "0.076198086"}, 
         {"0.8", "0.075991699"}, 
         {"0.81", "0.075757371"}, 
         {"0.82", "0.075491288"}, 
         {"0.83", "0.075188813"}, 
         {"0.84", "0.07484398"}, 
         {"0.85", "0.074448647"}, 
         {"0.86", "0.07399118"}, 
         {"0.87", "0.073454466"}, 
         {"0.88", "0.072812991"}, 
         {"0.89", "0.072028722"}, 
         {"0.9", "0.071045433"}, 
         {"0.91", "0.069780996"}, 
         {"0.92", "0.068116222"}, 
         {"0.93", "0.065874599"}, 
         {"0.94", "0.062770873"}, 
         {"0.95", "0.058253898"}, 
         {"0.96", "0.051075794"}, 
         {"0.97", "0.038790069"}, 
         {"0.98", "0.020172191"}});
    model.component("comp1").material("mat2").propertyGroup("def").func("int3").set("extrap", "linear");
    model.component("comp1").material("mat2").propertyGroup("def").func("int3").set("fununit", new String[]{"V"});
    model.component("comp1").material("mat2").propertyGroup("def").func("int3").set("argunit", new String[]{""});
    model.component("comp1").material("mat2").propertyGroup("def").func("int3").set("defineinv", true);
    model.component("comp1").material("mat2").propertyGroup("def").func("int3").set("funcinvname", "Eeq_inv");
    model.component("comp1").material("mat2").propertyGroup("def").func("int4").set("funcname", "dEeqdT");
    model.component("comp1").material("mat2").propertyGroup("def").func("int4")
         .set("table", new String[][]{{"0", "3.0e-4"}, 
         {"0.17", "0"}, 
         {"0.24", "-6e-5"}, 
         {"0.28", "-1.6e-4"}, 
         {"0.5", "-1.6e-4"}, 
         {"0.54", "-9e-5"}, 
         {"0.71", "-9e-5"}, 
         {"0.85", "-1.0e-4"}, 
         {"1.0", "-1.2e-4"}});
    model.component("comp1").material("mat2").propertyGroup("def").func("int4").set("fununit", new String[]{"V/K"});
    model.component("comp1").material("mat2").propertyGroup("def").func("int4").set("argunit", new String[]{""});
    model.component("comp1").material("mat2").propertyGroup("def").set("youngsmodulus", "");
    model.component("comp1").material("mat2").propertyGroup("def").set("poissonsratio", "");
    model.component("comp1").material("mat2").propertyGroup("def").set("youngsmodulus", "E_int(c/csmax)");
    model.component("comp1").material("mat2").propertyGroup("def")
         .setPropertyInfo("youngsmodulus", "Yue Qi et al 2010 J. Electrochem. Soc. 157 A558");
    model.component("comp1").material("mat2").propertyGroup("def").set("poissonsratio", "nu_int(c/csmax)");
    model.component("comp1").material("mat2").propertyGroup("def")
         .setPropertyInfo("poissonsratio", "Yue Qi et al 2010 J. Electrochem. Soc. 157 A558");
    model.component("comp1").material("mat2").propertyGroup("def")
         .set("electricconductivity", new String[]{"100[S/m]", "0", "0", "0", "100[S/m]", "0", "0", "0", "100[S/m]"});
    model.component("comp1").material("mat2").propertyGroup("def")
         .setPropertyInfo("electricconductivity", "V. Srinivasan, and J. Newman, \u201cDesign and Optimization of a Natural Graphite/Iron Phosphate Lithium Ion Cell,\u201d J. Electrochem. Soc., vol. 151, p. 1530, 2004.");
    model.component("comp1").material("mat2").propertyGroup("def")
         .set("diffusion", new String[]{"1.4523e-13*exp(68025.7/8.314*(1/(T_ref/1[K])-1/(T2/1[K])))[m^2/s]", "0", "0", "0", "1.4523e-13*exp(68025.7/8.314*(1/(T_ref/1[K])-1/(T2/1[K])))[m^2/s]", "0", "0", "0", "1.4523e-13*exp(68025.7/8.314*(1/(T_ref/1[K])-1/(T2/1[K])))[m^2/s]"});
    model.component("comp1").material("mat2").propertyGroup("def")
         .setPropertyInfo("diffusion", "K. Kumaresan, G. Sikha, and R. E. White, \u201cThermal Model for a Li-Ion Cell,\u201d J. Electrochem. Soc., vol. 155, p. A164, 2008.");
    model.component("comp1").material("mat2").propertyGroup("def")
         .set("thermalconductivity", new String[]{"1[W/(m*K)]", "0", "0", "0", "1[W/(m*K)]", "0", "0", "0", "1[W/(m*K)]"});
    model.component("comp1").material("mat2").propertyGroup("def")
         .setPropertyInfo("thermalconductivity", "S. Chen, C. Wan, and Y. Wang, J. Power Sources, 140, 111 (2005).");
    model.component("comp1").material("mat2").propertyGroup("def").set("heatcapacity", "750[J/(kg*K)]");
    model.component("comp1").material("mat2").propertyGroup("def")
         .setPropertyInfo("heatcapacity", "SI Chemical Data, John Wiley & Sons, 1994");
    model.component("comp1").material("mat2").propertyGroup("def").set("density", "2300[kg/m^3]");
    model.component("comp1").material("mat2").propertyGroup("def")
         .setPropertyInfo("density", "SI Chemical Data, John Wiley & Sons, 1994");
    model.component("comp1").material("mat2").propertyGroup("def").set("csmax", "31507[mol/m^3]");
    model.component("comp1").material("mat2").propertyGroup("def").descr("csmax", "");
    model.component("comp1").material("mat2").propertyGroup("def").set("T_ref", "318[K]");
    model.component("comp1").material("mat2").propertyGroup("def").descr("T_ref", "");
    model.component("comp1").material("mat2").propertyGroup("def").set("T2", "min(393.15,max(T,223.15))");
    model.component("comp1").material("mat2").propertyGroup("def").descr("T2", "");
    model.component("comp1").material("mat2").propertyGroup("def").addInput("temperature");
    model.component("comp1").material("mat2").propertyGroup("def").addInput("concentration");
    model.component("comp1").material("mat2").propertyGroup("ElectrodePotential").identifier("eeq");
    model.component("comp1").material("mat2").propertyGroup("ElectrodePotential")
         .set("Eeq", "def.Eeq(doc)+def.dEeqdT(doc)*(T-298[K])");
    model.component("comp1").material("mat2").propertyGroup("ElectrodePotential")
         .setPropertyInfo("Eeq", "D. P Karthikeyan, G. Sikha, and R. E. White, \u201cThermodynamic model development for lithium intercalation electrodes,\u201d J. Power Sources, vol. 185, p. 1398, 2008.");
    model.component("comp1").material("mat2").propertyGroup("ElectrodePotential").set("dEeqdT", "def.dEeqdT(doc)");
    model.component("comp1").material("mat2").propertyGroup("ElectrodePotential")
         .setPropertyInfo("dEeqdT", "K. E. Thomas, and J. Newman, \u201cHeats of mixing and of entropy in porous insertion electrodes,\u201d J. Power Sources., vol. 119-121, p. 844, 2003.");
    model.component("comp1").material("mat2").propertyGroup("ElectrodePotential").set("cEeqref", "def.csmax");
    model.component("comp1").material("mat2").propertyGroup("ElectrodePotential").set("doc", "c/cEeqref");
    model.component("comp1").material("mat2").propertyGroup("ElectrodePotential")
         .descr("doc", "Degree of conversion (state of lithiation)");
    model.component("comp1").material("mat2").propertyGroup("ElectrodePotential").addInput("concentration");
    model.component("comp1").material("mat2").propertyGroup("ElectrodePotential").addInput("temperature");
    model.component("comp1").material("mat2").propertyGroup("OperationalSOC").identifier("opsoc");
    model.component("comp1").material("mat2").propertyGroup("OperationalSOC").set("socmax", "def.Eeq_inv(E_min)");
    model.component("comp1").material("mat2").propertyGroup("OperationalSOC").set("socmin", "def.Eeq_inv(E_max)");
    model.component("comp1").material("mat2").propertyGroup("OperationalSOC").set("E_max", "1[V]");
    model.component("comp1").material("mat2").propertyGroup("OperationalSOC").set("E_min", "0.075[V]");
    model.component("comp1").material("mat2").propertyGroup("ic").func("int1").set("funcname", "dVOLdSOL");

    return model;
  }

  public static Model run2(Model model) {
    model.component("comp1").material("mat2").propertyGroup("ic").func("int1")
         .set("table", new String[][]{{"0", "0"}, 
         {"0.006802721088435382", "0.12500000000000178"}, 
         {"0.06316812439261421", "1.2736486486486491"}, 
         {"0.11175898931000966", "2.523648648648649"}, 
         {"0.17978620019436342", "3.5709459459459474"}, 
         {"0.2400388726919339", "4.449324324324325"}, 
         {"0.2905733722060252", "5.192567567567568"}, 
         {"0.3566569484936831", "5.66554054054054"}, 
         {"0.4188532555879494", "5.969594594594595"}, 
         {"0.48104956268221566", "6.10472972972973"}, 
         {"0.5432458697764819", "6.173648648648647"}, 
         {"0.58600583090379", "6.306081081081081"}, 
         {"0.6112730806608356", "7.726351351351352"}, 
         {"0.6443148688046647", "8.570945945945946"}, 
         {"0.694849368318756", "9.449324324324323"}, 
         {"0.7414965986394557", "10.29391891891892"}, 
         {"0.7764820213799805", "10.902027027027025"}, 
         {"0.8231292517006802", "11.543918918918918"}, 
         {"0.8542274052478133", "12.152027027027026"}, 
         {"0.8833819241982507", "12.827702702702702"}, 
         {"0.9183673469387755", "12.996621621621621"}, 
         {"0.9494655004859086", "13.16554054054054"}});
    model.component("comp1").material("mat2").propertyGroup("ic").func("int1").set("extrap", "linear");
    model.component("comp1").material("mat2").propertyGroup("ic").func("int1").set("fununit", new String[]{"%"});
    model.component("comp1").material("mat2").propertyGroup("ic").func("int1").set("argunit", new String[]{"1"});
    model.component("comp1").material("mat2").propertyGroup("ic").identifier("is");
    model.component("comp1").material("mat2").propertyGroup("ic").set("dvol", "dVOLdSOL(c/def.csmax)");
    model.component("comp1").material("mat2").propertyGroup("ic")
         .setPropertyInfo("dvol", "S. Schweidler, L. de Biasi, A. Schiele, P. Hartmann, T. Brezesinski and J. Janek, \"Volume Changes of Graphite Anodes Revisited: A Combined Operando X-Ray Diffraction and In Situ Pressure Analysis Study\", J. Phys. Chem. C, 2018, 122, 8829\u20138835");
    model.component("comp1").material("mat2").propertyGroup("ic").addInput("concentration");
    model.component("comp1").material("mat2").propertyGroup("EquilibriumConcentration")
         .set("csEq", "def.csmax*def.Eeq_inv(V)");
    model.component("comp1").material("mat2").propertyGroup("EquilibriumConcentration")
         .addInput("electricpotential");
    model.component("comp1").material("mat2").propertyGroup("EquilibriumPotentialWithDOCInput")
         .set("Eeq", "def.Eeq(doc)+def.dEeqdT(doc)*(T-298[K])");
    model.component("comp1").material("mat2").propertyGroup("EquilibriumPotentialWithDOCInput")
         .set("dEeqdT", "def.dEeqdT(doc)");
    model.component("comp1").material("mat2").propertyGroup("EquilibriumPotentialWithDOCInput")
         .addInput("degreeofconversion");
    model.component("comp1").material("mat2").propertyGroup("EquilibriumPotentialWithDOCInput")
         .addInput("temperature");
    model.component("comp1").material("mat2").propertyGroup("EquilibriumDegreeOfConversion")
         .set("docEq", "def.Eeq_inv(V)");
    model.component("comp1").material("mat2").propertyGroup("EquilibriumDegreeOfConversion")
         .addInput("electricpotential");

//    In the tree, select Battery > Electrodes > NMC 111, LiNi0.33Mn0.33Co0.33O2 (Positive, Li-ion Battery).
//    Right-click and choose Add to Component 1 (comp1).

    model.component("comp1").material().create("mat3", "Common");
    model.component("comp1").material("mat3").propertyGroup("def").func().create("int1", "Interpolation");
    model.component("comp1").material("mat3").propertyGroup()
         .create("ElectrodePotential", "ElectrodePotential", "Equilibrium potential");
    model.component("comp1").material("mat3").propertyGroup()
         .create("OperationalSOC", "OperationalSOC", "Operational electrode state of charge");
    model.component("comp1").material("mat3").propertyGroup().create("ic", "ic", "Intercalation strain");
    model.component("comp1").material("mat3").propertyGroup("ic").func().create("int1", "Interpolation");
    model.component("comp1").material("mat3").propertyGroup()
         .create("EquilibriumConcentration", "EquilibriumConcentration", "Equilibrium concentration");
    model.component("comp1").material("mat3").propertyGroup()
         .create("EquilibriumPotentialWithDOCInput", "EquilibriumPotentialWithDOCInput", "Equilibrium potential (using degree of conversion as model input)");
    model.component("comp1").material("mat3").propertyGroup()
         .create("EquilibriumDegreeOfConversion", "EquilibriumDegreeOfConversion", "Equilibrium degree of conversion");
    model.component("comp1").material("mat3").propertyGroup().create("pg1", "def", "Electric conductivity");
    model.component("comp1").material("mat3").propertyGroup("pg1").func().create("int1", "Interpolation");
    model.component("comp1").material("mat3").label("NMC 111, LiNi0.33Mn0.33Co0.33O2 (Positive, Li-ion Battery)");
    model.component("comp1").material("mat3").propertyGroup("def").func("int1").set("funcname", "Eeq");
    model.component("comp1").material("mat3").propertyGroup("def").func("int1")
         .set("table", new String[][]{{"0", "4.44"}, 
         {"0.032", "4.34"}, 
         {"0.102", "4.23"}, 
         {"0.187", "4.13"}, 
         {"0.289", "4.025"}, 
         {"0.38", "3.945"}, 
         {"0.543", "3.835"}, 
         {"0.775", "3.71"}, 
         {"0.872", "3.62"}, 
         {"0.925", "3.51"}, 
         {"0.943", "3.42"}, 
         {"0.957", "3.30"}, 
         {"0.966", "3.165"}, 
         {"0.970", "3.02"}, 
         {"0.972", "2.90"}, 
         {"0.975", "2.688"}});
    model.component("comp1").material("mat3").propertyGroup("def").func("int1").set("extrap", "linear");
    model.component("comp1").material("mat3").propertyGroup("def").func("int1").set("fununit", new String[]{"V"});
    model.component("comp1").material("mat3").propertyGroup("def").func("int1").set("argunit", new String[]{""});
    model.component("comp1").material("mat3").propertyGroup("def").func("int1").set("defineinv", true);
    model.component("comp1").material("mat3").propertyGroup("def").func("int1").set("funcinvname", "Eeq_inv");
    model.component("comp1").material("mat3").propertyGroup("def").set("poissonsratio", "");
    model.component("comp1").material("mat3").propertyGroup("def").set("youngsmodulus", "");
    model.component("comp1").material("mat3").propertyGroup("def").set("thermalconductivity", "");
    model.component("comp1").material("mat3").propertyGroup("def").set("thermalexpansioncoefficient", "");
    model.component("comp1").material("mat3").propertyGroup("def").set("poissonsratio", "0.25");
    model.component("comp1").material("mat3").propertyGroup("def")
         .setPropertyInfo("poissonsratio", "Mechanical and physical properties of LiNi0.33Mn0.33Co0.33O2 (NMC),\nE Cheng, K. Hong, N. Taylor, H. Choe,\nJ. Wolfenstinec, J. Sakamotoa,\nJournal of the European Ceramic Society 37 (2017) 3213\u20133217");
    model.component("comp1").material("mat3").propertyGroup("def").set("youngsmodulus", "199[GPa]");
    model.component("comp1").material("mat3").propertyGroup("def")
         .setPropertyInfo("youngsmodulus", "Mechanical and physical properties of LiNi0.33Mn0.33Co0.33O2 (NMC),\nE Cheng, K. Hong, N. Taylor, H. Choe,\nJ. Wolfenstinec, J. Sakamotoa,\nJournal of the European Ceramic Society 37 (2017) 3213\u20133217");
    model.component("comp1").material("mat3").propertyGroup("def")
         .set("thermalconductivity", new String[]{"3.6[W/(m*K)]", "0", "0", "0", "3.6[W/(m*K)]", "0", "0", "0", "3.6[W/(m*K)]"});
    model.component("comp1").material("mat3").propertyGroup("def")
         .setPropertyInfo("thermalconductivity", "Mechanical and physical properties of LiNi0.33Mn0.33Co0.33O2 (NMC),\r\nE Chenga, K. Hong, N. Taylor, H. Choe,\r\nJ. Wolfenstinec, J. Sakamotoa,\r\nJournal of the European Ceramic Society 37 (2017) 3213\u20133217");
    model.component("comp1").material("mat3").propertyGroup("def")
         .set("thermalexpansioncoefficient", new String[]{"1.2e-5[1/K]", "0", "0", "0", "1.2e-5[1/K]", "0", "0", "0", "1.2e-5[1/K]"});
    model.component("comp1").material("mat3").propertyGroup("def")
         .setPropertyInfo("thermalexpansioncoefficient", "Mechanical and physical properties of LiNi0.33Mn0.33Co0.33O2 (NMC),\r\nE Chenga, K. Hong, N. Taylor, H. Choe,\r\nJ. Wolfenstinec, J. Sakamotoa,\r\nJournal of the European Ceramic Society 37 (2017) 3213\u20133217");
    model.component("comp1").material("mat3").propertyGroup("def")
         .set("diffusion", new String[]{"1e-14[m^2/s]", "0", "0", "0", "1e-14[m^2/s]", "0", "0", "0", "1e-14[m^2/s]"});
    model.component("comp1").material("mat3").propertyGroup("def")
         .setPropertyInfo("diffusion", "Jing Ying Ko et al, J. Electrochem. Soc., 166, A2939");
    model.component("comp1").material("mat3").propertyGroup("def").set("csmax", "49000[mol/m^3]");
    model.component("comp1").material("mat3").propertyGroup("def").descr("csmax", "");
    model.component("comp1").material("mat3").propertyGroup("ElectrodePotential").identifier("eeq");
    model.component("comp1").material("mat3").propertyGroup("ElectrodePotential")
         .set("Eeq", "def.Eeq(doc)+dEeqdT*(T-298[K])");
    model.component("comp1").material("mat3").propertyGroup("ElectrodePotential")
         .setPropertyInfo("Eeq", "W. Zheng, M. Shui, J. Shu, S. Gao, D. Xu, L. Chen, L. Feng and Y. Ren, \" GITT studies on oxide cathode LiNi1/3Co1/3Mn1/3O2 synthesized by citric acid assisted high-energy ball milling\", Bull. Mater. Sci., vol. 36, p. A495, 2013");
    model.component("comp1").material("mat3").propertyGroup("ElectrodePotential")
         .set("dEeqdT", "-10[J/mol/K]/F_const");
    model.component("comp1").material("mat3").propertyGroup("ElectrodePotential")
         .setPropertyInfo("dEeqdT", "V Viswanathan, D Choi, D Wang, W Xu, S Towne, R Williford, JG Zhang, J Liu and Z Yang \"Effect of entropy change on lithium intercalation in cathodes and anodes on Li-ion battery thermal management\", Journal of Power Sources 195 (2010) 3720-3729");
    model.component("comp1").material("mat3").propertyGroup("ElectrodePotential").set("cEeqref", "def.csmax");
    model.component("comp1").material("mat3").propertyGroup("ElectrodePotential")
         .setPropertyInfo("cEeqref", "W. Zheng, M. Shui, J. Shu, S. Gao, D. Xu, L. Chen, L. Feng and Y. Ren, \" GITT studies on oxide cathode LiNi1/3Co1/3Mn1/3O2 synthesized by citric acid assisted high-energy ball milling\", Bull. Mater. Sci., vol. 36, p. A495, 2013");
    model.component("comp1").material("mat3").propertyGroup("ElectrodePotential").set("doc", "c/cEeqref");
    model.component("comp1").material("mat3").propertyGroup("ElectrodePotential")
         .descr("doc", "Degree of conversion (state of lithiation)");
    model.component("comp1").material("mat3").propertyGroup("ElectrodePotential").addInput("concentration");
    model.component("comp1").material("mat3").propertyGroup("ElectrodePotential").addInput("temperature");
    model.component("comp1").material("mat3").propertyGroup("OperationalSOC").identifier("opsoc");
    model.component("comp1").material("mat3").propertyGroup("OperationalSOC").set("socmax", "def.Eeq_inv(E_min)");
    model.component("comp1").material("mat3").propertyGroup("OperationalSOC").set("socmin", "def.Eeq_inv(E_max)");
    model.component("comp1").material("mat3").propertyGroup("OperationalSOC").set("E_max", "4.4[V]");
    model.component("comp1").material("mat3").propertyGroup("OperationalSOC").set("E_min", "3.3[V]");
    model.component("comp1").material("mat3").propertyGroup("ic").func("int1").set("funcname", "dVOLdSOL");
    model.component("comp1").material("mat3").propertyGroup("ic").func("int1")
         .set("table", new String[][]{{"1", "0"}, 
         {"0.9260263416001121", "-0.010256410256411108"}, 
         {"0.8670351688384477", "-0.1948717948717955"}, 
         {"0.8113086731119519", "-0.27692307692307727"}, 
         {"0.7506669468964551", "-0.37948717948718036"}, 
         {"0.6949460557657279", "-0.502564102564103"}, 
         {"0.628563822334314", "-0.5846153846153856"}, 
         {"0.55562421185372", "-0.6666666666666674"}, 
         {"0.501531455793751", "-0.7076923076923083"}, 
         {"0.4441600112091916", "-0.7487179487179496"}, 
         {"0.3851716407454113", "-0.953846153846154"}, 
         {"0.3278338237354632", "-1.241025641025642"}, 
         {"0.2737943113352951", "-1.671794871794872"}, 
         {"0.24269440941572107", "-2.0205128205128213"}});
    model.component("comp1").material("mat3").propertyGroup("ic").func("int1").set("extrap", "linear");
    model.component("comp1").material("mat3").propertyGroup("ic").func("int1").set("fununit", new String[]{"%"});
    model.component("comp1").material("mat3").propertyGroup("ic").func("int1").set("argunit", new String[]{"1"});
    model.component("comp1").material("mat3").propertyGroup("ic").identifier("is");
    model.component("comp1").material("mat3").propertyGroup("ic").set("dvol", "dVOLdSOL(c/def.csmax)");
    model.component("comp1").material("mat3").propertyGroup("ic")
         .setPropertyInfo("dvol", "R. Koerver and others, \u201cChemo-mechanical expansion of lithium electrode materials \u2014 on the route to mechanically optimized all-solid-state batteries,\u201d Energy Environ. Sci., vol. 11, pp. 2142\u20132158, 201");
    model.component("comp1").material("mat3").propertyGroup("ic").addInput("concentration");
    model.component("comp1").material("mat3").propertyGroup("EquilibriumConcentration")
         .set("csEq", "def.csmax*def.Eeq_inv(V)");
    model.component("comp1").material("mat3").propertyGroup("EquilibriumConcentration")
         .addInput("electricpotential");
    model.component("comp1").material("mat3").propertyGroup("EquilibriumPotentialWithDOCInput")
         .set("Eeq", "def.Eeq(doc)+dEeqdT*(T-298[K])");
    model.component("comp1").material("mat3").propertyGroup("EquilibriumPotentialWithDOCInput")
         .set("dEeqdT", "-10[J/mol/K]/F_const");
    model.component("comp1").material("mat3").propertyGroup("EquilibriumPotentialWithDOCInput")
         .addInput("degreeofconversion");
    model.component("comp1").material("mat3").propertyGroup("EquilibriumPotentialWithDOCInput")
         .addInput("temperature");
    model.component("comp1").material("mat3").propertyGroup("EquilibriumDegreeOfConversion")
         .set("docEq", "def.Eeq_inv(V)");
    model.component("comp1").material("mat3").propertyGroup("EquilibriumDegreeOfConversion")
         .addInput("electricpotential");
    model.component("comp1").material("mat3").propertyGroup("pg1").func("int1").set("source", "file");
    model.component("comp1").material("mat3").propertyGroup("pg1").func("int1").set("importedname", "NMC_333.txt");
    model.component("comp1").material("mat3").propertyGroup("pg1").func("int1").set("importeddim", "2D");
    model.component("comp1").material("mat3").propertyGroup("pg1").func("int1")
         .set("funcnametable", new String[][]{{"log_sigmas", "1"}});
    model.component("comp1").material("mat3").propertyGroup("pg1").func("int1").set("filecolumns", 3);
    model.component("comp1").material("mat3").propertyGroup("pg1").func("int1")
         .set("columnKeys", new String[]{"col1", "col2", "col3"});
    model.component("comp1").material("mat3").propertyGroup("pg1").func("int1")
         .set("columnType", new String[]{"col1", "arg", "col2", "arg", "col3", "value"});
    model.component("comp1").material("mat3").propertyGroup("pg1").func("int1")
         .set("funcnames", new String[]{"col1", "int1", "col2", "int1", "col3", "log_sigmas"});
    model.component("comp1").material("mat3").propertyGroup("pg1").func("int1").set("fununit", new String[]{""});
    model.component("comp1").material("mat3").propertyGroup("pg1").func("int1")
         .set("argunit", new String[]{"1", "1/K"});
    model.component("comp1").material("mat3").propertyGroup("pg1").func("int1").set("sourcetype", "model");
    model.component("comp1").material("mat3").propertyGroup("pg1")
         .set("electricconductivity", new String[]{"10^log_sigmas(x,1000/T)[S/cm]", "0", "0", "0", "10^log_sigmas(x,1000/T)[S/cm]", "0", "0", "0", "10^log_sigmas(x,1000/T)[S/cm]"});
    model.component("comp1").material("mat3").propertyGroup("pg1")
         .setPropertyInfo("electricconductivity", "Ruhul Amin and Yet-Ming Chiang 2016 J. Electrochem. Soc. 163 A1512");
    model.component("comp1").material("mat3").propertyGroup("pg1").set("x", "min(max(1-c/def.csmax,0),1)");
    model.component("comp1").material("mat3").propertyGroup("pg1").descr("x", "Degree of delithiation");
    model.component("comp1").material("mat3").propertyGroup("pg1").addInput("temperature");
    model.component("comp1").material("mat3").propertyGroup("pg1").addInput("concentration");

//    In the Materials toolbar, click Add Material to close the Add Material window.
//    Draw the model geometry by defining the individual thicknesses of the negative electrode, the separator and the positive electrode.
//    In the Model Builder window, right-click Component 1 (comp1) > Geometry 1 and choose Interval.

    model.component("comp1").geom("geom1").create("i1", "Interval");

//    In the Settings window for Interval, locate the Interval section.
//    From the Specify list, select Interval lengths.

    model.component("comp1").geom("geom1").feature("i1").set("specify", "len");

//    In the table, enter the following settings:

    model.component("comp1").geom("geom1").feature("i1").setIndex("len", "L_neg", 0);
    model.component("comp1").geom("geom1").feature("i1").setIndex("len", "L_sep", 1);
    model.component("comp1").geom("geom1").feature("i1").setIndex("len", "L_pos", 2);

//    Click Build Selected.

    model.component("comp1").geom("geom1").run("i1");
    model.component("comp1").geom("geom1").run();

//    Now assign the previously added materials to the different domains of the geometry. Create selections at the same time to facilitate choosing the same domains later on.
//    In the Model Builder window, under Component 1 (comp1) > Materials, click LiPF6 in 3:7 EC:EMC (Liquid, Li-ion Battery) (mat1).
//    Select Domain 2.

    model.component("comp1").material("mat1").selection().set(2);

//    In the Settings window for Material, locate the Geometric Entity Selection section.
//    Click Create Selection.
//    In the Create Selection dialog, type Separator in the Selection name text field.
//    Click OK.

    model.component("comp1").selection().create("sel1", "Explicit");
    model.component("comp1").selection("sel1").geom(1);
    model.component("comp1").selection("sel1").label("Separator");
    model.component("comp1").selection("sel1").set(2);

    model.component("comp1").material("mat1").selection().named("sel1");

//    In the Model Builder window, click Graphite, LixC6 MCMB (Negative, Li-ion Battery) (mat2).
//    In the Settings window for Material, locate the Geometric Entity Selection section.
//    Click Clear Selection.
//    Select Domain 1.

    model.component("comp1").material("mat2").selection().set(1);

//    Click Create Selection.
//    In the Create Selection dialog, type Negative Electrode in the Selection name text field.
//    Click OK.

    model.component("comp1").selection().create("sel2", "Explicit");
    model.component("comp1").selection("sel2").geom(1);
    model.component("comp1").selection("sel2").label("Negative Electrode");
    model.component("comp1").selection("sel2").set(1);

    model.component("comp1").material("mat2").selection().named("sel2");

//    In the Model Builder window, click NMC 111, LiNi0.33Mn0.33Co0.33O2 (Positive, Li-ion Battery) (mat3).
//    Select Domain 3.

    model.component("comp1").material("mat3").selection().set(3);

//    In the Settings window for Material, locate the Geometric Entity Selection section.
//    Click Create Selection.
//    In the Create Selection dialog, type Positive Electrode in the Selection name text field.
//    Click OK.

    model.component("comp1").selection().create("sel3", "Explicit");
    model.component("comp1").selection("sel3").geom(1);
    model.component("comp1").selection("sel3").label("Positive Electrode");
    model.component("comp1").selection("sel3").set(3);

    model.component("comp1").material("mat3").selection().named("sel3");

//    Now start defining the physics. Use the <l>SOC and Initial Charge Distribution</l> node in order to calculate the initial charge distribution in the cell.
//    In the Model Builder window, under Component 1 (comp1), click Lithium-Ion Battery (liion).
//    In the Settings window for Lithium-Ion Battery, locate the Cross-Sectional Area section.
//    In the \[A_{\textrm{c}}\] text field, type A_cell.

    model.component("comp1").physics("liion").prop("Ac").set("Ac", "A_cell");

//    Locate the Cell Settings section.
//    Select the Define cell state of charge (SOC) and initial charge inventory checkbox.

    model.component("comp1").physics("liion").prop("CellSettings").set("CellSOCandInitialChargeInventory", true);

//    In the Model Builder window, under Component 1 (comp1) > Lithium-Ion Battery (liion), click SOC and Initial Charge Distribution 1.
//    In the Settings window for SOC and Initial Charge Distribution, locate the Initial Cell Charge Distribution section.
//    In the \[\textrm{SOC}_\textrm{0}\] text field, type soc_init.

    model.component("comp1").physics("liion").feature("socicd1").set("SOC_init", "soc_init");

//    In the Model Builder window, click Negative Electrode Domain Selection 1.
//    In the Settings window for Negative Electrode Domain Selection, locate the Domain Selection section.
//    From the Selection list, select Negative Electrode.

    model.component("comp1").physics("liion").feature("socicd1").feature("neges1").selection().named("sel2");

//    In the Model Builder window, click Positive Electrode Domain Selection 1.
//    In the Settings window for Positive Electrode Domain Selection, locate the Domain Selection section.
//    From the Selection list, select Positive Electrode.

    model.component("comp1").physics("liion").feature("socicd1").feature("poses1").selection().named("sel3");

//    In the Model Builder window, under Component 1 (comp1) > Lithium-Ion Battery (liion), click Separator 1.
//    In the Settings window for Separator, locate the Porous Matrix Properties section.
//    In the \[\epsilon_{\textrm{l}}\] text field, type epsl_sep.

    model.component("comp1").physics("liion").feature("sep1").set("epsl", "epsl_sep");

//    In the Physics toolbar, click Domains and choose Porous Electrode.

    model.component("comp1").physics("liion").create("pce1", "PorousElectrode", 1);

//    In the Settings window for Porous Electrode, type Porous Electrode - Negative in the Label text field.

    model.component("comp1").physics("liion").feature("pce1").label("Porous Electrode - Negative");

//    Locate the Domain Selection section.
//    From the Selection list, select Negative Electrode.

    model.component("comp1").physics("liion").feature("pce1").selection().named("sel2");

//    Locate the Electrolyte Properties section.
//    From the Electrolyte material list, select LiPF6 in 3:7 EC:EMC (Liquid, Li-ion Battery) (mat1).

    model.component("comp1").physics("liion").feature("pce1").set("ElectrolyteMaterial", "mat1");

//    Locate the Electrode Properties section.
//    In the \[\sigma_{\textrm{s}}\] text field, type sigmas_neg.

    model.component("comp1").physics("liion").feature("pce1")
         .set("sigma", new String[]{"sigmas_neg", "0", "0", "0", "sigmas_neg", "0", "0", "0", "sigmas_neg"});

//    Locate the Porous Matrix Properties section.
//    In the \[\epsilon_{\textrm{s}}\] text field, type epss_neg.

    model.component("comp1").physics("liion").feature("pce1").set("epss", "epss_neg");

//    In the \[\epsilon_{\textrm{l}}\] text field, type epsl_neg.

    model.component("comp1").physics("liion").feature("pce1").set("epsl", "epsl_neg");

//    Locate the Effective Transport Parameter Correction section.
//    From the Electric conductivity list, select No correction.

    model.component("comp1").physics("liion").feature("pce1").set("ElectricCorrModel", "NoCorr");

//    In the Model Builder window, click Particle Intercalation 1.
//    In the Settings window for Particle Intercalation, locate the Particle Transport Properties section.
//    In the \[r_{\textrm{p}}\] text field, type rp_neg.

    model.component("comp1").physics("liion").feature("pce1").feature("pin1").set("rp", "rp_neg");

//    In the Model Builder window, click Porous Electrode Reaction 1.
//    In the Settings window for Porous Electrode Reaction, locate the Electrode Kinetics section.
//    In the \[i_{\textrm{0,ref}}\left(T\right)\] text field, type i0_ref_neg.

    model.component("comp1").physics("liion").feature("pce1").feature("per1").set("i0_ref", "i0_ref_neg");

//    In the Model Builder window, right-click Porous Electrode - Negative and choose Duplicate.

    model.component("comp1").physics("liion").feature().duplicate("pce2", "pce1");

//    In the Settings window for Porous Electrode, type Porous Electrode - Positive in the Label text field.

    model.component("comp1").physics("liion").feature("pce2").label("Porous Electrode - Positive");

//    Locate the Domain Selection section.
//    From the Selection list, select Positive Electrode.

    model.component("comp1").physics("liion").feature("pce2").selection().named("sel3");

//    Locate the Electrode Properties section.
//    In the \[\sigma_{\textrm{s}}\] text field, type sigmas_pos.

    model.component("comp1").physics("liion").feature("pce2")
         .set("sigma", new String[]{"sigmas_pos", "0", "0", "0", "sigmas_pos", "0", "0", "0", "sigmas_pos"});

//    Locate the Porous Matrix Properties section.
//    In the \[\epsilon_{\textrm{s}}\] text field, type epss_pos.

    model.component("comp1").physics("liion").feature("pce2").set("epss", "epss_pos");

//    In the \[\epsilon_{\textrm{l}}\] text field, type epsl_pos.

    model.component("comp1").physics("liion").feature("pce2").set("epsl", "epsl_pos");

//    In the Model Builder window, expand the Porous Electrode - Positive node, then click Particle Intercalation 1.
//    In the Settings window for Particle Intercalation, locate the Particle Transport Properties section.
//    In the \[r_{\textrm{p}}\] text field, type rp_pos.

    model.component("comp1").physics("liion").feature("pce2").feature("pin1").set("rp", "rp_pos");

//    In the Model Builder window, click Porous Electrode Reaction 1.
//    In the Settings window for Porous Electrode Reaction, locate the Electrode Kinetics section.
//    In the \[i_{\textrm{0,ref}}\left(T\right)\] text field, type i0_ref_pos.

    model.component("comp1").physics("liion").feature("pce2").feature("per1").set("i0_ref", "i0_ref_pos");

//    In the Physics toolbar, click Boundaries and choose Electric Ground.

    model.component("comp1").physics("liion").create("egnd1", "ElectricGround", 0);

//    Select Boundary 1.

    model.component("comp1").physics("liion").feature("egnd1").selection().set(1);

//    In the Settings window for Electric Ground, locate the Boundary Selection section.
//    Click Create Selection.
//    In the Create Selection dialog, type Negative CC in the Selection name text field.
//    Click OK.

    model.component("comp1").selection().create("sel4", "Explicit");
    model.component("comp1").selection("sel4").geom(0);
    model.component("comp1").selection("sel4").label("Negative CC");
    model.component("comp1").selection("sel4").set(1);

    model.component("comp1").physics("liion").feature("egnd1").selection().named("sel4");

//    In the Physics toolbar, click Boundaries and choose Load Cycle.

    model.component("comp1").physics("liion").create("lc1", "LoadCycle", 0);

//    Select Boundary 4.

    model.component("comp1").physics("liion").feature("lc1").selection().set(4);

//    In the Settings window for Load Cycle, locate the Load Type section.
//    From the list, select Galvanostatic.

    model.component("comp1").physics("liion").feature("lc1").set("LoadType", "Galvanostatic");

//    Locate the Probes section.
//    Select the Applied voltage checkbox.

    model.component("comp1").physics("liion").feature("lc1").set("VoltageProbe", true);

//    In the Physics toolbar, click Attributes and choose C Rate.

    model.component("comp1").physics("liion").feature("lc1").create("crate1", "CRate", -1);

//    In the Settings window for C Rate, locate the C-Rate Multiple section.
//    In the \[C_\textrm{set}\] text field, type 1.

    model.component("comp1").physics("liion").feature("lc1").feature("crate1").set("setVal", 1);

//    In the Model Builder window, under Global Definitions, click Default Model Inputs.
//    In the Settings window for Default Model Inputs, locate the Browse Model Inputs section.
//    In the tree, select General > Temperature (K) - minput.T.
//    Find the Expression for remaining selection subsection.
//    In the Temperature text field, type T.

    model.common("cminpt").set("modified", new String[][]{{"temperature", "T"}});

//    Load some variables definitions from a text file.
//    In the Model Builder window, right-click Component 1 (comp1) > Definitions and choose Variables.

    model.component("comp1").variable().create("var1");

//    In the Settings window for Variables, locate the Variables section.
//    Click Load from File.
//    Browse to the model's Application Library folder and double-click the file lib_base_model_1d_variables.txt.
//    To import content from file, use:
//    model.component("comp1").variable("var1").loadFile("FILENAME");
    model.component("comp1").variable("var1")
         .set("sol_neg", "liion.soc_average_pce1", "Degree of lithiation, negative");
    model.component("comp1").variable("var1")
         .set("sol_pos", "liion.soc_average_pce2", "Degree of lithiation, positive");
    model.component("comp1").variable("var1").set("soc_cell", "liion.SOC_cell", "Battery cell state of charge");
    model.component("comp1").variable("var1")
         .set("E_ocp_neg", "mat2.def.Eeq(sol_neg)", "Open-circuit potential in negative electrode");
    model.component("comp1").variable("var1")
         .set("E_ocp_pos", "mat3.def.Eeq(sol_pos)", "Open-circuit potential in positive electrode");
    model.component("comp1").variable("var1").set("E_ocv_cell", "E_ocp_pos-E_ocp_neg", "Open-circuit cell voltage");
    model.component("comp1").variable("var1").set("E_cell", "liion.lc1.E_app", "Cell voltage");
    model.component("comp1").variable("var1")
         .set("E_pol_tot", "E_cell-E_ocv_cell", "Total battery cell polarization");
    model.component("comp1").variable("var1")
         .set("I_1C", "liion.I_1C_cell/A_cell", "1 h charge/discharge current density");

//    In the Model Builder window, click Load Cycle Probe (liion_lc1_volt).
//    In the Settings window for Global Variable Probe, locate the Expression section.
//    Select the Description checkbox.

    model.component("comp1").probe("liion_lc1_volt").set("descractive", true);

//    In the associated text field, type Cell voltage.

    model.component("comp1").probe("liion_lc1_volt").set("descr", "Cell voltage");

//    Click to expand the Table and Window Settings section.
//    Click Add Table.

    model.result().table().create("tbl1", "Table");

    model.component("comp1").probe("liion_lc1_volt").set("table", "tbl1");

//    In the Model Builder window, expand the Results node.
//    In the Model Builder window, expand the Results > Tables node, then click Table 1.
//    In the Settings window for Table, type Cell Voltage Probe Data in the Label text field.

    model.result().table("tbl1").label("Cell Voltage Probe Data");

//    In the Model Builder window, under Study 1, click Step 2: Time Dependent.
//    In the Settings window for Time Dependent, locate the Study Settings section.
//    From the Time unit list, select h.

    return model;
  }

  public static Model run3(Model model) {

    model.study("std1").feature("time").set("tunit", "h");

//    In the Output times text field, type range(0,0.1,0.9).

    model.study("std1").feature("time").set("tlist", "range(0,0.1,0.9)");

//    This model instruction ends here, as the model serves as a basis for the other models referenced above. However, you are free to run this study and explore the automatically generated plots at your convenience.

    model.study("std1").createAutoSequences("all");

    model.component("comp1").probe("liion_lc1_volt").genResult("none");

    model.sol("sol1").runAll();

    model.result().create("pg2", "PlotGroup1D");
    model.result("pg2").set("data", "dset1");
    model.result("pg2").label("Boundary Electrode Potential with Respect to Ground (liion)");
    model.result("pg2").set("titletype", "none");
    model.result("pg2").set("legendpos", "middleright");
    model.result("pg2").create("glob1", "Global");
    model.result("pg2").feature("glob1").set("unit", new String[]{""});
    model.result("pg2").feature("glob1").set("expr", new String[]{"liion.lc1.E_app"});
    model.result("pg2").feature("glob1").set("descr", new String[]{"Applied voltage"});
    model.result("pg2").feature("glob1").set("xdatasolnumtype", "level1");
    model.result("pg2").feature("glob1").set("legend", true);
    model.result("pg2").feature("glob1").set("autosolution", false);
    model.result("pg2").feature("glob1").set("autodescr", true);
    model.result("pg2").set("legendpos", "middleright");
    model.result("pg2").create("glob2", "Global");
    model.result("pg2").feature("glob2").set("unit", new String[]{""});
    model.result("pg2").feature("glob2").set("expr", new String[]{"liion.lc1.I_app"});
    model.result("pg2").feature("glob2").set("descr", new String[]{"Applied current"});
    model.result("pg2").feature("glob2").set("xdatasolnumtype", "level1");
    model.result("pg2").feature("glob2").set("legend", true);
    model.result("pg2").feature("glob2").set("autosolution", false);
    model.result("pg2").feature("glob2").set("autodescr", true);
    model.result("pg2").set("twoyaxes", true);
    model.result("pg2").setIndex("plotonsecyaxis", true, 1, 1);
    model.result().create("pg3", "PlotGroup1D");
    model.result("pg3").set("data", "dset1");
    model.result("pg3").set("ylabel", "SOC (1)");
    model.result("pg3").set("titletype", "none");
    model.result("pg3").set("legendpos", "middleleft");
    model.result("pg3").label("Cell and Average Electrode Cell State of Charge (liion)");
    model.result("pg3").create("glob1", "Global");
    model.result("pg3").feature("glob1").set("unit", new String[]{""});
    model.result("pg3").feature("glob1").set("expr", new String[]{"liion.SOC_cell"});
    model.result("pg3").feature("glob1").set("descr", new String[]{"Cell state of charge"});
    model.result("pg3").feature("glob1").set("xdatasolnumtype", "level1");
    model.result("pg3").feature("glob1").set("legend", true);
    model.result("pg3").feature("glob1").set("autosolution", false);
    model.result("pg3").feature("glob1").set("autodescr", true);
    model.result("pg3").create("glob2", "Global");
    model.result("pg3").feature("glob2").set("unit", new String[]{"", ""});
    model.result("pg3").feature("glob2")
         .set("expr", new String[]{"liion.soc_average_pce1", "liion.soc_average_pce2"});
    model.result("pg3").feature("glob2")
         .set("descr", new String[]{"Average SOC, Porous Electrode - Negative", "Average SOC, Porous Electrode - Positive"});
    model.result("pg3").feature("glob2").set("xdatasolnumtype", "level1");
    model.result("pg3").feature("glob2").set("legend", true);
    model.result("pg3").feature("glob2").set("autosolution", false);
    model.result("pg3").feature("glob2").set("autodescr", true);
    model.result("pg3").feature("glob2").set("linestyle", "dashed");
    model.result().create("pg4", "PlotGroup1D");
    model.result("pg4").set("data", "dset1");
    model.result("pg4").label("Electrode Potential with Respect to Adjacent Reference (liion)");
    model.result("pg4").create("lngr1", "LineGraph");
    model.result("pg4").feature("lngr1").set("xdata", "expr");
    model.result("pg4").feature("lngr1").set("xdataexpr", "x");
    model.result("pg4").feature("lngr1").selection().geom("geom1", 1);
    model.result("pg4").feature("lngr1").selection().set(1, 2, 3);
    model.result("pg4").feature("lngr1").set("expr", new String[]{"liion.Evsref"});
    model.result("pg4").feature("lngr1").set("resolution", "norefine");
    model.result("pg4").feature("lngr1").create("col1", "Color");
    model.result("pg4").feature("lngr1").feature("col1").set("expr", "t");
    model.result("pg4").feature("lngr1").feature("col1").set("colorlegend", true);
    model.result("pg4").feature("lngr1").feature("col1").set("colortable", "Viridis");
    model.result("pg4").feature("lngr1").feature("col1").set("legendtitle", "Time");
    model.result("pg4").feature("lngr1").feature("col1").set("unit", "min");
    model.result("pg4").set("showlegendstitle", true);
    model.result("pg4").set("showlegendsunit", true);
    model.result("pg4").set("titletype", "manual");
    model.result("pg4").set("title", "Solid lines: Negative electrode, Dashed lines: Positive electrode");
    model.result("pg4").feature("lngr1").create("filt1", "LineGraphFilter");
    model.result("pg4").feature("lngr1").feature("filt1").set("expr", "isdefined(root.comp1.liion.isNegative)");
    model.result("pg4").create("lngr2", "LineGraph");
    model.result("pg4").feature("lngr2").set("xdata", "expr");
    model.result("pg4").feature("lngr2").set("xdataexpr", "x");
    model.result("pg4").feature("lngr2").selection().geom("geom1", 1);
    model.result("pg4").feature("lngr2").selection().set(1, 2, 3);
    model.result("pg4").feature("lngr2").set("expr", new String[]{"liion.Evsref"});
    model.result("pg4").feature("lngr2").create("filt1", "LineGraphFilter");
    model.result("pg4").feature("lngr2").feature("filt1").set("expr", "isdefined(root.comp1.liion.isPositive)");
    model.result("pg4").feature("lngr2").create("col1", "Color");
    model.result("pg4").feature("lngr2").feature("col1").set("expr", "t");
    model.result("pg4").feature("lngr2").feature("col1").set("colorlegend", false);
    model.result("pg4").feature("lngr2").feature("col1").set("colortable", "Viridis");
    model.result("pg4").feature("lngr2").set("linestyle", "dashed");
    model.result("pg4").feature("lngr2").set("resolution", "norefine");
    model.result("pg4").set("ylabelactive", true);
    model.result("pg4").set("ylabel", "Negative electrode potential (V)");
    model.result("pg4").set("twoyaxes", true);
    model.result("pg4").setIndex("plotonsecyaxis", true, 1, 1);
    model.result("pg4").set("yseclabelactive", true);
    model.result("pg4").set("yseclabel", "Positive electrode potential (V)");
    model.result().create("pg5", "PlotGroup1D");
    model.result("pg5").set("data", "dset1");
    model.result("pg5").label("Electrolyte Salt Concentration (liion)");
    model.result("pg5").set("titletype", "none");
    model.result("pg5").create("lngr1", "LineGraph");
    model.result("pg5").feature("lngr1").set("xdata", "expr");
    model.result("pg5").feature("lngr1").set("xdataexpr", "x");
    model.result("pg5").feature("lngr1").selection().geom("geom1", 1);
    model.result("pg5").feature("lngr1").selection().set(1, 2, 3);
    model.result("pg5").feature("lngr1").set("expr", new String[]{"cl"});
    model.result("pg5").feature("lngr1").create("col1", "Color");
    model.result("pg5").feature("lngr1").feature("col1").set("expr", "t");
    model.result("pg5").feature("lngr1").feature("col1").set("colorlegend", true);
    model.result("pg5").feature("lngr1").feature("col1").set("colortable", "Viridis");
    model.result("pg5").feature("lngr1").feature("col1").set("legendtitle", "Time");
    model.result("pg5").feature("lngr1").feature("col1").set("unit", "min");
    model.result("pg5").set("showlegendstitle", true);
    model.result("pg5").set("showlegendsunit", true);
    model.result().create("pg6", "PlotGroup1D");
    model.result("pg6").set("data", "dset1");
    model.result("pg6").label("Volumetric Current Density (liion)");
    model.result("pg6").set("titletype", "none");
    model.result("pg6").create("lngr1", "LineGraph");
    model.result("pg6").feature("lngr1").set("xdata", "expr");
    model.result("pg6").feature("lngr1").set("xdataexpr", "x");
    model.result("pg6").feature("lngr1").selection().geom("geom1", 1);
    model.result("pg6").feature("lngr1").selection().set(1, 2, 3);
    model.result("pg6").feature("lngr1").set("expr", new String[]{"liion.ivtot"});
    model.result("pg6").feature("lngr1").set("resolution", "norefine");
    model.result("pg6").feature("lngr1").create("col1", "Color");
    model.result("pg6").feature("lngr1").feature("col1").set("expr", "t");
    model.result("pg6").feature("lngr1").feature("col1").set("colorlegend", true);
    model.result("pg6").feature("lngr1").feature("col1").set("colortable", "Viridis");
    model.result("pg6").feature("lngr1").feature("col1").set("legendtitle", "Time");
    model.result("pg6").feature("lngr1").feature("col1").set("unit", "min");
    model.result("pg6").set("showlegendstitle", true);
    model.result("pg6").set("showlegendsunit", true);
    model.result("pg6").set("titletype", "manual");
    model.result("pg6").set("title", "Solid lines: Negative electrode, Dashed lines: Positive electrode");
    model.result("pg6").feature("lngr1").create("filt1", "LineGraphFilter");
    model.result("pg6").feature("lngr1").feature("filt1").set("expr", "isdefined(root.comp1.liion.isNegative)");
    model.result("pg6").create("lngr2", "LineGraph");
    model.result("pg6").feature("lngr2").set("xdata", "expr");
    model.result("pg6").feature("lngr2").set("xdataexpr", "x");
    model.result("pg6").feature("lngr2").selection().geom("geom1", 1);
    model.result("pg6").feature("lngr2").selection().set(1, 2, 3);
    model.result("pg6").feature("lngr2").set("expr", new String[]{"liion.ivtot"});
    model.result("pg6").feature("lngr2").create("filt1", "LineGraphFilter");
    model.result("pg6").feature("lngr2").feature("filt1").set("expr", "isdefined(root.comp1.liion.isPositive)");
    model.result("pg6").feature("lngr2").create("col1", "Color");
    model.result("pg6").feature("lngr2").feature("col1").set("expr", "t");
    model.result("pg6").feature("lngr2").feature("col1").set("colorlegend", false);
    model.result("pg6").feature("lngr2").feature("col1").set("colortable", "Viridis");
    model.result("pg6").feature("lngr2").set("linestyle", "dashed");
    model.result("pg6").feature("lngr2").set("resolution", "norefine");
    model.result("pg6").set("ylabelactive", true);
    model.result("pg6").set("ylabel", "Negative electrode volumetric current density (A/m<sup>3</sup>)");
    model.result("pg6").set("twoyaxes", true);
    model.result("pg6").setIndex("plotonsecyaxis", true, 1, 1);
    model.result("pg6").set("yseclabelactive", true);
    model.result("pg6").set("yseclabel", "Positive electrode volumetric current density (A/m<sup>3</sup>)");
    model.result().create("pg7", "PlotGroup1D");
    model.result("pg7").set("data", "dset1");
    model.result("pg7").label("Particle Surface State of Charge (liion)");
    model.result("pg7").create("lngr1", "LineGraph");
    model.result("pg7").feature("lngr1").set("xdata", "expr");
    model.result("pg7").feature("lngr1").set("xdataexpr", "x");
    model.result("pg7").feature("lngr1").selection().geom("geom1", 1);
    model.result("pg7").feature("lngr1").selection().set(1, 2, 3);
    model.result("pg7").feature("lngr1").set("expr", new String[]{"liion.socloc_surface"});
    model.result("pg7").feature("lngr1").set("resolution", "norefine");
    model.result("pg7").feature("lngr1").create("col1", "Color");
    model.result("pg7").feature("lngr1").feature("col1").set("expr", "t");
    model.result("pg7").feature("lngr1").feature("col1").set("colorlegend", true);
    model.result("pg7").feature("lngr1").feature("col1").set("colortable", "Viridis");
    model.result("pg7").feature("lngr1").feature("col1").set("legendtitle", "Time");
    model.result("pg7").feature("lngr1").feature("col1").set("unit", "min");
    model.result("pg7").set("showlegendstitle", true);
    model.result("pg7").set("showlegendsunit", true);
    model.result("pg7").set("titletype", "manual");
    model.result("pg7").set("title", "Solid lines: Negative electrode, Dashed lines: Positive electrode");
    model.result("pg7").feature("lngr1").create("filt1", "LineGraphFilter");
    model.result("pg7").feature("lngr1").feature("filt1").set("expr", "isdefined(root.comp1.liion.isNegative)");
    model.result("pg7").create("lngr2", "LineGraph");
    model.result("pg7").feature("lngr2").set("xdata", "expr");
    model.result("pg7").feature("lngr2").set("xdataexpr", "x");
    model.result("pg7").feature("lngr2").selection().geom("geom1", 1);
    model.result("pg7").feature("lngr2").selection().set(1, 2, 3);
    model.result("pg7").feature("lngr2").set("expr", new String[]{"liion.socloc_surface"});
    model.result("pg7").feature("lngr2").create("filt1", "LineGraphFilter");
    model.result("pg7").feature("lngr2").feature("filt1").set("expr", "isdefined(root.comp1.liion.isPositive)");
    model.result("pg7").feature("lngr2").create("col1", "Color");
    model.result("pg7").feature("lngr2").feature("col1").set("expr", "t");
    model.result("pg7").feature("lngr2").feature("col1").set("colorlegend", false);
    model.result("pg7").feature("lngr2").feature("col1").set("colortable", "Viridis");
    model.result("pg7").feature("lngr2").set("linestyle", "dashed");
    model.result("pg7").feature("lngr2").set("resolution", "norefine");
    model.result("pg7").set("ylabelactive", true);
    model.result("pg7").set("ylabel", "Particle surface state of charge (1)");
    model.result("pg2").run();

    model.sol().remove("sol1");
    model.sol().remove("sol2");

    model.result("pg1").set("window", "window1");
    model.result("pg1").run();
    model.result().remove("pg1");

    model.title("Lithium-Ion Battery Base Model in 1D");

    model
         .description("This is a template base model containing the physics, geometry and mesh of a lithium-ion battery, defined in 1D.\n\nThe model makes use of four lithiation parameters which are used to define the relative balancing of the negative and positive electrodes, as well as global cell state of charge (SOC) variable. In addition, a cell cross-sectional capacity parameter is used to define the electrode thicknesses.\n\nThe base model is used by various tutorials in the Battery Design Module Application library.");

    return model;
  }

  public static void main(String[] args) {
    Model model = run();
    model = run2(model);
    run3(model);
  }

}
