Skip to content
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/add updated state variable calculation #44

Merged
merged 3 commits into from
Jan 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/sphinx/changelog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ Internal Changes
- Added the calculation of the cohesion (:pull:`41`). By `Nathan Miller`_.
- Added the calculation of the required quantities from the flow potential (:pull:`42`). By `Nathan Miller`_.
- Added the calculation of the jacobians of the strain-like ISV evolution rates (:pull:`43`). By `Nathan Miller`_.
- Added the calculation of the values and Jacobians of the strain-like ISVs (:pull:`44`). By `Nathan Miller`_.

******************
0.3.0 (01-03-2023)
Expand Down
115 changes: 99 additions & 16 deletions src/cpp/tardigrade_hydraMicromorphicDruckerPragerPlasticity.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2535,25 +2535,25 @@ namespace tardigradeHydra{

}

void residual::setStrainLikeISVEvolutionRates( ){
void residual::setPlasticStrainLikeISVEvolutionRates( ){
/*!
* Set the evolution rates of the strain-like ISVs
*/

setStrainLikeISVEvolutionRates( false );
setPlasticStrainLikeISVEvolutionRates( false );

}

void residual::setPreviousStrainLikeISVEvolutionRates( ){
void residual::setPreviousPlasticStrainLikeISVEvolutionRates( ){
/*!
* Set the previous evolution rates of the strain-like ISVs
*/

setStrainLikeISVEvolutionRates( true );
setPlasticStrainLikeISVEvolutionRates( true );

}

void residual::setStrainLikeISVEvolutionRates( const bool isPrevious ){
void residual::setPlasticStrainLikeISVEvolutionRates( const bool isPrevious ){
/*!
* Set the evolution rates of the strain-like ISVs
*
Expand Down Expand Up @@ -2609,36 +2609,36 @@ namespace tardigradeHydra{

if ( isPrevious ){

set_previousStrainLikeISVEvolutionRates( evolutionRates );
set_previousPlasticStrainLikeISVEvolutionRates( evolutionRates );

}
else{

set_strainLikeISVEvolutionRates( evolutionRates );
set_plasticStrainLikeISVEvolutionRates( evolutionRates );

}

}

void residual::setdStrainLikeISVEvolutionRatesdStateVariables( ){
void residual::setdPlasticStrainLikeISVEvolutionRatesdStateVariables( ){
/*!
* Set the Jacobian of the evolution rates of the strain-like ISVs w.r.t. the nonlinear state variables
*/

setStrainLikeISVEvolutionRatesJacobians( false );
setPlasticStrainLikeISVEvolutionRatesJacobians( false );

}

void residual::setPreviousdStrainLikeISVEvolutionRatesdStateVariables( ){
void residual::setPreviousdPlasticStrainLikeISVEvolutionRatesdStateVariables( ){
/*!
* Set the Jacobian of the previous evolution rates of the strain-like ISVs w.r.t. the nonlinear state variables
*/

setStrainLikeISVEvolutionRatesJacobians( true );
setPlasticStrainLikeISVEvolutionRatesJacobians( true );

}

void residual::setStrainLikeISVEvolutionRatesJacobians( const bool isPrevious ){
void residual::setPlasticStrainLikeISVEvolutionRatesJacobians( const bool isPrevious ){
/*!
* Set the evolution rates and Jacobians of the strain-like ISVs
*
Expand Down Expand Up @@ -2702,21 +2702,104 @@ namespace tardigradeHydra{

if ( isPrevious ){

set_previousStrainLikeISVEvolutionRates( evolutionRates );
set_previousPlasticStrainLikeISVEvolutionRates( evolutionRates );

set_previousdStrainLikeISVEvolutionRatesdStateVariables( dEvolutionRatesdStateVariables );
set_previousdPlasticStrainLikeISVEvolutionRatesdStateVariables( dEvolutionRatesdStateVariables );

}
else{

set_strainLikeISVEvolutionRates( evolutionRates );
set_plasticStrainLikeISVEvolutionRates( evolutionRates );

set_dStrainLikeISVEvolutionRatesdStateVariables( dEvolutionRatesdStateVariables );
set_dPlasticStrainLikeISVEvolutionRatesdStateVariables( dEvolutionRatesdStateVariables );

}

}

void residual::setUpdatedPlasticStrainLikeISVs( ){
/*!
* Set the updated strain like ISVs
*/

const floatVector *previousPlasticStrainLikeISVs = get_previousPlasticStrainLikeISVs( );

const floatVector *evolutionRates = get_plasticStrainLikeISVEvolutionRates( );

const floatVector *previousEvolutionRates = get_previousPlasticStrainLikeISVEvolutionRates( );

floatVector dISVs, updatedISVs;

TARDIGRADE_ERROR_TOOLS_CATCH_NODE_POINTER( tardigradeConstitutiveTools::midpointEvolution( *hydra->getDeltaTime( ), *previousPlasticStrainLikeISVs, *previousEvolutionRates, *evolutionRates, dISVs, updatedISVs, *getIntegrationParameter( ) ) );

set_updatedPlasticStrainLikeISVs( updatedISVs );

}

void residual::setdUpdatedPlasticStrainLikeISVsdStateVariables( ){
/*!
* Set the updated plastic strain-like ISVs jacobians
*/

setUpdatedPlasticStrainLikeISVsJacobians( false );

}

void residual::setdUpdatedPlasticStrainLikeISVsdPreviousStateVariables( ){
/*!
* Set the previous updated plastic strain-like ISVs jacobians
*/

setUpdatedPlasticStrainLikeISVsJacobians( true );

}

void residual::setUpdatedPlasticStrainLikeISVsJacobians( const bool addPrevious ){
/*!
* Set the updated plastic strain like ISVs Jacobians
*
* \param addPrevious: Flag for whether to add the Jacobians w.r.t. the previous state variables (true) or not (false)
*/

const floatVector *previousPlasticStrainLikeISVs = get_previousPlasticStrainLikeISVs( );

const floatVector *evolutionRates = get_plasticStrainLikeISVEvolutionRates( );

const floatVector *previousEvolutionRates = get_previousPlasticStrainLikeISVEvolutionRates( );

floatVector dISVs, updatedISVs;

floatMatrix dISVsdEvolutionRates;

if ( addPrevious ){

floatMatrix dISVsdPreviousEvolutionRates;

TARDIGRADE_ERROR_TOOLS_CATCH_NODE_POINTER( tardigradeConstitutiveTools::midpointEvolution( *hydra->getDeltaTime( ), *previousPlasticStrainLikeISVs, *previousEvolutionRates, *evolutionRates, dISVs, updatedISVs, dISVsdEvolutionRates, dISVsdPreviousEvolutionRates, *getIntegrationParameter( ) ) );

floatMatrix dISVsdStateVariables = tardigradeVectorTools::dot( dISVsdPreviousEvolutionRates, *get_previousdPlasticStrainLikeISVEvolutionRatesdStateVariables( ) );

for ( unsigned int i = 0; i < updatedISVs.size( ); i++ ){

dISVsdStateVariables[ i ][ i + ( *getNumPlasticMultipliers( ) ) ] += 1;

}

set_dUpdatedPlasticStrainLikeISVsdPreviousStateVariables( dISVsdStateVariables );

}
else{

TARDIGRADE_ERROR_TOOLS_CATCH_NODE_POINTER( tardigradeConstitutiveTools::midpointEvolution( *hydra->getDeltaTime( ), *previousPlasticStrainLikeISVs, *previousEvolutionRates, *evolutionRates, dISVs, updatedISVs, dISVsdEvolutionRates, *getIntegrationParameter( ) ) );

}

set_dUpdatedPlasticStrainLikeISVsdStateVariables( tardigradeVectorTools::dot( dISVsdEvolutionRates, *get_dPlasticStrainLikeISVEvolutionRatesdStateVariables( ) ) );

set_updatedPlasticStrainLikeISVs( updatedISVs );

}

}

}
Loading
Loading