17 #include <gsStructuralAnalysis/src/gsALMSolvers/gsALMHelper.h>
25 Base::defaultOptions();
26 m_options.addReal(
"Scaling",
"Set Scaling factor Phi",-1);
33 m_phi = m_options.getReal(
"Scaling");
34 m_phi_user = m_phi == -1 ?
false :
true;
41 m_numDof = m_forcing.size();
57 m_jacMat = computeJacobian();
58 this->factorizeMatrix(m_jacMat);
68 m_jacMat = computeJacobian();
69 this->factorizeMatrix(m_jacMat);
79 T cres = m_DeltaU.dot(m_DeltaU) + m_phi*m_phi*m_DeltaL*m_DeltaL * m_forcing.dot(m_forcing) - m_arcLength*m_arcLength;
80 T num = cres + (2*m_DeltaU).dot(m_deltaUbar);
81 T denum = (2*m_DeltaU).dot(m_deltaUt) + m_phi*m_phi*2*m_DeltaL*m_forcing.dot(m_forcing);
82 m_deltaL = - num / denum;
83 m_deltaU = m_deltaL * m_deltaUt + m_deltaUbar;
97 m_DeltaL = m_deltaL = 0.0;
104 m_jacMat = computeJacobian();
105 this->factorizeMatrix(m_jacMat);
111 if ( ((m_U-m_Uprev).norm() < tol) && ((m_L - m_Lprev) * (m_L - m_Lprev) < tol ) )
113 m_note+=
"predictor\t";
115 m_deltaUt = this->solveSystem(m_forcing);
116 m_deltaU = m_deltaUt / math::sqrt( m_deltaUt.dot(m_deltaUt) + m_DeltaL*DL );
117 m_deltaL = DL / math::sqrt( m_deltaUt.dot(m_deltaUt) + m_DeltaL*DL );
120 m_phi = math::pow( m_deltaUt.dot(m_deltaUt) / m_forcing.dot(m_forcing),0.5);
124 m_deltaL = 1./m_arcLength_prev*(m_L - m_Lprev);
125 m_deltaU = 1./m_arcLength_prev*(m_U - m_Uprev);
128 m_phi = math::pow( m_deltaUt.dot(m_deltaUt) / m_forcing.dot(m_forcing),0.5);
132 m_deltaL *= m_arcLength;
133 m_deltaU *= m_arcLength;
136 m_DeltaU += m_deltaU;
137 m_DeltaL += m_deltaL;
143 m_jacMat = computeJacobian();
144 this->factorizeMatrix(m_jacMat);
150 if ( ((m_Uguess-m_U).norm() < tol) && ((m_Lguess - m_L) * (m_Lguess - m_L) < tol ) )
152 m_note+=
"predictor\t";
154 m_deltaUt = this->solveSystem(m_forcing);
155 m_deltaU = m_deltaUt / math::sqrt( m_deltaUt.dot(m_deltaUt) + m_DeltaL*DL );
156 m_deltaL = DL / math::sqrt( m_deltaUt.dot(m_deltaUt) + m_DeltaL*DL );
159 m_phi = math::pow( m_deltaUt.dot(m_deltaUt) / m_forcing.dot(m_forcing),0.5);
164 m_deltaL = 1./m_arcLength_prev*(m_Lguess - m_L);
165 m_deltaU = 1./m_arcLength_prev*(m_Uguess - m_U);
168 m_phi = math::pow( m_deltaUt.dot(m_deltaUt) / m_forcing.dot(m_forcing),0.5);
172 m_deltaL *= m_arcLength;
173 m_deltaU *= m_arcLength;
176 m_DeltaU += m_deltaU;
177 m_DeltaL += m_deltaL;
188 m_DeltaUold = m_DeltaU;
189 m_DeltaLold = m_DeltaL;
201 gsInfo<<std::setw(4)<<std::left<<
"It.";
202 gsInfo<<std::setw(17)<<std::left<<
"Res. F";
203 gsInfo<<std::setw(17)<<std::left<<
"|dU|/|Du|";
204 gsInfo<<std::setw(17)<<std::left<<
"dL/DL";
205 gsInfo<<std::setw(17)<<std::left<<
"|U|";
206 gsInfo<<std::setw(17)<<std::left<<
"L";
207 gsInfo<<std::setw(17)<<std::left<<
"|DU|";
208 gsInfo<<std::setw(17)<<std::left<<
"DL";
209 gsInfo<<std::setw(17)<<std::left<<
"|dU|";
210 gsInfo<<std::setw(17)<<std::left<<
"dL";
211 gsInfo<<std::setw(17)<<std::left<<
"ds²";
212 gsInfo<<std::setw(17)<<std::left<<
"|dU|²";
213 gsInfo<<std::setw(17)<<std::left<<
"dL²";
214 gsInfo<<std::setw(17)<<std::left<<
"Dmin";
215 gsInfo<<std::setw(17)<<std::left<<
"m_note";
224 computeStability(
false);
227 gsInfo<<std::setw(4)<<std::left<<m_numIterations;
228 gsInfo<<std::setw(17)<<std::left<<m_residueF;
229 gsInfo<<std::setw(17)<<std::left<<m_residueU;
230 gsInfo<<std::setw(17)<<std::left<<m_residueL;
231 gsInfo<<std::setw(17)<<std::left<<(m_U+m_DeltaU).norm();
232 gsInfo<<std::setw(17)<<std::left<<(m_L + m_DeltaL);
233 gsInfo<<std::setw(17)<<std::left<<m_DeltaU.norm();
234 gsInfo<<std::setw(17)<<std::left<<m_DeltaL;
235 gsInfo<<std::setw(17)<<std::left<<m_deltaU.norm();
236 gsInfo<<std::setw(17)<<std::left<<m_deltaL;
237 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);
238 gsInfo<<std::setw(17)<<std::left<<m_phi * math::pow(m_DeltaU.norm(),2.0);
239 gsInfo<<std::setw(17)<<std::left<<(1-m_phi) * math::pow(m_DeltaL,2.0);
240 gsInfo<<std::setw(17)<<std::left<<m_indicator;
241 gsInfo<<std::setw(17)<<std::left<<m_note;
void initMethods()
See gsALMBase.
Definition: gsALMConsistentCrisfield.hpp:39
void quasiNewtonPredictor()
See gsALMBase.
Definition: gsALMConsistentCrisfield.hpp:55
void initOutput()
See gsALMBase.
Definition: gsALMConsistentCrisfield.hpp:198
void initiateStep()
See gsALMBase.
Definition: gsALMConsistentCrisfield.hpp:90
void iterationFinish()
See gsALMBase.
Definition: gsALMConsistentCrisfield.hpp:181
void getOptions()
See gsALMBase.
Definition: gsALMConsistentCrisfield.hpp:30
void defaultOptions()
See gsALMBase.
Definition: gsALMConsistentCrisfield.hpp:23
A vector with arbitrary coefficient type and fixed or dynamic size.
Definition: gsVector.h:35
void iteration()
See gsALMBase.
Definition: gsALMConsistentCrisfield.hpp:75
#define gsInfo
Definition: gsDebug.h:43
void stepOutput()
See gsALMBase.
Definition: gsALMConsistentCrisfield.hpp:222
Performs the Consistent Crisfield arc length method to solve a nonlinear equation system...
Definition: gsALMConsistentCrisfield.h:34
void quasiNewtonIteration()
See gsALMBase.
Definition: gsALMConsistentCrisfield.hpp:66
void predictor()
See gsALMBase.
Definition: gsALMConsistentCrisfield.hpp:102