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