Subversion Repositories OpenSees

Rev

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

//========================================================================
//# COPYRIGHT (C): Woody's license (by BJ):
//                 ``This    source  code is Copyrighted in
//                 U.S.,  for  an  indefinite  period,  and anybody
//                 caught  using it without our permission, will be
//                 mighty good friends of ourn, cause we don't give
//                 a  darn.  Hack it. Compile it. Debug it. Run it.
//                 Yodel  it.  Enjoy it. We wrote it, that's all we
//                 wanted to do.''
//
//# PROJECT:           Object Oriented Finite Element Program
//# PURPOSE:           Pressure dependent elastic isotropic material implementation:
//# CLASS:             PressureDependentElastic3D
//#
//# VERSION:           0.61803398874989 (golden section)
//# LANGUAGE:          C++
//# TARGET OS:         all...
//# DESIGN:            Zhaohui Yang, Boris Jeremic (jeremic@ucdavis.edu)
//# PROGRAMMER(S):     Zhaohui Yang, Boris Jeremic
//#
//#
//# DATE:              07July2001
//# UPDATE HISTORY:    22Nov2002 small fixes, formating...
//#
//#
//===============================================================================


#ifndef PressureDependentElastic3D_h
#define PressureDependentElastic3D_h

#include <ElasticIsotropicMaterial.h>

#include <Channel.h>


class PressureDependentElastic3D : public ElasticIsotropicMaterial
{
  public:
    PressureDependentElastic3D (int tag,
                                double E,
                                double nu,
                                double rhop,
                                double expp = 0.6,
                                double pr = 100.0,
                                double pop = 0.5);
    PressureDependentElastic3D ();
    ~PressureDependentElastic3D ();

    const char *getClassType(void) const {return "PressureDependentElastic";};

    int setTrialStrain (const Vector &v);
    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);

    const Vector &getStress (void);
    const Vector &getStrain (void);

    int setTrialStrain (const Tensor &v);
    int setTrialStrain (const Tensor &v, const Tensor &r);
    int setTrialStrainIncr (const Tensor &v);
    int setTrialStrainIncr (const Tensor &v, const Tensor &r);
    const Tensor &getTangentTensor (void);
    const stresstensor& getStressTensor (void);
    const straintensor& getStrainTensor (void);
   
    // For elastoplastic material model
    int setStressTensor(const Tensor& stressIn);

    int commitState (void);
    int revertToLastCommit (void);
    int revertToStart (void);

    NDMaterial *getCopy (void);
    NDMaterial *getCopy(const char *type);
    const char *getType (void) const;
    int getOrder (void) const;

    int sendSelf(int commitTag, Channel &theChannel);
    int recvSelf(int commitTag, Channel &theChannel, FEM_ObjectBroker &theBroker);

    void Print(OPS_Stream &s, int flag =0);

  //Private functions
  private:
    const Tensor& ComputeElasticStiffness(void);

  protected:

  private:
    double exp0;                 // exponent usually 0.6
    double p_ref;                // Reference pressure, usually atmosphere pressure, i.e. 100kPa
    double p_cutoff;             // Cutoff pressure of this material point

    static stresstensor Stress;  // Stress tensor
    static Tensor Dt;            // Elastic constants tensor
    straintensor Strain;         // Strain tensor
   
    stresstensor CStrain;
    stresstensor CStress;

    static Vector sigma;
    static Matrix D;
    Vector epsilon;

    double p_n1; // trial pressure
    double p_n; // committed pressure
};

#endif