Die MATLAB-Interface-Routine zum FEMSET-Solver ("Mex-Function") beschreibt am Anfang im nachfolgend zu sehenden Kommentar die unterschiedlichen Möglichkeiten des Aufrufs aus MATLAB und die jeweils erwarteten Eingabewerte:
/* ************************************************************************* */ /* ### Finite-Elemente-Baukasten FEMSET ### */ /* */ /* Aufbau einer Elementsteifigkeitsbeziehung bzw. der */ /* Elementsteifigkeitsmatrix und der Elementmassenmatrix */ /* ===================================================== */ /* */ /* Es wird eine durch Knotenkoordinaten und Elementparameter beschriebene */ /* Elementbeziehung (Fall a) oder die ie-te Elementbeziehung eines */ /* FEM-Modells (Fall b) abgeliefert. */ /* */ /* Fuer Elemente, die fuer elastostatische Berechnungen vorgesehen sind, */ /* werden Elementsteifigkeitsmatrix und Elementbelastungsvektor */ /* abgeliefert, fuer Elemente fuer die Eigenschwingungsberechnung sind es */ /* die Elementsteifigkeitsmatrix und die Elementmassenmatrix. */ /* */ /* Fall a: */ /* ------- */ /* */ /* Es muessen genau 3 Input-Parameter uebergeben werden. */ /* */ /* Input: kf - Anzahl der Freiheitsgrade pro Elementknoten */ /* xy - Matrix der Knotenkoordinaten (Reihenfolge der Knoten */ /* muss der Elementknotennummerierung entsprechen) */ /* ep - Vektor der Elementparameter */ /* */ /* Aufruf: [em eb] = elemat_m (kf , xy , ep) */ /* */ /* Output: em - Elementsteifigkeitsmatrix */ /* eb - Elementbelastungsvektor bzw. Elementmassenmatrix */ /* */ /* Es wird die durch kf, xy und ep beschriebene */ /* Elementbeziehung abgeliefert, wobei elemat_m die */ /* die Information ueber den Elementtyp aus kf und den Formaten der */ /* Matrix xy und des Vektors ep entnimmt. Wenn damit ein nicht in FEMSET */ /* vorgesehener Elementtyp beschrieben wird, liefert elemat_m */ /* Nullmatrizen ab. */ /* */ /* Wenn der zweite Output-Parameter weggelassen wird, wird nur die */ /* die Elementsteifigkeitsmatrix abgeliefert. */ /* */ /* */ /* Fall b: */ /* ------- */ /* */ /* Es wird die ie-te Elementbeziehung des FEM-Modells */ /* abgeliefert. Die Knotennummern muessen in der ie-ten Zeile der */ /* Koinzidenzmatrix km stehen, die das Element beschreibenden Parameter */ /* in der ie-ten Zeile der Elementparametermatrix ep. Die Koordinaten */ /* der Elementknoten befinden sich in der Knotenkoordinatenmatrix xy. */ /* Zusaetzlich muss mindestens die Anzahl der Freiheitsgrade pro Knoten */ /* kf als Inputparameter erscheinen, so dass der einfachste Aufruf von */ /* elemat_m fuer Fall b so aussieht: */ /* */ /* [em eb] = elemat_m (ie , kf , xy , km , ep) */ /* */ /* Output: em - Elementsteifigkeitsmatrix */ /* eb - Elementbelastungsvektor bzw. Elementmassenmatrix */ /* */ /* Folgende Modifikationen des elemat_m-Aufrufs sind moeglich: */ /* */ /* - Wenn der zweite Output-Parameter weggelassen wird, wird nur die */ /* die Elementsteifigkeitsmatrix abgeliefert. */ /* */ /* - Die von elemat_m benoetigten Informationen ueber die Element- */ /* Charakteristik (kx, kf, ke, kp) werden (bis auf kf, der immer */ /* als Input-Parameter angegeben werden muss) beim oben gezeigten Aufruf */ /* aus den Dimensionen der Matrizen ermittelt. Man kann diese Parameter */ /* auch alle entsprechend */ /* */ /* [em eb] = elemat_m (ie , kx , kf , ke , kp , xy , km , ep) */ /* */ /* an elemat_m uebergeben, sie werden dann fuer eine Kompatibilitaets- */ /* pruefung benutzt ("sicherer Aufruf"). */ /* */ /* kx - "Dimension" des Problems (1, 2 oder 3) */ /* kf - Maximale Anzahl der Freiheitsgrade pro Knoten */ /* ke - Maximale Knotenanzahl pro Element */ /* kp - Anzahl der Parameter, die das Element beschreiben */ /* */ /* - FEM-Modelle mit unterschiedlichen Elementtypen verwalten diese in */ /* der Elementtypmatrix et, die in jeweils einer Zeile 5 Informationen */ /* fuer das Element enthaelt: */ /* */ /* * Elementtyp, */ /* * Anzahl der Knoten, */ /* * Anzahl der Elementparameter, */ /* * Dimension des Elements (ein-, zwei- oder dreidimensional), */ /* * Anzahl der Freiheitsgrade pro Knoten */ /* */ /* (entspricht einer kompletten "individuellen Element-Charakteristik" */ /* fuer den Elementtyp). */ /* */ /* In diesem Fall muss et als zusaetzlicher Input-Parameter uebergeben */ /* werden: */ /* */ /* [em eb] = elemat_m (ie , kx , kf , ke , kp , xy , km , ep , et) ; */ /* */ /* In diesem Fall sind die Werte der "uebergeordneten Element- */ /* Charakteristik" kx, kf, ke, kp die Maximalwerte aus allen */ /* individuellen Element-Charakteristiken. */ /* */ /* Autor: J. Dankert */ /* ************************************************************************* */
Für den Aufruf der Interface-Funktion elemat_m aus Matlab genügt die Möglichkeit des Zugriffs auf die .dll-Datei (für die 32-Bit-Version) bzw. die .mexw64-Datei (für die 64-Bit-Version), die über die folgenden Links zum Download verfügbar sind:
Die komplette (in C geschriebene) "Mex-Funktion" elemat_m.c im Quelltext und die beiden einzubindenden Libraries für das Erzeugen einer aufrufbaren Interface-Funktion (.dll-Datei bzw. .mexw64-Datei) sind auch für beide Matlab-Varianten verfügbar:
mex elemat_m.c femset_f.lib femtnw_f.lib
und für die 64-Bit-Version mitmex elemat_m.c femset64.lib femtnw64.lib
Diese Kommandos müssen aus dem Matlab-Command-Window heraus gestartet werden. Weitere Hinweise und ein Beispiel findet man auf der Seite "Erzeugen von Mex-Files".Das ist aber wirklich nur für Interessenten, die selbst Mex-Files erzeugen wollen. Für den Aufruf der Interface-Routine aus Matlab genügen die oben zum Download offerierten fertigen Dateien.