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]; } } }
void ElasticBeam3d::Print(OPS_Stream &s, int flag) { this->getResistingForce(); if (flag == -1) { int eleTag = this->getTag(); s << "EL_BEAM\t" << eleTag << "\t"; s << sectionTag << "\t" << sectionTag; s << "\t" << connectedExternalNodes(0) << "\t" << connectedExternalNodes(1); s << "\t0\t0.0000000\n"; } else if (flag < -1) { int counter = (flag + 1) * -1; int eleTag = this->getTag(); const Vector &force = this->getResistingForce(); double P, MZ1, MZ2, VY, MY1, MY2, VZ, T; double L = theCoordTransf->getInitialLength(); double oneOverL = 1.0 / L; P = q(0); MZ1 = q(1); MZ2 = q(2); VY = (MZ1 + MZ2)*oneOverL; MY1 = q(3); MY2 = q(4); VZ = (MY1 + MY2)*oneOverL; T = q(5); s << "FORCE\t" << eleTag << "\t" << counter << "\t0"; s << "\t" << -P + p0[0] << "\t" << VY + p0[1] << "\t" << -VZ + p0[3] << endln; s << "FORCE\t" << eleTag << "\t" << counter << "\t1"; s << "\t" << P << ' ' << -VY + p0[2] << ' ' << VZ + p0[4] << endln; s << "MOMENT\t" << eleTag << "\t" << counter << "\t0"; s << "\t" << -T << "\t" << MY1 << "\t" << MZ1 << endln; s << "MOMENT\t" << eleTag << "\t" << counter << "\t1"; s << "\t" << T << ' ' << MY2 << ' ' << MZ2 << endln; } else if (flag == 2) { this->getResistingForce(); // in case linear algo static Vector xAxis(3); static Vector yAxis(3); static Vector zAxis(3); theCoordTransf->getLocalAxes(xAxis, yAxis, zAxis); s << "#ElasticBeamColumn3D\n"; s << "#LocalAxis " << xAxis(0) << " " << xAxis(1) << " " << xAxis(2); s << " " << yAxis(0) << " " << yAxis(1) << " " << yAxis(2) << " "; s << zAxis(0) << " " << zAxis(1) << " " << zAxis(2) << endln; 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) << " " << node1Crd(2) << " " << node1Disp(0) << " " << node1Disp(1) << " " << node1Disp(2) << " " << node1Disp(3) << " " << node1Disp(4) << " " << node1Disp(5) << endln; s << "#NODE " << node2Crd(0) << " " << node2Crd(1) << " " << node2Crd(2) << " " << node2Disp(0) << " " << node2Disp(1) << " " << node2Disp(2) << " " << node2Disp(3) << " " << node2Disp(4) << " " << node2Disp(5) << endln; double N, Mz1, Mz2, Vy, My1, My2, Vz, T; double L = theCoordTransf->getInitialLength(); double oneOverL = 1.0 / L; N = q(0); Mz1 = q(1); Mz2 = q(2); Vy = (Mz1 + Mz2)*oneOverL; My1 = q(3); My2 = q(4); Vz = -(My1 + My2)*oneOverL; T = q(5); s << "#END_FORCES " << -N + p0[0] << ' ' << Vy + p0[1] << ' ' << Vz + p0[3] << ' ' << -T << ' ' << My1 << ' ' << Mz1 << endln; s << "#END_FORCES " << N << ' ' << -Vy + p0[2] << ' ' << -Vz + p0[4] << ' ' << T << ' ' << My2 << ' ' << Mz2 << endln; } if (flag == OPS_PRINT_CURRENTSTATE) { this->getResistingForce(); // in case linear algo s << "\nElasticBeam3d: " << this->getTag() << endln; s << "\tConnected Nodes: " << connectedExternalNodes; s << "\tCoordTransf: " << theCoordTransf->getTag() << endln; s << "\tmass density: " << rho << ", cMass: " << cMass << endln; double N, Mz1, Mz2, Vy, My1, My2, Vz, T; double L = theCoordTransf->getInitialLength(); double oneOverL = 1.0 / L; N = q(0); Mz1 = q(1); Mz2 = q(2); Vy = (Mz1 + Mz2)*oneOverL; My1 = q(3); My2 = q(4); Vz = -(My1 + My2)*oneOverL; T = q(5); s << "\tEnd 1 Forces (P Mz Vy My Vz T): " << -N + p0[0] << ' ' << Mz1 << ' ' << Vy + p0[1] << ' ' << My1 << ' ' << Vz + p0[3] << ' ' << -T << endln; s << "\tEnd 2 Forces (P Mz Vy My Vz T): " << N << ' ' << Mz2 << ' ' << -Vy + p0[2] << ' ' << My2 << ' ' << -Vz + p0[4] << ' ' << T << endln; } if (flag == OPS_PRINT_PRINTMODEL_JSON) { s << "\t\t\t{"; s << "\"name\": " << this->getTag() << ", "; s << "\"type\": \"ElasticBeam3d\", "; s << "\"nodes\": [" << connectedExternalNodes(0) << ", " << connectedExternalNodes(1) << "], "; s << "\"E\": " << E << ", "; s << "\"G\": " << G << ", "; s << "\"A\": " << A << ", "; s << "\"Jx\": " << Jx << ", "; s << "\"Iy\": " << Iy << ", "; s << "\"Iz\": " << Iz << ", "; s << "\"massperlength\": " << rho << ", "; s << "\"crdTransformation\": \"" << theCoordTransf->getTag() << "\"}"; } }