Bearbeiten von „Simulationssystem“

Zur Navigation springen Zur Suche springen

Warnung: Du bist nicht angemeldet. Deine IP-Adresse wird bei Bearbeitungen öffentlich sichtbar. Melde dich an oder erstelle ein Benutzerkonto, damit Bearbeitungen deinem Benutzernamen zugeordnet werden.

Die Bearbeitung kann rückgängig gemacht werden. Bitte prüfe den Vergleich unten, um sicherzustellen, dass du dies tun möchtest, und veröffentliche dann unten deine Änderungen, um die Bearbeitung rückgängig zu machen.

Aktuelle Version Dein Text
Zeile 19: Zeile 19:


= Beispiel für Simulation =
= Beispiel für Simulation =
Eine Simulation soll die Temperaturentwicklung bei Sonneneinstrahlung ermitteln. Gegeben sei ein '''Punkt-Oberflächentyp''', der die Beschaffenheit der Oberfläche beschreibt, hier vereinfacht: Straße, Wald, Haus ("street", "wood", "house"). Die Temperaturerhöhung erfolgt in Abhängigkeit des Punkttyps, danach erfolgt ein Temperaturausgleich zwischen den Nachbarpunkten.
Eine Simulation soll die Temperaturentwicklung bei Sonneneinstrahlung ermitteln. Gegeben sei ein '''Punkttyp''', der den Oberflächentyp beschreibt, hier vereinfacht: Straße, Wald, Haus ("street", "wood", "house"). Die Temperaturerhöhung erfolgt in Abhängigkeit des Punkttyps, danach erfolgt ein Temperaturausgleich zwischen den Nachbarpunkten.


Da der Ausgleichsvorgang auf einer Kopie der Daten erfolgen muss (die Nachbarpunkte dürfen sich während der Berechnung nicht ändern!), wird das Modell in der Simulation in Teildaten (hier 1000x1000 Punkte) zerlegt und darauf die Berechnung ausgeführt. Danach werden die Daten wieder ins Gesamtmodell transferiert.
Da der Ausgleichsvorgang auf einer Kopie der Daten erfolgen muss (die Nachbarpunkte dürfen sich während der Berechnung nicht ändern!), wird das Modell in der Simulation in Teildaten (hier 1000x1000 Punkte) zerlegt und darauf die Berechnung ausgeführt. Danach werden die Daten wieder ins Gesamtmodell transferiert.


Am berechneten Gesamtmodell wird dann die Durchschnittstemperatur als Aggregation aller Punkte ermittelt.
Am berechneten Gesamtmodell wird dann die Durchschnittstemperatur als Aggregation aller Punkte ermittelt.
Die Temperaturverteilung des Gesamtmodells wird in ein Bild mit Breite 2000 Pixel transformiert.


<pre>
<pre>
# gegebenes Modell laden
# gegebenes Modell laden
model.load(data: "Modell-01");
model.load("Modell-01");
 
# Sicherstellen, dass jeder Punkt ein Attribut "Oberflächentyp" hat. Abbruch der Simulation, wenn nicht.
model.hasAttribute(attributName: "surfacetype");
 
# Jeder Punkt bekommt ein Attribut "Temperatur" mit Datentyp Festpunktzahl 16 Bit mit 2 Dezimalstellen)
# Jeder Punkt bekommt ein Attribut "Temperatur" mit Datentyp Festpunktzahl 16 Bit mit 2 Dezimalstellen)
punkt.addAttribut(attributeName: "temperature", dataType: fixpoint(16,2));
punkt.addAttribut("temperature", fixpoint(16,2));
# Alle Punkte auf 20 Grad setzen:
# Alle Punkte auf 20 Grad setzen:
model.setNumericAttribute(attributeType: "temperature", value: 20.00);
modell.setAll("temperature", 20.00);
 
# definieren einer Transaktion: die Funktion liefert abhängig vom Punktoberflächentyp eine Temperaturerhöhung:
# Definieren einer Funktion für eine Transaktion: die Funktion liefert abhängig vom
define Temp(type, temp):
# Punktoberflächentyp eine # Temperaturerhöhung:
   switch(type)
# Hinweis: Die Funktion muss in C++ definiert werden.
   case 'street': temp + 10;
# Die Signatur "Model model, int x, int y" muss verwendet werden.
   case 'wood': temp + 2;
