tsave additional contact parameters and drag coefficients in ice floe type - Gr… | |
git clone git://src.adamsgaard.dk/Granular.jl | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit b4856096f45707589baa494ad735de2128f7ec35 | |
parent d9942595aec41f37d766c59d041229d6f738e0c0 | |
Author: Anders Damsgaard <[email protected]> | |
Date: Wed, 24 May 2017 11:54:04 -0400 | |
save additional contact parameters and drag coefficients in ice floe type | |
Diffstat: | |
M src/datatypes.jl | 21 +++++++++++++++++++++ | |
M src/icefloe.jl | 62 +++++++++++++++++++++++++++++… | |
M src/io.jl | 18 ++++++++++++++++++ | |
M src/ocean.jl | 10 ++++------ | |
M test/vtk.jl | 2 +- | |
5 files changed, 102 insertions(+), 11 deletions(-) | |
--- | |
diff --git a/src/datatypes.jl b/src/datatypes.jl | |
t@@ -44,6 +44,17 @@ type IceFloeCylindrical | |
contact_static_friction::float | |
contact_dynamic_friction::float | |
+ youngs_modulus::float | |
+ poissons_ratio::float | |
+ tensile_strength::float | |
+ compressive_strength_prefactor::float | |
+ | |
+ # Ocean/atmosphere interaction parameters | |
+ ocean_drag_coeff_vert::float | |
+ ocean_drag_coeff_horiz::float | |
+ atmos_drag_coeff_vert::float | |
+ atmos_drag_coeff_horiz::float | |
+ | |
# Interaction | |
pressure::float | |
n_contacts::Int | |
t@@ -94,6 +105,16 @@ type IceFloeArrays | |
contact_static_friction | |
contact_dynamic_friction | |
+ youngs_modulus | |
+ poissons_ratio | |
+ tensile_strength | |
+ compressive_strength_prefactor | |
+ | |
+ ocean_drag_coeff_vert | |
+ ocean_drag_coeff_horiz | |
+ atmos_drag_coeff_vert | |
+ atmos_drag_coeff_horiz | |
+ | |
pressure | |
n_contacts | |
end | |
diff --git a/src/icefloe.jl b/src/icefloe.jl | |
t@@ -27,6 +27,15 @@ function addIceFloeCylindrical(simulation::Simulation, | |
contact_viscosity_tangential::float = 0., | |
contact_static_friction::float = 0.4, | |
contact_dynamic_friction::float = 0.4, | |
+ youngs_modulus::float = 2e9, # Hopkins 2004 | |
+ poissons_ratio::float = 0.185, # Hopkins 2004 | |
+ tensile_strength::float = 500e3, # Hopkins 2004 | |
+ compressive_strength_prefactor::float = 1285e3,… | |
+ # Hopkins 2004 | |
+ ocean_drag_coeff_vert::float = 0.85, # H&C 2011 | |
+ ocean_drag_coeff_horiz::float = 5e-4, # H&C 2011 | |
+ atmos_drag_coeff_vert::float = 0.4, # H&C 2011 | |
+ atmos_drag_coeff_horiz::float = 2.5e-4, # H&C20… | |
pressure::float = 0., | |
fixed::Bool = false, | |
rotating::Bool = true, | |
t@@ -102,6 +111,16 @@ function addIceFloeCylindrical(simulation::Simulation, | |
contact_static_friction, | |
contact_dynamic_friction, | |
+ youngs_modulus, | |
+ poissons_ratio, | |
+ tensile_strength, | |
+ compressive_strength_prefactor, | |
+ | |
+ ocean_drag_coeff_vert, | |
+ ocean_drag_coeff_horiz, | |
+ atmos_drag_coeff_vert, | |
+ atmos_drag_coeff_horiz, | |
+ | |
pressure, | |
n_contacts, | |
ocean_grid_pos, | |
t@@ -199,6 +218,16 @@ function convertIceFloeDataToArrays(simulation::Simulatio… | |
Array(Float64, length(simulation.ice_floes)), | |
Array(Float64, length(simulation.ice_floes)), | |
+ Array(Float64, length(simulation.ice_floes)), | |
+ Array(Float64, length(simulation.ice_floes)), | |
+ Array(Float64, length(simulation.ice_floes)), | |
+ | |
+ Array(Float64, length(simulation.ice_floes)), | |
+ Array(Float64, length(simulation.ice_floes)), | |
+ Array(Float64, length(simulation.ice_floes)), | |
+ Array(Float64, length(simulation.ice_floes)), | |
+ | |
+ Array(Float64, length(simulation.ice_floes)), | |
Array(Int, length(simulation.ice_floes)) | |
) | |
t@@ -244,6 +273,21 @@ function convertIceFloeDataToArrays(simulation::Simulatio… | |
ifarr.contact_dynamic_friction[i] = | |
simulation.ice_floes[i].contact_dynamic_friction | |
+ ifarr.youngs_modulus[i] = simulation.ice_floes[i].youngs_modulus | |
+ ifarr.poissons_ratio[i] = simulation.ice_floes[i].poissons_ratio | |
+ ifarr.tensile_strength[i] = simulation.ice_floes[i].tensile_strength | |
+ ifarr.compressive_strength_prefactor[i] = | |
+ simulation.ice_floes[i].compressive_strength_prefactor | |
+ | |
+ ifarr.ocean_drag_coeff_vert[i] = | |
+ simulation.ice_floes[i].ocean_drag_coeff_vert | |
+ ifarr.ocean_drag_coeff_horiz[i] = | |
+ simulation.ice_floes[i].ocean_drag_coeff_horiz | |
+ ifarr.atmos_drag_coeff_vert[i] = | |
+ simulation.ice_floes[i].atmos_drag_coeff_vert | |
+ ifarr.atmos_drag_coeff_horiz[i] = | |
+ simulation.ice_floes[i].atmos_drag_coeff_horiz | |
+ | |
ifarr.pressure[i] = simulation.ice_floes[i].pressure | |
ifarr.n_contacts[i] = simulation.ice_floes[i].n_contacts | |
t@@ -286,10 +330,20 @@ function printIceFloeInfo(f::IceFloeCylindrical) | |
println(" k_n: $(f.contact_stiffness_normal) N/m") | |
println(" k_t: $(f.contact_stiffness_tangential) N/m") | |
- println(" gamma_n: $(f.contact_viscosity_normal) N/(m/s)") | |
- println(" gamma_t: $(f.contact_viscosity_tangential) N/(m/s)") | |
- println(" mu_s: $(f.contact_static_friction)") | |
- println(" mu_d: $(f.contact_dynamic_friction)\n") | |
+ println(" γ_n: $(f.contact_viscosity_normal) N/(m/s)") | |
+ println(" γ_t: $(f.contact_viscosity_tangential) N/(m/s)") | |
+ 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(" c_o_v: $(f.ocean_drag_coeff_vert)") | |
+ println(" c_o_h: $(f.ocean_drag_coeff_horiz)") | |
+ println(" c_a_v: $(f.atmos_drag_coeff_vert)") | |
+ println(" c_a_h: $(f.atmos_drag_coeff_horiz)\n") | |
println(" pressure: $(f.pressure) Pa") | |
println(" n_contacts: $(f.n_contacts)") | |
diff --git a/src/io.jl b/src/io.jl | |
t@@ -93,6 +93,24 @@ function writeIceFloeVTK(simulation::Simulation, | |
WriteVTK.vtk_point_data(vtkfile, ifarr.contact_dynamic_friction, | |
"Contact friction (dynamic) [-]") | |
+ WriteVTK.vtk_point_data(vtkfile, ifarr.youngs_modulus, | |
+ "Young's modulus [Pa]") | |
+ WriteVTK.vtk_point_data(vtkfile, ifarr.poissons_ratio, | |
+ "Poisson's ratio [-]") | |
+ WriteVTK.vtk_point_data(vtkfile, ifarr.tensile_strength, | |
+ "Tensile strength [Pa]") | |
+ WriteVTK.vtk_point_data(vtkfile, ifarr.compressive_strength_prefactor, | |
+ "Compressive strength prefactor [m^0.5 Pa]") | |
+ | |
+ WriteVTK.vtk_point_data(vtkfile, ifarr.ocean_drag_coeff_vert, | |
+ "Ocean drag coefficient (vertical) [-]") | |
+ WriteVTK.vtk_point_data(vtkfile, ifarr.ocean_drag_coeff_horiz, | |
+ "Ocean drag coefficient (horizontal) [-]") | |
+ WriteVTK.vtk_point_data(vtkfile, ifarr.atmos_drag_coeff_vert, | |
+ "Atmosphere drag coefficient (vertical) [-]") | |
+ WriteVTK.vtk_point_data(vtkfile, ifarr.atmos_drag_coeff_horiz, | |
+ "Atmosphere drag coefficient (horizontal) [-]") | |
+ | |
WriteVTK.vtk_point_data(vtkfile, ifarr.pressure, | |
"Contact pressure [Pa]") | |
diff --git a/src/ocean.jl b/src/ocean.jl | |
t@@ -294,13 +294,12 @@ function applyOceanDragToIceFloe!(ice_floe::IceFloeCylin… | |
freeboard = .1*ice_floe.thickness # height above water | |
rho_o = 1000. # ocean density | |
draft = ice_floe.thickness - freeboard # height of submerged thickness | |
- c_o_v = .85 # ocean drag coefficient, vertical, Hunke and Comeau 2011 | |
- c_o_h = 5e-4 # ocean drag coefficient, horizontal | |
length = ice_floe.areal_radius*2. | |
width = ice_floe.areal_radius*2. | |
ice_floe.force += | |
- rho_o * (.5*c_o_v*width*draft + c_o_h*length*width) * | |
+ rho_o * (.5*ice_floe.ocean_drag_coeff_vert*width*draft + | |
+ ice_floe.ocean_drag_coeff_horiz*length*width) * | |
([u, v] - ice_floe.lin_vel)*norm([u, v] - ice_floe.lin_vel) | |
end | |
t@@ -315,11 +314,10 @@ function applyOceanVorticityToIceFloe!(ice_floe::IceFloe… | |
freeboard = .1*ice_floe.thickness # height above water | |
rho_o = 1000. # ocean density | |
draft = ice_floe.thickness - freeboard # height of submerged thickness | |
- c_o_v = .85 # ocean drag coefficient, vertical, Hunke and Comeau 2011 | |
- c_o_h = 5e-4 # ocean drag coefficient, horizontal | |
ice_floe.torque += | |
pi*ice_floe.areal_radius^4.*rho_o* | |
- (ice_floe.areal_radius/5.*c_o_h + draft*c_o_h)* | |
+ (ice_floe.areal_radius/5.*ice_floe.ocean_drag_coeff_horiz + | |
+ draft*ice_floe.ocean_drag_coeff_vert)* | |
abs(.5*ocean_curl - ice_floe.ang_vel)*(.5*ocean_curl - ice_floe.ang_ve… | |
end | |
diff --git a/test/vtk.jl b/test/vtk.jl | |
t@@ -26,7 +26,7 @@ else | |
end | |
icefloechecksum = | |
-"88daceb1b99c519154b1acdcf8f340967794c552c74ea70c4af8954d8af5296a " * | |
+"4885bc7c0eccc5e43a77d370295841fae710465c8bcc120a13681a0947ffbd53 " * | |
"test.icefloes.1.vtu\n" | |
oceanchecksum = |