Element

Befehle, die das Lesen und Zuweisen der Werte bzw. Eigenschaften von finiten Elementen ermöglichen.

Geometrische Größen (Koordinaten, Längen und Flächen) entsprechen der global gewählten Längeneinheit (gobal_unit, siehe General settings). Übergebene oder zurückgelieferte Vektoren (Komponenten der Vektoren) beziehen sich, wenn in der Funktionsbeschreibung nicht explizit angegeben, auf das kartesisches System. Zur einfachen Umrechnung zwischen unerschiedlichen Bezugssystemen stehen Funktionen zur Coordinate transformation zur Verfügung.

Übersicht


Bezeichner

Anzahl Werte

Einheit

Zugriff get/set

Beschreibung

valid

1

g

Gültigkeit

type

1

g

Typ (linear, bilinear, quadratisch)

key

1

g

Nummer

sekey

1

g

Nummer des übergeordneten Superelement

ndkeys

[N]

g

Nummern der N Knoten des Elements

vertices

[2][N]

gu

g

Kartesische Koordinaten der N Knoten des Elements (Reihenfolge entgegen dem Uhrzeigersinn)

reluc

2

Am/Vs

g/s

Reluktivität

perm

2

Vs/Am

g/s

Permeabilität

mag

2

T

g/s

Magnetisierung

xycp

2

gu

g

Koordinaten des Elementmittelpunkts

area

1

gu²

g

Elementfläche

induc

2

T

g

Induktionsvektor im Elementmittelpunkt (Komponenten im aktuellen Bezugssystem). Siehe nachfolgendes Anwendungsbeispiel.

induc(x)

3

T, T, gu

g

Induktionsvektor im Elementmittelpunkt (Komponenten im kartesischen Bezugssystem) für vorgegebene Position/Zeitschritt und Lastfall. Siehe nachfolgendes Anwendungsbeispiel.

induc()

[3][N]

T, T, gu

g

Induktionsvektor im Elementmittelpunkt (Komponenten im kartesischen Bezugssystem) über alle Positionen/Zeitschritte N für vorgegebenen Lastfall. Siehe nachfolgendes Anwendungsbeispiel.

curd

2

A/mm²

g

Stromdichte (Realteil, Imaginärteil) im Element einer Wicklung oder eines Massivleiters

curlosd

1

W/mm³

g

(Wirbelstrom)verlustdichte (Mittelwert) im Element eines Massivleiters nach magnetostatischer oder -dynamischer Rechnung

pmfelosd

1

W/mm³

g

Verlustdichte (Mittelwert) im Eisen oder Permanentmagnet nach magnetostatischer Feld- und Verlustberechnung

gu = globale Längeneinheit

Befehlsbeschreibung


Function: key = get_elem_key ( x, y )

Gibt die Nummer eines Elementes zurück, das über die kartesischen Koordinaten x und y ausgewählt ist.

Parameter
[in] x Coordinate 1
[in] y Coordinate 2
Return values

key Elementnummer

Beispiel

key = get_elem_key(x,y)         -- Get the element's number
printf("element key = %d",key)  -- Output to shell

Command: get_elem_keys ( x, y, “var” )

Gibt die Nummern aller Elemente eines Superelementes zurück, das über die kartesischen Koordinaten x und y ausgewählt ist.

Parameter
[in] x Koordinate 1
[in] y Koordinate 2
[out] var Bezeichner des Arrays in dem Elementnummern zurückgegeben werden

Beispiel

get_elem_keys(x,y,"keys")  -- Get all elements of the superelement addressed by x,y
N = table.getn(keys)       -- Number of elements in array

Command: get_elem_keys ( sekey, “var” )

Gibt die Nummern aller Elemente eines Superelements zurück, dessen Nummer sekey angegeben ist.

Parameter
[in] sekey Nummer des SuperekementsKoordinate
[out] var Bezeichner des Arrays in dem Elementnummern zurückgegeben werden

Beispiel

get_elem_keys(36,"keys")   -- Get all elements of the superelement addressed by its number
N = table.getn(keys)       -- Number of elements in array

Command: get_elem_keys ( “var” )

Gibt die Nummern aller Elemente des Modells zurück.

Parameter

