Exemple #1
0
def ElementAuswahl(elemente, punktliste, bedingung='True', var=[], listenhilfe=[]):
   """Gib eine Sequenz an Elementen aus den uebergebenen elemente zurueck, die bzw. deren Punkte die
   bedingung erfuellen. Fuer die Zuordnung der einzelnen Punkte zu den Elementen muss eine
   punktliste uebergeben werden, die alle Punkte aller elemente enthaelt.
   Gibt die Sequenz der ausgewaehlten Elemente zurueck.
   
   In der Bedingung kann mit elem auf ein einzelnes Element und mit punkt auf einen Punkt des
   Elements zugegriffen werden. Die Koordinaten eines Punktes koennen mit punkt.coordinates[#]
   erhalten werden, wobei die Raute fuer 0, 1 oder 2 und somit eine der drei Bezugsrichtungen steht.
   
   Optional kann die korrekte Zuordnung der Labels der Punkte bei odb-elementen durch Uebergabe
   einer listenhilfe beschleunigt werden.
   
   Fuer mathematische Zusammenhaenge stehen die Funktionen pi, sqrt, sin, cos, tan, asin, acos, atan
   zur Verfuegung.
   
   WICHTIG: Wenn Elemente einer mdb statt einer odb untersucht werden sollen, sollte entweder keine
            oder die folgende listenhilfe uebergeben werden:
   
   listenhilfe = [idx for idx in range(len(punktliste))];
   """
   from hilfen import ElementAusOdb
   #
   if (ElementAusOdb(element=elemente[0])):
      return _OdbElementAuswahl(elemente=elemente, punktliste=punktliste, bedingung=bedingung,
         var=var, listenhilfe=listenhilfe);
   else:
      return _MdbElementAuswahl(elemente=elemente, punktliste=punktliste, bedingung=bedingung,
         var=var);
Exemple #2
0
def ElementInfolisteErstellen(elemente, knoten, listenhilfe=[]):
    """Erstelle eine Hilfsliste mit Punktkoordinaten und Volumina aller uebergebenen elemente. Dazu
   wird neben elemente eine Liste aller Punktkoordinaten (knoten) benoetigt. Die optionale
   Uebergabe einer Zuordnung listenhilfe von Labels zu Indizes beschleunigt den Vorgang.
   Gibt elementinfoliste zurueck.
   
   WICHTIG: Wenn Elemente einer mdb statt einer odb untersucht werden sollen, sollte entweder keine
            oder die folgende listenhilfe uebergeben werden:
   
   listenhilfe = [idx for idx in range(len(knoten))];
   """
    from hilfen import ElementAusOdb, ErstelleLabelsortierteGeomlist
    #
    if (listenhilfe == []):
        if (ElementAusOdb(element=elemente[0])):
            listenhilfe = ErstelleLabelsortierteGeomlist(geomliste=knoten)
        else:
            listenhilfe = [idx for idx in range(len(knoten))]
    #
    elementinfoliste = []
    dimensionen = 2
    if ('3D' in str(elemente[0].type)):
        dimensionen = 3
    #
    for idx, elem in enumerate(elemente):
        punkte = PunktkoordinatenVonElement(element=elem,
                                            knoten=knoten,
                                            listenhilfe=listenhilfe)
        elementinfoliste += [[
            punkte,
            ElementVolumen(punkte=punkte, dimensionen=dimensionen)
        ]]
    #
    return elementinfoliste
Exemple #3
0
def KnotengewichtungInElement(element, referenzpunkt, knoten, label_zu_idx_punkte=[]):
   """Bestimmt die Anteile, die ein referenzpunkt aus den Knotenpunkten des in punkte definierten
   Elements hat. Die Koordinaten der Elemente muessen in knoten definiert sein. Die optionale
   Uebergabe einer Zuordnung Listenhilfe von Labels zu Indizes beschleunigt den Vorgang.
   Gibt [labelsEckpunkte, Knotengewichtung] zurueck.
   
   WICHTIG: Wenn Elemente einer mdb statt einer odb untersucht werden sollen, sollte entweder keine
            oder die folgende label_zu_idx_punkte uebergeben werden:
   
   label_zu_idx_punkte = [idx for idx in range(len(knoten))];
   """
   from hilfen import ElementAusOdb, ErstelleLabelsortierteGeomlist
   #
   if (label_zu_idx_punkte == []):
      if (ElementAusOdb(element=element)):
         label_zu_idx_punkte = ErstelleLabelsortierteGeomlist(geomliste=knoten);
      else:
         label_zu_idx_punkte = [idx for idx in range(len(knoten))];
   #
   dimensionen = 2;
   if ('3D' in str(element.type)):
      dimensionen = 3;
   #
   punkte = PunktkoordinatenVonElement(element=element, knoten=knoten,
      listenhilfe=label_zu_idx_punkte);
   punktlabels = [knoten[label_zu_idx_punkte[einzelpunkt]].label for einzelpunkt in element.connectivity];
   return [punktlabels, KnotengewichtungPunktInPunktkoordinaten(punkte=punkte,
      referenzpunkt=referenzpunkt, dimensionen=dimensionen)];
