Software: FEMM - Elektrostatik - LUA-Scripting

Aus OptiYummy
Zur Navigation springenZur Suche springen

Scriptsprachen für FEM (LUA in FEMM)

Bisher haben wir unsere FEM-Modelle mit Hilfe der vom FEM-System bereitgestellten grafischen Oberfläche entwickelt, simuliert und die Simulationsergebnisse ausgewertet. Solche grafischen Oberflächen (GUI = Graphical User Interface) ermöglichen dem Anfänger einen relativ schnellen Einstieg in die Nutzung der Finite-Element-Methode.

Alle modernen FEM-Systeme besitzen auch eine Scriptsprache, welche man in Ergänzung oder auch als vollständigen Ersatz für die grafische Oberfläche verwenden kann. Über die Scriptsprache wird normaler Weise für jede Funktion der grafischen Oberfläche ein Script-Befehl zur Verfügung gestellt, z.B. im Programm FEMM:

  • open("filename") = Öffnen einer Datei
  • ei_addnode(x,y) = Neuer Knoten auf x,y
  • ei_selectnode(x,y) = Selektiert den Knoten, der x,y am nächsten liegt
  • ei_deleteselectednodes = Löscht alle selektierten Knoten
  • ...

Das Programm FEMM nutzt als Grundlage die LUA-Scriptsprache in der Version 4.0. Der LUA-Interpreter ist in das Programm FEMM integriert und wirkt auf folgende Inhalte:

Software FEMM - Elektrostatik - LUA-Scripting im dialogfeld.gif
  • Eingabefelder:
    • Beim Schließen des zugehörigen Dialogfensters werden die Ausdrücke als LUA-Script interpretiert.
    • Das Ergebnis des Ausdrucks ist der Zahlenwert der Eingabe.
  • LUA-Konsole:
    Software FEMM - Elektrostatik - LUA-Scripting in lua-console.gif
    • Diese Konsole kann man über View > LUA-Console im FEMM öffnen.
    • Im unteren Input-Feld kann man Script-Ausdrücke eingeben.
    • Diese werden nach Betätigen von Evaluate ausgeführt.
    • Die Wirkung der Befehle kann man am Modell sofort sehen.
    • Bei Bedarf erscheint eine Fehlermeldung.
    • Bereits ausgeführte Ausdrücke erscheinen im oberen Output-Feld.
    • Damit kann man Schritt für Schritt ein Script entwickeln, welches man in einer LUA-Textdatei speichert (Kopieren über Zwischenablage).
  • LUA-Textdatei:
    • Eine Textdatei, welche ein LUA-Script enthält, kann man über File > Open Lua Script aktivieren:
      Software FEMM - Elektrostatik - LUA-Scripting in datei example.gif
    • Hinweis: Wer keine Schreibrechte im FEMM-Programm-Ordner besitzt, muss die beiden Dateien "Roters-Ch9Fig6.fem" und "Force-vs-Position.lua" vor dem Öffnen dieses Script-Beispiels in einen anderen Ordner kopieren!
    • Die Anweisungen dieses Scripts werden nach dem Öffnen der Datei ausgeführt.
    • Wie von Geisterhand gesteuert laufen Modellbildung, Simulation und Ergebnisdarstellung im Programm-Fenster ab.
    • Im Output-Feld der LUA-Konsole werden im Beispiel die Werte der Magnetkraft als Funktion der Rotorposition aufgelistet.


Memo stempel.gif

Ist in einem FEM-Systems der gesamte Umfang der verwendeten Scriptsprache (z.B. von LUA) verfügbar, so eröffnen sich vielfältige Möglichkeiten:

  • Die konstruktiven Parameter (Geometrie und Stoff) können damit direkt als Parameter des Finite Element Modells definiert werden.

  • Durch mathematische Verknüpfung können aus den konstruktiven Parameter alle erforderlichen Werte für das Finite Element Modell berechnet werden.

  • Auf Basis einer Folge von Anweisungen der Scriptsprache unter Einbeziehung bedingter Verzweigungen oder Schleifen kann man den FEM-Prozess freizügig automatisieren.


