1
- function fill_A_S_M (A, S, M, A_indices, S_indices, M_indices, parameters)
2
- for (iA, iS, par) in zip (A_indices, S_indices, parameters)
1
+ # fill A, S, and M matrices with the parameter values according to the parameters map
2
+ function fill_A_S_M! (
3
+ A:: AbstractMatrix ,
4
+ S:: AbstractMatrix ,
5
+ M:: Union{AbstractVector, Nothing} ,
6
+ A_indices:: AbstractArrayParamsMap ,
7
+ S_indices:: AbstractArrayParamsMap ,
8
+ M_indices:: Union{AbstractArrayParamsMap, Nothing} ,
9
+ parameters:: AbstractVector ,
10
+ )
11
+ @inbounds for (iA, iS, par) in zip (A_indices, S_indices, parameters)
3
12
for index_A in iA
4
13
A[index_A] = par
5
14
end
@@ -10,22 +19,28 @@ function fill_A_S_M(A, S, M, A_indices, S_indices, M_indices, parameters)
10
19
end
11
20
12
21
if ! isnothing (M)
13
- for (iM, par) in zip (M_indices, parameters)
22
+ @inbounds for (iM, par) in zip (M_indices, parameters)
14
23
for index_M in iM
15
24
M[index_M] = par
16
25
end
17
26
end
18
27
end
19
28
end
20
29
21
- function get_parameter_indices (parameters, M; linear = true , kwargs... )
22
- M_indices = [findall (x -> (x == par), M) for par in parameters]
23
-
24
- if linear
25
- M_indices = cartesian2linear .(M_indices, [M])
30
+ # build the map from the index of the parameter to the linear indices
31
+ # of this parameter occurences in M
32
+ # returns ArrayParamsMap object
33
+ function array_parameters_map (parameters:: AbstractVector , M:: AbstractArray )
34
+ params_index = Dict (param => i for (i, param) in enumerate (parameters))
35
+ T = Base. eltype (eachindex (M))
36
+ res = [Vector {T} () for _ in eachindex (parameters)]
37
+ for (i, val) in enumerate (M)
38
+ par_ind = get (params_index, val, nothing )
39
+ if ! isnothing (par_ind)
40
+ push! (res[par_ind], i)
41
+ end
26
42
end
27
-
28
- return M_indices
43
+ return res
29
44
end
30
45
31
46
function eachindex_lower (M; linear_indices = false , kwargs... )
@@ -49,9 +64,6 @@ function linear2cartesian(ind_lin, dims)
49
64
return ind_cart
50
65
end
51
66
52
- cartesian2linear (ind_cart, A:: AbstractArray ) = cartesian2linear (ind_cart, size (A))
53
- linear2cartesian (ind_linear, A:: AbstractArray ) = linear2cartesian (ind_linear, size (A))
54
-
55
67
function set_constants! (M, M_pre)
56
68
for index in eachindex (M)
57
69
δ = tryparse (Float64, string (M[index]))
@@ -85,12 +97,18 @@ function get_matrix_derivative(M_indices, parameters, n_long)
85
97
return ∇M
86
98
end
87
99
88
- function fill_matrix (M, M_indices, parameters)
100
+ # fill M with parameters
101
+ function fill_matrix! (
102
+ M:: AbstractMatrix ,
103
+ M_indices:: AbstractArrayParamsMap ,
104
+ parameters:: AbstractVector ,
105
+ )
89
106
for (iM, par) in zip (M_indices, parameters)
90
107
for index_M in iM
91
108
M[index_M] = par
92
109
end
93
110
end
111
+ return M
94
112
end
95
113
96
114
function get_partition (A_indices, S_indices)
0 commit comments