示例#1
0
文件: Zone.java 项目: beaudin/bremo
  /**
   * Erzeugt eine Zonen mit den angegebenen Startparametern
   *
   * @param p_init
   * @param V_init
   * @param T_init
   * @param m_init
   * @param gg GasGemsich oder Spezies
   * @param burns
   * @param id
   */
  public Zone(
      CasePara cp,
      double p_init,
      double V_init,
      double T_init,
      double m_init,
      Spezies gg,
      boolean burns,
      int id) {

    CP = cp;

    //			if(Bremo.get_casePara().get_zonenVerwaltung().existsID(id))
    //				throw new IllegalArgumentException("Zone: " +
    //				"Es wurde versucht eine Zone mit einer bereits bestehenden ID zu erzeugen");

    this.GG_SOLVER = cp.OHC_SOLVER;
    this.ID = id; // TODO ZonenID automatisch Verwalten?
    this.gg_Zone = new GasGemisch("ggZone" + id);
    this.burns = burns;

    Hashtable<Spezies, Double> einzelMassen = new Hashtable<Spezies, Double>();

    if (gg.isGasGemisch() && !CP.SPEZIES_FABRIK.isToIntegrate(gg)) {
      einzelMassen =
          this.get_einzelMassenHash(
              ((GasGemisch) gg).get_speziesMassenBruecheDetailToIntegrate(), m_init);
    } else {
      einzelMassen.put(gg, m_init);
    }
    this.set_p_V_T_mi(p_init, V_init, T_init, einzelMassen);
  }
示例#2
0
文件: Zone.java 项目: beaudin/bremo
  /**
   * Mit dieser Methode kann ein Massenelement eines Gases der Zone zugemischt werden. --> es wird
   * nur die Zusammensetzung und die Gesamtmasse der Zone geändert nicht aber die Temperatur
   *
   * @param idx --> Rechenindex
   * @param mZu --> zugemischtes Massenelement [kg]
   * @param sZu --> SpeziesObjekt des Massenelements
   */
  public void massenElementZumischen(double mZu, Spezies sZu) {

    Hashtable<Spezies, Double> massenBruchHash_Zone = gg_Zone.get_speziesMassenBruecheDetail();

    Hashtable<Spezies, Double> massenBruchHashNeu = new Hashtable<Spezies, Double>(4);
    double m_Zone_neu = mZu + m_Zone;
    if (m_Zone_neu < 0) {
      try {
        throw new MiscException(
            "ERROR: Aus Zone " + ID + " wird mehr Masse entnommen als vorhanden ist");

      } catch (MiscException miscE) {
        miscE.stopBremo();
      }
    }
    Hashtable<Spezies, Double> einzelMassenHashIn = new Hashtable<Spezies, Double>();
    // einzelmassen der zugefuehrten Spezies bestimmen
    if (mZu < 0) {
      if (sZu.isGasGemisch()) {
        einzelMassenHashIn = // enthaelt negative Werte!!
            this.get_einzelMassenHash(((GasGemisch) sZu).get_speziesMassenBruecheDetail(), mZu);
      } else {
        einzelMassenHashIn.put(sZu, mZu);
      }
      // einzelmassen der Zone bestimmen
      Hashtable<Spezies, Double> einzelMassenHashZone =
          this.get_einzelMassenHash(massenBruchHash_Zone, m_Zone);

      // Addieren der einzelnen Massen von Zone und sZu
      Enumeration<Spezies> e = einzelMassenHashZone.keys();
      Spezies spez;
      double mTemp;

      while (e.hasMoreElements()) {
        spez = e.nextElement();
        mTemp = einzelMassenHashZone.get(spez);

        if (einzelMassenHashIn.containsKey(spez))
          mTemp = mTemp + einzelMassenHashIn.get(spez); // Wert in Hashtable ist negativ

        double massenBruch = mTemp / m_Zone_neu;
        massenBruchHashNeu.put(spez, massenBruch);

        if (massenBruch
            < 0) { // kommt vor wenn eine Masse entnommen werden soll die gar nicht in der Zone ist!
          try {
            throw new MiscException(
                "ERROR: In einer Zone tritt ein negativer Massenbruch auf \n"
                    + spez.get_name()
                    + ": "
                    + massenBruch);

          } catch (MiscException miscE) {
            massenBruchHashNeu.put(spez, 0d);
            //							miscE.stopBremo(); //TODO check mich
          }
        }
      }
    } else {
      massenBruchHashNeu.put(gg_Zone, m_Zone / m_Zone_neu);
      if (massenBruchHashNeu.containsKey(
          sZu)) { // ==True wenn der Zone eine Masse von sich selbst zugefuehrt wird
        massenBruchHashNeu.put(gg_Zone, 1D);
      } else massenBruchHashNeu.put(sZu, mZu / m_Zone_neu);
    }

    Hashtable<Spezies, Double> molenBruchHash = new Hashtable<Spezies, Double>(4);
    molenBruchHash = GasGemisch.Gasmischer.massenBruch2molenBruch(massenBruchHashNeu);

    GasGemisch gasGemisch = new GasGemisch(molenBruchHash, "");
    // würde man hier die
    gg_Zone.set_Gasmischung_molenBruch(gasGemisch.get_speziesMolenBruecheDetail());
    m_Zone = m_Zone_neu;
  }
