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

Method addModalDampingMatrix

DEVELOPER/core/IncrementalIntegrator.cpp:555–612  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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

Callers 1

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