commit 7a526c9d8656fe0956ca3c93d94dd9b64508ffe1
parent fe8fa125a077cea7d9bcc7395728dc6297bd94c6
Author: Anders Damsgaard <andersd@riseup.net>
Date: Thu, 15 Feb 2018 16:05:45 -0500
Rename compressive_strength_prefactor to fracture_toughness
Diffstat:
4 files changed, 32 insertions(+), 20 deletions(-)
diff --git a/src/datatypes.jl b/src/datatypes.jl
@@ -48,7 +48,7 @@ mutable struct GrainCylindrical
poissons_ratio::Float64
tensile_strength::Float64
tensile_heal_rate::Float64
- compressive_strength_prefactor::Float64
+ fracture_toughness::Float64
# Ocean/atmosphere interaction parameters
ocean_drag_coeff_vert::Float64
@@ -139,7 +139,7 @@ mutable struct GrainArrays
poissons_ratio::Vector{Float64}
tensile_strength::Vector{Float64}
tensile_heal_rate::Vector{Float64}
- compressive_strength_prefactor::Vector{Float64}
+ fracture_toughness::Vector{Float64}
ocean_drag_coeff_vert::Vector{Float64}
ocean_drag_coeff_horiz::Vector{Float64}
diff --git a/src/grain.jl b/src/grain.jl
@@ -15,7 +15,7 @@ export addGrainCylindrical!
contact_dynamic_friction,
youngs_modulus, poissons_ratio,
tensile_strength, tensile_heal_rate,
- compressive_strength_prefactor,
+ fracture_toughness,
ocean_drag_coeff_vert,
ocean_drag_coeff_horiz,
atmosphere_drag_coeff_vert,
@@ -69,7 +69,7 @@ are optional, and come with default values. The only required arguments are
[Pa].
* `tensile_heal_rate::Float64 = 0.`: rate at which contact-tensile bond strength
is obtained [1/s].
-* `compressive_strength_prefactor::Float64 = 0.`: maximum compressive
+* `fracture_toughness::Float64 = 0.`: maximum compressive
strength on granular contact (not currently enforced) [m^{1/2}*Pa]. A value
of 1.285e3 m^{1/2}*Pa is used for sea ice by Hopkins 2004.
* `ocean_drag_coeff_vert::Float64 = 0.85`: vertical drag coefficient for ocean
@@ -152,7 +152,7 @@ function addGrainCylindrical!(simulation::Simulation,
poissons_ratio::Float64 = 0.185, # Hopkins 2004
tensile_strength::Float64 = 0.,
tensile_heal_rate::Float64 = 0.,
- compressive_strength_prefactor::Float64 = 0.,
+ fracture_toughness::Float64 = 0.,
ocean_drag_coeff_vert::Float64 = 0.85, # H&C 2011
ocean_drag_coeff_horiz::Float64 = 5e-4, # H&C 2011
atmosphere_drag_coeff_vert::Float64 = 0.4, # H&C 2011
@@ -247,7 +247,7 @@ function addGrainCylindrical!(simulation::Simulation,
poissons_ratio,
tensile_strength,
tensile_heal_rate,
- compressive_strength_prefactor,
+ fracture_toughness,
ocean_drag_coeff_vert,
ocean_drag_coeff_horiz,
@@ -409,7 +409,7 @@ function convertGrainDataToArrays(simulation::Simulation)
Array{Float64}(length(simulation.grains)),
## tensile_heal_rate
Array{Float64}(length(simulation.grains)),
- ## compressive_strength_prefactor
+ ## fracture_toughness
Array{Float64}(length(simulation.grains)),
# Ocean/atmosphere interaction parameters
@@ -492,8 +492,8 @@ function convertGrainDataToArrays(simulation::Simulation)
ifarr.poissons_ratio[i] = simulation.grains[i].poissons_ratio
ifarr.tensile_strength[i] = simulation.grains[i].tensile_strength
ifarr.tensile_heal_rate[i] = simulation.grains[i].tensile_heal_rate
- ifarr.compressive_strength_prefactor[i] =
- simulation.grains[i].compressive_strength_prefactor
+ ifarr.fracture_toughness[i] =
+ simulation.grains[i].fracture_toughness
ifarr.ocean_drag_coeff_vert[i] =
simulation.grains[i].ocean_drag_coeff_vert
@@ -564,7 +564,7 @@ function deleteGrainArrays!(ifarr::GrainArrays)
ifarr.poissons_ratio = f1
ifarr.tensile_strength = f1
ifarr.tensile_heal_rate = f1
- ifarr.compressive_strength_prefactor = f1
+ ifarr.fracture_toughness = f1
ifarr.ocean_drag_coeff_vert = f1
ifarr.ocean_drag_coeff_horiz = f1
@@ -625,10 +625,10 @@ function printGrainInfo(f::GrainCylindrical)
println(" μ_s: $(f.contact_static_friction)")
println(" μ_d: $(f.contact_dynamic_friction)\n")
- println(" E: $(f.youngs_modulus) Pa")
- println(" ν: $(f.poissons_ratio)")
- println(" σ_t: $(f.tensile_strength) Pa")
- println(" c(σ_c): $(f.compressive_strength_prefactor) m^0.5 Pa\n")
+ println(" E: $(f.youngs_modulus) Pa")
+ println(" ν: $(f.poissons_ratio)")
+ println(" tensile_strength: $(f.tensile_strength) Pa")
+ println(" fracture_toughness: $(f.fracture_toughness) m^0.5 Pa\n")
println(" c_o_v: $(f.ocean_drag_coeff_vert)")
println(" c_o_h: $(f.ocean_drag_coeff_horiz)")
@@ -768,8 +768,8 @@ function compareGrains(if1::GrainCylindrical, if2::GrainCylindrical)
@test if1.poissons_ratio ≈ if2.poissons_ratio
@test if1.tensile_strength ≈ if2.tensile_strength
@test if1.tensile_heal_rate ≈ if2.tensile_heal_rate
- @test if1.compressive_strength_prefactor ≈
- if2.compressive_strength_prefactor
+ @test if1.fracture_toughness ≈
+ if2.fracture_toughness
@test if1.ocean_drag_coeff_vert ≈ if2.ocean_drag_coeff_vert
@test if1.ocean_drag_coeff_horiz ≈ if2.ocean_drag_coeff_horiz
diff --git a/src/interaction.jl b/src/interaction.jl
@@ -205,9 +205,14 @@ function interactGrains!(simulation::Simulation, i::Int, j::Int, ic::Int)
error("unknown contact_normal_rheology (k_n = $k_n, γ_n = $γ_n")
end
- # Contact tensile strength increases linearly with contact age until tensile
- # stress exceeds tensile strength
+ compressive_strength = min(simulation.grains[i].fracture_toughness *
+ sqrt(simulation.grains[i].thickness),
+ simulation.grains[j].fracture_toughness *
+ sqrt(simulation.grains[j].thickness))
+ # Add tensile strength during extension or limit compressive strength
if δ_n > 0.
+ # Contact tensile strength increases linearly with contact age until
+ # tensile stress exceeds tensile strength
# linearly increase tensile strength with time until max. value
tensile_strength = min(simulation.grains[i].contact_age[ic]/
@@ -224,6 +229,13 @@ function interactGrains!(simulation::Simulation, i::Int, j::Int, ic::Int)
simulation.grains[i].n_contacts -= 1
simulation.grains[j].n_contacts -= 1
end
+
+ elseif fracture_toughness > 0.
+ # Limit compressive stress if the prefactor is set to a positive value
+ if abs(force_n) >= compressive_strength
+
+
+ end
end
if k_t ≈ 0. && γ_t ≈ 0.
diff --git a/src/io.jl b/src/io.jl
@@ -404,8 +404,8 @@ function writeGrainVTK(simulation::Simulation,
"Tensile strength [Pa]")
WriteVTK.vtk_point_data(vtkfile, ifarr.tensile_heal_rate,
"Tensile healing rate [1/s]")
- WriteVTK.vtk_point_data(vtkfile, ifarr.compressive_strength_prefactor,
- "Compressive strength prefactor [m^0.5 Pa]")
+ WriteVTK.vtk_point_data(vtkfile, ifarr.fracture_toughness,
+ "Fracture toughness [m^0.5 Pa]")
WriteVTK.vtk_point_data(vtkfile, ifarr.ocean_drag_coeff_vert,
"Ocean drag coefficient (vertical) [-]")