/* ANFANGSWERTPROBLEM DER SCHROEDINGER GLEICHUNG Praktikum: Computational Physics, FSU Jena Programm zur Berechnung von eindimensionalen Anfangswertproblemen der Schroedinger Gleichung mit Hilfe des Crank-Nichelson Verfahrens. Die Ausgabe des Betragsquadrates der Wellenfunktion erfolgt in eine Datei. erstellt von C. Thierfelder, Jena Dezember 2002 WGS, modified on April 14, 2003 Karsten Hannewald, modified Nov 24, 2005 */ # include # include # include "cmplx.h" # define N 1000 /*Zahl der Gitterpunkte*/ void Crank_Nichelson() { /* N ist die Zahl der Gitterpunkte und wird ganz oben durch define definiert*/ int T=10000; /* Zahl der Zeitschritte*/ struct Complex Psi[N]; /* Feld fuer Wellenfunktion*/ struct Complex a[N],b[N]; /* Parameter zur Wellenfunktionsberechnung*/ struct Complex c,L; int i,j; /* Zaehlvariablen*/ int block=(int)(T/500); /* Abstand von Zeitschritten bei Ausgabe (xfarbe erlaubt nur ca. 500*500 Pixel) */ double V[N]; /* Potential*/ double dx=0.001; /* Abstand der Gitterpunkte*/ double dt=0.000005; /* Zeitschritt*/ double k=30; /* Impuls */ double s=0.08; /* Breite des Gauss */ double x0=300; /* Anfangslage des Gauss*/ double Integral_anfang=0; /* Flaechen unter Wellenfunktion */ double Integral_kontrolle=0; FILE *datei_ptr; /* FILE-Pointer*/ char *name="wave.dat"; /* Name der Datei in die ausgegeben wird*/ datei_ptr=fopen(name,"w"); // fprintf(datei_ptr,"Zeitentw. des Betragsquadr. der Wellenfkt. \n 500 500 \n"); /* Initialisierung des Potentials */ for(i=0;i0; --i) { opeq(&Psi[i],divi(sub(Psi[i+1],b[i]),a[i])); } /* Berechnung & Ausgabe der normierten Flaeche zur Ueberpruefung der Unitaritaet in jedem block-ten Zeitschritt */ if (j%block==0) { Integral_kontrolle=0; for(i=0;i