| 763 | } |
| 764 | |
| 765 | void |
| 766 | FE_Element::addM_Force(const Vector &accel, double fact) |
| 767 | { |
| 768 | if (myEle != 0) { |
| 769 | |
| 770 | // check for a quick return |
| 771 | if (fact == 0.0 || !myEle->isActive()) |
| 772 | return; |
| 773 | if (myEle->isSubdomain() == false) { |
| 774 | // get the components we need out of the vector |
| 775 | // and place in a temporary vector |
| 776 | Vector tmp(numDOF); |
| 777 | for (int i=0; i<numDOF; i++) { |
| 778 | int loc = myID(i); |
| 779 | if (loc >= 0) |
| 780 | tmp(i) = accel(loc); |
| 781 | else |
| 782 | tmp(i) = 0.0; |
| 783 | } |
| 784 | |
| 785 | if (theResidual->addMatrixVector(1.0, myEle->getMass(), tmp, fact) < 0){ |
| 786 | opserr << "WARNING FE_Element::addM_Force() - "; |
| 787 | opserr << "- addMatrixVector returned error\n"; |
| 788 | } |
| 789 | } |
| 790 | else { |
| 791 | opserr << "WARNING FE_Element::addM_Force() - "; |
| 792 | opserr << "- this should not be called on a Subdomain!\n"; |
| 793 | } |
| 794 | } |
| 795 | else { |
| 796 | opserr << "WARNING FE_Element::addM_Force() - no Element *given "; |
| 797 | opserr << "- subclasses must provide implementation\n"; |
| 798 | } |
| 799 | } |
| 800 | |
| 801 | void |
| 802 | FE_Element::addD_Force(const Vector &accel, double fact) |
no test coverage detected