//
// Description: storing class for Non Local Damage Gurson Thermo Mechanics
//
//
// Author:  <L. Noels>, (C) 2014
//
// Copyright: See COPYING file that comes with this distribution
//
//
#include "ipNonLocalDamageGursonThermoMechanics.h"


IPNonLocalDamageGursonThermoMechanics::IPNonLocalDamageGursonThermoMechanics() : IPNonLocalPorosity(),_thermalEnergy(0.), _DirreversibleEnergyDT(0.), _ThermoElasticCoupling(0.)
{};

IPNonLocalDamageGursonThermoMechanics::IPNonLocalDamageGursonThermoMechanics(const IPNonLocalDamageGursonThermoMechanics &source) : IPNonLocalPorosity(source), _thermalEnergy(source._thermalEnergy), _DirreversibleEnergyDT(0.), _ThermoElasticCoupling(0.) {};

IPNonLocalDamageGursonThermoMechanics::IPNonLocalDamageGursonThermoMechanics(double fVinitial, const J2IsotropicHardening *j2IH, const CLengthLaw *cll,
                         const std::vector<NucleationLaw*> *ipvgdnContainer,const CoalescenceLaw *coaleslaw) :IPNonLocalPorosity(fVinitial,j2IH,cll,ipvgdnContainer,coaleslaw),  _thermalEnergy(0.), 
                                                                                                              _DirreversibleEnergyDT(0.), _ThermoElasticCoupling(0.) {};
 
IPNonLocalDamageGursonThermoMechanics& IPNonLocalDamageGursonThermoMechanics::operator=(const IPVariable &source)
{
  IPNonLocalPorosity::operator=(source);
  const IPNonLocalDamageGursonThermoMechanics* src = dynamic_cast<const IPNonLocalDamageGursonThermoMechanics*>(&source);
  if(src)
  {
    _DirreversibleEnergyDT = src->_DirreversibleEnergyDT;
    _ThermoElasticCoupling = src->_ThermoElasticCoupling;
    _thermalEnergy=src->_thermalEnergy;
  }
  return *this;
}

double IPNonLocalDamageGursonThermoMechanics::defoEnergy() const
{
  return IPNonLocalPorosity::defoEnergy();

}
double IPNonLocalDamageGursonThermoMechanics::plasticEnergy() const
{
  return IPNonLocalPorosity::plasticEnergy();
}


void IPNonLocalDamageGursonThermoMechanics::restart(){
  IPNonLocalPorosity::restart();
  restartManager::restart(_thermalEnergy);
  restartManager::restart(_DirreversibleEnergyDT);
  restartManager::restart(_ThermoElasticCoupling);
}