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

Method addModalDampingForce

SRC/analysis/integrator/IncrementalIntegrator.cpp:501–559  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

499
500
501int
502IncrementalIntegrator::addModalDampingForce(const Vector *modalDampingValues)
503{
504 int res = 0;
505
506 if (modalDampingValues == 0)
507 return 0;
508
509 int numModes = modalDampingValues->Size();
510
511 const Vector &eigenvalues = theAnalysisModel->getEigenvalues();
512 int numEigen = eigenvalues.Size();
513
514 if (numEigen < numModes) {
515 numModes = numEigen;
516 opserr << "WARNING: HAving to reset numModes to : " << numModes << "as not enough eigenvalues. NOTE if 0 you have done something to require new analysis or have not issued eigen command\n";
517 }
518
519 int numDOF = theSOE->getNumEqn();
520
521 if (eigenValues == 0 || *eigenValues != eigenvalues) {
522 this->setupModal(modalDampingValues);
523 }
524
525 const Vector &vel = this->getVel();
526
527 dampingForces->Zero();
528
529 for (int i=0; i<numModes; i++) {
530
531 double eigenvalue = (*eigenValues)(i);
532 double modalDampingValue = (*modalDampingValues)(i);
533 if (eigenvalue > 0 && modalDampingValue != 0.0) {
534 double wn = sqrt(eigenvalue);
535
536 double *eigenVectorI = &eigenVectors[numDOF*i];
537 double beta = 0.0;
538
539 for (int j=0; j<numDOF; j++) {
540 double eij = eigenVectorI[j];
541 if (eij != 0) {
542 beta += eij * vel(j);
543 }
544 }
545
546 beta = -2.0 * modalDampingValue * wn * beta;
547
548 for (int j=0; j<numDOF; j++) {
549 double eij = eigenVectorI[j];
550 if (eij != 0)
551 (*dampingForces)(j) += beta * eij;
552 }
553 }
554 }
555
556 theSOE->setB(*dampingForces);
557
558 return res;

Callers 10

formUnbalanceMethod · 0.45
formUnbalanceMethod · 0.45
formUnbalanceMethod · 0.45
formUnbalanceMethod · 0.45
formUnbalanceMethod · 0.45
formUnbalanceMethod · 0.45
formUnbalanceMethod · 0.45
formUnbalanceMethod · 0.45
formUnbalanceMethod · 0.45
formUnbalanceMethod · 0.45

Calls 6

setupModalMethod · 0.95
SizeMethod · 0.45
getNumEqnMethod · 0.45
getVelMethod · 0.45
ZeroMethod · 0.45
setBMethod · 0.45

Tested by

no test coverage detected