Gelöste Aufgaben/Kw53: Unterschied zwischen den Versionen
(→tmp) |
Keine Bearbeitungszusammenfassung |
||
(4 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 14: | Zeile 14: | ||
<onlyinclude> | <onlyinclude> | ||
[[Datei:Kw50-01.png|300px|left|mini|Lageplan (wie [[Gelöste Aufgaben/Kw50|Kw50]])]] | [[Datei:Kw50-01.png|300px|left|mini|Lageplan (wie [[Gelöste Aufgaben/Kw50|Kw50]])]] | ||
Geben Sie die Lösung für ein Euler-Bernoulli-Modell der Brücke mit dem Verfahren von [[Randwertprobleme/Methoden zur Lösung von Randwertproblemen/Verfahren von Rayleigh-Ritz (EBB)|Rayleigh-Ritz (EBB)]] an - hier | Geben Sie die Lösung für ein Euler-Bernoulli-Modell der Brücke mit dem Verfahren von [[Randwertprobleme/Methoden zur Lösung von Randwertproblemen/Verfahren von Rayleigh-Ritz (EBB)|Rayleigh-Ritz (EBB)]] an - hier ohne[https://de.wikipedia.org/wiki/Lagrange-Multiplikator Lagrange-Multiplikator] für die geometrische Zwangsbedingung. | ||
Dies ist eine Näherungslösung zu [[Gelöste Aufgaben/Kw50|Kw50]]. | Dies ist eine Näherungslösung zu [[Gelöste Aufgaben/Kw50|Kw50]]. | ||
Zeile 20: | Zeile 20: | ||
Ermitteln Sie die genäherten Verläufe der Schnittgrößen und Verschiebungen im Balken für diese Parameter: | Ermitteln Sie die genäherten Verläufe der Schnittgrößen und Verschiebungen im Balken für diese Parameter: | ||
<math>\begin{array}{ll}K_C =&\displaystyle 5 \frac{E\,I}{\ell_0}\\m_A =&\displaystyle \frac{m_B}{5} \end{array}</math> | ::<math>\begin{array}{ll}K_C =&\displaystyle 5 \frac{E\,I}{\ell_0}\\m_A =&\displaystyle \frac{m_B}{5} \end{array}</math> | ||
== Lösung mit Maxima == | == Lösung mit Maxima == | ||
Zeile 27: | Zeile 27: | ||
Alle Überlegungen zur Geometrie des Systems übernehmen wir. | Alle Überlegungen zur Geometrie des Systems übernehmen wir. | ||
<!--------------------------------------------------------------------------------> | <!--------------------------------------------------------------------------------> | ||
{{MyCodeBlock|title=Header | {{MyCodeBlock|title=Header | ||
|text= | |text= | ||
Für die Lösung nutzen wir hier das Ritz-Verfahren. Die geometrischen Zwangsbedingungen arbeiten wir direkt in die Trial-Functions ein. | |||
|code= | |code= | ||
<syntaxhighlight lang="lisp" line start=1> | <syntaxhighlight lang="lisp" line start=1> | ||
1 | /*******************************************************/ | ||
/* MAXIMA script */ | |||
/* version: wxMaxima 18.10.1 */ | |||
/* author: Andreas Baumgart */ | |||
/* last updated: 2019-02-12 */ | |||
/* ref: TM-C, Brigde-Problem */ | |||
/* description: finds the plain rayleigh-ritz solution */ | |||
/* for lab problem #3 */ | |||
/*******************************************************/ | |||
</syntaxhighlight> | </syntaxhighlight> | ||
}} | }} | ||
<!--------------------------------------------------------------------------------> | <!--------------------------------------------------------------------------------> | ||
{{MyCodeBlock|title= | {{MyCodeBlock|title=Declarations | ||
|text= | |text= | ||
Wir arbeiten mit den selben Parametern und Bezugslängen, wie in [[Gelöste Aufgaben/Kw50|Kw50]]. | |||
|code= | |code= | ||
<syntaxhighlight lang="lisp" line start=1> | <syntaxhighlight lang="lisp" line start=1> | ||
1 | /* declare variational variables - see 6.3 Identifiers */ | ||
declare("Δs", alphabetic); | |||
declare( "ϕ", alphabetic); | |||
declare( "Π", alphabetic); /* elastic potential */ | |||
declare( "ℓ", alphabetic); | |||
assume(ℓ[0]>0); | |||
/* system parameters */ | |||
params: [K[C] = kappa*EI/ℓ[0], | |||
q[0] = m[B]*g/ℓ[0], | |||
m[A] = theta*m[B], | |||
theta = 1/5, | |||
kappa = 5]; | |||
geometry: [alpha[A] = 30*%pi/180, | |||
alpha[B] = 60*%pi/180, | |||
ℓ[1] = ℓ[0]-ℓ[2], | |||
Δs[A] = W[A]*cos(%pi/2-alpha[A]), | |||
Δs[B] = W[B]*cos(%pi/2-alpha[B]), | |||
tan(alpha[B])= H/ℓ[2], | |||
tan(alpha[A])= H/ℓ[0], | |||
xi[1] = ℓ[1]/ℓ[0], | |||
xi[2] = ℓ[2]/ℓ[0], | |||
0 = Δs[A]+Δs[B]]; | |||
geometry: ratsimp(solve(geometry,[alpha[A],alpha[B],ℓ[1],ℓ[2],Δs[A],Δs[B],H,xi[1],xi[2], W[B]])[1]); | |||
/* reference length selected: */ | |||
dimless : ℓ[Bez] = 1/3*m[B]*g*ℓ[0]^3/(EI); /*cantilevered*/ | |||
</syntaxhighlight> | </syntaxhighlight> | ||
}} | }} | ||
<!--------------------------------------------------------------------------------> | <!--------------------------------------------------------------------------------> | ||
{{MyCodeBlock|title=Formfunctions | {{MyCodeBlock|title=Formfunctions | ||
|text= | |text= | ||
Nach "Ritz" wählen wir zwei Trial-Functions über die gesamte Stablänge. Als zugehörige, gesuchte Koordinaten wählen wir die Auslenkung in ''A'' und die Verdrehung in ''C'', also | |||
::<math>\underline{Q} = \left(\begin{array}{c}W_A\\\Phi_C \end{array}\right)</math>. | |||
Die Trial-Functions müssen dann diesen geoemtrischen Zwangsbedingungen genügen: | |||
::<math>\begin{array}{l}w(0) = W_A\\w(\ell_1) = W_B \mbox{ mit } \displaystyle W_B = -\frac{W_A}{\sqrt{3}}\\\displaystyle \frac{dw}{dx}|_{x=\ell} = \Phi_C\end{array}</math>. | |||
Mit einem Polynom 3-ten Grades als Ansatz ist also unser Näherungsansatz für die Auslenkung dann | |||
::<math>\displaystyle \tilde{w}(\xi) = \sum_{i=1}^2 Q_i \cdot \phi_i(\xi)</math> | |||
mit den Trial-Functions | |||
::<math>\begin{array}{lll}\phi_1 = &-&\displaystyle \frac{1}{2}\left(\left( {{3}^{\frac{5}{2}}}+3\right) \, {{\xi}^{3}}+\left( -2\; {{3}^{\frac{5}{2}}}-8\right) \, {{\xi}^{2}}+\left( {{3}^{\frac{5}{2}}}+7\right) \xi-2\right)\\\phi_2 =&&\ell_o\cdot \left( 3\, {{\xi}^{3}}-5 \, {{\xi}^{2}}+2\, \xi\right)\end{array}</math>. | |||
[[Datei:Kw53-11.png|mini|Trial Functions]]Und so sehen sie aus, unsere zwei [[Sources/Lexikon/Trial-Function|Trial-Functions]]: | |||
|code= | |code= | ||
<syntaxhighlight lang="lisp" line start=1> | <syntaxhighlight lang="lisp" line start=1> | ||
1 | /* coordinates */ | ||
Q : [W[A],Phi[C]]; | |||
v(x) := sum(C[i]*x^i,i,0,3); | |||
/* gemetric constraints */ | |||
const: [subst([x= 0 ], v(x) ) = W[A], | |||
subst([x=ℓ[1]], v(x) ) = W[B], | |||
subst([x=ℓ[0]], diff(v(x),x))= Phi[C], | |||
subst([x=ℓ[0]], v(x) ) = 0 ]; | |||
trials : expand(subst(solve(subst(geometry,const), makelist(C[i],i,0,3))[1],v(x))); | |||
phi : makelist(ratsimp(coeff(trials,Q[i])),i,1,2); | |||
trials: w(x) = sum(Q[i]*phi[i],i,1,2); | |||
print('phi = expand(subst([x=ℓ[0]*xi],phi)))$ | |||
/* plot trial functions */ | |||
plot2d(ratsimp(subst([x = xi*ℓ[0]],phi)*[1,1/ℓ[0]]), [xi,0,1], | |||
[legend, "W[A]","Φ[C]"], [xlabel, "x/ℓ →"], [ylabel, "ϕ[i] →"]); | |||
</syntaxhighlight> | </syntaxhighlight> | ||
}} | }} | ||
<!--------------------------------------------------------------------------------> | <!--------------------------------------------------------------------------------> | ||
{{MyCodeBlock|title=Potentials | {{MyCodeBlock|title=Potentials | ||
|text= | |text= | ||
Die Potentiale aus Elastischen Energien und Arbeitsfunktion der Gewichtskräfte sind | |||
::<math>\begin{array}{lll} U =& &\displaystyle \frac{1}{2}\cdot \int_0^\ell E I\; w''^2 \; dx + \frac{1}{2}\cdot K_C \cdot \Phi_C^2\\ &-&\displaystyle \int_0^\ell q_0 \; w \; dx - m_A\,g\; W_A \end{array}</math>. | |||
Einsetzten der Trial-Functions liefert | |||
::<math>U= \displaystyle \frac{1}{2} \left({W_A},{{\Phi}_C}\right) \underbrace{\begin{pmatrix}\frac{\left( 8 {{3}^{\frac{5}{2}}}+262\right) \, \mathit{EI}}{{{\ell}_{0}^{3}}} & -\frac{\left( 5 {{3}^{\frac{5}{2}}}+17\right) \, \mathit{EI}}{{{\ell}_{0}^{2}}}\\ -\frac{\left( 5 {{3}^{\frac{5}{2}}}+17\right) \, \mathit{EI}}{{{\ell}_{0}^{2}}} & \frac{28 \mathit{EI}+{\ell_0}\, {K_C}}{{\ell_0}}\end{pmatrix}}_{\displaystyle :=\underline{\underline{A}}} \begin{pmatrix}{W_A}\\ {{\Phi}_C}\end{pmatrix} - \left({W_A},{{\Phi}_C}\right) \underbrace{\begin{pmatrix}{m_A} g-\frac{{{3}^{\frac{3}{2}}}\, {q_0}\, {\ell_0}}{8}+\frac{5 {q_0}\, {\ell_0}}{24}\\ \frac{{q_0}\, {{\ell}_{0}^{2}}}{12}\end{pmatrix}}_{\displaystyle :=\underline{b}}</math>. | |||
|code= | |code= | ||
<syntaxhighlight lang="lisp" line start=1> | <syntaxhighlight lang="lisp" line start=1> | ||
1+1 | /******************************************************/ | ||
/* Boundary Value Problem Formulation */ | |||
/* elastic and gravitational potential */ | |||
PMPE : [Π[P] = 1/2*integrate(EI*'diff(w(x),x,2)^2, x,0,ℓ[0]) + 1/2*K[C]*Phi[C]^2, | |||
A[P] = integrate(q[0]*w(x), x,0,ℓ[0]) + m[A]*g*W[A]]; | |||
PMPE: subst(trials, PMPE); | |||
PMPE: ev(PMPE,nouns); | |||
/* Potential */ | |||
U: expand(subst(PMPE,Π[P] - A[P])); | |||
</syntaxhighlight> | </syntaxhighlight> | ||
}} | }} | ||
<!--------------------------------------------------------------------------------> | <!--------------------------------------------------------------------------------> | ||
{{MyCodeBlock|title=Equilibrium Conditions | {{MyCodeBlock|title=Equilibrium Conditions | ||
|text= | |text= | ||
Nach dem [[Sources/Lexikon/Minimum Prinzipe|Minimum Prinzip]] hat das Potential ''U'' ein Minimum - das Sytem ist im Gleichgewicht, wenn | |||
::<math>\underline{\underline{A}} \cdot \underline{Q} = \underline{b}</math>. | |||
In den System-Matrizen stehen hier | |||
::<math>\underline{\underline{A}}\,=\,\begin{pmatrix}\displaystyle \frac{386.7\cdot \mathit{EI}}{{{\ell}_{0}^{3}}} & \displaystyle -\frac{94.9\cdot \mathit{EI}}{{{\ell}_{0}^{2}}}\\ \displaystyle -\frac{94.9\cdot \mathit{EI}}{{{\ell}_{0}^{2}}} & \displaystyle \frac{{{\ell}_{0}}\cdot {{K}_{C}}+28\cdot \mathit{EI}}{{{\ell}_{0}}}\end{pmatrix} | |||
</math> und | |||
::<math>\underline{b}\,=\,\begin{pmatrix}{{m}_{A}}\,g-0.4\cdot {{q}_{0}}\cdot {{\ell}_{0}}\\ 0.08\cdot {{q}_{0}}\cdot {{\ell}_{0}^{2}}\end{pmatrix}</math>. | |||
|code= | |code= | ||
<syntaxhighlight lang="lisp" line start=1> | <syntaxhighlight lang="lisp" line start=1> | ||
1 | /* Equilibrium Conditions */ | ||
A[M] : ratsimp(funmake('matrix,2*[ | |||
[coeff(U,Q[1],2), coeff(coeff(U,Q[1],1),Q[2],1)/2], | |||
[coeff(coeff(U,Q[2],1),Q[1],1)/2, coeff(U,Q[2],2)] | |||
])); | |||
rest : expand(U-1/2*Q.A[M].transpose(Q)); | |||
b[M] : funmake('matrix,-makelist([coeff(rest,Q[i])],i,1,2)); | |||
</syntaxhighlight> | </syntaxhighlight> | ||
}} | }} | ||
<!--------------------------------------------------------------------------------> | <!--------------------------------------------------------------------------------> | ||
{{MyCodeBlock|title=Solving | {{MyCodeBlock|title=Solving | ||
|text= | |text= | ||
Das Lösen des Gleichungssystems liefert dann | |||
::<math>\displaystyle \left(\begin{array}{c} W_A\\\Phi_C\end{array}\right) = \frac{m_B\, g\, \ell_0^3}{3 \; E I} \left(\begin{array}{l} -3.78 {10}^{-5}\\\displaystyle 0.00747 \frac{1}{\ell} \end{array} \right)</math>. | |||
|code= | |code= | ||
<syntaxhighlight lang="lisp" line start=1> | <syntaxhighlight lang="lisp" line start=1> | ||
1 | /* Solving */ | ||
sol: linsolve_by_lu(subst(params,A[M]),subst(params,b[M]))[1]; | |||
sol : expand(float(sol)); | |||
sol : makelist(Q[i]=sol[i][1],i,1,2); | |||
</syntaxhighlight> | </syntaxhighlight> | ||
}} | }} | ||
<!--------------------------------------------------------------------------------> | <!--------------------------------------------------------------------------------> | ||
{{MyCodeBlock|title=Post-Processing | {{MyCodeBlock|title=Post-Processing | ||
|text= | |text= | ||
Zeile 111: | Zeile 202: | ||
[[Datei:Kw53-21.png|mini|Auslenkung ''w(x)''|alternativtext=|ohne]] | [[Datei:Kw53-21.png|mini|Auslenkung ''w(x)''|alternativtext=|ohne]] | ||
<!-- Die Ergebnis-Plots sind identisch mit denen aus Kw51 --> | |||
==== ... für ''Φ(x)'': ==== | ==== ... für ''Φ(x)'': ==== | ||
[[Datei: | [[Datei:Kw51-12.png|mini|Kippwinkel ''Φ(x)''|alternativtext=|ohne]] | ||
==== ... für M(x): ==== | ==== ... für M(x): ==== | ||
[[Datei: | [[Datei:Kw51-13.png|mini|Biegemoment ''M(x)''|alternativtext=|ohne]] | ||
==== ... für Q(x): ==== | ==== ... für Q(x): ==== | ||
[[Datei: | [[Datei:Kw51-14.png|mini|Querkraft ''Q(x)''|alternativtext=|ohne]] | ||
|code= | |code= | ||
<syntaxhighlight lang="lisp" line start=1> | <syntaxhighlight lang="lisp" line start=1> | ||
/* Post-Processing */ | /* Post-Processing */ | ||
w : subst([x=xi*ℓ[0]],subst(geometry,subst(sol, sum(Q[j]*phi[j],j,1, | w : subst([x=xi*ℓ[0]],subst(geometry,subst(sol, sum(Q[j]*phi[j],j,1,2)))); | ||
fcts: [ w , | fcts: [ w , |
Aktuelle Version vom 31. März 2021, 06:38 Uhr
Aufgabenstellung
Eine Brücke ABC der Masse mB und homogener Biegesteifigkeit EI ist in C gelenkig gelagert und in A sowie B mit einem Seil verbunden. Das undehnbare Seil wird dabei über eine kleine Rolle (Radius r ≪ ℓ) in D haftungsfrei geführt. In Punkt C ist die Brücke über eine Drehfeder der Steifigkeit KC mit dem Lager verbunden. In A steht eine Person der Masse mA.
Geben Sie die Lösung für ein Euler-Bernoulli-Modell der Brücke mit dem Verfahren von Rayleigh-Ritz (EBB) an - hier ohneLagrange-Multiplikator für die geometrische Zwangsbedingung.
Dies ist eine Näherungslösung zu Kw50.
Ermitteln Sie die genäherten Verläufe der Schnittgrößen und Verschiebungen im Balken für diese Parameter:
Lösung mit Maxima
In dieser Aufgabe berechnen wir eine Näherungslösung nach dem Verfahren von Rayleigh-Ritz (EBB) zu Kw50.
Alle Überlegungen zur Geometrie des Systems übernehmen wir.
Header
Für die Lösung nutzen wir hier das Ritz-Verfahren. Die geometrischen Zwangsbedingungen arbeiten wir direkt in die Trial-Functions ein.
/*******************************************************/
/* MAXIMA script */
/* version: wxMaxima 18.10.1 */
/* author: Andreas Baumgart */
/* last updated: 2019-02-12 */
/* ref: TM-C, Brigde-Problem */
/* description: finds the plain rayleigh-ritz solution */
/* for lab problem #3 */
/*******************************************************/
Declarations
Wir arbeiten mit den selben Parametern und Bezugslängen, wie in Kw50.
/* declare variational variables - see 6.3 Identifiers */
declare("Δs", alphabetic);
declare( "ϕ", alphabetic);
declare( "Π", alphabetic); /* elastic potential */
declare( "ℓ", alphabetic);
assume(ℓ[0]>0);
/* system parameters */
params: [K[C] = kappa*EI/ℓ[0],
q[0] = m[B]*g/ℓ[0],
m[A] = theta*m[B],
theta = 1/5,
kappa = 5];
geometry: [alpha[A] = 30*%pi/180,
alpha[B] = 60*%pi/180,
ℓ[1] = ℓ[0]-ℓ[2],
Δs[A] = W[A]*cos(%pi/2-alpha[A]),
Δs[B] = W[B]*cos(%pi/2-alpha[B]),
tan(alpha[B])= H/ℓ[2],
tan(alpha[A])= H/ℓ[0],
xi[1] = ℓ[1]/ℓ[0],
xi[2] = ℓ[2]/ℓ[0],
0 = Δs[A]+Δs[B]];
geometry: ratsimp(solve(geometry,[alpha[A],alpha[B],ℓ[1],ℓ[2],Δs[A],Δs[B],H,xi[1],xi[2], W[B]])[1]);
/* reference length selected: */
dimless : ℓ[Bez] = 1/3*m[B]*g*ℓ[0]^3/(EI); /*cantilevered*/
Formfunctions
Nach "Ritz" wählen wir zwei Trial-Functions über die gesamte Stablänge. Als zugehörige, gesuchte Koordinaten wählen wir die Auslenkung in A und die Verdrehung in C, also
- .
Die Trial-Functions müssen dann diesen geoemtrischen Zwangsbedingungen genügen:
- .
Mit einem Polynom 3-ten Grades als Ansatz ist also unser Näherungsansatz für die Auslenkung dann
mit den Trial-Functions
- .
Und so sehen sie aus, unsere zwei Trial-Functions:
/* coordinates */
Q : [W[A],Phi[C]];
v(x) := sum(C[i]*x^i,i,0,3);
/* gemetric constraints */
const: [subst([x= 0 ], v(x) ) = W[A],
subst([x=ℓ[1]], v(x) ) = W[B],
subst([x=ℓ[0]], diff(v(x),x))= Phi[C],
subst([x=ℓ[0]], v(x) ) = 0 ];
trials : expand(subst(solve(subst(geometry,const), makelist(C[i],i,0,3))[1],v(x)));
phi : makelist(ratsimp(coeff(trials,Q[i])),i,1,2);
trials: w(x) = sum(Q[i]*phi[i],i,1,2);
print('phi = expand(subst([x=ℓ[0]*xi],phi)))$
/* plot trial functions */
plot2d(ratsimp(subst([x = xi*ℓ[0]],phi)*[1,1/ℓ[0]]), [xi,0,1],
[legend, "W[A]","Φ[C]"], [xlabel, "x/ℓ →"], [ylabel, "ϕ[i] →"]);
Potentials
Die Potentiale aus Elastischen Energien und Arbeitsfunktion der Gewichtskräfte sind
- .
Einsetzten der Trial-Functions liefert
- .
/******************************************************/
/* Boundary Value Problem Formulation */
/* elastic and gravitational potential */
PMPE : [Π[P] = 1/2*integrate(EI*'diff(w(x),x,2)^2, x,0,ℓ[0]) + 1/2*K[C]*Phi[C]^2,
A[P] = integrate(q[0]*w(x), x,0,ℓ[0]) + m[A]*g*W[A]];
PMPE: subst(trials, PMPE);
PMPE: ev(PMPE,nouns);
/* Potential */
U: expand(subst(PMPE,Π[P] - A[P]));
Equilibrium Conditions
Nach dem Minimum Prinzip hat das Potential U ein Minimum - das Sytem ist im Gleichgewicht, wenn
- .
In den System-Matrizen stehen hier
- und
- .
/* Equilibrium Conditions */
A[M] : ratsimp(funmake('matrix,2*[
[coeff(U,Q[1],2), coeff(coeff(U,Q[1],1),Q[2],1)/2],
[coeff(coeff(U,Q[2],1),Q[1],1)/2, coeff(U,Q[2],2)]
]));
rest : expand(U-1/2*Q.A[M].transpose(Q));
b[M] : funmake('matrix,-makelist([coeff(rest,Q[i])],i,1,2));
Solving
Das Lösen des Gleichungssystems liefert dann
- .
/* Solving */
sol: linsolve_by_lu(subst(params,A[M]),subst(params,b[M]))[1];
sol : expand(float(sol));
sol : makelist(Q[i]=sol[i][1],i,1,2);
Post-Processing
Und die Ergebnisse können wir uns anschauen ...
... für w(x):
... für Φ(x):
... für M(x):
... für Q(x):
/* Post-Processing */
w : subst([x=xi*ℓ[0]],subst(geometry,subst(sol, sum(Q[j]*phi[j],j,1,2))));
fcts: [ w ,
diff(w,xi )/ℓ[0] ,
-EI*diff(w,xi,2)/ℓ[0]^2,
-EI*diff(w,xi,3)/ℓ[0]^3];
fcts: float(subst(geometry,expand(fcts)))$
facts: [1/ℓ[Bez], ℓ[0]/ℓ[Bez], 1/(m[B]*g*ℓ[0]), 1/(m[B]*g)];
textlabels : ["← w(x)/ℓ[Bez]", "← w'(x)/(ℓ[Bez]/ℓ[0]) →", "M(x)/(m[B]*g*ℓ) →", "Q(x)/(m[B]g →"];
for i: 1 thru 4 do(
f : expand(subst(dimless,facts[i]*fcts[i])),
preamble: if i<=2 then "set yrange [] reverse" else "set yrange []",
plot2d(f, [xi,0,1], [legend, false],
[gnuplot_preamble, preamble],
[xlabel, "x/ℓ →"],
[ylabel, textlabels[i]]))$
Links
- Aufgabe Kw50 (analytische Lösung dieser Aufgabe)
- Aufgabe Kw52 (Lösung dieser Aufgabe mit dem Ansatz von Rayleigh-Ritz und Lagrange-Multiplikator)
- Aufgabe Kw53 (Lösung dieser Aufgabe mit dem Ansatz von Rayleigh-Ritz)
Literature
- ...