// Main VL template
#import "../preamble.typ": *

// Fix theorems to be shown the right way in this document
#import "@preview/ctheorems:1.1.3": *
#show: thmrules

// Main settings call
#show: conf.with(
	// May add more flags here in the future
	num: 5,
	type: 0, // 0 normal, 1 exercise
	date: datetime.today().display(),
	//date: datetime(
	//	year: 2025,
	//	month: 5,
	//	day: 1,
	//).display(),
)

= Weiter in der Diskussion ueber den Fussball

Velocity Verlet lautet im allgemeinen
$
	x (t + Delta t ) =  x (t) +  v (t) Delta t + 1/2 (F (x (t))) / (m) Delta t ^2 \
	V (t +  Delta t ) =  V (t) +  (F (x (t +  Delta t )) + F (x (t))) / (2) Delta t.
$
Aus der letzten Stunde wissen wir, dass die Kraft, welche auf den Ball wirkt gegeben ist durch
$
	arrow(F) =  - m g hat(e)_(z) -  c_(W) 1/2 rho A abs(arrow(v))^2 hat(e )_(v) - c_(M) 1/2 rho A R arrow(omega)times arrow(v).
$

Wir wahlen die Zeit als $tau =  1"s"$ und die Laenge als $L =  1"m"$ in den skalierten Einheitgen folgt dann
$
	dot.double(x) =  - tilde(g) hat(e)_(z) - tilde(c)_(W) abs(dot(x))^2 hat(e)_(x)  + tilde(c)_(M)  arrow(omega)times dot(arrow(x)).
$
Q: Wie schiesst man en Ball in die linke obere Ecke des Tors?

Wir betrachten die Situation als ein AWP mit
$
	arrow(x) (0) =  vec(x (0), y (0), z (0)), \
	arrow(v) (0) =  vec(v_(x) (0), v_(y) (0), v_(z) (0)), \
	arrow(omega) =  vec(omega_(x) , omega_(y) , omega_(z) ).
$

Nach einer Zeit $T$ soll unser System die Konfiguration
$
	x (T) = L, y (T) =  B/2, z (T) =  H
$
annehmen.

Dabei gibt es 10 Pramenter, 3 Bedingungen fuer die Endposition und nochmal 3 fuer den Start $==>$ 4 dimensionale Loesung.

Eine eindeutige Loesung $(v_(y) (0),v_(z) (0))$ soll aus gegebenem $arrow(omega)  and v_(x)  (0)$ bestimmt werden.
T wird dabei aus $x (T) =  L$ (durch simulation) bestimmt.

Methoden Nullstellen zu finden.

Ein Problem fuer Newton in mehreren Dimensionen ist die Invertierung der Matrix der Ableitung.

Q: Wie wird bei dem Torbeispiel die Ableitung gebildet?

Muss bei dem gradientenfreien Newton-Verfahren nicht auch die Simulation mehrmals durchlaufen werden? Wie soll es sonst funktionieren?

= Mehr Dimensionen

Tricks fuer mehrere Dimensionen (Molekulare Dynamik und Vielteilchensimulationen)
+ Parallelisierung der Kraftberechnung
+ Symetrisierung von Rechnungen (symetrische Kraefte)
+ Wechselwirkungen in Simuationen haben nur endliche Reichweite
+ Bei kleinen Simulationsboxen sind die Randbedingungen wichtig (z.B. Wasser in einem Nanometer)
	+ Besser sollten die Randbedingungen periodisch sein

Idee der Paralleliseriung ist verschiedene Schleifenkoerper auf unterschiedliche Cores zu verteilen.
Dies funktioniert ueber den shared memory (jeder Core kann auf den gesamten Speicher zugreifen) der CPU.

#example[
	Betrachte das Integral
	$
		I =  integral_(0)^(1) d x sin^2 (pi x) =  1/2 \
		=  sum_(i = 1)^(N) 1/N sin^2  ( i/N).
	$

	Diese kann nun auf den verschiedenen

	+ Sequential
	+ Just distribute the loop with reduction
	+ Distribute all without reduction
	+ Distrubute just the partial sums over the cores

	// Q: what does OMP stand for?
	// Open MP
	// link with -fopenmp
	// C code to parralleize loops
	// #pramga omp parallel for default(shared) reducion (+:sum)
]

#example[
	Typische Wechselwirkungen zwischen Teilchen koennen durch ein Lennert-Jones Potential dargestellt werden
	$
		V (r) =  4 epsilon (1/r^(12) - 1/r^(6) )
	$
	wobei der erste Term der Volumenausschluss ist und der zweite Term van der Waals ist. 
	Der Abstand kann mittels eines Trees oder eines spatial Hashes schneller berechnet werden.

	Auch kann man den Raum im Gitterzellen aufteilen und dann nur noch den Abstand zu jeder Zelle berechnen.
]

Bei der Abstandsberechnung mit periodischen Randbedingungen muss die minimum image convention beachtet werden.