function(name: "addTemp", body: '''double addTemp(Model model, int x, int y) {
   case 'house': temp + 8;
   char * surfaceType = model.getAttribute<char*>("surfaceType", line, col);
   double rc = model.getAttribute<double>("temperature", line, col);
  if (strcmp(surfaceType, "street") == 0){
    rc += 10;
   else if (strcmp(surfaceType, "wood") == 0){
    rc += 2;
   else if (strcmp(surfaceType, "house") == 0){
    rc += 8;
  }
  return rc;
}'''


# divideRectangle(): Aufteilung aller Punkte in 1000*1000 Punkte.  
# divideRectangle(): Aufteilung aller Punkte in 1000*1000 Punkte.  
# toModel(): Jedes Subquadrat wird als Model behandelt (damit stehen alle Funktionen des Models zur Verfügung).
# toModel(): Jedes Subquadrat wird als Model behandelt (damit stehen alle Funktionen des Models zur Verfügung).
# transaktion(): Für jeden Punkt des Submodells wird die Transaktion durchgeführt: Funktion addTemp
# transaktion(): Für jeden Punkt des Submodells wird die Transaktion durchgeführt: Funktion Temp mit Parametern TypeOfPoint und Attribut "temperature"
# neigbourLinearAdaption(): jeder Punkt im Model wird im Attribut "temperature" linear mit den Nachbarpunkten abgeglichen: die Temperatur
# neigbourLinearAdaption(): jeder Punkt im Model wird im Attribut "temperature" linear mit den Nachbarpunkten abgeglichen: die Temperatur
#  eines Punktes wird aus dem Durchschnitt aller Temperaturen der angrenzenden Punkte berechnet:
#  eines Punktes wird aus dem Durchschnitt aller Temperaturen der angrenzenden Punkte berechnet:
#  Gewichtung des Punktes: 2, Gewichtung von (4) Kantennachbarn: 1/4=0.25, Gewichtung von (4) Eckpunkten: 1/8=0.125
#  Gewichtung des Punktes: 2, Gewichtung von (4) Kantennachbarn: 1/4=0.25, Gewichtung von (4) Eckpunkten: 1/8=0.125
# intoModel(): Überführung der Daten des Submodels in das Gesamt-Model.
# intoModel(): Überführung der Daten des Submodels in das Gesamt-Model.
model.divideRectangle(width: 1000, height: 1000)
model.divideRectangle(1000, 1000).toModel().transaktion(Temp, typeOfPoint, "temperature").neigbourLinearAdaption("temperature", 2, 0.25, 0.125).intoModel().;
  .toModel()
  .transaktion(function: addTemp)
  .neigbourLinearAdaption(attributeName: "temperature", weightPoint: 2, weightEdge: 0.25, weightCorner: 0.125)
  .intoModel();
#
#
# Durchschnittstemperatur des Gesamtpunktnetzes ermitteln:
# Durchschnittstemperatur des Gesamtpunktnetzes ermitteln:
model.aggregate(attributeName: "temperature", comment: "Aufheizung der Luft bei Sonnenschein");
model.aggregate("temperature", "Aufheizung der Luft bei Sonnenschein");
 
# Temperaturverteilung als Bild erstellen: Farbwechsel bei 20°, 22°...32°, zugeordnete Farben: dunkelblau, ... purpur
model.makePicture(image: "temperature.png", attributeName: "temperature", width: 2000,
  values: [20, 22, 24, 26, 28, 30, 32], colors: ["blue-dark", "blue", "blue-light", "red-light", "red", "red-dark", "purple"]);
 
# Modell unter dem Namen "Modell-02" mit Kommentar speichern:
# Modell unter dem Namen "Modell-02" mit Kommentar speichern:
model.store(data: "Modell-02", comment: "Aufheizung der Luft");
model.store("Modell-02", "Aufheizung der Luft");
</pre>
</pre>

Bitte kopiere keine Webseiten, die nicht deine eigenen sind, benutze keine urheberrechtlich geschützten Werke ohne Erlaubnis des Urhebers!
Du gibst uns hiermit deine Zusage, dass du den Text selbst verfasst hast, dass der Text Allgemeingut (public domain) ist, oder dass der Urheber seine Zustimmung gegeben hat. Falls dieser Text bereits woanders veröffentlicht wurde, weise bitte auf der Diskussionsseite darauf hin. Bitte beachte, dass alle Info-Theke-Beiträge automatisch unter der „Gemeinfreiheit“ stehen (siehe Info-Theke:Urheberrechte für Einzelheiten). Falls du nicht möchtest, dass deine Arbeit hier von anderen verändert und verbreitet wird, dann klicke nicht auf „Seite speichern“.

Abbrechen Bearbeitungshilfe (wird in einem neuen Fenster geöffnet)