%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\chapter{Die Umsetzung in ein Programm} \label{programmkapitel}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\setcounter{table}{0}
\setcounter{figure}{0}
\setcounter{equation}{0}

\section{Die verschiedenen Berechnungsschritte} 

In der Arbeitsgruppe begann die Programmentwicklung f"ur die Multiband
Gutzwiller Theorie 1998.
Es stellte sich heraus, da"s eine Dreiteilung der Programme in 
\begin{enumerate}[(i)]
\item einen ``Bandstruktur''-Teil zur Berechnung der Einteilchen-Energien,
\item einen Programmteil zur Minimierung der inneren Variationsparameter und
\item einen darauf vorbereitenden Zwischenteil, in dem die atomaren
  Vielteilchenzust"ande pr"apariert und die Summation der $q$-Faktoren und der
  Dichtematrix $Z$ aufbereitet werden,
\end{enumerate}
am sinnvollsten ist.

\subsection{Die Berechnung der Bandstruktur} 
\label{PRGenband}

Die Berechnung der Bandstruktur ist der Teil des gesamten Gutzwiller-Programmpakets, welcher in seinem Ablauf am meisten variiert. 
Da dieses Programm bei einer neuen Berechnung der Gutzwiller-Grundzustandsenergie f"ur einen festgelegten Satz "au"serer Variationsparameter immer zu allererst l"auft, beinhaltet es einen Initialteil, der Variablen initialisiert und Referenzgr"o"sen auf Hartree-Fock-Ebene paramagnetisch berechnet.
Dies ist nat"urlich nur in der ersten Iteration erforderlich.

Eine weitere Variation bietet dieses Programm dadurch, da"s die beiden
Methoden  des Ladungsflusses ({\em charge flow}-Methode) bzw. der fixierten
Ladungen mittels chemischer Potentiale ({\em chemical potential}-Methode) in diesem Programmteil unterschiedliche Abl"aufe nach sich ziehen.

Bei erlaubtem Ladungsflu"s wird ein Wert $\lambda_{Oxy}$ eingelesen, die
$p$-Orbitalenergie entsprechend gesetzt und dann die Dichtematrix $n^0$
und die Hopping-Energie-Matrix $\epsilon$ berechnet.

Bei der Methode der chemischen Potentiale wird $\lambda_{Oxy}$ so bestimmt,
da"s eine vorgegebene Dichte $n_d$ bzw. $n_p$ erhalten wird.
Dazu sind mindestens drei Rechnungen n"otig, um $\lambda_{Oxy}$ hinreichend
genau zu fixieren.
\vspace{0.5em} 

Die eigentliche Berechnung der Einteilchen-Energien und ihrer Eigenfunktionen
beruht dabei auf einem seit Jahren bew"ahrten Programm, welches den {\em
  LCAO}-Ansatz ({\em Linear Combination of Atomic Orbitals}) nutzt
(vgl. Anhang \ref{App:TB-Band}). 
F"ur die Berechnung der Dichte- ($n$) und der Energie-Matrix ($\epsilon$) wird
der $k$-Raum in diesem Programm durch Tetraeder diskretisiert. 
Diese Diskretisierungsmethode erlaubt es durch Zerteilung eines Tetraeders in 8
gleich gro"se tetraedrische Volumina lokal Gitterverfeinerungen vorzunehmen. 
Diese lokalen Verfeinerungen erlauben es kritische Stellen in der Bandstruktur
mit h"oherer Aufl"osung zu betrachten und Bandkreuzungen nahe beieinander
liegender B"ander bis zu einem gewissen Ma"s zu unterscheiden, ohne die
komplette Brillouin-Zone zu fein zu diskretisieren \cite{rath:2109}. 
Jeder verwendete $k$-Punkt mu"s schlie"slich berechnet werden, was bei guter
Aufl"osung im 3-dimensionalen $k$-Raum schnell die Rechenkapazit"aten ersch"opft. 
Dies ist insbesondere bei iterativen Berechnungen wie der Gutzwiller-Variation
ein h"aufig limitierender Faktor.
Im nichtmetallischen \nio kommt man mit einem recht groben $k$-Gitter aus,
jedoch mu"s man bei 8 Formeleinheiten pro Einheitszelle eine hochdimensionale
Hamilton-Matrix diagonalisieren.
\vspace{0.5em} 

F"ur die Transformation in den $k$-Raum wird der Ortsindex $i$ auf die Indizes
$\left(^{\textstyle l}_{\textstyle\kappa}\right)$ transformiert, wobei $l$ den
Index der Einheitszelle und $\kappa$ den Untergitter-Index darstellt. 
Die Energie-Matrix ergibt sich zu
\ba
\epsilon\left(^{\textstyle\sigma \sigma^\prime}_{\textstyle\kappa\kappa^\prime}\right) = <\sum\limits_k \tilde{t}\left(^{\textstyle\sigma\sigma^\prime}_{\textstyle\kappa\kappa^\prime},\vec{k}\right)\, \hat{c}^+_{\kappa \sigma}(\vec{k})
\hat{c}_{\kappa^\prime \sigma^\prime}(\vec{k})\!>_0
\ea
mit den Operatoren
\ba
\hat{c}_{\kappa\sigma}(\vec{k}) = \frac{1}{\sqrt{N}}\,\sum\limits_l \hat{c}_{l\kappa\sigma}\,e^{i\vec{k}\cdot\vec{R}_l}
= \frac{1}{\sqrt{N}}\,\hat{c}_{i\sigma}\,\sum\limits_l e^{i\vec{k}\cdot\vec{R}_i}
\ea
und den Matrixelementen
\ba
\renewcommand{\arraystretch}{0.6}
\tilde{t}\left(^{\textstyle\sigma
    \sigma^\prime}_{\textstyle\kappa\kappa^\prime},\vec{k}\right) =
\frac{1}{N}\,\sum\limits_{l,l^\prime}\,\tilde{t}\left(\!\begin{array}{c}\scriptstyle\sigma\sigma^\prime\\
\scriptstyle l  l^\prime\\
\scriptstyle\kappa\kappa^\prime\end{array}\!\right)\, e^{i \vec{k}\cdot\left(\vec{R}_{l} - \vec{R}_{l^\prime}\right)}.
\renewcommand{\arraystretch}{1}
\ea

Die totale Energie ist demnach entsprechend Gl. \ref{effham} im $k$-Raum:
\ba
E_{tot} =
\sum\limits_{\stackrel{\kappa\kappa^\prime}{\sigma\sigma^\prime}}\,\sqrt{q(^\kappa_\sigma)}\sqrt{q(^{\kappa^\prime}_{\sigma^\prime})}\,\epsilon\left(^{\textstyle\sigma
    \sigma^\prime}_{\textstyle\kappa\kappa^\prime}\right) +