示例#3
0
文件: Zone.java 项目: beaudin/bremo
  public void set_dm_ein(double dm_zu, double T_zu, Spezies spez_zu) {
    if (dm_zu < 0) {
      throw new IllegalArgumentException(
          "Es wurde versucht die Methode \"set_massenstrom_ein()\" "
              + "mit einen negativen Massenstrom aufzurufen");
    }
    if (dm_zu != 0) { // wenn die Masse null ist mach garnichts			

      // Berechnen des Energiestroms
      double dU = spez_zu.get_u_mass(T_Zone) * dm_zu;
      sumdU = sumdU + dU;
      double dH = spez_zu.get_h_mass(T_zu) * dm_zu;
      sumdH = sumdH + dH;

      // Hinzufügen der Einzelmassen der zugefügten Spezies zur Hashtable dmj
      Hashtable<Spezies, Double> einzelMassenHash_zu = new Hashtable<Spezies, Double>();
      if (spez_zu.isGasGemisch() && CP.SPEZIES_FABRIK.isToIntegrate(spez_zu) == false) {

        Hashtable<Spezies, Double> massenBruchHash_zu =
            ((GasGemisch) spez_zu).get_speziesMassenBruecheDetailToIntegrate();

        // Erstellen der Hashtable mit den Einzelmassen der Grundspezies (CO2, O2, usw....
        einzelMassenHash_zu = this.get_einzelMassenHash(massenBruchHash_zu, dm_zu);

      } else {
        einzelMassenHash_zu.put(spez_zu, dm_zu);
      }

      // Hinzufügen der Änderung der Grundspeziesmassen
      Enumeration<Spezies> e = einzelMassenHash_zu.keys();
      Spezies spez;
      while (e.hasMoreElements()) {
        spez = e.nextElement();
        if (!CP.SPEZIES_FABRIK.isToIntegrate(spez)) {
          try {
            throw new BirdBrainedProgrammerException(
                "In Zone "
                    + this.ID
                    + " wurde eine Spezies "
                    + "("
                    + spez.get_name()
                    + ") eingebracht die nicht integriert werden soll"
                    + " (isToIntegrate() liefert false)");
          } catch (BirdBrainedProgrammerException bbpe) {
            bbpe.stopBremo();
          }
        }
        if (dmj_ein.containsKey(spez)) {
          dmj_ein.put(spez, einzelMassenHash_zu.get(spez) + dmj_ein.get(spez));
        } else {
          dmj_ein.put(spez, einzelMassenHash_zu.get(spez));
        }
      }
      //			e=null;
      //			e=einzelMassenHash_zu.keys();
      //			spez=null;
      //			double dmCheck=0;
      //			while(e.hasMoreElements()){
      //				spez=e.nextElement();
      //				dmCheck+=einzelMassenHash_zu.get(spez);
      //			}
      //			if(dmCheck!=dm_zu)
      //				System.out.println("Zone.set_dm_ein: dm_zu !=dmCheck " +((dmCheck-dm_zu)));
    }
  }
