Es werden im wesentlichen 7 Funktionen zur Verf"ugung gestellt:

int FAMGConstruct(double *matrix, int *index, int *start, int n, int nl, double *tvA, double *tvB, void **extra);

int FAMGDeconstruct();

int FAMGRepair();

int FAMGPrepare(double *matrix, int *index, int *start, int n, int nl, void **extra);

int FAMGSolve(double *rhs, double *defect, double *unknown);

int FAMGDeconstructParameter();
int FAMGConstructParameter(class FAMGParameter *in_parameter);


FAMGConstruct erzeugt alles was f"ur das AMG notwendig ist. matrix ist das
a[] Array, index das ja[] Array (das l"angere der beiden int Arrays),
start das ia[] array (das k"urzere), n die Anzahl der Unbekannten, nl
die L"ange von matrix bzw. index. tvA, tvB ist f"ur Sie nicht wichtig.
FAMGConstruct "zerst"ort" die Eingabedaten.

Die einzige Bedingung an die Matrix ist, da"s die Diagonaleintr"age
gespeichert sind. Insbesondere ist Struktursymmetrie doch nicht notwendig.

FAMGDeconstruct stellt die Eingabedaten (matrix, index, ...) wieder her und
gibt den Speicher, der f"ur das AMG ben"otigt wurde wieder frei.

FAMGRepair stellt ebenfalls die Eingabedaten (matrix, index, ...) wieder her,
bereitet aber eine erneute Benutzung des gleichen AMG f"ur eine andere Matrix
vor. D.h. der Speicher f"ur die AMG Komponenten wird nicht freigegeben.

FAMGPrepare bereitet die Benutzung des alten AMG f"ur eine neue Matrix vor.
Die Eingabematrix wird ebenfalls wieder zerst"ort und kann durch
FAMGRepair oder FAMGDeconstruct wieder hergestellt werden.

FAMGSolve l"ost das Gleichungssystem. Die Argumente k"onnen auch gleich sein.
Z.B. liefer FAMGSolve(rhs,rhs,rhs) die L"osung zur rechten Seite rhs wieder
im Vektor rhs zur"uck.

FAMGConstructParameter und FAMGDeconstructParameter sind zur Eingabe bzw.
Speicherfreigabe der Parameter notwendig. Das Argument von FAMGConstructParameter
mu"s wahrscheinlich noch auf Ihren Code angepasst werden. Es gibt aber
auch eine Fileschnittstelle f"ur die ca. 20 wichtigen oder unwichtigen
Parameter.

Alle Funktionen geben 1, wenn etwas schiefgegangen ist. (z.B. zu wenig Speicher
oder Divergenz). Wenn sie 0 zur"uckgeben, haben sie keinen Fehler gefunden.


Ein Beispielcode k"onnte so aussehen:

   if(FAMGConstructParameter(&parameter)) return 1;

   if(FAMGConstruct(matrix,index,start,n,nl,NULL, NULL,NULL)) return 1;

   status = FAMGSolve(rhs,defect,unknown);
   status = FAMGSolve(rhs1,defect,unknown1);

   FAMGRepair();

   if(FAMGPrepare(matrix2,index2,start2,n,nl2,NULL)) return 1;

   status = FAMGSolve(rhs2,defect,unknown2);

   FAMGDeconstruct();

   FAMGDeconstructParameter();

Hier wird f"ur matrix, index, start das AMG erzeugt und die L"osung
f"ur zwei verschieden rechte Seiten berechnet. Danach wird matrix, index, start
wiederhergestellt und eine neue Matrix (matrix2,index2,...) in das AMG gesteckt.
F"ur rhs2 wird die L"osung berechnet und danach das AMG weggeworfen.
Die einzige Bedingung an Matrix2 ist, da"s sie das gleiche n besitzt. nl kann
sich "andern.

Fuer UG Version:
================

Konfigurieren:
in ug/gm/gm.h
	USE_FAMG aktivieren
	__INTERPOLATION_MATRIX__ aktivieren
in ug/low/heaps.h: DYNAMIC_MEMORY_ALLOCMODEL deaktivieren (bringt uns auch keinen Gewinn)
in ug/np/famglib:
	famg_algebra.h: ONLY_ONE_ALGEBRA_DS aktivieren

uebersetzen: in ug/np/famglib: ugmake (braucht C++)
ganzes UG neu uebersetzen

fuer parallele Version (nur fuer UG)
====================================

2. Matrix im Format
Interpolationsmatrix braucht 2 Komponenten
ddd/dddi.h: MAX_TRIES <MAXINT>
dddif/handler.c: Z. 950 (case MIDNODE) break
-DDDDOBJMGR aktivieren

Beispielanwendungen:
   fe/ff/aniso.scr
   cd/appl/scripts/famgcd.scr
