| 594 | } |
| 595 | |
| 596 | void |
| 597 | ForceBeamColumnCBDI3d::computeReactions(double *p0) |
| 598 | { |
| 599 | int type; |
| 600 | double L = crdTransf->getInitialLength(); |
| 601 | |
| 602 | for (int i = 0; i < numEleLoads; i++) { |
| 603 | |
| 604 | double loadFactor = eleLoadFactors[i]; |
| 605 | const Vector &data = eleLoads[i]->getData(type, loadFactor); |
| 606 | |
| 607 | if (type == LOAD_TAG_Beam3dUniformLoad) { |
| 608 | double wy = data(0)*loadFactor; // Transverse |
| 609 | double wz = data(1)*loadFactor; // Transverse |
| 610 | double wa = data(2)*loadFactor; // Axial |
| 611 | |
| 612 | p0[0] -= wa*L; |
| 613 | double V = 0.5*wy*L; |
| 614 | p0[1] -= V; |
| 615 | p0[2] -= V; |
| 616 | V = 0.5*wz*L; |
| 617 | p0[3] -= V; |
| 618 | p0[4] -= V; |
| 619 | } |
| 620 | else if (type == LOAD_TAG_Beam3dPartialUniformLoad) { |
| 621 | double wa = data(2)*loadFactor; // Axial |
| 622 | double wy = data(0)*loadFactor; // Transverse |
| 623 | double wz = data(1)*loadFactor; // Transverse |
| 624 | double a = data(3)*L; |
| 625 | double b = data(4)*L; |
| 626 | |
| 627 | p0[0] -= wa*(b-a); |
| 628 | double Fy = wy*(b-a); |
| 629 | double c = a + 0.5*(b-a); |
| 630 | p0[1] -= Fy*(1-c/L); |
| 631 | p0[2] -= Fy*c/L; |
| 632 | double Fz = wz*(b-a); |
| 633 | p0[3] -= Fz*(1-c/L); |
| 634 | p0[4] -= Fz*c/L; |
| 635 | } |
| 636 | else if (type == LOAD_TAG_Beam3dPointLoad) { |
| 637 | double Py = data(0)*loadFactor; |
| 638 | double Pz = data(1)*loadFactor; |
| 639 | double N = data(2)*loadFactor; |
| 640 | double aOverL = data(3); |
| 641 | |
| 642 | if (aOverL < 0.0 || aOverL > 1.0) |
| 643 | continue; |
| 644 | |
| 645 | double V1 = Py*(1.0-aOverL); |
| 646 | double V2 = Py*aOverL; |
| 647 | p0[0] -= N; |
| 648 | p0[1] -= V1; |
| 649 | p0[2] -= V2; |
| 650 | V1 = Pz*(1.0-aOverL); |
| 651 | V2 = Pz*aOverL; |
| 652 | p0[3] -= V1; |
| 653 | p0[4] -= V2; |
no test coverage detected