KratosMultiphysics
KRATOS Multiphysics (Kratos) is a framework for building parallel, multi-disciplinary simulation software, aiming at modularity, extensibility, and high performance. Kratos is written in C++, and counts with an extensive Python interface.
generic_cl_integrator_kinematic_plasticity.h
Go to the documentation of this file.
1 // KRATOS ___ _ _ _ _ _ __ _
2 // / __\___ _ __ ___| |_(_) |_ _ _| |_(_)_ _____ / / __ ___ _____ /_\ _ __ _ __
3 // / / / _ \| '_ \/ __| __| | __| | | | __| \ \ / / _ \/ / / _` \ \ /\ / / __| //_\\| '_ \| '_ |
4 // / /__| (_) | | | \__ \ |_| | |_| |_| | |_| |\ V / __/ /__| (_| |\ V V /\__ \/ _ \ |_) | |_) |
5 // \____/\___/|_| |_|___/\__|_|\__|\__,_|\__|_| \_/ \___\____/\__,_| \_/\_/ |___/\_/ \_/ .__/| .__/
6 // |_| |_|
7 //
8 // License: BSD License
9 // license: structural_mechanics_application/license.txt
10 //
11 // Main authors: Alejandro Cornejo
12 //
13 
14 #pragma once
15 
16 // System includes
17 
18 // Project includes
19 #include "includes/define.h"
20 #include "includes/checks.h"
21 #include "includes/properties.h"
22 #include "utilities/math_utils.h"
26 
27 namespace Kratos
28 {
31 
35 
36 // The size type definition
37 typedef std::size_t SizeType;
38 
42 
46 
50 
67 template<class TYieldSurfaceType>
69 {
70  public:
73 
75  static constexpr double tolerance = std::numeric_limits<double>::epsilon();
76 
78  typedef std::size_t IndexType;
79 
81  typedef TYieldSurfaceType YieldSurfaceType;
82 
84  static constexpr SizeType Dimension = YieldSurfaceType::Dimension;
85 
87  static constexpr SizeType VoigtSize = YieldSurfaceType::VoigtSize;
88 
91 
94 
96  typedef typename YieldSurfaceType::PlasticPotentialType PlasticPotentialType;
97 
100 
104 
106  {
107  LinearSoftening = 0,
110  PerfectPlasticity = 3,
112  };
113 
115  {
119  };
120 
124 
127  {
128  }
129 
132  {
133  }
134 
137  {
138  return *this;
139  }
140 
143  {
144  }
145 
149 
153 
173  BoundedArrayType& rPredictiveStressVector,
174  Vector& rStrainVector,
175  double& rUniaxialStress,
176  double& rThreshold,
177  double& rPlasticDenominator,
178  BoundedArrayType& rYieldSurfaceDerivative,
179  BoundedArrayType& rDerivativePlasticPotential,
180  double& rPlasticDissipation,
181  BoundedArrayType& rPlasticStrainIncrement,
182  Matrix& rConstitutiveMatrix,
183  Vector& rPlasticStrain,
185  const double CharacteristicLength,
186  Vector& rBackStressVector,
187  const Vector& rPreviousStressVector
188  )
189  {
190  // Material properties
191  const Properties& r_material_properties = rValues.GetMaterialProperties();
192 
193  // Defining some variables
194  bool is_converged = false;
195  IndexType iteration = 0, max_iter = r_material_properties.Has(MAX_NUMBER_NL_CL_ITERATIONS) ? r_material_properties.GetValue(MAX_NUMBER_NL_CL_ITERATIONS) : 100;
196  BoundedArrayType delta_sigma;
197  double plastic_consistency_factor_increment, threshold_indicator;
198  BoundedArrayType kin_hard_stress_vector;
199  const bool analytic_tangent = (r_material_properties.Has(TANGENT_OPERATOR_ESTIMATION) && r_material_properties[TANGENT_OPERATOR_ESTIMATION] == 0) ? true : false;
200 
201  // Backward Euler
202  while (!is_converged && iteration <= max_iter) {
203  threshold_indicator = rUniaxialStress - rThreshold;
204  plastic_consistency_factor_increment = threshold_indicator * rPlasticDenominator;
205  plastic_consistency_factor_increment = (plastic_consistency_factor_increment < 0.0) ? 0.0 : plastic_consistency_factor_increment;
206  noalias(rPlasticStrainIncrement) = plastic_consistency_factor_increment * rDerivativePlasticPotential;
207  noalias(rPlasticStrain) += rPlasticStrainIncrement;
208  noalias(delta_sigma) = prod(rConstitutiveMatrix, rPlasticStrainIncrement);
209  noalias(rPredictiveStressVector) -= delta_sigma;
210  CalculateBackStress(rPredictiveStressVector, rValues, rPreviousStressVector, rPlasticStrainIncrement, rBackStressVector);
211  noalias(kin_hard_stress_vector) = rPredictiveStressVector - rBackStressVector;
212  threshold_indicator = CalculatePlasticParameters(kin_hard_stress_vector, rStrainVector, rUniaxialStress, rThreshold, rPlasticDenominator, rYieldSurfaceDerivative, rDerivativePlasticPotential, rPlasticDissipation, rPlasticStrainIncrement,rConstitutiveMatrix, rValues, CharacteristicLength, rPlasticStrain, rBackStressVector);
213 
214 
215  if (std::abs(threshold_indicator) <= std::abs(1.0e-4 * rThreshold)) { // Has converged
216  is_converged = true;
217  } else {
218  iteration++;
219  }
220  }
221  if (analytic_tangent) {
222  Matrix tangent_tensor;
223  tangent_tensor.resize(VoigtSize, VoigtSize, false);
224  CalculateTangentMatrix(tangent_tensor, rConstitutiveMatrix, rYieldSurfaceDerivative, rDerivativePlasticPotential, rPlasticDenominator);
225  noalias(rConstitutiveMatrix) = tangent_tensor;
226  }
227  KRATOS_WARNING_IF("GenericConstitutiveLawIntegratorKinematicPlasticity", iteration > max_iter) << "Maximum number of iterations in plasticity loop reached..." << std::endl;
228  }
229 
239  Matrix& rTangent,
240  const Matrix& rElasticMatrix,
241  const array_1d<double, VoigtSize>& rFFluxVector,
242  const array_1d<double, VoigtSize>& rGFluxVector,
243  const double Denominator
244  )
245  {
246  rTangent = rElasticMatrix - outer_prod(Vector(prod(rElasticMatrix, rGFluxVector)), Vector(prod(rElasticMatrix, rFFluxVector))) * Denominator;
247  }
248 
249 
266  BoundedArrayType& rPredictiveStressVector,
267  Vector& rStrainVector,
268  double& rUniaxialStress,
269  double& rThreshold,
270  double& rPlasticDenominator,
271  BoundedArrayType& rYieldSurfaceDerivative,
272  BoundedArrayType& rDerivativePlasticPotential,
273  double& rPlasticDissipation,
274  BoundedArrayType& rPlasticStrainIncrement,
275  const Matrix& rConstitutiveMatrix,
277  const double CharacteristicLength,
278  const Vector& rPlasticStrain,
279  const Vector& rBackStressVector
280  )
281  {
284  double J2, tensile_indicator_factor, compression_indicator_factor, slope, hardening_parameter, equivalent_plastic_strain;
285 
286  YieldSurfaceType::CalculateEquivalentStress( rPredictiveStressVector, rStrainVector, rUniaxialStress, rValues);
287  const double I1 = rPredictiveStressVector[0] + rPredictiveStressVector[1] + rPredictiveStressVector[2];
288  AdvancedConstitutiveLawUtilities<VoigtSize>::CalculateJ2Invariant(rPredictiveStressVector, I1, deviator, J2);
289  CalculateDerivativeYieldSurface(rPredictiveStressVector, deviator, J2, rYieldSurfaceDerivative, rValues);
290  CalculateDerivativePlasticPotential(rPredictiveStressVector, deviator, J2, rDerivativePlasticPotential, rValues);
291  CalculateIndicatorsFactors(rPredictiveStressVector, tensile_indicator_factor,compression_indicator_factor);
292  CalculatePlasticDissipation(rPredictiveStressVector, tensile_indicator_factor,compression_indicator_factor, rPlasticStrainIncrement,rPlasticDissipation, h_capa, rValues, CharacteristicLength);
293  CalculateEquivalentPlasticStrain(rPredictiveStressVector, rUniaxialStress, rPlasticStrain, tensile_indicator_factor, rValues, equivalent_plastic_strain);
294  CalculateEquivalentStressThreshold(rPlasticDissipation, tensile_indicator_factor,compression_indicator_factor, rThreshold, slope, rValues, equivalent_plastic_strain, CharacteristicLength);
295  CalculateHardeningParameter(rDerivativePlasticPotential, slope, h_capa, hardening_parameter);
296  CalculatePlasticDenominator(rYieldSurfaceDerivative, rDerivativePlasticPotential, rConstitutiveMatrix, hardening_parameter, rPlasticDenominator, rBackStressVector, rValues);
297 
298  return rUniaxialStress - rThreshold;
299  }
300 
310  const BoundedArrayType& rPredictiveStressVector,
311  const BoundedArrayType& rDeviator,
312  const double J2,
313  BoundedArrayType& rDerivativeYieldSurface,
315  )
316  {
317  YieldSurfaceType::CalculateYieldSurfaceDerivative(rPredictiveStressVector, rDeviator, J2, rDerivativeYieldSurface, rValues);
318  }
319 
330  static void CalculateBackStress(
331  BoundedArrayType& rPredictiveStressVector,
333  const Vector& rPreviousStressVector,
334  const Vector& rPlasticStrainIncrement,
335  Vector& rBackStressVector
336  )
337  {
338  const Vector& r_kinematic_parameters = rValues.GetMaterialProperties()[KINEMATIC_PLASTICITY_PARAMETERS];
339  const unsigned int kinematic_hardening_type = rValues.GetMaterialProperties()[KINEMATIC_HARDENING_TYPE];
340 
341  switch (static_cast<KinematicHardeningType>(kinematic_hardening_type))
342  {
343  double pDot, denominator, dot_product_dp;
345  KRATOS_ERROR_IF(r_kinematic_parameters.size() == 0) << "Kinematic Parameters not defined..." << std::endl;
346  rBackStressVector += 2.0 / 3.0 * r_kinematic_parameters[0] * rPlasticStrainIncrement;
347  break;
348 
350  KRATOS_ERROR_IF(r_kinematic_parameters.size() < 2) << "Kinematic Parameters not defined..." << std::endl;
351  dot_product_dp = 0.0;
352  for (IndexType i = 0; i < rPlasticStrainIncrement.size(); ++i) {
353  dot_product_dp += rPlasticStrainIncrement[i] * rPlasticStrainIncrement[i];
354  }
355  pDot = std::sqrt(2.0 / 3.0 * dot_product_dp);
356  denominator = 1.0 + (r_kinematic_parameters[1] * pDot);
357  rBackStressVector = (rBackStressVector + ((2.0 / 3.0 * r_kinematic_parameters[0]) * rPlasticStrainIncrement)) / denominator;
358  break;
359 
361  KRATOS_ERROR_IF(r_kinematic_parameters.size() != 3) << "Kinematic Parameters not defined..." << std::endl;
362  dot_product_dp = 0.0;
363  for (IndexType i = 0; i < rPlasticStrainIncrement.size(); ++i) {
364  dot_product_dp += rPlasticStrainIncrement[i] * rPlasticStrainIncrement[i];
365  }
366  pDot = std::sqrt(2.0 / 3.0 * dot_product_dp);
367  denominator = 1.0 + (r_kinematic_parameters[1] * pDot);
368  if (pDot > tolerance) {
369  rBackStressVector = (rBackStressVector + ((2.0 / 3.0 * r_kinematic_parameters[0]) * rPlasticStrainIncrement)) / denominator;
370  } else {
371  const Vector& r_delta_stress = rPredictiveStressVector - rPreviousStressVector;
372  rBackStressVector = (rBackStressVector + ((2.0 / 3.0 * r_kinematic_parameters[0]) * rPlasticStrainIncrement) +
373  r_kinematic_parameters[2] * r_delta_stress) / denominator;
374  }
375  break;
376  default:
377  KRATOS_ERROR << " The Kinematic hardening type of plasticity is not set or wrong..." << kinematic_hardening_type << std::endl;
378  break;
379  }
380  }
381 
391  const BoundedArrayType& rPredictiveStressVector,
392  const BoundedArrayType& rDeviator,
393  const double J2,
394  BoundedArrayType& rDerivativePlasticPotential,
396  )
397  {
398  YieldSurfaceType::CalculatePlasticPotentialDerivative(rPredictiveStressVector, rDeviator, J2, rDerivativePlasticPotential, rValues);
399  }
400 
408  const BoundedArrayType& rPredictiveStressVector,
409  double& rTensileIndicatorFactor,
410  double& rCompressionIndicatorFactor
411  )
412  {
414  rPredictiveStressVector,rTensileIndicatorFactor,rCompressionIndicatorFactor);
415  }
416 
429  const BoundedArrayType& rPredictiveStressVector,
430  const double TensileIndicatorFactor,
431  const double CompressionIndicatorFactor,
432  const Vector& PlasticStrainInc,
433  double& rPlasticDissipation,
434  BoundedArrayType& rHCapa,
436  const double CharacteristicLength
437  )
438  {
440  rPredictiveStressVector,TensileIndicatorFactor,CompressionIndicatorFactor,
441  PlasticStrainInc,rPlasticDissipation,rHCapa,rValues,CharacteristicLength);
442  }
443 
456  const double PlasticDissipation,
457  const double TensileIndicatorFactor,
458  const double CompressionIndicatorFactor,
459  double& rEquivalentStressThreshold,
460  double& rSlope,
462  const double EquivalentPlasticStrain,
463  const double CharacteristicLength
464  )
465  {
467  PlasticDissipation,TensileIndicatorFactor,CompressionIndicatorFactor,rEquivalentStressThreshold,
468  rSlope,rValues,EquivalentPlasticStrain,CharacteristicLength);
469  }
470 
481  const double PlasticDissipation,
482  const double TensileIndicatorFactor,
483  const double CompressionIndicatorFactor,
484  double& rEquivalentStressThreshold,
485  double& rSlope,
487  )
488  {
490  PlasticDissipation,TensileIndicatorFactor,CompressionIndicatorFactor,rEquivalentStressThreshold,rSlope,rValues);
491  }
492 
503  const double PlasticDissipation,
504  const double TensileIndicatorFactor,
505  const double CompressionIndicatorFactor,
506  double& rEquivalentStressThreshold,
507  double& rSlope,
509  const double CharacteristicLength
510  )
511  {
513  PlasticDissipation,TensileIndicatorFactor,CompressionIndicatorFactor,rEquivalentStressThreshold,rSlope,rValues,CharacteristicLength);
514  }
515 
526  const double PlasticDissipation,
527  const double TensileIndicatorFactor,
528  const double CompressionIndicatorFactor,
529  double& rEquivalentStressThreshold,
530  double& rSlope,
532  )
533  {
535  PlasticDissipation,TensileIndicatorFactor,CompressionIndicatorFactor,rEquivalentStressThreshold,rSlope,rValues);
536  }
537 
548  const double PlasticDissipation,
549  const double TensileIndicatorFactor,
550  const double CompressionIndicatorFactor,
551  double& rEquivalentStressThreshold,
552  double& rSlope,
554  )
555  {
557  PlasticDissipation,TensileIndicatorFactor,CompressionIndicatorFactor,rEquivalentStressThreshold,rSlope,rValues);
558  }
559 
572  const double PlasticDissipation,
573  const double TensileIndicatorFactor,
574  const double CompressionIndicatorFactor,
575  double& rEquivalentStressThreshold,
576  double& rSlope,
578  const double EquivalentPlasticStrain,
579  const double CharacteristicLength
580  )
581  {
583  PlasticDissipation,TensileIndicatorFactor,CompressionIndicatorFactor,rEquivalentStressThreshold,rSlope,rValues,
584  EquivalentPlasticStrain,CharacteristicLength);
585  }
586 
597  const Vector& rStressVector,
598  const double UniaxialStress,
599  const Vector& rPlasticStrain,
600  const double r0,
602  double& rEquivalentPlasticStrain
603  )
604  {
606  rStressVector,UniaxialStress,rPlasticStrain,r0,rValues,rEquivalentPlasticStrain);
607  }
608 
614  static void GetInitialUniaxialThreshold(ConstitutiveLaw::Parameters& rValues, double& rThreshold)
615  {
616  TYieldSurfaceType::GetInitialUniaxialThreshold(rValues, rThreshold);
617  }
618 
627  const BoundedArrayType& rGFlux,
628  const double SlopeThreshold,
629  const BoundedArrayType& rHCapa,
630  double& rHardeningParameter
631  )
632  {
634  rGFlux,SlopeThreshold,rHCapa,rHardeningParameter);
635  }
636 
647  const BoundedArrayType& rFFlux,
648  const BoundedArrayType& rGFlux,
649  const Matrix& rConstitutiveMatrix,
650  double& rHardeningParameter,
651  double& rPlasticDenominator,
652  const Vector& rBackStressVector,
654  )
655  {
656  const Vector& r_kinematic_parameters = rValues.GetMaterialProperties()[KINEMATIC_PLASTICITY_PARAMETERS];
657  const int kinematic_hardening_type = rValues.GetMaterialProperties()[KINEMATIC_HARDENING_TYPE];
658 
659  const BoundedArrayType delta_vector = prod(rGFlux, rConstitutiveMatrix);
660  double A1 = 0.0;
661  for (IndexType i = 0; i < VoigtSize; ++i) {
662  A1 += rFFlux[i] * delta_vector[i];
663  }
664  if (r_kinematic_parameters.size() == 3) {
665  A1 *= (1.0 - r_kinematic_parameters[2]);
666  } // Araujo case with 3 params
667 
668  double dot_fflux_gflux = 0.0, A2;
669  for (IndexType i = 0; i < VoigtSize; ++i) {
670  dot_fflux_gflux += rFFlux[i] * rGFlux[i];
671  }
672  const double two_thirds = 2.0 / 3.0;
673  double dot_fflux_backstress = 0.0, dot_gflux_gflux = 0.0;
674  switch (static_cast<KinematicHardeningType>(kinematic_hardening_type))
675  {
677  A2 = two_thirds * r_kinematic_parameters[0] * dot_fflux_gflux;
678  break;
679 
681  A2 = two_thirds * r_kinematic_parameters[0] * dot_fflux_gflux;
682  for (IndexType i = 0; i < VoigtSize; ++i) {
683  dot_fflux_backstress += rFFlux[i] * rBackStressVector[i];
684  }
685  for (IndexType i = 0; i < VoigtSize; ++i) {
686  dot_gflux_gflux += rGFlux[i] * rGFlux[i];
687  }
688  A2 -= r_kinematic_parameters[1] * dot_fflux_backstress * std::sqrt(two_thirds * dot_gflux_gflux);
689  break;
690 
692  A2 = two_thirds * r_kinematic_parameters[0] * dot_fflux_gflux;
693  for (IndexType i = 0; i < VoigtSize; ++i) {
694  dot_fflux_backstress += rFFlux[i] * rBackStressVector[i];
695  }
696  for (IndexType i = 0; i < VoigtSize; ++i) {
697  dot_gflux_gflux += rGFlux[i] * rGFlux[i];
698  }
699  A2 -= r_kinematic_parameters[1] * dot_fflux_backstress * std::sqrt(two_thirds * dot_gflux_gflux);
700  break;
701 
702  default:
703  KRATOS_ERROR << " The Kinematic hardening type of plasticity is not set or wrong..." << kinematic_hardening_type << std::endl;
704  break;
705  }
706 
707  const double A3 = rHardeningParameter;
708  rPlasticDenominator = 1.0 / (A1 + A2 + A3);
709 
710  if (r_kinematic_parameters.size() == 3) {
711  rPlasticDenominator *= (1.0 - r_kinematic_parameters[2]);
712  } // Araujo case with 3 params
713  }
714 
719  static int Check(const Properties& rMaterialProperties)
720  {
721  // Checking is defined
722  KRATOS_ERROR_IF_NOT(rMaterialProperties.Has(YOUNG_MODULUS)) << "HARDENING_CURVE is not a defined value" << std::endl;
723  KRATOS_ERROR_IF_NOT(rMaterialProperties.Has(HARDENING_CURVE)) << "HARDENING_CURVE is not a defined value" << std::endl;
724  KRATOS_ERROR_IF_NOT(rMaterialProperties.Has(FRACTURE_ENERGY)) << "FRACTURE_ENERGY is not a defined value" << std::endl;
725 
726  // Checking curves
727  const int curve_type = rMaterialProperties[HARDENING_CURVE];
729  KRATOS_ERROR_IF_NOT(rMaterialProperties.Has(MAXIMUM_STRESS)) << "MAXIMUM_STRESS is not a defined value" << std::endl;
730  KRATOS_ERROR_IF_NOT(rMaterialProperties.Has(MAXIMUM_STRESS_POSITION)) << "MAXIMUM_STRESS_POSITION is not a defined value" << std::endl;
731  } else if (static_cast<HardeningCurveType>(curve_type) == HardeningCurveType::CurveFittingHardening) {
732  KRATOS_ERROR_IF_NOT(rMaterialProperties.Has(CURVE_FITTING_PARAMETERS)) << "CURVE_FITTING_PARAMETERS is not a defined value" << std::endl;
733  KRATOS_ERROR_IF_NOT(rMaterialProperties.Has(PLASTIC_STRAIN_INDICATORS)) << "PLASTIC_STRAIN_INDICATORS is not a defined value" << std::endl;
734  }
735 
736  if (!rMaterialProperties.Has(YIELD_STRESS)) {
737  KRATOS_ERROR_IF_NOT(rMaterialProperties.Has(YIELD_STRESS_TENSION)) << "YIELD_STRESS_TENSION is not a defined value" << std::endl;
738  KRATOS_ERROR_IF_NOT(rMaterialProperties.Has(YIELD_STRESS_COMPRESSION)) << "YIELD_STRESS_COMPRESSION is not a defined value" << std::endl;
739 
740  const double yield_compression = rMaterialProperties[YIELD_STRESS_COMPRESSION];
741  const double yield_tension = rMaterialProperties[YIELD_STRESS_TENSION];
742 
743  KRATOS_ERROR_IF(yield_compression < tolerance) << "Yield stress in compression almost zero or negative, include YIELD_STRESS_COMPRESSION in definition";
744  KRATOS_ERROR_IF(yield_tension < tolerance) << "Yield stress in tension almost zero or negative, include YIELD_STRESS_TENSION in definition";
745  } else {
746  const double yield_stress = rMaterialProperties[YIELD_STRESS];
747 
748  KRATOS_ERROR_IF(yield_stress < tolerance) << "Yield stress almost zero or negative, include YIELD_STRESS in definition";
749  }
750 
751  return TYieldSurfaceType::Check(rMaterialProperties);
752  }
753 
757 
761 
765 
769 
771 
772  protected:
775 
779 
783 
787 
791 
795 
799 
801 
802  private:
805 
809 
813 
817 
821 
825 
829 
831 
832 }; // Class GenericYieldSurface
833 
835 
838 
842 
844 
845 } // namespace Kratos.
static void CalculateJ2Invariant(const TVector &rStressVector, const double I1, BoundedVectorType &rDeviator, double &rJ2)
This method computes the second invariant of J.
Definition: advanced_constitutive_law_utilities.h:157
This object integrates the predictive stress using the plasticity theory by means of linear/exponenti...
Definition: generic_cl_integrator_kinematic_plasticity.h:69
HardeningCurveType
Definition: generic_cl_integrator_kinematic_plasticity.h:106
GenericConstitutiveLawIntegratorKinematicPlasticity & operator=(GenericConstitutiveLawIntegratorKinematicPlasticity const &rOther)
Assignment operator.
Definition: generic_cl_integrator_kinematic_plasticity.h:136
TYieldSurfaceType YieldSurfaceType
The type of yield surface.
Definition: generic_cl_integrator_kinematic_plasticity.h:81
static void CalculateEquivalentStressThresholdHardeningCurvePerfectPlasticity(const double PlasticDissipation, const double TensileIndicatorFactor, const double CompressionIndicatorFactor, double &rEquivalentStressThreshold, double &rSlope, ConstitutiveLaw::Parameters &rValues)
This method computes the uniaxial threshold using a perfect plasticity law.
Definition: generic_cl_integrator_kinematic_plasticity.h:547
KinematicHardeningType
Definition: generic_cl_integrator_kinematic_plasticity.h:115
static constexpr SizeType Dimension
The define the working dimension size, already defined in the yield surface.
Definition: generic_cl_integrator_kinematic_plasticity.h:84
GenericConstitutiveLawIntegratorKinematicPlasticity()
Initialization constructor.
Definition: generic_cl_integrator_kinematic_plasticity.h:126
BoundedMatrix< double, Dimension, Dimension > BoundedMatrixType
The definition of the bounded matrix type.
Definition: generic_cl_integrator_kinematic_plasticity.h:93
std::size_t IndexType
Definition of index.
Definition: generic_cl_integrator_kinematic_plasticity.h:78
static void CalculateEquivalentStressThresholdHardeningCurveLinearSoftening(const double PlasticDissipation, const double TensileIndicatorFactor, const double CompressionIndicatorFactor, double &rEquivalentStressThreshold, double &rSlope, ConstitutiveLaw::Parameters &rValues)
This method computes the uniaxial threshold using a linear softening.
Definition: generic_cl_integrator_kinematic_plasticity.h:480
static void CalculatePlasticDissipation(const BoundedArrayType &rPredictiveStressVector, const double TensileIndicatorFactor, const double CompressionIndicatorFactor, const Vector &PlasticStrainInc, double &rPlasticDissipation, BoundedArrayType &rHCapa, ConstitutiveLaw::Parameters &rValues, const double CharacteristicLength)
This method computes the plastic dissipation of the plasticity model.
Definition: generic_cl_integrator_kinematic_plasticity.h:428
YieldSurfaceType::PlasticPotentialType PlasticPotentialType
The type of plastic potential.
Definition: generic_cl_integrator_kinematic_plasticity.h:96
static constexpr SizeType VoigtSize
The define the Voigt size, already defined in the yield surface.
Definition: generic_cl_integrator_kinematic_plasticity.h:87
static void CalculateEquivalentPlasticStrain(const Vector &rStressVector, const double UniaxialStress, const Vector &rPlasticStrain, const double r0, ConstitutiveLaw::Parameters &rValues, double &rEquivalentPlasticStrain)
This method returns the equivalent plastic strain.
Definition: generic_cl_integrator_kinematic_plasticity.h:596
static void IntegrateStressVector(BoundedArrayType &rPredictiveStressVector, Vector &rStrainVector, double &rUniaxialStress, double &rThreshold, double &rPlasticDenominator, BoundedArrayType &rYieldSurfaceDerivative, BoundedArrayType &rDerivativePlasticPotential, double &rPlasticDissipation, BoundedArrayType &rPlasticStrainIncrement, Matrix &rConstitutiveMatrix, Vector &rPlasticStrain, ConstitutiveLaw::Parameters &rValues, const double CharacteristicLength, Vector &rBackStressVector, const Vector &rPreviousStressVector)
This method integrates the predictive stress vector with the CL using differents evolution laws using...
Definition: generic_cl_integrator_kinematic_plasticity.h:172
static double CalculatePlasticParameters(BoundedArrayType &rPredictiveStressVector, Vector &rStrainVector, double &rUniaxialStress, double &rThreshold, double &rPlasticDenominator, BoundedArrayType &rYieldSurfaceDerivative, BoundedArrayType &rDerivativePlasticPotential, double &rPlasticDissipation, BoundedArrayType &rPlasticStrainIncrement, const Matrix &rConstitutiveMatrix, ConstitutiveLaw::Parameters &rValues, const double CharacteristicLength, const Vector &rPlasticStrain, const Vector &rBackStressVector)
This method calculates all the plastic parameters required for the integration of the PredictiveStres...
Definition: generic_cl_integrator_kinematic_plasticity.h:265
array_1d< double, VoigtSize > BoundedArrayType
The definition of the Voigt array type.
Definition: generic_cl_integrator_kinematic_plasticity.h:90
static void CalculateDerivativeYieldSurface(const BoundedArrayType &rPredictiveStressVector, const BoundedArrayType &rDeviator, const double J2, BoundedArrayType &rDerivativeYieldSurface, ConstitutiveLaw::Parameters &rValues)
This method calculates the derivative of the yield surface.
Definition: generic_cl_integrator_kinematic_plasticity.h:309
static void CalculateEquivalentStressThresholdCurveFittingHardening(const double PlasticDissipation, const double TensileIndicatorFactor, const double CompressionIndicatorFactor, double &rEquivalentStressThreshold, double &rSlope, ConstitutiveLaw::Parameters &rValues, const double EquivalentPlasticStrain, const double CharacteristicLength)
This method computes the uniaxial threshold using a perfect plasticity law.
Definition: generic_cl_integrator_kinematic_plasticity.h:571
static void CalculateEquivalentStressThresholdHardeningCurveInitialHardeningExponentialSoftening(const double PlasticDissipation, const double TensileIndicatorFactor, const double CompressionIndicatorFactor, double &rEquivalentStressThreshold, double &rSlope, ConstitutiveLaw::Parameters &rValues)
This method computes the uniaxial threshold using a hardening-softening law.
Definition: generic_cl_integrator_kinematic_plasticity.h:525
static void CalculateEquivalentStressThresholdHardeningCurveExponentialSoftening(const double PlasticDissipation, const double TensileIndicatorFactor, const double CompressionIndicatorFactor, double &rEquivalentStressThreshold, double &rSlope, ConstitutiveLaw::Parameters &rValues, const double CharacteristicLength)
This method computes the uniaxial threshold using a exponential softening.
Definition: generic_cl_integrator_kinematic_plasticity.h:502
static void CalculateEquivalentStressThreshold(const double PlasticDissipation, const double TensileIndicatorFactor, const double CompressionIndicatorFactor, double &rEquivalentStressThreshold, double &rSlope, ConstitutiveLaw::Parameters &rValues, const double EquivalentPlasticStrain, const double CharacteristicLength)
This method computes the uniaxial threshold that differentiates the elastic-plastic behaviour.
Definition: generic_cl_integrator_kinematic_plasticity.h:455
KRATOS_CLASS_POINTER_DEFINITION(GenericConstitutiveLawIntegratorKinematicPlasticity)
Counted pointer of GenericConstitutiveLawIntegratorKinematicPlasticity.
static void GetInitialUniaxialThreshold(ConstitutiveLaw::Parameters &rValues, double &rThreshold)
This method returns the initial uniaxial stress threshold.
Definition: generic_cl_integrator_kinematic_plasticity.h:614
static void CalculatePlasticDenominator(const BoundedArrayType &rFFlux, const BoundedArrayType &rGFlux, const Matrix &rConstitutiveMatrix, double &rHardeningParameter, double &rPlasticDenominator, const Vector &rBackStressVector, ConstitutiveLaw::Parameters &rValues)
This method computes the plastic denominator needed to compute the plastic consistency factor.
Definition: generic_cl_integrator_kinematic_plasticity.h:646
static void CalculateHardeningParameter(const BoundedArrayType &rGFlux, const double SlopeThreshold, const BoundedArrayType &rHCapa, double &rHardeningParameter)
This method computes hardening parameter needed for the algorithm.
Definition: generic_cl_integrator_kinematic_plasticity.h:626
virtual ~GenericConstitutiveLawIntegratorKinematicPlasticity()
Destructor.
Definition: generic_cl_integrator_kinematic_plasticity.h:142
static int Check(const Properties &rMaterialProperties)
This method defines in the CL integrator.
Definition: generic_cl_integrator_kinematic_plasticity.h:719
static void CalculateDerivativePlasticPotential(const BoundedArrayType &rPredictiveStressVector, const BoundedArrayType &rDeviator, const double J2, BoundedArrayType &rDerivativePlasticPotential, ConstitutiveLaw::Parameters &rValues)
This method calculates the derivative of the plastic potential.
Definition: generic_cl_integrator_kinematic_plasticity.h:390
static void CalculateIndicatorsFactors(const BoundedArrayType &rPredictiveStressVector, double &rTensileIndicatorFactor, double &rCompressionIndicatorFactor)
This method computes the tensile/compressive indicators.
Definition: generic_cl_integrator_kinematic_plasticity.h:407
static void CalculateTangentMatrix(Matrix &rTangent, const Matrix &rElasticMatrix, const array_1d< double, VoigtSize > &rFFluxVector, const array_1d< double, VoigtSize > &rGFluxVector, const double Denominator)
This method calculates the analytical tangent tensor.
Definition: generic_cl_integrator_kinematic_plasticity.h:238
static void CalculateBackStress(BoundedArrayType &rPredictiveStressVector, ConstitutiveLaw::Parameters &rValues, const Vector &rPreviousStressVector, const Vector &rPlasticStrainIncrement, Vector &rBackStressVector)
This method computes the back stress for the kinematic plasticity This method has 3 different ways of...
Definition: generic_cl_integrator_kinematic_plasticity.h:330
static constexpr double tolerance
The machine precision tolerance.
Definition: generic_cl_integrator_kinematic_plasticity.h:75
GenericConstitutiveLawIntegratorKinematicPlasticity(GenericConstitutiveLawIntegratorKinematicPlasticity const &rOther)
Copy constructor.
Definition: generic_cl_integrator_kinematic_plasticity.h:131
static void CalculateEquivalentStressThresholdHardeningCurvePerfectPlasticity(const double PlasticDissipation, const double TensileIndicatorFactor, const double CompressionIndicatorFactor, double &rEquivalentStressThreshold, double &rSlope, ConstitutiveLaw::Parameters &rValues)
This method computes the uniaxial threshold using a perfect plasticity law.
Definition: generic_cl_integrator_plasticity.h:644
static void CalculatePlasticDissipation(const array_1d< double, VoigtSize > &rPredictiveStressVector, const double TensileIndicatorFactor, const double CompressionIndicatorFactor, const Vector &PlasticStrainInc, double &rPlasticDissipation, array_1d< double, VoigtSize > &rHCapa, ConstitutiveLaw::Parameters &rValues, const double CharacteristicLength)
This method computes the plastic dissipation of the plasticity model.
Definition: generic_cl_integrator_plasticity.h:383
static void CalculateIndicatorsFactors(const array_1d< double, VoigtSize > &rPredictiveStressVector, double &rTensileIndicatorFactor, double &rCompressionIndicatorFactor)
This method computes the tensile/compressive indicators.
Definition: generic_cl_integrator_plasticity.h:329
static void CalculateHardeningParameter(const array_1d< double, VoigtSize > &rGFlux, const double SlopeThreshold, const array_1d< double, VoigtSize > &rHCapa, double &rHardeningParameter)
This method computes hardening parameter needed for the algorithm.
Definition: generic_cl_integrator_plasticity.h:934
static void CalculateEquivalentStressThresholdHardeningCurveInitialHardeningExponentialSoftening(const double PlasticDissipation, const double TensileIndicatorFactor, const double CompressionIndicatorFactor, double &rEquivalentStressThreshold, double &rSlope, ConstitutiveLaw::Parameters &rValues)
This method computes the uniaxial threshold using a hardening-softening law.
Definition: generic_cl_integrator_plasticity.h:605
static void CalculateEquivalentPlasticStrain(const Vector &rStressVector, const double UniaxialStress, const Vector &rPlasticStrain, const double r0, ConstitutiveLaw::Parameters &rValues, double &rEquivalentPlasticStrain)
This method returns the equivalent plastic strain.
Definition: generic_cl_integrator_plasticity.h:898
static void CalculateEquivalentStressThresholdHardeningCurveLinearSoftening(const double PlasticDissipation, const double TensileIndicatorFactor, const double CompressionIndicatorFactor, double &rEquivalentStressThreshold, double &rSlope, ConstitutiveLaw::Parameters &rValues)
This method computes the uniaxial threshold using a linear softening.
Definition: generic_cl_integrator_plasticity.h:533
static void CalculateEquivalentStressThresholdHardeningCurveExponentialSoftening(const double PlasticDissipation, const double TensileIndicatorFactor, const double CompressionIndicatorFactor, double &rEquivalentStressThreshold, double &rSlope, ConstitutiveLaw::Parameters &rValues, const double CharacteristicLength)
This method computes the uniaxial threshold using a exponential softening.
Definition: generic_cl_integrator_plasticity.h:567
static void CalculateEquivalentStressThreshold(const double PlasticDissipation, const double TensileIndicatorFactor, const double CompressionIndicatorFactor, double &rEquivalentStressThreshold, double &rSlope, ConstitutiveLaw::Parameters &rValues, const double EquivalentPlasticStrain, const double CharacteristicLength)
This method computes the uniaxial threshold that differentiates the elastic-plastic behaviour.
Definition: generic_cl_integrator_plasticity.h:446
static void CalculateEquivalentStressThresholdCurveFittingHardening(const double PlasticDissipation, const double TensileIndicatorFactor, const double CompressionIndicatorFactor, double &rEquivalentStressThreshold, double &rSlope, ConstitutiveLaw::Parameters &rValues, const double EquivalentPlasticStrain, const double CharacteristicLength)
This method computes the uniaxial threshold using a perfect plasticity law.
Definition: generic_cl_integrator_plasticity.h:671
Definition: amatrix_interface.h:41
void resize(std::size_t NewSize1, std::size_t NewSize2, bool preserve=0)
Definition: amatrix_interface.h:224
Properties encapsulates data shared by different Elements or Conditions. It can store any type of dat...
Definition: properties.h:69
TVariableType::Type & GetValue(const TVariableType &rVariable)
Definition: properties.h:228
bool Has(TVariableType const &rThisVariable) const
Definition: properties.h:578
#define KRATOS_ERROR
Definition: exception.h:161
#define KRATOS_ERROR_IF_NOT(conditional)
Definition: exception.h:163
#define KRATOS_ERROR_IF(conditional)
Definition: exception.h:162
#define KRATOS_WARNING_IF(label, conditional)
Definition: logger.h:266
iteration
Definition: DEM_benchmarks.py:172
REF: G. R. Cowper, GAUSSIAN QUADRATURE FORMULAS FOR TRIANGLES.
Definition: mesh_condition.cpp:21
KratosZeroVector< double > ZeroVector
Definition: amatrix_interface.h:561
Internals::Matrix< double, AMatrix::dynamic, 1 > Vector
Definition: amatrix_interface.h:472
AMatrix::MatrixProductExpression< TExpression1Type, TExpression2Type > prod(AMatrix::MatrixExpression< TExpression1Type, TCategory1 > const &First, AMatrix::MatrixExpression< TExpression2Type, TCategory2 > const &Second)
Definition: amatrix_interface.h:568
AMatrix::VectorOuterProductExpression< TExpression1Type, TExpression2Type > outer_prod(AMatrix::MatrixExpression< TExpression1Type, TCategory1 > const &First, AMatrix::MatrixExpression< TExpression2Type, TCategory2 > const &Second)
Definition: amatrix_interface.h:582
std::size_t SizeType
The definition of the size type.
Definition: mortar_classes.h:43
T & noalias(T &TheMatrix)
Definition: amatrix_interface.h:484
int max_iter
Definition: hinsberg_optimization.py:139
float J2
Definition: isotropic_damage_automatic_differentiation.py:133
I1
Definition: isotropic_damage_automatic_differentiation.py:230
integer i
Definition: TensorModule.f:17
Definition: constitutive_law.h:189
const Properties & GetMaterialProperties()
Definition: constitutive_law.h:457