/* Take increments in strain and calculate new Particle: strains, rotation strain, stresses, strain energy, dvij are (gradient rates X time increment) to give deformation gradient change For Axisymmetry: x->R, y->Z, z->theta, np==AXISYMMETRIC_MPM, otherwise dvzz=0 This method only called by TransIsotropic and subclasses */ void Elastic::MPMConstitutiveLaw(MPMBase *mptr,Matrix3 dv,double delTime,int np,void *properties,ResidualStrains *res,int historyOffset) const { if(useLargeRotation) LRConstitutiveLaw(mptr,dv,delTime,np,properties,res); else { // increment deformation gradient HypoIncrementDeformation(mptr,dv); if(np==THREED_MPM) { SRConstitutiveLaw3D(mptr,dv,delTime,np,properties,res); } else { SRConstitutiveLaw2D(mptr,dv,delTime,np,properties,res); } } }
/* Take increments in strain and calculate new Particle: strains, rotation strain, stresses, strain energy, du are (gradient rates X time increment) to give deformation gradient change For Axisymmetry: x->R, y->Z, z->theta, np==AXISYMMETRIC_MPM, otherwise dvzz=0 */ void BistableIsotropic::MPMConstitutiveLaw(MPMBase *mptr,Matrix3 du,double delTime,int np,void *properties,ResidualStrains *res) const { if(useLargeRotation) LRConstitutiveLaw(mptr,du,delTime,np,properties,res); else SRConstitutiveLaw(mptr,du,delTime,np,properties,res); }
/* Take increments in strain and calculate new Particle: strains, rotation strain, plastic strain, stresses, strain energy, plastic energy, dissipated energy, angle dvij are (gradient rates X time increment) to give deformation gradient change For Axisymmetry: x->R, y->Z, z->theta, np==AXISYMMEtRIC_MPM, otherwise dvzz=0 This is general analysis for isotropic plastic material. Subclass must define GetYield() and GetKPrime() and optionally can override more. Those methods require history dependent variables and rates (e.g. cum. plastic strain (alpint) and plastic strain rate (dalpha/delTime) to be set before they are called. This material tracks pressure and stores deviatoric stress only in particle stress tensor */ void IsoPlasticity::MPMConstitutiveLaw(MPMBase *mptr,Matrix3 du,double delTime,int np,void *properties,ResidualStrains *res,int historyOffset) const { if(useLargeRotation) LRConstitutiveLaw(mptr,du,delTime,np,properties,res); else SRConstitutiveLaw(mptr,du,delTime,np,properties,res); }