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

Method addModalDampingMatrix

SRC/analysis/integrator/IncrementalIntegrator.cpp:562–620  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

560
561
562int
563IncrementalIntegrator::addModalDampingMatrix(const Vector *modalDampingValues) {
564 int res = 0;
565 // return 0;
566
567 if (modalDampingValues == 0)
568 return 0;
569
570 double cFactor=this->getCFactor();
571 if (cFactor == 0)
572 return 0;
573
574 int numModes = modalDampingValues->Size();
575
576 const Vector &eigenvalues = theAnalysisModel->getEigenvalues();
577 int numEigen = eigenvalues.Size();
578
579 if (numEigen < numModes)
580 numModes = numEigen;
581
582 int numDOF = theSOE->getNumEqn();
583
584 if (eigenValues == 0 || *eigenValues != eigenvalues) {
585 this->setupModal(modalDampingValues);
586 }
587
588 for (int dof = 0; dof<numDOF; dof++) {
589 dampingForces->Zero();
590 bool zeroCol = true;
591
592 for (int i=0; i<numModes; i++) {
593
594 double eigenvalue = (*eigenValues)(i);
595 double modalDampingValue = (*modalDampingValues)(i);
596 if (eigenvalue > 0 && modalDampingValue != 0.0) {
597 double wn = sqrt(eigenvalue);
598 double *eigenVectorI = &eigenVectors[numDOF*i];
599 double ei_dof = eigenVectors[numDOF*i+dof];
600
601 if (ei_dof != 0.0) {
602 zeroCol = false;
603
604 double beta = 2.0 * modalDampingValue * wn * ei_dof * cFactor;
605
606 for (int j=0; j<numDOF; j++) {
607 double eij = eigenVectorI[j];
608 if (eij != 0)
609 (*dampingForces)(j) += beta * eij;
610 }
611 }
612 }
613 }
614
615 if (zeroCol == false)
616 theSOE->addColA(*dampingForces, dof, 1.0);
617
618 }
619 return res;

Callers 2

formTangentMethod · 0.45
formTangentMethod · 0.45

Calls 6

getCFactorMethod · 0.95
setupModalMethod · 0.95
SizeMethod · 0.45
getNumEqnMethod · 0.45
ZeroMethod · 0.45
addColAMethod · 0.45

Tested by

no test coverage detected