Пример #1
0
/**
 * Return a new, empty kinetics manager.
 */
Kinetics* KineticsFactory::newKinetics(const string& model)
{

    int ikin = -1;
    int n;
    for (n = 0; n < ntypes; n++) {
        if (model == _types[n]) {
            ikin = _itypes[n];
        }
    }
    Kinetics* k=0;
    switch (ikin) {

    case cGasKinetics:
        k = new GasKinetics;
        break;

    case cGRI30:
        k = new GRI_30_Kinetics;
        break;

    case cInterfaceKinetics:
        k = new InterfaceKinetics;
        break;

    default:
        throw UnknownKineticsModel("KineticsFactory::newKinetics",
                                   model);
    }
    return k;
}
Пример #2
0
Kinetics* KineticsFactory::newKinetics(const string& model)
{
    string lcmodel = lowercase(model);
    if (lcmodel == "none") {
        return new Kinetics();
    } else if (lcmodel == "gaskinetics") {
        return new GasKinetics();
    } else if (lcmodel == "interface") {
        return new InterfaceKinetics();
    } else if (lcmodel == "edge") {
        return new EdgeKinetics();
    } else if (lcmodel == "aqueouskinetics") {
        return new AqueousKinetics();
    } else {
        throw UnknownKineticsModel("KineticsFactory::newKinetics", model);
    }
}
Пример #3
0
Kinetics* KineticsFactory::
newKinetics(XML_Node& phaseData, vector<ThermoPhase*> th)
{
    /*
     * Look for a child of the xml element phase called
     * "kinetics". It has an attribute name "model".
     * Store the value of that attribute in the variable kintype
     */
    string kintype = phaseData.child("kinetics")["model"];
    /*
     * look up the string kintype in the list of known
     * kinetics managers (list is kept at the top of this file).
     * Translate it to an integer value, ikin.
     */
    int ikin=-1;
    int n;
    for (n = 0; n < ntypes; n++) {
        if (kintype == _types[n]) {
            ikin = _itypes[n];
        }
    }
    /*
     * Assign the kinetics manager based on the value of ikin.
     * Kinetics managers are classes derived from the base
     * Kinetics class. Unknown kinetics managers will throw a
     * CanteraError here.
     */
    Kinetics* k=0;
    switch (ikin) {

    case 0:
        k = new Kinetics;
        break;

    case cGasKinetics:
        k = new GasKinetics;
        break;

    case cGRI30:
        k = new GRI_30_Kinetics;
        break;

    case cInterfaceKinetics:
        k = new InterfaceKinetics;
        break;

    case cEdgeKinetics:
        k = new EdgeKinetics;
        break;

    case cAqueousKinetics:
        k = new AqueousKinetics;
        break;

    default:
        throw UnknownKineticsModel("KineticsFactory::newKinetics",
                                   kintype);
    }

    // Now that we have the kinetics manager, we can
    // import the reaction mechanism into it.
    importKinetics(phaseData, th, k);

    // Return the pointer to the kinetics manager
    return k;
}