Introduction
Introduction Statistics Contact Development Disclaimer Help
tfixed compaction and init, added layering. Carpet mechanical property manipula…
git clone git://src.adamsgaard.dk/granular-basin
Log
Files
Refs
README
---
commit e2df704fb21f7b57fc8060bd864671ac806569e5
parent 7170f28747ab13c1bb5994097d53fce776f5a129
Author: esbenpalmstrom <[email protected]>
Date: Mon, 22 Nov 2021 10:15:25 +0100
fixed compaction and init, added layering.
Carpet mechanical property manipulation still needs to be tested.
Diffstat:
M compact_basin.jl | 23 ++++++++++++++---------
M init_basin.jl | 31 +++++++++++++++--------------…
A layer_basin.jl | 89 +++++++++++++++++++++++++++++…
3 files changed, 118 insertions(+), 25 deletions(-)
---
diff --git a/compact_basin.jl b/compact_basin.jl
t@@ -8,19 +8,23 @@ t_start = Dates.now() # Save the start time, print the end t…
# lav en lille test? se om dit appendede carpet stadig er forbundet til hoved-
# simulationsobjektet
-
-id = "simulation500" # id of simulation to load
+id = "simulation200" # id of simulation to load
N = 20e3 # amount of stress to be applied
-t_comp = 0.2 #compaction max duration [s]
+t_comp = 5.0 # compaction max duration [s]
sim = Granular.readSimulation("$(id)/init.jld2")
carpet = Granular.readSimulation("$(id)/carpet.jld2")
SimSettings = SimSettings = JLD2.load("$(id)/SimSettings.jld2")
+#mkpath("$(id)/compaction-N$(N)Pa")
-sim.id = "compaction-N$(N)Pa_Grains$(SimSettings["ngrains"])"
+cd("$id")
+sim.id = "compaction-N$(N)Pa"
+#sim.id = "$(id)/compaction-N$(N)Pa"
SimSettings["N"] = N
+
+
Granular.zeroKinematics!(sim)
Granular.zeroKinematics!(carpet)
t@@ -40,13 +44,13 @@ Granular.addWallLinearFrictionless!(sim, [0., 1.],y_top,
Granular.fitGridToGrains!(sim,sim.ocean)
-
y_bot = Inf
for grain in sim.grains
if y_bot > grain.lin_pos[2] - grain.contact_radius
global y_bot = grain.lin_pos[2] - grain.contact_radius
end
end
+
fixed_thickness = 2. * SimSettings["r_max"]
for grain in sim.grains
if grain.lin_pos[2] <= fixed_thickness
t@@ -61,10 +65,9 @@ time = Float64[]
compaction = Float64[]
effective_normal_stress = Float64[]
-
while sim.time < sim.time_total
- for i = 1:100 #run for a while before measuring the state of the top wall
+ for i = 1:100 # run for a while before measuring the state of the top wall
Granular.run!(sim, single_step=true)
end
t@@ -74,8 +77,6 @@ while sim.time < sim.time_total
end
-
-
defined_normal_stress = (ones(size(effective_normal_stress,1)))
*(Granular.getWallNormalStress(sim, stress_type="effective"))
t@@ -93,4 +94,8 @@ PyPlot.ylabel("Normal stress [Pa]")
PyPlot.savefig(sim.id * "-time_vs_compaction-stress.pdf")
PyPlot.clf()
+cd("..")
+
+JLD2.save("simulation$(ngrains)/SimSettings.jld2", SimSettings)
+
Granular.writeSimulation(sim,filename = "$(id)/comp.jld2")
diff --git a/init_basin.jl b/init_basin.jl
t@@ -3,7 +3,7 @@ import JLD2
import PyPlot
import Dates
-t_start = Dates.now() # Save the start time, print the end time later.
+t_start = Dates.now() # Save the start time, print the end time late…
############# Initialization Settings #############
t@@ -12,13 +12,13 @@ t_stack = 0.5 # duration for each stack …
g = [0.,-9.8] # vector for direction and magnitude of gravit…
-ngrains = 40000 # total number of grains
-aspect_ratio = 2 #should be x times as wide as it is tall
+ngrains = 200 # total number of grains
+aspect_ratio = 2 # should be x times as wide as it is tall
stacks = 2 # number of duplicate stacks on top of the ini…
ny = sqrt((ngrains)/aspect_ratio) # number of grain rows
-nx = aspect_ratio*ny*(stacks+1) # number of grain columns
+nx = aspect_ratio*ny*(stacks+1) # number of grain columns
ny = Int(round(ny/(stacks+1)))
nx = Int(round(nx/(stacks+1)))
t@@ -54,11 +54,11 @@ SimSettings["r_max"] = r_max
sim = Granular.createSimulation(id="simulation$(ngrains)")
-Granular.regularPacking!(sim, #simulation object
- [nx, ny], #number of grains along x and y axis
- r_min, #smallest grain size
- r_max, #largest grain size
- tiling="triangular", #how the grains are tiled
+Granular.regularPacking!(sim, #simulation object
+ [nx, ny], #number of grains along x and …
+ r_min, #smallest grain size
+ r_max, #largest grain size
+ tiling="triangular", #how the grains are tiled
origo = [0.0,0.0],
size_distribution=gsd_type,
size_distribution_parameter=gsd_powerlaw_exponent,
t@@ -109,8 +109,8 @@ for i = 1:stacks
global y_top = -Inf
for grain in sim.grains
- if y_top < grain.lin_pos[2] #+ grain.contact_radius
- global y_top = grain.lin_pos[2] #+ grain.contact_radius
+ if y_top < grain.lin_pos[2]
+ global y_top = grain.lin_pos[2]
end
end
t@@ -118,9 +118,9 @@ for i = 1:stacks
# add duplicate grains above the initialized grains
for grain in temp.grains
- lin_pos_lifted = [0.0,0.0] # preallocation of position of a 'lifted' g…
- lin_pos_lifted[1] = grain.lin_pos[1] # x position of duplicate grain
- lin_pos_lifted[2] = grain.lin_pos[2] + y_top + r_max # y-position of d…
+ lin_pos_lifted = [0.0,0.0] # preallocatio…
+ lin_pos_lifted[1] = grain.lin_pos[1] # x position o…
+ lin_pos_lifted[2] = grain.lin_pos[2] + y_top + r_max # y-position o…
Granular.addGrainCylindrical!(sim,
t@@ -226,8 +226,7 @@ Granular.writeSimulation(carpet,
JLD2.save("simulation$(ngrains)/SimSettings.jld2", SimSettings)
-
-#print time elapsed
+# print time elapsed
t_now = Dates.now()
dur = Dates.canonicalize(t_now-t_start)
print("Time elapsed: ",dur)
diff --git a/layer_basin.jl b/layer_basin.jl
t@@ -0,0 +1,89 @@
+import Granular
+import JLD2
+import PyPlot
+import Dates
+
+id = "simulation200" # id of simulation to load, just write the folder
+ # name here
+
+# Layer interface positions
+# defined as decimals
+# ex: [0.4,0.6,1] will give two boundaries at 0.4 from the bottom
+# and 0.6 from the bottom. ie 3 layers
+# include 1 in the end as roof.
+interfaces = [0,0.4,0.6,1]
+
+# mechanical properties for each layer
+youngs_modulus = [2e7,2e7,2e7] # elastic modulus
+poissons_ratio = [0.185,0.200,0.185] # shear stiffness ratio
+tensile_strength = [0.0,0.0,0.0] # strength of bonds between grains
+contact_dynamic_friction = [0.4,0.4,0.4] # friction between grains
+rotating = [true,true,true] # can grains rotate or not
+
+sim = Granular.readSimulation("$(id)/comp.jld2")
+carpet = Granular.readSimulation("$(id)/carpet.jld2")
+SimSettings = SimSettings = JLD2.load("$(id)/SimSettings.jld2")
+
+Granular.zeroKinematics!(sim) # end any movement
+Granular.zeroKinematics!(carpet) # end any movement
+
+y_top = -Inf
+for grain in sim.grains
+ grain.contact_viscosity_normal = 0
+ if y_top < grain.lin_pos[2] + grain.contact_radius
+ global y_top = grain.lin_pos[2] + grain.contact_radius
+ end
+end
+
+y_bot = Inf
+for grain in sim.grains
+ if y_bot > grain.lin_pos[2] - grain.contact_radius
+ global y_bot = grain.lin_pos[2] - grain.contact_radius
+ end
+end
+
+h = y_top-y_bot
+
+for grain in sim.grains
+
+ for i = 2:size(interfaces,1)
+
+ if grain.lin_pos[2] <= interfaces[i] && grain.lin_pos[2] > interfaces[…
+
+ grain.youngs_modulus = youngs_modulus[i-1]
+ grain.poissons_ratio = poissons_ratio[i-1]
+ grain.tensile_strength = tensile_strength[i-1]
+ grain.contact_dynamic_friction = contact_dynamic_friction[i-1]
+ grain.rotating = rotating[i-1]
+
+ end
+
+ end
+
+end
+
+#set the mechanical settings for the carpet
+for grain in carpet.grains
+ grain.youngs_modulus = youngs_modulus[2]
+ grain.poissons_ratio = poissons_ratio[2]
+ grain.tensile_strength = tensile_strength[2]
+ grain.contact_dynamic_friction = contact_dynamic_friction[2]
+ grain.rotating = rotating[2]
+end
+
+"""
+cd("$id")
+sim.id = "layered"
+
+Granular.resetTime!(sim)
+Granular.setTotalTime!(sim,0.3)
+Granular.run!(sim)
+
+cd("..")
+"""
+
+Granular.writeSimulation(sim,
+ filename = "$(id)/layered.jld2")
+
+Granular.writeSimulation(carpet,
+ filename = "$(id)/carpet.jld2")
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.