-
Notifications
You must be signed in to change notification settings - Fork 90
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: plastic strain output #3384
base: develop
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we want full tensorial plastic strain, or eps?
src/coreComponents/physicsSolvers/solidMechanics/SolidMechanicsLagrangianFEM.cpp
Outdated
Show resolved
Hide resolved
Hello,
I cannot login to my github account , the two authentication steps failed every time.
Can we set up a meeting for Friday late afternoon to discuss?
Thanks
Frederic
***@***.***
Frederic Bourgeois
OneTech
OT/R&D/SU/CCS/STO
Geomechanics Manager
TotalEnergies CSTJF
Avenue Larribau, 64 018 - Pau cedex - France
From: Sy-Tuan Nguyen ***@***.***>
Sent: Thursday, December 12, 2024 3:28 AM
To: GEOS-DEV/GEOS ***@***.***>
Cc: Frederic BOURGEOIS ***@***.***>; Review requested ***@***.***>
Subject: Re: [GEOS-DEV/GEOS] feat: plastic strain output (PR #3384)
@sytuannguyen approved this pull request.
-
Reply to this email directly, view it on GitHub<#3384 (review)>, or unsubscribe<https://github.com/notifications/unsubscribe-auth/AVFX4VREYPX4EC7742P5UPL2FDYB3AVCNFSM6AAAAABPJNBBH2VHI2DSMVQWIX3LMV43YUDVNRWFEZLROVSXG5CSMV3GSZLXHMZDIOJXGQ2TSMBSGM>.
You are receiving this because your review was requested.Message ID: ***@***.******@***.***>>
|
elasticStrainInc[1] = (-nu*(m_newStress[k][q][0] - m_oldStress[k][q][0]) + (m_newStress[k][q][1] - m_oldStress[k][q][1]) - nu*(m_newStress[k][q][2] - m_oldStress[k][q][2]))/E; | ||
elasticStrainInc[2] = (-nu*(m_newStress[k][q][0] - m_oldStress[k][q][0]) - nu*(m_newStress[k][q][1] - m_oldStress[k][q][1]) + (m_newStress[k][q][2] - m_oldStress[k][q][2]))/E; | ||
|
||
elasticStrainInc[3] = (m_newStress[k][q][3] - m_oldStress[k][q][3]) / m_shearModulus[k]; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is the formula for engineering shear strain, which should be twice as that of tensorial shear strain.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yes, but I think that's what it should be because we are subtracting it from the totalStrain
which is in engineering notation. What we may want to do is divide the shear components of the plasticStrian
by 2 so that it is the actual strain. I don't know if Paraview
expects it in engineering notation though.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
was this question resolved? ChatGPT says paraview expects tensorial strain...but I think it came to that conclusion because it calculates tensorial strain.
elasticStrainInc[2] = (-nu*(m_newStress[k][q][0] - m_oldStress[k][q][0]) - nu*(m_newStress[k][q][1] - m_oldStress[k][q][1]) + (m_newStress[k][q][2] - m_oldStress[k][q][2]))/E; | ||
|
||
elasticStrainInc[3] = (m_newStress[k][q][3] - m_oldStress[k][q][3]) / m_shearModulus[k]; | ||
elasticStrainInc[4] = (m_newStress[k][q][4] - m_oldStress[k][q][4]) / m_shearModulus[k]; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
see above
|
||
elasticStrainInc[3] = (m_newStress[k][q][3] - m_oldStress[k][q][3]) / m_shearModulus[k]; | ||
elasticStrainInc[4] = (m_newStress[k][q][4] - m_oldStress[k][q][4]) / m_shearModulus[k]; | ||
elasticStrainInc[5] = (m_newStress[k][q][5] - m_oldStress[k][q][5]) / m_shearModulus[k]; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
see above
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just thinking that the total and incremental calculations are the same except for the stress inputs. These could be put into a private function so that the calculation is only done in one place.
@@ -135,6 +135,11 @@ class ElasticIsotropicUpdates : public SolidBaseUpdates | |||
localIndex const q, | |||
real64 ( &elasticStrain )[6] ) const override final; | |||
|
|||
GEOS_HOST_DEVICE | |||
virtual void getElasticStrainInc( localIndex const k, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
virtual void getElasticStrainInc( localIndex const k, | |
virtual void calculateElasticStrainInc( localIndex const k, |
Since this isn't really a "getter"
@@ -228,6 +233,23 @@ void ElasticIsotropicUpdates::getElasticStrain( localIndex const k, | |||
elasticStrain[5] = m_newStress[k][q][5] / m_shearModulus[k]; | |||
} | |||
|
|||
GEOS_HOST_DEVICE | |||
inline | |||
void ElasticIsotropicUpdates::getElasticStrainInc( localIndex const k, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
void ElasticIsotropicUpdates::getElasticStrainInc( localIndex const k, | |
void ElasticIsotropicUpdates::calculateElasticStrainInc( localIndex const k, |
elasticStrainInc[1] = (-nu*(m_newStress[k][q][0] - m_oldStress[k][q][0]) + (m_newStress[k][q][1] - m_oldStress[k][q][1]) - nu*(m_newStress[k][q][2] - m_oldStress[k][q][2]))/E; | ||
elasticStrainInc[2] = (-nu*(m_newStress[k][q][0] - m_oldStress[k][q][0]) - nu*(m_newStress[k][q][1] - m_oldStress[k][q][1]) + (m_newStress[k][q][2] - m_oldStress[k][q][2]))/E; | ||
|
||
elasticStrainInc[3] = (m_newStress[k][q][3] - m_oldStress[k][q][3]) / m_shearModulus[k]; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
was this question resolved? ChatGPT says paraview expects tensorial strain...but I think it came to that conclusion because it calculates tensorial strain.
To me, it seems like it would be weird if paraview did operations to a tensor field, as IDK how it would know to do it for strain and not everything else. Thoughts @CusiniM ? I thought we were just gonna merge it |
Introducing a plasticStrain output field in addition to the current total strain. This is done by subtracting the elastic strain (obtained via the getElasticStrain method of the constitutive laws) from the total strain and averaging over quadrature points.
Rebaselining will be required because of the new field.
Ideally, plastic strain would only be output when a plasticity model is being used, but Im not sure how exactly we will do that...
I will run the Drucker-Prager and Modified Cam Clay wellbore problem to test