------------------------------------------------------------
revno: 3745
committer: Jerome Duriez <[email protected]>
timestamp: Mon 2013-11-04 16:32:10 +0100
message:
  A script example for JCFpm : two rock parts with one joint in the middle, 
like in laboratory experiments
added:
  examples/jointedCohesiveFrictionalPM/testingJoint.py


--
lp:yade
https://code.launchpad.net/~yade-pkg/yade/git-trunk

Your team Yade developers is subscribed to branch lp:yade.
To unsubscribe from this branch go to 
https://code.launchpad.net/~yade-pkg/yade/git-trunk/+edit-subscription
=== added file 'examples/jointedCohesiveFrictionalPM/testingJoint.py'
--- examples/jointedCohesiveFrictionalPM/testingJoint.py	1970-01-01 00:00:00 +0000
+++ examples/jointedCohesiveFrictionalPM/testingJoint.py	2013-11-04 15:32:10 +0000
@@ -0,0 +1,135 @@
+# encoding: utf-8
+
+
+# Abstract : this script defines a "rock joint" sample : two rectangular blocks separated by an horizontal joint surface. Imposing relative movements of the blocks, that are clumps, allows to test directly the behaviour of the joint, described by JCFpm model.
+# [email protected]
+
+
+# Mechanical properties of rock matrix and rock joint :
+def mat(): return JCFpmMat(type=1,young=15.e9,frictionAngle=radians(35),density=3000,poisson=0.35,tensileStrength=4.5e6,cohesion=45.e6,jointNormalStiffness=5.e7,jointShearStiffness=2.5e7,jointCohesion=0.,jointTensileStrength=0.,jointFrictionAngle=radians(35.),jointDilationAngle=0.0)
+
+
+# --- Creating a sample of spheres
+
+# definition of a predicate 
+from yade import pack
+Lx = 10
+Ly = 10
+Lz = 6
+pred = pack.inAlignedBox((0,0,0),(Lx,Ly,Lz))
+# use of randomDensePack() function
+nSpheres = 1500.0
+poros=0.13 # apparently the value of porosity of samples generated by pack.randomDensePack
+rMeanSpheres = pow(Lx*Ly*Lz*3.0/4.0*(1-poros)/(pi*nSpheres),1.0/3.0)
+print '\nGenerating sphere sample, be patient'
+sp = pack.randomDensePack(pred,radius=rMeanSpheres,rRelFuzz=0.3,memoizeDb='/tmp/gts-triax-packings.sqlite',returnSpherePack=True)
+sp.toSimulation(color=(0.9,0.8,0.6),wire=False,material=mat)
+print 'Sphere sample generated !'
+
+
+# --- The joint surface : half of the height
+import gts
+v1 = gts.Vertex(0 , 0 , Lz/2.0)
+v2 = gts.Vertex(Lx, 0 , Lz/2.0)
+v3 = gts.Vertex(Lx, Ly, Lz/2.0)
+v4 = gts.Vertex(0 , Ly, Lz/2.0)
+
+e1 = gts.Edge(v1,v2)
+e2 = gts.Edge(v2,v4)
+e3 = gts.Edge(v4,v1)
+f1 = gts.Face(e1,e2,e3)
+
+e4 = gts.Edge(v4,v3)
+e5 = gts.Edge(v3,v2)
+f2 = gts.Face(e2,e4,e5)
+
+s1 = gts.Surface()
+s1.add(f1)
+s1.add(f2)
+
+facet = gtsSurface2Facets(s1,wire = False,material=mat)
+O.bodies.append(facet)
+
+
+# --- Identification of spheres onJoint, and so on:
+execfile('identifBis.py')
+
+
+# --- Engines definition
+O.engines=[
+	ForceResetter(),
+	InsertionSortCollider([Bo1_Sphere_Aabb()]),
+	InteractionLoop(
+		[Ig2_Sphere_Sphere_ScGeom()],
+		[Ip2_JCFpmMat_JCFpmMat_JCFpmPhys(cohesiveTresholdIteration=1)],
+		[Law2_ScGeom_JCFpmPhys_JointedCohesiveFrictionalPM(smoothJoint=True)]),
+	GlobalStiffnessTimeStepper(timestepSafetyCoefficient=0.8),
+        NewtonIntegrator(damping=0.2),
+        PyRunner(command='afficheIt()',initRun=True,iterPeriod=1000),
+]
+def afficheIt():
+	print 'It', O.iter
+
+O.step()
+
+# --- Clumping the blocks
+upperBlock=[]
+lowerBlock=[]
+for inte in O.interactions:
+    if not inte.phys.isOnJoint:
+       bod1 = O.bodies[inte.id1]
+       bod2 = O.bodies[inte.id2]
+       if bod1.state.pos[2]<Lz/2.0:
+          if not (bod1.id in lowerBlock):
+		  lowerBlock.append(bod1.id)
+		  bod1.shape.color=Vector3(1,0,0)
+	  if bod2.state.pos[2]>Lz/2.0:
+             print '\n **** ERROR !!!! ******* \n\n'
+	  else:
+             if not (bod2.id in lowerBlock):
+		     lowerBlock.append(bod2.id)
+		     bod2.shape.color=Vector3(1,0,0)
+       else:
+          if not (bod1.id in upperBlock):
+		  upperBlock.append(bod1.id)
+		  bod1.shape.color=Vector3(0,0,1)
+	  if bod2.state.pos[2]<Lz/2.0:
+             print '\n **** ERROR !!!! ******* \n\n'
+	  else:
+		  if not (bod2.id in upperBlock):
+			  upperBlock.append(bod2.id)
+			  bod2.shape.color=Vector3(0,0,1)
+print '\n Clumping upper block, be patient'
+idUpperClump=O.bodies.clump(upperBlock)
+print 'Clumped !'
+
+print '\n Clumping lower block, be patient'
+idLowerClump=O.bodies.clump(lowerBlock)
+print 'Clumped !'
+
+upperClump = O.bodies[idUpperClump]
+lowerClump = O.bodies[idLowerClump]
+z0 = upperClump.state.pos[2]
+upperClump.dynamic=False
+lowerClump.dynamic=False
+
+
+# --- Saving data
+O.engines =O.engines+[PyRunner(command='dataCollector()',initRun=True,iterPeriod=500)]
+def dataCollector():
+	plot.addData(iterations=O.iter,un=-(upperClump.state.pos[2]-z0),Fz=O.forces.f(idUpperClump,sync=True)[2],Ft=sqrt(pow(O.forces.f(idUpperClump,sync=True)[1],2.)+pow(O.forces.f(idUpperClump,sync=True)[0],2.)),Fzinf=O.forces.f(idLowerClump,sync=True)[2],uf=unbalancedForce(),ec=kineticEnergy())
+
+from yade import plot
+plot.plots={'un':('Fz')}
+
+# --- Simulation !
+compSpeed = 0.0075 # put here a positive value, for compression
+upperClump.state.vel=Vector3(0,0,-compSpeed)
+nIt = 10000
+print '\nComputation begins now, for', nIt,'iterations'
+O.run(nIt,wait=True)
+print 'Computation just finished ! \n'
+
+yade.qt.View()
+yade.qt.Controller()
+plot.plot()

_______________________________________________
Mailing list: https://launchpad.net/~yade-dev
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~yade-dev
More help   : https://help.launchpad.net/ListHelp

Reply via email to