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

Method update

SRC/analysis/integrator/NewmarkHSFixedNumIter.cpp:361–420  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

359
360
361int NewmarkHSFixedNumIter::update(const Vector &deltaU)
362{
363 AnalysisModel *theModel = this->getAnalysisModel();
364 if (theModel == 0) {
365 opserr << "WARNING NewmarkHSFixedNumIter::update() - no AnalysisModel set\n";
366 return -1;
367 }
368 ConvergenceTest *theTest = this->getConvergenceTest();
369 if (theTest == 0) {
370 opserr << "WARNING NewmarkHSFixedNumIter::update() - no ConvergenceTest set\n";
371 return -2;
372 }
373
374 // check domainChanged() has been called, i.e. Ut will not be zero
375 if (Ut == 0) {
376 opserr << "WARNING NewmarkHSFixedNumIter::update() - domainChange() failed or not called\n";
377 return -3;
378 }
379
380 // check deltaU is of correct size
381 if (deltaU.Size() != U->Size()) {
382 opserr << "WARNING NewmarkHSFixedNumIter::update() - Vectors of incompatible size";
383 opserr << " expecting " << U->Size() << " obtained " << deltaU.Size() << endln;
384 return -4;
385 }
386
387 // get interpolation location and scale displacement increment
388 x = (double) theTest->getNumTests()/theTest->getMaxNumTests();
389 if (polyOrder == 1) {
390 (*scaledDeltaU) = x*((*U)+deltaU) - (x-1.0)*(*Ut) - (*U);
391 }
392 else if (polyOrder == 2) {
393 (*scaledDeltaU) = x*(x+1.0)/2.0*((*U)+deltaU) - (x-1.0)*(x+1.0)*(*Ut)
394 + (x-1.0)*x/2.0*(*Utm1) - (*U);
395 }
396 else if (polyOrder == 3) {
397 (*scaledDeltaU) = x*(x+1.0)*(x+2.0)/6.0*((*U)+deltaU) - (x-1.0)*(x+1.0)*(x+2.0)/2.0*(*Ut)
398 + (x-1.0)*x*(x+2.0)/2.0*(*Utm1) - (x-1.0)*x*(x+1.0)/6.0*(*Utm2) - (*U);
399 }
400 else {
401 opserr << "WARNING NewmarkHSFixedNumIter::update() - polyOrder > 3 not supported\n";
402 return -5;
403 }
404
405 // determine the response at t+deltaT
406 U->addVector(1.0, *scaledDeltaU, c1);
407
408 Udot->addVector(1.0, *scaledDeltaU, c2);
409
410 Udotdot->addVector(1.0, *scaledDeltaU, c3);
411
412 // update the response at the DOFs
413 theModel->setResponse(*U, *Udot, *Udotdot);
414 if (theModel->updateDomain() < 0) {
415 opserr << "NewmarkHSFixedNumIter::update() - failed to update the domain\n";
416 return -6;
417 }
418

Callers

nothing calls this directly

Calls 8

getAnalysisModelMethod · 0.45
getConvergenceTestMethod · 0.45
SizeMethod · 0.45
getNumTestsMethod · 0.45
getMaxNumTestsMethod · 0.45
addVectorMethod · 0.45
setResponseMethod · 0.45
updateDomainMethod · 0.45

Tested by

no test coverage detected