Skip to content

Commit

Permalink
MAINT: Added setting previous jacobians
Browse files Browse the repository at this point in the history
  • Loading branch information
NateAM committed Jan 10, 2024
1 parent 4ae51cf commit 58755b8
Showing 1 changed file with 241 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2662,6 +2662,7 @@ BOOST_AUTO_TEST_CASE( test_setFlowDerivatives ){
tempVectorYield, previousdMicroGradientFlowdDrivingStress, previousdMicroGradientFlowdCohesion, previousdMicroGradientFlowdPrecedingF );

RJ.get_d2MacroFlowdDrivingStressdStress( );
RJ.get_previousd2MacroFlowdDrivingStressdStress( );

BOOST_CHECK( tardigradeVectorTools::fuzzyEquals( dMacroFlowdCohesion, *R.get_dMacroFlowdc( ) ) );

Expand Down Expand Up @@ -2710,6 +2711,7 @@ BOOST_AUTO_TEST_CASE( test_setFlowDerivatives ){
BOOST_CHECK( tardigradeVectorTools::fuzzyEquals( previousdMicroFlowdDrivingStress, *RJ.get_previousdMicroFlowdDrivingStress( ) ) );

BOOST_CHECK( tardigradeVectorTools::fuzzyEquals( previousdMicroGradientFlowdDrivingStress, *RJ.get_previousdMicroGradientFlowdDrivingStress( ) ) );

}

