17 #include <gsStructuralAnalysis/src/gsALMSolvers/gsALMHelper.h>
25 m_numDof = m_forcing.size();
40 m_jacMat = computeJacobian();
41 this->factorizeMatrix(m_jacMat);
50 m_jacMat = computeJacobian();
51 this->factorizeMatrix(m_jacMat);
77 T r = m_phi*(m_U + m_DeltaU - m_U).dot(m_U + m_DeltaU - m_U) + (1-m_phi)*math::pow(m_L + m_DeltaL - m_L,2.0) - m_arcLength*m_arcLength;
79 m_deltaL = - ( r + 2*m_phi*(m_DeltaU).dot(m_deltaUbar) ) / ( 2*(1-m_phi)*(m_DeltaL) + 2*m_phi*(m_DeltaU).dot(m_deltaUt) );
80 m_deltaU = m_deltaUbar + m_deltaL*m_deltaUt;
94 m_DeltaL = m_deltaL = 0.0;
100 m_jacMat = computeJacobian();
101 this->factorizeMatrix(m_jacMat);
105 m_phi = 0.99999999999;
113 if ( ((m_U-m_Uprev).norm() < tol) && ((m_L - m_Lprev) * (m_L - m_Lprev) < tol ) )
115 m_note+=
"predictor\t";
117 m_deltaUt = this->solveSystem(m_forcing);
118 m_deltaU = m_deltaUt / math::sqrt( m_deltaUt.dot(m_deltaUt) + m_DeltaL*DL );
119 m_deltaL = DL / math::sqrt( m_deltaUt.dot(m_deltaUt) + m_DeltaL*DL );
123 m_deltaL = 1./m_arcLength_prev*(m_L - m_Lprev);
124 m_deltaU = 1./m_arcLength_prev*(m_U - m_Uprev);
128 m_deltaL *= m_arcLength;
129 m_deltaU *= m_arcLength;
132 m_DeltaU += m_deltaU;
133 m_DeltaL += m_deltaL;
139 GISMO_ASSERT(m_Uguess.rows()!=0 && m_Uguess.cols()!=0,
"Guess is empty");
141 m_jacMat = computeJacobian();
142 this->factorizeMatrix(m_jacMat);
144 m_deltaUt = this->solveSystem(m_forcing);
148 if ( ((m_Uguess-m_U).norm() < tol) && ((m_Lguess - m_L) * (m_Lguess - m_L) < tol ) )
150 m_note+=
"predictor\t";
152 m_deltaUt = this->solveSystem(m_forcing);
153 m_deltaU = m_deltaUt / math::sqrt( m_deltaUt.dot(m_deltaUt) + m_DeltaL*DL );
154 m_deltaL = DL / math::sqrt( m_deltaUt.dot(m_deltaUt) + m_DeltaL*DL );
158 m_deltaL = 1./m_arcLength_prev*(m_Lguess - m_L);
159 m_deltaU = 1./m_arcLength_prev*(m_Uguess - m_U);
163 m_deltaL *= m_arcLength;
164 m_deltaU *= m_arcLength;
222 gsInfo<<std::setw(4)<<std::left<<
"It.";
223 gsInfo<<std::setw(17)<<std::left<<
"Res. F";
224 gsInfo<<std::setw(17)<<std::left<<
"|dU|/|Du|";
225 gsInfo<<std::setw(17)<<std::left<<
"dL/DL";
226 gsInfo<<std::setw(17)<<std::left<<
"|U|";
227 gsInfo<<std::setw(17)<<std::left<<
"L";
228 gsInfo<<std::setw(17)<<std::left<<
"|DU|";
229 gsInfo<<std::setw(17)<<std::left<<
"DL";
230 gsInfo<<std::setw(17)<<std::left<<
"|dU|";
231 gsInfo<<std::setw(17)<<std::left<<
"dL";
232 gsInfo<<std::setw(17)<<std::left<<
"ds²";
233 gsInfo<<std::setw(17)<<std::left<<
"|dU|²";
234 gsInfo<<std::setw(17)<<std::left<<
"dL²";
235 gsInfo<<std::setw(17)<<std::left<<
"Dmin";
236 gsInfo<<std::setw(17)<<std::left<<
"m_note";
245 computeStability(
false);
248 gsInfo<<std::setw(4)<<std::left<<m_numIterations;
249 gsInfo<<std::setw(17)<<std::left<<m_residueF;
250 gsInfo<<std::setw(17)<<std::left<<m_residueU;
251 gsInfo<<std::setw(17)<<std::left<<m_residueL;
252 gsInfo<<std::setw(17)<<std::left<<(m_U+m_DeltaU).norm();
253 gsInfo<<std::setw(17)<<std::left<<(m_L + m_DeltaL);
254 gsInfo<<std::setw(17)<<std::left<<m_DeltaU.norm();
255 gsInfo<<std::setw(17)<<std::left<<m_DeltaL;
256 gsInfo<<std::setw(17)<<std::left<<m_deltaU.norm();
257 gsInfo<<std::setw(17)<<std::left<<m_deltaL;
258 gsInfo<<std::setw(17)<<std::left<<m_phi * math::pow(m_DeltaU.norm(),2.0) + (1.0-m_phi) * math::pow(m_DeltaL,2.0);
259 gsInfo<<std::setw(17)<<std::left<<m_phi * math::pow(m_DeltaU.norm(),2.0);
260 gsInfo<<std::setw(17)<<std::left<<(1-m_phi) * math::pow(m_DeltaL,2.0);
261 gsInfo<<std::setw(17)<<std::left<<m_indicator;
262 gsInfo<<std::setw(17)<<std::left<<m_note;
Performs the Riks arc length method to solve a nonlinear equation system.
Definition: gsALMRiks.h:29
void iterationFinish()
See gsALMBase.
Definition: gsALMRiks.hpp:205
void initMethods()
See gsALMBase.
Definition: gsALMRiks.hpp:23
void quasiNewtonIteration()
See gsALMBase.
Definition: gsALMRiks.hpp:48
void initiateStep()
See gsALMBase.
Definition: gsALMRiks.hpp:87
#define GISMO_ASSERT(cond, message)
Definition: gsDebug.h:89
A vector with arbitrary coefficient type and fixed or dynamic size.
Definition: gsVector.h:35
#define gsInfo
Definition: gsDebug.h:43
void iteration()
See gsALMBase.
Definition: gsALMRiks.hpp:69
void stepOutput()
See gsALMBase.
Definition: gsALMRiks.hpp:243
void initOutput()
See gsALMBase.
Definition: gsALMRiks.hpp:219
void predictor()
See gsALMBase.
Definition: gsALMRiks.hpp:98
void quasiNewtonPredictor()
See gsALMBase.
Definition: gsALMRiks.hpp:38