| 1065 | } |
| 1066 | |
| 1067 | void |
| 1068 | ForceBeamColumn2d::computeReactions(double *p0) |
| 1069 | { |
| 1070 | int type; |
| 1071 | double L = crdTransf->getInitialLength(); |
| 1072 | |
| 1073 | for (int i = 0; i < numEleLoads; i++) { |
| 1074 | |
| 1075 | double loadFactor = eleLoadFactors[i]; |
| 1076 | const Vector &data = eleLoads[i]->getData(type, loadFactor); |
| 1077 | |
| 1078 | if (type == LOAD_TAG_Beam2dUniformLoad) { |
| 1079 | double wa = data(1)*loadFactor; // Axial |
| 1080 | double wy = data(0)*loadFactor; // Transverse |
| 1081 | |
| 1082 | p0[0] -= wa*L; |
| 1083 | double V = 0.5*wy*L; |
| 1084 | p0[1] -= V; |
| 1085 | p0[2] -= V; |
| 1086 | } |
| 1087 | if (type == LOAD_TAG_BeamUniformMoment) { |
| 1088 | double mz = data(2)*loadFactor; // About z |
| 1089 | |
| 1090 | p0[1] += mz; |
| 1091 | p0[2] -= mz; |
| 1092 | } |
| 1093 | else if (type == LOAD_TAG_Beam2dPartialUniformLoad) { |
| 1094 | double waa = data(2)*loadFactor; // Axial |
| 1095 | double wab = data(3)*loadFactor; // Axial |
| 1096 | double wya = data(0)*loadFactor; // Transverse |
| 1097 | double wyb = data(1)*loadFactor; // Transverse |
| 1098 | double a = data(4)*L; |
| 1099 | double b = data(5)*L; |
| 1100 | |
| 1101 | p0[0] -= waa*(b-a) + 0.5*(wab-waa)*(b-a); |
| 1102 | double Fy = wya*(b-a); |
| 1103 | double c = a + 0.5*(b-a); |
| 1104 | p0[1] -= Fy*(1-c/L); |
| 1105 | p0[2] -= Fy*c/L; |
| 1106 | Fy = 0.5*(wyb-wya)*(b-a); |
| 1107 | c = a + 2.0/3.0*(b-a); |
| 1108 | p0[1] -= Fy*(1-c/L); |
| 1109 | p0[2] -= Fy*c/L; |
| 1110 | } |
| 1111 | else if (type == LOAD_TAG_Beam2dPointLoad) { |
| 1112 | double P = data(0)*loadFactor; |
| 1113 | double N = data(1)*loadFactor; |
| 1114 | double aOverL = data(2); |
| 1115 | |
| 1116 | if (aOverL < 0.0 || aOverL > 1.0) |
| 1117 | continue; |
| 1118 | |
| 1119 | double V1 = P*(1.0-aOverL); |
| 1120 | double V2 = P*aOverL; |
| 1121 | |
| 1122 | p0[0] -= N; |
| 1123 | p0[1] -= V1; |
| 1124 | p0[2] -= V2; |
no test coverage detected