Elemat_m - Berechnen einer speziellen Elementbeziehung

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                                                        */
/* ************************************************************************* */

Download

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:

elemat_m.dll      elemat_m.mexw64

Beispiele

Für Interessenten

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:

Damit können aus Matlab aufrufbare Interface-Dateien erzeugt werden für die 32-Bit-Version mit

mex  elemat_m.c  femset_f.lib  femtnw_f.lib

und für die 64-Bit-Version mit

mex  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.