%File: ~/OOP/system_of_eqn/linearSOE/FullGEN/FullGenLinLapackSolver.tex
%What: "@(#) FullGenLinLapackSolver.tex, revA"

\noindent {\bf Files}   \\
\indent \#include $<\tilde{ }$/system\_of\_eqn/linearSOE/fullGEN/FullGenLinLapackSolver.h$>$  \\

\noindent {\bf Class Declaration}  \\
\indent class FullGenLinLapackSolver: public FullGenLinSolver  \\

\noindent {\bf Class Hierarchy} \\
\indent  MovableObject \\
\indent\indent  Solver \\
\indent\indent\indent LinearSOESolver \\
\indent\indent\indent\indent  FullGenLinSolver \\
\indent\indent\indent\indent\indent {\bf FullGenLinLapackSolver} \\

\noindent {\bf Description}  \\
\indent A FullGenLinLapackSolver object can be constructed to solve
a FullGenLinSOE object. It obtains the solution by making calls on the
the LAPACK library. The class is defined to be a friend of the 
FullGenLinSOE class (see $<$FullGenLinSOE.h$>$). \\

\noindent {\bf Interface}  \\
\indent\indent // Constructor \\
\indent\indent {\em FullGenLinLapackSolver();}  \\ \\
\indent\indent // Destructor \\
\indent\indent {\em $\tilde{ }$FullGenLinLapackSolver();}\\  \\
\indent\indent // Public Methods \\
\indent\indent {\em int solve(void);} \\
\indent\indent {\em int setSize(void);} \\
\indent\indent {\em  int sendSelf(int commitTag, Channel \&theChannel);} \\ 
\indent\indent {\em  int recvSelf(int commitTag, Channel \&theChannel, FEM\_ObjectBroker
\&theBroker);} \\ 

\noindent {\bf Constructor}  \\
\indent {\em FullGenLinLapackSolver();}  \\
A unique class tag (defined in $<$classTags.h$>$) is passed to the
FullGenLinSolver constructor. Sets the size of {\em iPiv} to $0$, {\em
iPiv} being an integer array needed by the LAPACK routines. \\

\noindent {\bf Destructor} \\
\indent {\em  $\tilde{ }$FullGenLinLapackSolver();}\\ 
Invokes delete on {\em iPiv} to free the memory it was allocated. \\


\noindent {\bf Public Methods }  \\
\indent {\em int solve(void);} \\
First copies $B$ into $X$ and then solves the FullGenLinSOE system 
it is associated with (pointer kept by parent class) by calling the LAPACK 
routines {\em dgesv()}, if the system is marked as not having been factored,
or {\em dgetrs()}, if system is marked as having been factored. If the
solution is successfully obtained, i.e. the LAPACK routines return $0$
in the INFO argument, it marks the system has having been
factored and returns $0$, otherwise it prints a warning message and
returns INFO. The solve process changes $A$ and $X$. \\   

\indent {\em int setSize(void);} \\
Is used to construct a 1d integer array, {\em iPiv} that is needed by
the LAPACK solvers. It checks to see if current size of {\em iPiv} is
large enough, if not it deletes the cold and creates a larger
array. Returns $0$ if sucessfull, prints a warning message and returns
a $-1$ if not enough memory is available for this new array. \\


\indent {\em  int sendSelf(int commitTag, Channel \&theChannel);} \\ 
Does nothing but return $0$. \\

\indent {\em  int recvSelf(int commitTag, Channel \&theChannel, FEM\_ObjectBroker
\&theBroker);} \\ 
Does nothing but return $0$. \\




