Skip to content

Commit d26e53a

Browse files
committed
feat: Added option to postprocess Deviatoric stress
1 parent 0b1e405 commit d26e53a

File tree

4 files changed

+67
-2
lines changed

4 files changed

+67
-2
lines changed

Material/Elasticity/TPZElasticityTH.cpp

+32
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,8 @@ int TPZElasticityTH::VariableIndex(const std::string &name) const
304304
return EStrain;
305305
if (!strcmp("VonMises", name.c_str()))
306306
return EVonMises;
307+
if (!strcmp("DeviatoricStress", name.c_str()))
308+
return EDeviatoricStress;
307309

308310
std::cout << "\n\nVar index not implemented\n\n";
309311
DebugStop();
@@ -327,6 +329,7 @@ int TPZElasticityTH::NSolutionVariables(int var) const
327329
break;
328330
case EStress: // stress tensor
329331
case EStrain: // strain tensor
332+
case EDeviatoricStress: // deviatoric stress tensor
330333
aux = 9;
331334
break;
332335
default:
@@ -475,6 +478,35 @@ void TPZElasticityTH::Solution(const TPZVec<TPZMaterialDataT<STATE>> &datavec, i
475478
Solout[0] = sqrt(0.5 * Solout[0]);
476479
break;
477480
}
481+
case EDeviatoricStress:
482+
{
483+
TPZFNMatrix<6, STATE> sigmavoight(n, 1, 0.0);
484+
DeviatoricStressTensor(gradU, sigmavoight);
485+
486+
TPZFNMatrix<9, STATE> devsigma(3, 3, 0.0);
487+
int cont = fdimension - 1;
488+
for (int i = 0; i < fdimension; i++)
489+
{
490+
devsigma(i, i) = sigmavoight(i, 0);
491+
for (int j = i + 1; j < fdimension; j++)
492+
{
493+
devsigma(i, j) = sigmavoight(++cont, 0);
494+
devsigma(j, i) = sigmavoight(cont, 0);
495+
}
496+
}
497+
498+
if (fAnalysisType == AnalysisType::EPlaneStrain)
499+
devsigma(2, 2) = fthickness * fpoisson * (devsigma(0, 0) + devsigma(1, 1));
500+
501+
for (int i = 0; i < 3; i++)
502+
{
503+
for (int j = 0; j < 3; j++)
504+
{
505+
Solout[i * 3 + j] = devsigma(i, j);
506+
}
507+
}
508+
break;
509+
}
478510

479511
default:
480512
{

Material/Elasticity/TPZElasticityTH.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,9 @@ class TPZElasticityTH : public TPZMatBase<STATE, TPZMatCombinedSpacesT<STATE>, T
130130

131131
virtual void StressTensor(const TPZFNMatrix<10, STATE>& gradU, TPZFNMatrix<6,REAL>& sigma, REAL pressure); //This function computes sigma through its deviatoric and hidrostatic counterparts
132132

133-
enum SolutionVars {ENone = -1, EPressure = 0, EDisplacement = 1, EForce = 2, EStress = 3, EStrain = 4, EVonMises = 5};
133+
enum SolutionVars {ENone = -1, EPressure = 0, EDisplacement = 1, EForce = 2, EStress = 3, EStrain = 4, EVonMises = 5, EDeviatoricStress = 6};
134+
135+
134136
};
135137

136138
#endif

Material/Elasticity/TPZHybridMixedElasticityUP.cpp

+31
Original file line numberDiff line numberDiff line change
@@ -388,6 +388,7 @@ int TPZHybridMixedElasticityUP::VariableIndex(const std::string& name) const {
388388
if(!strcmp("Stress", name.c_str())) return EStress;
389389
if(!strcmp("Strain", name.c_str())) return EStrain;
390390
if(!strcmp("VonMises", name.c_str())) return EVonMises;
391+
if(!strcmp("DeviatoricStress", name.c_str())) return EDeviatoricStress;
391392

392393
std::cout << "\n\nVar index not implemented\n\n";
393394
DebugStop();
@@ -409,6 +410,7 @@ int TPZHybridMixedElasticityUP::NSolutionVariables(int var) const{
409410
break;
410411
case EStress: // stress tensor
411412
case EStrain: // strain tensor
413+
case EDeviatoricStress: // deviatoric stress tensor
412414
aux = 9;
413415
break;
414416
default:
@@ -555,6 +557,35 @@ void TPZHybridMixedElasticityUP::Solution(const TPZVec<TPZMaterialDataT<STATE>>&
555557
std::cout << "\n\nVar index not implemented\n\n";
556558
DebugStop();
557559
}
560+
case EDeviatoricStress:
561+
{
562+
TPZFNMatrix<6, STATE> sigmavoight(n, 1, 0.0);
563+
DeviatoricStressTensor(gradU, sigmavoight);
564+
565+
TPZFNMatrix<9, STATE> devsigma(3, 3, 0.0);
566+
int cont = fdimension-1;
567+
for (int i = 0; i < fdimension; i++)
568+
{
569+
devsigma(i,i) = sigmavoight(i,0);
570+
for (int j = i+1; j < fdimension; j++)
571+
{
572+
devsigma(i,j) = sigmavoight(++cont,0);
573+
devsigma(j,i) = sigmavoight(cont,0);
574+
}
575+
}
576+
577+
if (fAnalysisType == AnalysisType::EPlaneStrain)
578+
devsigma(2,2) = fthickness * fpoisson * (devsigma(0,0) + devsigma(1,1));
579+
580+
for (int i = 0; i < 3; i++)
581+
{
582+
for (int j = 0; j < 3; j++)
583+
{
584+
Solout[i * 3 + j] = devsigma(i, j);
585+
}
586+
}
587+
break;
588+
}
558589
}
559590
}
560591

Material/Elasticity/TPZHybridMixedElasticityUP.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ class TPZHybridMixedElasticityUP : public TPZMatBase<STATE, TPZMatCombinedSpaces
132132

133133
[[nodiscard]] virtual int IntegrationRuleOrder(const TPZVec<int> &elPMaxOrder) const override;
134134

135-
enum SolutionVars {ENone = -1, EPressure = 0, EDisplacement = 1, EForce = 2, EStress = 3, EStrain = 4, EVonMises = 5};
135+
enum SolutionVars {ENone = -1, EPressure = 0, EDisplacement = 1, EForce = 2, EStress = 3, EStrain = 4, EVonMises = 5, EDeviatoricStress = 6};
136136
};
137137

138138
#endif

0 commit comments

Comments
 (0)