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

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

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

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

\noindent {\bf Description}  \\
\indent GenericSection1D provides a wrapper around a UniaxialMaterial
so that any UniaxialMaterial 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 GenericSection1D (int tag, UniaxialMaterial \&m,
int code);} \\
\indent // Destructor \\
\indent {\em $\tilde{ }$GenericSection1D ();}\\ \\
\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 const Matrix \&getSectionFlexibility (void); } \\
\indent {\em const Matrix \&getPrevSectionFlexibility (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 GenericSection1D (int tag, UniaxialMaterial \&m,
int code);}  \\
Constructs a GenericSection1D whose unique integer tag among
SectionForceDeformation objects in the domain is given by {\em tag}. Obtains
a copy of the UniaxialMaterial {\em m} via a call to {\em getCopy()}.
The section code is set to be {\em code}. \\

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

\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 UniaxialMaterial. \\

\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 UniaxialMaterial, 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 UniaxialMaterial, then returns $\ksec$. \\

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

\indent {\em const Matrix \&getSectionFlexibility (void); } \\
Sets the section flexibility matrix, $\fsec$, to be the inverse of the result
of invoking {\em getTangent()} on the UniaxialMaterial, then returns $\fsec$.
This function overrides the base class implementation. \\

\indent {\em const Matrix \&getPrevSectionFlexibility (void); } \\
Returns the section flexibility matrix, $\fsec$, from the previous trial state. \\
This function overrides the base class implementation. \\

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

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

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

\indent {\em SectionForceDeformation *getCopy (void); } \\
Returns a pointer to a new instance of GenericSection1D, using the
same tag, UniaxialMaterial 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 quantity 
returned by this instance of GenericSection1D. \\

\indent {\em int getOrder (void); } \\
Returns 1. \\

\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 UniaxialMaterial using the same values of {\em s}
and {\em flag}. \\
