Add FEM Equation Tutorial/de: Difference between revisions

From FreeCAD Documentation
(Created page with "* Falls die neue Gleichung nur Schlüsselworte für '''lineare''' Systeme unterstützt, kopiere das {{Incode|femsolver/elmer/equations/elasticity.py}}-Modul. * Falls die neue...")
(Created page with "Dann musst du die über die {{Incode|obj.addProperty(..)}}-Funktion hinzugefügten Eigenschaften auf die von der Gleichung benötigten anpassen.")
Line 76: Line 76:
}}
}}


Then you need to change the properties added via the {{Incode|obj.addProperty(..)}} function to those needed by the equation.
Dann musst du die über die {{Incode|obj.addProperty(..)}}-Funktion hinzugefügten Eigenschaften auf die von der Gleichung benötigten anpassen.


Zum Zeitpunkt des Schreibens dieses Tutoriums hat die Elmer Fliessgleichung keine besonderen Eigenschaften. Siehe Elmer Elastizitätsgleichung für ein Beispiel mit Eigenschaften.
Zum Zeitpunkt des Schreibens dieses Tutoriums hat die Elmer Fliessgleichung keine besonderen Eigenschaften. Siehe Elmer Elastizitätsgleichung für ein Beispiel mit Eigenschaften.

Revision as of 10:39, 21 August 2021

Tutorium
Thema
FEM Gleichung hinzufügen
Niveau
Zeit zum Abschluss
Autoren
M42kus
FreeCAD-Version
Beispieldateien
Siehe auch
None

Einführung

In diesem Tutorium werden wir die Fließgeschwindigkeit zu FreeCAD hinzufügen und die Unterstützung für den Elmer Löser einführen. Bitte stelle sicher, dass du Extend FEM Module gelesen und verstanden hast, bevor du dieses Tutorium liest.

Die Aufgabe kann in vier Teile aufgeteilt werden. Der erste Schritt besteht darin, den FEM Arbeitsbereich auf einen neuen Gleichungstyp aufmerksam zu machen. Dieser Schritt muss nur durchgeführt werden, wenn die Gleichung in FreeCAD jetzt nicht existiert (im Gegensatz zu einer Gleichung, die bereits in FreeCAD existiert, aber vom Ziellöser nicht unterstützt wird). Der zweite Schritt besteht darin, ein konkretes Dokumentobjekt hinzuzufügen, das die Elmer spezifische Gleichung repräsentiert. Der dritte Schritt besteht darin, dem Löserobjekt von elmer Unterstützung für die neue Gleichung hinzuzufügen. Danach muss der Analyseexport von elmer erweitert werden, um den neuen Gleichungstyp zu unterstützen.

Neuer Gleichungstyp

In diesem Schritt werden wir die folgende Datei modifizieren:

  • src/Mod/Fem/femsolver/equationbase.py

Der Gleichungstyp wird von allen Gleichungsobjekten der verschiedenen Löser gemeinsam verwendet. Jeder Typ hat einen Zeichenfolgenspezifizierer (z.B. "Heat") und einen zugeordneten Befehl, der die Gleichung dem ausgewählten Gleichungslöser hinzufügt. Dies ermöglicht eine einfachere GUI, bei der wir nur eine Schaltfläche für die Wärmegleichung haben, die für alle unterstützten Löser verwendet wird.

Füge zuerst die neue Gleichung zum equationbase.py-Modul hinzu. Jede Gleichung erfordert zwei Klassen, ein Dokument-Proxy und ein Ansicht-Proxy. Diese zwei Klassen werden später als Basisklassen für die Elmer-spezifischen Gleichungsklassen benutzt. Kopiere sie einfach von einem existierenden Gleichungstyp und passe den Icon-Pfad in getIcon(self) des Ansicht-Proxy an.

class FlowProxy(BaseProxy):
    pass

class FlowViewProxy(BaseViewProxy):
    def getIcon(self):
        return ":/icons/FEM_EquationFlow.svg"

Elmers Gleichungs Objekt

In diesem Schritt werden wir die folgenden Dateien modifizieren:

  • src/Mod/Fem/femsolver/elmer/equations/flow.py

und die folgende neue Datei hinzufügen:

  • src/Mod/Fem/ObjectsFem.py
  • src/Mod/Fem/CMakeLists.txt

Beginnen wir mit dem Modul, das das Dokumentobjekt implementiert. In kann aus einer bestehenden Gleichung kopiert werden. Wenn die neue Gleichung nur Schlüsselwörter für lineare Systeme unterstützt, kopiere das Modul femsolver/elmer/equations/elasticity.py. Wenn es nicht-lineare Schlüsselwörter unterstützt, kopiere auch femsolver/elmer/equations/heat.py. Die Strömungsgleichung in Elmer ist eine potenziell nichtlineare Gleichung. Das bedeutet, dass wir unsere Arbeit auf heat.py stützen werden.

