seaice-experiments

sea ice experiments using Granular.jl
git clone git://src.adamsgaard.dk/seaice-experiments # fast
git clone https://src.adamsgaard.dk/seaice-experiments.git # slow
Log | Files | Refs | README | LICENSE Back to index

simulation_benchmark.jl (1482B)


      1 #/usr/bin/env julia
      2 ENV["MPLBACKEND"] = "Agg"
      3 import Granular
      4 import JLD
      5 
      6 
      7 const N = 30e3
      8 const n_runs = 1000
      9 
     10 ## Coulomb-frictional model
     11 function prepare_simulation(sim::Granular.Simulation)
     12     sim = Granular.readSimulation(sim)
     13     sim.id = "$(sim.id)-benchmark"
     14     Granular.resetTime!(sim)
     15     Granular.setTotalTime!(sim, 1.)
     16     Granular.setOutputFileInterval!(sim, 0.)
     17     return sim
     18 end
     19 
     20 function benchmark_interaction(sim::Granular.Simulation, n_runs::Int)
     21     time = zeros(n_runs)
     22     for i=1:n_runs
     23         Granular.interact!(sim)
     24         Granular.interact!(sim)
     25         t = @elapsed(Granular.interact!(sim))
     26         time[i] = t
     27     end
     28     return time
     29 end
     30 
     31 
     32 sim = Granular.createSimulation("mohr_coulomb_mu0.3_sigma_c0kPa.pdf-seed1-cons-N$(N)Pa")
     33 sim = prepare_simulation(sim)
     34 time_frictional = benchmark_interaction(sim, n_runs)
     35 
     36 sim = Granular.createSimulation("mohr_coulomb_mu0.3_sigma_c0kPa.pdf-seed1-cons-N$(N)Pa")
     37 sim = prepare_simulation(sim)
     38 for grain in sim.grains
     39     grain.rotating = false
     40 end
     41 time_cohesive = benchmark_interaction(sim, n_runs)
     42 
     43 time_frictional_mean = mean(time_frictional)
     44 time_frictional_std  = std(time_frictional)
     45 time_cohesive_mean   = mean(time_cohesive)
     46 time_cohesive_std    = std(time_cohesive)
     47 
     48 println("Frictional: mean = $time_frictional_mean, std = $time_frictional_std")
     49 println("Cohesive:   mean = $time_cohesive_mean, std = $time_cohesive_std")
     50 println("Speedup of cohesive model: $(time_frictional_mean/time_cohesive_mean)")