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

Method update

SRC/analysis/integrator/HHTHSFixedNumIter.cpp:421–490  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

419
420
421int HHTHSFixedNumIter::update(const Vector &deltaU)
422{
423 AnalysisModel *theModel = this->getAnalysisModel();
424 if (theModel == 0) {
425 opserr << "WARNING HHTHSFixedNumIter::update() - no AnalysisModel set\n";
426 return -1;
427 }
428 ConvergenceTest *theTest = this->getConvergenceTest();
429 if (theTest == 0) {
430 opserr << "WARNING HHTHSFixedNumIter::update() - no ConvergenceTest set\n";
431 return -2;
432 }
433
434 // check domainChanged() has been called, i.e. Ut will not be zero
435 if (Ut == 0) {
436 opserr << "WARNING HHTHSFixedNumIter::update() - domainChange() failed or not called\n";
437 return -3;
438 }
439
440 // check deltaU is of correct size
441 if (deltaU.Size() != U->Size()) {
442 opserr << "WARNING HHTHSFixedNumIter::update() - Vectors of incompatible size ";
443 opserr << " expecting " << U->Size() << " obtained " << deltaU.Size() << endln;
444 return -4;
445 }
446
447 // get interpolation location and scale displacement increment
448 x = (double) theTest->getNumTests()/theTest->getMaxNumTests();
449 if (polyOrder == 1) {
450 (*scaledDeltaU) = x*((*U)+deltaU) - (x-1.0)*(*Ut) - (*U);
451 }
452 else if (polyOrder == 2) {
453 (*scaledDeltaU) = x*(x+1.0)/2.0*((*U)+deltaU) - (x-1.0)*(x+1.0)*(*Ut)
454 + (x-1.0)*x/2.0*(*Utm1) - (*U);
455 }
456 else if (polyOrder == 3) {
457 (*scaledDeltaU) = x*(x+1.0)*(x+2.0)/6.0*((*U)+deltaU) - (x-1.0)*(x+1.0)*(x+2.0)/2.0*(*Ut)
458 + (x-1.0)*x*(x+2.0)/2.0*(*Utm1) - (x-1.0)*x*(x+1.0)/6.0*(*Utm2) - (*U);
459 }
460 else {
461 opserr << "WARNING HHTHSFixedNumIter::update() - polyOrder > 3 not supported\n";
462 return -5;
463 }
464
465 // determine the response at t+deltaT
466 U->addVector(1.0, *scaledDeltaU, c1);
467
468 Udot->addVector(1.0, *scaledDeltaU, c2);
469
470 Udotdot->addVector(1.0, *scaledDeltaU, c3);
471
472 // determine response at t+alpha*deltaT
473 (*Ualpha) = *Ut;
474 Ualpha->addVector((1.0-alphaF), *U, alphaF);
475
476 (*Ualphadot) = *Utdot;
477 Ualphadot->addVector((1.0-alphaF), *Udot, alphaF);
478

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