8. Ansatzfunktionen#
Um verzerrungsfreie Starrkörperbewegungen sowie konstante Verzerrungszustände beschreiben zu können und dabei ein räumlich isotropes Verformungsverhalten zu approximieren, müssen die Ansatzfunktionen vollständig sein. Für ein ebenes Dreieckselement bedeutet dies z.B.
Hier sind für ein 3-Knoten-Dreieckselement alle linearen Terme enthalten, für ein 6-Knoten-Dreieckselement sind auch die quadratischen und bilinearen Terme enthalten. Illustriert kann man sich am besten ein pascalsches Dreieck wie in Abbildung Abb. 8.1 vorstellen.
Abb. 8.1 Pascal’sches Dreieck für Dreieckselemente ([Zienkiewicz et al., 2005])#
Analog kann dazu ein vollständiges Viereckselement definiert werden:
Auch hier liefert das Pascalsche Dreieck eine anschauliche Interpretation:
Abb. 8.2 Pascalsches Dreieck für Rechteckelemente ([Zienkiewicz et al., 2005]). Grau unterlegt ist ein kubisches Rechteckelement.#
8.1. Formfunktionen für \(C^0\)-Elemente#
Nachfolgend werden kurz die Ansatzfunktionen für 1D-, 2D- und 3D-Elemente mit Lagrange-Polynomen vorgestellt:
8.1.1. 1D Formfunktionen#
Abb. 8.3 1D-Elemente mit linearer und quadratischer Ansatzfunktion#
Für den linearen Fall haben 1D-Elemente 2 Knoten und damit 2 Formfunktionen:
Für den quadratischen Fall haben 1D-Elemente 3 Knoten und damit 3 Formfunktionen:
Show code cell source
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Circle
import scienceplots
# Set up the plot configurations.
plt.rcParams['lines.linewidth'] = 2.0
plt.rcParams['lines.color'] = 'black'
plt.rcParams['legend.frameon'] = True
plt.rcParams['figure.figsize'] = (8, 6)
plt.rcParams['font.family'] = 'serif'
plt.rcParams['legend.fontsize'] = 15
plt.rcParams['font.size'] = 15
plt.rcParams['axes.spines.right'] = False
plt.rcParams['axes.spines.top'] = False
plt.rcParams['axes.spines.left'] = True
plt.rcParams['axes.spines.bottom'] = True
plt.rcParams['axes.axisbelow'] = True
plt.rcParams['grid.color'] = 'grey'
plt.rcParams['grid.alpha'] = 0.6
plt.rcParams['grid.linestyle'] = '--'
xi = np.linspace(-1, 1, 100)
# Create a figure and axis.
fig, ax = plt.subplots(1, 2, figsize=(12, 6))
# Plotting the functions.
N11 = 0.5*(1-xi)
N12 = 0.5*(1+xi)
ax[0].plot(xi,N11)
ax[0].plot(xi,N12)
N21 = 0.5*xi*(xi-1)
N22 = 0.5*xi*(xi+1)
N23 = 1-xi**2
ax[1].plot(xi,N21)
ax[1].plot(xi,N22)
ax[1].plot(xi,N23)
# Draw black line from (0,0) to (1,0)
ax[0].plot([-1, 1], [0, 0], color='black', linewidth=5.0)
ax[1].plot([-1, 1], [0, 0], color='black', linewidth=5.0)
# Draw red dots at (0,0) and (1,0)
ax[0].plot(-1, 0, 'ro', markersize=10)
ax[0].plot(1, 0, 'ro', markersize=10)
ax[1].plot(-1, 0, 'ro', markersize=10)
ax[1].plot(1, 0, 'ro', markersize=10)
ax[1].plot(0, 0, 'ro', markersize=10)
# Annotate the red dots.
# Draw a circle and add text at the specified location
circle = Circle((-1.1, 0.0), 0.1, color='red', fill=False,linewidth=2)
circle2 = Circle((1.1, 0.0), 0.1, color='red', fill=False,linewidth=2)
circle21 = Circle((-1.1, 0.0), 0.1, color='red', fill=False,linewidth=2)
circle22 = Circle((1.1, 0.0), 0.1, color='red', fill=False,linewidth=2)
circle23 = Circle((0, -0.2), 0.1, color='red', fill=False,linewidth=2)
ax[0].add_patch(circle)
ax[0].add_patch(circle2)
ax[0].annotate('1', xy=(-1, 0), xytext=(-1.15, -0.04), color='red')
ax[0].annotate('2', xy=(1, 0), xytext=(1.05, -0.04), color='red')
ax[1].add_patch(circle21)
ax[1].add_patch(circle22)
ax[1].add_patch(circle23)
ax[1].annotate('1', xy=(-1, 0), xytext=(-1.15, -0.04), color='red')
ax[1].annotate('2', xy=(1, 0), xytext=(1.05, -0.04), color='red')
ax[1].annotate('3', xy=(0, -0.2), xytext=(-0.04, -0.24), color='red')
# Set labels for the axis
ax[0].set_xlabel(r"$\xi$")
ax[0].set_ylabel(r"$N(\xi)$")
ax[1].set_xlabel(r"$\xi$")
ax[1].set_ylabel(r"$N(\xi)$")
# Draw background grid
ax[0].grid(True)
ax[1].grid(True)
# Add legend.
ax[0].legend([r"$N_1(\xi)$", r"$N_2(\xi)$"], loc='upper center', bbox_to_anchor=(0.5, -0.3), ncol=2)
ax[0].set_aspect('equal')
ax[1].legend([r"$N_1(\xi)$", r"$N_2(\xi)$", r"$N_3(\xi)$"], loc='upper center', bbox_to_anchor=(0.5, -0.3), ncol=3)
ax[1].set_aspect('equal')
Abb. 8.4 Formfunktionen für 1D-Elemente#
8.1.2. 2D Formfunktionen#
Abb. 8.5 2D-Rechteck-Elemente mit linearer und quadratischer Ansatzfunktion#
Im 2D-Fall werden die Formfunktionen für Rechteck-Elemente als Tensorprodukt der 1D-Formfunktionen definiert. Für ein 2D-Rechteck-Element mit 4 Knoten (lineares Element) sind die Formfunktionen:
Abb. 8.6 Bilineare Formfunktionen für 2D-Rechteck-Elemente.#
Um ein vollständiges Element der Ordnung 2 zu erhalten, benötigt man 9 Knoten beim Rechteck-Element. Die entsprechenden Formfunktionen lauten:
Abb. 8.7 Biquadratische Formfunktionen für 2D-Rechteck-Elemente (Q2).#
In der Praxis der Finite-Elemente-Methode beschränkt man sich jedoch nicht ausschließlich auf Q9-Elemente, die die vollständige Polynomordnung 2 aufweisen, wie in Abbildung Abb. 8.2 dargestellt. Serendipity-Elemente sind im oben beschriebenen Sinne nicht vollständig, erfüllen jedoch die Anforderungen an die räumliche Isotropie, die Verzerrungsfreiheit bei Starrkörperbewegungen und die Abbildung konstanter Verzerrungszustände. Der Begriff „Serendipity“ geht vermutlich auf ein Märchen von H. Walpole, „Die drei Prinzen von Serendip“, zurück, in dem die Prinzen die Fähigkeit besitzen, durch Zufall unverhoffte und glückliche Entdeckungen zu machen. Das zugehörige Element ist in Abbildung Abb. 8.5 als Q2S dargestellt. Die Ansatzfunktionen lauten:
Abb. 8.8 Biquadratische Serendipity-Formfunktionen für 2D-Rechteck-Elemente (Q2S).#
Eine weitere Möglichkeit der zweidimensionalen Vernetzung ist die Verwendung von Dreiecken. In den gebräuchlichen FEM-Programmen werden dabei Dreiecke mit 3 oder 6 Knoten implementiert. Diese sind in Abb. 8.9 dargestellt.
Abb. 8.9 Dreieck-Elemente mit linearen (T1) und quadratischen (T2) Formfunktionen.#
Die linearen Dreieck-Elemente (T1) sind die einfachsten Elemente und werden in der Literatur häufig als „konstant“ bezeichnet. Dies bezieht sich auf die abgeleiteten Größen (z.B. Spannungen, Dehnungen, etc.), die als konstant dargestellt werden. Die Formfunktionen lauten:
Abb. 8.10 Formfunktionen für das Dreieck-Element T1.#
Die Formfunktionen für Dreieck-Elemente mit 6 Knoten (T2) sind vollständig quadratisch. Insgesamt hat das T2-Element bessere Approximationseigenschaften als das T1-Element. Die Formfunktionen lauten:
8.1.3. 3D Formfunktionen#
Abb. 8.11 3D-Hexaeder-Elemente mit linearer (8 Knoten) und quadratischer (27 Knoten) Approximation. Zusätzlich ist das 20-Knoten-Hexaeder-Serendipity-Element gezeigt.#
Im 3D-Fall werden die Formfunktionen für Hexaeder-Elemente als Tensorprodukt der 1D-Formfunktionen definiert. Für ein 3D-Hexaeder-Element mit 8 Knoten (lineares Element) sind die Formfunktionen:
Um ein vollständiges Element der Ordnung 2 zu erhalten, benötigt man 27 Knoten beim Hexaeder-Element. Die Formfunktionen kann man zum Beispiel [Wriggers, 2008] entnehmen. Mehr Verwendung findet das 20-Knoten-Element. Hierbei handelt es sich um ein Serendipity-Element, das nicht vollständig von der Ordnung 2 ist, aber die Bedingungen der Raumisotropie, keine Verformung bei starren Körperbewegungen und die Möglichkeit, konstante Spannungszustände zu modellieren, erfüllt.
Für tetraedrische Elemente implementieren gängige FEM-Programme Tetraeder mit entweder 4 oder 10 Knoten. Diese sind in Abbildung Abb. 8.12 dargestellt.
Abb. 8.12 Tetraedrische Elemente mit linearen (Tet1) und quadratischen (Tet2) Formfunktionen.#
Die linearen Tetraederelemente (T4) sind die einfachsten und werden häufig als „konstante“ Elemente in der Literatur bezeichnet, wobei sich dies auf die abgeleiteten Größen (z.B. Spannungen, Dehnungen, etc.) bezieht. Die Formfunktionen lauten:
Die Formfunktionen für tetraedrische Elemente mit 10 Knoten (T10) sind vollständig quadratisch und bieten bessere Approximationseigenschaften als das T4-Element. Die Formfunktionen lauten:
Fragen zum Kapitel
Ansatzfunktionen
Wieviele Knoten hat ein Tetraeder-Element mit linearen Ansatzfunktionen?
Wieviele Knoten hat ein Viereck-Element mit quadratischen Ansatzfunktionen?
Eine wichtige Eigenschaft der gezeigten Formfunktionen ist, dass sie nur am zugehörigen Knoten den Wert 1 annehmen. An allen anderen Knoten ist der Wert 0. Was bedeutet dies für den Knotenfreiheitsgrad bzgl. seiner physikalischen Deutbarkeit?
Welche Aussage ist richtig?
[ ] Bei Formfunktionen mit quadratischem Polynomgrad ist der Verlauf der Dehnungen im Element quadratisch.
[ ] Bei Formfunktionen mit linearem Verlauf sind die Verschiebungen im Element linear.
[ ] Die Dehnungen sind über die Elementränder hinweg stetig für Formfunktionen mit quadratischem Polynomgrad.
[ ] Die Summe der Ansatzfunktionen im Element ist stets 1.