text: //   
  //   Project Name:        KratosPoromechanicsApplication $
  //   Last Modified by:    $Author:    Ignasi de Pouplana $
  //   Date:                $Date:           February 2016 $
  //   Revision:            $Revision:                 1.0 $
  //
  
  #if !defined (KRATOS_LOCAL_DAMAGE_3D_LAW_H_INCLUDED)
  #define  KRATOS_LOCAL_DAMAGE_3D_LAW_H_INCLUDED
  
  // Project includes
  #include "includes/serializer.h"
  
  // Application includes
  #include "custom_constitutive/linear_elastic_plastic_3D_law.hpp"
  #include "poromechanics_application_variables.h"
  
  namespace Kratos
  {
  
  class KRATOS_API(POROMECHANICS_APPLICATION) LocalDamage3DLaw : public LinearElasticPlastic3DLaw
  {
  
  public:
  
      KRATOS_CLASS_POINTER_DEFINITION(LocalDamage3DLaw);
  
      typedef FlowRule::Pointer FlowRulePointer;
      typedef YieldCriterion::Pointer YieldCriterionPointer;
      typedef HardeningLaw::Pointer HardeningLawPointer;
  
  ///----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  
      /// Default Constructor
      LocalDamage3DLaw();
      
      /// Second Constructor
      LocalDamage3DLaw(FlowRulePointer pFlowRule, YieldCriterionPointer pYieldCriterion, HardeningLawPointer pHardeningLaw); 
      
      /// Copy Constructor
      LocalDamage3DLaw (const LocalDamage3DLaw& rOther);
  
      /// Destructor
      ~LocalDamage3DLaw() override;
  
  ///----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
      
      int Check(const Properties& rMaterialProperties, const GeometryType& rElementGeometry, const ProcessInfo& rCurrentProcessInfo) override;
      
      ConstitutiveLaw::Pointer Clone() const override;
      
  ///----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  
      void CalculateMaterialResponseCauchy (Parameters & rValues) override;
      
      void FinalizeMaterialResponseCauchy (Parameters & rValues) override;
  
  ///----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  
      double& GetValue( const Variable<double>& rThisVariable, double& rValue ) override;
  
      void SetValue( const Variable<double>& rVariable, const double& rValue, const ProcessInfo& rCurrentProcessInfo ) override;
  
  ///----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
      
  protected:
  
      /// Member Variables
          
  ///----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  
  private:
      
      /// Serialization
      
      friend class Serializer;
  
      void save(Serializer& rSerializer) const override
      {
          KRATOS_SERIALIZE_SAVE_BASE_CLASS( rSerializer, ConstitutiveLaw )
      }
  
      void load(Serializer& rSerializer) override
      {
          KRATOS_SERIALIZE_LOAD_BASE_CLASS( rSerializer, ConstitutiveLaw )
      }
  
  }; // Class LocalDamage3DLaw
  }  // namespace Kratos.
  #endif // KRATOS_LOCAL_DAMAGE_3D_LAW_H_INCLUDED  defined 
  