Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ########################################## encoding: utf-8 #######################################
- from yade.gridpfacet import *
- from yade import pack,plot
- import math
- import random as rand
- import numpy as np
- from scipy.stats import gaussian_kde
- ## Definition of several variables (geometry, density, etc etc)
- ########################################## MATERIAL #######################################
- ## I remove the value of the variables
- O.materials.append( #Viscous flow material
- FrictMat(
- density=sphDensity,
- frictionAngle=math.radians(sphFrictAng),
- poisson=sphPoisson,
- young=sphYoung,
- label='Frict'
- ))
- O.materials.append( #Bed channel material
- FrictMat(
- density=2500,
- frictionAngle=math.radians(chanFrictAng),
- poisson=0.2,
- young=1e7,
- label='FrictBase'
- ))
- O.materials.append( #Wall channel material
- FrictMat(
- density=2500,
- frictionAngle=math.radians(0.),
- poisson=0.2,
- young=1e7,
- label='FrictWall'
- ))
- O.materials.append( #Not used here
- FrictMat(
- density=2500,
- frictionAngle=math.radians(20.),
- poisson=0.2,
- young=1e7,
- label='FrictRigid'
- ))
- ###################### FENCE #####################
- ## I remove the value of the variables
- O.materials.append( WireMat( young=young_wire,poisson=0.3,frictionAngle=radians(frict_wire),density=7850,diameter=2*Rfilet,isDoubleTwist=False,label='gridNodeNetPackSimple',strainStressValues=SSVal_Simple) ) # Material to create the GridNode
- O.materials.append( WireMat( young=young_wire,poisson=0.3,frictionAngle=radians(frict_wire),density=7850,diameter=2*Rfilet,isDoubleTwist=False,label='gridNodeNetPackDouble',strainStressValues=SSVal_Simple) ) # Material to create the GridNode
- O.materials.append(FrictMat( young=young_Conn,poisson=0.3,density=7850,frictionAngle=radians(frict_Con), label='CohMat'))#normalCohesion=200e6,isCohesive=True,shearCohesion=200e2,momentRotationLaw=False, label='CohMat') ) # Material to create the iteraction (Gridconection)
- ######################################### ENGINES #######################################
- # Definition of simulation's variable
- Factor = 1.5 #Factor ratio for the distance detection of distant interactions
- theta_method = 0.55 #1 : Euler Backward, 0.5 : trapezoidal rule, 0 : not used, 0.55 : suggested optimum
- resolution = 1 #Change normal component resolution method, 0: Iterative exact resolution (theta method, linear contact), 1: Newton-Rafson dimentionless resolution (theta method, linear contact), 2: Newton-Rafson with nonlinear surface deflection (Hertzian-like contact)
- NewtonRafsonTol = 1e-6 #Precision of the resolution of Newton-Rafson's method
- vel_front = Vector3(0.,0.,0.)
- O.engines=[
- ForceResetter(),
- InsertionSortCollider([
- Bo1_Sphere_Aabb(aabbEnlargeFactor=Factor, label="aabb"),
- Bo1_GridConnection_Aabb(),
- Bo1_Wall_Aabb(),
- Bo1_Box_Aabb()],
- verletDist=-0.1,
- allowBiggerThanPeriod=False
- ),
- InteractionLoop([
- Ig2_Sphere_Sphere_ScGeom(),
- Ig2_GridNode_GridNode_GridNodeGeom6D(),
- Ig2_GridConnection_GridConnection_GridCoGridCoGeom(),
- Ig2_Sphere_GridConnection_ScGridCoGeom(),
- Ig2_Sphere_Sphere_ScGeom6D(interactionDetectionFactor=Factor,label="Ig2"),
- Ig2_Box_Sphere_ScGeom6D(),
- ],
- [
- Ip2_WireMat_WireMat_WirePhys(label='wire_wire'),
- Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(setCohesionNow=True,setCohesionOnNewContacts=False),
- Ip2_FrictMat_FrictMat_LubricationPhys(eta=m_viscosity,eps=m_roughness,label="Phys_Lub"),
- Ip2_FrictMat_FrictMat_FrictPhys(),
- ## Here I don't know why but changing the order solved one problem....
- ],
- [
- Law2_ScGeom6D_CohFrictPhys_CohesionMoment(),
- Law2_ScGeom_FrictPhys_CundallStrack(),
- Law2_ScGridCoGeom_FrictPhys_CundallStrack(),
- Law2_ScGeom_WirePhys_WirePM(),
- Law2_GridCoGridCoGeom_FrictPhys_CundallStrack(),
- Law2_ScGeom_ImplicitLubricationPhys(
- activateNormalLubrication=True,
- activateTangencialLubrication=True,
- activateTwistLubrication=True,
- activateRollLubrication=True,
- theta=theta_method,
- resolution=resolution,
- warnedOnce=True,
- maxSubSteps=20,
- NewtonRafsonTol=NewtonRafsonTol,
- debug=False)
- ]
- ),
- DragEngine(Rho=1200,Cd=0.47,V=vel_front, label='Drag', dead=True), #Modified engine to include computation of drag force using relative velocity based on V instead of absolute velocity of the particle
- NewtonIntegrator(gravity=gravityVector,damping=0.3,label='newton'),
- #Several PyRunner
- VTKRecorder(fileName=folder+'/VTK/vtk-',virtPeriod=0.1),
- ]
- Drag.ids=spIds
- Drag.Rho=fluidDensity
- Drag.Cd=0.47
- ######################################### CONSTRUCTION DU BASSIN #######################################
- boxColor = (104/255., 111/255., 140/255.)
- chanBack = O.bodies.append(aabbWalls([(0,length_channel/3.,0),(0,length_channel/3.,height_channel)],thickness=0.0,material='FrictWall',oversizeFactor=1.0,color=boxColor))
- chanS1 = O.bodies.append(aabbWalls([(0,length_channel/3.,0),(0,0,height_channel)],thickness=0.0,material='FrictWall',oversizeFactor=1.0,color=boxColor))
- chanB = O.bodies.append(aabbWalls([(0,length_channel/3.,0),(width_channel,0,0)],thickness=0.0,material='FrictBase',oversizeFactor=1.0,color=boxColor))
- chanS2 = O.bodies.append(aabbWalls([(width_channel,0,0),(width_channel,length_channel/3.,height_channel)],thickness=0.0,material='FrictWall',oversizeFactor=1.0,color=boxColor))
- chanBottom = O.bodies.append(aabbWalls([(0,0,0),(width_channel,0,height_channel)],thickness=0.0,material='FrictWall',oversizeFactor=1.0,color=boxColor))
- DepBox = O.bodies.append(aabbWalls([(0.,length_channel/3.,-0.1),(width_channel,length_channel/3.-0.1*length_channel,2*height_channel)],thickness=0.0,material='FrictWall',oversizeFactor=1.0,color=boxColor))
- ######################################### AJOUT ECOULEMENT #######################################
- partCloud = pack.SpherePack()
- partCloud.makeCloud(minCorner=(0.,length_channel/3.-length_channel/10./2.,0.),maxCorner=(width_channel,length_channel/3.-0.095*length_channel,height_channel*2.), rMean=diameterPart/2.0)
- spIds = partCloud.toSimulation(material='Frict',color=[205./255,175./255,149./255])
- allSp = spIds
- ######################################### CONSTRUCTION DU MAILLAGE #######################################
- ##################### TAILLE REELLE #####################
- for i in range(Nx+1): # Loops x
- x = xstart + Lx*i
- for j in range(kz): # loops z
- z = zstart + Lz*j
- ################################### ACCROCHE COTE GAUCHE ######################################
- # Note: the radius is 1.01*Rfilet and 0.99*Rfilet because in that way when you create a grid connection betwen two GridNode with diferent characteristics it takes the inf of the bigest radius
- if i == 0:
- NetPack += [O.bodies.append( gridNode([x+Lx/4,y,z+Lz/2],1.01*Rfilet, color=[0,0,1],material='gridNodeNetPackDouble',wire=False,highlight=False,fixed=False))]
- ItLeft.append(NetPack[-1])
- Agraphes.append(NetPack[-1])
- if j != 0:
- NetPack += [ O.bodies.append( gridNode([x,y,z],0.99*Rfilet, color=[1,0,0],material='gridNodeNetPackSimple',wire=False,highlight=False,fixed=False))]
- ItLeft.append(NetPack[-1])
- ##################### ACCROCHE COTE DROIT #####################
- if i == Nx:
- NetPack += [ O.bodies.append( gridNode([x-Lx/4,y,z],1.01*Rfilet, color=[0,0,1],material='gridNodeNetPackDouble',wire=False,highlight=False,fixed=False))]
- Agraphes.append(NetPack[-1])
- ItRight.append(NetPack[-1])
- if j != kz-1:
- NetPack += [ O.bodies.append( gridNode([x,y,z+Lz/2],0.99*Rfilet, color=[1,0,0],material='gridNodeNetPackSimple',wire=False,highlight=False,fixed=False))]
- ItRight.append(NetPack[-1])
- if j == kz-1:
- if Nz%2 != 0:
- NetPack +=[ O.bodies.append( gridNode([x,y,z+Lz/2],0.99*Rfilet, color=[1,0,0],material='CohMat',wire=False,highlight=False,fixed=False))]
- ItRight.append(NetPack[-1])
- NetPack +=[ O.bodies.append( gridNode([x-Lx/4,y,z+Lz],1.01*Rfilet, color=[0,0,1],material='CohMat',wire=False,highlight=False,fixed=False))]
- Agraphes.append(NetPack[-1])
- ItRight.append(NetPack[-1])
- ##################### RESTE MAILLAGE #####################
- if i!= 0 and i!= Nx:
- NetPack += [ O.bodies.append( gridNode([x-Lx/4,y,z],1.01*Rfilet, color=[0,0,1],material='gridNodeNetPackDouble',wire=False,highlight=False,fixed=False))]
- Agraphes.append(NetPack[-1])
- ItCenter.append(NetPack[-1])
- NetPack +=[ O.bodies.append( gridNode([x,y,z+Lz/4],0.99*Rfilet, color=[0,1,0],material='gridNodeNetPackSimple',wire=False,highlight=False,fixed=False))]
- ItCenter.append(NetPack[-1])
- NetPack += [ O.bodies.append( gridNode([x+Lx/4,y,z+Lz/2],1.01*Rfilet, color=[0,0,1],material='gridNodeNetPackDouble',wire=False,highlight=False,fixed=False))]
- Agraphes.append(NetPack[-1])
- ItCenter.append(NetPack[-1])
- if j != kz-1:
- NetPack += [ O.bodies.append( gridNode([x,y,z+3*Lz/4],0.99*Rfilet, color=[0,1,0],material='gridNodeNetPackSimple',wire=False,highlight=False,fixed=False))]
- ItCenter.append(NetPack[-1])
- if j == kz-1:
- if Nz%2!=0:
- NetPack += [ O.bodies.append( gridNode([x,y,z+3*Lz/4],0.99*Rfilet, color=[0,1,0],material='gridNodeNetPackSimple',wire=False,highlight=False,fixed=False))]
- ItCenter.append(NetPack[-1])
- NetPack += [ O.bodies.append( gridNode([x-Lx/4,y,z+Lz],1.01*Rfilet, color=[0,1,0],material='gridNodeNetPackDouble',wire=False,highlight=False,fixed=False))]
- Agraphes.append(NetPack[-1])
- ItCenter.append(NetPack[-1])
- ##################### DEFINITION INTERACTIONS #####################
- for i,j in zip(ItLeft[:-1], ItLeft[1:]):#it gauche
- O.bodies.append( gridConnection(i,j,Rfilet,material='CohMat',color=[1,2,1],mask=3))
- for i,j in zip(ItCenter[:-1], ItCenter[1:]):#it centre
- if O.bodies[i].state.pos[2] != zmax:
- O.bodies.append( gridConnection(i,j,Rfilet,material='CohMat',color=[1,2,1],mask=3))
- for i,j in zip(ItRight[:-1], ItRight[1:]):#it Droite
- O.bodies.append( gridConnection(i,j,Rfilet,material='CohMat',color=[1,2,1],mask=3))
- for i,j in zip(ItCenter[:-2], ItCenter[2:]) :#it centre verticale
- if O.bodies[i].state.pos[0] == O.bodies[j].state.pos[0]:
- O.bodies.append( gridConnection(i,j,Rfilet,material='CohMat',color=[1,2,1],mask=3))
- for i, j in zip(Agraphes[:-Nx], Agraphes[Nx:]):
- O.bodies.append( gridConnection(i,j,Rfilet,material='CohMat',color=[1,2,1],mask=3))
- ## The entiere mesh is built like above, first GridNode using CohFrictMat then the GridConnections using FrictMat
- ## I will not show the entire routine, I'm not sure yet I can show its but it only creates the geometry using GridNode and GridConnections as above.
- def Freins(Pos1, Pos2, Fdec,radius):
- ##I remove the value of the variables
- freinmat = O.materials.append(WireMat(young=youngf, poisson=poissonf,frictionAngle=radians(10),density=densityf,isDoubleTwist=False,diameter=2*radius,strainStressValues=strainStressValuesf))
- frein = []
- frein.extend([
- O.bodies.append(utils.sphere(Pos1,radius,wire=False,fixed=False,material=freinmat,color=colorf,mask=3)),
- O.bodies.append(utils.sphere(Pos2,radius,wire=False,fixed=False,material=freinmat,color=colorf,mask=3))])
- createInteraction(frein[0],frein[1])
- return (frein)
- ################################### MANILLE ##################################
- def Manille_Vert(Rman, ouv, posX, posY, posZ, base):
- ## I remove the value of the variables
- bouclemat = O.materials.append(CohFrictMat(young=youngb,poisson=poissonb,density=densityb,frictionAngle=radians(frottement),normalCohesion=pi*strenruptb,shearCohesion=shearCohb,momentRotationLaw=True))
- bouclecomat = O.materials.append(FrictMat(young=youngb,poisson=poissonb,density=densityb,frictionAngle=radians(frottement)))
- boucle.extend([
- O.bodies.append(gridNode([posX,posY,posZ+dec],Rman,wire=wire,fixed=False,material=bouclemat,color=colorb)),
- O.bodies.append(gridNode([posX,posY+dec,posZ],Rman,wire=wire,fixed=False,material=bouclemat,color=colorb)),
- O.bodies.append(gridNode([posX,posY,posZ-dec],Rman,wire=wire,fixed=False,material=bouclemat,color=colorb)),
- O.bodies.append(gridNode([posX,posY-dec,posZ],Rman,wire=wire,fixed=False,material=bouclemat,color=colorb)) ])
- conboucle=[]
- for i,j in zip(boucle[:-1],boucle[1:]):
- conboucle.append( O.bodies.append( gridConnection(i,j,Rman,wire=wire, material = bouclecomat,color=colorb,mask=3) ) )
- conboucle.append( O.bodies.append( gridConnection(boucle[0],boucle[-1],Rman,wire=wire, material = bouclecomat,color=colorb,mask=3) ) )
- ############ CLUMP ############
- clumping = []
- clumping.extend([boucle[0],boucle[1],boucle[2],boucle[3],base])
- clumps = O.bodies.clump(clumping)
- return boucle,conboucle,clumps
- def Manille_frein(Rman, ouv, posX, posY, posZ,Dir):
- ## I remove the value of the variables
- bouclemat = O.materials.append(CohFrictMat(young=youngb,poisson=poissonb,density=densityb,frictionAngle=radians(frottement),normalCohesion=pi*strenruptb,shearCohesion=shearCohb,momentRotationLaw=True))
- bouclecomat = O.materials.append(FrictMat(young=youngb,poisson=poissonb,density=densityb,frictionAngle=radians(frottement)))
- if Dir=='Left':
- boucle.extend([
- O.bodies.append(gridNode([posX-dec*cos(2*Lz/Lx),posY,posZ+dec*sin(2*Lz/Lx)],Rman,wire=wire,fixed=False,material=bouclemat,color=colorb)),
- O.bodies.append(gridNode([posX,posY+dec,posZ],Rman,wire=wire,fixed=False,material=bouclemat,color=colorb)),
- O.bodies.append(gridNode([posX+dec*cos(2*Lz/Lx),posY,posZ-dec*sin(2*Lz/Lx)],Rman,wire=wire,fixed=False,material=bouclemat,color=colorb)),
- O.bodies.append(gridNode([posX,posY-dec,posZ],Rman,wire=wire,fixed=False,material=bouclemat,color=colorb)) ])
- else:
- boucle.extend([
- O.bodies.append(gridNode([posX+dec*cos(2*Lz/Lx),posY,posZ+dec*sin(2*Lz/Lx)],Rman,wire=wire,fixed=False,material=bouclemat,color=colorb)),
- O.bodies.append(gridNode([posX,posY+dec,posZ],Rman,wire=wire,fixed=False,material=bouclemat,color=colorb)),
- O.bodies.append(gridNode([posX-dec*cos(2*Lz/Lx),posY,posZ-dec*sin(2*Lz/Lx)],Rman,wire=wire,fixed=False,material=bouclemat,color=colorb)),
- O.bodies.append(gridNode([posX,posY-dec,posZ],Rman,wire=wire,fixed=False,material=bouclemat,color=colorb)) ])
- frein = []
- if Dir=='Left':
- frein.extend([
- O.bodies.append(utils.sphere([O.bodies[boucle[0]].state.pos[0],O.bodies[boucle[0]].state.pos[1],O.bodies[boucle[0]].state.pos[2]*1.001],Rman,wire=False,fixed=False,material=freinmat,color=colorf,mask=3)),
- O.bodies.append(utils.sphere([i+j for i,j in zip(O.bodies[boucle[0]].state.pos,[-dec*cos(2*Lz/Lx),0,dec*sin(2*Lz/Lx)])],Rman,wire=False,fixed=False,material=freinmat,color=colorf,mask=3))])
- O.bodies[-1].shape.color.color=[0.5,0.5,0.5]
- else:
- frein.extend([
- O.bodies.append(utils.sphere([O.bodies[boucle[0]].state.pos[0],O.bodies[boucle[0]].state.pos[1],O.bodies[boucle[0]].state.pos[2]*1.001],Rman,wire=False,fixed=False,material=freinmat,color=colorf,mask=3)),
- O.bodies.append(utils.sphere([i+j for i,j in zip(O.bodies[boucle[0]].state.pos,[dec*cos(2*Lz/Lx),0,dec*sin(2*Lz/Lx)])],Rman,wire=False,fixed=False,material=freinmat,color=colorf,mask=3))])
- createInteraction(frein[0],frein[1])
- conboucle=[]
- for i,j in zip(boucle[:-1],boucle[1:]):
- conboucle.append( O.bodies.append( gridConnection(i,j,Rman,wire=wire, material = bouclecomat,color=colorb,mask=3) ) )
- conboucle.append( O.bodies.append( gridConnection(boucle[0],boucle[-1],Rman,wire=wire, material = bouclecomat,color=colorb,mask=3) ) )
- ############ CLUMP ############
- clumping = []
- clumping.extend([boucle[0],boucle[1],boucle[2],boucle[3],frein[0]])
- clumps = O.bodies.clump(clumping)
- TTT=frein[1]
- return boucle,conboucle,clumps,TTT
- boucle,conboucle,shackles=[],[],[]
- ########################## Functions ##############################
- ## Lot of functions here that I removed because not relevant to the problem encountered
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement