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 der Systemsteifigkeitsbeziehung */ /* ====================================== */ /* */ /* Es wird die komplette Systemsteifigkeitsbeziehung (einschliesslich */ /* Einbau der Randbedingungen) aufgebaut. */ /* */ /* Input: 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 ein Element beschreiben */ /* ne - Elementanzahl */ /* nk - Knotenanzahl */ /* xy - Knotenkoordinaten (0) */ /* km - Koinzidenzmatrix (1) */ /* ep - Elementparameter (2) */ /* kr - Randbedingungen (3) */ /* bk - Knotenlasten (4) */ /* sc - Federsteifigkeiten (5) */ /* li - Identische Verschiebungen (6) */ /* pu - Vorgeschriebene Verschiebungen (7) */ /* et - Element-Typen (8) */ /* la - Lager unter Winkel (9) */ /* aa - Winkel fuer Lager (10) */ /* */ /* Output: succ = 1 --> Erfolg, die Systemsteifigkeitsbeziehung wurde */ /* aufgebaut */ /* 0 --> Misserfolg */ /* */ /* Es sind grundsaetzlich zwei Typen von Funktionsaufrufen moeglich, die */ /* in ihren jeweils kuerzesten Varianten so aussehen: */ /* */ /* Der "einfache Syswbc_m-Aufruf" */ /* */ /* [succ ksys fsys] = syswbc_m (xy,km,ep,kr,bk) */ /* */ /* ermittelt die Parameter kx, kf, ke, kp, ne und nk aus den Dimensionen */ /* der uebergebenen Matrizen. */ /* */ /* Der "sichere syswbc_m-Aufruf" */ /* */ /* [succ ksys fsys] = syswbc_m (kx,kf,ke,kp,ne,nk,xy,km,ep,kr,bk) */ /* */ /* ermoeglicht der Interface-Funktion den Test der Dimensionen der */ /* uebergebenen Matrizen mit den Werten auf den ersten 6 Positionen der */ /* der Input-Parameterliste. Bei dieser Variante duerfen die Matrizen auch */ /* auch als eindimensionale Vektoren uebergeben werden. Nachdruecklich */ /* wird jedoch in jedem Fall die Uebergabe der Input-Parameter als */ /* Matrizen empfohlen. */ /* */ /* Formate der Input-Matrizen (die weniger empfehlenswerte Variante in */ /* Klammern ist jeweils nur fuer den "sicheren Femalg_m-Aufruf" gueltig): */ /* */ /* xy - nk*kx-Matrix (oder Vektor mit nk*kx Werten, nacheinander jeweils */ /* die kx Werte für einen Knotenpunkt) */ /* km - ne*ke-Matrix (oder Vektor mit ne*ke Werten, nacheinander jeweils */ /* die ke Knotennummern fuer ein Element) */ /* ep - ne*kp-Matrix (oder Vektor mit ne*kp Werten, nacheinander jeweils */ /* die kp Parameter fuer ein Element) */ /* kr - nk*kf-Matrix (oder Vektor mit nk*kf Werten, nacheinander jeweils */ /* die kf Indikatoren 0 oder 1 fuer einen Knoten) */ /* bk - nk*kf-Matrix (oder Vektor mit nk*kf Werten, nacheinander jeweils */ /* die kf Knotenlasten fuer einen Knoten) */ /* */ /* Die nachfolgend fuer den "einfachen Syswbc_m-Aufruf" beschriebenen */ /* erweiterten Varianten sind sinngemaess auch für den "sicheren Syswbc_m- */ /* Aufruf" moeglich: */ /* */ /* [succ ksys fsys] = syscom_m (xy,km,ep,kr,bk,sc) */ /* */ /* sc - nk*kf-Matrix (oder Vektor mit nk*kf Werten, nacheinander jeweils */ /* die kf Federsteifigkeiten fuer einen Knoten) */ /* */ /* [succ ksys fsys] = syscom_m (xy,km,ep,kr,bk,sc,li) */ /* */ /* li - nk*kf-Matrix (oder Vektor mit nk*kf Werten, nacheinander jeweils */ /* die Spalten der nk*kf-Matrix (Achtung, diese spaltenweise Uebergabe */ /* der Werte als Vektor unterscheidet sich von den zeilenweise in */ /* einen Vektor zu packenden Werte der uebrigen Felder) */ /* */ /* [succ ksys fsys] = syscom_m (xy,km,ep,kr,bk,sc,li,pu) */ /* */ /* pu - nk*kf-Matrix (oder Vektor mit nk*kf Werten, nacheinander jeweils */ /* die kf vorgeschriebenen Verschiebungen fuer einen Knoten) */ /* */ /* [succ ksys fsys] = syscom_m (xy,km,ep,kr,bk,sc,li,pu,et) */ /* */ /* et - ne*5-Matrix (oder Vektor mit nk*5 Werten, nacheinander jeweils */ /* die 5 charakteristischen Groessen fuer ein Element) */ /* */ /* [succ ksys fsys] = syscom_m (xy,km,ep,kr,bk,sc,li,pu,et,la,aa) */ /* */ /* la - Vektor mit nk Werten (jeweils die Kennzeichung fuer einen Konten: */ /* 1 --> spezielles Lager, 0 --> kein spezielles oder gar kein Lager) */ /* aa - Vektor mit nk Werten (jeweils der Winkel bezueglich der x-Achse, */ /* wenn an diesem Knoten ein spezielles Lager existiert). */ /* Weil diese Lagerungsart zunaechst nur fuer zweidimensionale */ /* Probleme realisiert ist, ist nur eine Winkelangabe moeglich, obwohl */ /* das Feld aa intern bereits fuer die Aufnahme von jeweils 3 Werten */ /* fuer jeden Knoten vorbereitet ist. */ /* */ /* Autor: J. Dankert */ /* ************************************************************************* */
Für den Aufruf der Interface-Funktion syswbc_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:
Für den nebenstehend zu sehenden Rahmen werden die Element-Steifigkeitsmatrizen und die System-Steifigkeitsmatrix mit Matlab-Femset berechnet.
Die komplette (in C geschriebene) "Mex-Funktion" syswbc_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 system_m.c femset_f.lib femtnw_f.lib
und für die 64-Bit-Version mitmex system_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.