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

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

\noindent {\bf Class Declaration}  \\
\indent class GenericSectionND : public SectionForceDeformation \\

\noindent {\bf Class Hierarchy} \\
\indent TaggedObject \\
\indent MovableObject \\
\indent\indent Material \\
\indent\indent\indent SectionForceDeformation \\
\indent\indent\indent\indent {\bf GenericSectionND} \\

\noindent {\bf Description}  \\
\indent GenericSectionND provides a wrapper around a NDMaterial
so that any NDMaterial may be used to model section response. 
The design of this class follows the Object Adapter pattern in 
{\em Design Patterns} by Gamma et al.\\

\noindent {\bf Class Interface} \\
\indent // Constructor \\
\indent {\em GenericSectionND (int tag, NDMaterial \&m,
int code);} \\
\indent // Destructor \\
\indent {\em $\tilde{ }$GenericSectionND ();}\\ \\
\indent // Public Methods \\
\indent {\em int setTrialSectionDeformation (const Vector \&def); } \\
\indent {\em const Vector \&getSectionDeformation (void); } \\
\indent {\em const Vector \&getStressResultant (void); } \\
\indent {\em const Vector \&getPrevStressResultant (void); } \\
\indent {\em const Matrix \&getSectionTangent (void); } \\
\indent {\em const Matrix \&getPrevSectionTangent (void); } \\
\indent {\em int commitState (void); } \\
\indent {\em int revertToLastCommit (void); } \\
\indent {\em int revertToStart (void); } \\
\indent {\em SectionForceDeformation *getCopy (void); } \\
\indent {\em const ID \&getType (void); } \\
\indent {\em int getOrder (void); } \\ \\
\indent // Public Methods for Output\\
\indent {\em int sendSelf (int commitTag, Channel
\&theChannel); }\\
\indent {\em int recvSelf (int commitTag, Channel \&theChannel, 
FEM\_ObjectBroker \&theBroker); }\\
\indent {\em void Print (OPS_Stream \&s, int flag = 0);} \\

\noindent {\bf Constructor}  \\
\indent {\em GenericSectionND (int tag, NDMaterial \&m,
const ID \&code);}  \\
Constructs a GenericSectionND whose unique integer tag among
SectionForceDeformation objects in the domain is given by {\em tag}. Obtains
a copy of the NDMaterial {\em m} via a call to {\em getCopy()}.
The section code is set to be {\em code}. \\

\noindent {\bf Destructor} \\
\indent {\em $\tilde{ }$GenericSectionND ();}\\ 
Invokes the destructor of the NDMaterial. \\

\noindent {\bf Public Methods} \\
\indent {\em int setTrialSectionDeformation (const Vector \&def); }  \\
Sets the trial section deformation vector, $\esec$, to be {\em def}, then invokes
{\em setTrialStrain()} on the NDMaterial. \\

\indent {\em const Vector \&getSectionDeformation (void); } \\
Returns the trial section deformation vector, $\esec$. \\

\indent {\em const Vector \&getStressResultant (void); } \\
Sets the section resisting force, $\ssec$, to be the result of invoking 
{\em getStress()} on the NDMaterial, then returns $\ssec$. \\

\indent {\em const Vector \&getPrevStressResultant (void); } \\
Returns the section resisting force, $\ssec$, from the previous trial state. \\

\indent {\em const Matrix \&getSectionTangent (void); } \\
Sets the section tangent stiffness matrix, $\ksec$, to be the result of
invoking {\em getTangent()} on the NDMaterial, then returns $\ksec$. \\

\indent {\em const Matrix \&getPrevSectionTangent (void); } \\
Returns the section tangent stiffness matrix, $\ksec$ from the previous trial state. \\

\indent {\em int commitState (void); } \\
Invokes {\em commitState()} on the NDMaterial and returns the
result of that invocation. \\

\indent {\em int revertToLastCommit (void); } \\
Invokes {\em revertToLastCommit()} on the NDMaterial and returns the
result of that invocation. \\

\indent {\em int revertToStart (void); } \\
Invokes {\em revertToStart()} on the NDMaterial and returns the
result of that invocation. \\

\indent {\em SectionForceDeformation *getCopy (void); } \\
Returns a pointer to a new instance of GenericSectionND, using the
same tag, NDMaterial reference, and code. It is up to the caller to
ensure that the destructor is invoked. \\

\indent {\em const ID \&getType (void); } \\
Returns the section ID code that indicates the type of response quantities
returned by this instance of GenericSectionND. \\

\indent {\em int getOrder (void); } \\
Returns the result of invoking {\em getOrder()} on the NDMaterial. \\

\indent {\em int sendSelf (int commitTag, Channel \&theChannel); }\\
FILL IN. \\

\indent {\em int recvSelf (int commitTag, Channel \&theChannel, 
		 FEM\_ObjectBroker \&theBroker); }\\
FILL IN. \\

\indent {\em void Print (OPS_Stream \&s, int flag = 0);} \\
Prints to the stream {\em s} the object's {\em tag}, then invokes
{\em Print()} on the NDMaterial using the same values of {\em s}
and {\em flag}. \\
