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

Method update

SRC/analysis/integrator/HHTHSFixedNumIter_TP.cpp:474–533  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

472
473
474int HHTHSFixedNumIter_TP::update(const Vector &deltaU)
475{
476 AnalysisModel *theModel = this->getAnalysisModel();
477 if (theModel == 0) {
478 opserr << "WARNING HHTHSFixedNumIter_TP::update() - no AnalysisModel set\n";
479 return -1;
480 }
481 ConvergenceTest *theTest = this->getConvergenceTest();
482 if (theTest == 0) {
483 opserr << "WARNING HHTHSFixedNumIter_TP::update() - no ConvergenceTest set\n";
484 return -2;
485 }
486
487 // check domainChanged() has been called, i.e. Ut will not be zero
488 if (Ut == 0) {
489 opserr << "WARNING HHTHSFixedNumIter_TP::update() - domainChange() failed or not called\n";
490 return -3;
491 }
492
493 // check deltaU is of correct size
494 if (deltaU.Size() != U->Size()) {
495 opserr << "WARNING HHTHSFixedNumIter_TP::update() - Vectors of incompatible size ";
496 opserr << " expecting " << U->Size() << " obtained " << deltaU.Size() << endln;
497 return -4;
498 }
499
500 // get interpolation location and scale displacement increment
501 x = (double) theTest->getNumTests()/theTest->getMaxNumTests();
502 if (polyOrder == 1) {
503 (*scaledDeltaU) = x*((*U)+deltaU) - (x-1.0)*(*Ut) - (*U);
504 }
505 else if (polyOrder == 2) {
506 (*scaledDeltaU) = x*(x+1.0)/2.0*((*U)+deltaU) - (x-1.0)*(x+1.0)*(*Ut)
507 + (x-1.0)*x/2.0*(*Utm1) - (*U);
508 }
509 else if (polyOrder == 3) {
510 (*scaledDeltaU) = x*(x+1.0)*(x+2.0)/6.0*((*U)+deltaU) - (x-1.0)*(x+1.0)*(x+2.0)/2.0*(*Ut)
511 + (x-1.0)*x*(x+2.0)/2.0*(*Utm1) - (x-1.0)*x*(x+1.0)/6.0*(*Utm2) - (*U);
512 }
513 else {
514 opserr << "WARNING HHTHSFixedNumIter_TP::update() - polyOrder > 3 not supported\n";
515 return -5;
516 }
517
518 // determine the response at t+deltaT
519 U->addVector(1.0, *scaledDeltaU, c1);
520
521 Udot->addVector(1.0, *scaledDeltaU, c2);
522
523 Udotdot->addVector(1.0, *scaledDeltaU, c3);
524
525 // update the response at the DOFs
526 theModel->setResponse(*U, *Udot, *Udotdot);
527 if (theModel->updateDomain() < 0) {
528 opserr << "HHTHSFixedNumIter_TP::update() - failed to update the domain\n";
529 return -6;
530 }
531

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