예제 #1
0
파일: Zone.java 프로젝트: beaudin/bremo
 /**
  * Mit dieser Methode kann ein Massenelement eines Gases mit der Temperatur T_m der Zone mit der
  * Temperatur T_Zone zugemischt werden. Die sich ergebende Mischungstemperatur wird für
  * VERÄNDERLICHE CVs und ein adiabates System nach dem ersten HS berechnet. Das Volumen der Zone
  * bleibt Konstant --> das zugemischte Massenelement leistet Verschiebearbeit!
  *
  * @param m_Zu --> zugemischtes Massenelement [kg]
  * @param T_Zu --> Temperatur des zugemischten Massenelements [K]
  * @param s_Zu --> Zusammensetzung des Massenelements
  */
 public void massenElementZumischenKonstVol(double m_Zu, double T_Zu, Spezies s_Zu) {
   // adiabate Mischungstemperatur nach dem ersten Hauptsatz
   double Tm = 278.15, U1, U_zu, U1m, U_zum, Cvm1, Cv_zum, F, dF, Tm_buffer;
   U1 = gg_Zone.get_u_mass(T_Zone) * m_Zone;
   U_zu = s_Zu.get_u_mass(T_Zu) * m_Zu;
   int idx = 0;
   // Newtonverfahren für F(Tm)= U1(T1)+U2(T2)-U1(Tm)-U2(Tm)=0
   // mit dF/dT=-m1*Cv1(Tm)-m2*Cv2(Tm)
   do {
     Tm_buffer = Tm;
     U1m = gg_Zone.get_u_mass(Tm) * m_Zone;
     U_zum = s_Zu.get_u_mass(Tm) * m_Zu;
     Cvm1 = gg_Zone.get_cv_mass(Tm) * m_Zone;
     Cv_zum = s_Zu.get_cv_mass(Tm) * m_Zu;
     F = U1 + U_zu - U1m - U_zum;
     dF = -Cvm1 - Cv_zum;
     Tm = Tm - F / dF;
     idx++;
   } while (idx < 1000 && Math.abs(Tm - Tm_buffer) > 0.1);
   if (idx >= 1000) {
     try {
       throw new MiscException("t");
     } catch (MiscException me) {
       me.log_Warning("Mangelnde Konvergenz bei der Berechnung der Mischungstemperatur");
     }
   }
   T_Zone = Tm;
   // dieser Aufruf muss nach der Temperaturberechnung erfolgen da sich hier die Masse der Zone
   // ändert
   massenElementZumischen(m_Zu, s_Zu);
 }
예제 #2
0
파일: Zone.java 프로젝트: beaudin/bremo
  public static Zone zonenMischen(CasePara cp, Zone z1, Zone z2, boolean burns, int ID) {
    double p = z1.get_p(); // fuer beide Zonen gleich
    double m1 = z1.get_m();
    double T1 = z1.get_T();
    double V1 = z1.get_V();
    Spezies s1 = z1.get_ggZone();

    double m2 = z2.get_m();
    double T2 = z2.get_T();
    double V2 = z2.get_V();
    Spezies s2 = z2.get_ggZone();

    // Erzeugen einer Spezies die durch die Mischung der beiden ZonenSpezies entsteht
    GasGemisch s0 = new GasGemisch("zonenGemisch");
    Hashtable<Spezies, Double> ht0 = new Hashtable<Spezies, Double>(3);
    double mGes = m1 + m2;
    ht0.put(s1, m1 / mGes);
    ht0.put(s2, m2 / mGes);
    s0.set_Gasmischung_massenBruch(ht0);
    // Berechnung der Mischungstemperatur
    // 1.HS --> Kontrollraumgrenze wird um beide Zonen gelegt
    // Dann gilt: Umisch=U1+U2;
    double Umisch = m1 * s1.get_u_mass(T1) + m2 * s2.get_u_mass(T2);
    // Berechnung der Temperatur bei der die innere Energie von Spezies s0=Umisch ist.
    // Dies entspricht der Mischungstemperatur
    double T0 = s0.get_T4u_mass(Umisch / mGes);
    // Das Volumen beider Zonen wird addiert
    double V0 = V1 + V2;

    // Test ob alles stimmt
    double pV = z1.get_p() * V0;
    double mRT = mGes * T0 * s0.get_R();
    double T =
        (m1 * s1.get_cv_mass(T1) * T1 + m2 * s2.get_cv_mass(T2) * T2)
            / (m1 * s1.get_cv_mass(T1) + m2 * s2.get_cv_mass(T2));
    double deltaT = (T - T0) / T0 * 100;
    double T3 = pV / mGes / s0.get_R();
    double mRT2 = mGes * T * s0.get_R();
    double mRT3 = mGes * T3 * s0.get_R();
    // Fazit ueber die Gasgleichung geht es auch und zwar viel einfacher und genauer!

    Zone z0 = new Zone(cp, p, V0, T0, mGes, s0, burns, ID);
    return z0;
  }
예제 #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;
    }
  }