tutil.jl - Granular.jl - Julia package for granular dynamics simulation
HTML git clone git://src.adamsgaard.dk/Granular.jl
DIR Log
DIR Files
DIR Refs
DIR README
DIR LICENSE
---
tutil.jl (2112B)
---
1 #!/usr/bin/env julia
2
3 export randpower
4 """
5 randpower([nvals], [distribution_power], [min_val], [max_val])
6
7 Returns one or more random numbers from a power-law probability distribution.
8
9 # Arguments
10 * `dims::Any`: the dimensions of random values (default = 1)
11 * `distribution_power::Number`: the distribution power (default = 1.)
12 * `min_val::Number`: the lower bound of the distribution range (default = 0.)
13 * `max_val::Number`: the upper bound of the distribution range (default = 1.)
14 """
15 @inline function randpower(dims::Any = 1,
16 distribution_power::Number = 1.,
17 min_val::Number = 0.,
18 max_val::Number = 1.)
19
20 val = ((max_val^(distribution_power + 1.) -
21 min_val^(distribution_power + 1.)) * rand(Float64, dims) .+
22 min_val^(distribution_power + 1.)) .^
23 (1. / (distribution_power + 1.))
24
25 if dims == 1
26 return val[1]
27 else
28 return val
29 end
30 end
31
32 export harmonicMean
33 """
34 harmonicMean(a, b)
35
36 Returns the harmonic mean of two numbers `a::Number` and `b::Number`.
37 """
38 function harmonicMean(a::Number, b::Number)::Number
39 if a ≈ 0. && b ≈ 0
40 return 0.
41 else
42 return 2. * a * b / (a + b)
43 end
44 end
45
46 export vecTo3d
47 """
48 function vecTo3d(input, fill)
49
50 Convert a scalar or 2d vector to 3d by filling the missing component with the
51 value `fill`. The returned 3-component vector is a Vector (or 1d Array) of
52 the same type as the input.
53
54 # Arguments
55 * `input`: a scalar or two-component vector.
56 * `fill::Real`: value to use for third
57 """
58 function vecTo3d(input::Any; fill::Real = 0.0)
59 if length(input) > 3
60 error("vecTo3d requires a scalar or input vector to of length 3 or " *
61 "less, but input is $input")
62 elseif length(input) == 3
63 return input
64 elseif length(input) == 2
65 return [input[1], input[2], typeof(input[1])(fill)]
66 elseif length(input) == 1
67 return [input[1], typeof(input[1])(fill), typeof(input[1])(fill)]
68 else
69 error("input not understood: $input")
70 end
71 end
72