Evolving material properties and timestep instability
Dear all,
I am working on the modelling of a problem using the JCFpm contact law on a very dense pack (porosity is about 11%), where I have three phenomena being imposed simultaneously:
1. particle shrinkage, applied using utils.growParti
2. stiffening of the contacts, applied using an iterative loop on O.bodies (b.mat.
3. increasing tensile strength, applied also using iterative loops on O.bodies and O.interactions following the same procedure as in (2).
I'm using the GlobalStiffness
The problem I'm experiencing is that the time step has been decreasing at very large rates despite the gentle stiffening+
The work I'm doing is reproducing results from a study that employed PFC, and all of my coefficients and ratios are calculated according to their work.
Has anyone experienced something similar and would have a suggestion to handle this seemingly numerical instability?
Thank you in advance for your time!
Question information
- Language:
- English Edit question
- Status:
- Solved
- For:
- Yade Edit question
- Assignee:
- No assignee Edit question
- Solved by:
- Jan Stránský
- Solved:
- Last query:
- Last reply:
Revision history for this message
|
#1 |
Hello Rodrigo,
please provide a MWE [1], without it it is very difficult to guess what is
the reason of the problem
thanks
Jan
[1] https:/
2015-08-19 6:11 GMT+02:00 Rodrigo Borela <
<email address hidden>>:
> New question #270524 on Yade:
> https:/
>
> Dear all,
>
> I am working on the modelling of a problem using the JCFpm contact law on
> a very dense pack (porosity is about 11%), where I have three phenomena
> being imposed simultaneously:
> 1. particle shrinkage, applied using utils.growParti
> of the order of .9999995)
> 2. stiffening of the contacts, applied using an iterative loop on O.bodies
> (b.mat.
> i.phys.
> (stiffeningfactor of the order of 1.0000005)
> 3. increasing tensile strength, applied also using iterative loops on
> O.bodies and O.interactions following the same procedure as in (2).
> I'm using the GlobalStiffness
> about 500-1000 iterations) is the same as the one for when the three
> phenomena are applied.
> The problem I'm experiencing is that the time step has been decreasing at
> very large rates despite the gentle stiffening+
> 1e-8 to 1e-10 in an iteration interval. At some point, the particles
> explode or the time step becomes 'nan'.
> The work I'm doing is reproducing results from a study that employed PFC,
> and all of my coefficients and ratios are calculated according to their
> work.
> Has anyone experienced something similar and would have a suggestion to
> handle this seemingly numerical instability?
>
> Thank you in advance for your time!
>
> --
> You received this question notification because you are a member of
> yade-users, which is an answer contact for Yade.
>
> _______
> Mailing list: https:/
> Post to : <email address hidden>
> Unsubscribe : https:/
> More help : https:/
>
Revision history for this message
|
#2 |
Dear Jan,
thank you for your reply. Here follows the code. The text file containing my sample information is here http://
O.reset()
import math, sys, os
from yade import utils, pack, plot, ymport, timing
O.timingEnabled
# Total experiment duration (iterations)
tau=1000000.0
#--------- Initial Material properties
# Friction angle
phi1=0
tanPhi1=0
# Tensile strength
sigmat1=3.729e6
# Young's modulus
young1=1.25e7
# Add material to the simulation
cohFric1=
# -------------- Cylindrical Sample
# Center
centerx=0.0
centery=0.0
centerz=0.0
# Dimensions
segNumber=60
sampleDiameter=
h=0.01484
top=centerz+(h/2)
bottom=
# Cylinder
O.bodies.
# Particle pack
O.bodies.
#======
# ENGINES
#======
#-------------- Iteration interval
nIter=int(
# Engines
O.engines=[
[Ig2_
[Ip2_
[Law2_
),
PyRunner(
NewtonIntegr
GlobalStiffn
]
#======
# EVOLVING PROPERTIES AND SHRINKAGE
#======
#---------------- Evolution stages
# Initial
wi=0.60
# Intermediate 1
w1=0.17
# Intermediate 2
w2=0.11
# Final
wf=0.045
# Shrinkage parameter
alpha=.198
# Stiffness parameter
B=-0.197
# Tensile strength parameter
D=-0.083
w=wi
def EvolvingPropert
global nIter,tau,
global B, D
# Current iteration
t=O.iter
# Water content
w=
preceding
# Stiffness multiplier
stiffness
# Tensile strength multiplier
sigmatMul
#
# Material properties update
for b in O.bodies:
# Normal stiffness
# Tensile strength
# Cohesive part of shear strength
# Interactions update
for i in O.interactions:
# Normal stiffness
# Shear stiffness
# Tensile Strength
# Cohesive part of shear strength
#
shrinkRat
for b in O.bodies:
#
print 'The current time step is ', O.dt
print 'The current water content is ',w
print 'The average number of contacts is ',utils.
print 'The shrink ratio is ',shrinkRatio
print 'The stiffness multiplier is ',stiffnessMult
print 'The tensile strength multiplier is ',sigmatMultiplier
print '======
Revision history for this message
|
#3 |
Sorry! I forgot a pair of brackets in front of "utils.
O.reset()
import math, sys, os
from yade import utils, pack, plot, ymport, timing
O.timingEnabled
# Total experiment duration (iterations)
tau=1000000.0
#--------- Initial Material properties
# Friction angle
phi1=0
tanPhi1=0
# Tensile strength
sigmat1=3.729e6
# Young's modulus
young1=1.25e7
# Add material to the simulation
cohFric1=
# -------------- Cylindrical Sample
# Center
centerx=0.0
centery=0.0
centerz=0.0
# Dimensions
segNumber=60
sampleDiameter=
h=0.01484
top=centerz+(h/2)
bottom=
# Cylinder
O.bodies.
# Particle pack
O.bodies.
#======
# ENGINES
#======
#-------------- Iteration interval
nIter=int(
# Engines
O.engines=[
[Ig2_
[Ip2_
[Law2_
),
PyRunner(
NewtonIntegr
GlobalStiffn
]
#======
# EVOLVING PROPERTIES AND SHRINKAGE
#======
#---------------- Evolution stages
# Initial
wi=0.60
# Intermediate 1
w1=0.17
# Intermediate 2
w2=0.11
# Final
wf=0.045
# Shrinkage parameter
alpha=.198
# Stiffness parameter
B=-0.197
# Tensile strength parameter
D=-0.083
w=wi
def EvolvingPropert
global nIter,tau,
global B, D
# Current iteration
t=O.iter
# Water content
w=
preceding
# Stiffness multiplier
stiffness
# Tensile strength multiplier
sigmatMul
#
# Material properties update
for b in O.bodies:
# Normal stiffness
# Tensile strength
# Cohesive part of shear strength
# Interactions update
for i in O.interactions:
# Normal stiffness
# Shear stiffness
# Tensile Strength
# Cohesive part of shear strength
#
shrinkRat
for b in O.bodies:
#
print 'The current time step is ', O.dt
print 'The current water content is ',w
print 'The average number of contacts is ',utils.
print 'The shrink ratio is ',shrinkRatio
print 'The stiffness multiplier is ',stiffnessMult
print 'The tensile strength multiplier is ',sigmatMultiplier
print '======
Revision history for this message
|
#4 |
Hi Rodrigo,
thanks for the script
for b in O.bodies:
> # Normal stiffness
> b.mat.young*
b.mat is the same material instance for all bodies, so yout code would mean
that you multiply mat.young *= pow(stiffnessMi
making mat.young very high number. Changing material properties does not
influence existing contacts (so the problem might be visible much later),
but when new contact is created, it could be the problem (as you mentioned,
big reduction of time step by GlobalStiffness
Instead, try something like:
mats = set(b.mat for b in O.bodies)
for mat in mats:
mat.young *= stiffnessMultiplier
...
please try this approach and let us know if it helped or not
cheers
Jan
2015-08-19 20:12 GMT+02:00 Rodrigo Borela <
<email address hidden>>:
> Question #270524 on Yade changed:
> https:/
>
> Rodrigo Borela posted a new comment:
> Sorry! I forgot a pair of brackets in front of
> "utils.
> the patience!
>
> O.reset()
> import math, sys, os
> from yade import utils, pack, plot, ymport, timing
>
> O.timingEnabled
>
> # Total experiment duration (iterations)
> tau=1000000.0
>
> #--------- Initial Material properties
> # Friction angle
> phi1=0
> tanPhi1=0
> # Tensile strength
> sigmat1=3.729e6
> # Young's modulus
> young1=1.25e7
>
> # Add material to the simulation
>
> cohFric1=
>
> # -------------- Cylindrical Sample
> # Center
> centerx=0.0
> centery=0.0
> centerz=0.0
> # Dimensions
> segNumber=60
> sampleDiameter=
> h=0.01484
> top=centerz+(h/2)
> bottom=
> # Cylinder
>
> O.bodies.
> # Particle pack
> O.bodies.
>
> #======
> # ENGINES
> #======
>
> #-------------- Iteration interval
> nIter=int(
>
> # Engines
> O.engines=[
> ForceResetter(),
>
> InsertionSortCo
> InteractionLoop(
>
> [Ig2_Sphere_
> [Ip2_JCFpmMat_
>
> [Law2_ScGeom_
> ),
> PyRunner(
> NewtonIntegrato
>
> GlobalStiffness
> ]
>
> #======
> # EVOLVING PROPERTIES AND SHRINKAGE
> #======
>
> #---------------- Evolution stages
> # Initial
> wi=0.60
> # Intermediate 1
> w1=0.17
> # Intermediate 2
> w2=0.11
> # Final
> wf=0.045
>
> # Shrinkage parameter
> alpha=.198
> # Stiffness parameter
> B=-0.197
> # Tensile strength parameter
> D=-0.083
>
> w=wi
> def EvolvingPropert
> global nIter,tau,
> global B, D
> # Current iteration
> t=O.iter
> # Water content
> w=((t/tau)
> precedingW=
> # Stiffness multiplier
> stiffnessMultip
> # Tensile strength multiplier
> sigmatMultiplie
> #------------- Evolving material properties
> # Material properties update
> for b in O.bodies:
> # Normal stiffness
> b.mat.young*
> # Tensile strength
> b.mat.tensileSt
> # Cohesive part of shear strength
> b.mat.cohesion*
> # Interactions update
> for i in O.interactions:
> # Normal stiffness
> i.phys.
> # Shear stiffness
> i.phys.
> # Tensile Strength
> i.phys.
> # Cohesive part of shear strength
> i.phys.
> #------------- Shrinkage
> shrinkRatio=
> for b in O.bodies:
> utils.growParti
> #------------- Information
> print 'The current time step is ', O.dt
> print 'The current water content is ',w
> print 'The average number of contacts is ',utils.
> print 'The shrink ratio is ',shrinkRatio
> print 'The stiffness multiplier is ',stiffnessMult
> print 'The tensile strength multiplier is ',sigmatMultiplier
> print '======
>
> --
> You received this question notification because you are a member of
> yade-users, which is an answer contact for Yade.
>
> _______
> Mailing list: https:/
> Post to : <email address hidden>
> Unsubscribe : https:/
> More help : https:/
>
Revision history for this message
|
#5 |
Thanks Jan Stránský, that solved my question.
Revision history for this message
|
#6 |
Thank you very much, Jan. I changed that and ran the simulation from beginning to end and it worked perfectly :)