Go to the documentation of this file.
38 template <
int nSizeMatTangent >
39 class PerezFougetSubstepper {
85 double minimumStepSize,
87 double scaleDownFactor,
88 int nPassesToIncrease,
92 initialStepSize( initialStepSize ),
93 minimumStepSize( minimumStepSize ),
94 scaleUpFactor( scaleUpFactor ),
95 scaleDownFactor( scaleDownFactor ),
96 nPassesToIncrease( nPassesToIncrease ),
97 currentProgress( 0.0 ),
98 currentSubstepSize( initialStepSize ),
102 consistentTangent = TangentSizedMatrix::Zero();
109 return ( 1.0 - currentProgress ) <= 2e-16;
115 if ( passedSubsteps >= nPassesToIncrease )
116 currentSubstepSize *= scaleUpFactor;
118 const double remainingProgress = 1.0 - currentProgress;
119 if ( remainingProgress < currentSubstepSize )
120 currentSubstepSize = remainingProgress;
123 currentProgress += currentSubstepSize;
125 return currentSubstepSize;
131 currentProgress -= currentSubstepSize;
134 currentSubstepSize *= scaleDownFactor;
136 if ( currentSubstepSize < minimumStepSize )
145 consistentTangent += currentSubstepSize * TangentSizedMatrix::Identity();
151 finishElasticSubstep();
152 consistentTangent.applyOnTheLeft( dXdY );
154 for (
int i = 0; i < consistentTangent.rows(); i++ )
155 for (
int j = 0; j < consistentTangent.cols(); j++ )
156 if ( std::abs( consistentTangent( i, j ) ) < 1e-12 )
157 consistentTangent( i, j ) = 0.0;
163 return consistentTangent.topLeftCorner( 6, 6 ) * Cel;
Definition: MarmotNumericalDifferentiation.h:34
const Matrix6d & Cel
Definition: PerezFougetSubstepperExplicitMarkII.h:75
PerezFougetSubstepper(double initialStepSize, double minimumStepSize, double scaleUpFactor, double scaleDownFactor, int nPassesToIncrease, const Matrix6d &Cel)
const double scaleDownFactor
Definition: PerezFougetSubstepperExplicitMarkII.h:68
double currentProgress
Definition: PerezFougetSubstepperExplicitMarkII.h:71
Eigen::Matrix< double, 6, 6 > Matrix6d
Definition: MarmotTypedefs.h:35
TangentSizedMatrix consistentTangent
Definition: PerezFougetSubstepperMarkII.h:78
bool decreaseSubstepSize()
decrease the next subincrement
Definition: PerezFougetSubstepperExplicitMarkII.h:133
double currentSubstepSize
Definition: PerezFougetSubstepperExplicitMarkII.h:72
void finishElasticSubstep()
finish an elastic only subincrement
static bool notificationToMSG(const std::string &message)
PerezFougetSubstepper(double initialStepSize, double minimumStepSize, double scaleUpFactor, double scaleDownFactor, int nPassesToIncrease, const Matrix6d &Cel)
Definition: PerezFougetSubstepperExplicitMarkII.h:85
Matrix6d consistentStiffness()
get the overall consistent algorithmic tangent
void finishSubstep(const TangentSizedMatrix &dXdY, const TangentSizedMatrix &dYdXOld)
Definition: PerezFougetSubstepperExplicitMarkII.h:153
double getNextSubstep()
get the next subincrement size
Definition: PerezFougetSubstepperExplicitMarkII.h:117
bool isFinished()
check if subincrementation process has finished
Definition: PerezFougetSubstepperExplicitMarkII.h:110
Eigen::Matrix< double, nSizeMatTangent, nSizeMatTangent > TangentSizedMatrix
Definition: PerezFougetSubstepperMarkII.h:42
const int nPassesToIncrease
Definition: PerezFougetSubstepperExplicitMarkII.h:69
const double scaleUpFactor
Definition: PerezFougetSubstepperExplicitMarkII.h:68
int passedSubsteps
Definition: PerezFougetSubstepperExplicitMarkII.h:73
double getNextSubstep()
get the next subincrement size
bool isFinished()
check if the subincrement process has finished
void finishElasticSubstep()
finish an elastic only subincrement
Definition: PerezFougetSubstepperExplicitMarkII.h:147
const double minimumStepSize
Definition: PerezFougetSubstepperExplicitMarkII.h:68
const double initialStepSize
Definition: PerezFougetSubstepperExplicitMarkII.h:68
static bool warningToMSG(const std::string &message)
bool decreaseSubstepSize()
decreas the subincrement size
Matrix6d consistentStiffness()
get the consistent algorithmic tangent
Definition: PerezFougetSubstepperExplicitMarkII.h:161