-
Peter Jentsch authoredPeter Jentsch authored
contact_vectors.jl 1.33 KiB
@inline function reindex!(k,csum,index_list_i,index_list_j,j_to_i_contacts,i_to_j_contacts,sample_list_i,sample_list_j)
i_index = index_list_i[k]
j_index = index_list_j[k]
csum += j_to_i_contacts[j_index] - i_to_j_contacts[i_index] + sample_list_i[k] - sample_list_j[k]
i_to_j_contacts[i_index] = sample_list_i[k]
j_to_i_contacts[j_index] = sample_list_j[k]
return csum
end
function generate_contact_vectors!(ij_dist,ji_dist,i_to_j_contacts::Vector{T}, j_to_i_contacts::Vector{T}) where T
rand!(RNG,ij_dist,i_to_j_contacts)
rand!(RNG,ji_dist,j_to_i_contacts)
l_i = length(i_to_j_contacts)
l_j = length(j_to_i_contacts)
csum = sum(i_to_j_contacts) - sum(j_to_i_contacts)
inner_iter = 10
index_list_i = @MVector zeros(Int,inner_iter)
index_list_j = similar(index_list_i)
sample_list_i = @MVector zeros(T,inner_iter)
sample_list_j = similar(sample_list_i)
while csum != 0
sample!(RNG,1:l_i,index_list_i)
sample!(RNG,1:l_j,index_list_j)
rand!(RNG,ij_dist,sample_list_i)
rand!(RNG,ji_dist,sample_list_j)
@inbounds for i = 1:inner_iter
if csum != 0
csum = reindex!(i,csum,index_list_i,index_list_j,j_to_i_contacts,i_to_j_contacts,sample_list_i,sample_list_j)
end
end
end
return nothing
end