simulation_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)")