int AlphaOSGeneralized::formElementResidual(void) { // calculate Residual Force AnalysisModel *theModel = this->getAnalysisModel(); LinearSOE *theSOE = this->getLinearSOE(); // loop through the FE_Elements and add the residual FE_Element *elePtr; FE_EleIter &theEles = theModel->getFEs(); while((elePtr = theEles()) != 0) { if (theSOE->addB(elePtr->getResidual(this), elePtr->getID()) < 0) { opserr << "WARNING AlphaOSGeneralized::formElementResidual -"; opserr << " failed in addB for ID " << elePtr->getID(); return -1; } if (alphaF < 1.0) { if (statusFlag == CURRENT_TANGENT) { if (theSOE->addB(elePtr->getK_Force(*Ut-*Upt), elePtr->getID(), alphaF-1.0) < 0) { opserr << "WARNING AlphaOSGeneralized::formElementResidual -"; opserr << " failed in addB for ID " << elePtr->getID(); return -2; } } else if (statusFlag == INITIAL_TANGENT) { if (theSOE->addB(elePtr->getKi_Force(*Ut-*Upt), elePtr->getID(), alphaF-1.0) < 0) { opserr << "WARNING AlphaOSGeneralized::formElementResidual -"; opserr << " failed in addB for ID " << elePtr->getID(); return -2; } } } } return 0; }
int RitzIntegrator::formB() { if (theAnalysisModel == 0 || theSOE == 0) { opserr << "WARNING RitzIntegrator::formB -"; opserr << " no AnalysisModel or EigenSOE has been set\n"; return -1; } // the loops to form and add the tangents are broken into two for // efficiency when performing parallel computations // loop through the FE_Elements getting them to form the tangent // FE_EleIter &theEles1 = theAnalysisModel->getFEs(); FE_Element *elePtr; theSOE->zeroB(); // while((elePtr = theEles1()) != 0) // elePtr->formTangent(this); // loop through the FE_Elements getting them to add the tangent int result = 0; FE_EleIter &theEles2 = theAnalysisModel->getFEs(); while((elePtr = theEles2()) != 0) { if (theSOE->addB(elePtr->getResidual(this), elePtr->getID()) < 0) { opserr << "WARNING RitzIntegrator::formB -"; opserr << " failed in addB for ID " << elePtr->getID(); result = -2; } } DOF_Group *dofPtr; DOF_GrpIter &theDofs = theAnalysisModel->getDOFs(); while((dofPtr = theDofs()) != 0) { // dofPtr->formTangent(this); if (theSOE->addB(dofPtr->getM_Force(theSOE->getX(),1.0),dofPtr->getID()) < 0) { opserr << "WARNING RitzIntegrator::formB -"; opserr << " failed in addB for ID " << dofPtr->getID(); result = -3; } } return result; }
int IncrementalIntegrator::formElementResidual(void) { // loop through the FE_Elements and add the residual FE_Element *elePtr; int res = 0; FE_EleIter &theEles2 = theAnalysisModel->getFEs(); while((elePtr = theEles2()) != 0) { if (theSOE->addB(elePtr->getResidual(this),elePtr->getID()) <0) { opserr << "WARNING IncrementalIntegrator::formElementResidual -"; opserr << " failed in addB for ID " << elePtr->getID(); res = -2; } } return res; }
int PFEMIntegrator::formSensitivityRHS(int passedGradNumber) { sensitivityFlag = 1; // Set a couple of data members gradNumber = passedGradNumber; // Get pointer to the SOE LinearSOE *theSOE = this->getLinearSOE(); // Get the analysis model AnalysisModel *theModel = this->getAnalysisModel(); // Randomness in external load (including randomness in time series) // Get domain Domain *theDomain = theModel->getDomainPtr(); // Loop through nodes to zero the unbalaced load Node *nodePtr; NodeIter &theNodeIter = theDomain->getNodes(); while ((nodePtr = theNodeIter()) != 0) nodePtr->zeroUnbalancedLoad(); // Loop through load patterns to add external load sensitivity LoadPattern *loadPatternPtr; LoadPatternIter &thePatterns = theDomain->getLoadPatterns(); double time; while((loadPatternPtr = thePatterns()) != 0) { time = theDomain->getCurrentTime(); loadPatternPtr->applyLoadSensitivity(time); } // Randomness in element/material contributions // Loop through FE elements FE_Element *elePtr; FE_EleIter &theEles = theModel->getFEs(); while((elePtr = theEles()) != 0) { theSOE->addB( elePtr->getResidual(this), elePtr->getID() ); } // Loop through DOF groups (IT IS IMPORTANT THAT THIS IS DONE LAST!) DOF_Group *dofPtr; DOF_GrpIter &theDOFs = theModel->getDOFs(); while((dofPtr = theDOFs()) != 0) { theSOE->addB( dofPtr->getUnbalance(this), dofPtr->getID() ); } // Reset the sensitivity flag sensitivityFlag = 0; return 0; }