/** * 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); }
/** * 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; }
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))); } }
/** * 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; } }