\sum\limits_{\kappa,\sigma}\left(\epsilon_{\kappa,\sigma} +
  \epsilon_{\kappa,\sigma}^{CF}\right)n_{\kappa\sigma}^{(0)} +
\sum\limits_\Gamma\, E_\Gamma\,m_\Gamma
\ea

Die Durchf"uhrung der Berechnungen von $\epsilon\left(^{\sigma
    \sigma^\prime}_{\kappa\kappa^\prime}\right)$ und $n_{\kappa\sigma}^{(0)}$ ist die Aufgabe des ersten Programmteils, des ``Bandstruktur''-Teils.
\vspace{0.5em} 

%%% Flowchart of Program Enband
\begin{chart}
\label{enbandchart}
\begin{center}
\setlength{\unitlength}{0.75cm}
\begin{picture}(20,30)
\thicklines
\put(0,0){\framebox(20,30)}
\put(7,28.5){\framebox(6,1.0){\bf Programm EnBand}}
\put(0.5,26){\dashbox{0.3}(6,2)}
\put(0.9,26.2){\parbox[b]{4.5cm}{\small q-Werte setzen\\Iteration 1: alle =1\\Sonst: aus MainV5w}}
\put(6.5,27){\vector(2,0){2}}
\put(8.5,26.5){\framebox(4,1){QsIt}}
\put(12.5,27){\vector(2,0){2}}
\put(14.5,26.5){\dashbox{0.3}(5,1){\small Solldichten einlesen}}
\put(17,26.5){\line(0,-1){1}}
\put(17,25.5){\line(-15,0){15}}
\put(2,25.5){\vector(0,-1){1}}
\put(0.5,23.5){\framebox(3,1){Sumain0}}
\put(3.5,24){\vector(2,0){2}}
\put(5.5,23){\dashbox{0.3}(8.5,2)}
\put(5.9,23.2){\parbox[b]{6.3cm}{\small Kristallfeld-Aufspaltung
    und\\Austausch-Aufspaltungen einlesen\\Charge-Flow: zus"atzl. $p$-Orb.-Shift}}
\put(14,24){\vector(2,0){2}}
\put(16,23.5){\framebox(3,1){DMatG}}

\put(17.5,23.5){\line(0,-1){1}}
\put(17.5,22.5){\line(-9,0){9}}
\put(8.5,22.5){\vector(0,-1){1}}
\put(7,20.5){\framebox(3,1){SumainP}}

\put(7,20.5){\vector(-3,-1){3}}
\put(3.2,20.3){\small Iteration 1}
\put(2.5,18.5){\framebox(3,1){DMain0}}
\put(4,18.5){\vector(0,-1){0.5}}
\put(2.5,17){\framebox(3,1){EFgFM0a}}
\put(4,17){\vector(0,-1){0.5}}
\put(2.5,15.5){\framebox(3,1){Enband0}}
\put(5.5,16){\vector(1,0){1}}

\put(8.5,20.5){\vector(0,-3){3}}
\put(8.7,19.3){\small Sonst}
\put(6.5,15.5){\dashbox{0.3}(5.5,2)}
\put(6.9,15.7){\parbox[b]{6.3cm}{\small Charge-Flow:\\Sauerstoff $p$-Orbitale\\verschieben}}
\put(12,16.5){\vector(1,1){2}}

\put(14,18){\framebox(3,1){SumainF}}
\put(15.5,18){\vector(0,-1){0.5}}
\put(14,16.5){\framebox(3,1){DMain}}
\put(15.5,16.5){\vector(0,-1){0.5}}
\put(14,15){\framebox(3,1){EFgFMa}}
\put(15.5,15){\vector(0,-1){0.5}}
\put(14,13.5){\framebox(3,1){Enband}}
%
\put(15.5,13.5){\vector(0,-1){1}}
\put(15.7,13){\small Charge-Flow}
\put(14,11.5){\framebox(3,1){SumainF}}
\put(17,12){\vector(1,0){1}}
\put(18.75,12){\oval(1.5,1)}
\put(18,11.5){\makebox(1.5,1){Ende}}
%
\put(14,14){\vector(-1,0){7}}
\put(9,14.2){\small Chemical-Potential-}
\put(9,13.4){\small Verfahren}

\put(1,13){\dashbox{0.3}(6,1.5)}
\put(1.2,13.2){\parbox[b]{6.3cm}{\small Sauerstoff-$p$-Orbitale\\um $10^{-3}\,\mathrm{eV}$ verschieben}}

\put(2.5,13){\vector(0,-1){2}}
\put(1,10){\framebox(3,1){SumainF}}
\put(2.5,10){\vector(0,-1){0.5}}
\put(1,8.5){\framebox(3,1){DMain}}
\put(2.5,8.5){\vector(0,-1){0.5}}
\put(1,7){\framebox(3,1){EFgFMa}}
\put(2.5,7){\vector(0,-1){0.5}}
\put(1,5.5){\framebox(3,1){Enband}}

\put(4,6){\vector(1,0){1}}
\put(5,5.5){\dashbox{0.3}(7,2)}
\put(5.4,5.7){\parbox[b]{6.3cm}{\small Sauerstoff-$p$-Orbitale\\nach
    Newton-Verfahren auf\\Dichte-Sollwert setzen}}

\put(9,7.5){\line(0,4){1.5}}
\put(9,9){\vector(1,0){4}}
\put(13,8.5){\framebox(3,1){SumainF}}
\put(14.5,8.5){\vector(0,-1){0.5}}
\put(13,7){\framebox(3,1){DMain}}
\put(14.5,7){\vector(0,-1){0.5}}
\put(13,5.5){\framebox(3,1){EFgFMa}}
\put(14.5,5.5){\vector(0,-1){0.5}}
\put(13,4){\framebox(3,1){Enband}}
%
\put(16,4.5){\line(1,0){1}}
\put(17,4.5){\line(0,1){6}}
\put(17,10.5){\line(-1,0){11}}
\put(6,10.5){\vector(0,1){2.5}}
\put(17.2,5){\small Sonst}
%
\put(14.5,4){\line(0,-1){1.5}}
\put(11.9,1.1){\parbox[b]{6.3cm}{\small Solldichte\\ bis auf $10^{-12}$
    erreicht\\oder 10 Zyklen iteriert}}
\put(14.5,2.5){\vector(1,0){3.5}}
\put(18.75,2.5){\oval(1.5,1)}
\put(18,2){\makebox(1.5,1){Ende}}
\end{picture}
\caption{Flu"sdiagramm des Teil-Programms ''EnBand''}
\end{center}
\end{chart}
%%% Flowchart of Program Enband terminated.

Im dargestellten Flu"sdiagramm \ref{enbandchart} des zur Berechnung der Bandstruktur verwendeten Fortran-Programms ''EnBand'' sind Unterprogramm-Routinen in K"astchen mit durchgezogenem Rand dargestellt.
Die Funktion dieser Unterprogramme wird nun im Folgenden f"ur jede Routine kurz beschrieben.
\begin{itemize}
\item[QsIt:] In dieser Routine ist es m"oglich, sofern vom Benutzer des Programms vorgegeben, die Beimischung von q-Werten aus fr"uheren Iterationen zur Verbesserung der Konvergenz durchzuf"uhren.
\item[Sumain0:] In diesem Teil werden die Kristallgeometrie-Daten eingelesen
  und darauf das Kristallgitter ermittelt. Dabei wird das St"utzstellengitter
  im Impulsraum ({\em k-Mesh}) mittels der Tetraeder-Methode erzeugt. Abschlie"send wird die {\em Tight-Binding}-Matrix aufgestellt.
\item[DMatG:] In diesem Unterprogramm werden die Kristallfeld- und Austauschaufspaltungsverschiebungen f"ur die $t_{2g}$- und $e_g$-Orbitale in die Diagonale des entsprechenden Hamilton-Operatoranteils geschrieben. 
\item[SumainP:] Hier wird die Hamilton-Matrix (9~x~9) in Slater-Koster-Art ($s$, $p_x$, $p_y$, $p_z$, $d_{xy}$, $d_{yz}$, $d_{zx}$, $d_{x^2-y^2}$, $d_{3z^2-r^2}$) mittels 2-Zentren-Integralen ($SSS$, $SPS$, $SDS$, $PPS$, $PPP$, $PDS$, $PDP$, $DDS$, $DDP$, $DDD$) f"ur die Orbitale und f"ur das Kristallfeld (eingeschr"ankt auf Sigma-Kopplung) mit den Ausgangsparametern (''PP0'') und der Kristallfeld-{\em Tight-Binding}-Matrix zusammengestellt. Die ''0'' kodiert im Programm die initialen paramagnetischen Werte, bzw. einen paramagnetischen Kontext.
\item[DMain0:] Dies ist die erste von 3 Routinen, die nur in der allerersten Iteration durchlaufen werden und eine paramagnetische Initialrechnung durchf"uhren. F"ur jeden $k$-Punkt wird die 9~x~9-{\em Tight-Binding}-Matrix aufgestellt und diagonalisiert.
\item[EFgFM0a:] Dies ist die zweite der 3 paramagnetischen Initialroutinen. Es wird das Tetraedergitter erneut generiert und damit die Fermienergie und die Zustandsdichte berechnet. Gegebenenfalls wird das Tetraedergitter lokal verfeinert, um die Fermienergie m"oglichst genau zu bestimmen. 
\item[Enband0:] Die letzte der 3 paramagnetischen Initialroutinen dient der Bestimmung der Besetzung der verschiedenen Orbitale an den verschiedenen Kristallgitterpl"atzen und der Bandenergien.
\item[SumainF:] Wie SumainP, nur mit aktuellen Parameterarrays f"ur die Majorit"ats- (''PPA'') bzw. Minorit"ats-Besetzungen (''PPI''). Das ''A'' (''I'') kodiert im Programm Werte f"ur die Majorit"ats-(Minorit"ats-) Besetzungen.
\item[DMain:] In dieser Routine wird analog zum Unterprogramm DMain0 die 9~x~9-{\em Tight-Binding}-Matrix f"ur jeden $k$-Punkt aufgestellt und diagonalisiert. Anschlie"send werden die $q$-Werte hinzumultipliziert, die Austausch- und Kristallfelder addiert und erneut diagonalisiert.
\item[EFgFMa:] Diese Routine erf"ullt die gleiche Aufgabe wie das Unterprogramm EFgFM0a, allerdings werden die Majori"ats- und Minorit"atsbesetzungen entsprechend der Magnetisierungsform behandelt.
\item[Enband:] Auch dieses Unterprogramm erf"ullt die gleiche Aufgabe wie der Teil Enband0. Auch hier wird die Magnetisierungsform wieder entsprechend ber"ucksichtigt. Ergebnis ist $\epsilon\left(^{\sigma \sigma^\prime}_{\kappa\kappa^\prime}\right)$ und $n_{\kappa\sigma}^{(0)}$.
\end{itemize}

\subsection{Die Berechnung des atomaren Hamiltonians} 
\label{PRGmainpni}

Die Berechnung der atomaren Vielteilchen-Hamilton-Matrix findet in zwei
Programmen statt. 
Zum einen in dem hier diskutierten Programm ''MainPni'', welches die Hamilton-Matrix f"ur die Nickel-Ionen mit den $d$-Orbitalen bestimmt, und einem zweiten Programm ''MainPo'' welches eine analoge Rechnung f"ur die $p$-Zust"ande bei den Sauerstoff-Ionen durchf"uhrt. Das Programm ''MainPo'' wird hier aufgrund der Analogie nicht weiter beschrieben.

Nachdem zuerst die Ergebnisse der Majorit"ats- und Minorit"atsbesetzungen,
sowie die Bandenergien aus dem Programm ''Enband'' eingelesen wurden, steht
zun"achst beim Programmablauf die Berechnung des atomaren Hamilton-Operators
f"ur die f"unf $d$-Orbitale im Vordergrund. 
Diese Berechnung wird durch das Unterprogramm ''Conf6'' f"ur alle
Konfigurationen von $d^0$ bis $d^{10}$ durchgef"uhrt.

Der zweite Teil des Programms wird durch das Unterprogramm ''GenZ0Q0'' gesteuert und dient der Generierung der $Z$- und $q$-Matrix. Hierzu werden alle Multiplett-Zust"ande berechnet und deren Entartungsgrad bestimmt. Daran anschlie"send wird ein Adressregister aufgebaut, welches die zu den jeweiligen Matrixelementen beitragenden Zust"ande verwaltet. Anhand dieses Registers werden anschlie"send die vielf"altigen Summationen f"ur die Berechnung der Matrixelemente durchgef"uhrt. Hierbei sind zwischendurch immer wieder Routinen eingebaut, die sicherstellen, da"s eventuelle Adressierungsfehler aufgrund falscher Identifizierung der Zust"ande durch numerische Ungenauigkeiten vermieden werden.
\vspace{0.5em} 


%%% Flowchart of Program Mainpni
\begin{chart}
\label{mainpnichart}
\begin{center}
\setlength{\unitlength}{0.75cm}
\begin{picture}(20,30)
\thicklines
\put(0,0){\framebox(20,30)}
\put(7,28.5){\framebox(6,1.0){\bf Programm MainPni}}
\put(6.5,26){\dashbox{0.3}(7,2)}
\put(6.7,26.2){\parbox[b]{5.5cm}{\small Einlesen der Majorit"ats- und\\ Minorit"atsorbitalbesetzungen\\ und der Bandenergien}}
\put(10,26){\line(0,-1){0.5}}
\put(10,25.5){\line(-1,0){6.5}}
\put(3.5,25.5){\vector(0,-1){1}}
\put(1.5,23.5){\framebox(4,1){Conf6}}
\put(3.5,23.5){\vector(0,-1){1}}
%
\put(1.5,21){\dashbox{0.3}(4,1.5)}
\put(1.8,21.2){\parbox[b]{3.5cm}{\small Atomparameter\\ einlesen}}
%
\put(3.5,21){\vector(0,-1){0.5}}
\put(1.5,19.5){\framebox(4,1){WWParG}}
\put(3.5,19.5){\vector(0,-1){0.5}}
\put(1.5,18){\framebox(4,1){GenCon}}
\put(3.5,18){\vector(0,-1){0.5}}
\put(1.5,16.5){\framebox(4,1){EnDiag}}
\put(3.5,16.5){\vector(0,-1){0.5}}
\put(1.5,15){\framebox(4,1){UDiag}}
\put(3.5,15){\vector(0,-1){0.5}}
\put(1.5,13.5){\framebox(4,1){UnoDiag}}
\put(3.5,13.5){\vector(0,-1){0.5}}
\put(1.5,12){\framebox(4,1){jspDiag}}
\put(3.5,12){\vector(0,-1){0.5}}
\put(1.5,10.5){\framebox(4,1){jSpin}}
\put(3.5,10.5){\vector(0,-1){0.5}}
\put(1.5,9){\framebox(4,1){jCharge}}
\put(3.5,9){\vector(0,-1){0.5}}
\put(1.5,7.5){\framebox(4,1){t3Coul}}
\put(3.5,7.5){\vector(0,-1){0.5}}
\put(1.5,6){\framebox(4,1){A4jtee1}}
\put(3.5,6){\vector(0,-1){0.5}}
\put(1.5,4.5){\framebox(4,1){A4jtee2}}
\put(3.5,4.5){\vector(0,-1){0.5}}
\put(1.5,3){\framebox(4,1){S4jt3e}}
%
\put(5.5,3.5){\line(1,0){1}}
\put(6.5,3.5){\line(0,1){20}}
\put(6.5,23.5){\vector(1,0){1.5}}
\put(8,23){\framebox(4,1){GenZ0Q0}}
%
\put(10,23){\vector(0,-1){1}}
\put(8,21){\framebox(4,1){GenCon}}
\put(10,21){\vector(0,-1){0.5}}
\put(8,19.5){\framebox(4,1){nEizOrd}}
\put(10,19.5){\vector(0,-1){0.5}}
\put(8,18){\framebox(4,1){Uordm}}
\put(10,18){\vector(0,-1){0.5}}
\put(8,16.5){\framebox(4,1){nEiz}}
\put(10,16.5){\vector(0,-1){0.5}}
\put(8,15){\framebox(4,1){Adrs1}}
\put(10,15){\vector(0,-1){0.5}}
\put(8,13.5){\framebox(4,1){aMCon}}
\put(10,13.5){\vector(0,-1){0.5}}
\put(8,12){\framebox(4,1){aMgam0}}
\put(10,12){\vector(0,-1){0.5}}
\put(8,10.5){\framebox(4,1){ZMat0}}
\put(10,10.5){\vector(0,-1){0.5}}
\put(8,9){\framebox(4,1){aMgRev0}}
\put(10,9){\vector(0,-1){0.5}}
\put(8,7.5){\framebox(4,1){Enerte}}
\put(10,7.5){\vector(0,-1){0.5}}
\put(8,6){\framebox(4,1){ZMat}}
\put(10,6){\vector(0,-1){0.5}}
\put(8,4.5){\framebox(4,1){Ga0pGen}}
%
\put(12,5){\line(1,0){1}}
\put(13,5){\line(0,1){16.5}}
\put(13,21.5){\vector(1,0){1.5}}
%
\put(14.5,21){\framebox(4,1){GampGen}}
\put(16.5,21){\vector(0,-1){0.5}}
\put(14.5,19.5){\framebox(4,1){TestSR}}
\put(16.5,19.5){\vector(0,-1){0.5}}
\put(14.5,18){\framebox(4,1){AMS}}
\put(16.5,18){\vector(0,-1){0.5}}
\put(14.5,16.5){\framebox(4,1){EmptG}}
\put(16.5,16.5){\vector(0,-1){0.5}}
\put(14.5,15){\framebox(4,1){qMat0g}}
\put(16.5,15){\vector(0,-1){0.5}}
\put(14.5,13.5){\framebox(4,1){CmiQAd}}
\put(16.5,13.5){\vector(0,-1){0.5}}
\put(14.5,12){\framebox(4,1){qMatg}}
\put(16.5,12){\vector(0,-1){0.5}}
\put(14.5,10.5){\framebox(4,1){Search}}
\put(16.5,10.5){\vector(0,-1){0.5}}
\put(14.5,9){\framebox(4,1){Ener}}
\put(16.5,9){\vector(0,-1){0.5}}
\put(14.5,7.5){\framebox(4,1){aMgRev0}}
\put(16.5,7.5){\vector(0,-1){0.5}}
\put(14.5,6){\framebox(4,1){qMatg}}
\put(16.5,6){\vector(0,-1){0.5}}
\put(14.5,4.5){\framebox(4,1){qMatg2}}
\put(16.5,4.5){\vector(0,-1){0.5}}
\put(14.5,3){\framebox(4,1){qMatg3}}
%
\put(16.5,3){\line(0,-1){2}}
\put(16.5,1){\vector(1,0){1}}
\put(18.25,1){\oval(1.5,1)}
\put(17.5,0.5){\makebox(1.5,1){Ende}}
%
\end{picture}
\caption{Flu"sdiagramm des Teil-Programms ''MainPni''}
\end{center}
\end{chart}
%%% Flowchart of Program Mainpni terminated.

Im exemplarisch f"ur beide Ionen-Sorten dargestellten Flu"sdiagramm \ref{mainpnichart} f"ur die Nickel-Ionen sind wie zuvor die verschiedenen Unterroutinen in K"astchen mit geschlossenen Rahmen dargestellt. Hierbei ist zu beachten, da"s es im wesentlichen die beiden Routinen ''Conf6'' und ''GenZ0Q0'' sind, die alle anderen Routinen in Serie aufrufen, um die einzelnen Berechnungsschritte durchzuf"uhren.
\begin{itemize}
\item[Conf6:] Dieses Unterprogramm liest die atomaren Parameter ein und ruft den kompletten Rest an Unterprogrammen in der ersten Spalte im Flu"sdiagramm \ref{mainpnichart} auf, um die einzelnen Terme im Hamilton-Operator f"ur die $d$-Orbitale zu berechnen.
\item[WWParG:] Bestimmt aus den Racah-Parametern alle Wechselwirkungs-Integrale f"ur die folgenden Berechnungen der einzelnen Terme des $d$-Orbital-Hamilton-Operators.
\item[GenCon:] Diese Routine generiert alle m"oglichen $N$-Teilchen-Konfigurationen und speichert diese zur sp"ateren Verwendung im kubischen Datenfeld ''nco''. Die Dimension des $N$-Teilchenraumes wird in der Variablen ''ncod'' gespeichert. 
\item[EnDiag:] Berechnet den Ausdruck \ref{endiag} im Hamilton-Operator f"ur die $d$-Orbitale. 
\item[UDiag:] Berechnet den Ausdruck \ref{udiag} im Hamilton-Operator f"ur die $d$-Orbitale.
\item[UnoDiag:] Berechnet den ersten Teil des Ausdrucks \ref{unodiag} im Hamilton-Operator f"ur die $d$-Orbitale.
\item[jspDiag:] Berechnet den zweiten Teil des Ausdrucks \ref{jspdiag} im Hamilton-Operator f"ur die $d$-Orbitale.
\item[jSpin:] Berechnet den Ausdruck \ref{jspin} im Hamilton-Operator f"ur die $d$-Orbitale.
\item[jCharge:] Berechnet den Ausdruck \ref{jcharge} im Hamilton-Operator f"ur die $d$-Orbitale.
\item[t3Coul:] Berechnet den Ausdruck \ref{t3coul} im Hamilton-Operator f"ur die $d$-Orbitale.
\item[A4jtee1:] Berechnet den Ausdruck \ref{a4jtee1} im Hamilton-Operator f"ur die $d$-Orbitale.
\item[A4jtee2:] Berechnet den Ausdruck \ref{a4jtee2} im Hamilton-Operator f"ur die $d$-Orbitale.
\item[S4jt3e:] Berechnet den Ausdruck \ref{s4jt3e} im Hamilton-Operator f"ur die $d$-Orbitale.
\item[GenZ0Q0:] Dieses Unterprogramm ruft alle anderen noch verbliebenen Routinen im Programmablauf auf, um die $Z$- und $q$-Matrix aus dem atomaren Hamilton-Operator f"ur die Nickel-Ionen zu generieren.
\item[nEizOrd:] Dieses kleine Unterprogramm sortiert die ''ni''-te Untermatrix mit Eigenzust"anden in das alle Eigenzust"ande umfassende Datenfeld ''neizr''. ''ni'' beschreibt in diesem Fall nicht Nickel, sondern die Besetzungszahl (0-10).
\item[Uordm:] Hier werden analog zum Unterprogramm ''nEizOrd'' die zu den Eigenzust"anden geh"orenden Eigenenergien der ''ni''-ten Untermatrix in das komplette Datenfeld ''ear'' zusammengetragen.
\item[nEiz:] Dieser Programmteil bestimmt aus den vorher berechneten Datenfeldern ''neizr'' und ''ear'' die Orbital- (''ideg''), die Spin- (''isp'') und die Gesamtentartung (''ideg*isp''). 
\item[Adrs1:] In dieser Routine findet die Zuordnung der Majorit"ats- und Minorit"ats-$q$-Werte zu den verschiedenen Spin-Orbitalen der verschiedenen Nickel-Ionen statt.
\item[aMCon:] Dient zur Bestimmung aller $m^0_I$ f"ur alle Konfigurationen $I$ aus dem Datenfeld aller $N$-Teilchenkonfigurationen ''nco'' und den Bruttobesetzungen ''ans0''. Die berechneten Werte f"ur die Netto-Besetzungen im statistischen Limes $m^0_I$ f"ur die Konfiguration $I$ werden in dem Vektorfeld ''ami0'' abgelegt. Da in den Formeln h"aufig $\sqrt{m^0_I}$ eingeht, wird diese Gr"o"se in einem eigenen Vektorfeld  ''sami0'' abgelegt, um eine permanente Neuberechnung der Wurzeln zu ersparen.
\item[aMgam0:] Aus den in ''aMCon'' generierten Netto-Besetzungen im statistischen Limes $m^0_I$, gespeichert im Vektorfeld ''ami0'' werden in dieser Routine mittels unit"arer Transormation mit der Matrix $T$ die Besetzungen $m^0_\Gamma$ f"ur alle Multipletts $\Gamma$ bestimmt. Diese Besetzungen werden in den Vektorfeldern ''amga0'' bzw. $\sqrt{m^0_\Gamma}$ in ''samga0'' gespeichert.
\item[ZMat0:] In dieser Routine wird nun f"ur ein vorgegebenes Spin-Orbital die Dichtematrix $Z$ im statistischen Limes aufgestellt. Ergebnisse dieser Berechnungen sind die diagonale $Z_\sigma$-Matrix im statistischen Limes ''zs0'', die Multibesetzungen $m^0_G$ im statistischen Limes f"ur alle Zust"ande $\Gamma \in G$, welche in dem Vektor ''amg0'' gespeichert werden, sowie die Gr"o"sen $S_\Gamma = \frac{1}{m^0_{\sigma,\sigma^\prime}} \sum\limits_{\Gamma \in G} \frac{S_\Gamma}{m^0_\Gamma}$, abgelegt in ''sga'' und $(|G|-1)r_G$ in ''iamg''. $r_G$ ist hierbei der r"aumliche Entartungsgrad der Gruppe $G$. Die letzte Gr"o"se dient der Berechnung der Besetzung der leeren Pl"atze.
\item[aMgRev0:] Diese Routine stellt sicher, da"s in jedem entarteten Unterraum $G$ mit festem Spin die Variationsparameter $m_\Gamma$ ($\forall \Gamma \in G$) alle gleich $m_G$ sind. Hierzu werden die Vektorfelder ''amga'' und ''samga'' in den entarteten Bereichen jeweils mit ''amg'' bzw. ''samg'' belegt. Auf diese Weise werden numerische Ungenauigkeiten unterdr"uckt. 
\item[Enerte:] Summiert die Multi-Elektron-Energien auf zwei Art und Weisen zu Kontrollzwecken auf. Zum einen wird hierbei der Entartungsgrad der Zust"ande $m_G$ ausgenutzt und zum anderen werden zus"atzlich die Energien der Zust"ande $m_\Gamma$ aufsummiert. Die Ergebnisse werden als ''eew1'' und das explizit aufsummierte als ''eew2'' ausgegeben. 
\item[ZMat:] Generiert die diagonale Dichtematrix $Z_\sigma$ aus den Brutto-Besetzungen in ''ans0'', den Netto-Besetzungen $m^0_I$ in ''ami0'', den Multiplett-Besetzungen $m_\Gamma$ in ''amg'' und der Hilfsgr"o"se $S_G$ in ''sga''. Die berechnete Matrix wird in ''zs0'' abgespeichert. 
\item[Ga0pGen:] Dieses Unterprogramm bestimmt die Matrix ''ga0p'' mit den Zust"anden $|\Gamma_0^\prime \cup \sigma^\prime > = \sum\limits_I T_{I,\Gamma^\prime}\, \mathrm{fsign}(\sigma^\prime,I)\, \sqrt{m^0_{I \cup \sigma^\prime}}\, \, |I \cup \sigma^\prime>$. \\
$\mathrm{fsign}(\sigma^\prime,I)$ ist hierbei die Fermi-Vorzeichen-Funktion.
\item[GampGen:] In diesem Teil wird die Matrix ''gamp'' berechnet, die die Zust"ande $|\Gamma^\prime \cup \sigma> = \sum\limits_I T_{I,\Gamma^\prime}\, \mathrm{fsign}(\sigma,I)\, \, |I \cup \sigma>$ enth"alt. \\
$\mathrm{fsign}(\sigma,I)$ beschreibt auch hier die Fermi-Vorzeichen-Funktion.
\item[TestSR:] Dient zur Verifizierung der berechneten Besetzungen. Hier wird die Summenregel f"ur die statistischen Nettobesetzungen "uberpr"uft. Die Summe sollte 1 sein.
\item[AMS:] In dieser Routine werden die $m_I$ f"ur ein vorgegebenes $I$ aus den Brutto-Besetzungen der Spin-Orbitale, Datenfeld ''ans0'', bestimmt. Daf"ur wird das Produnkt "uber alle besetzten und das Produnkt "uber alle unbesetzten Spin-Orbitale gebildet. Au"serdem wird die Loch-Konfiguration f"ur $I$ bestimmt.
\item[EmptG:] Die Routine bestimmt aus der Vollst"andigkeit und den einfach und mehrfach Besetzungen die Zahl der leeren Pl"atze $m_\emptyset$ und der Wurzel daraus. Gespeichert werden die Gr"o"sen in ''empty'' und ''sempty''. Die Berechnung erfolgt nach \\
$m_\emptyset = 1 -\sum\limits_\sigma n^0_\sigma + \sum\limits_{G\, (|G|\ge 2)} (|G| -1)r_G\, m_G$.\\ Hierbei kommt wieder die in ''iamg'' abgelegte Hilfsgr"o"se $(|G| -1)r_G$ zur Anwendung, bei der $r_G$ der r"aumliche Entartungsgrad der Gruppe $G$ ist. 
\item[qMat0g:] Berechnet die Matrix ''qmat1'' mittels der Matrizen ''ga0p'' und ''gamp'' sowie den Wurzeln aus den Multiplett-Besetzungen im statistischen Limes ''samga0''. Hierzu wird folgende Summe gebildet:\\
$\sum\limits_{\stackrel{\Gamma \in G}{\Gamma^\prime \in G\prime}} \frac{1}{\sqrt{m^0_\Gamma m^0_{\Gamma^\prime}}}<\Gamma_0|\Gamma^\prime \cup \sigma><\Gamma^\prime_0 \cup \sigma^\prime|\Gamma>$. Die Zust"ande in $G^\prime$ besitzen dabei ein Elektron mehr als die in $G$.
\item[CmiQAd:] Vervollst"andigt das Adressregister ''iqad'' f"ur die Beitr"age zur $q$-Matrix f"ur die Zust"ande $\Gamma_G$ und den Besetzungen $m_G$.
\item[qMatg:] Hier wird die $q$-Matrix ''qmat2'' nach der Formel\\ $\sum\limits_{\Gamma,\Gamma^\prime} \sqrt{\frac{m_\Gamma m_{\Gamma^\prime}}{m^0_\Gamma m^0_{\Gamma^\prime}}} <\Gamma_0|\Gamma^\prime \cup \sigma><\Gamma^\prime_0 \cup \sigma^\prime|\Gamma>$ bestimmt.\\ Nach dem Summieren wird der Vorfaktor $1/\sqrt{n_{\sigma^\prime}(1-n_{\sigma^\prime})}$ hinzu multipliziert und bekommt die $q_\sigma^{\sigma^\prime}$-Komponente der $q$-Matrix. In diesem Fall werden jedoch noch die Multiplettbesetzungen des statistischen Limes verwendet.
\item[Search:] Diese Routine ermittelt f"ur Paare von Gruppen entarteter Zust"ande $G$ und $G^\prime$ die Beitragsf"ahigkeit zur $q$-Matrix und tr"agt diese in das Adressregister ''iqad'' ein.
\item[Ener:] Dieses Unterprogramm bestimmt die Energie aller Multi-Elektronen durch Aufsummation der Energien der Zust"ande $m_G$ unter Ber"ucksichtigung deren Entartungsgrads. Das Ergebnis wird als ''eew1'' in den Einheiten $\mathrm{eV}$ ausgegeben.
\item[qMatg2:] Aus Konsistenzgr"unden wird die $q$-Matrix analog der Routine ''qMatg'' erneut berechnet. Hierbei wird das Adressregister ''iqad'' der beitragenden Summanden jedoch auf eine andere Art ausgelesen, so da"s man die Summation in einer anderen Reihenfolge durchf"uhrt.
\item[qMatg3:] Berechnet die $q$-Matrix analog der Routine ''qMatg''. Hier werden nun allerdings statt der Multiplett-Besetzungen im statistischen Limes die aktuellen Multiplett-Besetzungen $m_\Gamma$ aus dem Vektorfeld ''samg'' verwendet.
\end{itemize}
\vspace{1ex}

\subsection{Minimierung der inneren Variationsparameter} 
\label{PRGmainv5w}

Die Minimierung der inneren Variationsparameter ist der letzte Schritt in jedem Iterationszyklus. 
Der Ablauf dieser Minimierung mu"s zum einen m"oglichst effizient sein, da es sich im Rahmen der iterativen Minimierung um ein mehrfach durchzuf"uhrendes Problem handelt. 
Auf der anderen Seite mu"s der Algorithmus auch sehr zuverl"assig und genau arbeiten.
\vspace{0.5em}

Hierzu werden im Programmablauf zun"achst die Besetzungen der Orbitale, die
Energiematrix und die Atomparameter eingelesen. 
Bei den Besetzungen wird darauf geachtet, da"s sehr kleine
Besetzungswahrscheinlichkeiten einen endlichen numerisch stabilen Wert
behalten und dennoch unbedeutend bleiben. 
Im Anschlu"s wird aus den Eingangsdaten die $Z$- und $q$-Matrix aufgestellt
und dann die Gesamtenergie bestimmt, wobei f"ur {\em Ni} zwei verschiedene
Minimierer, $i)$ ein Gradienten-Verfahren und $ii)$ ein Zufallsverfahren,
alternierend eingesetzt werden.
Hierbei ist die Zufallsvariation zuverl"assiger, aber deutlich langsamer als
die Gradientenmethode.
Es sei angemerkt, da"s in Verbesserungen des Minimierungsverfahrens viel
Entwicklungsarbeit gesteckt wurde \cite{umstaetter:2001}. 
Die eigentliche Minimierung findet "uber zwei ineinander geschachtelte
Schleifen statt.
Dabei minimiert die "au"sere Schleife die Nickel- und Sauerstoff-Besetzungen
in Serie.
\vspace{0.5em}
 
Die Sauerstoff-Minimierung erfolgt auf eine recht einfache Weise mittels
der Zufalls-Methode, da f"ur eine $p$-Schale nur wenige Variationsparameter
($<2^6$) vorliegen.
\vspace{0.5em}

Nach der Minimierung der Sauerstoffparameter schlie"st sich die innere
Schleife an, die mittels der Gradienten-Methode die Vielteilchenbesetzungen
$m_\Gamma$ der Nickel-Ionen weiter minimiert. 
Diese innere Schleife kann mehrfach durchlaufen werden. 
Nach dieser inneren Minimierungsschleife wird ein erneuter Durchlauf der
"au"seren Minimierungsschleife gestartet und das Prozedere wiederholt sich im
Prinzip beliebig oft.
Als Faustregel gilt, da"s jeder Variationsparameter im Mittel ca. 100-1000 mal
ausgew"urfelt wird.
\vspace{0.5em}

Abschlie"send werden mit den letzten Werten die $Z$- und $q$-Matrix sowie die Gesamtenergie berechnet und die Werte ausgegeben.
Die $q$-Werte werden dabei gesondert gespeichert, um im n"achsten Iterationszyklus wieder f"ur die Ber"ucksichtigung der reduzierten {\em Hopping}-matrixelemente im n"achsten Durchlauf des Programms ''EnBand'' zur Verf"ugung zu stehen.
\vspace{0.5em} 

%%% Flowchart of Program Mainv5w
\begin{chart}
\label{mainv5wchart}
\begin{center}
\setlength{\unitlength}{0.75cm}
\begin{picture}(20,30)
\thicklines
\put(0,0){\framebox(20,30)}
\put(7,28.5){\framebox(6,1.0){\bf Programm MainV5w}}
\put(1,26){\dashbox{0.3}(7.5,2)}
\put(1.4,26.2){\parbox[b]{5.5cm}{\small Einlesen der Majorit"ats- und\\ Minorit"atsorbitalbesetzungen,\\ der Band- und Atomparameter}}
\put(8.5,27){\vector(2,0){1.5}}
\put(10,26.5){\framebox(3,1){ECorr0}}
\put(13,27){\vector(2,0){1.5}}
\put(14.5,26.5){\framebox(4.5,1){ChkaMg1a / 1b}}
\put(17,26.5){\vector(0,-1){1.5}}
\put(14.5,24){\framebox(4.5,1){aMgReva / b}}
\put(14.5,24.5){\vector(-1,0){9}}
\put(1.5,24){\framebox(4,1){ECorr00t}}
\put(3.5,24){\vector(0,-1){2}}
%
\put(1.5,21){\framebox(4,1){ECorr00t}}
\put(3.5,21){\vector(0,-1){1}}
\put(1.5,19){\framebox(8,1){ECorrg8 - {\small\em 1. $Ni$-Minimierer }}}

\put(3.5,19){\vector(0,-1){1}}
\put(1.5,17){\framebox(8,1){ECorrg7b - {\small\em $O$-Minimierer }}}
\put(3.5,17){\vector(0,-1){2}}
\put(1.5,14){\framebox(4,1){ECorra1}}
\put(5.5,14.5){\vector(1,0){1.5}}
\put(7,14){\framebox(4,1){ECorrag}}
%
\put(11,14.5){\line(1,0){0.5}}
\put(11.5,16.2){\line(0,-1){1.2}}
\put(11.5,16.2){\vector(-1,0){8}}
\put(9,16.4){\small itm-Mal}
\put(5,15.3){\small\em 2. $Ni$-Minimierer}
%
\put(11.5,15){\vector(0,-1){2}}
\put(8.5,11.5){\dashbox{0.3}(4.5,1.5)}
\put(8.8,11.7){\parbox[b]{3.5cm}{\small Wenn niedrigere \\Energie gefunden}}
\put(8.5,12.2){\vector(-1,0){2}}
\put(13,12.2){\vector(1,0){2}}
\put(7.2,12.4){\small dann}
\put(13.2,12.4){\small sonst}
%
\put(2,11){\dashbox{0.3}(4.5,2)}
\put(2.3,11.2){\parbox[b]{3.5cm}{\small amka, amga, zsa,\\ emptya/b \\rausschreiben}}
%
\put(15,11){\dashbox{0.3}(3,2)}
\put(15.3,11.2){\parbox[b]{3.5cm}{\small alte Werte\\ wieder\\ einlesen}}
%
\put(6.5,11){\line(5,-2){4.25}}
\put(15,11){\line(-5,-2){4.25}}
\put(10.75,9.3){\vector(0,-1){2.3}}
%
\put(10.75,8.5){\line(1,0){8.25}}
\put(19,8.5){\line(0,1){14.5}}
\put(19,23){\vector(-1,0){15.5}}
\put(12,8.8){\small bis zu 100 mal}
%
\put(8.5,5){\dashbox{0.3}(4.5,2)}
\put(8.8,5.2){\parbox[b]{3.5cm}{\small letzte Werte nach\\ variov5.dat\\rausschreiben}}
\put(10.75,5){\vector(0,-1){1}}
\put(8.75,3){\framebox(4,1){ECorr00t}}
\put(10.75,3){\vector(0,-1){1}}
\put(8.75,1){\framebox(4,1){ECorr1t}}
\put(12.75,1.5){\vector(1,0){3.5}}
\put(17,1.5){\oval(1.5,1)}
\put(16.25,1){\makebox(1.5,1){Ende}}
%
\end{picture}
\caption{Flu"sdiagramm des Teil-Programms ''MainV5w''}
\end{center}
\end{chart}
%%% Flowchart of Program Mainv5w terminated.

Im Flu"sdiagramm \ref{mainv5wchart} des Programms ''MainV5w'' wird der Ablauf der Minimierung der inneren Variationsparameter dargestellt. 
Auch in diesem letzten Programm der Gutzwiller-Minimierung sind die wesentlichen Programmroutinen wie in den vorangegangen Unterkapiteln in K"astchen mit geschlossener Umrandung dargestellt und namentlich benannt. Ihre Bedeutung wird auch hier wieder im Folgenden erl"autert.

\begin{itemize}
\item[ECorr0:] In dieser Routine werden die in den Programmen ''MainPni'' und der Version f"ur die Sauerstoff-Ionen (''MainPo'') berechneten Daten eingelesen und auf Hartree-Fock-Niveau die Z-Matrix, die Leerbesetzung sowie die Besetzung der $d$- und $p$-Orbitale, die $q$-Matrix und die Gesamtenergie berechnet.
\item[ChkaMg1a/-1b:] Die Werte f"ur alle Eintr"age in den ''amka''- und ''amkb''-Vektoren, die die Variationsparameter $m_\Gamma$ enthalten, werden auf ihre Gr"o"se hin "uberpr"uft und gegebenenfalls auf $0.64\cdot 10^{-16}$ gesetzt, um numerische Probleme durch zu kleine Zahlenwerte zu unterbinden. Das ''a'' (''b'') am Ende in der Namensgebung der Vektoren kodiert die Zugeh"origkeit der Variablen zu den Nickel- (Sauerstoff-) Ionen. Daher sind dies im Programm-Quelltext entsprechend auch zwei Unterprogramme.
\item[aMgReva/-b:] Diese beiden Routinen sind f"ur das initiale Beschreiben
  der ''amga''- und ''amgb''-Vektoren zust"andig, welche die
  Multiplett-Besetzungen enthalten. Desweiteren werden die $d$- und
  $p$-Besetzungen aller Ionen aufsummiert. Die ''a''/''b''-Kodierung bezieht sich wie in den Unterprogrammen ''ChkaMg1a'' / ''-1b'' auf die unterschiedlichen Ionen.
\item[ECorr00t:] Dieses Unterprogramm dient der kompletten Aufstellung der $Z$- und $q$-Matrix, sowie der Bestimmung der Gesamtenergie.
\item[ECorrg8:] Diese Routine basiert auf einer Entwicklung von R. Umst"atter
  w"ahrend seiner Diplomarbeit \cite{umstaetter:2001}. Zielsetzung dieser
  Arbeit war es einen Algorithmus zu entwickeln, der sehr zuverl"assig das
  Minimum bei Nickel findet. 
F"ur \nio ist dieser Algorithmus modifiziert worden, um in kurzen
  Minimierungsschritten $Ni$-$d$ und $O$-$p$ Vielteilchenbesetzungen zu variieren.

Ein Bestandteil dieser Routine ist es, nicht in jedem Schritt die aufwendige Berechnung der $q$-Matrix durchzuf"uhren, sondern nur die "Anderungen zu ber"ucksichtigen.
Zuerst wird die $q$-Matrix und die Energie berechnet. Anschlie"send und alle 1000 Versuchsschritte sp"ater, werden die Variationsparameter der Gr"o"se nach sortiert, um nur mit den ''wesentlichen'' Parametern zu arbeiten.
Aus den ''Gro"sen'' wird eine bestimmte Menge ausgew"ahlt, wobei der erste als
Variations- und die anderen als Kompensationsparameter zur Einhaltung der
Summenregeln verwendet werden.
Mittels Matrixinversion l"a"st sich ein gewisser erlaubter Variationsbereich
ermitteln, indem noch eine Kompensation stattfinden kann. 
Per Zufallsentscheidung wird dann entweder zuerst in positiver (oder negativer)
Richtung innerhalb des Variationsbereichs variiert. 
Falls dieser Schritt erfolglos sein sollte, so wird eine Vorzeichenumkehr
nachgeschaltet
Die Routine achtet w"ahrend des Verlaufs ferner darauf, da"s die
Variationsparameter und die Werte der $q$-Matrix im erlaubten Bereich bleiben.
Alle 500 Variationen wird die $q$-Matrix dann erneut vollst"andig
berechnet (``Update''). 
Die Zahl der innerhalb eines Durchlaufs durchgef"uhrten Variationen
ist abh"angig von der Zahl der bereits durchlaufenen Iterationen, betr"agt
maximal ca. 12000. 
Bevor diese Variationsroutine endet, werden die $q$- und $Z$-Matrix sowie die Energie abschlie"send berechnet und gespeichert .
\item[ECorr7b:] In dieser Routine wird durch W"urfeln versucht mittels
  Optimierung in den Sauerstoff-Besetzungen die Gesamtenergie zu reduzieren. 
\item[ECorra1:] Mittels der Gradienten-Methode bei den Nickel-Besetzungen wird in
  diesem Programmteil das Minimum weiter angen"ahert. Die Gradienten werden
  hier explizit ausgerechnet.
\item[ECorrag:] "Uber zuf"allige Variation von Gradienten bei den Nickel-Ionen
  wird versucht eine niedrigere Energie zu finden. Mittels dieser zuf"alligen
  Variation soll versucht werden eine Art {\em simulated annealing} zu
  erzeugen, um zu verhindern, da"s der Minimierungsalgorithmus in einem
  lokalen Minimum erfolgreich minimiert ohne das globale Minimum zu finden. 
Hat dieses Verfahren Erfolg, so werden die neu gefunden ``amka''-Vektoren
  gespeichert. 
Bei Mi"serfolg werden die alten Werte erneut verwendet und es erfolgt ein
  neuer zuf"alliger Versuch einen niedrigeren Energiewert zu finden. 
Diese Prozedur wird ca. 2000-Mal wiederholt (kann von au"sen durch den Anwender vorgegeben werden).
\item[ECorr1t:] In dieser Programmroutine werden nach Abschlu"s des inneren Minimierungszyklus letztmalig die $Z$- und $q$-Matrix, die Leer-, sowie die $p$- und $d$-Besetzung und die Gesamtenergie berechnet. Abschlie"send werden die neu ermittelten $q$-Werte f"ur die Bandstruktur-Berechnung im n"achsten Iterationszyklus ausgegeben. 
\end{itemize}

%%% Local Variables: 
%%% mode: latex
%%% TeX-master: "Diss"
%%% End: 
