| 835 | } |
| 836 | |
| 837 | void |
| 838 | FE_Element::addK_Force(const Vector &disp, double fact) |
| 839 | { |
| 840 | if (myEle != 0) { |
| 841 | |
| 842 | // check for a quick return |
| 843 | if (fact == 0.0 || !myEle->isActive()) |
| 844 | return; |
| 845 | if (myEle->isSubdomain() == false) { |
| 846 | // get the components we need out of the vector |
| 847 | // and place in a temporary vector |
| 848 | Vector tmp(numDOF); |
| 849 | for (int i=0; i<numDOF; i++) { |
| 850 | int loc = myID(i); |
| 851 | if (loc >= 0) |
| 852 | tmp(i) = disp(loc); |
| 853 | else |
| 854 | tmp(i) = 0.0; |
| 855 | } |
| 856 | |
| 857 | if (theResidual->addMatrixVector(1.0, myEle->getTangentStiff(), tmp, fact) < 0){ |
| 858 | opserr << "WARNING FE_Element::addK_Force() - "; |
| 859 | opserr << "- addMatrixVector returned error\n"; |
| 860 | } |
| 861 | } |
| 862 | else { |
| 863 | opserr << "WARNING FE_Element::addK_Force() - "; |
| 864 | opserr << "- this should not be called on a Subdomain!\n"; |
| 865 | } |
| 866 | } |
| 867 | else { |
| 868 | opserr << "WARNING FE_Element::addK_Force() - no Element *given "; |
| 869 | opserr << "- subclasses must provide implementation\n"; |
| 870 | } |
| 871 | } |
| 872 | |
| 873 | void |
| 874 | FE_Element::addKg_Force(const Vector &disp, double fact) |
no test coverage detected