How to make the boundaries flexible?
Hello all,
I am using Ubuntu 18.04, and Yade 2019-08-
I developed a Triaxial test based on [1] in the following form. This code is working with rigid walls/boundaries which move in the "deviatoric" part of the test and this leads to the deformation of the specimen. In this case, I will not be able to capture the shear band and localization. To do so, I need to define the walls/boundaries as the deformable/flexible boundaries. In fact, I should not let the boundaries to move, but I should let them be deformed based on their flexibility. My question is that what do I need to do to make these rigid walls to flexible boundaries?
[1] https:/
My code:
print ('************** START **************')
import numpy as np
import time
import datetime, os
start_time=
from datetime import datetime
import math
from yade import qt, export, utils
from yade import pack
#######
######### DEFINING VARIABLES #########
nRead=readParam
num_spheres=20000,
compFricDegree = 29,
key='_triax_',
unknownOk=True
)
from yade.params import table
num_spheres=
key=table.key
targetPorosity = 0.4
compFricDegree = table.compFricD
finalFricDegree = 29
IP=100 # iteration period to record data and stuff
micro_record_
ORN=3000 # O.Run Number of iterations
micro_record_
micro_record_
damp=0.2
thick=0
stabilityThresh
PCPC=0.0001 # Precision of Confining Pressure Convergence
r_min=0.1*1e-3 # m
d_min=2*r_min # m
r_max=0.3*1e-3 # m
d_max=2*r_max # m
r_avr=(
d_avr=2*r_avr # m
r_fuz=(
Kn=10e8*(d_avr) ### FIXME
Kt=10e8*(d_avr) ### FIXME
young=Kn/r_avr # 2 (E r1 E r2 / E r1 + E r2) >>> E = Kn/r_avr
poisson=Kn/Kt # Kt/Kn
Ls=0.02 # m length of specimen ### FIXME
L_REV=7*(d_avr) # m
if Ls < L_REV:
sys.exit("*** ERROR! The specimen's dimension is too samll! ***")
elif Ls==L_REV:
print ("*** This is the minimum specimen's dimension you can take! ***")
else:
print ("*** The specimen's dimension is good enough! ***")
mn,mx=Vector3(
Vt=-1*1e-3 # m/s # negative sign describes the compression direction
strainRate=Vt/Ls # %/sec
target_strain=0.25 ### FIXME %
print ("The target strain has been set to:", target_strain)
sigmaIso=-5e5 # Pa ### FIXME
particleDensity
#######
################# DEFINING MATERIALS #################
O.materials.
O.materials.
#######
################# DEFINING PACKING #################
walls=aabbWalls
for w in walls:w.
wallIds=
sp=pack.
clumps=False
sp.makeCloud(
O.bodies.
from yade import export
os.mkdir(
os.chdir(
export.
#######
################# DEFINING TRIAXIAL TEST #################
triax=TriaxialS
maxMultiplier=
finalMaxMultip
thickness = thick,
stressMask = 7,
internalCompac
)
#######
################# DEFINING FUNCTIONS #################
from yade import plot
def history():
plot.addData(
e11 = -triax.strain[0],
e22 = -triax.strain[1],
e33 = -triax.strain[2],
ev = -triax.
s11 = -triax.
s22 = -triax.
s33 = -triax.
i = O.iter,
t = O.time, # virtual (yade) time --- time of simulation
fab = utils.fabricTen
#######
################# DEFINING ENGINES #################
newton=
O.engines=[
ForceResetter(),
InsertionSortC
InteractionLoop(
[Ig2_
[Ip2_
[Law2_
),
GlobalStiffnes
triax,
PyRunner(
TriaxialStateR
newton
]
Gl1_Sphere.
if nRead==0: yade.qt.
#######
################# APPLYING CONFINING PRESSURE #################
triax.goal1 = sigmaIso
triax.goal2 = sigmaIso
triax.goal3 = sigmaIso
while 1:
O.run(ORN,True)
unb = unbalancedForce()
meanS=
ConfStressR
print ('~~~~~~~~~~~~~ Phase_01: Converging to Isotropic Compression, 50kPa ~~~~~~~~~~~~~')
print ('mean stress engine:
print ('porosity:
if unb<stabilityTh
break
export.
e22Check=
print ('Axial Strain',e22Check)
print ('Mean stress engine: ',triax.meanStress)
print ('Mean stress (Calculated): ',meanS)
#######
################# REACHING TARGET POROSITY ##################
print ('============ REACHING TARGET POROSITY ============')
import sys
while triax.porosity>
compFricDegree = 0.95*compFricDegree
setContactFric
print ('\r Friction: ',compFricDegree,' porosity:
sys.stdout.flush()
O.run(ORN,True)
#######
################# DEVIATORIC LOADING #################
triax.internalC
setContactFrict
triax.wall_
triax.wall_
triax.wall_
triax.wall_
triax.wall_
triax.wall_
triax.stressCon
triax.stressCon
triax.stressCon
triax.strainRat
triax.stressMask = 5
triax.goal1 = sigmaIso
triax.goal2 = strainRate
triax.goal3 = sigmaIso
newton.damping=0.1 ### FIXME
os.mkdir(
os.chdir(
while 1:
O.run(ORN,True)
export.
record_
unb=
axialS=
eps2=
eps2cal=
print ('~~~~~~~~~~~~~ Phase_02: Converging to Deviatoric Compression, Strain Rate ~~~~~~~~~~~~~')
print ('sigma2: ',axialS, ' q: ', axialS-sigmaIso,' step= ', O.iter/ORN,' Time:',O.time, ' TimeStep',O.dt)
print ('Strain2 Calculated: ',eps2cal, ' Strain2 engine: ',eps2,'axial deformation (%)', (eps2-e22Check)
print('A:', abs(eps2-e22Check), ' B:',target_strain)
if abs(eps2-
break
#######
################# END #################
print ('************** END **************')
O.realtime
print ('Analysis has been taken for',O.realtime, 'seconds or', O.realtime/60, 'minutes')
print('Real time of run:',(time.time() - start_time), 'seconds or',(time.time() - start_time)/60, 'minutes')
yade.timing.stats()
#######
################# RECORD Macro DATA and Plot #################
print ('============ RECORD AND PLOT DATA ============')
O.run(ORN,True)
plot.plots=
plot.labels=
plot.plot()
os.chdir(
plot.saveDataTx
O.pause()
%%%%%%%
Thank you for your helps.
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 ehsan benabbas for more information if necessary.