Response* DispBeamColumn3d::setResponse(const char **argv, int argc, OPS_Stream &output) { Response *theResponse = 0; output.tag("ElementOutput"); output.attr("eleType","DispBeamColumn3d"); output.attr("eleTag",this->getTag()); output.attr("node1",connectedExternalNodes[0]); output.attr("node2",connectedExternalNodes[1]); // // we compare argv[0] for known response types // // global force - if (strcmp(argv[0],"forces") == 0 || strcmp(argv[0],"force") == 0 || strcmp(argv[0],"globalForce") == 0 || strcmp(argv[0],"globalForces") == 0) { output.tag("ResponseType","Px_1"); output.tag("ResponseType","Py_1"); output.tag("ResponseType","Pz_1"); output.tag("ResponseType","Mx_1"); output.tag("ResponseType","My_1"); output.tag("ResponseType","Mz_1"); output.tag("ResponseType","Px_2"); output.tag("ResponseType","Py_2"); output.tag("ResponseType","Pz_2"); output.tag("ResponseType","Mx_2"); output.tag("ResponseType","My_2"); output.tag("ResponseType","Mz_2"); theResponse = new ElementResponse(this, 1, P); // local force - } else if (strcmp(argv[0],"localForce") == 0 || strcmp(argv[0],"localForces") == 0) { output.tag("ResponseType","N_ 1"); output.tag("ResponseType","Vy_1"); output.tag("ResponseType","Vz_1"); output.tag("ResponseType","T_1"); output.tag("ResponseType","My_1"); output.tag("ResponseType","Tz_1"); output.tag("ResponseType","N_2"); output.tag("ResponseType","Py_2"); output.tag("ResponseType","Pz_2"); output.tag("ResponseType","T_2"); output.tag("ResponseType","My_2"); output.tag("ResponseType","Mz_2"); theResponse = new ElementResponse(this, 2, P); // chord rotation - } else if (strcmp(argv[0],"chordRotation") == 0 || strcmp(argv[0],"chordDeformation") == 0 || strcmp(argv[0],"basicDeformation") == 0) { output.tag("ResponseType","eps"); output.tag("ResponseType","thetaZ_1"); output.tag("ResponseType","thetaZ_2"); output.tag("ResponseType","thetaY_1"); output.tag("ResponseType","thetaY_2"); output.tag("ResponseType","thetaX"); theResponse = new ElementResponse(this, 3, Vector(6)); // plastic rotation - } else if (strcmp(argv[0],"plasticRotation") == 0 || strcmp(argv[0],"plasticDeformation") == 0) { output.tag("ResponseType","epsP"); output.tag("ResponseType","thetaZP_1"); output.tag("ResponseType","thetaZP_2"); output.tag("ResponseType","thetaYP_1"); output.tag("ResponseType","thetaYP_2"); output.tag("ResponseType","thetaXP"); theResponse = new ElementResponse(this, 4, Vector(6)); } else if (strcmp(argv[0],"RayleighForces") == 0 || strcmp(argv[0],"rayleighForces") == 0) { theResponse = new ElementResponse(this, 12, P); } // section response - else if (strstr(argv[0],"sectionX") != 0) { if (argc > 2) { float sectionLoc = atof(argv[1]); double xi[maxNumSections]; double L = crdTransf->getInitialLength(); beamInt->getSectionLocations(numSections, L, xi); sectionLoc /= L; float minDistance = fabs(xi[0]-sectionLoc); int sectionNum = 0; for (int i = 1; i < numSections; i++) { if (fabs(xi[i]-sectionLoc) < minDistance) { minDistance = fabs(xi[i]-sectionLoc); sectionNum = i; } } output.tag("GaussPointOutput"); output.attr("number",sectionNum+1); output.attr("eta",xi[sectionNum]*L); theResponse = theSections[sectionNum]->setResponse(&argv[2], argc-2, output); } } else if (strcmp(argv[0],"section") ==0) { if (argc > 1) { int sectionNum = atoi(argv[1]); if (sectionNum > 0 && sectionNum <= numSections && argc > 2) { double xi[maxNumSections]; double L = crdTransf->getInitialLength(); beamInt->getSectionLocations(numSections, L, xi); output.tag("GaussPointOutput"); output.attr("number",sectionNum); output.attr("eta",xi[sectionNum-1]*L); theResponse = theSections[sectionNum-1]->setResponse(&argv[2], argc-2, output); output.endTag(); } else if (sectionNum == 0) { // argv[1] was not an int, we want all sections, CompositeResponse *theCResponse = new CompositeResponse(); int numResponse = 0; double xi[maxNumSections]; double L = crdTransf->getInitialLength(); beamInt->getSectionLocations(numSections, L, xi); for (int i=0; i<numSections; i++) { output.tag("GaussPointOutput"); output.attr("number",i+1); output.attr("eta",xi[i]*L); Response *theSectionResponse = theSections[i]->setResponse(&argv[1], argc-1, output); output.endTag(); if (theSectionResponse != 0) { numResponse = theCResponse->addResponse(theSectionResponse); } } if (numResponse == 0) // no valid responses found delete theCResponse; else theResponse = theCResponse; } } } output.endTag(); return theResponse; }
Response* DispBeamColumn2d::setResponse(const char **argv, int argc, OPS_Stream &output) { Response *theResponse = 0; output.tag("ElementOutput"); output.attr("eleType","DispBeamColumn2d"); output.attr("eleTag",this->getTag()); output.attr("node1",connectedExternalNodes[0]); output.attr("node2",connectedExternalNodes[1]); // global force - if (strcmp(argv[0],"forces") == 0 || strcmp(argv[0],"force") == 0 || strcmp(argv[0],"globalForce") == 0 || strcmp(argv[0],"globalForces") == 0) { output.tag("ResponseType","Px_1"); output.tag("ResponseType","Py_1"); output.tag("ResponseType","Mz_1"); output.tag("ResponseType","Px_2"); output.tag("ResponseType","Py_2"); output.tag("ResponseType","Mz_2"); theResponse = new ElementResponse(this, 1, P); // local force - } else if (strcmp(argv[0],"localForce") == 0 || strcmp(argv[0],"localForces") == 0) { output.tag("ResponseType","N1"); output.tag("ResponseType","V1"); output.tag("ResponseType","M1"); output.tag("ResponseType","N2"); output.tag("ResponseType","V2"); output.tag("ResponseType","M2"); theResponse = new ElementResponse(this, 2, P); // basic force - } else if (strcmp(argv[0],"basicForce") == 0 || strcmp(argv[0],"basicForces") == 0) { output.tag("ResponseType","N"); output.tag("ResponseType","M1"); output.tag("ResponseType","M2"); theResponse = new ElementResponse(this, 9, Vector(3)); // basic stiffness - } else if (strcmp(argv[0],"basicStiffness") == 0) { output.tag("ResponseType","N"); output.tag("ResponseType","M1"); output.tag("ResponseType","M2"); theResponse = new ElementResponse(this, 19, Matrix(3,3)); // chord rotation - } else if (strcmp(argv[0],"chordRotation") == 0 || strcmp(argv[0],"chordDeformation") == 0 || strcmp(argv[0],"basicDeformation") == 0) { output.tag("ResponseType","eps"); output.tag("ResponseType","theta1"); output.tag("ResponseType","theta2"); theResponse = new ElementResponse(this, 3, Vector(3)); // plastic rotation - } else if (strcmp(argv[0],"plasticRotation") == 0 || strcmp(argv[0],"plasticDeformation") == 0) { output.tag("ResponseType","epsP"); output.tag("ResponseType","theta1P"); output.tag("ResponseType","theta2P"); theResponse = new ElementResponse(this, 4, Vector(3)); } else if (strcmp(argv[0],"RayleighForces") == 0 || strcmp(argv[0],"rayleighForces") == 0 || strcmp(argv[0],"dampingForces") == 0) { theResponse = new ElementResponse(this, 12, P); } // section response - else if (strstr(argv[0],"sectionX") != 0) { if (argc > 2) { float sectionLoc = atof(argv[1]); double xi[maxNumSections]; double L = crdTransf->getInitialLength(); beamInt->getSectionLocations(numSections, L, xi); sectionLoc /= L; float minDistance = fabs(xi[0]-sectionLoc); int sectionNum = 0; for (int i = 1; i < numSections; i++) { if (fabs(xi[i]-sectionLoc) < minDistance) { minDistance = fabs(xi[i]-sectionLoc); sectionNum = i; } } output.tag("GaussPointOutput"); output.attr("number",sectionNum+1); output.attr("eta",xi[sectionNum]*L); theResponse = theSections[sectionNum]->setResponse(&argv[2], argc-2, output); } } else if (strstr(argv[0],"section") != 0) { if (argc > 1) { int sectionNum = atoi(argv[1]); if (sectionNum > 0 && sectionNum <= numSections && argc > 2) { output.tag("GaussPointOutput"); output.attr("number",sectionNum); double xi[maxNumSections]; double L = crdTransf->getInitialLength(); beamInt->getSectionLocations(numSections, L, xi); output.attr("eta",xi[sectionNum-1]*L); if (strcmp(argv[2],"dsdh") != 0) { theResponse = theSections[sectionNum-1]->setResponse(&argv[2], argc-2, output); } else { int order = theSections[sectionNum-1]->getOrder(); theResponse = new ElementResponse(this, 76, Vector(order)); Information &info = theResponse->getInformation(); info.theInt = sectionNum; } output.endTag(); } else if (sectionNum == 0) { // argv[1] was not an int, we want all sections, CompositeResponse *theCResponse = new CompositeResponse(); int numResponse = 0; double xi[maxNumSections]; double L = crdTransf->getInitialLength(); beamInt->getSectionLocations(numSections, L, xi); for (int i=0; i<numSections; i++) { output.tag("GaussPointOutput"); output.attr("number",i+1); output.attr("eta",xi[i]*L); Response *theSectionResponse = theSections[i]->setResponse(&argv[1], argc-1, output); output.endTag(); if (theSectionResponse != 0) { numResponse = theCResponse->addResponse(theSectionResponse); } } if (numResponse == 0) // no valid responses found delete theCResponse; else theResponse = theCResponse; } } } // curvature sensitivity along element length else if (strcmp(argv[0],"dcurvdh") == 0) return new ElementResponse(this, 5, Vector(numSections)); // basic deformation sensitivity else if (strcmp(argv[0],"dvdh") == 0) return new ElementResponse(this, 6, Vector(3)); else if (strcmp(argv[0],"integrationPoints") == 0) return new ElementResponse(this, 7, Vector(numSections)); else if (strcmp(argv[0],"integrationWeights") == 0) return new ElementResponse(this, 8, Vector(numSections)); output.endTag(); if (theResponse == 0) return Element::setResponse(argv, argc, output); else return theResponse; }
Response* N4BiaxialTruss::setResponse(const char **argv, int argc, OPS_Stream &output) { Response *theResponse = 0; output.tag("ElementOutput"); output.attr("eleType","N4BiaxialTruss"); output.attr("eleTag",this->getTag()); output.attr("truss1_node1",connectedExternalNodes[0]); output.attr("truss1_node2",connectedExternalNodes[1]); output.attr("truss2_node1",connectedExternalNodes[2]); output.attr("truss2_node2",connectedExternalNodes[3]); // // we compare argv[0] for known response types for the N4BiaxialTruss // if ((strcmp(argv[0],"force") == 0) || (strcmp(argv[0],"forces") == 0) || (strcmp(argv[0],"globalForce") == 0) || (strcmp(argv[0],"globalForces") == 0)){ char outputData[10]; int numDOFperNode = numDOF/4; for (int i=0; i<numDOFperNode; i++) { sprintf(outputData,"T1_P1_%d", i+1); output.tag("ResponseType", outputData); } for (int j=0; j<numDOFperNode; j++) { sprintf(outputData,"T1_P2_%d", j+1); output.tag("ResponseType", outputData); } for (int i=0; i<numDOFperNode; i++) { sprintf(outputData,"T2_P1_%d", i+1); output.tag("ResponseType", outputData); } for (int j=0; j<numDOFperNode; j++) { sprintf(outputData,"T2_P2_%d", j+1); output.tag("ResponseType", outputData); } theResponse = new ElementResponse(this, 1, Vector(numDOF)); } else if ((strcmp(argv[0],"axialForce") == 0) || (strcmp(argv[0],"basicForce") == 0) || (strcmp(argv[0],"localForce") == 0) || (strcmp(argv[0],"basicForces") == 0)) { output.tag("ResponseType", "N"); theResponse = new ElementResponse(this, 2, 0.0); } else if (strcmp(argv[0],"defo") == 0 || strcmp(argv[0],"deformation") == 0 || strcmp(argv[0],"deformations") == 0 || strcmp(argv[0],"basicDefo") == 0 || strcmp(argv[0],"basicDeformation") == 0 || strcmp(argv[0],"basicDeformations") == 0) { output.tag("ResponseType", "U"); theResponse = new ElementResponse(this, 3, 0.0); // a material quantity } else if (strcmp(argv[0],"material") == 0 || strcmp(argv[0],"-material") == 0) { CompositeResponse *theCResponse = new CompositeResponse(); Response *theResponse1 = theMaterial_1->setResponse(&argv[1], argc-1, output); Response *theResponse2 = theMaterial_2->setResponse(&argv[1], argc-1, output); theCResponse->addResponse(theResponse1); theCResponse->addResponse(theResponse2); theResponse = theCResponse; } output.endTag(); return theResponse; }