\chapter{Funktionen der Programme}

{\em NLSOP} besteht aus einer Anzahl von Programmen.
Diese sollen im Folgenden vorgestellt werden.
Der Quellcode ist auf der beigelegten Compact Disc enthalten.


  \section{Server}
  \begin{verbatim}
  nlsop_server.c
  \end{verbatim}
  Ein {\em Server}-Programm, bei dem sich {\em Client} und {\em Benutzeroberfl"ache} anmelden.
  Dieses verteilt die zu rechnenden Simulationen auf freie {\em Client}-Rechner oder h"alt Simulationsauftr"age in einer Warteschlange.
  Es nimmt fertige Rechenergebnisse entgegen und speichert sie lokal ab.
  Es h"alt Statusinformationen "uber die laufenden Rechnungen und die Warteschlange zur Abfrage bereit.
  Weiterhin nimmt es Simulationsauftr"age entgegen.
  Die Interaktion mit {\em Client} und {\em Benutzeroberfl"ache} erfolgt durch das Netzwerk "uber eine {\em TCP/IP}-Verbindung.

  \section{Client}
  \begin{verbatim}
  nlsop_client.c
  \end{verbatim}
  Das {\em Client}-Programm beinhaltet den eigentlichen Simulationscode.
  Es meldet sich beim {\em Server} an und nimmt Rechenaufgaben entgegen.
  Nach einer eintellbaren Anzahl von Durchl"aufen "ubergibt es Zwischenergebnisse beziehungsweise das Endergebnisse an den {\em Server}-Prozess.
  Nach Beendigung einer Simulation geht es zur"uck in den Ruhezustand und wartet auf neue Rechenauftr"age.

  \section{Benutzeroberfl"ache}
  \begin{verbatim}
  nlsop_gui.c
  \end{verbatim}
  Die {\em Benutzeroberfl"ache} dient zur "Ubergabe von Simulationsauftr"agen an den {\em Server}.
  Weiterhin dient es zur Statusabfrage von laufenden Rechnungen, der Warteschlange und der angemeldeten {\em Client}-Rechner.

  \section{Standalone Version}
  \begin{verbatim}
  nlsop.c
  \end{verbatim}
  Die {\em Standalone Version} ist ein eigenst"andiges Programm, das unter anderem auch den Simulationscode beinhaltet.
  Zus"atzlich stellt sie eine Benutzeroberfl"ache zur Verf"ugung, die die Untersuchung des fertig simulierten Ergebnisses erm"oglicht.
  Man kann Grafiken, die den TEM-Aufnahmen "ahnlich sind, sowie Druckspannungen und den Kohlenstoffgehalt visualisieren und als Bitmap abspeichern.
  Ausserdem kann man Kohlenstoffprofile erzeugen und die Tiefe der vorderen und hinteren Grenzfl"ache einer vorhandenen durchgehenden Schicht bestimmen.

  \section{APIs}

  Einige Funktionalit"at wurde in externen Programmierschnittstellen ausgelagert.
  Diese sind im Folgenden vorgestellt.
  \begin{itemize}
    \item \begin{verbatim} network.c, network.h \end{verbatim} \\
          Hilfsmittel zur Verbindung der Programmteile "uber das Netzwerk.
    \item \begin{verbatim} input.c, input.h \end{verbatim} \\
          Funktionen f"ur die Benutzereingabe.
    \item \begin{verbatim} list.c, list.h \end{verbatim} \\
          Hilfsmittel zur Benutzung von verlinkten Listen.
    \item \begin{verbatim} display.c, display.h \end{verbatim} \\
          Funktionen zur Visulisierung auf Konsolenebene.
    \item \begin{verbatim} event.c, event.h \end{verbatim} \\
          Hilfsmittel zum Eventmanagement.
    \item \begin{verbatim} bmp.c, bmp.h \end{verbatim} \\
          Funktionen f"ur die Erstellung und Bearbeitung von Bitmap Dateien.
    \item \begin{verbatim} fourier.c, fourier.h \end{verbatim}
          Funktionen f"ur die diskrete Fouriertransformation.
    \item \begin{verbatim} dfbapi.c, dfbapi.h \end{verbatim}
          Helfer f"ur die Visulaisierung der Endergebnisse.
    \item \begin{verbatim} random.c, randomi.h \end{verbatim}
          Funktionen zur Erzeugung spezieller Wahrscheinlichkeitsverteilungen.
  \end{itemize}

  \section{Andere Hilfsmittel}
  \label{section:hilfsittel}
  
  Im Folgenden sind weiter Programme vorgestellt, deren Funktionalit"at aus diversen Gr"unden nicht in die Hauptprogramme eingeflossen ist.

  \begin{itemize}
    \item \begin{verbatim} nlsop_make_cryst.c \end{verbatim} \\
          Estellt ein Duplikat eines gespeicherten Ergebnisses wobei alle Zust"ande der Volumen auf \dq Kristallin\dq{} gesetzt werden.
    \item \begin{verbatim} parse_trim_collision.c \end{verbatim} \\
          Werkzeug zur Auswertung der Datei in der {\em TRIM} die Kollisionen protokolliert.
    \item \begin{verbatim} dft.c, dft.h \end{verbatim} \\
          Erstellt die zweidimensionale Fouriertransformation eines Bitmaps.
    \item \begin{verbatim} linescan.c \end{verbatim} \\
          Erstellt den Linescan "uber ein fouriertransformiertes Bitmap.
    \item \begin{verbatim} random_parse.sh \end{verbatim} \\
          Simples Shell-Script zur Auswertung und "Uberpr"ufung der Zufallszahlen.
  \end{itemize}