[out] var Bezeichner des Arrays in dem Elementnummern zurückgegeben werden

Beispiel

get_elem_keys("keys")      -- Get all elements
N = table.getn(keys)       -- Number of elements in array

Function: d1, d2, … = get_elem_data ( “identifier”, key )

Liest Daten eines Elementes und gibt diese zurück.

Parameter
[in] identifier Art der auszulesenden Daten (siehe Tabelle)
[in] key Elementnummer
Return values

d1 Erster Rückgabewert d2 Zweiter Rückgabewert

Beispiel: Lesen der Magnetisierung

Mx,My = get_elem_data("mag",key)

Alternativ zu key kann das Element auch über kartesische Koordinaten in der globalen Einheit adressiert werden.

Mx,My = get_elem_data("mag",x,y)

Command: set_elem_data ( “identifier”, key, d1, d2, … )

Weist einem Element die angegebenen Eigenschaften zu.

Parameter
[in] identifier Art der zuzuweisenden Eigenschaft (siehe Tabelle)
[in] key Elementnummer
[in] d1 Erster zuzuweisender Wert
[in] d2 Zweiter zuzuweisender Wert

Beispiel: Festlegung der Magnetisierung eines Elementes

set_elem_data("mag",key,1.2,0)

Anwendungsbeispiele

Allgemeiner Zugriff auf die Elementdaten

Alle Elemente eines Superelementes werden ermittelt und die Koordinaten, Flächen und weitere Eigenschaften der Elemente in einer Datei ausgegeben.
cosys('polar')             -- coordinate system has to be r-phi
grf_clear()              -- clear graphic output
draw_spels()             -- draw superelements

x = 23
y = 5
get_elem_keys(x,y,"elkeys")                 -- get all element keys of addressed superelement
data=io.open("el_data_1.txt","w+")          -- output in data file
data:write("# elkeys  x  y  A  mu  M\n");
N = table.getn(elkeys)                      -- number of elements in array
i = 0
verbosity = 1                         -- suppress detailed output
repeat
  i = i+1
  x,y = get_elem_data("xycp",elkeys[i])    -- read element data "coordinates of center point"
  A = get_elem_data("area",elkeys[i])      -- ... "area"
  point(x,y,"black","x")                   -- draw points
  draw_elem(x,y,"black",0)                 -- and elements
  draw_elem(elkeys[i],"black",0)           -- ... using the element key alternatively
  mu = get_elem_data("perm",elkeys[i])     -- read element data "permeability"
  Mx,My = get_elem_data("mag",elkeys[i])
  data:write(string.format("%d %d %g %g %g %g %g\n",i,elkeys[i],x,y,A,mu,math.sqrt(Mx*Mx+My*My)))

  set_elem_data("mag",elkeys[i],0.5*Mx,0.5*My)      -- set element data "magnetization"
until i>=N
io.close(data)                  -- don't forget to close the file

Einfärben der Elemente eines Superelementes entsprechend einer Elementeigenschaft/-größe.

function colgrad(elkey,val,low,high)    -- user defined function in FSL for specific color gradations
  if val>=low and val<=high then
   rval=(val-low)/(high-low)
   col = 45-(45-21)*rval
   draw_elem(elkey,col,0)
  elseif val<low then
   draw_elem(elkey,"white",0)
  elseif val > high then
   draw_elem(elkey,"black",0)
  end
 return
end

get_elem_keys(x,y,"keys")     -- get all element numbers of addressed superelement
N = table.getn(keys)          -- determine number of keys
for i=1,N do
 M1,M2 = get_elem_data("mag",keys[i])   -- get magnetization of superelements
 M = math.sqrt(M1*M1+M2*M2)
 colgrad(keys[i],M,0,1.4)               -- color gradation of elements
end

Induktion und Induktionsverlauf in den Elementen

Rückgabe der Induktion des letzten durchgeführten Berechnungsschrittes. Die Rückgabewerte B1 und B2 sind die Komponenten des Induktionsvektors im gewählten globalen Bezugssystem (kartesisch: B1=x, B2=y, polar: B1=R, B2=phi, zylindrisch: B1=R, B2=z).

B1,B2 = get_elem_data("induc",elkey)
print(B1, B2)

Rückgabe der Anzahl der Berechnungsschritte

