54 template <SizeType TVoigtSize = 6>
107 const double CurrentStress,
108 double& rMaximumStress,
109 double& rMinimumStress,
110 const Vector& PreviousStresses,
114 const double stress_1 = PreviousStresses[1];
115 const double stress_2 = PreviousStresses[0];
116 const double stress_increment_1 = stress_1 - stress_2;
117 const double stress_increment_2 = CurrentStress - stress_1;
118 if (stress_increment_1 > 1.0e-3 && stress_increment_2 < -1.0e-3) {
119 rMaximumStress = stress_1;
120 rMaxIndicator =
true;
121 }
else if (stress_increment_1 < -1.0e-3 && stress_increment_2 > 1.0e-3) {
122 rMinimumStress = stress_1;
123 rMinIndicator =
true;
137 double abs_component = 0.0, average_component = 0.0, sum_abs = 0.0, sum_average = 0.0;
138 for (
unsigned int i = 0;
i < principal_stresses.
size(); ++
i) {
139 abs_component = std::abs(principal_stresses[
i]);
140 average_component = 0.5 * (principal_stresses[
i] + abs_component);
141 sum_average += average_component;
142 sum_abs += abs_component;
144 const double pre_indicator = sum_average / sum_abs;
145 if (pre_indicator < 0.5) {
159 return MinStress / MaxStress;
172 double ReversionFactor,
179 const Vector& r_fatigue_coefficients = rMaterialParameters[HIGH_CYCLE_FATIGUE_COEFFICIENTS];
180 double ultimate_stress = rMaterialParameters.
Has(YIELD_STRESS) ? rMaterialParameters[YIELD_STRESS] : rMaterialParameters[YIELD_STRESS_TENSION];
181 const double yield_stress = ultimate_stress;
185 const int softening_type = rMaterialParameters[SOFTENING_TYPE];
187 if (softening_type == curve_by_points) {
188 const Vector& stress_damage_curve = rMaterialParameters[STRESS_DAMAGE_CURVE];
189 const SizeType curve_points = stress_damage_curve.size() - 1;
191 ultimate_stress = 0.0;
193 ultimate_stress =
std::max(ultimate_stress, stress_damage_curve[
i-1]);
198 const double Se = r_fatigue_coefficients[0] * ultimate_stress;
199 const double STHR1 = r_fatigue_coefficients[1];
200 const double STHR2 = r_fatigue_coefficients[2];
201 const double ALFAF = r_fatigue_coefficients[3];
202 const double BETAF = r_fatigue_coefficients[4];
203 const double AUXR1 = r_fatigue_coefficients[5];
204 const double AUXR2 = r_fatigue_coefficients[6];
206 if (std::abs(ReversionFactor) < 1.0) {
207 rSth = Se + (ultimate_stress - Se) * std::pow((0.5 + 0.5 * ReversionFactor), STHR1);
208 rAlphat = ALFAF + (0.5 + 0.5 * ReversionFactor) * AUXR1;
210 rSth = Se + (ultimate_stress - Se) * std::pow((0.5 + 0.5 / ReversionFactor), STHR2);
211 rAlphat = ALFAF - (0.5 + 0.5 / ReversionFactor) * AUXR2;
214 const double square_betaf = std::pow(BETAF, 2.0);
215 if (MaxStress > rSth && MaxStress <= ultimate_stress) {
216 rN_f = std::pow(10.0,std::pow(-std::log((MaxStress - rSth) / (ultimate_stress - rSth))/rAlphat,(1.0/BETAF)));
217 rB0 = -(std::log(MaxStress / ultimate_stress) / std::pow((std::log10(rN_f)), square_betaf));
219 if (softening_type == curve_by_points) {
220 rN_f = std::pow(rN_f, std::pow(std::log(MaxStress / yield_stress) / std::log(MaxStress / ultimate_stress), 1.0 / square_betaf));
238 const double MaxStress,
239 unsigned int LocalNumberOfCycles,
240 unsigned int GlobalNumberOfCycles,
244 double& rFatigueReductionFactor,
245 double& rWohlerStress)
247 const double BETAF = rMaterialParameters[HIGH_CYCLE_FATIGUE_COEFFICIENTS][4];
248 if (GlobalNumberOfCycles > 2){
249 double ultimate_stress = rMaterialParameters.
Has(YIELD_STRESS) ? rMaterialParameters[YIELD_STRESS] : rMaterialParameters[YIELD_STRESS_TENSION];
253 const int softening_type = rMaterialParameters[SOFTENING_TYPE];
255 if (softening_type == curve_by_points) {
256 const Vector& stress_damage_curve = rMaterialParameters[STRESS_DAMAGE_CURVE];
257 const SizeType curve_points = stress_damage_curve.size() - 1;
259 ultimate_stress = 0.0;
261 ultimate_stress =
std::max(ultimate_stress, stress_damage_curve[
i-1]);
264 rWohlerStress = (Sth + (ultimate_stress - Sth) * std::exp(-Alphat * (std::pow(std::log10(
static_cast<double>(LocalNumberOfCycles)), BETAF)))) / ultimate_stress;
266 if (MaxStress > Sth) {
267 rFatigueReductionFactor = std::exp(-B0 * std::pow(std::log10(
static_cast<double>(LocalNumberOfCycles)), (BETAF * BETAF)));
268 rFatigueReductionFactor = (rFatigueReductionFactor < 0.01) ? 0.01 : rFatigueReductionFactor;
static void CalculatePrincipalStresses(array_1d< double, Dimension > &rPrincipalStressVector, const BoundedVectorType &rStressVector)
This method computes the principal stresses vector.
: This object computes all the required information for the high cycle fatigue constitutive law.
Definition: high_cycle_fatigue_law_integrator.h:56
HighCycleFatigueLawIntegrator()
Initialization constructor.
Definition: high_cycle_fatigue_law_integrator.h:69
static void CalculateFatigueParameters(const double MaxStress, double ReversionFactor, const Properties &rMaterialParameters, double &rB0, double &rSth, double &rAlphat, double &rN_f)
This method computes internal variables (B0, Sth and ALPHAT) of the CL.
Definition: high_cycle_fatigue_law_integrator.h:171
static double CalculateTensionCompressionFactor(const Vector &rStressVector)
This method checks if the global stress state is tension or compression; -1 for a generalized compres...
Definition: high_cycle_fatigue_law_integrator.h:131
KRATOS_CLASS_POINTER_DEFINITION(HighCycleFatigueLawIntegrator)
Counted pointer of HighCycleFatigueLawIntegrator.
static void CalculateMaximumAndMinimumStresses(const double CurrentStress, double &rMaximumStress, double &rMinimumStress, const Vector &PreviousStresses, bool &rMaxIndicator, bool &rMinIndicator)
This method checks and saves the previous stress state if it was a maximum or a minimum.
Definition: high_cycle_fatigue_law_integrator.h:106
HighCycleFatigueLawIntegrator & operator=(HighCycleFatigueLawIntegrator const &rOther)
Assignment operator.
Definition: high_cycle_fatigue_law_integrator.h:79
static void CalculateFatigueReductionFactorAndWohlerStress(const Properties &rMaterialParameters, const double MaxStress, unsigned int LocalNumberOfCycles, unsigned int GlobalNumberOfCycles, const double B0, const double Sth, const double Alphat, double &rFatigueReductionFactor, double &rWohlerStress)
This method computes the reduction factor and the wohler stress (SN curve)
Definition: high_cycle_fatigue_law_integrator.h:237
HighCycleFatigueLawIntegrator(HighCycleFatigueLawIntegrator const &rOther)
Copy constructor.
Definition: high_cycle_fatigue_law_integrator.h:74
virtual ~HighCycleFatigueLawIntegrator()
Destructor.
Definition: high_cycle_fatigue_law_integrator.h:85
static double CalculateReversionFactor(const double MaxStress, const double MinStress)
This method returns de reversion factor.
Definition: high_cycle_fatigue_law_integrator.h:157
Properties encapsulates data shared by different Elements or Conditions. It can store any type of dat...
Definition: properties.h:69
bool Has(TVariableType const &rThisVariable) const
Definition: properties.h:578
BOOST_UBLAS_INLINE size_type size() const
Definition: array_1d.h:370
std::size_t IndexType
The definition of the index type.
Definition: key_hash.h:35
static double max(double a, double b)
Definition: GeometryFunctions.h:79
REF: G. R. Cowper, GAUSSIAN QUADRATURE FORMULAS FOR TRIANGLES.
Definition: mesh_condition.cpp:21
std::size_t SizeType
The definition of the size type.
Definition: mortar_classes.h:43
integer i
Definition: TensorModule.f:17