Skip to content
Snippets Groups Projects
Select Git revision
  • e4b35ae79126c9e48be6260f00b452267ab11f58
  • master default
  • cgnsUnstructured
  • partitioning
  • poppler
  • HighOrderBLCurving
  • gmsh_3_0_4
  • gmsh_3_0_3
  • gmsh_3_0_2
  • gmsh_3_0_1
  • gmsh_3_0_0
  • gmsh_2_16_0
  • gmsh_2_15_0
  • gmsh_2_14_1
  • gmsh_2_14_0
  • gmsh_2_13_2
  • gmsh_2_13_1
  • gmsh_2_12_0
  • gmsh_2_11_0
  • gmsh_2_10_1
  • gmsh_2_10_0
  • gmsh_2_9_3
  • gmsh_2_9_2
  • gmsh_2_9_1
  • gmsh_2_9_0
  • gmsh_2_8_6
26 results

unix2dos

Blame
  • Forked from gmsh / gmsh
    Source project has a limited visibility.
    nonLocalDamageDG3DIPVariable.cpp 22.90 KiB
    //
    // C++ Interface: ipvariable
    //
    // Description: Class with definition of ipvarible for dG3D
    //
    //
    // Author:  <L. Noels>, (C) 2011
    //
    // Copyright: See COPYING file that comes with this distribution
    //
    //
    
    #include "nonLocalDamageDG3DIPVariable.h"
    #include "ipstate.h"
    #include "ipField.h"
    #include <iostream>
    #include <fstream>
    #include <iomanip>
    #include <string.h>
    #include "restartManager.h"
    #include "highOrderTensor.h"
    
    
    virtualNonLocalDamageDG3DIPVariable::virtualNonLocalDamageDG3DIPVariable(const int num, const dG3DIPVariableBase* base, const std::vector<STensor3>& length, int numExtra):
          _nonlocalData(num,numExtra), _constitutiveExtraDofDiffusionData(NULL), dG3DIPVariableBase(),characteristicLength(length){
      _ipvBase = dynamic_cast<dG3DIPVariableBase*>(base->clone());
      if (_ipvBase == NULL){
        Msg::Fatal("dG3DIPVariableBase must be used");
      }
      if (num > 0){
        localVar.resize(num,0.);
        nonLocalVar.resize(num,0.);
        DirrEnergDNonlocalVar.resize(num,0.);
      }
      if(numExtra>0.)
      {
        _constitutiveExtraDofDiffusionData = new constitutiveExtraDofDiffusionData(numExtra,num);
        constitutiveExtraDofVar.resize(numExtra,0);
        DirrEnergDConstitutiveExtraDofDiffusion.resize(numExtra,0.);
      }
    };
    
    virtualNonLocalDamageDG3DIPVariable::virtualNonLocalDamageDG3DIPVariable(const virtualNonLocalDamageDG3DIPVariable& src):
      dG3DIPVariableBase(src), _nonlocalData(src._nonlocalData), localVar(src.localVar),nonLocalVar(src.nonLocalVar),
      characteristicLength(src.characteristicLength),DirrEnergDNonlocalVar(src.DirrEnergDNonlocalVar), 
      constitutiveExtraDofVar(src.constitutiveExtraDofVar), 
      DirrEnergDConstitutiveExtraDofDiffusion(src.DirrEnergDConstitutiveExtraDofDiffusion) 
    {
      _ipvBase = NULL;
      if (src._ipvBase != NULL){
        _ipvBase = dynamic_cast<dG3DIPVariableBase*>(src._ipvBase->clone());
      }
      if(src._constitutiveExtraDofDiffusionData!=NULL)
      {
        _constitutiveExtraDofDiffusionData = new constitutiveExtraDofDiffusionData(*(src._constitutiveExtraDofDiffusionData));
      }
    };
    virtualNonLocalDamageDG3DIPVariable& virtualNonLocalDamageDG3DIPVariable::operator =(const IPVariable& src){
      dG3DIPVariableBase::operator =(src);
      const virtualNonLocalDamageDG3DIPVariable* psrc = dynamic_cast<const virtualNonLocalDamageDG3DIPVariable*>(&src);
      if (psrc != NULL){
        _nonlocalData = psrc->_nonlocalData;
        localVar = psrc->localVar;
        nonLocalVar = psrc->nonLocalVar;
        DirrEnergDNonlocalVar = psrc->DirrEnergDNonlocalVar;
        if(psrc->_constitutiveExtraDofDiffusionData!=NULL)
        {
          if(_constitutiveExtraDofDiffusionData==NULL)
            _constitutiveExtraDofDiffusionData = new constitutiveExtraDofDiffusionData(*(psrc->_constitutiveExtraDofDiffusionData));
          else
            _constitutiveExtraDofDiffusionData->operator=(*(psrc->_constitutiveExtraDofDiffusionData)); 
        }
        constitutiveExtraDofVar = psrc->constitutiveExtraDofVar;
        DirrEnergDConstitutiveExtraDofDiffusion = psrc->DirrEnergDConstitutiveExtraDofDiffusion;
        if (psrc->_ipvBase != NULL){
          if (_ipvBase != NULL){
            _ipvBase->operator=(*dynamic_cast<const IPVariable*>(psrc->_ipvBase));
          }
          else{
            _ipvBase = dynamic_cast<dG3DIPVariableBase*>(psrc->_ipvBase->clone());
          }
        }
      }
      return *this;
    };
    
    virtualNonLocalDamageDG3DIPVariable::~virtualNonLocalDamageDG3DIPVariable(){
      if(_constitutiveExtraDofDiffusionData!=NULL) delete _constitutiveExtraDofDiffusionData;
      if (_ipvBase != NULL) delete _ipvBase; _ipvBase = NULL;
    };
    
    double virtualNonLocalDamageDG3DIPVariable::get(const int comp) const{
      if (comp == IPField::LOCAL_0){
        if (getNumberNonLocalVariable()>0){
          return getConstRefToLocalVariable(0);
        }
        else return 0.;
      }
      else if (comp == IPField::LOCAL_1){
        if (getNumberNonLocalVariable()>1){
          return getConstRefToLocalVariable(1);
        }
        else return 0.;
      }
      else if (comp == IPField::LOCAL_2){
        if (getNumberNonLocalVariable() > 2){
          return getConstRefToLocalVariable(2);
        }
        else return 0.;
      }
      else if (comp == IPField::NONLOCAL_0){
        if (getNumberNonLocalVariable() > 0){
          return getConstRefToNonLocalVariable(0);
        }
        else return 0.;
      }
      else if (comp == IPField::NONLOCAL_1){
        if (getNumberNonLocalVariable()> 1){
          return getConstRefToNonLocalVariable(1);
        }
        else return 0.;
      }
      else if (comp == IPField::NONLOCAL_2){
        if (getNumberNonLocalVariable() > 2)
          return getConstRefToNonLocalVariable(2);
        else return 0.;
      }
      else if (comp == IPField::CONSTITUTIVEEXTRADOFDIFFUSION_0){
        if (getNumConstitutiveExtraDofDiffusionVariable() > 0)
          return getConstRefToField(0);
      }
      else if (comp == IPField::CONSTITUTIVEEXTRADOFDIFFUSION_1){
        if (getNumConstitutiveExtraDofDiffusionVariable() > 1)
          return getConstRefToField(1);
      }
      else if (comp == IPField::CONSTITUTIVEEXTRADOFDIFFUSION_2){
        if (getNumConstitutiveExtraDofDiffusionVariable() > 2)
          return getConstRefToField(2);
      }
      else{
        return _ipvBase->get(comp);
      }
    }
    
    void virtualNonLocalDamageDG3DIPVariable::restart(){
      _ipvBase->restart();
      _nonlocalData.restart();
      if(_constitutiveExtraDofDiffusionData!=NULL)
        _constitutiveExtraDofDiffusionData->restart();
    };
    
    //
    nonLocalDamageDG3DIPVariable::nonLocalDamageDG3DIPVariable(int _nsdv, const bool oninter) : dG3DIPVariable(oninter,1)
    {
      _nldipv = new IPNonLocalDamage(_nsdv);
    }
    
    nonLocalDamageDG3DIPVariable::nonLocalDamageDG3DIPVariable(const nonLocalDamageDG3DIPVariable &source) :
                                                                       dG3DIPVariable(source)
    {
      _nldipv = NULL;
      if (source.getIPNonLocalDamage() != NULL){
        _nldipv = new IPNonLocalDamage((int)source.getIPNonLocalDamage()->getNsdv());
        _nldipv->operator= (*dynamic_cast<const IPVariable*>(source.getIPNonLocalDamage()));
      }
    
    }
    
    nonLocalDamageDG3DIPVariable& nonLocalDamageDG3DIPVariable::operator=(const IPVariable &source)
    {
      dG3DIPVariable::operator=(source);
      const nonLocalDamageDG3DIPVariable* src = dynamic_cast<const nonLocalDamageDG3DIPVariable*>(&source);
      if(src != NULL)
      {
        if (src->getIPNonLocalDamage() != NULL){
          if (_nldipv != NULL){
            _nldipv->operator=(*dynamic_cast<const IPVariable*>(src->getIPNonLocalDamage()));
          }
          else{
            _nldipv = dynamic_cast<IPNonLocalDamage*>(src->getIPNonLocalDamage()->clone());
          }
        }
        else{
          if (_nldipv != NULL){
            delete _nldipv;
            _nldipv = NULL;
          }
        }
      }
      return *this;
    }
    double nonLocalDamageDG3DIPVariable::get(const int i) const
    {
      return getIPNonLocalDamage()->get(i);
    }
    double nonLocalDamageDG3DIPVariable::defoEnergy() const
    {
      return getIPNonLocalDamage()->defoEnergy();
    }
    double nonLocalDamageDG3DIPVariable::plasticEnergy() const
    {
      return getIPNonLocalDamage()->plasticEnergy();
    }
    
    double nonLocalDamageDG3DIPVariable::getConstRefToLocalVariable(const int idex) const {
      if (idex == 0)
        return getIPNonLocalDamage()->_nldCurrentPlasticStrain;
      else{
        Msg::Fatal("the non-local variable %d is not defined",idex);
      }
    };
    double& nonLocalDamageDG3DIPVariable::getRefToLocalVariable(const int idex) {
      if (idex == 0)
        return getIPNonLocalDamage()->_nldCurrentPlasticStrain;
      else{
        Msg::Fatal("the non-local variable %d is not defined",idex);
      }
    };
    
    double nonLocalDamageDG3DIPVariable::getConstRefToNonLocalVariable(const int idex) const{
      if (idex == 0)
        return getIPNonLocalDamage()->_nldEffectivePlasticStrain;
      else{
        Msg::Fatal("the non-local variable %d is not defined",idex);
      }
    };
    double& nonLocalDamageDG3DIPVariable::getRefToNonLocalVariable(const int idex) {
      if (idex == 0)
        return getIPNonLocalDamage()->_nldEffectivePlasticStrain;
      else{
        Msg::Fatal("the non-local variable %d is not defined",idex);
      }
    };
    
    void nonLocalDamageDG3DIPVariable::restart()
    {
      dG3DIPVariable::restart();
      if (_nldipv != NULL)
        restartManager::restart(_nldipv);
      return;
    }
    
    
    
    nonLocalDamageIsotropicElasticityDG3DIPVariable::nonLocalDamageIsotropicElasticityDG3DIPVariable(const mlawNonlocalDamageHyperelastic &isoElastLaw,
        const bool oninter) : dG3DIPVariable(oninter,1)
    {
        _nldIsotropicElasticityipv = new IPNonLocalDamageIsotropicElasticity(isoElastLaw.getCLengthLaw(),isoElastLaw.getDamageLaw());
    }
    
    nonLocalDamageIsotropicElasticityDG3DIPVariable::nonLocalDamageIsotropicElasticityDG3DIPVariable(const mlawNonLocalDamageIsotropicElasticity &isoElastLaw,
        const bool oninter) : dG3DIPVariable(oninter,1)
    {
        _nldIsotropicElasticityipv = new IPNonLocalDamageIsotropicElasticity(isoElastLaw.getCLengthLaw(),isoElastLaw.getDamageLaw());
    }
    
    nonLocalDamageIsotropicElasticityDG3DIPVariable::nonLocalDamageIsotropicElasticityDG3DIPVariable(const nonLocalDamageIsotropicElasticityDG3DIPVariable &source)
        : dG3DIPVariable(source)
    {
      _nldIsotropicElasticityipv = NULL;
      if (source.getIPNonLocalDamageIsotropicElasticity() != NULL){
         _nldIsotropicElasticityipv = dynamic_cast<IPNonLocalDamageIsotropicElasticity*>(source.getIPNonLocalDamageIsotropicElasticity()->clone());
      }
    
    }
    
    nonLocalDamageIsotropicElasticityDG3DIPVariable& nonLocalDamageIsotropicElasticityDG3DIPVariable::operator=(const IPVariable &source)
    {
      dG3DIPVariable::operator=(source);
      const nonLocalDamageIsotropicElasticityDG3DIPVariable* src = dynamic_cast<const nonLocalDamageIsotropicElasticityDG3DIPVariable*>(&source);
      if(src != NULL)
      {
        if (src->getIPNonLocalDamageIsotropicElasticity() != NULL){
          if (_nldIsotropicElasticityipv!=NULL){
            _nldIsotropicElasticityipv->operator=(*dynamic_cast<const IPVariable*>(src->getIPNonLocalDamageIsotropicElasticity()));
          }
          else
            _nldIsotropicElasticityipv = dynamic_cast<IPNonLocalDamageIsotropicElasticity*>(src->getIPNonLocalDamageIsotropicElasticity()->clone());
        }
        else{
          if (_nldIsotropicElasticityipv!=NULL){
            delete _nldIsotropicElasticityipv;
            _nldIsotropicElasticityipv=NULL;
          }
        }
      }
      return *this;
    }
    
    double nonLocalDamageIsotropicElasticityDG3DIPVariable::get(const int i) const
    {
        if(i == IPField::DAMAGE)
        {
            return getIPNonLocalDamageIsotropicElasticity()->getDamage();
        }
        else if(i == IPField::LOCAL_EQUIVALENT_STRAINS)
        {
            return getIPNonLocalDamageIsotropicElasticity()->getLocalEffectiveStrains();
        }
        else if(i == IPField::NONLOCAL_EQUIVALENT_STRAINS)
        {
            return getIPNonLocalDamageIsotropicElasticity()->getNonLocalEffectiveStrains();
        }
    		else if (i == IPField::ACTIVE_DAMAGING_ZONE){
    			if (getIPNonLocalDamageIsotropicElasticity()->dissipationIsActive()) return 1.;
    			else return 0.;
    		}
        else
        {
            return dG3DIPVariable::get(i);
        }
    }
    
    double nonLocalDamageIsotropicElasticityDG3DIPVariable::defoEnergy() const
    {
        return getIPNonLocalDamageIsotropicElasticity()->defoEnergy();
    }
    double nonLocalDamageIsotropicElasticityDG3DIPVariable::plasticEnergy() const
    {
        return getIPNonLocalDamageIsotropicElasticity()->plasticEnergy();
    }
    
    
    double nonLocalDamageIsotropicElasticityDG3DIPVariable::getConstRefToLocalVariable(const int idex) const
    {
        if (idex == 0)
            return getIPNonLocalDamageIsotropicElasticity()->getLocalEffectiveStrains();
        else
            {
                Msg::Fatal("the non-local variable %d is not defined",idex);
            }
    };
    double& nonLocalDamageIsotropicElasticityDG3DIPVariable::getRefToLocalVariable(const int idex)
    {
        if (idex == 0)
            return getIPNonLocalDamageIsotropicElasticity()->getRefToLocalEffectiveStrains();
        else
            {
                Msg::Fatal("the non-local variable %d is not defined",idex);
            }
    };
    
    double nonLocalDamageIsotropicElasticityDG3DIPVariable::getConstRefToNonLocalVariable(const int idex) const
    {
        if (idex == 0)
            return getIPNonLocalDamageIsotropicElasticity()->getNonLocalEffectiveStrains();
        else
            {
                Msg::Fatal("the non-local variable %d is not defined",idex);
            }
    };
    
    double& nonLocalDamageIsotropicElasticityDG3DIPVariable::getRefToNonLocalVariable(const int idex)
    {
        if (idex == 0)
            return getIPNonLocalDamageIsotropicElasticity()->getRefToNonLocalEffectiveStrains();
        else
            {
                Msg::Fatal("the non-local variable %d is not defined",idex);
            }
    };
    
    void nonLocalDamageIsotropicElasticityDG3DIPVariable::restart()
    {
        dG3DIPVariable::restart();
        if (_nldIsotropicElasticityipv != NULL)
          restartManager::restart(_nldIsotropicElasticityipv);
        return;
    }
    
    
    
    
    
    
    nonLocalDamageJ2HyperDG3DIPVariable::nonLocalDamageJ2HyperDG3DIPVariable(const mlawNonLocalDamageJ2Hyper &_j2law, const bool oninter) :
                                       dG3DIPVariable(oninter,1)
    {
      _nldJ2Hyperipv = new IPNonLocalDamageJ2Hyper(_j2law.getJ2IsotropicHardening(),_j2law.getCLengthLaw(),_j2law.getDamageLaw());
    }
    
    nonLocalDamageJ2HyperDG3DIPVariable::nonLocalDamageJ2HyperDG3DIPVariable(const nonLocalDamageJ2HyperDG3DIPVariable &source) : dG3DIPVariable(source)
    {
      _nldJ2Hyperipv = NULL;
      if (source.getIPNonLocalDamageJ2Hyper() != NULL){
        _nldJ2Hyperipv = dynamic_cast<IPNonLocalDamageJ2Hyper*>(source.getIPNonLocalDamageJ2Hyper()->clone());
      }
    }
    
    nonLocalDamageJ2HyperDG3DIPVariable& nonLocalDamageJ2HyperDG3DIPVariable::operator=(const IPVariable &source)
    {
      dG3DIPVariable::operator=(source);
      const nonLocalDamageJ2HyperDG3DIPVariable* src = dynamic_cast<const nonLocalDamageJ2HyperDG3DIPVariable*>(&source);
      if(src != NULL)
      {
        if (src->getIPNonLocalDamageJ2Hyper() != NULL){
          if (_nldJ2Hyperipv != NULL)
            _nldJ2Hyperipv->operator=(*dynamic_cast<const IPVariable*>(src->getIPNonLocalDamageJ2Hyper()));
          else
            _nldJ2Hyperipv = dynamic_cast<IPNonLocalDamageJ2Hyper*>(src->getIPNonLocalDamageJ2Hyper()->clone());
        }
        else{
          if (_nldJ2Hyperipv != NULL) {
            delete _nldJ2Hyperipv;
            _nldJ2Hyperipv= NULL;
          }
        }
    
      }
      return *this;
    }
    double nonLocalDamageJ2HyperDG3DIPVariable::get(const int i) const
    {
      if(i == IPField::PLASTICSTRAIN)
      {
        return getIPNonLocalDamageJ2Hyper()->getConstRefToEquivalentPlasticStrain();
      }
      else if(i == IPField::DAMAGE)
      {
        return getIPNonLocalDamageJ2Hyper()->getDamage();
      }
    	else if (i == IPField::ACTIVE_DAMAGING_ZONE){
    		if (getIPNonLocalDamageJ2Hyper()->dissipationIsActive()) return 1.;
    		else return 0.;
    	}
      else
      {
        return dG3DIPVariable::get(i);
      }
    }
    double nonLocalDamageJ2HyperDG3DIPVariable::defoEnergy() const
    {
      return getIPNonLocalDamageJ2Hyper()->defoEnergy();
    }
    double nonLocalDamageJ2HyperDG3DIPVariable::plasticEnergy() const
    {
      return getIPNonLocalDamageJ2Hyper()->plasticEnergy();
    }
    
    
    double nonLocalDamageJ2HyperDG3DIPVariable::getConstRefToLocalVariable(const int idex) const {
      if (idex == 0)
        return getIPNonLocalDamageJ2Hyper()->getConstRefToEquivalentPlasticStrain();
      else{
        Msg::Fatal("the non-local variable %d is not defined",idex);
      }
    };
    double& nonLocalDamageJ2HyperDG3DIPVariable::getRefToLocalVariable(const int idex){
      if (idex == 0)
        return getIPNonLocalDamageJ2Hyper()->getRefToEquivalentPlasticStrain();
      else{
        Msg::Fatal("the non-local variable %d is not defined",idex);
      }
    };
    
    double nonLocalDamageJ2HyperDG3DIPVariable::getConstRefToNonLocalVariable(const int idex) const{
      if (idex == 0)
        return getIPNonLocalDamageJ2Hyper()->getEffectivePlasticStrain();
      else{
        Msg::Fatal("the non-local variable %d is not defined",idex);
      }
    };
    double& nonLocalDamageJ2HyperDG3DIPVariable::getRefToNonLocalVariable(const int idex){
      if (idex == 0)
        return getIPNonLocalDamageJ2Hyper()->getRefToEffectivePlasticStrain();
      else{
        Msg::Fatal("the non-local variable %d is not defined",idex);
      }
    };
    
    void nonLocalDamageJ2HyperDG3DIPVariable::restart()
    {
      dG3DIPVariable::restart();
      if (_nldJ2Hyperipv != NULL)
        restartManager::restart(_nldJ2Hyperipv);
      return;
    }
    //
    
    nonLocalPorosityDG3DIPVariable::nonLocalPorosityDG3DIPVariable(const mlawNonLocalPorosity &law,const double fvInitial, const bool oninter, const int numLocalVar):
      dG3DIPVariable(oninter,numLocalVar)
    {
      _nldPorousipv = new IPNonLocalPorosity(fvInitial, law.getJ2IsotropicHardening(), law.getCLengthLaw(),
                                                 law.getGursonDamageNucleationContainer(), law.getCoalescenceLaw());
    }
    
    nonLocalPorosityDG3DIPVariable::nonLocalPorosityDG3DIPVariable(const mlawNonLocalPorosity &_law, const bool oninter, const int numLocalVar) :
                                       dG3DIPVariable(oninter,numLocalVar)
    {
      _nldPorousipv = new IPNonLocalPorosity(_law.getInitialPorosity(), _law.getJ2IsotropicHardening(), _law.getCLengthLaw(),
                                                 _law.getGursonDamageNucleationContainer(), _law.getCoalescenceLaw());
    }
    
    nonLocalPorosityDG3DIPVariable::nonLocalPorosityDG3DIPVariable(const nonLocalPorosityDG3DIPVariable &source) : dG3DIPVariable(source)
    {
      _nldPorousipv  = NULL;
      if (source.getIPNonLocalPorosity() != NULL){
        _nldPorousipv = dynamic_cast<IPNonLocalPorosity*>(source.getIPNonLocalPorosity()->clone());
      }
    
    }
    
    nonLocalPorosityDG3DIPVariable& nonLocalPorosityDG3DIPVariable::operator=(const IPVariable &source)
    {
      dG3DIPVariable::operator=(source);
      const nonLocalPorosityDG3DIPVariable* src = dynamic_cast<const nonLocalPorosityDG3DIPVariable*>(&source);
      if(src != NULL)
      {
        if (src->getIPNonLocalPorosity() != NULL){
          if (_nldPorousipv != NULL)
            _nldPorousipv->operator=(*dynamic_cast<const IPVariable*>(src->getIPNonLocalPorosity()));
          else
            _nldPorousipv = dynamic_cast<IPNonLocalPorosity*>(src->getIPNonLocalPorosity()->clone());
        }
        else{
          if (_nldPorousipv!=NULL){
            delete _nldPorousipv;
            _nldPorousipv = NULL;
          }
        }
      }
      return *this;
    }
    double nonLocalPorosityDG3DIPVariable::get(const int i) const
    {
      if(i == IPField::PLASTICSTRAIN)
      {
        return getIPNonLocalPorosity()->getMatrixPlasticStrain();
      }
      else if (i == IPField::VOLUMETRIC_PLASTIC_STRAIN){
        return getIPNonLocalPorosity()->getMatrixVolumetricPlasticStrain();
      }
      else if (i == IPField::NONLOCAL_POROSITY){
        return getIPNonLocalPorosity()->getNonLocalPorosity();
      }
      else if(i == IPField::DAMAGE)
      {
        return getIPNonLocalPorosity()->getNonLocalPorosity();
      }
      else if(i == IPField::LOCAL_POROSITY)
      {
        return getIPNonLocalPorosity()->getLocalPorosity();
      }
      else if (i == IPField::CORRECTED_POROSITY)
      {
        return getIPNonLocalPorosity()->getCorrectedPorosity();
      }
      else if (i == IPField::YIELD_POROSITY){
        return getIPNonLocalPorosity()->getYieldPorosity();
      }
      else if (i == IPField::LIGAMENT_RATIO)
      {
        return getIPNonLocalPorosity()->getLigamentRatio();
      }
      else if ( i == IPField::COALESCENCE){
        if (getIPNonLocalPorosity()->getConstRefToIPCoalescence().getCoalescenceActiveFlag()){
          return 1.;
        }
        else return 0.;
      }
      else if (i == IPField::POROSITY_AT_COALESCENCE){
        return getIPNonLocalPorosity()->getConstRefToIPCoalescence().getCoalescenceOnset();
      }
    	else if (i == IPField::FAILED){
    		if (getIPNonLocalPorosity()->isFailed()) return 1.;
    		else return 0.;
    	}
      else if (i == IPField::K_XX){
        return getIPNonLocalPorosity()->getConstRefToCorotationalKirchhoffStress()(0,0);
      }
      else if (i == IPField::K_YY){
        return getIPNonLocalPorosity()->getConstRefToCorotationalKirchhoffStress()(1,1);
      }
      else if (i == IPField::K_ZZ){
        return getIPNonLocalPorosity()->getConstRefToCorotationalKirchhoffStress()(2,2);
      }
      else if (i == IPField::K_XY){
        return getIPNonLocalPorosity()->getConstRefToCorotationalKirchhoffStress()(0,1);
      }
      else if (i == IPField::K_YZ){
        return getIPNonLocalPorosity()->getConstRefToCorotationalKirchhoffStress()(1,2);
      }
      else if (i == IPField::K_XZ){
        return getIPNonLocalPorosity()->getConstRefToCorotationalKirchhoffStress()(0,2);
      }
      else
      {
        return dG3DIPVariable::get(i);
      }
    }
    double nonLocalPorosityDG3DIPVariable::defoEnergy() const
    {
      return getIPNonLocalPorosity()->defoEnergy();
    }
    double nonLocalPorosityDG3DIPVariable::plasticEnergy() const
    {
      return getIPNonLocalPorosity()->plasticEnergy();
    }
    
    double nonLocalPorosityDG3DIPVariable::getConstRefToLocalVariable(const int idex) const{
      if (idex == 0){
        return getIPNonLocalPorosity()->getLocalPorosity();
      }
      else{
        Msg::Fatal("the non-local variable %d is not defined",idex);
      }
    };
    double& nonLocalPorosityDG3DIPVariable::getRefToLocalVariable(const int idex){
      if (idex == 0){
        return getIPNonLocalPorosity()->getRefToLocalPorosity();
      }
      else{
        Msg::Fatal("the non-local variable %d is not defined",idex);
      }
    };
    
    double nonLocalPorosityDG3DIPVariable::getConstRefToNonLocalVariable(const int idex) const{
      if (idex == 0){
        return getIPNonLocalPorosity()->getNonLocalPorosity();
      }
      else{
        Msg::Fatal("the non-local variable %d is not defined",idex);
      }
    };
    double& nonLocalPorosityDG3DIPVariable::getRefToNonLocalVariable(const int idex){
      if (idex == 0){
        return getIPNonLocalPorosity()->getRefToNonLocalPorosity();
      }
      else{
        Msg::Fatal("the non-local variable %d is not defined",idex);
      }
    };
    
    
    void nonLocalPorosityDG3DIPVariable::restart()
    {
      dG3DIPVariable::restart();
      if (_nldPorousipv != NULL)
        restartManager::restart(_nldPorousipv);
      return;
    };
    
    double nonLocalPorousEqPlasticDG3DIPVariable::getConstRefToLocalVariable(const int idex) const{
      if (idex == 0){
        return getIPNonLocalPorosity()->getMatrixPlasticStrain();
      }
      else{
        Msg::Fatal("the non-local variable %d is not defined",idex);
      }
    };
    double& nonLocalPorousEqPlasticDG3DIPVariable::getRefToLocalVariable(const int idex){
      if (idex == 0){
        return getIPNonLocalPorosity()->getRefToMatrixPlasticStrain();
      }
      else{
        Msg::Fatal("the non-local variable %d is not defined",idex);
      }
    };
    
    double nonLocalPorousEqPlasticDG3DIPVariable::getConstRefToNonLocalVariable(const int idex) const{
      if (idex == 0){
        return getIPNonLocalPorosity()->getNonLocalMatrixPlasticStrain();
      }
      else{
        Msg::Fatal("the non-local variable %d is not defined",idex);
      }
    };
    double& nonLocalPorousEqPlasticDG3DIPVariable::getRefToNonLocalVariable(const int idex){
      if (idex == 0){
        return getIPNonLocalPorosity()->getRefToNonLocaMatrixPlasticStrain();
      }
      else{
        Msg::Fatal("the non-local variable %d is not defined",idex);
      }
    };
    
    double nonLocalPorousVolumetricPlasticDG3DIPVariable::getConstRefToLocalVariable(const int idex) const{
      if (idex == 0){
        return getIPNonLocalPorosity()->getMatrixVolumetricPlasticStrain();
      }
      else{
        Msg::Fatal("the non-local variable %d is not defined",idex);
      }
    };
    double& nonLocalPorousVolumetricPlasticDG3DIPVariable::getRefToLocalVariable(const int idex){
      if (idex == 0){
        return getIPNonLocalPorosity()->getRefToMatrixVolumetricPlasticStrain();
      }
      else{
        Msg::Fatal("the non-local variable %d is not defined",idex);
      }
    };
    
    double nonLocalPorousVolumetricPlasticDG3DIPVariable::getConstRefToNonLocalVariable(const int idex) const{
      if (idex == 0){
        return getIPNonLocalPorosity()->getNonlocalMatrixVolumetricPlasticStrain();
      }
      else{
        Msg::Fatal("the non-local variable %d is not defined",idex);
      }
    };
    double& nonLocalPorousVolumetricPlasticDG3DIPVariable::getRefToNonLocalVariable(const int idex){
      if (idex == 0){
        return getIPNonLocalPorosity()->getRefToNonLocalMatrixVolumetricPlasticStrain();
      }
      else{
        Msg::Fatal("the non-local variable %d is not defined",idex);
      }
    };