# Connection between cables and deck gluedDOFs = [0, 1, 2, 3, 4, 5] deckElem = shells.getElements cablNod = cables.getNodes for n in cablNod: nearElem = deckElem.getNearestElement(n.getCurrentPos3d(0.0)) modelSpace.constraints.newGlueNodeToElement(n, nearElem, xc.ID(gluedDOFs)) # ***BOUNDARY CONDITIONS*** execfile(modelDataScriptDir + '/sets_springs.py') # Regions resting on springs (Winkler elastic foundation) # wModulus: Winkler modulus of the foundation (springs in Z direction) # cRoz: fraction of the Winkler modulus to apply for friction in # the contact plane (springs in X, Y directions) found_wink_walls = sprbc.ElasticFoundation(wModulus=wModulus_walls, cRoz=0.05) found_wink_walls.generateSprings(xcSet=setShortWall) found_wink_walls.generateSprings(xcSet=setLongWall) found_wink_fill = sprbc.ElasticFoundation(wModulus=wModulus_fill, cRoz=0.05) found_wink_fill.generateSprings(xcSet=setInsideArea) # Gluing of slabs execfile(modelDataScriptDir + "/sets_lines_to_glue.py") #Aux sets (LCPT) deckCenter = prep.getSets.defSet('deckCenter') for e in deck.getElements: c = e.getPosCentroid(True) y = c.y if (y > 5.0 and y < 22.0):
def __init__(self,name, grid, wModulus, cRoz): ''' :ivar wModulus: Winkler modulus. :ivar cRoz: fraction of the Winkler modulus to apply in the contact plane.''' super(ElasticFoundationRanges,self).__init__(name,grid,list()) self.elasticFoundation= ef.ElasticFoundation(wModulus,cRoz)
beamXconcr_mesh, beamXsteel_mesh, beamY_mesh, columnZconcr_mesh, columnZsteel_mesh ]) #mesh these sets #out.displayFEMesh([beamXconcr,beamY,columnZconcr,decklv1,decklv2,wall,foot]) #out.displayFEMesh([beamXconcr,beamXsteel]) #out.displayFEMesh([columnZconcr,columnZsteel]) #out.displayLocalAxes() #out.displayStrongWeakAxis(beams) # ***BOUNDARY CONDITIONS*** # Regions resting on springs (Winkler elastic foundation) # wModulus: Winkler modulus of the foundation (springs in Z direction) # cRoz: fraction of the Winkler modulus to apply for friction in # the contact plane (springs in X, Y directions) foot_wink = sprbc.ElasticFoundation(wModulus=20e7, cRoz=0.2) foot_wink.generateSprings(xcSet=foot) #out.displayFEMesh() # Springs (defined by Kx,Ky,Kz) to apply on nodes, points, 3Dpos, ... # Default values for Kx, Ky, Kz are 0, which means that no spring is # created in the corresponding direction # spring_col=sprbc.SpringBC(name='spring_col',modelSpace=modelSpace,Kx=10e3,Ky=50e3,Kz=30e3) # a=spring_col.applyOnNodesIn3Dpos(lst3DPos=[geom.Pos3d(0,LbeamY,0)]) #fixed DOF (ux:'0FF_FFF', uy:'F0F_FFF', uz:'FF0_FFF', # rx:'FFF_0FF', ry:'FFF_F0F', rz:'FFF_FF0') n_col1 = nodes.getDomain.getMesh.getNearestNode(geom.Pos3d(0, LbeamY, 0)) modelSpace.fixNode('000_FFF', n_col1.tag) n_col2 = nodes.getDomain.getMesh.getNearestNode(geom.Pos3d(LbeamX, LbeamY, 0)) modelSpace.fixNode('000_FFF', n_col2.tag)
] frameBC = sprbc.SpringBC('frameBC', modelSpace, Ky=1e8) segments = [(0, 1), (1, 2), (2, 3), (3, 0)] frame_nodes = [] for s in segments: sI = geom.Segment3d(underpassFrame[s[0]], underpassFrame[s[1]]) for n in shell_elements.getNodes: pos = n.getInitialPos3d dist = sI.distPos3d(pos) if dist < 0.1: frame_nodes.append(n) frameBC.applyOnNodesLst(frame_nodes) #Foundation. foundation = sprbc.ElasticFoundation(wModulus=kS, cRoz=0.002) foundation.generateSprings(xcSet=floor_elements) # *** Loads *** loadManager = preprocessor.getLoadHandler loadCases = loadManager.getLoadPatterns #Load modulation. ts = loadCases.newTimeSeries("constant_ts", "ts") loadCases.currentTimeSeries = "ts" #Load case definition loadCaseManager = lcm.LoadCaseManager(preprocessor) loadCaseNames = [ 'selfWeight', 'deadLoad', 'passengers_shelter', 'earthPressure', 'pedestrianLoad', 'singleAxeLoad', 'LM1', 'DLM1', 'nosingLoad', 'roadTrafficLoad', 'earthquake'
#foundationElasticSupports= from model.boundary_cond import spring_bound_cond as sprbc from model.sets import sets_mng as sets from materials import typical_materials as tm from actions import loads from actions import load_cases as lcases from actions import combinations as cc from actions.earth_pressure import earth_pressure as ep # ***BOUNDARY CONDITIONS*** # Regions resting on springs (Winkler elastic foundation) # wModulus: Winkler modulus of the foundation (springs in Z direction) # cRoz: fraction of the Winkler modulus to apply for friction in # the contact plane (springs in X, Y directions) cRoz = 0.5 foundationElasticSupports = sprbc.ElasticFoundation(wModulus=Kbalasto, cRoz=cRoz) foundationElasticSupports.generateSprings(xcSet=losCim) # ***ACTIONS*** # Auxiliary ranges and sets surf_eje1_rg = list() for i in range(nCam): surf_eje1_rg.append( gm.IJKRange([4 * i + 1, 7, lastZpos], [4 * i + 2, 8, lastZpos])) surf_eje1_rg.append( gm.IJKRange([4 * i + 3, 7, lastZpos], [4 * i + 4, 8, lastZpos])) surf_eje1_set = gridGeom.getSetSurfMultiRegion(lstIJKRange=surf_eje1_rg, setName='surf_eje1_set') surf_eje2_rg = list()
elemType='ShellMITC4', elemSize=eSize) allSurfList = [ foundExtSlab_mesh, foundIntSlab_mesh, leftDownWall_mesh, leftUpWall_mesh, midWall_mesh, rightDownWall_mesh, rightUpWall_mesh, upDeckExtSlab_mesh, upDeckIntSlab_mesh, downDeckExtSlab_mesh, downDeckIntSlab_mesh ] fem.multi_mesh(preprocessor=prep, lstMeshSets=allSurfList) # ***BOUNDARY CONDITIONS*** # Regions resting on springs (Winkler elastic foundation) # wModulus: Winkler modulus of the foundation (springs in Z direction) # cRoz: fraction of the Winkler modulus to apply for friction in # the contact plane (springs in X, Y directions) foundationElasticSupports = sprbc.ElasticFoundation(wModulus=winkMod, cRoz=coefHorVerSprings) found = foundExtSlab + foundIntSlab foundationElasticSupports.generateSprings(xcSet=found) # ***** ACTIONS ***** # ***ACTIONS*** #Inertial load (density*acceleration) applied to the elements in a set grav = 9.81 #Gravity acceleration (m/s2) selfWeight = loads.InertialLoad(name='selfWeight', lstMeshSets=allSurfList, vAccel=xc.Vector([0.0, 0.0, -grav])) # Uniform loads applied on shell elements # name: name identifying the load # xcSet: set that contains the surfaces
aleti = aletiZ1 + aletiZ2 + aletiZ3 + voladzi else: aleti = aletiZ1 + aletiZ2 + aletiZ3 if Lvoladzd > 0: aletd = aletdZ1 + aletdZ2 + aletdZ3 + voladzd else: aletd = aletdZ1 + aletdZ2 + aletdZ3 # ***BOUNDARY CONDITIONS*** # Regions resting on springs (Winkler elastic foundation) # wModulus: Winkler modulus of the foundation (springs in Z direction) # cRoz: fraction of the Winkler modulus to apply for friction in # the contact plane (springs in X, Y directions) cRoz = 0.5 found_wink = sprbc.ElasticFoundation(wModulus=Kbalasto, cRoz=0.2) found_wink.generateSprings(xcSet=zap) # ***ACTIONS*** #Inertial load (density*acceleration) applied to the elements in a set selfWeight = loads.InertialLoad(name='selfWeight', lstMeshSets=lstSups, vAccel=xc.Vector([0.0, 0.0, -grav])) # Peso del relleno sobre la zapata zapTrasdos_rg = gut.def_rg_cooLim(XYZLists, Xmurestr, (yMurEstr, yZap), (0, 0)) zapTrasdos = gridGeom.getSetSurfOneRegion(ijkRange=zapTrasdos_rg, nameSet='zapTrasdos') zapTrasdos.fillDownwards() rell_zap = loads.UniformLoadOnSurfaces(