Subversion Repositories OpenSees

Rev

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

#ifndef RAFourSteelPCPlaneStress_h
#define RAFourSteelPCPlaneStress_h

// File: RAFourSteelPCPlaneStress.h
//
// Written: ALaskar
// Created: 2007.09
//
// Description: This file contains the class definition for
// RAFourSteelPCPlaneStress material.
// RC material will contain steel in four directions
// For Detailed explanation of the model, please refer to the book
// entitled "Unified Theory of Concrete Structures,"
// by Thomas T.C. Hsu and Y.L. Mo, John Wiley & Sons, April 2010.


#include <NDMaterial.h>
#include <UniaxialMaterial.h>

#include <Matrix.h>
#include <Vector.h>
#include <ID.h>
#include <Tensor.h>

class RAFourSteelPCPlaneStress : public NDMaterial
{
  public:
  RAFourSteelPCPlaneStress ( int      tag,
                             double   RHO,
                             UniaxialMaterial *t1,
                             UniaxialMaterial *t2,
                             UniaxialMaterial *s1,
                             UniaxialMaterial *s2,
                             UniaxialMaterial *c1,
                             UniaxialMaterial *c2,
                             double   ANGLE1,
                             double   ANGLE2,
                             double   ANGLE3,
                             double   ANGLE4,
                             double   ROU1,
                             double   ROU2,
                             double   ROU3,
                             double   ROU4,
                             double     PSTRAIN1,
                             double     PSTRAIN2,
                             double   FPC,
                             double   FY1,
                             double     FY2,
                             double   E,
                             double   EPSC0);                                    
  RAFourSteelPCPlaneStress();
  ~RAFourSteelPCPlaneStress();                           
 
  double getRho(void);
 
  int setTrialStrain(const Vector &v); // the one is used
  int setTrialStrain(const Vector &v, const Vector &r);
  int setTrialStrainIncr(const Vector &v);
  int setTrialStrainIncr(const Vector &v, const Vector &r);
  const Matrix &getTangent(void);
  const Matrix &getInitialTangent(void) {return this->getTangent();};
 
  const Vector &getStress(void);
  const Vector &getStrain(void);
 
  const Vector &getCommittedStress(void);
  const Vector &getCommittedStrain(void);    
 
  int commitState(void);
  int revertToLastCommit(void);
  int revertToStart(void);
 
  NDMaterial *getCopy(void);
  NDMaterial *getCopy(const char *type);
 
  void Print(OPS_Stream &s, int flag = 0);
  int sendSelf(int commitTag, Channel &theChannel);
  int recvSelf(int commitTag, Channel &theChannel, FEM_ObjectBroker &theBroker);
 
  const char *getType(void) const { return "PlaneStress"; };
  int getOrder(void) const { return 3;};
 
 protected:
 
 private:
 
  double   rho;
  UniaxialMaterial **theMaterial; // pointer of the materials
  Response **theResponses;

  double   angle1;    // angel of the first steel layer to x coordinate
  double   angle2;    // angel of the second steel layer to x coordinate
  double   angle3;    // angel of the third steel layer to x coordinate
  double   angle4;    // angel of the forth steel layer to x coordinate
 
  double   rou1;      // steel ratio of the first steel layer
  double   rou2;      // steel ratio of the second steel layer
  double   rou3;      // steel ratio of the third steel layer
  double   rou4;      // steel ratio of the forth steel layer
 
  double        pstrain1;       // prestressing strain in first tendon layer
  double        pstrain2;       // prestressing strain in second tendon layer
 
  double   fpc;       // compressive strength of the concrete
  double   fy1;       // yield stress of the bare tendons
  double         fy2;           // yield stress of the bare steel bars
  double   E0;        // young's modulus of the steel
  double   epsc0;     // compressive strain of the concrete
 
  double   Tstress[3];  // Trial stresses
  double   lastStress[3];  // Last committed stresses, added for x, k
 
  int      steelStatus;  // check if steel yield, 0 not yield, 1 yield
  int      dirStatus;    // check if principle direction has exceed 90 degree, 1 yes, 0 no
 
  double   citaStrain;      // principle strain direction
  double   citaStress;     // principle stress direction
  double   miu12;        // Hsu/Zhu ratio
  double   miu21;        // Hsu/Zhu ratio
  double   G12;
 
 
  // for damgage factor D=1-0.4*epslonC'/epslon0; epslon0=0.002
 
  // Trial values
  int TOneReverseStatus;         // Trial reverse status for concrete One, 1 reverse, 0 no
  double TOneNowMaxComStrain;
  double TOneLastMaxComStrain;
 
  int TTwoReverseStatus;         // Trial reverse status for concrete Two, 1 reverse, 0 no
  double TTwoNowMaxComStrain;
  double TTwoLastMaxComStrain;
 
  // Converged values
  int COneReverseStatus;         // Converged reverse status for concrete One, 1 reverse, 0 no
  double COneNowMaxComStrain;
  double COneLastMaxComStrain;
 
  int CTwoReverseStatus;         // Converged reverse status for concrete Two, 1 reverse, 0 no
  double CTwoNowMaxComStrain;
  double CTwoLastMaxComStrain;
 
  double DDOne; // damage factor for concrete One
  double DDTwo; // damage factor for concrete Two
 
  double tt1;
  double tt2;
  double xxx;
  double kkk;
 
  double beta1;
  double beta2;
 
  Vector strain_vec;
  Vector stress_vec;   
  Matrix tangent_matrix;
 
  int determineTrialStress(void);
 
};

#endif