Example #1
0
  // ## operation writeChemkinReactions(ReactionModel)
  // 10/26/07 gmagoon: changed to take temperature as parameter (it doesn't seem like this method is
  // currently used anywhere)
  public static String writeChemkinReactions(
      ReactionModel p_reactionModel, Temperature p_temperature) {
    // #[ operation writeChemkinReactions(ReactionModel)
    StringBuilder result = new StringBuilder();
    result.append("REACTIONS	KCAL/MOLE\n");
    CoreEdgeReactionModel cerm = (CoreEdgeReactionModel) p_reactionModel;

    LinkedHashSet all = cerm.getReactedReactionSet();

    HashSet hs = new HashSet();
    int numfor = 0;
    int numrev = 0;
    int numdup = 0;
    int numnorev = 0;
    for (Iterator iter = all.iterator(); iter.hasNext(); ) {
      Reaction rxn = (Reaction) iter.next();
      if (rxn.isForward()) {
        result.append(
            " "
                + rxn.toChemkinString(p_temperature)
                + "\n"); // 10/26/07 gmagoon: changed to avoid use of Global.temperature
        //	result.append(" " + rxn.toChemkinString(Global.temperature) + "\n");

      }
    }

    result.append("END\n");

    return result.toString();

    // #]
  }
 private static Kinetics[] getReactionKinetics(Reaction r) {
   Kinetics[] allKinetics;
   if (r.isForward()) {
     allKinetics = r.getKinetics();
   } else if (r.isBackward()) {
     allKinetics = r.getFittedReverseKinetics();
   } else {
     allKinetics = r.getKinetics();
   }
   return allKinetics;
 }
