tprepare for contact model with tangential frictional elasticity - Granular.jl - Julia package for granular dynamics simulation
 (HTM) git clone git://src.adamsgaard.dk/Granular.jl
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit b1fabb456a57be43391034d91970559ce6160a8b
 (DIR) parent 77c8b15eeb9d42f89cad9ac7ff53c8b8c39dd0c0
 (HTM) Author: Anders Damsgaard <andersd@riseup.net>
       Date:   Tue,  2 May 2017 08:40:06 -0400
       
       prepare for contact model with tangential frictional elasticity
       
       Diffstat:
         M src/interaction.jl                  |      29 ++++++++++++++++-------------
         M src/simulation.jl                   |       4 +++-
       
       2 files changed, 19 insertions(+), 14 deletions(-)
       ---
 (DIR) diff --git a/src/interaction.jl b/src/interaction.jl
       t@@ -4,7 +4,8 @@ export interact!
        """
        Resolve mechanical interaction between all particle pairs.
        """
       -function interact!(simulation::Simulation)
       +function interact!(simulation::Simulation;
       +                   contact_model::String = "Linear Elastic No Tangential")
        
            # IceFloe to grain collisions
            while !isempty(simulation.contact_pairs)
       t@@ -13,7 +14,8 @@ function interact!(simulation::Simulation)
                contact_parallel_displacement = 
                    pop!(simulation.contact_parallel_displacement)
                interactIceFloes!(simulation, contact_pair[1], contact_pair[2],
       -                          overlap_vector, contact_parallel_displacement)
       +                          overlap_vector, contact_parallel_displacement,
       +                          contact_model=contact_model)
            end
        end
        
       t@@ -27,25 +29,27 @@ function interactIceFloes!(simulation::Simulation,
                                   i::Integer, j::Integer,
                                   overlap_vector::Array{Float64, 1},
                                   contact_parallel_displacement::Array{Float64, 1};
       -                           contact_normal::String = "LinearElasticNoTangential")
       +                           contact_model::String =
       +                               "Linear Elastic No Tangential")
        
            force = zeros(2)
        
       -    if contact_normal == "None"
       +    if contact_model == "None"
                return nothing
        
       -    elseif contact_normal == "LinearElasticNoTangential" ||
       -        contact_normal == "LinearElastic"
       +    elseif contact_model == "Linear Elastic No Tangential" ||
       +        contact_model == "LinearElastic"
                force_n = interactNormalLinearElastic(simulation, i, j, overlap_vector)
        
       -        if contact_normal == "LinearElastic"
       -            force_t, torque = interactTangentialLinearElastic(simulation, i, j,
       -                                                              overlap_vector,
       -                                                              contact_parallel_displacement)
       +        if contact_model == "Linear Elastic"
       +            force_t, torque = interactTangentialLinearElasticFrictional(
       +                                         simulation, i, j,
       +                                         overlap_vector,
       +                                         contact_parallel_displacement)
                end
        
            else
       -        error("Unknown contact_normal interaction model '$contact_normal'")
       +        error("Unknown contact_model interaction model '$contact_model'")
            end
        
            simulation.ice_floes[i].force += force_n;
       t@@ -78,7 +82,7 @@ export interactTangentialLinearElastic
        Resolves linear-elastic interaction between two ice floes in the 
        contact-parallel (tangential) direction.
        """
       -function interactTangentialLinearElastic(simulation::Simulation,
       +function interactTangentialLinearElasticFrictional(simulation::Simulation,
                                             i::Integer, j::Integer,
                                             overlap_vector::vector,
                                             contact_parallel_displacement::vector)
       t@@ -91,7 +95,6 @@ function interactTangentialLinearElastic(simulation::Simulation,
            n = overlap_vector/norm(overlap_vector)
            contact_parallel_displacement -= (n * dot(n, contact_parallel_displacement))
        
       -
            force_t = k_t_harmonic_mean * contact_parallel_displacement
        
            return force, torque, contact_parallel_displacement
 (DIR) diff --git a/src/simulation.jl b/src/simulation.jl
       t@@ -88,7 +88,9 @@ function run!(simulation::Simulation;
                      status_interval::Int=100,
                      show_file_output::Bool=true,
                      single_step::Bool=false,
       -              temporal_integration_method::String="Three-term Taylor")
       +              temporal_integration_method::String="Three-term Taylor",
       +              contact_model::String="Three-term Taylor",
       +             )
        
            if single_step && simulation.time >= simulation.time_total
                simulation.time_total += simulation.time_step