def calcPressures(self): ''' Foundation pressures over the soil. Calculates pressures and forces in the free nodes of the springs (those that belongs to both the spring and the foundation) and stores these values as properties of those nodes: property 'soilPressure:' [xStress,yStress,zStress] property 'soilReaction:' [xForce,yForce,zForce]''' self.svdReac = geom.SlidingVectorsSystem3d() f3d = geom.Vector3d(0.0, 0.0, 0.0) m3d = geom.Vector3d(0.0, 0.0, 0.0) for e in self.springs: n = e.getNodes[1] rf = e.getResistingForce() a = n.getTributaryArea() if (len(rf) == 6): f3d = geom.Vector3d(rf[0], rf[1], 0.0) m3d = geom.Vector3d(0.0, 0.0, rf[2]) else: #len(rf)==12 f3d = geom.Vector3d(rf[0], rf[1], rf[2]) m3d = geom.Vector3d(rf[3], rf[4], rf[5]) pos = n.getInitialPos3d self.svdReac += geom.SlidingVectorsSystem3d(pos, f3d, m3d) #print "dispZ= ", n.getDisp[2]*1e3, "mm" n.setProp('soilPressure', [f3d.x / a, f3d.y / a, f3d.z / a]) n.setProp('soilReaction', [f3d.x, f3d.y, f3d.z]) return self.svdReac.reduceTo(self.getCentroid())
def __init__(self,preprocessor,supportNodes): self.forces= dict() self.moments= dict() self.positions= dict() self.svdReac= geom.SlidingVectorsSystem3d() meshNodes= preprocessor.getNodeHandler meshNodes.calculateNodalReactions(True, 1e-7) f3d= geom.Vector3d(0.0,0.0,0.0) m3d= geom.Vector3d(0.0,0.0,0.0) for n in supportNodes: tag= n.tag tmp= n.getReaction if(meshNodes.numDOFs==3): force= geom.Vector2d(tmp[0],tmp[1]) f3d= geom.Vector3d(tmp[0],tmp[1],0.0) moment= geom.Vector3d(0.0,0.0,tmp[2]) m3d= moment else: force= geom.Vector3d(tmp[0],tmp[1],tmp[2]) f3d= force moment= geom.Vector3d(tmp[3],tmp[4],tmp[5]) m3d= moment self.forces[tag]= force self.moments[tag]= moment pos= n.getInitialPos3d self.positions[tag]= pos self.svdReac+= geom.SlidingVectorsSystem3d(pos,f3d,m3d)
def __init__(self, preprocessor, supportNodes, inclInertia=False): ''' Constructor. :param preprocessor: XC preprocessor of the problem. :param supportNodes: nodes to compute reactions. :param inclInertia: include inertia effects (defaults to false). ''' self.forces = dict() self.moments = dict() self.positions = dict() self.svdReac = geom.SlidingVectorsSystem3d() nodeHandler = preprocessor.getNodeHandler nodeHandler.calculateNodalReactions(inclInertia, 1e-7) f3d = geom.Vector3d(0.0, 0.0, 0.0) m3d = geom.Vector3d(0.0, 0.0, 0.0) for n in supportNodes: tag = n.tag tmp = n.getReaction f3d = n.getReactionForce3d m3d = n.getReactionMoment3d if (nodeHandler.numDOFs == 3): force = geom.Vector2d(f3d.x, f3d.y) else: force = f3d self.forces[tag] = force self.moments[tag] = m3d pos = n.getInitialPos3d self.positions[tag] = pos self.svdReac += geom.SlidingVectorsSystem3d(pos, f3d, m3d)
def getReactionFromNodes(modelNodes, DOFs, nodeTags): retval = geom.SlidingVectorsSystem3d() for tag in nodeTags: n = modelNodes.getNode(tag) retval += getSlidingVectorsSystemfromSlidingVector( DOFs, n.get3dCoo, n.getReaction) return retval
def getReactionFromSetOfNodes(DOFs, nodeSet): nodes = nodeSet.getNodes retval = geom.SlidingVectorsSystem3d() for n in nodes: retval += getSlidingVectorsSystemfromSlidingVector( DOFs, n.get3dCoo, n.getReaction) return retval
def genLoads(modelSpace, loadedSides, internalForcesData): ''' Create the loads at the end of the connection members.''' for key in loadedSides: # Get nodes on loaded sides. sideData = loadedSides[key] loadDirI = sideData['I'] loadDirJ = sideData['J'] loadDirK = sideData['K'] sideList = sideData['sideList'] nodeSet = modelSpace.defSet('nodes' + str(key)) for side in sideList: for n in side.getEdge.nodes: nodeSet.nodes.append(n) centroid = nodeSet.nodes.getCentroid(0.0) # Put rigid beams between the centroid nodes # and the rest of them. centroidNode = nodeSet.getNearestNode(centroid) centroidNodePos = centroidNode.getInitialPos3d internalForces = internalForcesData[str(key)] for name in internalForces: originLst = internalForces[name][0] origin = geom.Pos3d(originLst[0], originLst[1], originLst[2]) internalForceValue = internalForces[name][1] force = internalForceValue['N'] * loadDirI + internalForceValue[ 'Vy'] * loadDirJ + internalForceValue['Vz'] * loadDirK moment = internalForceValue['T'] * loadDirI + internalForceValue[ 'My'] * loadDirJ + internalForceValue['Mz'] * loadDirK svs = geom.SlidingVectorsSystem3d(origin, force, moment) # Apply the loads. currentLP = modelSpace.getLoadPattern(str(name)) modelSpace.distributeLoadOnNodes(svs, nodeSet, currentLP)
def getSlidingVectorsSystemfromSlidingVector(DOFs,coo,v): '''Returns a sliding vector system equivalent to the sliding vector. Parameters: :param DOFs: degrees of freedom. :param coo: coordinates of a point in the vector line of action. :param v: vector. ''' if(DOFs=="UV"): return geom.SlidingVectorsSystem2d(geom.Pos2d(coo[0],coo[1]),geom.Vector2d(v[0],v[1])) elif(DOFs=="UVR"): return geom.SlidingVectorsSystem2d(geom.Pos2d(coo[0],coo[1]),geom.Vector2d(v[0],v[1]),v[2]) elif(DOFs=="UVW"): return geom.SlidingVectorsSystem3d(geom.Pos3d(coo[0],coo[1],coo[2]),geom.Vector3d(v[0],v[1],v[2])) elif(DOFs=="UVWRxRyRz"): return geom.SlidingVectorsSystem3d(geom.Pos3d(coo[0],coo[1],coo[2]),geom.Vector3d(v[0],v[1],v[2]),geom.Vector3d(v[3],v[4],v[5]))
def __init__(self, preprocessor, supportNodes): self.forces = dict() self.moments = dict() self.positions = dict() self.svdReac = geom.SlidingVectorsSystem3d() nodeHandler = preprocessor.getNodeHandler nodeHandler.calculateNodalReactions(True, 1e-7) f3d = geom.Vector3d(0.0, 0.0, 0.0) m3d = geom.Vector3d(0.0, 0.0, 0.0) for n in supportNodes: tag = n.tag tmp = n.getReaction f3d = n.getReactionForce3d m3d = n.getReactionMoment3d if (nodeHandler.numDOFs == 3): force = geom.Vector2d(f3d.x, f3d.y) else: force = f3d self.forces[tag] = force self.moments[tag] = m3d pos = n.getInitialPos3d self.positions[tag] = pos self.svdReac += geom.SlidingVectorsSystem3d(pos, f3d, m3d)
def appendLoadToCurrentLoadPattern(self): O=geom.Pos3d(self.pntCoord[0],self.pntCoord[1],self.pntCoord[2]) force=geom.Vector3d(self.loadVector[0],self.loadVector[1],self.loadVector[2]) moment=geom.Vector3d(self.loadVector[3],self.loadVector[4],self.loadVector[5]) loadSVS=geom.SlidingVectorsSystem3d(O,force,moment) ptList= list() nodeList= self.xcSet.nodes if len(nodeList)>0: for n in nodeList: ptList.append(n.getInitialPos3d) loadVectors= loadSVS.distribute(ptList) for n, v in zip(nodeList,loadVectors): f= v.getVector3d() n.newLoad(xc.Vector([f.x,f.y,f.z,0.0,0.0,0.0]))
# -*- coding: utf-8 -*- from __future__ import print_function import xc_base import geom import math O = geom.Pos3d(0, 0, 0) A = geom.Pos3d(1, 0, 0) V = geom.Vector3d(0, 1, 0) svs1 = geom.SlidingVectorsSystem3d(A, V, geom.Vector3d(0, 0, 0)) pto = svs1.getOrg() momO = svs1.getMomentPos3d(O) svs2 = svs1.reduceTo(O) momA = svs2.getMomentPos3d(A) ratio1 = momA.getModulus() ''' print(pto) print(momO) print(momA.getModulus()) ''' import os fname = os.path.basename(__file__) if ratio1 < 1e-12: print("test ", fname, ": ok.") else: print("test ", fname, ": ERROR.")
# -*- coding: utf-8 -*- from __future__ import print_function import xc_base import geom # Define sliding vector system svd1 = geom.SlidingVectorsSystem3d() # Defina a sliding vector. ptoAplic = geom.Pos3d(1, 1, 0) testVector = geom.Vector3d(0, 0, 1) vec = geom.SlidingVector3d(ptoAplic, testVector) svd1 += vec # add it to the system. # Another sliding vector. ptoAplic = geom.Pos3d(-1, 1, 0) vec = geom.SlidingVector3d(ptoAplic, testVector) svd1 += vec # add it to the system. # And another one ptoAplic = geom.Pos3d(-1, -1, 0) vec = geom.SlidingVector3d(ptoAplic, testVector) svd1 += vec # add it to the system # Again... ptoAplic = geom.Pos3d(1, -1, 0) vec = geom.SlidingVector3d(ptoAplic, testVector) svd1 += vec # add it to the system Res = svd1.getResultant() Mom = svd1.getMoment()
# -*- coding: utf-8 -*- ''' Trivial verification test for sliding vector system load distribution.''' from __future__ import print_function import xc_base import geom import math # Sliding vector system. O= geom.Pos3d(0.0,1.0,0.0) V= geom.Vector3d(1.0,0.0,0.0) M= geom.Vector3d(0.0,0.0,0.0) svs1= geom.SlidingVectorsSystem3d(O,V,M) # Points and weights. points= [geom.Pos3d(-1.0,0.0,0.0), geom.Pos3d(1.0,0.0,0.0)] weights= [1.0,1.0] vectors1= svs1.distribute(points,weights) error= (vectors1[0].getVector3d()-geom.Vector3d(0.5,0.5,0.0)).getModulus() error+= (vectors1[1].getVector3d()-geom.Vector3d(0.5,-0.5,0.0)).getModulus() vectors2= svs1.distribute(points) error+= (vectors2[0].getVector3d()-geom.Vector3d(0.5,0.5,0.0)).getModulus() error+= (vectors2[1].getVector3d()-geom.Vector3d(0.5,-0.5,0.0)).getModulus() ''' print(vectors1[0])