| 82 | } |
| 83 | |
| 84 | int |
| 85 | IncrementalIntegrator::formTangent(int statFlag) |
| 86 | { |
| 87 | int result = 0; |
| 88 | statusFlag = statFlag; |
| 89 | |
| 90 | if (theAnalysisModel == 0 || theSOE == 0) { |
| 91 | opserr << "WARNING IncrementalIntegrator::formTangent() -"; |
| 92 | opserr << " no AnalysisModel or LinearSOE have been set\n"; |
| 93 | return -1; |
| 94 | } |
| 95 | |
| 96 | // zero the A matrix of the linearSOE |
| 97 | theSOE->zeroA(); |
| 98 | |
| 99 | // the loops to form and add the tangents are broken into two for |
| 100 | // efficiency when performing parallel computations - CHANGE |
| 101 | |
| 102 | // loop through the FE_Elements adding their contributions to the tangent |
| 103 | FE_Element *elePtr; |
| 104 | FE_EleIter &theEles2 = theAnalysisModel->getFEs(); |
| 105 | while((elePtr = theEles2()) != 0) |
| 106 | if (theSOE->addA(elePtr->getTangent(this),elePtr->getID()) < 0) { |
| 107 | opserr << "WARNING IncrementalIntegrator::formTangent -"; |
| 108 | opserr << " failed in addA for ID " << elePtr->getID(); |
| 109 | result = -3; |
| 110 | } |
| 111 | |
| 112 | return result; |
| 113 | } |
| 114 | |
| 115 | int |
| 116 | IncrementalIntegrator::formTangent(int statFlag, double iFact, double cFact) |
no test coverage detected