yade-users team mailing list archive
-
yade-users team
-
Mailing list archive
-
Message #25684
Re: [Question #697379]: Optimise material parameter
Question #697379 on Yade changed:
https://answers.launchpad.net/yade/+question/697379
Mithushan Soundaranathan posted a new comment:
Hi Jan,
I tried with simpler code, where I just update my parameter for each run. Where increase k1 with same value for each run.
It still doesn't go through the loop. i goes right upto 79.
Here is the code:
#!/usr/bin/env python
#encoding: ascii
# Testing of the Deformation Enginge with Luding Contact Law
# Modified Oedometric Test
# The reference paper [Haustein2017]
from __future__ import print_function
from yade import utils, plot, timing
from yade import pack
import pandas as pd
import numpy as np
from PIL import Image
from yade import pack, export
from scipy.interpolate import interp1d
o = Omega()
# Physical parameters
fr = 0.54
rho = 1550
Diameter = 0.0012
D=Diameter
r1 = Diameter/2
#r2 = Diameter/2
k1 = 50000
kp = 2.0*k1
kc = k1 * 0.1
ks = k1 * 0.1
DeltaPMax = Diameter/3.0
Chi1 = 0.34
o.dt = 1.0e-7
particleMass = 4.0/3.0*math.pi*r1*r1*r1*rho
Vi1 = math.sqrt(k1/particleMass)*DeltaPMax*Chi1
PhiF1=0.999
#PhiF1 = DeltaPMax*(kp-k1)*(r1+r2)/(kp*2*r1*r2)
Tab_rad=0.005
Cyl_height=0.045
cross_area=math.pi*(Tab_rad**2)
n_iter=80
RMSE_save=[]
#*************************************
for i in range (0,n_iter,1):
o.reset()
# Add material
mat1 = O.materials.append(LudingMat(frictionAngle=fr, density=rho, k1=k1, kp=kp, ks=ks, kc=kc, PhiF=PhiF1, G0 = 0.0))
# Spheres for compression
sp=pack.SpherePack()
sp.makeCloud((-3.0*Diameter,-3.0*Diameter,-18*Diameter),(3.0*Diameter,3.0*Diameter,18.0*Diameter), rMean=Diameter/2.0,rRelFuzz=0.18,num=527)
sp.toSimulation(material=mat1)
walls=O.bodies.append(yade.geom.facetCylinder((0,0,0),radius=Tab_rad,height=Cyl_height,segmentsNumber=20,wallMask=6,material=mat1))
# Add engines
o.engines = [
ForceResetter(),
InsertionSortCollider([Bo1_Sphere_Aabb(aabbEnlargeFactor=1.05),
Bo1_Wall_Aabb(),
Bo1_Facet_Aabb()
]),
InteractionLoop(
[Ig2_Sphere_Sphere_ScGeom(interactionDetectionFactor=1.05),
Ig2_Facet_Sphere_ScGeom(),
Ig2_Wall_Sphere_ScGeom()],
[Ip2_LudingMat_LudingMat_LudingPhys()],
[Law2_ScGeom_LudingPhys_Basic()]
),
NewtonIntegrator(damping=0.1, gravity=[0, 0, -9.81]),
PyRunner(command='checkForce()', realPeriod=1, label="fCheck"),
#DeformControl(label="DefControl")
]
def checkForce():
if O.iter < 10000:
return
highSphere = 0.0
for b in O.bodies:
if highSphere < b.state.pos[2] and isinstance(b.shape, Sphere):
highSphere = b.state.pos[2]
else:
pass
O.bodies.append(wall(highSphere+0.5*Diameter, axis=2, sense=-1, material=mat1))
global plate
plate = O.bodies[-1]
plate.state.vel = (0, 0, -10)
#O.engines = O.engines + [PyRunner(command='checkdata()', iterPeriod=1500)]
fCheck.command = 'unloadPlate()'
def unloadPlate():
if abs(O.forces.f(plate.id)[2]) > Comp_force:
plate.state.vel *= -1
fCheck.command = 'stopUnloading()'
def stopUnloading():
if abs(O.forces.f(plate.id)[2]) == 0:
o.wait()
global k1
global kp
RMSE_data=[i,k1,kp]
RMSE_save.append(RMSE_data)
k1=k1+5000
kp=i*k1
kc=0.1*k1
ks=0.1*k1
--
You received this question notification because your team yade-users is
an answer contact for Yade.