Build hash table for fast fragment lookups
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| integer, | intent(in) | :: | polymers(:,:) | |||
| integer(kind=int64), | intent(in) | :: | fragment_count | |||
| integer, | intent(in) | :: | max_level | |||
| type(fragment_lookup_t), | intent(inout) | :: | lookup | |||
| type(error_t), | intent(out), | optional | :: | error |
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| integer, | private | :: | fragment_size | ||||
| integer(kind=int64), | private | :: | i | ||||
| type(error_t), | private | :: | insert_error | ||||
| type(timer_type), | private | :: | lookup_timer |
subroutine build_mbe_lookup_table(polymers, fragment_count, max_level, lookup, error) !! Build hash table for fast fragment lookups use mqc_error, only: error_t integer, intent(in) :: polymers(:, :) integer(int64), intent(in) :: fragment_count integer, intent(in) :: max_level type(fragment_lookup_t), intent(inout) :: lookup type(error_t), intent(out), optional :: error integer(int64) :: i integer :: fragment_size type(timer_type) :: lookup_timer type(error_t) :: insert_error call lookup_timer%start() call lookup%init(fragment_count) do i = 1_int64, fragment_count fragment_size = count(polymers(i, :) > 0) call lookup%insert(polymers(i, :), fragment_size, i, insert_error) if (insert_error%has_error()) then if (present(error)) then error = insert_error call error%add_context("build_mbe_lookup_table") end if return end if end do call lookup_timer%stop() call logger%debug("Time to build lookup table: "//to_char(lookup_timer%get_elapsed_time())//" s") call logger%debug("Hash table size: "//to_char(lookup%table_size)// & ", entries: "//to_char(lookup%n_entries)) end subroutine build_mbe_lookup_table