Question #679808 on Yade changed: https://answers.launchpad.net/yade/+question/679808
Description changed to: Hi everyone: I am new to Yade and python and I am trying to simulate a pile as a rigid boundaries. One friend helps me to create a script to generate a sample of my soil. I'm studying geotechinical problems. But i don't know how to create a new rigid boundary to simulate a pile. Can someone tell me how to do this? This is my script: # -*- coding: utf-8 -*- from yade import pack,utils,plot,export import numpy as np import operator,fractions # TODAS AS UNIDADES ESTÃO NO S.I. ############################### ### 1.PARÂMETROS DE ENTRADA ### ############################### # 1.1 IMPORT PARAMETERS FROM TABLE nRead=readParamsFromTable( DensidadeP = 2.7, PoissonP = 0.2, AnguloAtritoP = 0, CoesaoP = 0, PorosidadeS = 0.20, MatType = 'frict', TestType = '2D', PSD = [[0.0032,0.006],[0.6,1.]], verlet = 0.35, YoungP = 7.e4, unknownOk=True ) from yade.params import table # 1.2 PARAMETROS DO MEIO (MACROSCÓPICOS) DensidadeS = table.DensidadeP #tf/m³ YoungP = table.YoungP #kN/m² PoissonP = table.PoissonP #Adimensional AnguloAtritoP = radians(table.AnguloAtritoP) CoesaoP = table.CoesaoP PorosidadeS = table.PorosidadeS # 1.3 DIMENSÕES DOS ELEMENTOS # 1.3.1 CURVA GRANULOMETRICA DO SOLO - PSD=[[diâmetros],[Quantidade passante Acumulada]] PSD = table.PSD # 1.3.2 DADOS MÉDIOS DOS ELEMENTOS rMeanElemento = ((PSD[0][0]+PSD[0][-1]))/2 rRelFuzzElemento = PSD[0][-1]/(2*rMeanElemento)-1 rMaxElemento = PSD[0][-1]/2 rMinElemento = PSD[0][0]/2 # 1.4 TIPO DE MATERIAL MatType = table.MatType # 'frict', 'cohfrict', 'concrete' # 1.5 TIPO DE AMOSTRA TestType = table.TestType ################## ### 2.MATERIAL ### ################## # 2.1 Material Meio if MatType == 'frict': Material=FrictMat(density=20400, frictionAngle=0) elif MatType == 'cohfrict': Material=CohFrictMat(density=2600) elif MatType == 'concrete': # Material=CpmMat(density=2600) Material=FrictMat(density=2600, frictionAngle=0) O.materials.append(Material) # 2.2 Material Contorno MatContorno = FrictMat(frictionAngle=0) O.materials.append(MatContorno) ################### ### 3.GEOMETRIA ### ################### # 3.1 Triaxial # 3.1.1 Dimensões width = 1 height = 0.5 if TestType == '2D': dx = 1.01*2*rMaxElemento dy = width dz = height CorteTransversal = dy elif TestType == '3D': dx = width dy = width dz = height CorteTransversal = dy*dx # 3.1.2 Faces mn,mx=(-.5*dx,-.5*dy,0),(.5*dx,.5*dy,dz) walls=aabbWalls([mn,mx],thickness=0,material=MatContorno) wallIds=O.bodies.append(walls) base=O.bodies[4] topo=O.bodies[5] ################## ### 4.CÁLCULOS ### ################## # 4.1. InteractionLoop enlargeFactor=1.5 LoopFrict=InteractionLoop( [ Ig2_Wall_Sphere_ScGeom(), Ig2_Sphere_Sphere_ScGeom(interactionDetectionFactor=enlargeFactor), Ig2_Box_Sphere_ScGeom(), Ig2_Facet_Sphere_ScGeom(), ], [ Ip2_FrictMat_FrictMat_FrictPhys(), ], [ Law2_ScGeom_FrictPhys_CundallStrack(), ], ) LoopCohFrict=InteractionLoop( [ Ig2_Wall_Sphere_ScGeom(), Ig2_Sphere_Sphere_ScGeom6D(interactionDetectionFactor=enlargeFactor), Ig2_Box_Sphere_ScGeom6D(), Ig2_Facet_Sphere_ScGeom6D(), ], [ Ip2_FrictMat_FrictMat_FrictPhys(), Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(setCohesionNow=True,setCohesionOnNewContacts=True,label='ipf') ], [ Law2_ScGeom_FrictPhys_CundallStrack(), Law2_ScGeom6D_CohFrictPhys_CohesionMoment(useIncrementalForm=True) ], ) LoopConcrete=InteractionLoop( [ Ig2_Wall_Sphere_ScGeom(), Ig2_Sphere_Sphere_ScGeom(interactionDetectionFactor=enlargeFactor), Ig2_Box_Sphere_ScGeom(), Ig2_Facet_Sphere_ScGeom(), ], [ Ip2_FrictMat_FrictMat_FrictPhys(), Ip2_CpmMat_CpmMat_CpmPhys(cohesiveThresholdIter=10), Ip2_FrictMat_CpmMat_FrictPhys(), ], [ Law2_ScGeom_FrictPhys_CundallStrack(), Law2_ScGeom_CpmPhys_Cpm(), ], ) if MatType == 'frict': IntLoop = LoopFrict elif MatType == 'cohfrict': IntLoop = LoopCohFrict elif MatType == 'concrete': IntLoop = LoopConcrete # 4.2 Factory Parameters MassFlowRate = 5000/(CorteTransversal*dz) VMAX = 5 VMIN = 5 FCenter = (0.,0.,height/2) FExtents2D = (0,width/2.,height/2) FExtents3D = (width/2.,width/2.,height/2) factoy2D = BoxFactory( center = FCenter, extents = FExtents2D, PSDsizes = PSD[0], PSDcum = PSD[1], PSDcalculateMass = True, vMax = VMAX, vMin = VMIN, vAngle = 0., normal = (0.,0.,-1.), maxParticles = -1, massFlowRate = MassFlowRate, # exactDiam = False, label = 'factory', blockedDOFs = 'xYZ', materialId = 0 ) factoy3D = BoxFactory( center = FCenter, extents = FExtents3D, PSDsizes = PSD[0], PSDcum = PSD[1], PSDcalculateMass = True, vMax = 5*VMAX, vMin = 5*VMIN, vAngle = 0., normal = (0.,0.,-1.), maxParticles = -1, massFlowRate = MassFlowRate, # exactDiam = False, label = 'factory', materialId = 0 ) if TestType == '2D': factory = factoy2D elif TestType == '3D': factory = factoy3D #4.3 Engines O.engines=[ ForceResetter(), InsertionSortCollider([ Bo1_Sphere_Aabb(aabbEnlargeFactor=enlargeFactor), Bo1_Box_Aabb(), Bo1_Wall_Aabb(), Bo1_Facet_Aabb() ], verletDist=0.07*2*rMeanElemento), IntLoop, factory, DomainLimiter(lo=(-dx/2,-dy/2.,0.),hi=(dx/2,dy/2.,dz+5*rMeanElemento),iterPeriod=100), GlobalStiffnessTimeStepper( active=True, defaultDt=SpherePWaveTimeStep(radius=rMeanElemento, density=O.materials[0].density, young=O.materials[0].young), timeStepUpdateInterval=10,timestepSafetyCoefficient=0.8 ), NewtonIntegrator(damping=0.3, gravity=[0.,0.,-9.81], label='newton'), PyRunner(command='PreencherTriaxial()',iterPeriod=10,label='PrepararAmostra'), # PyRunner(command='addPlotData()',iterPeriod=10), ] ################## ### 5.PyRunner ### ################## def Porosity(Region): if TestType == '3D': return porosity(Region) elif TestType == '2D': soma=0. for b in O.bodies: if isinstance(b.shape,Sphere): soma+=pi*(b.shape.radius**2) return (Region-soma)/Region if TestType == '2D': acelerador = 1 elif TestType == '3D': acelerador = 5 Compressao=False Descompressao=False AlturaPreenchida=0 def PreencherTriaxial(): global Compressao global Descompressao global topo global AlturaPreenchida if Compressao: if Porosity(CorteTransversal*topo.state.pos[2])<PorosidadeS: topo.state.vel = (0.,0.,1.*acelerador) Descompressao = True Compressao = False newton.damping = 0.7 else: topo.state.vel = (0,0,-10*acelerador) elif Descompressao: if abs(O.forces.f(topo.id)[2])==0: if topo.state.vel==(0,0,1*acelerador): print Porosity(CorteTransversal*topo.state.pos[2]) AlturaPreenchida=topo.state.pos[2] print AlturaPreenchida/height if topo.state.pos==(0,0,dz+rMaxElemento): Material.density=DensidadeS*100/(1-Porosity(CorteTransversal*AlturaPreenchida)) if AlturaPreenchida>height-rMeanElemento: topo.state.vel=(0,0,0) calm() Descompressao=False Material.frictionAngle=radians(35) newton.damping=0.4 PrepararAmostra.command='EstabilizarTriaxial()' PrepararAmostra.iterPeriod=1 else: topo.state.vel = (0,0,0) Descompressao = False factory.massFlowRate = 220/(CorteTransversal*(height-AlturaPreenchida)) # factory.center[2] = (AlturaPreenchida+height)/2 # factory.extents[2] = (height-AlturaPreenchida)/2 newton.damping = 0.1 # if AlturaPreenchida > 0.95*height: # newton.gravity = [0.,0.,-9.81] else: # topo.state.vel=(0,0,30*acelerador) topo.state.vel=(0,0,0) topo.state.pos=(0,0,dz+rMaxElemento) elif factory.massFlowRate==0: Compressao=True def EstabilizarTriaxial(): if topo.state.pos[2]>0.98*height: topo.state.vel=(0,0,-25) else: topo.state.vel=(0,0,0) if utils.unbalancedForce()<0.005: #Checar isso para concreto PrepararAmostra.command='FinalizarPreparo()' def FinalizarPreparo(): print "Amostra Preparada" print "Densidade" print Material.density print "Porosidade" print Porosity(CorteTransversal*AlturaPreenchida) print "Tempo" print O.realtime export.textExt('Packing' + TestType + MatType + '-' + str(PorosidadeS),'x_y_z_r_matId') O.pause() O.run() utils.waitIfBatch() Thank you so much and wish have a good day! Regards, Jessica. -- You received this question notification because your team yade-users is an answer contact for Yade. _______________________________________________ Mailing list: https://launchpad.net/~yade-users Post to : yade-users@lists.launchpad.net Unsubscribe : https://launchpad.net/~yade-users More help : https://help.launchpad.net/ListHelp