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