LUA-Syntax im Programm FEMM

Im Kapitel 3 der FEMM-Hilfe (manual.pdf) sind die speziellen FEMM-Erweiterungen der LUA-Scriptsprache beschrieben.


1. Allgemeine Funktionen

Diese wirken unabhängig von der konkreten physikalischen Domäne des bearbeiteten Problems, z.B.:

  • clearconsole()
  • newdocument(doctype)
  • hideconsole()
  • hidepointprops()
  • messagebox("message")
  • open("filename")
  • pause()
  • print()
  • prompt("message")
  • quit()


2. Domänenbezogene Funktionen

Sind gekennzeichnet durch 2 Zeichen vor dem Funktionsnamen (uv_function) mit:

  • u = magnetic | electrostatic | current flow | heat flow
  • v = input (Preprocessor) | output (Postprocessor)


Die Funktionen für den Preprocessors wirken auf die Modelldatei der jeweiligen Domäne (fem/fee/fec/feh):

  • Definition des Problems
  • Hinzufügen/Löschen von Objekten
  • Editieren von Objekten
  • Bearbeiten von Objekteigenschaften
  • Selektieren von Geometrie
  • Labeling von Objekten
  • Erzeugen/Löschen des Netzes
  • Zoom der Ansicht
  • Sichtbarkeit Fenster/Raster
  • Diverse Hilfsfunktionen


Die Funktionen für den Postprocessor wirken auf die zum Modell gehörenden Ergebnisdateien (ans/res/anc/anh):

  • Datenextraktion
  • Selektieren von geometrischen Elementen in der Ergebnisdatei
  • Zoom der Ansicht
  • Konfiguration der Ergebnisdarstellung
  • Diverse Hilfsfunktionen


Mit diesen Funktionen kann man sämtliche Möglichkeiten der grafischen Bedienoberfläche in Form von LUA-Funktionsaufrufen nachempfinden:

  • Man benötigt zusätzlich noch Ausdrücke der eigentlichen LUA-Sprache, um z.B. Prozesse mit bedingten Verzweigungen oder Schleifen zu beschreiben.
  • Um Abhängigkeiten zwischen den Modellparametern zu definieren, benötigt man außerdem mathematische Operatoren und Funktionen der LUA-Sprache.
  • In Hinblick auf FEMM muss man hierbei die Version 4.0 der LUA-Sprache benutzen.


Nicht im Handbuch beschrieben sind die zusätzlich vordefinierten Naturkonstanten und Maßeinheiten. Man findet diese Definitionen für das Programm FEMM in der Datei ..\Programme\femm42\bin\init.lua :

  • PI = 3,14159... (Kreiszahl π - auch Pi oder pi )
  • uo = PI*4.e-7 = 1.2566E-6 (µo magn. Feldkonstante)
  • eo = 8.85418781762e-12 (εo elektrische Feldkonstante)
  • meter = 1 (auch meters ; Meter ; Meters )
  • cm = 0.01 (auch centimeter ; centimeters ; Centimeters ; Centimeter )
  • mm = 0.001 (auch millimeters ; millimeter ; Millimeter ; Millimeters ; milimeter ; milimeters )
  • um = 0.000001 (auch micrometer ; Micrometer ; micrometers ; Micrometers ; micron ; Micron ; microns ; Microns )
  • inch = 0.0254 (Zoll=2.54 cm) (auch inches ; Inch ; Inches ; in )
  • mil = 0.001*inch (auch mils ; Mils ; Mil )
  • Tesla = 1
  • mTesla = 0.001
  • Gauss = 0.0001
  • kGauss = 0.1
  • AmpMeter = 1
  • kAmpMeter = 1000
  • Oersted = 250/PI
  • kOersted = 1000*Oersted