BOOST_AUTO_TEST_CASE( test_setFlowDerivatives2 ){
Expand Down Expand Up @@ -3675,6 +3677,7 @@ BOOST_AUTO_TEST_CASE( test_setFlowDerivatives2 ){
BOOST_CHECK( tardigradeVectorTools::fuzzyEquals( previousd2MicroFlowdDrivingStressdF, *R.get_previousd2MicroFlowdDrivingStressdF( ) ) );

BOOST_CHECK( tardigradeVectorTools::fuzzyEquals( previousd2MicroGradientFlowdDrivingStressdF, assembled_previousd2MicroGradientFlowdDrivingStressdF ) );

}

BOOST_AUTO_TEST_CASE( test_setPlasticStrainLikeISVEvolutionRates ){
Expand Down Expand Up @@ -3964,6 +3967,7 @@ BOOST_AUTO_TEST_CASE( test_setPlasticStrainLikeISVEvolutionRates ){
( 9.1 * 0.3 + 10.1 * 0.4 + 11.2 * 0.5 ) };

RJ.get_dPlasticStrainLikeISVEvolutionRatesdStateVariables( );
RJ.get_previousdPlasticStrainLikeISVEvolutionRatesdStateVariables( );

BOOST_CHECK( tardigradeVectorTools::fuzzyEquals( evolutionRates, *R.get_plasticStrainLikeISVEvolutionRates( ) ) );

Expand Down Expand Up @@ -5353,6 +5357,31 @@ BOOST_AUTO_TEST_CASE( test_setYield ){

}

virtual void setCohesionsJacobians( const bool isPrevious ) override{

setCohesions( isPrevious );

if ( isPrevious ){

set_previousdMacroCohesiondStateVariables( dMacroCohesiondStateVariables );

set_previousdMicroCohesiondStateVariables( dMacroCohesiondStateVariables );

set_previousdMicroGradientCohesiondStateVariables( dMicroGradientCohesiondStateVariables );

}
else{

set_dMacroCohesiondStateVariables( dMacroCohesiondStateVariables );

set_dMicroCohesiondStateVariables( dMacroCohesiondStateVariables );

set_dMicroGradientCohesiondStateVariables( dMicroGradientCohesiondStateVariables );

}

}

virtual void setDrivingStresses( const bool isPrevious ) override{

if ( isPrevious ){
Expand Down Expand Up @@ -5382,12 +5411,6 @@ BOOST_AUTO_TEST_CASE( test_setYield ){

if ( isPrevious ){

set_previousdMacroCohesiondStateVariables( dMacroCohesiondStateVariables );

set_previousdMicroCohesiondStateVariables( dMacroCohesiondStateVariables );

set_previousdMicroGradientCohesiondStateVariables( dMicroGradientCohesiondStateVariables );

set_previousdMacroDrivingStressdMacroStress( dMacroDrivingStressdMacroStress );

set_previousdMacroDrivingStressdF( dMacroDrivingStressdF );
Expand All @@ -5413,12 +5436,6 @@ BOOST_AUTO_TEST_CASE( test_setYield ){
}
else{

set_dMacroCohesiondStateVariables( dMacroCohesiondStateVariables );

set_dMicroCohesiondStateVariables( dMacroCohesiondStateVariables );

set_dMicroGradientCohesiondStateVariables( dMicroGradientCohesiondStateVariables );

set_dMacroDrivingStressdMacroStress( dMacroDrivingStressdMacroStress );

set_dMacroDrivingStressdF( dMacroDrivingStressdF );
Expand Down Expand Up @@ -5500,7 +5517,7 @@ BOOST_AUTO_TEST_CASE( test_setYield ){

tardigradeHydra::unit_test::hydraBaseTester::updateUnknownVector( hydra, unknownVector );

residualMock R( &hydra, 55, 1, stateVariableIndices, parameters );
residualMock R( &hydra, 55, 1, stateVariableIndices, parameters );

residualMock RJ( &hydra, 55, 1, stateVariableIndices, parameters );

Expand Down Expand Up @@ -5544,6 +5561,7 @@ BOOST_AUTO_TEST_CASE( test_setYield ){
R.plasticParameters[ 25 ], R.plasticParameters[ 26 ], previousMicroGradientYield );

RJ.get_dMacroYielddStress( );
RJ.get_previousdMacroYielddStress( );

BOOST_CHECK( tardigradeVectorTools::fuzzyEquals( macroYield, *R.get_macroYield( ) ) );

Expand All @@ -5570,3 +5588,213 @@ BOOST_AUTO_TEST_CASE( test_setYield ){
BOOST_CHECK( tardigradeVectorTools::fuzzyEquals( previousMicroGradientYield, *RJ.get_previousMicroGradientYield( ) ) );

}

BOOST_AUTO_TEST_CASE( test_setYield2 ){
/*!
* Test setting the cohesion values
*/

// Form a hydra class and residual class
floatType time = 1.23;

floatType deltaTime = 2.34;

floatType temperature = 3.45;

floatType previousTemperature = 4.56;

variableVector deformationGradient = { 1.00157757, 0.00159138, 0.00672005,
0.01747159, 1.01122277, 0.00555118,
0.01112217, -0.00885205, 0.99308943 };

variableVector microDeformation = { 0.99460588, -0.0078411 , 0.01145249,
-0.00307139, 0.97798389, -0.00509779,
0.01189977, -0.01587541, 0.98377259 };

variableVector gradientMicroDeformation = { -1.35868385e-02, -1.03142977e-02, 6.54880619e-03, -2.03947530e-02,
-3.31494137e-03, -3.45686183e-03, -3.15745117e-04, -3.70848549e-03,
-9.38693885e-03, -3.68243465e-03, 1.96694582e-02, 2.22080009e-02,
9.18337942e-05, 6.19764759e-03, -1.92190802e-02, -9.13572591e-03,
-4.25868940e-03, 1.83154579e-02, -1.24772317e-02, -8.48286787e-04,
2.42779893e-02, 9.74255963e-04, 5.64472629e-03, -1.89685667e-02,
1.63170400e-02, 5.15300642e-03, 2.25340032e-03 };

floatVector previousDeformationGradient = { 9.94656270e-01, 4.82152400e-02, 3.31984800e-02, 2.81918700e-02,
1.02086536e+00, -1.77592100e-02, -2.24798000e-03, -1.28410000e-04,
9.77165250e-01 };

floatVector previousMicroDeformation = { 0.96917405, -0.01777599, 0.00870406, -0.02163002, 0.9998683 ,
-0.01669352, 0.03355217, 0.04427456, 1.01778466 };

floatVector previousGradientMicroDeformation = { 0.05043761, 0.02160516, -0.0565408 , 0.01218304, -0.05851034,
0.00485749, -0.00962607, -0.03455912, 0.04490067, 0.01552915,
-0.02878364, 0.00595866, 0.04750406, -0.02377005, -0.05041534,
-0.02922214, 0.06280788, 0.02850865, -0.00226005, 0.0146049 ,
0.01560184, 0.03224767, 0.05822091, -0.05294424, -0.03518206,
0.01831308, 0.03774438 };

floatVector previousStateVariables = {-0.02495446, -0.00169657, 0.04855598, 0.00194851, 0.01128945,
-0.03793713, 0.03263408, 0.01030601, 0.0045068 , -0.01572362,
-0.01958792, -0.00829778, 0.01813008, 0.03754568, 0.00104223,
0.01693138, 0.00859366, 0.01249035, 0.01746891, 0.03423424,
-0.0416805 , 0.02636828, -0.02563336, -0.0305777 , 0.0072457 ,
-0.04042875, 0.03853268, 0.0127249 , 0.02234164, -0.04838708,
0.00944319, 0.00567852, -0.03410404, -0.03469295, 0.01955295,
-0.01812336, 0.01919703, 0.00543832, -0.01110494, 0.04251325,
0.034167 , -0.01426024, -0.04564085, -0.01952319, -0.01018143,
0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0 };

floatVector parameters = { 2, 0.53895133, 0.37172145,
2, 0.37773052, 0.92739145,
2, 0.53186824, 0.75454313,
2, 0.95338442, 0.74042148,
2, 0.38093104, 0.49241325,
2, 0.82121039, 0.90566759,
2, 0.01166325, 0.05331896,
2, 0.32982199, 0.60161431,
2, 0.58881096, 0.11473813 };

floatVector unknownVector = { 4.31202550e-01, -1.78960429e-01, -6.17986089e-01, 9.34988614e-01,
3.01500733e-01, 7.30919703e-01, -9.49515284e-01, -4.66188370e-01,
4.14220065e-03, -8.65102730e-01, 9.86066522e-01, -5.27075208e-01,
-2.51415635e-01, -5.71976170e-01, -7.89108268e-01, -5.35040429e-01,
-3.98779729e-01, 2.68884536e-01, -4.37530437e-01, -2.75446478e-01,
-9.88114313e-01, -2.68561748e-01, 6.77719634e-02, -6.75968326e-01,
1.94866217e-01, -4.13695063e-01, 2.64100990e-01, -9.47606789e-01,
7.75186921e-01, -9.67762739e-01, -7.46083938e-01, 5.54324923e-01,
-9.08209536e-01, 4.21997387e-01, 9.42092281e-01, 7.43365866e-01,
4.20323303e-01, 9.17019486e-01, -1.40373324e-01, 7.45757829e-01,
-2.88084664e-01, 8.59527306e-01, -7.02444688e-01, 8.80058030e-01,
6.65432395e-01, 1.01730274e+00, -1.88038495e-02, 4.82434492e-03,
-2.41803760e-02, 1.01105922e+00, -2.46131243e-02, -2.07588861e-02,
-1.37250795e-02, 1.01875623e+00, 9.93178816e-01, 1.99799676e-03,
3.40516069e-03, -1.37268320e-02, 1.00360734e+00, 8.04758975e-03,
-1.00877303e-02, -4.06865705e-03, 9.97654446e-01, 2.16175331e-02,
4.37468737e-03, 2.24126186e-02, 2.80173769e-03, 2.80710425e-05,
-2.48233895e-02, -9.55547806e-04, 2.13727499e-02, -1.50817155e-02,
-2.23954433e-02, -4.66105533e-03, -6.38017597e-03, 1.78576529e-02,
-2.36694442e-02, 2.10074615e-02, 9.04514995e-03, 2.02112997e-02,
5.37645354e-03, 1.55976656e-02, -8.22280632e-03, -7.52168860e-03,
-5.50628848e-03, 1.27398541e-02, -6.53544128e-03, -1.28890097e-02,
2.18834178e-02, 2.04005542e-02,
0.01, 0.02, 0.03, 0.04, 0.05,
0.06, 0.07, 0.08, 0.09, 0.10 };

unsigned int numConfigurations = 2;

unsigned int numNonLinearSolveStateVariables = 10;

std::vector< unsigned int > stateVariableIndices = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

unsigned int dimension = 3;

unsigned int configuration_unknown_count = 45;

floatType tolr = 1e-2;

floatType tola = 1e-3;

unsigned int maxIterations = 24;

unsigned int maxLSIterations = 45;

floatType lsAlpha = 2.3;

class stressMock : public tardigradeHydra::residualBaseMicromorphic{

public:

using tardigradeHydra::residualBaseMicromorphic::residualBaseMicromorphic;

};

class residualMock : public tardigradeHydra::micromorphicDruckerPragerPlasticity::residual{

public:

using tardigradeHydra::micromorphicDruckerPragerPlasticity::residual::residual;

floatVector plasticParameters = { 2, 0.53895133, 0.37172145,
2, 0.37773052, 0.92739145,
2, 0.53186824, 0.75454313,
2, 0.95338442, 0.74042148,
2, 0.38093104, 0.49241325,
2, 0.82121039, 0.90566759,
2, 0.01166325, 0.05331896,
2, 0.32982199, 0.60161431,
2, 0.58881096, 0.11473813 };

floatVector initialize( unsigned int nrows ){

floatVector value( nrows, 0 );

return value;

}

floatMatrix initialize( unsigned int nrows, unsigned int ncols ){

floatMatrix value( nrows, floatVector( ncols, 0 ) );

return value;

}

};

class hydraBaseMicromorphicMock : public tardigradeHydra::hydraBaseMicromorphic{

public:

using tardigradeHydra::hydraBaseMicromorphic::hydraBaseMicromorphic;

stressMock elasticity;

residualMock plasticity;

std::vector< unsigned int > stateVariableIndices = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

floatVector plasticParameters = { 2, 0.53895133, 0.37172145,
2, 0.37773052, 0.92739145,
2, 0.53186824, 0.75454313,
2, 0.95338442, 0.74042148,
2, 0.38093104, 0.49241325,
2, 0.82121039, 0.90566759,
2, 0.01166325, 0.05331896,
2, 0.32982199, 0.60161431,
2, 0.58881096, 0.11473813 };

private:

using tardigradeHydra::hydraBaseMicromorphic::setResidualClasses;

virtual void setResidualClasses( ) override{

std::vector< tardigradeHydra::residualBase* > residuals( 2 );

elasticity = stressMock( this, 45 );

plasticity = residualMock( this, 55, 1, stateVariableIndices, plasticParameters );

residuals[ 0 ] = &elasticity;

residuals[ 1 ] = &plasticity;

setResidualClasses( residuals );

}

};

hydraBaseMicromorphicMock hydra( time, deltaTime, temperature, previousTemperature, deformationGradient, previousDeformationGradient,
microDeformation, previousMicroDeformation, gradientMicroDeformation, previousGradientMicroDeformation,
previousStateVariables, parameters,
numConfigurations, numNonLinearSolveStateVariables,
dimension, configuration_unknown_count,
tolr, tola, maxIterations, maxLSIterations, lsAlpha );

tardigradeHydra::unit_test::hydraBaseTester::updateUnknownVector( hydra, unknownVector );

residualMock R( &hydra, 55, 1, stateVariableIndices, parameters );

}

0 comments on commit 58755b8

Please sign in to comment.