Subversion Repositories OpenSees

Rev

Rev 101 | Rev 1181 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

/* ****************************************************************** **
**    OpenSees - Open System for Earthquake Engineering Simulation    **
**          Pacific Earthquake Engineering Research Center            **
**                                                                    **
**                                                                    **
** (C) Copyright 1999, The Regents of the University of California    **
** All Rights Reserved.                                               **
**                                                                    **
** Commercial use of this program without express permission of the   **
** University of California, Berkeley, is strictly prohibited.  See   **
** file 'COPYRIGHT'  in main directory for information on usage and   **
** redistribution,  and for a DISCLAIMER OF ALL WARRANTIES.           **
**                                                                    **
** Developed by:                                                      **
**   Frank McKenna (fmckenna@ce.berkeley.edu)                         **
**   Gregory L. Fenves (fenves@ce.berkeley.edu)                       **
**   Filip C. Filippou (filippou@ce.berkeley.edu)                     **
**                                                                    **
** ****************************************************************** */

                                                                       
// $Revision: 1.3 $
// $Date: 2001-11-26 22:53:58 $
// $Source: /usr/local/cvs/OpenSees/SRC/element/zeroLength/ZeroLengthSection.h,v $
                                                                       
// Written: MHS
// Created: Sept 2000
//
// Description: This file contains the class definition for ZeroLengthSection.
// A ZeroLengthSection element is defined by two nodes with the same coordinate.
// A SectionForceDeformation object is associated with the nodes to
// provide the basic force-deformation relationship for the element.

#ifndef ZeroLengthSection_h
#define ZeroLengthSection_h

#include <Element.h>
#include <Matrix.h>

// Tolerance for zero length of element
#define LENTOL 1.0e-6

class Node;
class Channel;
class SectionForceDeformation;
class Response;

class ZeroLengthSection : public Element
{
  public:
   
    ZeroLengthSection(int tag,                       
               int dimension,
               int Nd1, int Nd2,
               const Vector& x,
               const Vector& yprime,
                   SectionForceDeformation& theSection);

    ZeroLengthSection();    
    ~ZeroLengthSection();

    // public methods to obtain inforrmation about dof & connectivity    
    int getNumExternalNodes(void) const;
    const ID &getExternalNodes(void);
    int getNumDOF(void);       
    void setDomain(Domain *theDomain);

    // public methods to set the state of the element    
    int commitState(void);
    int revertToLastCommit(void);        
    int revertToStart(void);        

    // public methods to obtain stiffness, mass, damping and residual information    
    const Matrix &getTangentStiff(void);
    const Matrix &getSecantStiff(void);    
    const Matrix &getDamp(void);    
    const Matrix &getMass(void);    

    void zeroLoad(void);       
    int addLoad(ElementalLoad *theLoad, double loadFactor);
    int addInertiaLoadToUnbalance(const Vector &accel);    

    const Vector &getResistingForce(void);
    const Vector &getResistingForceIncInertia(void);            

    // public methods for element output
    int sendSelf(int commitTag, Channel &theChannel);
    int recvSelf(int commitTag, Channel &theChannel, FEM_ObjectBroker &theBroker);
    int displaySelf(Renderer &theViewer, int displayMode, float fact);    
    void Print(ostream &s, int flag =0);    

    Response *setResponse(char **argv, int argc, Information &eleInformation);
    int getResponse(int responseID, Information &eleInformation);
   
  protected:
   
  private:
    // private methods
    void setUp (int Nd1, int Nd2, const Vector& x, const Vector& y);
    void setTransformation(void);
        void computeSectionDefs(void);

    // private attributes - a copy for each object of the class
    ID  connectedExternalNodes;         // contains the tags of the end nodes
    int dimension;                      // = 2 or 3 dimensions
    int numDOF;                         // number of dof for ZeroLengthSection
    Matrix transformation;              // transformation matrix for orientation
       
        Matrix *A;      // Transformation matrix ... e = A*(u2-u1)
        Vector *v;      // Section deformation vector, the element basic deformations

        Matrix *K;      // Pointer to element stiffness matrix
        Vector *P;      // Pointer to element force vector

    Node *end1Ptr;                      // pointer to the end1 node object
    Node *end2Ptr;                      // pointer to the end2 node object     

        SectionForceDeformation *theSection;    // Pointer to section object
        int order;              // Order of the section model

        // Class wide matrices for return
        static Matrix K6;
        static Matrix K12;

        // Class wide vectors for return
        static Vector P6;
        static Vector P12;
};

#endif