| 763 | } |
| 764 | |
| 765 | void |
| 766 | ForceBeamColumn3d::computeReactions(double *p0) |
| 767 | { |
| 768 | int type; |
| 769 | double L = crdTransf->getInitialLength(); |
| 770 | |
| 771 | for (int i = 0; i < numEleLoads; i++) { |
| 772 | |
| 773 | double loadFactor = eleLoadFactors[i]; |
| 774 | const Vector &data = eleLoads[i]->getData(type, loadFactor); |
| 775 | |
| 776 | if (type == LOAD_TAG_Beam3dUniformLoad) { |
| 777 | double wy = data(0)*loadFactor; // Transverse |
| 778 | double wz = data(1)*loadFactor; // Transverse |
| 779 | double wa = data(2)*loadFactor; // Axial |
| 780 | |
| 781 | p0[0] -= wa*L; |
| 782 | double V = 0.5*wy*L; |
| 783 | p0[1] -= V; |
| 784 | p0[2] -= V; |
| 785 | V = 0.5*wz*L; |
| 786 | p0[3] -= V; |
| 787 | p0[4] -= V; |
| 788 | } |
| 789 | else if (type == LOAD_TAG_Beam3dPartialUniformLoad) { |
| 790 | double wy = data(0) * loadFactor; // Transverse Y at start |
| 791 | double wz = data(1) * loadFactor; // Transverse Z at start |
| 792 | double wa = data(2) * loadFactor; // Axial at start |
| 793 | double a = data(3) * L; |
| 794 | double b = data(4) * L; |
| 795 | double wyb = data(5) * loadFactor; // Transverse Y at end |
| 796 | double wzb = data(6) * loadFactor; // Transverse Z at end |
| 797 | double wab = data(7) * loadFactor; // Axial at end |
| 798 | p0[0] -= wa * (b - a) + 0.5 * (wab - wa) * (b - a); |
| 799 | double c = a + 0.5 * (b - a); |
| 800 | double Fy = wy * (b - a); // resultant transverse load Y (uniform part) |
| 801 | p0[1] -= Fy * (1 - c / L); |
| 802 | p0[2] -= Fy * c / L; |
| 803 | double Fz = wz * (b - a); // resultant transverse load Z (uniform part) |
| 804 | p0[3] -= Fz * (1 - c / L); |
| 805 | p0[4] -= Fz * c / L; |
| 806 | c = a + 2.0 / 3.0 * (b - a); |
| 807 | Fy = 0.5 * (wyb - wy) * (b - a); // resultant transverse load Y (triang. part) |
| 808 | p0[1] -= Fy * (1 - c / L); |
| 809 | p0[2] -= Fy * c / L; |
| 810 | Fz = 0.5 * (wzb - wz) * (b - a); // resultant transverse load Z (triang. part) |
| 811 | p0[3] -= Fz * (1 - c / L); |
| 812 | p0[4] -= Fz * c / L; |
| 813 | } |
| 814 | else if (type == LOAD_TAG_Beam3dPointLoad) { |
| 815 | double Py = data(0)*loadFactor; |
| 816 | double Pz = data(1)*loadFactor; |
| 817 | double N = data(2)*loadFactor; |
| 818 | double aOverL = data(3); |
| 819 | |
| 820 | if (aOverL < 0.0 || aOverL > 1.0) |
| 821 | continue; |
| 822 |
no test coverage detected