const Vector& ElastomericBearingBoucWen2d::getResistingForceIncInertia() { // this already includes damping forces from materials theVector = this->getResistingForce(); // subtract external load theVector.addVector(1.0, theLoad, -1.0); // add the damping forces from rayleigh damping if (addRayleigh == 1) { if (alphaM != 0.0 || betaK != 0.0 || betaK0 != 0.0 || betaKc != 0.0) theVector.addVector(1.0, this->getRayleighDampingForces(), 1.0); } // add inertia forces from element mass if (mass != 0.0) { const Vector &accel1 = theNodes[0]->getTrialAccel(); const Vector &accel2 = theNodes[1]->getTrialAccel(); double m = 0.5*mass; for (int i=0; i<2; i++) { theVector(i) += m * accel1(i); theVector(i+3) += m * accel2(i); } } return theVector; }
const Vector & ElasticForceBeamColumn2d::getResistingForceIncInertia() { // Compute the current resisting force theVector = this->getResistingForce(); // Check for a quick return if (rho != 0.0) { const Vector &accel1 = theNodes[0]->getTrialAccel(); const Vector &accel2 = theNodes[1]->getTrialAccel(); double L = crdTransf->getInitialLength(); double m = 0.5*rho*L; theVector(0) += m*accel1(0); theVector(1) += m*accel1(1); theVector(3) += m*accel2(0); theVector(4) += m*accel2(1); // add the damping forces if rayleigh damping if (alphaM != 0.0 || betaK != 0.0 || betaK0 != 0.0 || betaKc != 0.0) theVector += this->getRayleighDampingForces(); } else { // add the damping forces if rayleigh damping if (betaK != 0.0 || betaK0 != 0.0 || betaKc != 0.0) theVector += this->getRayleighDampingForces(); } return theVector; }
int SingleFPSimple2d::getResponse(int responseID, Information &eleInfo) { double MpDelta1, MpDelta2; switch (responseID) { case 1: // global forces return eleInfo.setVector(this->getResistingForce()); case 2: // local forces theVector.Zero(); // determine resisting forces in local system theVector = Tlb^qb; // add P-Delta moments MpDelta1 = qb(0)*(ul(4)-ul(1)); theVector(2) += MpDelta1; MpDelta2 = qb(0)*(1.0 - shearDistI)*L*ul(5); theVector(2) -= MpDelta2; theVector(5) += MpDelta2; return eleInfo.setVector(theVector); case 3: // basic forces return eleInfo.setVector(qb); case 4: // local displacements return eleInfo.setVector(ul); case 5: // basic displacements return eleInfo.setVector(ub); default: return -1; } }
const Vector& EEBeamColumn2d::getResistingForceIncInertia() { // this already includes damping forces from specimen theVector = this->getResistingForce(); // add the damping forces from rayleigh damping if (addRayleigh == 1) { if (alphaM != 0.0 || betaK != 0.0 || betaK0 != 0.0 || betaKc != 0.0) theVector.addVector(1.0, this->getRayleighDampingForces(), 1.0); } // add inertia forces from element mass if (L != 0.0 && rho != 0.0) { const Vector &accel1 = theNodes[0]->getTrialAccel(); const Vector &accel2 = theNodes[1]->getTrialAccel(); double m = 0.5*rho*L; theVector(0) += m * accel1(0); theVector(1) += m * accel1(1); theVector(3) += m * accel2(0); theVector(4) += m * accel2(1); } return theVector; }
const Vector& SingleFPSimple2d::getResistingForceIncInertia() { // this already includes damping forces from materials theVector = this->getResistingForce(); // add the damping forces from rayleigh damping if (addRayleigh == 1) { if (alphaM != 0.0 || betaK != 0.0 || betaK0 != 0.0 || betaKc != 0.0) theVector += this->getRayleighDampingForces(); } // add inertia forces from element mass if (mass != 0.0) { const Vector &accel1 = theNodes[0]->getTrialAccel(); const Vector &accel2 = theNodes[1]->getTrialAccel(); double m = 0.5*mass; for (int i=0; i<2; i++) { theVector(i) += m * accel1(i); theVector(i+3) += m * accel2(i); } } return theVector; }
const Vector& EEBearing3d::getResistingForceIncInertia() { // this already includes damping forces from specimen theVector = this->getResistingForce(); // add the damping forces from rayleigh damping if (addRayleigh == 1) { if (alphaM != 0.0 || betaK != 0.0 || betaK0 != 0.0 || betaKc != 0.0) theVector.addVector(1.0, this->getRayleighDampingForces(), 1.0); } // add inertia forces from element mass if (mass != 0.0) { const Vector &accel1 = theNodes[0]->getTrialAccel(); const Vector &accel2 = theNodes[1]->getTrialAccel(); double m = 0.5*mass; for (int i=0; i<3; i++) { theVector(i) += m * accel1(i); theVector(i+6) += m * accel2(i); } } return theVector; }
const Vector & PY_Macro2D::getResistingForce() { theVector.Zero(); for (int i=0; i<4 ; i++) theVector(i) = trans(0,i)*Tforce; return theVector; }
const Vector& YamamotoBiaxialHDR::getResistingForceIncInertia() { theVector = this->getResistingForce(); // add the damping forces if rayleigh damping if (alphaM != 0.0 || betaK != 0.0 || betaK0 != 0.0 || betaKc != 0.0) theVector += this->getRayleighDampingForces(); // now include the mass portion if (mass != 0.0) { const Vector &accel1 = theNodes[0]->getTrialAccel(); const Vector &accel2 = theNodes[1]->getTrialAccel(); double m = 0.5*mass; for (int i = 0; i < 3; i++) { theVector(i) += m * accel1(i); theVector(i+3) += m * accel2(i); } } return theVector; }
int EEBeamColumn2d::getResponse(int responseID, Information &eleInfo) { double L = theCoordTransf->getInitialLength(); double alpha; static Vector qA(3); switch (responseID) { case 1: // global forces return eleInfo.setVector(this->getResistingForce()); case 2: // local forces /* transform forces from basic sys B to basic sys A (linear) qA(0) = (*qDaq)[0]; qA(1) = -L*(*qDaq)[1] - (*qDaq)[2]; qA(2) = (*qDaq)[2];*/ // transform forces from basic sys B to basic sys A (nonlinear) alpha = atan2((*db)[1],L+(*db)[0]); qA(0) = cos(alpha)*(*qDaq)[0] + sin(alpha)*(*qDaq)[1]; qA(1) = (*db)[1]*(*qDaq)[0] - (L+(*db)[0])*(*qDaq)[1] - (*qDaq)[2]; qA(2) = (*qDaq)[2]; // Axial theVector(0) = -qA(0) + pA0[0]; theVector(3) = qA(0); // Shear theVector(1) = (qA(1)+qA(2))/L + pA0[1]; theVector(4) = -(qA(1)+qA(2))/L + pA0[2]; // Moment theVector(2) = qA(1); theVector(5) = qA(2); return eleInfo.setVector(theVector); case 3: // forces in basic system B return eleInfo.setVector(*qDaq); case 4: // ctrl displacements in basic system B return eleInfo.setVector(dbCtrl); case 5: // ctrl velocities in basic system B return eleInfo.setVector(vbCtrl); case 6: // ctrl accelerations in basic system B return eleInfo.setVector(abCtrl); case 7: // daq displacements in basic system B return eleInfo.setVector(this->getBasicDisp()); case 8: // daq velocities in basic system B return eleInfo.setVector(this->getBasicVel()); case 9: // daq accelerations in basic system B return eleInfo.setVector(this->getBasicAccel()); default: return -1; } }
int ElastomericBearingBoucWen2d::getResponse(int responseID, Information &eleInfo) { double kGeo1, MpDelta1, MpDelta2, MpDelta3; switch (responseID) { case 1: // global forces return eleInfo.setVector(this->getResistingForce()); case 2: // local forces theVector.Zero(); // determine resisting forces in local system theVector.addMatrixTransposeVector(0.0, Tlb, qb, 1.0); // add P-Delta moments kGeo1 = 0.5*qb(0); MpDelta1 = kGeo1*(ul(4)-ul(1)); theVector(2) += MpDelta1; theVector(5) += MpDelta1; MpDelta2 = kGeo1*shearDistI*L*ul(2); theVector(2) += MpDelta2; theVector(5) -= MpDelta2; MpDelta3 = kGeo1*(1.0 - shearDistI)*L*ul(5); theVector(2) -= MpDelta3; theVector(5) += MpDelta3; return eleInfo.setVector(theVector); case 3: // basic forces return eleInfo.setVector(qb); case 4: // local displacements return eleInfo.setVector(ul); case 5: // basic displacements return eleInfo.setVector(ub); case 6: // hysteretic evolution parameter return eleInfo.setDouble(z); case 7: // dzdu return eleInfo.setDouble(dzdu); case 8: // basic stiffness return eleInfo.setDouble(kb(1,1)); default: return -1; } }
vector3df Camera::ProjectToSphere(vector2df ndc) { vector3df theVector(ndc.x, ndc.y, 0.0f); float theLength = ndc.length(); // If the mouse coordinate lies outside the sphere // choose the closest point on the sphere by // setting z to zero and renomalizing if (theLength >= 1.0f) { theVector.x /= (float)sqrt(theLength); theVector.y /= (float)sqrt(theLength); } else { theVector.z = 1.0f - theLength; } //D3DXVec3Normalize(&theVector, &theVector); return theVector; }
int ElastomericBearing2d::getResponse(int responseID, Information &eleInfo) { double kGeo1, MpDelta1, MpDelta2, MpDelta3; switch (responseID) { case 1: // global forces return eleInfo.setVector(this->getResistingForce()); case 2: // local forces theVector.Zero(); // determine resisting forces in local system theVector = Tlb^qb; // add P-Delta moments kGeo1 = 0.5*qb(0); MpDelta1 = kGeo1*(ul(4)-ul(1)); theVector(2) += MpDelta1; theVector(5) += MpDelta1; MpDelta2 = kGeo1*shearDistI*L*ul(2); theVector(2) += MpDelta2; theVector(5) -= MpDelta2; MpDelta3 = kGeo1*(1.0 - shearDistI)*L*ul(5); theVector(2) -= MpDelta3; theVector(5) += MpDelta3; return eleInfo.setVector(theVector); case 3: // basic forces return eleInfo.setVector(qb); case 4: // local displacements return eleInfo.setVector(ul); case 5: // basic displacements return eleInfo.setVector(ub); default: return -1; } }
void ElasticForceBeamColumn2d::Print(OPS_Stream &s, int flag) { static Vector Se(NEBD); static Vector vp(NEBD); static Matrix fe(NEBD,NEBD); if (flag == 2) { s << "#ElasticForceBeamColumn2D\n"; const Vector &node1Crd = theNodes[0]->getCrds(); const Vector &node2Crd = theNodes[1]->getCrds(); const Vector &node1Disp = theNodes[0]->getDisp(); const Vector &node2Disp = theNodes[1]->getDisp(); s << "#NODE " << node1Crd(0) << " " << node1Crd(1) << " " << node1Disp(0) << " " << node1Disp(1) << " " << node1Disp(2) << endln; s << "#NODE " << node2Crd(0) << " " << node2Crd(1) << " " << node2Disp(0) << " " << node2Disp(1) << " " << node2Disp(2) << endln; this->computeBasicForces(Se); double P = Se(0); double M1 = Se(1); double M2 = Se(2); double L = crdTransf->getInitialLength(); double V = (M1+M2)/L; double p0[3]; p0[0] = 0.0; p0[1] = 0.0; p0[2] = 0.0; if (numEleLoads > 0) this->computeReactions(p0); s << "#END_FORCES " << -P+p0[0] << " " << V+p0[1] << " " << M1 << endln; s << "#END_FORCES " << P << " " << -V+p0[2] << " " << M2 << endln; // plastic hinge rotation this->getInitialFlexibility(fe); vp = crdTransf->getBasicTrialDisp(); vp.addMatrixVector(1.0, fe, Se, -1.0); s << "#PLASTIC_HINGE_ROTATION " << vp[1] << " " << vp[2] << " " << 0.1*L << " " << 0.1*L << endln; /* // allocate array of vectors to store section coordinates and displacements static int maxNumSections = 0; static Vector *coords = 0; static Vector *displs = 0; if (maxNumSections < numSections) { if (coords != 0) delete [] coords; if (displs != 0) delete [] displs; coords = new Vector [numSections]; displs = new Vector [numSections]; if (!coords) { opserr << "NLBeamColumn3d::Print() -- failed to allocate coords array"; exit(-1); } int i; for (i = 0; i < numSections; i++) coords[i] = Vector(NDM); if (!displs) { opserr << "NLBeamColumn3d::Print() -- failed to allocate coords array"; exit(-1); } for (i = 0; i < numSections; i++) displs[i] = Vector(NDM); maxNumSections = numSections; } // compute section location & displacements this->compSectionDisplacements(coords, displs); // spit out the section location & invoke print on the scetion for (int i=0; i<numSections; i++) { s << "#SECTION " << (coords[i])(0) << " " << (coords[i])(1); s << " " << (displs[i])(0) << " " << (displs[i])(1) << endln; sections[i]->Print(s, flag); } */ } else { s << "\nElement: " << this->getTag() << " Type: ElasticForceBeamColumn2d "; s << "\tConnected Nodes: " << connectedExternalNodes ; s << "\tNumber of Sections: " << numSections; s << "\tMass density: " << rho << endln; beamIntegr->Print(s, flag); crdTransf->Print(s, flag); this->computeBasicForces(Se); double P = Se(0); double M1 = Se(1); double M2 = Se(2); double L = crdTransf->getInitialLength(); double V = (M1+M2)/L; theVector(1) = V; theVector(4) = -V; double p0[3]; p0[0] = 0.0; p0[1] = 0.0; p0[2] = 0.0; if (numEleLoads > 0) this->computeReactions(p0); s << "\tEnd 1 Forces (P V M): " << -P+p0[0] << " " << V+p0[1] << " " << M1 << endln; s << "\tEnd 2 Forces (P V M): " << P << " " << -V+p0[2] << " " << M2 << endln; if (flag == 1) { for (int i = 0; i < numSections; i++) s << "\numSections "<<i<<" :" << *sections[i]; } } }
int ElasticForceBeamColumn2d::getResponse(int responseID, Information &eleInfo) { static Vector Se(NEBD); static Vector vp(NEBD); static Matrix fe(NEBD,NEBD); if (responseID == 1) return eleInfo.setVector(this->getResistingForce()); else if (responseID == 2) { double p0[3]; p0[0] = 0.0; p0[1] = 0.0; p0[2] = 0.0; if (numEleLoads > 0) this->computeReactions(p0); this->computeBasicForces(Se); theVector(3) = Se(0); theVector(0) = -Se(0)+p0[0]; theVector(2) = Se(1); theVector(5) = Se(2); double V = (Se(1)+Se(2))/crdTransf->getInitialLength(); theVector(1) = V+p0[1]; theVector(4) = -V+p0[2]; return eleInfo.setVector(theVector); } // Chord rotation else if (responseID == 7) { this->computeBasicForces(Se); return eleInfo.setVector(Se); } // Chord rotation else if (responseID == 3) { vp = crdTransf->getBasicTrialDisp(); return eleInfo.setVector(vp); } // Plastic rotation else if (responseID == 4) { this->computeBasicForces(Se); this->getInitialFlexibility(fe); vp = crdTransf->getBasicTrialDisp(); vp.addMatrixVector(1.0, fe, Se, -1.0); return eleInfo.setVector(vp); } // Point of inflection else if (responseID == 5) { double LI = 0.0; this->computeBasicForces(Se); if (fabs(Se(1)+Se(2)) > DBL_EPSILON) { double L = crdTransf->getInitialLength(); LI = Se(1)/(Se(1)+Se(2))*L; } return eleInfo.setDouble(LI); } else if (responseID == 7) { this->computeBasicForces(Se); return eleInfo.setVector(Se); } else if (responseID == 10) { double L = crdTransf->getInitialLength(); double pts[maxNumSections]; beamIntegr->getSectionLocations(numSections, L, pts); Vector locs(numSections); for (int i = 0; i < numSections; i++) locs(i) = pts[i]*L; return eleInfo.setVector(locs); } else if (responseID == 11) { double L = crdTransf->getInitialLength(); double wts[maxNumSections]; beamIntegr->getSectionWeights(numSections, L, wts); Vector weights(numSections); for (int i = 0; i < numSections; i++) weights(i) = wts[i]*L; return eleInfo.setVector(weights); } else return -1; }