tcheck for nan in harmonic mean operation, return 0 if true. Add more tests - 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 e667d41a9b5f93780dc7d493620590183acdec10
 (DIR) parent 8c6f1f493f21bb6512ce390951af2aa1e3d33bfd
 (HTM) Author: Anders Damsgaard <andersd@riseup.net>
       Date:   Tue,  2 May 2017 15:48:20 -0400
       
       check for nan in harmonic mean operation, return 0 if true. Add more tests
       
       Diffstat:
         M examples/nares_strait.jl            |       7 ++-----
         M src/interaction.jl                  |       6 +++++-
         M src/temporal_integration.jl         |       2 +-
         M test/collision-2floes-oblique.jl    |      87 +++++++++++++++++++++++++++++--
       
       4 files changed, 90 insertions(+), 12 deletions(-)
       ---
 (DIR) diff --git a/examples/nares_strait.jl b/examples/nares_strait.jl
       t@@ -116,7 +116,8 @@ SeaIce.setTimeStep!(sim)
        # Run simulation for 10 time steps, then add new icefloes from the top
        while sim.time < sim.time_total
            for it=1:10
       -        SeaIce.run!(sim, status_interval=1, single_step=true)
       +        SeaIce.run!(sim, status_interval=1, single_step=true,
       +                   contact_tangential_rheology="Linear Viscous Frictional")
            end
            for i=1:size(sim.ocean.xh, 1)
                if sim.ocean.ice_floe_list[i, end] == []
       t@@ -137,7 +138,3 @@ while sim.time < sim.time_total
                end
            end
        end
       -
       -
       -
       -
 (DIR) diff --git a/src/interaction.jl b/src/interaction.jl
       t@@ -122,7 +122,11 @@ function interactTangentialLinearViscousFrictional(simulation::Simulation,
        end
        
        function harmonicMean(a::Any, b::Any)
       -    return 2.*a*b/(a + b)
       +    hm = 2.*a*b/(a + b)
       +    if isnan(hm)
       +        return 0.
       +    end
       +    return hm
        end
        
        function findTorque(simulation::Simulation, overlap_vector::vector, 
 (DIR) diff --git a/src/temporal_integration.jl b/src/temporal_integration.jl
       t@@ -73,7 +73,7 @@ freedom for an `icefloe`.
        """
        function updateIceFloeKinematicsThreeTermTaylor!(icefloe::IceFloeCylindrical,
                                                         simulation::Simulation)
       -    
       +
            if simulation.time_iteration == 0
                lin_acc_0 = zeros(2)
                ang_acc_0 = 0.
 (DIR) diff --git a/test/collision-2floes-oblique.jl b/test/collision-2floes-oblique.jl
       t@@ -123,12 +123,68 @@ E_kin_rot_final = SeaIce.totalIceFloeKineticRotationalEnergy(sim)
        
        
        info("## Contact-normal elasticity and tangential viscosity and friction")
       +info("Testing gamma_t = 0.")
       +sim = SeaIce.createSimulation(id="test")
       +SeaIce.addIceFloeCylindrical(sim, [0., 10.], 10., 1., verbose=verbose)
       +SeaIce.addIceFloeCylindrical(sim, [19.0, 0.], 10., 1., verbose=verbose)
       +sim.ice_floes[1].lin_vel[1] = 0.1
       +
       +E_kin_lin_init = SeaIce.totalIceFloeKineticTranslationalEnergy(sim)
       +E_kin_rot_init = SeaIce.totalIceFloeKineticRotationalEnergy(sim)
       +
       +# With decreasing timestep (epsilon towards 0), the explicit integration scheme 
       +# should become more correct
       +
       +SeaIce.setTotalTime!(sim, 30.0)
       +sim_init = deepcopy(sim)
       +
       +info("Testing kinetic energy conservation with Two-term Taylor scheme")
       +SeaIce.setTimeStep!(sim, epsilon=0.07)
       +tol = 0.2
       +info("Relative tolerance: $(tol*100.)% with time step: $(sim.time_step)")
       +E_kin_lin_init = SeaIce.totalIceFloeKineticTranslationalEnergy(sim)
       +E_kin_rot_init = SeaIce.totalIceFloeKineticRotationalEnergy(sim)
       +SeaIce.run!(sim, temporal_integration_method="Two-term Taylor",
       +            contact_tangential_rheology="Linear Viscous Frictional", 
       +            verbose=verbose)
       +
       +@test sim.ice_floes[1].ang_pos ≈ 0.
       +@test sim.ice_floes[1].ang_vel ≈ 0.
       +@test sim.ice_floes[2].ang_pos ≈ 0.
       +E_kin_lin_final = SeaIce.totalIceFloeKineticTranslationalEnergy(sim)
       +E_kin_rot_final = SeaIce.totalIceFloeKineticRotationalEnergy(sim)
       +@test_approx_eq_eps E_kin_lin_init E_kin_lin_final E_kin_lin_init*tol
       +@test_approx_eq E_kin_rot_init E_kin_rot_final
       +
       +info("Testing kinetic energy conservation with Three-term Taylor scheme")
       +sim = deepcopy(sim_init)
       +SeaIce.setTimeStep!(sim, epsilon=0.07)
       +tol = 0.02
       +info("Relative tolerance: $(tol*100.)% with time step: $(sim.time_step)")
       +E_kin_lin_init = SeaIce.totalIceFloeKineticTranslationalEnergy(sim)
       +E_kin_rot_init = SeaIce.totalIceFloeKineticRotationalEnergy(sim)
       +SeaIce.run!(sim, temporal_integration_method="Three-term Taylor",
       +            contact_tangential_rheology="Linear Viscous Frictional", 
       +            verbose=verbose)
       +
       +@test sim.ice_floes[1].ang_pos ≈ 0.
       +@test sim.ice_floes[1].ang_vel ≈ 0.
       +@test sim.ice_floes[2].ang_pos ≈ 0.
       +E_kin_lin_final = SeaIce.totalIceFloeKineticTranslationalEnergy(sim)
       +E_kin_rot_final = SeaIce.totalIceFloeKineticRotationalEnergy(sim)
       +@test_approx_eq_eps E_kin_lin_init E_kin_lin_final E_kin_lin_init*tol
       +@test_approx_eq E_kin_rot_init E_kin_rot_final
       +
       +
       +info("## Contact-normal elasticity and tangential viscosity and friction")
        info("# One ice floe fixed")
        sim = SeaIce.createSimulation(id="test")
        SeaIce.addIceFloeCylindrical(sim, [0., 10.], 10., 1., verbose=verbose)
        SeaIce.addIceFloeCylindrical(sim, [19., 0.], 10., 1., verbose=verbose)
        sim.ice_floes[1].lin_vel[1] = 0.1
        sim.ice_floes[2].fixed = true
       +sim.ice_floes[1].contact_viscosity_tangential = 1e4
       +sim.ice_floes[2].contact_viscosity_tangential = 1e4
        
        E_kin_lin_init = SeaIce.totalIceFloeKineticTranslationalEnergy(sim)
        E_kin_rot_init = SeaIce.totalIceFloeKineticRotationalEnergy(sim)
       t@@ -142,7 +198,7 @@ sim_init = deepcopy(sim)
        
        info("Testing kinetic energy conservation with Two-term Taylor scheme")
        SeaIce.setTimeStep!(sim, epsilon=0.07)
       -tol = 0.5
       +tol = 0.2
        info("Relative tolerance: $(tol*100.)% with time step: $(sim.time_step)")
        SeaIce.run!(sim, temporal_integration_method="Two-term Taylor",
                    contact_tangential_rheology="Linear Viscous Frictional",
       t@@ -156,11 +212,30 @@ E_kin_lin_final = SeaIce.totalIceFloeKineticTranslationalEnergy(sim)
        E_kin_rot_final = SeaIce.totalIceFloeKineticRotationalEnergy(sim)
        @test_approx_eq_eps E_kin_lin_init+E_kin_rot_init E_kin_lin_final+E_kin_rot_final E_kin_lin_init*tol
        
       +info("mu_d = 0.")
       +sim = deepcopy(sim_init)
       +sim.ice_floes[1].contact_dynamic_friction = 0.
       +SeaIce.setTimeStep!(sim, epsilon=0.07)
       +tol = 0.02
       +info("Relative tolerance: $(tol*100.)% with time step: $(sim.time_step)")
       +E_kin_lin_init = SeaIce.totalIceFloeKineticTranslationalEnergy(sim)
       +E_kin_rot_init = SeaIce.totalIceFloeKineticRotationalEnergy(sim)
       +SeaIce.run!(sim, temporal_integration_method="Three-term Taylor",
       +            contact_tangential_rheology="Linear Viscous Frictional", 
       +            verbose=verbose)
       +
       +@test sim.ice_floes[1].ang_pos ≈ 0.
       +@test sim.ice_floes[1].ang_vel ≈ 0.
       +@test sim.ice_floes[2].ang_pos ≈ 0.
       +E_kin_lin_final = SeaIce.totalIceFloeKineticTranslationalEnergy(sim)
       +E_kin_rot_final = SeaIce.totalIceFloeKineticRotationalEnergy(sim)
       +@test_approx_eq_eps E_kin_lin_init E_kin_lin_final E_kin_lin_init*tol
       +@test_approx_eq E_kin_rot_init E_kin_rot_final
        
        info("Testing kinetic energy conservation with Two-term Taylor scheme")
        sim = deepcopy(sim_init)
        SeaIce.setTimeStep!(sim, epsilon=0.007)
       -tol = 0.2
       +tol = 0.06
        info("Relative tolerance: $(tol*100.)%")
        SeaIce.run!(sim, temporal_integration_method="Two-term Taylor",
                    contact_tangential_rheology="Linear Viscous Frictional", 
       t@@ -178,7 +253,7 @@ E_kin_rot_final = SeaIce.totalIceFloeKineticRotationalEnergy(sim)
        info("Testing kinetic energy conservation with Three-term Taylor scheme")
        sim = deepcopy(sim_init)
        SeaIce.setTimeStep!(sim, epsilon=0.07)
       -tol = 0.2
       +tol = 0.07
        info("Relative tolerance: $(tol*100.)% with time step: $(sim.time_step)")
        SeaIce.run!(sim, temporal_integration_method="Three-term Taylor",
                    contact_tangential_rheology="Linear Viscous Frictional", 
       t@@ -198,6 +273,8 @@ sim = SeaIce.createSimulation(id="test")
        SeaIce.addIceFloeCylindrical(sim, [0., 10.], 10., 1., verbose=verbose)
        SeaIce.addIceFloeCylindrical(sim, [19.0, 0.], 10., 1., verbose=verbose)
        sim.ice_floes[1].lin_vel[1] = 0.1
       +sim.ice_floes[1].contact_viscosity_tangential = 1e4
       +sim.ice_floes[2].contact_viscosity_tangential = 1e4
        
        E_kin_lin_init = SeaIce.totalIceFloeKineticTranslationalEnergy(sim)
        E_kin_rot_init = SeaIce.totalIceFloeKineticRotationalEnergy(sim)
       t@@ -227,7 +304,7 @@ E_kin_rot_final = SeaIce.totalIceFloeKineticRotationalEnergy(sim)
        info("Testing kinetic energy conservation with Two-term Taylor scheme")
        sim = deepcopy(sim_init)
        SeaIce.setTimeStep!(sim, epsilon=0.007)
       -tol = 0.1
       +tol = 0.05
        info("Relative tolerance: $(tol*100.)%")
        SeaIce.run!(sim, temporal_integration_method="Two-term Taylor",
                    contact_tangential_rheology="Linear Viscous Frictional", 
       t@@ -241,7 +318,7 @@ E_kin_rot_final = SeaIce.totalIceFloeKineticRotationalEnergy(sim)
        info("Testing kinetic energy conservation with Three-term Taylor scheme")
        sim = deepcopy(sim_init)
        SeaIce.setTimeStep!(sim, epsilon=0.07)
       -tol = 0.1
       +tol = 0.05
        info("Relative tolerance: $(tol*100.)% with time step: $(sim.time_step)")
        SeaIce.run!(sim, temporal_integration_method="Three-term Taylor",
                    contact_tangential_rheology="Linear Viscous Frictional",