示例#4
0
文件: Zone.java 项目: beaudin/bremo
  /**
   * Berechnet den Massenverlust bei entnahme einer BESTIMMTEN Spezies Dieser Aufruf sollte nur vom
   * einzonigen Modell benoetigt werden
   *
   * @param dm_a [kg] muss groeser Null sein
   * @throws NegativeMassException
   */
  public void set_dm_aus(double dm_a, Spezies spez) throws NegativeMassException {
    if (dm_a < 0)
      throw new IllegalArgumentException(
          "\"set_dm_aus()\"  wurde fuer Zone "
              + ID
              + " mit einem negativen Massenstrom aufgerufen");
    if (dm_a > 0) {
      // Hinzufügen der Einzelmassen der entnommenen Spezies zur Hashtable dmj
      Hashtable<Spezies, Double> einzelMassenHash_aus = new Hashtable<Spezies, Double>();
      if (spez.isGasGemisch() && CP.SPEZIES_FABRIK.isToIntegrate(spez) == false) {
        Hashtable<Spezies, Double> massenBruchHash_aus =
            ((GasGemisch) spez).get_speziesMassenBruecheDetailToIntegrate();

        // Erstellen der Hashtable mit den Einzelmassen der Grundspezies (CO2, O2, usw....
        einzelMassenHash_aus = this.get_einzelMassenHash(massenBruchHash_aus, dm_a);

      } else {
        einzelMassenHash_aus.put(spez, dm_a);
      }
      // Hinzufügen der Änderung der Grundspeziesmassen
      Enumeration<Spezies> e = einzelMassenHash_aus.keys();
      Spezies spez1;
      while (e.hasMoreElements()) {
        spez1 = e.nextElement();
        if (!CP.SPEZIES_FABRIK.isToIntegrate(spez1)) {
          try {
            throw new BirdBrainedProgrammerException(
                "Aus Zone "
                    + this.ID
                    + " wurde eine Spezies "
                    + "("
                    + spez1.get_name()
                    + ") entnommen die nicht integriert werden soll"
                    + " (\"isToIntegrate()\" liefert false)");
          } catch (BirdBrainedProgrammerException bbpe) {
            bbpe.stopBremo();
          }
        }
        if (!gg_Zone.get_speziesMassenBruecheDetailToIntegrate().containsKey(spez1)
            && einzelMassenHash_aus.get(spez1)
                > 0) // Es kann sein, dass Spezies mit einem Massenbruch von 0 in der Hashtable
                     // stehen
        throw new NegativeMassException(
              "Aus Zone "
                  + this.ID
                  + " soll eine Spezies"
                  + "("
                  + spez1.get_name()
                  + ") entnommen werden "
                  + "die in der Zone nicht vorhanden ist");
      }

      e = null;
      e = einzelMassenHash_aus.keys();
      spez1 = null;
      while (e.hasMoreElements()) {
        spez1 = e.nextElement();
        if (this.dm_aus.containsKey(spez1)) {
          this.dm_aus.put(spez1, einzelMassenHash_aus.get(spez1) + dm_aus.get(spez1));
        } else {
          this.dm_aus.put(spez1, einzelMassenHash_aus.get(spez1));
        }
      }

      //			e=null;
      //			e=einzelMassenHash_aus.keys();
      //			spez1=null;
      //			double dmCheck=0;
      //			while(e.hasMoreElements()){
      //				spez1=e.nextElement();
      //				dmCheck+=einzelMassenHash_aus.get(spez1);
      //			}
      //			if(dmCheck!=dm_a)
      //				System.out.println("Zone.set_dm_aus: dm_a !=dmCheck " + ((dmCheck-dm_a)) );

      // das hier muss nach der NegativeMassException stehen!! Wenn die Exception geworfen
      // wird und dieser Code ist schon ausgefuehrt wuerde die Energie aber nicht dei Masse
      // beruecksichtigt
      double dU = spez.get_u_mass(T_Zone) * dm_a;
      sumdU = sumdU - dU;
      double dH = spez.get_h_mass(T_Zone) * dm_a;
      sumdH = sumdH - dH;
    }
  }