Select Git revision
ipHardening.h
ipHardening.h 6.25 KiB
//
// C++ Interface: ipHardening
//
// Description: Base class for ipHardening
//
//
// Author: <L. Noels>, (C) 2013
//
// Copyright: See COPYING file that comes with this distribution
//
//
// class with the variables of IP (stress, deformation and localBasis)
#ifndef IPHARDENING_H_
#define IPHARDENING_H_
#include <stdlib.h>
#include <stdio.h>
#include "GmshConfig.h"
#include "ipvariable.h"
class IPHardening : public IPVariable{
public:
IPHardening();
IPHardening(const IPHardening &source);
virtual IPHardening &operator=(const IPVariable &source);
virtual ~IPHardening(){}
virtual void restart(){IPVariable::restart();}
// saturated point-> stop hardening as R = const dR = 0, ... for all values of p
//
virtual void saturate(const double p, const IPHardening* ipv) = 0;
virtual IPVariable * clone() const=0;
virtual bool isSaturated() const {return false;};
};
class IPJ2IsotropicHardening : public IPHardening{
protected:
double R;
double dR;
double ddR;
double integR;
bool _isSaturated;
double _Rs; // value of R at saturation
public:
IPJ2IsotropicHardening();
IPJ2IsotropicHardening(const IPJ2IsotropicHardening &source);
virtual IPJ2IsotropicHardening &operator=(const IPVariable &source);
virtual ~IPJ2IsotropicHardening(){}
virtual void restart();
virtual IPVariable * clone() const=0;
virtual double getR() const {return R;}
virtual double getDR() const {return dR;}
virtual double getDDR() const {return ddR;}
virtual double getIntegR() const {return integR;}
virtual void saturate(const double p, const IPHardening* ipv) {
_isSaturated = true;
const IPJ2IsotropicHardening* isoH = dynamic_cast<const IPJ2IsotropicHardening*>(ipv);
if (isoH == NULL){
Msg::Error("IPJ2IsotropicHardening should be used IPJ2IsotropicHardening::saturate");
}
else{
_Rs = isoH->getR();
}
};
virtual bool isSaturated() const {return _isSaturated;};
virtual void set(const double &_r, const double &_dr, const double &_ddr, const double &_integR)
{
if (isSaturated()){
R = _Rs;
dR = 0;
ddR = 0.;
integR = _integR; // need to correct
}
else{
R=_r;
dR=_dr;
ddR=_ddr;
integR=_integR;
}
}
};
class IPPerfectlyPlasticJ2IsotropicHardening : public IPJ2IsotropicHardening
{
protected:
public:
IPPerfectlyPlasticJ2IsotropicHardening();
IPPerfectlyPlasticJ2IsotropicHardening(const IPPerfectlyPlasticJ2IsotropicHardening &source);
virtual IPPerfectlyPlasticJ2IsotropicHardening &operator=(const IPVariable &source);
virtual ~IPPerfectlyPlasticJ2IsotropicHardening(){}
virtual void restart();
virtual IPVariable * clone() const;
};
class IPPowerLawJ2IsotropicHardening : public IPJ2IsotropicHardening
{
protected:
public:
IPPowerLawJ2IsotropicHardening();
IPPowerLawJ2IsotropicHardening(const IPPowerLawJ2IsotropicHardening &source);
virtual IPPowerLawJ2IsotropicHardening &operator=(const IPVariable &source);
virtual ~IPPowerLawJ2IsotropicHardening(){}
virtual void restart();
virtual IPVariable *clone() const;
};
class IPExponentialJ2IsotropicHardening : public IPJ2IsotropicHardening
{
protected:
public:
IPExponentialJ2IsotropicHardening();
IPExponentialJ2IsotropicHardening(const IPExponentialJ2IsotropicHardening &source);
virtual IPExponentialJ2IsotropicHardening &operator=(const IPVariable &source);
virtual ~IPExponentialJ2IsotropicHardening(){}
virtual void restart();
virtual IPVariable * clone() const;
};
class IPSwiftJ2IsotropicHardening : public IPJ2IsotropicHardening
{
protected:
public:
IPSwiftJ2IsotropicHardening();
IPSwiftJ2IsotropicHardening(const IPSwiftJ2IsotropicHardening &source);
virtual IPSwiftJ2IsotropicHardening &operator=(const IPVariable &source);
virtual ~IPSwiftJ2IsotropicHardening(){}
virtual void restart();
virtual IPVariable * clone() const;
};
class IPLinearExponentialJ2IsotropicHardening : public IPJ2IsotropicHardening
{
protected:
public:
IPLinearExponentialJ2IsotropicHardening();
IPLinearExponentialJ2IsotropicHardening(const IPLinearExponentialJ2IsotropicHardening &source);
virtual IPLinearExponentialJ2IsotropicHardening &operator=(const IPVariable &source);
virtual ~IPLinearExponentialJ2IsotropicHardening(){}
virtual void restart();
virtual IPVariable * clone() const;
};
/* IPLinearFollowedByExponentialJ2IsotropicHardening */
class IPLinearFollowedByExponentialJ2IsotropicHardening : public IPJ2IsotropicHardening
{
protected:
// nothing to add to IPJ2IsotropicHardening basis
public:
IPLinearFollowedByExponentialJ2IsotropicHardening();
IPLinearFollowedByExponentialJ2IsotropicHardening(const IPLinearFollowedByExponentialJ2IsotropicHardening &source);
virtual IPLinearFollowedByExponentialJ2IsotropicHardening &operator=(const IPVariable &source);
virtual ~IPLinearFollowedByExponentialJ2IsotropicHardening(){}
virtual void restart();
virtual IPVariable * clone() const;
};
/* IPLinearFollowedByPowerLawJ2IsotropicHardening */
class IPLinearFollowedByPowerLawJ2IsotropicHardening : public IPJ2IsotropicHardening
{
protected:
public:
IPLinearFollowedByPowerLawJ2IsotropicHardening();
IPLinearFollowedByPowerLawJ2IsotropicHardening(const IPLinearFollowedByPowerLawJ2IsotropicHardening &source);
virtual IPLinearFollowedByPowerLawJ2IsotropicHardening &operator=(const IPVariable &source);
virtual ~IPLinearFollowedByPowerLawJ2IsotropicHardening(){}
virtual void restart();
virtual IPVariable *clone() const;
};
class IPPolynomialJ2IsotropicHardening : public IPJ2IsotropicHardening{
public:
IPPolynomialJ2IsotropicHardening();
IPPolynomialJ2IsotropicHardening(const IPPolynomialJ2IsotropicHardening &source);
virtual IPPolynomialJ2IsotropicHardening &operator=(const IPVariable &source);
virtual ~IPPolynomialJ2IsotropicHardening(){}
virtual void restart();
virtual IPVariable * clone() const;
};
class IPTwoExpJ2IsotropicHaderning: public IPJ2IsotropicHardening{
public:
IPTwoExpJ2IsotropicHaderning();
IPTwoExpJ2IsotropicHaderning(const IPTwoExpJ2IsotropicHaderning &source);
virtual IPTwoExpJ2IsotropicHaderning &operator=(const IPVariable &source);
virtual ~IPTwoExpJ2IsotropicHaderning(){}
virtual void restart();
virtual IPVariable * clone() const;
};
#endif //IPHardening_H_