Re: [Yade-users] [Question #706765]: Batch file question
Question #706765 on Yade changed: https://answers.launchpad.net/yade/+question/706765 Status: Open => Answered Jan Stránský proposed the following answer: > readParamsFromTable(rMean=rMean, rRelFuzz=rRelFuzz,num=num, maxLoad=1e3, > minLoad=1e2) > NameError: name 'rMean' is not defined Please provide a complete script. But as the error says, rMean is not defined. I.e. the variable rMean is first used at this line, but there is nothing about it before in the script. I guess similar situation would be with rRelFuzz and num. You have to either use a literal value: ### readParamsFromTable(rMean=123,...) ### or use defined variable, e.g.: ### rMean = 123 readParamsFromTable(rMean=rMean,...) from yade.params.table import * ### but then rMean value is that from readParamsFromTable and the first line does not make sense.. e.g. ### rMean = 123 readParamsFromTable(rMean=234,...) from yade.params.table import * print(rMean) # 234 ### The way I used to use it is: ### readParamsFromTable( # default values rMean = 123, ... ) from yade.params.table import * ### now you can use rMean variable (imported from yade.params.table) which is either the value given from table in batch run or the specified default value in case of plain yade run or if the value in table is not given. > If I understand correctly, I assume that since I print the value in the stopUnloading part if it run properly it would print the porosity into the log files Yes Cheers Jan -- 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 #706765]: Batch file question
Question #706765 on Yade changed: https://answers.launchpad.net/yade/+question/706765 Status: Answered => Open Huan is still having a problem: Ah the slash was the problem. So, I modify the table to: ### oedometric.table rMean rRelFuzz num maxLoad minLoad 0.007875 0.2063 13 1e3 1e2 0.0055 0.1364 51 1e3 1e2 0.0035625 0. 563 1e3 1e2 0.0017775 0.3361 5101 1e3 1e2 0.85 0. 18369 1e3 1e2 0.295 0 950584 1e3 1e2 0.075 0 4003898 1e3 1e2 ### the log files are built correctly, but I get this error in the log files: >readParamsFromTable(rMean=rMean, rRelFuzz=rRelFuzz,num=num, maxLoad=1e3, >minLoad=1e2) >NameError: name 'rMean' is not defined I did a typo and I did fix the spacing part If I understand correctly, I assume that since I print the value in the stopUnloading part if it run properly it would print the porosity into the log files -- 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 #706765]: Batch file question
Question #706765 on Yade changed: https://answers.launchpad.net/yade/+question/706765 Status: Open => Answered Jan Stránský proposed the following answer: > (0.0125+0.019)/4 (0.019-0.0125)/4/(0.0125+0.019)/4 13 1e3 > FileNotFoundError: [Errno 2] No such file or directory: > 'cm2b.py.rMean=(0.00118+0.00236)/4,rRelFuzz=(0.00236-0.00118)/4/(0.00118+0.00236)/4,Num=18369,maxLoad=1e6.log' Do not use slash "/" (linux path separator) in table file. Log files are named after values, therefore pointing to non-existent file location. instead of /4 use *0.25 Alternatively use "description" column to name the log files [1] > 0.0003/4 0 40038981e3 are you sure with this last one? Shouldn't there be a space before 1e3? > But if I do batch would I still get the value of porosity? Yes, porosity will be computed in each run. If you print it, it will be recorded in the log file. Another option is to save the values to a different file. Cheers Jan [1] https://yade-dem.org/doc/user.html#batch-queuing-and-execution-yade- batch -- 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 #706765]: Batch file question
Question #706765 on Yade changed: https://answers.launchpad.net/yade/+question/706765 Status: Answered => Open Huan is still having a problem: Hi, I tried your example and it created 4 log file. But I try to do mine by creating a oedometric.table with the following: ### oedometric.table rMean rRelFuzz Num maxLoad (0.0125+0.019)/4 (0.019-0.0125)/4/(0.0125+0.019)/4 13 1e3 (0.0095+0.0125)/4 (0.0125-0.0095)/4/(0.0095+0.0125)/4 51 1e3 (0.00475+0.0095)/4 (0.0095-0.00475)/4/(0.00475+0.0095)/4 563 1e3 (0.00236+0.00475)/4 (0.00475-0.00236)/4/(0.00236+0.00475)/4 5101 1e3 (0.00118+0.00236)/4 (0.00236-0.00118)/4/(0.00118+0.00236)/4 18369 1e3 0.00118/4 0 950584 1e3 0.0003/4 0 40038981e3 ### for the following code name cm2b.py: import random import math from yade import geom, pack, utils, plot, ymport # load parameters from file if run in batch # default values are used if not run from batch readParamsFromTable(rMean=rMean, rRelFuzz=rRelFuzz,num=Num maxLoad=1e3, minLoad=1e2) # make rMean, rRelFuzz, maxLoad accessible directly as variables later from yade.params.table import * print(rMean, rRelFuzz, Num, maxLoad) # Define material properties youngModulus = 1e7 poissonRatio = 0.25 density = 2700 frictionAngle =0.7 # Create material material = O.materials.append(FrictMat(young=youngModulus, poisson=poissonRatio, density=density)) material1 = O.materials.append(FrictMat(young=youngModulus, poisson=poissonRatio, density=density, frictionAngle=frictionAngle)) # Define cylinder with funnel parameters center = (0, 0, 0) diameter = 0.102 height = 0.18 # create cylindrical body with radius 0.102 m and height 0.064 m cylinder = geom.facetCylinder(center=center, radius=diameter/2, height=height, segmentsNumber=80, wallMask=6) # assign material to each body in the cylinder for body in cylinder: body.bodyMat = material # add cylinder to simulation O.bodies.append(cylinder) # Define cylinder with funnel parameters center1 = (0,0,height/2) dBunker = 0.4 dOutput = 0.102 hBunker = 0 hOutput = 0.15 hPipe = 0 # create funnel as a bunker with diameter 0.102 m, height 0.064 m funnel = geom.facetBunker(center=center1, dBunker=dBunker, dOutput=dOutput, hBunker=hBunker,hOutput=hOutput, hPipe=hPipe, segmentsNumber=80, wallMask=4) # assign material to each body in the funnel for body in funnel: body.bodyMat = material # add funnel to simulation O.bodies.append(funnel) #create empty sphere packing sp = pack.SpherePack() # generate randomly sphere sp.makeCloud((-dBunker/4,-dBunker/4,1.3*height),(dBunker/4,dBunker/4,2*height), rMean = rMean, rRelFuzz = rRelFuzz, num = num) # add the sphere pack to the simulation sp.toSimulation(material = material1) O.engines = [ ForceResetter(), # sphere, facet, wall InsertionSortCollider([Bo1_Sphere_Aabb(), Bo1_Facet_Aabb(), Bo1_Wall_Aabb()]), InteractionLoop( # the loading plate is a wall, we need to handle sphere+sphere, sphere+facet, sphere+wall [Ig2_Sphere_Sphere_ScGeom(), Ig2_Facet_Sphere_ScGeom(), Ig2_Wall_Sphere_ScGeom()], [Ip2_FrictMat_FrictMat_FrictPhys()], [Law2_ScGeom_FrictPhys_CundallStrack()] ), NewtonIntegrator(gravity=(0, 0, -1000), damping=0.3), # the label creates an automatic variable referring to this engine # we use it below to change its attributes from the functions called PyRunner(command='checkUnbalanced()', realPeriod=2, label='checker'), ] O.dt = PWaveTimeStep() # enable energy tracking; any simulation parts supporting it # can create and update arbitrary energy types, which can be # accessed as O.rMean rRelFuzz maxLoadenergy['energyName'] subsequently O.trackEnergy = True # the following checkUnbalanced, unloadPlate and stopUnloading functions are all called by the 'checker' # (the last engine) one after another; this sequence defines progression of different stages of the # simulation, as each of the functions, when the condition is satisfied, updates 'checker' to call # the next function when it is run from within the simulation next time # check whether the gravity deposition has already finished # if so, add wall on the top of the packing and start the oedometric test def checkUnbalanced(): # at the very start, unbalanced force can be low as there is only few contacts, but it does not mean the packing is stable if O.iter < 25000: return # add plate at the position on the top of the packing # the maximum finds the z-coordinate of the top of the topmost particle O.bodies.append(wall(max([b.state.pos[2] + b.shape.radius for b in O.bodies if isinstance(b.shape, Sphere)]), axis=2, sense=-1)) global plate # without this line, the plate variable would only exist inside this function plate = O.bodies[-1] # the last particles is the plate # Wall objects are "fixed" by default, i.e. not subject to forces # prescribing a
Re: [Yade-users] [Question #706765]: Batch file question
Question #706765 on Yade changed: https://answers.launchpad.net/yade/+question/706765 Status: Open => Answered Jan Stránský proposed the following answer: Hello, see also [1] > Does using batch file mean I can divide the simulation into 2 parts? No. Batch run in Yade context means that you run the same script multiple times with given (usually varying) parameters. E.g. you could run your simulation with varying value of gravity (artificial example) with values 9.81, 20, 100 and 500. Batch run can be run all jobs sequentially or all jobs in parallel or a combination of both. The main advantage is simplicity of the setting. > I'm couldn't understand what exactly is readParamsFromTable(damping =.2) readParamsFromTable reads parameters from table if given, otherwise it uses default value (damping=0.2 in this case) For the gravity example above, you can create the "grav.table" file: ### grav.table gravity 9.81 20 100 500 ### ### script.py readParamsFromTable( gravity = 9.81, ) from yade.params.table import * print(gravity) ### and then run it as yade-batch grav.table script.py Cheers Jan [1] https://yade-dem.org/doc/user.html#batch-queuing-and-execution-yade- batch -- 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 #706765]: Batch file question
New question #706765 on Yade: https://answers.launchpad.net/yade/+question/706765 Hello, Since my particles is almost 5 million, so my professor suggest that I use batch file to run it. But, when I read the file of Setting up a simulation from this "https://yade-dem.org/doc/tutorial-geo.html?highlight=batch.; I'm couldn't understand what exactly is readParamsFromTable(damping =.2) and where should I create it. ##This is my code## import random import math from yade import geom, pack, utils, plot, ymport # Define material properties youngModulus = 1e7 poissonRatio = 0.25 density = 2700 frictionAngle =0.7 # Create material material = O.materials.append(FrictMat(young=youngModulus, poisson=poissonRatio, density=density)) material1 = O.materials.append(FrictMat(young=youngModulus, poisson=poissonRatio, density=density, frictionAngle=frictionAngle)) # Define cylinder with funnel parameters center = (0, 0, 0) diameter = 0.102 height = 0.18 # create cylindrical body with radius 0.102 m and height 0.064 m cylinder = geom.facetCylinder(center=center, radius=diameter/2, height=height, segmentsNumber=80, wallMask=6) # assign material to each body in the cylinder for body in cylinder: body.bodyMat = material # add cylinder to simulation O.bodies.append(cylinder) # Define cylinder with funnel parameters center1 = (0,0,height/2) dBunker = 0.4 dOutput = 0.102 hBunker = 0 hOutput = 0.15 hPipe = 0 # create funnel as a bunker with diameter 0.102 m, height 0.064 m funnel = geom.facetBunker(center=center1, dBunker=dBunker, dOutput=dOutput, hBunker=hBunker,hOutput=hOutput, hPipe=hPipe, segmentsNumber=80, wallMask=4) # assign material to each body in the funnel for body in funnel: body.bodyMat = material # add funnel to simulation O.bodies.append(funnel) # define sphere parameters and number of spheres rMean1 = (0.0125+0.019)/4 rRelFuzz1 = (0.019-0.0125)/4/rMean1 num1 = 13 rMean2 = (0.0095+0.0125)/4 rRelFuzz2 = (0.0125-0.0095)/4/rMean2 num2 = 51 rMean3 = (0.00475+0.0095)/4 rRelFuzz3 = (0.0095-0.00475)/4/rMean3 num3 = 563 rMean4 = (0.00236+0.00475)/4 rRelFuzz4 = (0.00475-0.00236)/4/rMean4 num4 = 5101 rMean5 = (0.00118+0.00236)/4 rRelFuzz5 = (0.00236-0.00118)/4/rMean4 num5 = 18369 rMean6 = 0.00118/4 num6 = 950584 rMean7 = 0.0003/4 num7 = 4003898 #create empty sphere packing sp = pack.SpherePack() # generate randomly sphere sp.makeCloud((-dBunker/4,-dBunker/4,1.3*height),(dBunker/4,dBunker/4,2*height), rMean = rMean1, rRelFuzz = rRelFuzz1, num = num1) sp.makeCloud((-dBunker/4,-dBunker/4,1.3*height),(dBunker/4,dBunker/4,2*height), rMean = rMean2, rRelFuzz = rRelFuzz2, num = num2) sp.makeCloud((-dBunker/4,-dBunker/4,1.3*height),(dBunker/4,dBunker/4,2*height), rMean = rMean3, rRelFuzz = rRelFuzz3, num = num3) sp.makeCloud((-dBunker/4,-dBunker/4,1.3*height),(dBunker/4,dBunker/4,2*height), rMean = rMean4, rRelFuzz = rRelFuzz4, num = num4) sp.makeCloud((-dBunker/4,-dBunker/4,1.3*height),(dBunker/4,dBunker/4,2*height), rMean = rMean5, rRelFuzz = rRelFuzz5, num = num5) sp.makeCloud((-dBunker/4,-dBunker/4,1.3*height),(dBunker/4,dBunker/4,2*height), rMean = rMean6, num = num6) sp.makeCloud((-dBunker/4,-dBunker/4,1.3*height),(dBunker/4,dBunker/4,2*height), rMean = rMean7, num = num7) # add the sphere pack to the simulation sp.toSimulation(material = material1) for body in O.bodies: if not isinstance(body.shape, Sphere): continue if body.shape.radius >= rMean1 : body.shape.color = (0,0,1) #blue if body.shape.radius <= rMean1 and body.shape.radius > rMean2: body.shape.color = (0,0,1) #blue if body.shape.radius <= rMean2 and body.shape.radius > rMean3: body.shape.color = (1,0,0) #red if body.shape.radius <= rMean3 and body.shape.radius > rMean4: body.shape.color = (0,1,0) #green if body.shape.radius <= rMean4 and body.shape.radius > rMean5: body.shape.color = (1,1,0) #yellow if body.shape.radius <= rMean5 : body.shape.color = (1,0,1) #magenta if body.shape.radius <= rMean6 : body.shape.color = (1,1,1) #white if body.shape.radius <= rMean7 : body.shape.color = (0,0,0) #black O.engines = [ ForceResetter(), # sphere, facet, wall InsertionSortCollider([Bo1_Sphere_Aabb(), Bo1_Facet_Aabb(), Bo1_Wall_Aabb()]), InteractionLoop( # the loading plate is a wall, we need to handle sphere+sphere, sphere+facet, sphere+wall [Ig2_Sphere_Sphere_ScGeom(), Ig2_Facet_Sphere_ScGeom(), Ig2_Wall_Sphere_ScGeom()], [Ip2_FrictMat_FrictMat_FrictPhys()], [Law2_ScGeom_FrictPhys_CundallStrack()] ), NewtonIntegrator(gravity=(0, 0, -1000), damping=0.3), # the label creates an automatic variable referring to this engine # we use it below to change its attributes from the functions called PyRunner(command='checkUnbalanced()', realPeriod=2, label='checker'), ] O.dt = PWaveTimeStep() # enable energy