Example #3
0
  // ## operation writeChemkinReactions(ReactionModel)
  public static String writeChemkinPdepReactions(
      ReactionModel p_reactionModel, SystemSnapshot p_beginStatus) {
    // #[ operation writeChemkinReactions(ReactionModel)

    StringBuilder result = new StringBuilder();
    //      result.append("REACTIONS	KCAL/MOLE\n");

    String reactionHeader = "";

    String units4Ea = ArrheniusKinetics.getEaUnits();
    if (units4Ea.equals("cal/mol")) reactionHeader = "CAL/MOL\t";
    else if (units4Ea.equals("kcal/mol")) reactionHeader = "KCAL/MOL\t";
    else if (units4Ea.equals("J/mol")) reactionHeader = "JOULES/MOL\t";
    else if (units4Ea.equals("kJ/mol")) reactionHeader = "KJOULES/MOL\t";
    else if (units4Ea.equals("Kelvins")) reactionHeader = "KELVINS\t";

    String units4A = ArrheniusKinetics.getAUnits();
    if (units4A.equals("moles")) reactionHeader += "MOLES\n";
    else if (units4A.equals("molecules")) reactionHeader += "MOLECULES\n";

    result.append("REACTIONS\t" + reactionHeader);

    LinkedList pDepList = new LinkedList();
    LinkedList nonPDepList = new LinkedList();
    LinkedList duplicates = new LinkedList();

    CoreEdgeReactionModel cerm = (CoreEdgeReactionModel) p_reactionModel;
    // first get troe and thirdbodyreactions
    for (Iterator iter = cerm.getReactionSet().iterator(); iter.hasNext(); ) {
      Reaction r = (Reaction) iter.next();
      /*
       * 1Jul2009-MRH:
       * 	Added extra set of parenthesis.  Before, if the rxn was reverse but an instance of
       * 		TROEReaction, it would also be added to the pDepList, resulting in RMG reporting
       * 		both rxns (forward and reverse) in the chem.inp file, w/o a DUP tag.  Furthermore,
       * 		both rxns were given the same set of Arrhenius parameters.  Running this in
       * 		Chemkin-v4.1.1 resulted in an error.
       */
      if (r.isForward()
          && (r instanceof ThirdBodyReaction
              || r instanceof TROEReaction
              || r instanceof LindemannReaction)) {
        pDepList.add(r);
      }
    }

    for (Iterator iter = PDepNetwork.getNetworks().iterator(); iter.hasNext(); ) {
      PDepNetwork pdn = (PDepNetwork) iter.next();
      for (ListIterator pdniter = pdn.getNetReactions().listIterator(); pdniter.hasNext(); ) {
        PDepReaction rxn = (PDepReaction) pdniter.next();
        if (cerm.categorizeReaction(rxn) != 1) continue;

        // check if this reaction is not already in the list and also check if this reaction has a
        // reverse reaction
        // which is already present in the list.
        if (rxn.getReverseReaction() == null) rxn.generateReverseReaction();

        if (!rxn.reactantEqualsProduct()
            && !pDepList.contains(rxn)
            && !pDepList.contains(rxn.getReverseReaction())) {
          pDepList.add(rxn);
        }
      }
    }
    LinkedList removeReactions = new LinkedList();
    for (Iterator iter = p_reactionModel.getReactionSet().iterator(); iter.hasNext(); ) {
      Reaction r = (Reaction) iter.next();

      boolean presentInPDep = false;
      if (r.isForward()
          && !(r instanceof ThirdBodyReaction)
          && !(r instanceof TROEReaction)
          && !(r instanceof LindemannReaction)) {
        Iterator r_iter = pDepList.iterator();
        while (r_iter.hasNext()) {
          Reaction pDepr = (Reaction) r_iter.next();
          if (pDepr.equals(r)) {
            //      				removeReactions.add(pDepr);
            //      				duplicates.add(pDepr);
            //      				if (!r.hasAdditionalKinetics()){
            //      					duplicates.add(r);
            //      					presentInPDep = true;
            //      				}
            presentInPDep = true;
            nonPDepList.add(r);
          }
        }
        if (!presentInPDep) nonPDepList.add(r);
      }
    }

    for (Iterator iter = removeReactions.iterator(); iter.hasNext(); ) {
      Reaction r = (Reaction) iter.next();
      pDepList.remove(r);
    }

    for (Iterator iter = pDepList.iterator(); iter.hasNext(); ) {
      Reaction r = (Reaction) iter.next();
      // 6Jul2009-MRH:
      //	Pass both system temperature and pressure to function toChemkinString.
      //		The only PDepKineticsModel that uses the passed pressure is RATE
      result.append(
          r.toChemkinString(p_beginStatus.getTemperature(), p_beginStatus.getPressure())
              + "\n"); // 10/26/07 gmagoon: eliminating use of Global.temperature; **** I use
                       // beginStatus here, which may or may not be appropriate
      // result.append(r.toChemkinString(Global.temperature)+"\n");
    }
    for (Iterator iter = nonPDepList.iterator(); iter.hasNext(); ) {
      Reaction r = (Reaction) iter.next();
      result.append(
          r.toChemkinString(p_beginStatus.getTemperature(), p_beginStatus.getPressure()) + "\n");
      // result.append(r.toChemkinString(Global.temperature)+"\n");
    }
    for (Iterator iter = duplicates.iterator(); iter.hasNext(); ) {
      Reaction r = (Reaction) iter.next();
      result.append(
          r.toChemkinString(p_beginStatus.getTemperature(), p_beginStatus.getPressure())
              + "\n\tDUP\n");
      // result.append(r.toChemkinString(Global.temperature)+"\n\tDUP\n");
    }

    result.append("END\n");

    return result.toString();

    // #]
  }
 public static String writeOutputString(Reaction r, TemplateReactionGenerator rtLibrary) {
   String listOfReactions = "";
   Temperature stdtemp = new Temperature(298, "K");
   double Hrxn = r.calculateHrxn(stdtemp);
   // If r Reaction is from Reaction Library add it to list of reaction append its kinetics and
   // return
   String source = r.getKineticsSource(0);
   if (source == null) {
     // If source is null I am assuming that its not a Reaction from Reaction Library or Seed
     // Mechanism
     source = "TemplateReaction:";
   }
   StringTokenizer st = new StringTokenizer(source, ":");
   String reaction_type = st.nextToken();
   // Reactions from Reaction Libraries:
   if (reaction_type.equals("ReactionLibrary")) {
     // We will get the forward reaction
     if (r.isBackward()) {
       r = r.getReverseReaction();
       Hrxn = -Hrxn; // Reversing the heat of reaction
     }
     Kinetics[] allKinetics = getReactionKinetics(r);
     for (int numKinetics = 0; numKinetics < allKinetics.length; ++numKinetics) {
       listOfReactions +=
           r.toString() + "\t" + getFormattedKinetics(allKinetics[numKinetics], Hrxn);
       if (allKinetics.length != 1) listOfReactions += "\tDUP\n";
     }
     return listOfReactions;
   }
   // Reactions NOT from Reaction Libraries are from Templates:
   if (r.isForward()) {
     Kinetics[] allKinetics = r.getKinetics();
     for (int numKinetics = 0; numKinetics < allKinetics.length; ++numKinetics) {
       listOfReactions +=
           r.toString() + "\t" + getFormattedKinetics(allKinetics[numKinetics], Hrxn);
       if (allKinetics.length != 1) listOfReactions += "\tDUP\n";
     }
   } else if (r.isBackward()) {
     LinkedHashSet reverseReactions = new LinkedHashSet();
     Iterator iter2 = r.getStructure().getProducts();
     Species species1 = (Species) iter2.next();
     Species species2 = species1;
     while (iter2.hasNext()) species2 = (Species) iter2.next();
     String rxnFamilyName = "";
     if (r instanceof TemplateReaction) {
       rxnFamilyName = ((TemplateReaction) r.getReverseReaction()).getReactionTemplate().getName();
     }
     LinkedHashSet speciesHashSet = new LinkedHashSet();
     speciesHashSet.add(species1);
     reverseReactions = rtLibrary.react(speciesHashSet, species2, rxnFamilyName);
     for (Iterator iter3 = reverseReactions.iterator(); iter3.hasNext(); ) {
       Reaction currentRxn = (Reaction) iter3.next();
       if (currentRxn.getStructure() == r.getReverseReaction().getStructure()) {
         Kinetics[] allKinetics = currentRxn.getKinetics();
         for (int numKinetics = 0; numKinetics < allKinetics.length; ++numKinetics) {
           listOfReactions +=
               currentRxn.toString()
                   + "\t"
                   + getFormattedKinetics(allKinetics[numKinetics], -Hrxn);
           if (allKinetics.length != 1) listOfReactions += "\tDUP\n";
         }
       }
     }
   } else {
     Kinetics[] allKinetics = r.getKinetics();
     for (int numKinetics = 0; numKinetics < allKinetics.length; ++numKinetics) {
       listOfReactions +=
           r.toString() + "\t" + getFormattedKinetics(allKinetics[numKinetics], Hrxn);
       if (allKinetics.length != 1) listOfReactions += "\tDUP\n";
     }
   }
   return listOfReactions;
 }