%File: ~/OOP/material/nD/NDMaterial.tex
%What: "@(#) NDMaterial.tex, revA"

INTERFACE MAY CHANGE IF MAKE MATERIAL MORE GENERAL. \\

\noindent {\bf Files}   \\
\indent \#include $<\tilde{ }$/material/nD/NDMaterial.h$>$  \\

\noindent {\bf Class Declaration}  \\
\indent class NDMaterial : public Material \\

\noindent {\bf Class Hierarchy} \\
\indent TaggedObject \\
\indent MovableObject \\
\indent\indent Material \\
\indent\indent\indent {\bf NDMaterial} \\

\noindent {\bf Description}  \\
\indent NDMaterial is an abstract class. The
NDMaterial class provides the interface that all
NDMaterial writers must provide when introducing new
NDMaterial subclasses. An NDMaterial object 
is responsible for keeping track of stress, strain and the
constitution for a particular point in the domain. \\ 

\noindent {\bf Class Interface} \\
\indent // Constructor \\
\indent {\em NDMaterial (int tag, int classTag);}  \\ \\
\indent // Destructor \\
\indent {\em virtual $\tilde{ }$NDMaterial ();}\\ \\
\indent // Public Methods \\
\indent {\em virtual int setTrialStrain (const Vector \&strain) = 0; } \\
\indent {\em virtual const Vector \&getStress (void) = 0; } \\
\indent {\em virtual const Matrix \&getTangent (void) = 0; } \\
\indent {\em virtual int commitState (void) = 0; } \\
\indent {\em virtual int revertToLastCommit (void) = 0; } \\
\indent {\em virtual int revertToStart (void) = 0; } \\
\indent {\em virtual NDMaterial *getCopy (void) = 0; } \\


\noindent {\bf Constructor}  \\
\indent {\em NDMaterial (int tag, int classTag);}  \\
To construct a NDMaterial whose unique integer among
NDMaterials in the domain is given by {\em tag}, and whose class
identifier is given by {\em classTag}. These integers are passed to
the Material class constructor. \\

\noindent {\bf Destructor} \\
\indent {\em virtual $\tilde{ }$NDMaterial ();} \\
Does nothing. \\ 

\noindent {\bf Public Methods} \\
\indent {\em virtual int setTrialStrain (const Vector \&strain) = 0; }  \\
Sets the value of the trial strain vector, that value used by {\em
getStress()} and {\em getTangent()}, to be {\em strain}. To return $0$
if successful and a negative number if not. \\

\indent {\em virtual const Vector \&getStress (void) = 0; } \\
To return the material stress vector at the current trial strain. \\

\indent {\em virtual const Matrix \&getTangent (void) = 0; } \\
To return the material tangent stiffness matrix at the current trial
strain. \\

\indent {\em virtual int commitState (void) = 0; } \\
To accept the current value of the trial strain vector as being on the
solution path. To return $0$ if successful, a negative number if not. \\

\indent {\em virtual int revertToLastCommit (void) = 0; } \\
To cause the material to revert to its last committed state. To
return $0$ if successful, a negative number if not. \\

\indent {\em virtual int revertToStart (void) = 0; } \\
Invoked to cause the material to revert to its original state in its
undeformed configuration. To return $0$ if successful, a negative
number if not. \\

\indent {\em virtual NDMaterial *getCopy (void) = 0; } \\
Returns a pointer to a new NDMaterial,
which is an exact copy of this instance. It is up to the caller to
ensure that the destructor is invoked. \\