Hi,
Jan, thank you for even trying to give a solution to this! :) It is much appreciated! I am using the latest version of YADE downloaded from github (I don't have a number of the version, as it appears as yade-Unknown) and my operating system is Ubuntu 16.04.5 LTS. I have compiled the code after enabling the "PotentialBlock" and the "PotentialParticle" classes. I found something interesting. Using the PotentialBlocks class, contact detection works smoothly, but the periodic boundaries are not respected, while if I use the PotentialParticles class, the contact detection does not work, but the generated particles interact with the periodic box. This is quite bizarre, since these two classes are practically twins (same mathematical formulation of the particles, using different contact detection algorithms each). Kind Regards, Vasileios Vasileios Angelidakis Post-Graduate Researcher in Geotechnical Engineering School of Engineering, Newcastle University Room 3.04, Drummond Building Devonshire Terrace, Newcastle upon Tyne, NE1 7RU, UK E: v.angelidak...@ncl.ac.uk<mailto:v.angelidak...@ncl.ac.uk> T: +44 (0)7380317986 W: Personal Page<https://www.students.ncl.ac.uk/vangelidakis2/> ________________________________ From: Yade-dev <yade-dev-bounces+v.angelidakis2=ncl.ac...@lists.launchpad.net> on behalf of Jan Stránský <honzik.stran...@gmail.com> Sent: 01 November 2018 08:38:42 To: Vasileios Angelidakis (PGR) Cc: Yade developers Subject: Re: [Yade-dev] Potential Blocks in a Periodic Box Hello, what version of Yade and what operating system do you use? PotentialBlocks are not compiled by default. I can **try** your code and to help you (without any guarantee to succeed :-) In general, bodies should have no problems with O.periodic=True, but interaction evaluation should implement something extra.. cheers Jan st 31. 10. 2018 v 17:11 odesílatel Vasileios Angelidakis <b7063...@newcastle.ac.uk<mailto:b7063...@newcastle.ac.uk>> napsal: Hi, I have started working on the "PotentialBlock" code in YADE for the generation of polyhedra using the Potential Particles approach. I want to use these particles in a periodic cell, but it seems the PotentialBlock class is not compatible with periodic boundaries. Would be grateful to get any advice on whether this is the case and where I should focus to implement it myself? (FYI I am still a rookie in C++ development). In the following lines I paste a minimal working script to demonstrate a potential block falling through the periodic cell. Visualisation of the simulation is available only in a VTK format (not in qt). Cheers, Vasileios Vasileios Angelidakis Post-Graduate Researcher in Geotechnical Engineering School of Engineering, Newcastle University The script: from yade import pack import math # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Clear the directory where the VTK results will be written of all files (but not subdirectories). # The directory is cleared, so files from previous runs do not interfere with files from new runs. # If the directory does not exist, it is created. import os, shutil folder = './vtk_ele' try: os.mkdir(folder[2:]) except: for the_file in os.listdir(folder): file_path = os.path.join(folder, the_file) try: if os.path.isfile(file_path): os.unlink(file_path) # elif os.path.isdir(file_path): shutil.rmtree(file_path) #uncomment to also delete the subdirectories except Exception as e: print(e) # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Engines O.engines=[ ForceResetter(), InsertionSortCollider([PotentialBlock2AABB()],verletDist=0.01), InteractionLoop( [Ig2_PB_PB_ScGeom()], [Ip2_FrictMat_FrictMat_KnKsPBPhys(kn_i=1e8, ks_i=1e8, Knormal = 1e8, Kshear = 1e8, useFaceProperties=False, calJointLength=False, twoDimension=False, unitWidth2D=1.0, viscousDamping=0.05)], [Law2_SCG_KnKsPBPhys_KnKsPBLaw(label='law',neverErase=False)] ), NewtonIntegrator(damping=0.0,exactAsphericalRot=False,gravity=[0,-10,0]), VTKRecorder(fileName=folder+'/vtkPeriodicCell-VTKRecorder-',recorders=['pericell'],iterPeriod=200) ] # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Basic dimensions used in the model distanceToCentre= 0.5 meanSize = 1.0 heightOfBase = 5.0*meanSize # Material definition powderDensity = 2000 O.materials.append(FrictMat(young=150e6,poisson=.4,frictionAngle=radians(0.0),density=powderDensity,label='frictionless')) # Creation of a spheres packing, following a desired PSD sp=pack.SpherePack() mn,mx=(Vector3(0,0,0), Vector3(4*heightOfBase, 4*heightOfBase, 4*heightOfBase)) sphereRad = sqrt(3.0)*0.5*meanSize sp.makeCloud(mn,mx,sphereRad,0,10,periodic=True) # Replacement of the spheres with cuboids count= 0 rPP=0.05*meanSize for s in sp: b=Body() dynamic=True wire=False color=[0,0,255.0] highlight=False b.shape=PotentialBlock( k=0.2, r=0.05*meanSize, R=1.02*sphereRad, a=[1.0,-1.0,0.0,0.0,0.0,0.0], b=[0.0,0.0,1.0,-1.0,0.0,0.0], c=[0.0,0.0,0.0,0.0,1.0,-1.0], d=[distanceToCentre-rPP,distanceToCentre-rPP,distanceToCentre-rPP,distanceToCentre-rPP,distanceToCentre-rPP,distanceToCentre-rPP], isBoundary=False, color=color, wire=wire, highlight=highlight, minAabb=Vector3(1.0*sphereRad,1.0*sphereRad,1.0*sphereRad), maxAabb=Vector3(1.0*sphereRad,1.0*sphereRad,1.0*sphereRad), maxAabbRotated=Vector3(1.0*sphereRad,1.0*sphereRad,1.0*sphereRad), minAabbRotated=Vector3(1.0*sphereRad,1.0*sphereRad,1.0*sphereRad), AabbMinMax=True,fixedNormal=False) length=meanSize V= 1.0 geomInert=(2./5.)*powderDensity*V*sphereRad**2 utils._commonBodySetup(b,V,Vector3(geomInert,geomInert,geomInert), material='frictionless',pos=s[0], dynamic=True, fixed=False) b.state.pos = s[0] #s[0] stores center b.state.ori = Quaternion((random.random(),random.random(),random.random()),random.random()) #s[2] b.state.mass =V*powderDensity O.bodies.append(b) b.dynamic = True count =count+1 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Set up Periodic Boundaries O.periodic = True O.cell.setBox(4*heightOfBase, 4*heightOfBase, 4*heightOfBase) # PotentialBlockVTKRecorder recorder sampleQuality=50 # Increase to improve visual quality of the particles in Paraview O.engines=O.engines+[PotentialBlockVTKRecorder(fileName=folder+'/eleTest_', iterPeriod=200, twoDimension=False, sampleX=sampleQuality, sampleY=sampleQuality, sampleZ=sampleQuality, maxDimension=0.2, label='PBvtkRecorder')] # Time step O.dt = 0.2*sqrt(0.3*O.bodies[0].state.mass/1.0e9) import yade.timing O.timingEnabled = True yade.timing.reset() _______________________________________________ Mailing list: https://launchpad.net/~yade-dev Post to : yade-dev@lists.launchpad.net<mailto:yade-dev@lists.launchpad.net> Unsubscribe : https://launchpad.net/~yade-dev More help : https://help.launchpad.net/ListHelp
_______________________________________________ Mailing list: https://launchpad.net/~yade-dev Post to : yade-dev@lists.launchpad.net Unsubscribe : https://launchpad.net/~yade-dev More help : https://help.launchpad.net/ListHelp