Skip to content

Commit

Permalink
Merge pull request #43 from UCBoulder/feat/add-state-variable-evoluti…
Browse files Browse the repository at this point in the history
…on-rate-calculation

Feat/add state variable evolution rate calculation
  • Loading branch information
NateAM committed Jan 9, 2024
2 parents 4391ffa + 5406f4c commit c53ae4f
Show file tree
Hide file tree
Showing 4 changed files with 861 additions and 0 deletions.
1 change: 1 addition & 0 deletions docs/sphinx/changelog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ Internal Changes
- Added the extraction of the nonlinear state variables (:pull:`40`). By `Nathan Miller`_.
- 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`_.

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

}

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

setStrainLikeISVEvolutionRates( false );

}

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

setStrainLikeISVEvolutionRates( true );

}

void residual::setStrainLikeISVEvolutionRates( const bool isPrevious ){
/*!
* Set the evolution rates of the strain-like ISVs
*
* \param isPrevious: A flag for if we should set the current (false) or previous (true) ISV evolution rates
*/

const floatType *dMacroFlowdc;

const floatType *dMicroFlowdc;

const floatMatrix *dMicroGradientFlowdc;

const floatVector *plasticMultipliers;

if ( isPrevious ){

plasticMultipliers = get_previousPlasticMultipliers( );

dMacroFlowdc = get_previousdMacroFlowdc( );

dMicroFlowdc = get_previousdMicroFlowdc( );

dMicroGradientFlowdc = get_previousdMicroGradientFlowdc( );

}
else{

plasticMultipliers = get_plasticMultipliers( );

dMacroFlowdc = get_dMacroFlowdc( );

dMicroFlowdc = get_dMicroFlowdc( );

dMicroGradientFlowdc = get_dMicroGradientFlowdc( );

}

floatVector evolutionRates( plasticMultipliers->size( ), 0 );

evolutionRates[ 0 ] = -( *dMacroFlowdc ) * ( *plasticMultipliers )[ 0 ];

evolutionRates[ 1 ] = -( *dMicroFlowdc ) * ( *plasticMultipliers )[ 1 ];

for ( unsigned int i = 2; i < plasticMultipliers->size( ); i++ ){

for ( unsigned int j = 2; j < plasticMultipliers->size( ); j++ ){

evolutionRates[ i ] -= ( *dMicroGradientFlowdc )[ i - 2 ][ j - 2 ] * ( *plasticMultipliers )[ j ];

}

}

if ( isPrevious ){

set_previousStrainLikeISVEvolutionRates( evolutionRates );

}
else{

set_strainLikeISVEvolutionRates( evolutionRates );

}

}

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

setStrainLikeISVEvolutionRatesJacobians( false );

}

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

setStrainLikeISVEvolutionRatesJacobians( true );

}

void residual::setStrainLikeISVEvolutionRatesJacobians( const bool isPrevious ){
/*!
* Set the evolution rates and Jacobians of the strain-like ISVs
*
* \param isPrevious: A flag for if we should set the current (false) or previous (true) ISV evolution rates
*/

const floatType *dMacroFlowdc;

const floatType *dMicroFlowdc;

const floatMatrix *dMicroGradientFlowdc;

const floatVector *plasticMultipliers;

if ( isPrevious ){

plasticMultipliers = get_previousPlasticMultipliers( );

dMacroFlowdc = get_previousdMacroFlowdc( );

dMicroFlowdc = get_previousdMicroFlowdc( );

dMicroGradientFlowdc = get_previousdMicroGradientFlowdc( );

}
else{

plasticMultipliers = get_plasticMultipliers( );

dMacroFlowdc = get_dMacroFlowdc( );

dMicroFlowdc = get_dMicroFlowdc( );

dMicroGradientFlowdc = get_dMicroGradientFlowdc( );

}

floatVector evolutionRates( plasticMultipliers->size( ), 0 );

floatMatrix dEvolutionRatesdStateVariables( plasticMultipliers->size( ), floatVector( get_plasticStateVariables( )->size( ), 0 ) );

evolutionRates[ 0 ] = -( *dMacroFlowdc ) * ( *plasticMultipliers )[ 0 ];

evolutionRates[ 1 ] = -( *dMicroFlowdc ) * ( *plasticMultipliers )[ 1 ];

dEvolutionRatesdStateVariables[ 0 ][ 0 ] = -( *dMacroFlowdc );

dEvolutionRatesdStateVariables[ 1 ][ 1 ] = -( *dMicroFlowdc );

for ( unsigned int i = 2; i < plasticMultipliers->size( ); i++ ){

for ( unsigned int j = 2; j < plasticMultipliers->size( ); j++ ){

evolutionRates[ i ] -= ( *dMicroGradientFlowdc )[ i - 2 ][ j - 2 ] * ( *plasticMultipliers )[ j ];

dEvolutionRatesdStateVariables[ i ][ j ] = -( *dMicroGradientFlowdc )[ i - 2 ][ j - 2 ];

}

}

if ( isPrevious ){

set_previousStrainLikeISVEvolutionRates( evolutionRates );

set_previousdStrainLikeISVEvolutionRatesdStateVariables( dEvolutionRatesdStateVariables );

}
else{

set_strainLikeISVEvolutionRates( evolutionRates );

set_dStrainLikeISVEvolutionRatesdStateVariables( dEvolutionRatesdStateVariables );

}

}

}

}
20 changes: 20 additions & 0 deletions src/cpp/tardigrade_hydraMicromorphicDruckerPragerPlasticity.h
Original file line number Diff line number Diff line change
Expand Up @@ -346,6 +346,18 @@ namespace tardigradeHydra{

virtual void setFlowPotentialGradientsJacobians( const bool isPrevious );

virtual void setStrainLikeISVEvolutionRates( );

virtual void setPreviousStrainLikeISVEvolutionRates( );

virtual void setStrainLikeISVEvolutionRates( const bool isPrevious );

virtual void setdStrainLikeISVEvolutionRatesdStateVariables( );

virtual void setPreviousdStrainLikeISVEvolutionRatesdStateVariables( );

virtual void setStrainLikeISVEvolutionRatesJacobians( const bool isPrevious );

private:

unsigned int _plasticConfigurationIndex; //! The index of the plastic configuration
Expand Down Expand Up @@ -532,6 +544,14 @@ namespace tardigradeHydra{

TARDIGRADE_HYDRA_DECLARE_PREVIOUS_STORAGE( private, previousd2MicroGradientFlowdDrivingStressdChin, floatMatrix, setPreviousd2MicroGradientFlowdDrivingStressdChin )

TARDIGRADE_HYDRA_DECLARE_ITERATION_STORAGE( private, strainLikeISVEvolutionRates, floatVector, setStrainLikeISVEvolutionRates )

TARDIGRADE_HYDRA_DECLARE_ITERATION_STORAGE( private, dStrainLikeISVEvolutionRatesdStateVariables, floatMatrix, setdStrainLikeISVEvolutionRatesdStateVariables )

TARDIGRADE_HYDRA_DECLARE_PREVIOUS_STORAGE( private, previousStrainLikeISVEvolutionRates, floatVector, setPreviousStrainLikeISVEvolutionRates )

TARDIGRADE_HYDRA_DECLARE_PREVIOUS_STORAGE( private, previousdStrainLikeISVEvolutionRatesdStateVariables, floatMatrix, setPreviousdStrainLikeISVEvolutionRatesdStateVariables )

};

}
Expand Down
Loading

0 comments on commit c53ae4f

Please sign in to comment.