Exemple #4
0
def ElementAuswahlLabelliste(elemente, punktliste, sortierung=0, aufsteigend=True,
   listenhilfe=[]):
   """Sortiert alle uebergebenen elemente nach der Koordinatenrichtung sortierung basierend auf den
   Koordinaten des Elementmittelpunktes. Fuer die Berechnung der Mittelpunktkoordinaten werden die
   Knoten der Elemente benutzt. Fuer die Zuordnung der einzelnen Punkte zu den Elementen muss eine
   punktliste uebergeben werden, die alle Punkte aller elemente enthaelt. Gibt eine Liste der Labels
   aller uebergebenen elemente zurueck, deren Mittelpunkte nach der Koordinatenrichtung sortierung
   sortiert ist.

   Fuer die sortierung ist die jeweilige Richtung (0, 1 oder 2) anzugeben. Die Reihenfolge wird
   ueber die Koordinaten der Mittelpunkte der Elemente bestimmt. Die Werte koennen entweder
   aufsteigend oder absteigend sortiert werden.
   
   Optional kann die korrekte Zuordnung der Labels der Punkte bei odb-elementen durch Uebergabe
   einer listenhilfe beschleunigt werden.
   
   WICHTIG: Wenn Elemente einer mdb statt einer odb untersucht werden sollen, sollte entweder keine
            oder die folgende listenhilfe uebergeben werden:
   
   listenhilfe = [idx for idx in range(len(punktliste))];
   """
   from operator import itemgetter
   from hilfen import Log, ElementAusOdb, ErstelleLabelsortierteGeomlist
   #
   tempsortierung = sortierung;
   if ((not (sortierung == 0)) and (not (sortierung == 1)) and (not (sortierung == 2))):
      Log('# Warnung: Ungueltige sortierung, nehme sortierung = 0');
      tempsortierung = 0;
   #
   if (len(elemente) == 0):
      Log('# Hinweis: Keine Elemente uebergeben');
      return [];
   #
   if (listenhilfe == []):
      if (ElementAusOdb(element=elemente[0])):
         listenhilfe = ErstelleLabelsortierteGeomlist(geomliste=punktliste);
      else:
         listenhilfe = [idx for idx in range(len(punktliste))];
   #
   templiste = [];
   anzahlpunkte = float(len(elemente[0].connectivity));
   for elem in elemente:
      mittelwert = 0;
      for punktlabel in elem.connectivity:
         punkt = punktliste[listenhilfe[punktlabel]];
         mittelwert = punkt.coordinates[tempsortierung]/anzahlpunkte;
      #
      templiste += [(mittelwert, elem.label), ];
   #
   templiste.sort(key=itemgetter(0));
   labelliste = [x[1] for x in templiste];
   if (aufsteigend):
      return labelliste;
   else:
      return list(reversed(labelliste));
Exemple #5
0
def PunktInElement(elemente, knoten, referenzpunkt, listenhilfe=[], elementinfoliste=[]):
   """Gebe den Label des Elements aus elemente zurueck, das referenzpunkt enthaelt. Die
   Koordinaten der elemente muessen in knoten definiert sein. Die optionale Uebergabe einer
   Zuordnung listenhilfe von Labels zu Indizes beschleunigt den Vorgang. Falls eine elementinfoliste
   mit den Volumina und Punktkoordinaten aller Elemente verfuegbar ist, kann ebenfalls eine kleine
   Beschleunigung erzielt werden. Gibt zielElement zurueck.
   
   WICHTIG: Wenn Elemente einer mdb statt einer odb untersucht werden sollen, sollte entweder keine
            oder die folgende listenhilfe uebergeben werden:
   
   listenhilfe = [idx for idx in range(len(knoten))];
   """
   from hilfen import Log, ElementAusOdb, ErstelleLabelsortierteGeomlist
   #
   if (listenhilfe == []):
      if (ElementAusOdb(element=elemente[0])):
         listenhilfe = ErstelleLabelsortierteGeomlist(geomliste=knoten);
      else:
         listenhilfe = [idx for idx in range(len(knoten))];
   #
   zielElement = None;
   minverhaeltnis = 2.0;
   dimensionen = 2;
   if ('3D' in str(elemente[0].type)):
      dimensionen = 3;
   #
   if (elementinfoliste == []):
      for elem in elemente:
         punkte = PunktkoordinatenVonElement(element=elem, knoten=knoten, listenhilfe=listenhilfe);
         if (not _PunktMoeglicherweiseInElement(punkte=punkte, referenzpunkt=referenzpunkt,
            dimensionen=dimensionen)):
            continue;
         #
         volverhaeltnis = _PunktInnerhalbElement(punkte=punkte, referenzpunkt=referenzpunkt,
            dimensionen=dimensionen);
         if (volverhaeltnis < minverhaeltnis):
            zielElement = elem.label;
            minverhaeltnis = volverhaeltnis;
   else:
      if (not len(elemente) == len(elementinfoliste)):
         Log('# Abbruch: Anzahl Elemente stimmt nicht mit Eintraegen in Elementlist ueberein');
         return zielElement;
      for idx, elem in enumerate(elemente):
         if (not _PunktMoeglicherweiseInElement(punkte=elementinfoliste[idx][0],
            referenzpunkt=referenzpunkt, dimensionen=dimensionen)):
            continue;
         #
         referenzpunktvol = _ElementZuReferenzpunktVolumen(punkte=elementinfoliste[idx][0],
            referenzpunkt=referenzpunkt, dimensionen=dimensionen);
         volverhaeltnis = referenzpunktvol/elementinfoliste[idx][1];
         if (volverhaeltnis < minverhaeltnis):
            zielElement = elem.label;
            minverhaeltnis = volverhaeltnis;
   #
   return zielElement;