Exemplo n.º 1
0
    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())
Exemplo n.º 2
0
 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)
Exemplo n.º 3
0
    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)
Exemplo n.º 4
0
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
Exemplo n.º 5
0
def getReactionFromSetOfNodes(DOFs, nodeSet):
    nodes = nodeSet.getNodes
    retval = geom.SlidingVectorsSystem3d()
    for n in nodes:
        retval += getSlidingVectorsSystemfromSlidingVector(
            DOFs, n.get3dCoo, n.getReaction)
    return retval
Exemplo n.º 6
0
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)
Exemplo n.º 7
0
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]))
Exemplo n.º 8
0
 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)
Exemplo n.º 9
0
 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.")
Exemplo n.º 11
0
# -*- 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])