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

Method formSensitivityRHS

SRC/analysis/integrator/LoadControl.cpp:242–299  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

240}
241
242int
243LoadControl::formSensitivityRHS(int passedGradNumber)
244{
245 sensitivityFlag = 1;
246
247 // Set a couple of data members
248 gradNumber = passedGradNumber;
249
250 // get model
251 AnalysisModel* theAnalysisModel = this->getAnalysisModel();
252 LinearSOE* theSOE = this->getLinearSOE();
253
254 // Loop through elements
255 FE_Element *elePtr;
256 FE_EleIter &theEles = theAnalysisModel->getFEs();
257 while((elePtr = theEles()) != 0) {
258 theSOE->addB( elePtr->getResidual(this), elePtr->getID() );
259 }
260
261 // Loop through the loadPatterns and add the dPext/dh contributions
262 static Vector oneDimVectorWithOne(1);
263 oneDimVectorWithOne(0) = 1.0;
264 static ID oneDimID(1);
265
266 Node *aNode;
267 DOF_Group *aDofGroup;
268 int nodeNumber, dofNumber, relevantID, i, sizeRandomLoads, numRandomLoads;
269 LoadPattern *loadPatternPtr;
270
271 Domain *theDomain = theAnalysisModel->getDomainPtr();
272 LoadPatternIter &thePatterns = theDomain->getLoadPatterns();
273 while((loadPatternPtr = thePatterns()) != 0) {
274 const Vector &randomLoads = loadPatternPtr->getExternalForceSensitivity(gradNumber);
275 sizeRandomLoads = randomLoads.Size();
276 if (sizeRandomLoads == 1) {
277 // No random loads in this load pattern
278 }
279 else {
280 // Random loads: add contributions to the 'B' vector
281 numRandomLoads = (int)(sizeRandomLoads/2);
282 for (i=0; i<numRandomLoads*2; i=i+2) {
283 nodeNumber = (int)randomLoads(i);
284 dofNumber = (int)randomLoads(i+1);
285 aNode = theDomain->getNode(nodeNumber);
286 aDofGroup = aNode->getDOF_GroupPtr();
287 const ID &anID = aDofGroup->getID();
288 relevantID = anID(dofNumber-1);
289 oneDimID(0) = relevantID;
290 theSOE->addB(oneDimVectorWithOne, oneDimID);
291 }
292 }
293 }
294
295 // reset sensitivity flag
296 sensitivityFlag = 0;
297
298 return 0;
299}

Callers 1

computeSensitivitiesMethod · 0.95

Calls 9

getResidualMethod · 0.80
getIDMethod · 0.80
getAnalysisModelMethod · 0.45
getLinearSOEMethod · 0.45
addBMethod · 0.45
getDomainPtrMethod · 0.45
SizeMethod · 0.45
getNodeMethod · 0.45
getDOF_GroupPtrMethod · 0.45

Tested by

no test coverage detected