MCPcopy Create free account
hub / github.com/OpenSees/OpenSees / solveCurrentStep

Method solveCurrentStep

SRC/analysis/algorithm/equiSolnAlgo/NewtonRaphson.cpp:126–219  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

124
125
126int
127NewtonRaphson::solveCurrentStep(void)
128{
129 // set up some pointers and check they are valid
130 // NOTE this could be taken away if we set Ptrs as protecetd in superclass
131 AnalysisModel *theAnaModel = this->getAnalysisModelPtr();
132 IncrementalIntegrator *theIntegrator = this->getIncrementalIntegratorPtr();
133 //IncrementalIntegrator *theIntegratorSens=this->getIncrementalIntegratorPtr();//Abbas
134 LinearSOE *theSOE = this->getLinearSOEptr();
135
136 if ((theAnaModel == 0) || (theIntegrator == 0) || (theSOE == 0)
137 || (theTest == 0)){
138 opserr << "WARNING NewtonRaphson::solveCurrentStep() - setLinks() has";
139 opserr << " not been called - or no ConvergenceTest has been set\n";
140 return -5;
141 }
142
143 if (theIntegrator->formUnbalance() < 0) {
144 opserr << "WARNING NewtonRaphson::solveCurrentStep() -";
145 opserr << "the Integrator failed in formUnbalance()\n";
146 return -2;
147 }
148
149 // set itself as the ConvergenceTest objects EquiSolnAlgo
150 theTest->setEquiSolnAlgo(*this);
151 if (theTest->start() < 0) {
152 opserr << "NewtonRaphson::solveCurrentStep() -";
153 opserr << "the ConvergenceTest object failed in start()\n";
154 return -3;
155 }
156
157 int result = -1;
158 numIterations = 0;
159
160 do {
161
162 if (tangent == INITIAL_THEN_CURRENT_TANGENT) {
163 if (numIterations == 0) {
164 SOLUTION_ALGORITHM_tangentFlag = INITIAL_TANGENT;
165 if (theIntegrator->formTangent(INITIAL_TANGENT) < 0){
166 opserr << "WARNING NewtonRaphson::solveCurrentStep() -";
167 opserr << "the Integrator failed in formTangent()\n";
168 return -1;
169 }
170 } else {
171 SOLUTION_ALGORITHM_tangentFlag = CURRENT_TANGENT;
172 if (theIntegrator->formTangent(CURRENT_TANGENT) < 0){
173 opserr << "WARNING NewtonRaphson::solveCurrentStep() -";
174 opserr << "the Integrator failed in formTangent()\n";
175 return -1;
176 }
177 }
178 } else {
179
180 SOLUTION_ALGORITHM_tangentFlag = tangent;
181 if (theIntegrator->formTangent(tangent, iFactor, cFactor) < 0){
182 opserr << "WARNING NewtonRaphson::solveCurrentStep() -";
183 opserr << "the Integrator failed in formTangent()\n";

Callers

nothing calls this directly

Calls 12

getLinearSOEptrMethod · 0.80
getAnalysisModelPtrMethod · 0.45
formUnbalanceMethod · 0.45
setEquiSolnAlgoMethod · 0.45
startMethod · 0.45
formTangentMethod · 0.45
solveMethod · 0.45
updateMethod · 0.45
getXMethod · 0.45
testMethod · 0.45
recordMethod · 0.45

Tested by

no test coverage detected