void* OPS_ElasticBeam3d(void) { int numArgs = OPS_GetNumRemainingInputArgs(); if(numArgs < 10 && numArgs != 5) { opserr<<"insufficient arguments:eleTag,iNode,jNode,A,E,G,J,Iy,Iz,transfTag\n"; return 0; } int ndm = OPS_GetNDM(); int ndf = OPS_GetNDF(); if(ndm != 3 || ndf != 6) { opserr<<"ndm must be 3 and ndf must be 6\n"; return 0; } // inputs: int iData[3]; int numData = 3; if(OPS_GetIntInput(&numData,&iData[0]) < 0) return 0; SectionForceDeformation* theSection = 0; CrdTransf* theTrans = 0; double data[6]; int transfTag, secTag; if(numArgs == 5) { numData = 1; if(OPS_GetIntInput(&numData,&secTag) < 0) return 0; if(OPS_GetIntInput(&numData,&transfTag) < 0) return 0; theSection = OPS_getSectionForceDeformation(secTag); if(theSection == 0) { opserr<<"no section is found\n"; return 0; } theTrans = OPS_getCrdTransf(transfTag); if(theTrans == 0) { opserr<<"no CrdTransf is found\n"; return 0; } } else { numData = 6; if(OPS_GetDoubleInput(&numData,&data[0]) < 0) return 0; numData = 1; if(OPS_GetIntInput(&numData,&transfTag) < 0) return 0; theTrans = OPS_getCrdTransf(transfTag); if(theTrans == 0) { opserr<<"no CrdTransf is found\n"; return 0; } } // options double mass = 0.0; int cMass = 0; while(OPS_GetNumRemainingInputArgs() > 0) { std::string theType = OPS_GetString(); if (theType == "-mass") { if(OPS_GetNumRemainingInputArgs() > 0) { if(OPS_GetDoubleInput(&numData,&mass) < 0) return 0; } } else if (theType == "-cMass") { cMass = 1; } } if (theSection != 0) { return new ElasticBeam3d(iData[0],iData[1],iData[2],theSection,*theTrans,mass,cMass); } else { return new ElasticBeam3d(iData[0],data[0],data[1],data[2],data[3],data[4], data[5],iData[1],iData[2],*theTrans, mass,cMass); } }
SectionForceDeformation * OPS_GetSectionForceDeformation(int matTag) { return OPS_getSectionForceDeformation(matTag); }
OPS_Export void * OPS_CorotTrussSectionElement() { Element *theElement = 0; int numRemainingArgs = OPS_GetNumRemainingInputArgs(); if (numRemainingArgs < 4) { opserr << "Invalid Args want: element CorotTrussSection $tag $iNode $jNode $sectTag <-rho $rho> <-cMass $flag> <-doRayleigh $flag>\n"; return 0; } int iData[4]; double rho = 0.0; int doRayleigh = 0; // by default rayleigh not done int cMass = 0; // by default use lumped mass matrix int ndm = OPS_GetNDM(); int numData = 4; if (OPS_GetInt(&numData, iData) != 0) { opserr << "WARNING invalid integer (tag, iNode, jNode, sectTag) in element CorotTrussSection " << endln; return 0; } SectionForceDeformation *theSection = OPS_getSectionForceDeformation(iData[3]); if (theSection == 0) { opserr << "WARNING: Invalid section not found element CorotTrussSection " << iData[0] << " $iNode $jNode " << iData[3] << " <-rho $rho> <-cMass $flag> <-doRayleigh $flag>\n"; return 0; } numRemainingArgs -= 4; while (numRemainingArgs > 1) { const char *argvS = OPS_GetString(); if (strcmp(argvS,"-rho") == 0) { numData = 1; if (OPS_GetDouble(&numData, &rho) != 0) { opserr << "WARNING Invalid rho in element CorotTrussSection " << iData[0] << " $iNode $jNode $secTag <-rho $rho> <-cMass $flag> <-doRayleigh $flag>\n"; return 0; } } else if (strcmp(argvS,"-cMass") == 0) { numData = 1; if (OPS_GetInt(&numData, &cMass) != 0) { opserr << "WARNING: Invalid cMass in element CorotTrussSection " << iData[0] << " $iNode $jNode $sectTag <-rho $rho> <-cMass $flag> <-doRayleigh $flag>\n"; return 0; } } else if (strcmp(argvS,"-doRayleigh") == 0) { numData = 1; if (OPS_GetInt(&numData, &doRayleigh) != 0) { opserr << "WARNING: Invalid doRayleigh in element CorotTrussSection " << iData[0] << " $iNode $jNode $sectTag <-rho $rho> <-cMass $flag> <-doRayleigh $flag>\n"; return 0; } } else { opserr << "WARNING: Invalid option " << argvS << " in: element CorotTrussSection " << iData[0] << " $iNode $jNode $secTag <-rho $rho> <-cMass $flag> <-doRayleigh $flag>\n"; return 0; } numRemainingArgs -= 2; } // now create the CorotTrussSection theElement = new CorotTrussSection(iData[0], ndm, iData[1], iData[2], *theSection, rho, doRayleigh, cMass); if (theElement == 0) { opserr << "WARNING: out of memory: element CorotTrussSection " << iData[0] << " $iNode $jNode $secTag <-rho $rho> <-cMass $flag> <-doRayleigh $flag>\n"; } return theElement; }
void* OPS_ElasticBeam2d(const ID &info) { if(OPS_GetNumRemainingInputArgs() < 5) { opserr<<"insufficient arguments:eleTag,iNode,jNode,<A,E,Iz>or<sectionTag>,transfTag\n"; return 0; } int ndm = OPS_GetNDM(); int ndf = OPS_GetNDF(); if(ndm != 2 || ndf != 3) { opserr<<"ndm must be 2 and ndf must be 3\n"; return 0; } // inputs: int iData[3]; int numData = 3; if(OPS_GetIntInput(&numData,&iData[0]) < 0) { opserr<<"WARNING failed to read integers\n"; return 0; } bool section = false; int sectionTag; double data[3]; if (OPS_GetNumRemainingInputArgs() > 3) { // Read A, E, Iz numData = 3; if(OPS_GetDoubleInput(&numData,&data[0]) < 0) { opserr<<"WARNING failed to read doubles\n"; return 0; } } else { // Read a section tag numData = 1; if(OPS_GetIntInput(&numData,§ionTag) < 0) { opserr<<"WARNING sectionTag is not integer\n"; return 0; } section = true; } numData = 1; int transfTag; if(OPS_GetIntInput(&numData,&transfTag) < 0) { opserr<<"WARNING transfTag is not integer\n"; return 0; } // options double mass = 0.0, alpha=0.0, depth=0.0; int cMass = 0; while(OPS_GetNumRemainingInputArgs() > 0) { std::string type = OPS_GetString(); if(type == "-alpha") { if(OPS_GetNumRemainingInputArgs() > 0) { if(OPS_GetDoubleInput(&numData,&alpha) < 0) return 0; } } else if(type == "-depth") { if(OPS_GetNumRemainingInputArgs() > 0) { if(OPS_GetDoubleInput(&numData,&depth) < 0) return 0; } } else if(type == "-mass") { if(OPS_GetNumRemainingInputArgs() > 0) { if(OPS_GetDoubleInput(&numData,&mass) < 0) return 0; } } else if(type == "-cMass") { cMass = 1; } } // check transf CrdTransf* theTransf = OPS_getCrdTransf(transfTag); if(theTransf == 0) { opserr<<"coord transfomration not found\n"; return 0; } if (section) { SectionForceDeformation *theSection = OPS_getSectionForceDeformation(sectionTag); if (theSection == 0) { opserr << "section not found\n"; return 0; } return new ElasticBeam2d(iData[0],iData[1],iData[2],*theSection, *theTransf,alpha,depth,mass,cMass); } else { return new ElasticBeam2d(iData[0],data[0],data[1],data[2],iData[1],iData[2], *theTransf,alpha,depth,mass,cMass); } }