Schlüsselworte

  • Falls die neue Gleichung nur Schlüsselworte für lineare Systeme unterstützt, kopiere das femsolver/elmer/equations/elasticity.py-Modul.
  • Falls die neue Gleichung Schlüsselworte für lineare und nicht-lineare Systeme unterstützt, kopiere das femsolver/elmer/equations/heat.py-Modul.

The flow equation in Elmer is a potentially non-linear equation. This means that we are going to base our work on heat.py.

Dateien ändern

Nach dem Kopieren von heat.py nach flow.py passe - das Namensargument der Funktion create module an, - das Typattribut der Klasse Proxy, - die Basisklassen der Klassen Proxy und ViewProxy, - und die über die Funktion obj.addProperty(..) hinzugefügten Eigenschaften an die von der Gleichung benötigten an.

def create(doc, name="'''Flow'''"):
    return femutils.createObject(
        doc, name, Proxy, ViewProxy)

class Proxy(nonlinear.Proxy, equationbase.'''Flow'''Proxy):

    Type = "Fem::EquationElmer'''Flow'''"

    def __init__(self, obj):
        super(Proxy, self).__init__(obj)
        obj.Priority = 10

class ViewProxy(nonlinear.ViewProxy, equationbase.'''Flow'''ViewProxy):
    pass

Dann musst du die über die obj.addProperty(..)-Funktion hinzugefügten Eigenschaften auf die von der Gleichung benötigten anpassen.

Zum Zeitpunkt des Schreibens dieses Tutoriums hat die Elmer Fliessgleichung keine besonderen Eigenschaften. Siehe Elmer Elastizitätsgleichung für ein Beispiel mit Eigenschaften.

Schließlich muss man eine makeEquationStatcurrent Definition in ObjectsFem.py durch Duplizieren eines verfügbaren Eintrags registrieren.

Zu guter Letzt registriere die neue Moduldatei (flow.py) in src/Mod/Fem/CMakeLists.txt auf die in FEM Modul erweitern beschriebene Weise. Die passenden Listen lassen sich leicht finden, indem man nach vorhandenen Gleichungsmoduldateien von Elmer sucht.

Löser Objekt erweitern

In diesem Schritt werden wir die folgenden Dateien modifizieren:

  • src/Mod/Fem/femsolver/elmer/solver.py

Gerade jetzt haben wir FreeCAD darauf aufmerksam gemacht, dass es einen neuen Gleichungstyp gibt, und sogar einen Befehl hinzugefügt, der diese Gleichung dem ausgewählten Löserobjekt hinzufügt. Wir haben auch ein konkretes Gleichungsobjekt für Elmer implementiert. Was jetzt noch zu tun bleibt, ist die Verbindung zwischen Elmer und der Strömungsgleichung herzustellen. Dies muss direkt im Elmer Lösungsobjekt erfolgen.

Registriere das Modul, in dem wir gerade unser neues Gleichungsobjekt (flow.py) implementiert haben, mit dem Gleichungsspezifizierer aus Schritt 1 ("Flow") in der _EQUATIONS Liste in elmer/solver.py.

from .equations import electrostatic
+from .equations import flow

...

_EQUATIONS = {
    "Heat": heat,
    "Elasticity": elasticity,
+    "Flow": flow,
}

Analyse Export erweitern

In diesem Schritt werden wir die folgenden Dateien modifizieren:

  • src/Mod/Fem/femsolver/elmer/writer.py

Dies ist der anspruchsvollste Teil der Umsetzung einer neuen Gleichung. Diese Datei enthält die Klasse Writer, die die Analyse in das Elmer sif Format exportiert.

Für jede unterstützte Gleichung gibt es eine Reihe von Methoden für den Export der jeweiligen Gleichung. Kopiere einfach alle von einer bestehenden Gleichung und passe sie an deine Bedürfnisse an. Unsere Fließgleichung verwendet die folgenden Methoden:

  • _getFlowSolver
  • _handleFlow

You need to register the _handleFlow method inside the Writer class:

class Writer(object):
...
    def write(self):
...
        self._handleFlow()

...

_handleFlow can control a series of other detailed methods. Our flow equation uses the following detailed methods:

  • _handleFlowConstants
  • _handleFlowMaterial
  • _handleFlowInitialVelocity
  • _handleFlowBndConditions
  • _handleFlowEquation

Nun haben wir den Funktionsteil der neuen Gleichung beendet. Nun werden wir die neue Gleichung an die GUI anbinden.

Gui tool to create an equation

Wir haben gerade eine neue Gleichungsklasse erstellt. Um sie über die FEM-GUI anzusprechen, müssen wir eine Schaltfläche erstellen und sie mit der neuen Gleichungsklasse verbinden. Hier ist ein Tutorium: Add button to FEM toolbar tutorial.