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

Method addModalDampingForce

DEVELOPER/core/IncrementalIntegrator.cpp:499–552  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

497
498
499int
500IncrementalIntegrator::addModalDampingForce(const Vector *modalDampingValues)
501{
502 int res = 0;
503
504 if (modalDampingValues == 0)
505 return 0;
506
507 int numModes = modalDampingValues->Size();
508
509 const Vector &eigenvalues = theAnalysisModel->getEigenvalues();
510 int numEigen = eigenvalues.Size();
511
512 if (numEigen < numModes)
513 numModes = numEigen;
514
515 int numDOF = theSOE->getNumEqn();
516
517 if (eigenValues == 0 || *eigenValues != eigenvalues) {
518 this->setupModal(modalDampingValues);
519 }
520
521
522 const Vector &vel = this->getVel();
523 dampingForces->Zero();
524
525 for (int i=0; i<numModes; i++) {
526
527 double eigenvalue = (*eigenValues)(i);
528 if (eigenvalue > 0) {
529 double wn = sqrt(eigenvalue);
530 double *eigenVectorI = &eigenVectors[numDOF*i];
531 double beta = 0.0;
532
533 for (int j=0; j<numDOF; j++) {
534 double eij = eigenVectorI[j];
535 if (eij != 0)
536 beta += eij * vel(j);
537 }
538
539 beta = -2.0 * (*modalDampingValues)(i) * wn * beta;
540
541 for (int j=0; j<numDOF; j++) {
542 double eij = eigenVectorI[j];
543 if (eij != 0)
544 (*dampingForces)(j) += beta * eij;
545 }
546 }
547 }
548
549 theSOE->setB(*dampingForces);
550
551 return res;
552}
553
554
555int

Callers 1

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