Go to the documentation of this file.
36 template <
int nSizeMatTangent >
86 double minimumStepSize,
88 double scaleDownFactor,
89 int nPassesToIncrease,
93 initialStepSize( initialStepSize ),
94 minimumStepSize( minimumStepSize ),
95 scaleUpFactor( scaleUpFactor ),
96 scaleDownFactor( scaleDownFactor ),
97 nPassesToIncrease( nPassesToIncrease ),
98 currentProgress( 0.0 ),
99 currentSubstepSize( initialStepSize ),
105 I76.topLeftCorner( 6, 6 ) = Matrix6d::Identity();
106 I77 = TangentSizedMatrix::Identity();
113 return ( 1.0 - currentProgress ) <= 2e-16;
119 if ( passedSubsteps >= nPassesToIncrease )
120 currentSubstepSize *= scaleUpFactor;
122 const double remainingProgress = 1.0 - currentProgress;
123 if ( remainingProgress < currentSubstepSize )
124 currentSubstepSize = remainingProgress;
127 currentProgress += currentSubstepSize;
129 return currentSubstepSize;
135 currentProgress -= currentSubstepSize;
138 currentSubstepSize *= scaleDownFactor;
140 if ( currentSubstepSize < minimumStepSize )
149 consistentTangent += currentSubstepSize * I76 * Cel;
155 consistentTangent.applyOnTheLeft( I77 - dYdXOld );
156 consistentTangent += currentSubstepSize * I76 * Cel;
157 consistentTangent.applyOnTheLeft( dXdY );
163 return consistentTangent.topLeftCorner( 6, 6 );
TangentSizedMatrix I77
Definition: PerezFougetSubstepperExplicitMarkII.h:77
Definition: MarmotNumericalDifferentiation.h:34
const Matrix6d & Cel
Definition: PerezFougetSubstepperExplicitMarkII.h:75
const double scaleDownFactor
Definition: PerezFougetSubstepperExplicitMarkII.h:68
double currentProgress
Definition: PerezFougetSubstepperExplicitMarkII.h:71
Eigen::Matrix< double, 6, 6 > Matrix6d
Definition: MarmotTypedefs.h:35
bool decreaseSubstepSize()
decrease the next subincrement
Definition: PerezFougetSubstepperExplicitMarkII.h:133
double currentSubstepSize
Definition: PerezFougetSubstepperExplicitMarkII.h:72
static bool notificationToMSG(const std::string &message)
MatrixStateStrain consistentTangent
Definition: PerezFougetSubstepperExplicitMarkII.h:79
PerezFougetSubstepper(double initialStepSize, double minimumStepSize, double scaleUpFactor, double scaleDownFactor, int nPassesToIncrease, const Matrix6d &Cel)
Definition: PerezFougetSubstepperExplicitMarkII.h:85
MatrixStateStrain I76
Definition: PerezFougetSubstepperExplicitMarkII.h:76
Definition: PerezFougetSubstepperExplicitMarkII.h:37
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: PerezFougetSubstepperExplicitMarkII.h:40
Eigen::Matrix< double, nSizeMatTangent, 6 > MatrixStateStrain
Definition: PerezFougetSubstepperExplicitMarkII.h:41
const int nPassesToIncrease
Definition: PerezFougetSubstepperExplicitMarkII.h:69
const double scaleUpFactor
Definition: PerezFougetSubstepperExplicitMarkII.h:68
int passedSubsteps
Definition: PerezFougetSubstepperExplicitMarkII.h:73
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)
Matrix6d consistentStiffness()
get the consistent algorithmic tangent
Definition: PerezFougetSubstepperExplicitMarkII.h:161