Re: [Yade-users] [Question #643878]: Uniaxial strainer source
Question #643878 on Yade changed: https://answers.launchpad.net/yade/+question/643878 loiseaurare confirmed that the question is solved: Thanks Jan Stránský, that solved my question. -- 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
Re: [Yade-users] [Question #643878]: Uniaxial strainer source
Question #643878 on Yade changed: https://answers.launchpad.net/yade/+question/643878 Status: Answered => Solved loiseaurare confirmed that the question is solved: All right, thanks a lot guys for all your answers. I got a little bit confused and thought I could plot stress and sigma for a Brazilian test using the features of the uniaxial strainer, which are obviously not adapted. I mean, I guess you could set the cross section area so that you would actually have the rigth tensile stress, but the strain would have to be change I think. I' m just going to plot force-displacement for now ! cheers, and thanks a lot for your attention and time, Manon -- 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
Re: [Yade-users] [Question #643878]: Uniaxial strainer source
Question #643878 on Yade changed: https://answers.launchpad.net/yade/+question/643878 Status: Answered => Open loiseaurare is still having a problem: Hi Jerome and Jan, Thanks for your explanation, after re-reading it the documentation seems now clearer to me, I guess my hesitation about the Negative and Positive Ids came from the fact that I did not have a visual support, maybe it could be worthwhile to add the image from [1] in the documentation, if so can be done [1] http://beta.arcig.cz/lide/eudoxos/smilauer2010-phd-thesis.pdf I have another question related to the calculation of average stress : is it possible to obtain the cross section used by uniaxial strainer for the calculation ? I mean it's location. >From what I read it seems like if one would like to adapt uniaxialStrainer to implement a Brazilian test, the crossSection area would have to be specified in order to get the correct tensileSigma right ? Otherwise, it seems to me like the convex hull would define the cross section area a bit fantastically. Or maybe it would'nt be right to use avgSigma at all, and it should be calculated using the force recording ? -- 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
Re: [Yade-users] [Question #643878]: Uniaxial strainer source
Question #643878 on Yade changed: https://answers.launchpad.net/yade/+question/643878 Status: Answered => Open loiseaurare is still having a problem: Hi Jan, thanks for your answer. Let me precise my question : when you say they are the ids of bodies of one or the other side, what are we talking about ? Are they the one and other side of a middle plan defined along the straining axis or perpendicular to this one ? -- 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
[Yade-users] [Question #643878]: Uniaxial strainer source
New question #643878 on Yade: https://answers.launchpad.net/yade/+question/643878 Hi everybody, I am trying to understand how exactly are calculated averageStress and strain in the uniaxialStrainer class. I am not sure understand what means "negativeIds" or "positiveIds", or why those have been defined in that way, and I am not familiar with cpp, so I thought I'd ask fo a bit of help on that issue. If anybody can help, I'd be glad ! Cheers all, Manon -- 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
Re: [Yade-users] [Question #632092]: CohFrictMat fragile mode does not break interaction
Question #632092 on Yade changed: https://answers.launchpad.net/yade/+question/632092 loiseaurare posted a new comment: Hi Bruno and Janek, Thanks for your answers, somehow I had come to the same conclusion. Now, what happens is exactly as you describe it, there is bond breakage when the strength limit is reached, and at the next step, contact is reset, but in a frictional way, with effectively unp set back to zero. That causes instability in a lot of my simulations using the feature fragile = True, because when Fragile = false the interaction Force stays on the strenght limit until the particles are set apart. Now, since this is microscale behavior, maybe I could achieve in doing what I want using microscale platic behavior, and calibrating it that way. However, I still feel it is physically more correct to describe rock behavior as fragile at the micro level ... To give you more information, I have been testing the sensitivity of this overlapping problem, I was thinking that maybe a very small initial overlap would prevent the "jump" in forces to be too strong, or maybe setting a high value of cohesion would allow the particles to break away before strenght limit could be reached. But I have found that even a very small value of overlap with a high value of cohesion definitively messes the data, and actually usually make the sample explode. Now, this feature, of keeping fn = 0 until the particles are set apart is what is implemented in jcfPM I think, so that was probably the choice made by Luc Scholtes. I don't understand it when you say that some volume will be created overall, can you maybe be a little more specific ? -- 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
[Yade-users] [Question #632092]: CohFrictMat fragile mode does not break interaction
New question #632092 on Yade: https://answers.launchpad.net/yade/+question/632092 Hi everybody ! I am trying to test what exactly do the fragile and plastic mode of CohFrictMat, and for this I have implemented a very simple simulation, appending a fixed sphere, and a second one who is moving the opposite way from initial contact, in order to break the cohesion bond by exceeding the tensile strength limit. I am plotting Fn versus un displacement, and when I run the simulation using Fragile = False in the simulation I get first elastic increase of fn, and then flat plastic behavior, then the two particles are set apart, and interaction disappears. Which is fine. However, when I use fragile = True, the same elastic behavior initially occurs, up until the fragile limit, then, at that precise timestep, no interaction is detected by Yade, and then this interaction is reset, with a very high value, and that does not drop to zero until the particles are really apart ( they are still overlapping when the strenght limit is reached, and that is because they are initially overlapping). So I don't really know what is going on here. Could it be that it is the setting of the equilibrium distance again ? since unp relates to plastic displacement ? any help would be appreciated ! Here is the script, running already until the strenght limit is reached, pressing run you can see what happens next ! # coding=utf-8 # TEST 8 : Appliance of horizontal disp one ball (rebound)-- > no grav/no coh # EXPECTED : we want to see breakage of cohesion bond from __future__ import division import numpy as np from yade import plot,pack,timing from pprint import pprint # DATA COMPONENTS nb_iter = 1 # INPUTS # Geometry RSph = 0.1 CoeffSph = 0.9 Pos1 = (RSph*CoeffSph,RSph,0.) Pos2 = (-RSph*CoeffSph,RSph,0.) # Material EyCohFrictMat = 1e7 poissonCohFrictMat = 0.25 densityCohFrictMat = 2600. FrictAngSphere = 30.*pi/180. NCohesionCohFrictMat = 3 SCohesionCohFrictMat = 3 # Calculation damp=0.5 gz=0. SphereVel= (-1.5,0.,0.) #EXPORTATION #création des différentes listes de forces lisForce = [] lisForN = [] lisForSh = [] lisTime = [] " # SIMULATION BEGINNING - SIMULATION BEGINNING - SIMULATION BEGINNING ## CREATE MATERIAL - CREATE MATERIAL - CREATE MATERIAL O.materials.append( CohFrictMat( young = EyCohFrictMat, poisson= poissonCohFrictMat, density= densityCohFrictMat , frictionAngle = FrictAngSphere, normalCohesion = NCohesionCohFrictMat , shearCohesion = SCohesionCohFrictMat , fragile = True, momentRotationLaw=True, etaRoll=0.1, etaTwist=-1, alphaKr=0., alphaKtw=0., isCohesive = True, label='MatSpheres')) ## CREATE SPHERES - CREATE SPHERES - CREATE SPHERES - # they could use the default material (utils.defaultMat) O.bodies.append([ # fixed: particle's position in space will not change sphere(center=Pos1,radius= RSph,fixed=True, material ='MatSpheres'), # this particles is free, subject to dynamics sphere(Pos2,RSph, material ='MatSpheres') ]) setBodyVelocity(1,SphereVel, 'xyz') ## FUNCTIONAL COMPONENTS - FUNCTIONAL COMPONENTS - FUNCTIONAL COMPONENTS - O.engines=[ ForceResetter(), InsertionSortCollider([Bo1_Sphere_Aabb()]), InteractionLoop( [Ig2_Sphere_Sphere_ScGeom6D(interactionDetectionFactor=1.5,label='ss2sc')], # collision geometry [Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(setCohesionNow = True)], # collision "physics" [Law2_ScGeom6D_CohFrictPhys_CohesionMoment(useIncrementalForm = True)] # contact law -- apply forces ), #Apply gravity force to particles. damping: numerical dissipation of energy. NewtonIntegrator(gravity=(0.,0.,gz)), PyRunner(command='addPlotData()',iterPeriod=1, dead= True, label = 'dataPlot') ] def setEquilibrium(): O.dt = 0. O.step() for i in O.interactions : i.phys.unp = i.geom.penetrationDepth O.step() dataPlot.dead = False ss2sc.interactionDetectionFactor=1. # now reset the interaction radius and go ahead O.dt=5e-4*PWaveTimeStep() def addPlotData(): yade.plot.addData({'t':O.time,'i':O.iter,'Fn':O.interactions[0,1].phys.normalForce[0] ,'Fs':O.interactions[0,1].phys.shearForce[0], 'un':SphereVel[0]*O.time }) #pprint (plot.data) setEquilibrium() plot.plots={'un':('Fn')} plot.plot() O.run(250,True) yade.qt.Controller(), yade.qt.View() cheers, Manon -- 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
Re: [Yade-users] [Question #631624]: How to select a proper model to model breakage of brittle material
Question #631624 on Yade changed: https://answers.launchpad.net/yade/+question/631624 Status: Open => Answered loiseaurare proposed the following answer: Hi Xavier, In [1], you should find a way of making packings with differents shapes, if I understood well what you are after ? I think the main idea is, you've got you're randomDensePack, and comparing it with the predicates it return true or false according to the positions of the spheres. I think randomDensePack does perform compression on the packing... I' m not sure I answered you question, did I understand what you were after? [1] https://yade- dem.org/doc/search.html?q=predicate&check_keywords=yes&area=default -- 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
Re: [Yade-users] [Question #631624]: How to select a proper model to model breakage of brittle material
Question #631624 on Yade changed: https://answers.launchpad.net/yade/+question/631624 Status: Open => Answered loiseaurare proposed the following answer: Hello Xavier, Really ? I have had so many troubles with the CohFrictMat, I prefer the JCFPMmat, I find it a lot more stable. What kind of simulation have you implemented ? I think, but I'm not an expert here, that those parameter are related to bending and twisting moments, I guess they depend on the type of material you are using, and how you would like to describe interactions of particles with one another. So I think it also depends on the scale of your particles. So, a clump is unbreakable, so I would say it is not the best to model crushing or breakage^^ You could however use clumps to model irregularly shaped particles. I think I saw another thread on the launchpad of a guy modelling crushing of particles with agglomerates, can't find it right now, but you should try and have look in the topics ! -- 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
Re: [Yade-users] [Question #631624]: How to select a proper model to model breakage of brittle material
Question #631624 on Yade changed: https://answers.launchpad.net/yade/+question/631624 Status: Open => Answered loiseaurare proposed the following answer: Hi Xavier, I am also working on the modelling of breakage of rock, and have been investigating that question for a bit of time. I have found that CohFrictMat and JCFpmMat are quite similar, meaning they have the same expression of contact stiffnesses, however JCFpmMat has a few built in functions that come in handy : the "equilibrium distance" is automatically set when creating a pack of spheres, while for the moment you still have to set it manually when you write a script using CohFrict Mat, although I think someone might be implementing that precise feature. With JCFpmMat the number of shear-broken or tensile broken bonds is tracked automatically, so that's quite cool as well, because you can easily track bond failure. Don't think such a function is implemented in CohFrictMat. However it is not clear to me how you handle plastic behavior with JCFpm, while it is a bit more clearer with CohFrictMat. Oh, and in JCFpm you can introduce weak planes, that could represent foliated plans in a rock for example, depends which kind of rock you want to model, but it seems like a good way to introduce macro-scale defect, and maybe microscale. CpmMat is a bit different, because it was designed for concrete material. The parameters used to describe the model are eps and sigma limit, whereas in the two other models you work with shearCohesion and tensileCohesion In the examples on CPMMat you can find a uniaxial test on a sample that is a good starting point for some calibration model. As far as I know, none of those contact law include viscous damping though Hope that was of any help, Cheers -- 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
Re: [Yade-users] [Question #273426]: Calculate the energy released when the bond between two particles breaks
Question #273426 on Yade changed: https://answers.launchpad.net/yade/+question/273426 loiseaurare posted a new comment: Hi Jerome, Do you have any more informations about that state function ? Like, what does mean "broken" from that point of view ? Does it consider the initial cohesive interactions only ? I wasn't able to get that when looking at the yade code... -- 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
Re: [Yade-users] [Question #630910]: Uniaxial test with CohFrictMat
Question #630910 on Yade changed: https://answers.launchpad.net/yade/+question/630910 Status: Answered => Solved loiseaurare confirmed that the question is solved: Hi Jan ! Oh ok, I thought using the O.bodies.dynamic = False on the first loop would work, like I saw in [2], but I guess this only freezes movement and not force development ? Anyway, thanks, that solved my problem. -- 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
Re: [Yade-users] [Question #630910]: Uniaxial test with CohFrictMat
Question #630910 on Yade changed: https://answers.launchpad.net/yade/+question/630910 loiseaurare confirmed that the question is solved: Thanks Jan Stránský, that solved my question. -- 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
[Yade-users] [Question #630910]: Uniaxial test with CohFrictMat
New question #630910 on Yade: https://answers.launchpad.net/yade/+question/630910 Hi everybody, I am trying to determine which cohesive contact law I should be using in order to model rock fragmentation. So I have been implementing tests on JcfPM, CohFrictMat and CpmMat. I have adapted the uniaxial tension-Compression Test from CpmMat examples in order to use it with both CohfrictMat and JcfPM. Seems to work not too badly with JcfPM (although I can't see fracture), but there is an issue with the CohfrictMat. When I try to run the test there is an initial value of averageStress that is very high, up to -102754.2 pa. This values quickly goes back to around zero, and then increases in an 'expectable' way, but that messes up the curve a lot, and I haven't been able to find to what it is due ? I have tried setting the equilibrium distance following this thread : https://answers.launchpad.net/yade/+question/266828, but that didn't change much ( plus I wouldn't expect initial overlapping forces to be that great ?) I have also noticed that another script posted by a Yade user, also an adaptation of the CPM uniaxialcompression test but using CohFrictMat, on this thread https://answers.launchpad.net/yade/+question/372295, may also be facing the same problem. The averageStress that I get running this code ( modifying the packing in order for the warning about porosity to disappear) is -1027113730.45 Pa. Then this value also decreases inexpectantly. The adaptation with JCFpm shows no sign of such a problem, although I am using the exact same set of parameters Any ideas on what is going on ? Here is the code # -*- coding: utf-8 -*- from __future__ import division from yade import plot,pack,timing import time, sys, os, copy #import matplotlib #matplotlib.rc('text',usetex=True) #matplotlib.rc('text.latex',preamble=r'\usepackage{concrete}\usepackage{euler}') def addPlotData(): yade.plot.addData ({'t':O.time,'i':O.iter,'eps':strainer.strain,'sigma':strainer.avgStress+isoPrestress, 'sigma.25':forcesOnCoordPlane(coord_25,axis)[axis]/area_25+isoPrestress, 'sigma.50':forcesOnCoordPlane(coord_50,axis)[axis]/area_50+isoPrestress, 'sigma.75':forcesOnCoordPlane(coord_75,axis)[axis]/area_75+isoPrestress, }) # default parameters or from table readParamsFromTable(noTableOk=True, # unknownOk=True, young=1e9, poisson=0.25, densityCohFrictMat = 2600., FrictAngSphere = 30.*pi/180., NCohesionCohFrictMat = 4000, SCohesionCohFrictMat = 4000, intRadius=1.5, dtSafety=.8, damping=0.4, strainRateTension=.0005, strainRateCompression=.005, setSpeeds=True, # 1=tension, 2=compression (ANDed; 3=both) doModes=3, specimenLength=0.05, specimenRadius=0.1, sphereRadius=3.5e-3, # isotropic confinement (should be negative) isoPrestress=0. ) from yade.params.table import * if 'description' in O.tags.keys(): O.tags['id']=O.tags['id']+O.tags['description'] # make geom; the dimensions are hard-coded here; could be in param table if desired O.materials.append( CohFrictMat( young=young, frictionAngle=FrictAngSphere, poisson=poisson, density=densityCohFrictMat, normalCohesion=NCohesionCohFrictMat, shearCohesion=SCohesionCohFrictMat, fragile = True, label = 'concreteId')) sps=SpherePack() sp=pack.randomDensePack( pack.inCylinder( (0,0,-.5*specimenLength),(0,0,.5*specimenLength),specimenRadius), spheresInCell=2000,radius=sphereRadius, memoizeDb='/tmp/ triaxPackCache.sqlite',returnSpherePack=True) sp.toSimulation(material='concreteId') bb=uniaxialTestFeatures(axis = 2) negIds,posIds,axis,crossSectionArea=bb['negIds'],bb['posIds'],bb['axis'],bb['area'] O.dt=dtSafety*PWaveTimeStep() print 'Timestep',O.dt mm,mx=[pt[axis] for pt in aabbExtrema()] coord_25,coord_50,coord_75=mm+.25*(mx-mm),mm+.5*(mx-mm),mm+.75*(mx-mm) area_25,area_50,area_75=approxSectionArea(coord_25,axis),approxSectionArea(coord_50,axis),approxSectionArea(coord_75,axis) O.engines=[ ForceResetter(), InsertionSortCollider([Bo1_Sphere_Aabb(aabbEnlargeFactor=intRadius,label='is2aabb')],verletDist=.05*sphereRadius), InteractionLoop( [Ig2_Sphere_Sphere_ScGeom6D(interactionDetectionFactor=intRadius,label='ss2sc')], [Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(setCohesionNow=True)], [Law2_ScGeom6D_CohFrictPhys_CohesionMoment(useIncrementalForm = True, label='cohlaw')] ), NewtonIntegrator(damping=damping,label='damper'), UniaxialStrainer ( strainRate=strainRateTension,axis=axis,asymmetry=0, posIds=posIds,negIds=negIds, crossSectionArea=crossSectionArea,blockDisplacements=False,
Re: [Yade-users] [Question #630468]: CPMMat Stiffness formulation versus other cohesive laws
Question #630468 on Yade changed: https://answers.launchpad.net/yade/+question/630468 loiseaurare posted a new comment: Hi Robert, Thanks for the answer on the Aeq quantity, I suspected something like that but was unsure... Well, you've asked my second question, I also wonder why in the formulation of this contact law he chose to use the minimum of the two. Maybe the CPM mat was meant to be used for materials with an homogeneous size distribution in the particles ? Or to model granular material at a scale where particles do not represent material particles, and thus might not need a specific size distribution. Then the difference of radius between two given spheres could be neglected ? However, since in this formulation the li~ equals Aeq over li, I am right in assuming that the li distance corresponds to ri ? Cheers, Manon -- 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
[Yade-users] [Question #630468]: CPMMat Stiffness formulation versus other cohesive laws
New question #630468 on Yade: https://answers.launchpad.net/yade/+question/630468 Hi everybody, I have been browsing through the description of different cohesive contact laws, and I am now trying to understand the differences between JCFpmMat, CPMMat and cohFrictMat. My question is on the formulation on the contact normal stiffness Kn, I read in the JcfPMMat and CPMMat description that this is defined by the function kn = 2*EcRaRB/(Ra+Rb) Ec being the "Young modulus" parameter introduced in each of those contact laws, that actually does NOT define macroscopical youngs modulus. Ra and Rb being the radiuses of the two interacting particles. In Dr Smilauer thesis, this formulation is introduced in a more general way, stating that kn in the algorithm is computed with the formula : kn = k1k2/(K1 + K2) => kn = E1l1~*E2l2~/(E1l1~+E2l2~) . Assuming that E1 and E2 are the same between the two particles, this yields kn = E(l1~*l2~)/(l1~+l2~) It is then precised in the thesis that for 'The most used class computing interaction properties Ip2_FrictMat_FrictMat_FrictPhys uses ̃ l i~= 2ri. " I think that Cohfrictmat and JcfPMat also use this formulation, am I correct ? Then the concept of the equivalent cross section is introduced, as being another way to define the li~ length. "Some formulations define an equivalent cross-section A eq , which in that case appears in the li~ term as Ki = E i * l i~ = Ei Aeq/li . Such is the case for the concrete model (Ip2_CpmMat_CpmMat_CpmPhys) described later, where A eq = min(r 1 , r 2 ) " And that is where I get lost. I do not understand the dimension of this Aeq over li quantity. I think that in the way it is expressed here, it actually has no dimension, where it should have a m dimension ? If anybody can give a hint, I will appreciate ! Thanks in advance, Manon -- 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
Re: [Yade-users] [Question #266828]: How to reset the repulsive forces at the beginning of a compression test
Question #266828 on Yade changed: https://answers.launchpad.net/yade/+question/266828 loiseaurare posted a new comment: Well, Thanks Bruno and Jerome, I understood this issue. I am still working on understanding how Yade fully works. that's why I read archives ! Regards, -- 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
Re: [Yade-users] [Question #266828]: How to reset the repulsive forces at the beginning of a compression test
Question #266828 on Yade changed: https://answers.launchpad.net/yade/+question/266828 loiseaurare posted a new comment: Hi Jerome, I have been reading your comment on the introduction of an equilibrium distance using cohFrictMat. I am not sure I understood properly what you point out : my interrogation comes from reading this previous thread --> https://answers.launchpad.net/yade/+question/295035, where the problem of initial offset or undesired movements was not raised. I do not understand why there should be a problem in the first computational loop, is it not possible to loop over all interactions in order to set i.phys.unp = i.geom.penetrationDepht BEFORE entering the actual computation loop ? Or does Yade need to actually perform a first loop in order to set initial values of the simulation ? Plus, I was also reading the thread https://answers.launchpad.net/yade/+question/269724 discussing whether Yade would match the BPM model features, and you mentioned that in JCFpmMat, the initial distance between particles is automatically set as the equilibrium distance ? So there is no need to use the initD function in order to achieve a zero stress state for initial overlapping particles using that contact law ? Regards -- 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
Re: [Yade-users] [Question #629227]: TriaxialStressController does not compute
Question #629227 on Yade changed: https://answers.launchpad.net/yade/+question/629227 loiseaurare confirmed that the question is solved: Thanks Jérôme Duriez, that solved my question. -- 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
Re: [Yade-users] [Question #629227]: TriaxialStressController does not compute
Question #629227 on Yade changed: https://answers.launchpad.net/yade/+question/629227 Status: Answered => Solved loiseaurare confirmed that the question is solved: Hi Jerome, sorry about the error in the title, I've corrected it by now, so it is not misleading ! you were actually right, in my code the walls were appended after the spheres, so this was in some way related to my use of the clump function : in the original code the spheres are appended at the same time as the clump is created, and I had them appended before and clumped afterwards ! So the walls where not recognized as being part of the triax. Thanks a lot ! -- 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
Re: [Yade-users] [Question #629227]: TriaxialStressController does not compute
Question #629227 on Yade changed: https://answers.launchpad.net/yade/+question/629227 Summary changed to: TriaxialStressController does not compute Description changed to: Hi everybody, I'm having a bit of a trouble here with the TriaxialStressController. Sad thing is, I'm sure it is stupid, but I really can't get round the problem. I have adapted the agglomerate examples from github, in order to create a packed sample of agglomerates ( which it already did, but in three different simulations, and I wanted just one). I am having trouble with the compaction process, it seems like the triax would simply not work. I ran the simulation, and found the sample had'nt been packed. I have modifies the code in order that when I run the simulation, it will produce the agglomerates, and I could press run so that I see if anything is going wrong or happening. Well, seems that the walls don't move. I tried activating the walls, like in the triax example (scenery 2), but that didn't change much. Do you think maybe it is the clump function ? I haven't found that O.bodies.clump is much used, you can find much more on appendClumped, so I wondered if maybe the clump function did not fix particles in space or something... the code is there : # -*- coding: utf-8 -*- from yade import export from yade import export,ymport import random dim= (15,15,15) # dimensions for makeCloud radius = 1 fuzz = 0.2 # use of makeCloud function sp = pack.SpherePack() sp.makeCloud((0,0,0), dim, rMean=radius, rRelFuzz=fuzz, seed=1) random.seed(1) # to make colors always the same attrs = [] colors = [randomColor() for s in sp] # each macroparticle is filled randomDensePack for si,s in enumerate(sp): sphere = pack.inSphere(s[0],s[1]) sp1 = pack.randomDensePack( sphere, spheresInCell = 500, radius = .2, memoizeDb = '/tmp/agglomeratepackaux.db', returnSpherePack = True, ) ids = sp1.toSimulation(color=colors[si]) # add the result to simulation with uniform color for i in ids: O.bodies[i].agglomerate = si # tell each particle who is its agglomerate attrs.append(O.bodies[i].agglomerate) #random.seed(1) sp2 = [] for b in O.bodies : if isinstance(b.shape,Sphere): sp2.append(b) # add walls first dim = (15,15,15) walls = aabbWalls(((0,0,0),(dim))) wallIds = O.bodies.append(walls) # clump agglomerates n = max(a for a in attrs)+1 colors = [randomColor() for _ in xrange(n)] agglomerates = [[] for _ in xrange(n)] for s,a in zip(sp2,attrs): aa = a s.agglomerate = aa s.shape.color = colors[aa] agglomerates[aa].append(s.id) for g in agglomerates: O.bodies.clump(g) triax=TriaxialStressController( maxMultiplier=1.005, finalMaxMultiplier=1.002, thickness = 0, stressMask = 7, internalCompaction=False, ) triax.wall_bottom_activated=True triax.wall_top_activated=True triax.wall_left_activated=True triax.wall_right_activated=True triax.wall_back_activated=True triax.wall_front_activated=True O.engines = [ ForceResetter(), InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Box_Aabb()]), InteractionLoop( [Ig2_Sphere_Sphere_ScGeom(),Ig2_Box_Sphere_ScGeom()], [Ip2_FrictMat_FrictMat_FrictPhys()], [Law2_ScGeom_FrictPhys_CundallStrack()] ), triax, TriaxialStateRecorder(iterPeriod=100,file='WallStresses'), NewtonIntegrator(damping=.6), ] O.dt = PWaveTimeStep() O.usesTimeStepper=True # compress the sample triax.goal1 = triax.goal2 = triax.goal3 = -1e-7 #O.run(5,True) #triax.goal1 = triax.goal2 = triax.goal3 = -1e-5 #O.run(3,True) # save the result, including information of agglomerates which the particle belongs to export.textExt('/tmp/compressed.txt','x_y_z_r_attrs',attrs=['b.agglomerate']) try: from yade import qt qt.View() except: pass def getClumpInfo(): for b in O.bodies: if b.isClump: print 'Clump ',b.id,' has following members:' keys = b.shape.members.keys() for ii in range(0,len(keys)): print '- Body ',keys[ii] print 'inertia:',b.state.inertia print 'mass:',b.state.mass,'\n' else: print 'no clumps' Thanks in advance to anybody that can help ! -- 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
[Yade-users] [Question #629227]: TriaxialCompressionEngine does not compute
New question #629227 on Yade: https://answers.launchpad.net/yade/+question/629227 Hi everybody, I'm having a bit of a trouble here with the TriaxialCompressionEngine. Sad thing is, I'm sure it is stupid, but I really can't get round the problem. I have adapted the agglomerate examples from github, in order to create a packed sample of agglomerates ( which it already did, but in three different simulations, and I wanted just one). I am having trouble with the compaction process, it seems like the triax would simply not work. I ran the simulation, and found the sample had'nt been packed. I have modifies the code in order that when I run the simulation, it will produce the agglomerates, and I could press run so that I see if anything is going wrong or happening. Well, seems that the walls don't move. I tried activating the walls, like in the triax example (scenery 2), but that didn't change much. Do you think maybe it is the clump function ? I haven't found that O.bodies.clump is much used, you can find much more on appendClumped, so I wondered if maybe the clump function did not fix particles in space or something... the code is there : # -*- coding: utf-8 -*- from yade import export from yade import export,ymport import random dim= (15,15,15) # dimensions for makeCloud radius = 1 fuzz = 0.2 # use of makeCloud function sp = pack.SpherePack() sp.makeCloud((0,0,0), dim, rMean=radius, rRelFuzz=fuzz, seed=1) random.seed(1) # to make colors always the same attrs = [] colors = [randomColor() for s in sp] # each macroparticle is filled randomDensePack for si,s in enumerate(sp): sphere = pack.inSphere(s[0],s[1]) sp1 = pack.randomDensePack( sphere, spheresInCell = 500, radius = .2, memoizeDb = '/tmp/agglomeratepackaux.db', returnSpherePack = True, ) ids = sp1.toSimulation(color=colors[si]) # add the result to simulation with uniform color for i in ids: O.bodies[i].agglomerate = si # tell each particle who is its agglomerate attrs.append(O.bodies[i].agglomerate) #random.seed(1) sp2 = [] for b in O.bodies : if isinstance(b.shape,Sphere): sp2.append(b) # add walls first dim = (15,15,15) walls = aabbWalls(((0,0,0),(dim))) wallIds = O.bodies.append(walls) # clump agglomerates n = max(a for a in attrs)+1 colors = [randomColor() for _ in xrange(n)] agglomerates = [[] for _ in xrange(n)] for s,a in zip(sp2,attrs): aa = a s.agglomerate = aa s.shape.color = colors[aa] agglomerates[aa].append(s.id) for g in agglomerates: O.bodies.clump(g) triax=TriaxialStressController( maxMultiplier=1.005, finalMaxMultiplier=1.002, thickness = 0, stressMask = 7, internalCompaction=False, ) triax.wall_bottom_activated=True triax.wall_top_activated=True triax.wall_left_activated=True triax.wall_right_activated=True triax.wall_back_activated=True triax.wall_front_activated=True O.engines = [ ForceResetter(), InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Box_Aabb()]), InteractionLoop( [Ig2_Sphere_Sphere_ScGeom(),Ig2_Box_Sphere_ScGeom()], [Ip2_FrictMat_FrictMat_FrictPhys()], [Law2_ScGeom_FrictPhys_CundallStrack()] ), triax, TriaxialStateRecorder(iterPeriod=100,file='WallStresses'), NewtonIntegrator(damping=.6), ] O.dt = PWaveTimeStep() O.usesTimeStepper=True # compress the sample triax.goal1 = triax.goal2 = triax.goal3 = -1e-7 #O.run(5,True) #triax.goal1 = triax.goal2 = triax.goal3 = -1e-5 #O.run(3,True) # save the result, including information of agglomerates which the particle belongs to export.textExt('/tmp/compressed.txt','x_y_z_r_attrs',attrs=['b.agglomerate']) try: from yade import qt qt.View() except: pass def getClumpInfo(): for b in O.bodies: if b.isClump: print 'Clump ',b.id,' has following members:' keys = b.shape.members.keys() for ii in range(0,len(keys)): print '- Body ',keys[ii] print 'inertia:',b.state.inertia print 'mass:',b.state.mass,'\n' else: print 'no clumps' Thanks in advance to anybody that can help ! -- 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
Re: [Yade-users] [Question #628595]: Problem creating clumps from existing spheres
Question #628595 on Yade changed: https://answers.launchpad.net/yade/+question/628595 Status: Answered => Solved loiseaurare confirmed that the question is solved: Hi christian, thanks for your answer ! However, I thought I was trying to append a list of object, because that is what is stores in each occurence of the agglomerates list, as defined here : # clump agglomerates n = max(a for a in attrs) -- > numbers af agglomerates colors = [randomColor() for _ in xrange(n)] agglomerates = [[] for _ in xrange(n)] ---> create a list af list with n occurences for s,a in zip(sp2,attrs): > here sp2 is a list of bodies aa = a s.agglomerate = aa s.shape.color = colors[aa] agglomerates[aa].append(s) ---> so it's bodies that are appended in each of the agglomerates lists. Anyway, I actually think I solved my problem. I was explained that actually the function appendClumped appends the bodies that are given as a list, whereas the bodies I wanted to clump where already appended in the simulation ( with the sphereToSimulation function ). So I used the clump function, which however does not take a list of BODIES, like appendClumped, but a list of IDS of bodies. I didn't get that while reading the documentation, I thought the two functions used the same args, so I didn't succeed in using clump at first. -- 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
[Yade-users] [Question #628595]: Problem creating clumps from existing spheres
New question #628595 on Yade: https://answers.launchpad.net/yade/+question/628595 Hi everybody, I have been using the agglomerate examples that can be found in the docs from yadedaily, in order to generate a packed sample of clumped particles. In the example this was done in three scripts (Makecloud, divide and compress) , creating at the end of each file a temporary file that was reloaded in the subsequent simulation. I figured that I would like to have those three scripts all in one go, in order to launch this simulation, have the package and then save it to be used in other simulations. But I am having trouble when it comes to actually clump assemblies of particle. The strange thing is I haven't been changing much of the existing code ! The code creates a list of groups of spheres, which are to be later on assembled in a clump. So the spheres are added one after another, based on their agglomerate number, that has been set previously by creating an initial sphere pack, and then packing in each of the spheres another sphere pack. So the agglomerate number would be the id of the initials bigger spheres, I guess. Once they are all stored in the same occurence of the list, each element of the list ( that is, each group of spheres), is called in order to be clumped. and then I get this error : Traceback (most recent call last): File "/usr/bin/yadedaily", line 182, in runScript execfile(script,globals()) File "agglomerate.py", line 74, in O.bodies.appendClumped(g) IndexError: Body already has id 0 set; appending such body (for the second time) is not allowed. I am not sure what this means, but it seems like the program is trying to append the spheres once again, when they are already in the simulation. But that results strange to me, since I thought the appendClumped function could work with existing spheres.. Here is the full script : # -*- coding: utf-8 -*- from yade import export from yade import export,ymport import random def getClumpInfo(): for b in O.bodies: if b.isClump: print 'Clump ',b.id,' has following members:' keys = b.shape.members.keys() for ii in range(0,len(keys)): print '- Body ',keys[ii] print 'inertia:',b.state.inertia print 'mass:',b.state.mass,'\n' else: print 'no clumps' dim= (15,15,15) # dimensions for makeCloud radius = 1 fuzz = 0.2 # use of makeCloud function sp = pack.SpherePack() sp.makeCloud((0,0,0), dim, rMean=radius, rRelFuzz=fuzz, seed=1) random.seed(1) # to make colors always the same attrs = [] colors = [randomColor() for s in sp] # each macroparticle is filled randomDensePack for si,s in enumerate(sp): sphere = pack.inSphere(s[0],s[1]) sp1 = pack.randomDensePack( sphere, spheresInCell = 500, radius = .2, memoizeDb = '/tmp/agglomeratepackaux.db', returnSpherePack = True, ) ids = sp1.toSimulation(color=colors[si]) # add the result to simulation with uniform color for i in ids: O.bodies[i].agglomerate = si # tell each particle who is its agglomerate attrs.append(O.bodies[i].agglomerate) #random.seed(1) sp2 = [] for b in O.bodies : sp2.append(b) # add walls first dim = (15,15,15) walls = aabbWalls(((0,0,0),(dim))) wallIds = O.bodies.append(walls) # clump agglomerates n = max(a for a in attrs)+1 colors = [randomColor() for _ in xrange(n)] agglomerates = [[] for _ in xrange(n)] for s,a in zip(sp2,attrs): aa = a s.agglomerate = aa s.shape.color = colors[aa] agglomerates[aa].append(s) for g in agglomerates: O.bodies.appendClumped(g) O.engines = [ ForceResetter(), InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Box_Aabb()]), InteractionLoop( [Ig2_Sphere_Sphere_ScGeom(),Ig2_Box_Sphere_ScGeom()], [Ip2_FrictMat_FrictMat_FrictPhys()], [Law2_ScGeom_FrictPhys_CundallStrack()] ), TriaxialStressController( thickness = 0, stressMask = 7, internalCompaction = False, label = 'compressor', ), NewtonIntegrator(damping=.6), ] O.dt = PWaveTimeStep() # compress the sample compressor.goal1 = compressor.goal2 = compressor.goal3 = -1e-7 O.run(5,True) compressor.goal1 = compressor.goal2 = compressor.goal3 = -1e-5 O.run(3,True) # save the result, including information of agglomerates which the particle belongs to export.textExt('/tmp/compressed.txt','x_y_z_r_attrs',attrs=['b.agglomerate']) try: from yade import qt qt.View() except: pass Welle, if anybody has an idea, it would be of great help ! -- You received this
Re: [Yade-users] [Question #515400]: Introduction of defects
Question #515400 on Yade changed: https://answers.launchpad.net/yade/+question/515400 loiseaurare posted a new comment: Hi Luc Scholtès, Thanks for the advice, actually I am aware that this class exists, however at the moment I am still trying to understand the functioning of YADE and DEM. I will come to that later ! -- 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
Re: [Yade-users] [Question #515400]: Introduction of defects
Question #515400 on Yade changed: https://answers.launchpad.net/yade/+question/515400 loiseaurare confirmed that the question is solved: Thanks Jan Stránský, that solved my question. -- 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
Re: [Yade-users] [Question #515400]: Introduction of defects
Question #515400 on Yade changed: https://answers.launchpad.net/yade/+question/515400 Status: Answered => Solved loiseaurare confirmed that the question is solved: Thanks Jan Stransky, that solved my question ! -- 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
[Yade-users] [Question #515400]: Introduction of defects
New question #515400 on Yade: https://answers.launchpad.net/yade/+question/515400 Hi everybody, I am new to Yade, and I am trying to model the fragmentation of a very simple sample. Up to now I have managed to create the sample, and make it fall on a plate. I would like to complexify this model and introduce a serie of defects in the bonds of the material. Initially I thought working directly on the interaction would be a good idea, but then searching trough the launchpad, I found out that apparently it was possible to add forces directly in the force container. However Yade seems to say it is not possible to iterate on the force container. Does anybody have an idea of how to deal with that ? Here is my script : from yade import pack # INPUTS # Geometry LxBox = 0.1 LyBox = 0.1 LzBox = 0.1 LzImp = 0.3 RadSphere = 0.02 WallPos = -LzBox WallAxis = (0.,0.,1.) # Material EyCohFrictMat = 1e7 poissonCohFrictMat = 0.25 densityCohFrictMat = 2600. FrictAngSphere = 30.*pi/180. NCohesionCohFrictMat = 6.5e4 SCohesionCohFrictMat = 6.5e4 EyFrictMat = 1e7 poissonFrictMat = 0.25 densityFrictMat = 2600. FrictAngWall = 30.*pi/180. # Calculation damp=0.5 gz=-9.81 " # SIMULATION BEGINNING - SIMULATION BEGINNING - SIMULATION BEGINNING ## CREATE MATERIAL - CREATE MATERIAL - CREATE MATERIAL O.materials.append( CohFrictMat( young = EyCohFrictMat, poisson= poissonCohFrictMat, density= densityCohFrictMat , frictionAngle = FrictAngSphere, normalCohesion = NCohesionCohFrictMat , shearCohesion = SCohesionCohFrictMat , momentRotationLaw=False, etaRoll=0.1, isCohesive =True, label='MatSpheres')) O.materials.append( FrictMat( young = EyFrictMat, poisson= poissonFrictMat, frictionAngle=FrictAngWall, density= densityFrictMat , label='MatFrictWalls')) ## CREATE SPHERES - CREATE SPHERES - CREATE SPHERES - pred=pack.inAlignedBox((0.,0.,0.),(LxBox,LyBox,LzBox)) block=pack.randomDensePack(pred,radius=0.005, material = 'MatSpheres', rRelFuzz=0.3,spheresInCell=200,color=(1,0,1), returnSpherePack = False) O.bodies.append(block) ### Create BOX - Create BOX - Create BOX (Changer ) O.bodies.append(utils.box(center=(0.,0.,-LzImp),extents=(25*LxBox,25*LyBox,0.01*LxBox),material='MatFrictWalls',fixed=True)) #O.bodies.append( à tester sur un autre script ) #utils.wall( #position=WallPos, #axis=WallAxis, #sense=0, #color=(10, 25, 51), #material='MatFricWalls' #)) ## CALCULATION - CALCULATION - CALCULATION newton=NewtonIntegrator(damping=damp) newton.gravity=(0,0,gz) def introduceDefects () : print O.iter for f in O.forces : f.addF((-1,0,0)) O.engines=[ #introduceDefects(), ForceResetter(), InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Box_Aabb()]), InteractionLoop( #Il faut rentrer toutes les lois pour tout les types de matériau [Ig2_Sphere_Sphere_ScGeom6D(),Ig2_Box_Sphere_ScGeom()], [Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(setCohesionNow=True), Ip2_FrictMat_FrictMat_FrictPhys()], [Law2_ScGeom6D_CohFrictPhys_CohesionMoment(useIncrementalForm = True, label='cohlaw'), Law2_ScGeom_FrictPhys_CundallStrack()] ), #GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=1,timestepSafetyCoefficient=0.2, defaultDt=4*PWaveTimeStep()), NewtonIntegrator(gravity=(0,0,gz),damping=damp), ] O.dt = 1e-4 ## DISPLAY CONTROLLERS - DISPLAY CONTROLLERS - DISPLAY CONTROLLERS yade.qt.Controller(), yade.qt.View() ## CHECK - CHECK - CHECK O.step() print 'maxOverlap', max(i.geom.penetrationDepth for i in O.interactions) print 'maxNormalForce', max(i.phys.normalForce.norm for i in O.interactions) print 'maxShearForce', max(i.phys.shearForce.norm for i in O.interactions) O.run(1000,True) print 'maxOverlap', max(i.geom.penetrationDepth for i in O.interactions) print 'maxNormalForce', max(i.phys.normalForce.norm for i in O.interactions) print 'maxShearForce', max(i.phys.shearForce.norm for i in O.interactions) from yade import export export.text("bloc.txt") Cheers -- 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