N = get_sim_data("num_move_steps")

Rückgabe der Induktion zum Berechnungsschritt mstep des Lastfalls lstep. Die Rückgabewerte B1 und B2 sind die Komponenten des Induktionsvektors in einem kartesischen Bezugssystem. Der Rückgabewert x entspricht der Position oder der Zeit zum Berechnungsschritt mstep. Das Bezugssystem ist für die Elemente des ruhenden Teil der Maschine gleich dem globalen. Für die Elemente des rotierenden Teils gilt ein bewegtes Bezugssystem, d. h. ein um die Rotordrehstellung gegenüber dem globalen gedrehten System. Die Induktionsverläufe werden also je nach Zugehörigkeit der Elemente zu Stator oder Rotor in einem stator- bzw. rotorfesten kartesischen Bezugssystem zurückgegeben.

Syntax:

B1,B2,x,stat = get_elem_data("induc(x)",elkey,mstep,lstep)

-- B1: Erste kartesische Komponente des Induktionsvektors
-- B2: Zweite kartesische Komponente des Induktionsvektors
-- x: Position oder Zeit zum Berechnungsschritt mstep
-- stat:  1 = Ausführung ohne Fehler, 0 = Fehler bei der Ausführung
-- elkey: Elementnummer
-- mstep: Berechnungsschritt 1, 2, ... N
-- lstep: Lastfall 1, 2, 3, ...

Im Falle einer Reluktanz-/PM-Synchronmotor-Simulation (FSL-Befehl: run_models(“pm_sym_fast”)) hat das Argument “lstep” folgende Bedeutung

1: Leerlauf 2: Stromwinkel Null 3: Stromwinkel wie vorgegeben (oder durch FEMAG ermittelt)

Im Falle einer Multiple-I/x-Berechnung (FSL-Befehl run_models(“mult_cal_fast”)) entspricht lstep der Nummer des berechneten Lastfalls. Wird nur ein Fall berechnet, ist lstep = 1 anzugeben. Wird das Argument lstep bei Adressierung des Elements über elkey nicht angegeben, nimmt FEMAG implizit lstep = 1 an.

Note

Die implizite Auswahl des Lastfalls 1 ist bei Adressierung des Elements über Koordinaten nicht zulässig.

Beispiel:

verbosity = 1
data=io.open("elem_data.txt","w+")
for i=1,N do
 B1,B2,x = get_elem_data("induc(x)",elkey,i,3)  -- Adressierung über Elementnummer
 B1,B2,x = get_elem_data("induc(x)",x,y,i,3)    -- Adressierung über Elementkoordinaten
 B1,B2,x = get_elem_data("induc(x)",elkey,i)    -- Adressierung über Elementnummer, implizit erster Lastfall

 data:write(string.format("%d %g %g %g\n",i,x,B1,B2))
end
io.close(data)

Rückgabe des Induktionsverlaufs im Element für den Lastfalls lstep. Zurückgegeben wird eine Matrix der Dimension B[3][N] für alle berechneten Positionen/Zeitschritte.

Syntax:

B,stat = get_elem_data("induc()",elkey,lstep)        -- Adressierung über Elementnummer

-- B[1][...]: Erste kartesische Komponente des Induktionsvektors
-- B[2][...]: Zweite kartesische Komponente des Induktionsvektors
-- B[3][...]: Position in Grad (Rotation), globaler Längeneinheit (Translation) oder Zeit in s
-- stat: 1 = Ausführung ohne Fehler, 0 = Fehler bei der Ausführung
-- elkey: Elementnummer
-- lstep: Lastfall 1, 2, 3, ...

Beispiel:

B,stat = get_elem_data("induc()",elkey,3)   -- Adressierung über Elementnummer
B,stat = get_elem_data("induc()",x,y,3)     -- Adressierung über Elementkoordinaten
B,stat = get_elem_data("induc()",elkey)     -- Adressierung über Elementnummer, implizit erster Lastfall

print(stat)
M = table.getn(B)
N = table.getn(B[1])
print(M, N)

data=io.open("elem_data.txt","w+")
for i=1,N do
 data:write(string.format("%d %g %g %g\n",i,B[3][i],B[1][i],B[2][i]))
end
io.close(data)