how to change the properties of the material on the boundary conditions
Hello,
I'm using the uniax.py [1] example to perform some tensile simulation with minor modifications and I would like to ask how to change the material proprietaries only on the boundary layers (i.e on posIds and negIds)? I want to make the Poisson ratio there equal to zero to avoid any deformation.
here is my code:
# -*- encoding=utf-8 -*-
from __future__ import division
from __future__ import print_function
from future import standard_library
standard_
from yade import plot,pack,timing
import time, sys, os, copy
#import matplotlib
#matplotlib.
#matplotlib.
# default parameters or from table
readParamsFromT
young=24e9,
poisson=.2,
sigmaT=3.5e6,
frictionAngle=
epsCrackOnset=
relDuctility=30,
intRadius=1.5,
dtSafety=.8,
damping=0.4,
strainRateTens
strainRateComp
setSpeeds=True,
# 1=tension, 2=compression (ANDed; 3=both)
doModes=1,
specimenLength
sphereRadius=
# isotropic confinement (should be negative)
isoPrestress=0,
)
from yade.params.table import *
if 'description' in list(O.
# make geom; the dimensions are hard-coded here; could be in param table if desired
# z-oriented hyperboloid, length 20cm, diameter 10cm, skirt 8cm
# using spheres 7mm of diameter
concreteId=
sps=SpherePack()
#sp=pack.
sp=pack.
sp.toSimulation
bb=uniaxialTest
negIds,
O.dt=dtSafety*
print('
mm,mx=[pt[axis] for pt in aabbExtrema()]
coord_25,
area_25,
O.engines=[
ForceResetter(),
InsertionSortC
InteractionLoop(
[Ig2_
[Ip2_
[Law2_
),
NewtonIntegrat
CpmStateUpdate
UniaxialStrain
PyRunner(
PyRunner(
]
#O.miscParams=
# plot stresses in ¼, ½ and ¾ if desired as well; too crowded in the graph that includes confinement, though
plot.plots=
O.saveTmp(
O.timingEnabled
global mode
mode='tension' if doModes & 1 else 'compression'
def initTest():
global mode
print("init")
if O.iter>0:
O.wait();
O.loadTmp(
print("Reversing plot data"); plot.reverseData()
else: plot.plot(
strainer.
try:
from yade import qt
renderer=
renderer.
except ImportError: pass
print("init done, will now run.")
O.step(); # to create initial contacts
# now reset the interaction radius and go ahead
ss2sc.
is2aabb.
O.run()
def stopIfDamaged():
global mode
if O.iter<2 or 'sigma' not in plot.data: return # do nothing at the very beginning
sigma,
extremum=
minMaxRatio=0.5 if mode=='tension' else 0.5
if extremum==0: return
import sys; sys.stdout.flush()
if abs(sigma[
if mode=='tension' and doModes & 2: # only if compression is enabled
mode=
O.save(
print("Saved /tmp/uniax-
print("Damaged, switching to compression... "); O.pause()
# important! initTest must be launched in a separate thread;
# otherwise O.load would wait for the iteration to finish,
# but it would wait for initTest to return and deadlock would result
import _thread; _thread.
return
else:
print("Damaged, stopping.")
ft,fc=
if doModes==3:
print(
if doModes==2:
print(
if doModes==1:
print('Tensile strength ft=%g'%(abs(ft)))
title=
print(
print('Bye.')
O.pause()
#sys.exit(0) # results in some threading exception
def addPlotData():
yade.plot.
'sigma.
'sigma.
'sigma.
})
plot.plot(
#O.run()
initTest()
waitIfBatch()
Best regards,
Mahmoud
[1] https:/
Question information
- Language:
- English Edit question
- Status:
- Answered
- For:
- Yade Edit question
- Assignee:
- No assignee Edit question
- Last query:
- Last reply:
Can you help with this problem?
Provide an answer of your own, or ask Mahmoud Ashour for more information if necessary.