Come indicato sopra, il potenziale è definito dalla subroutine potential separata, e quindi è in un certo senso esterno al programma principale. Per un dato , potential ritorna il potenziale e la corrispondente forza . Solo quest'ultima è, strettamente parlando, necessaria per portare avanti l'integrazione; ma conoscere anche il potenziale permette di verificare la legge di conservazione dell'energia passo per passo.
Il programma chiede i seguenti dati di input: time step , posizione iniziale , energia totale , numero di time steps (verrà seguita l'evoluzione temporale per un tempo totale ), e nome del file di uscita (è anche possibile convogliare l'output sullo standard output).
L'energia totale serve a calcolare la velocità iniziale
, secondo
(1.7) |
(1.8) |
Assegnare la velocità iniziale significa, nell'ottica
dell'algoritmo di Størmer-Verlet, assegnare la posizione
al "tempo precedente". Tale algoritmo però opera su
posizioni ed accelerazioni. La velocità alla posizione
può essere in generale ottenuta come
La velocità iniziale è sempre definita positiva dal programma, ossia il punto inizia a muoversi verso gli positivi. Data la simmetria del potenziale, questa non è una limitazione (invertire la velocità è equivalente a lasciarla invariata e cambiare il segno della coordinata di posizione iniziale).
Il loop sul numero di time steps è la parte centrale del programma. Il punto su cui va posta particolare attenzione è il trasferimento dell'informazione della "posizione precedente" da una iterazione alla successiva, effettuato usando tre variabili x, xprev, xprevsav.
A fini di controllo sulla conservazione dell'energia, viene calcolata anche la velocità e l'energia cinetica. Per ottenere una precisione accettabile, le velocità vengono definite utilizzando la (1.9). Questo però comporta che per definire è necessario conoscere , e quindi che alla conclusione di ogni iterazione le velocità calcolate sono riferite all'iterazione precedente, ossia alla posizione che aveva la particella all'inizio dell'iterazione, prima di essere spostata.
I dati emessi sul file di output sono, nell'ordine, il numero dell'iterazione, la posizione, la velocità, la forza, l'energia cinetica, l'energia potenziale e l'energia totale: tutte riferite alla posizione che aveva la particella all'inizio dell'iterazione.