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

Method setupModal

DEVELOPER/core/IncrementalIntegrator.cpp:435–496  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

433
434
435int
436IncrementalIntegrator::setupModal(const Vector *modalDampingValues)
437{
438 int numModes = modalDampingValues->Size();
439
440 const Vector &eigenvalues = theAnalysisModel->getEigenvalues();
441 int numEigen = eigenvalues.Size();
442
443 if (numEigen < numModes)
444 numModes = numEigen;
445
446 int numDOF = theSOE->getNumEqn();
447
448 if (eigenValues == 0 || *eigenValues != eigenvalues) {
449 if (eigenValues != 0)
450 delete eigenValues;
451 if (eigenVectors != 0)
452 delete [] eigenVectors;
453 if (dampingForces != 0)
454 delete dampingForces;
455 if (mV != 0)
456 delete mV;
457 if (tmpV1 != 0)
458 delete tmpV1;
459 if (tmpV2 != 0)
460 delete tmpV2;
461
462 eigenValues = new Vector(eigenvalues);
463 dampingForces = new Vector(numDOF);
464 eigenVectors = new double[numDOF*numModes];
465 mV = new Vector(numDOF);
466 tmpV1 = new Vector(numDOF);
467 tmpV2 = new Vector(numDOF);
468
469 DOF_GrpIter &theDOFs2 = theAnalysisModel->getDOFs();
470 DOF_Group *dofPtr;
471 while ((dofPtr = theDOFs2()) != 0) {
472 const Matrix &dofEigenvectors =dofPtr->getEigenvectors();
473 const ID &dofID = dofPtr->getID();
474 for (int j=0; j<numModes; j++) {
475 for (int i=0; i<dofID.Size(); i++) {
476 int id = dofID(i);
477 if (id >= 0)
478 eigenVectors[j*numDOF + id] = dofEigenvectors(i,j);
479 }
480 }
481 }
482
483 double *eigenVectors2 = new double[numDOF*numModes];
484
485 for (int i=0; i<numModes; i++) {
486 double *eigenVectorI = &eigenVectors[numDOF*i];
487 double *mEigenVectorI = &eigenVectors2[numDOF*i];
488 Vector v1(eigenVectorI,numDOF);
489 Vector v2(mEigenVectorI,numDOF);
490 this->doMv(v1, v2);
491 }
492 eigenVectors = eigenVectors2;

Callers 2

addModalDampingForceMethod · 0.95
addModalDampingMatrixMethod · 0.95

Calls 4

doMvMethod · 0.95
getIDMethod · 0.80
SizeMethod · 0.45
getNumEqnMethod · 0.45

Tested by

no test coverage detected