sourcery_bin_s.f90 Source File


This file depends on

sourcefile~~sourcery_bin_s.f90~~EfferentGraph sourcefile~sourcery_bin_s.f90 sourcery_bin_s.f90 sourcefile~sourcery_bin_m.f90 sourcery_bin_m.f90 sourcefile~sourcery_bin_s.f90->sourcefile~sourcery_bin_m.f90

Source Code

submodule(sourcery_bin_m) sourcery_bin_s
  use assert_m, only : assert, intrinsic_array_t
  implicit none

contains

  module procedure construct

      call assert( num_items>=num_bins, "bin_s(construct): num_items>=num_bins", intrinsic_array_t([num_items,num_bins]))

      associate( remainder => mod(num_items, num_bins), items_per_bin => num_items/num_bins)

        if (bin_number <= remainder) then
          bin%first_ = 1 + (bin_number-1)*(items_per_bin+1)
          bin%last_  = bin_number*(items_per_bin+1)
        else
          bin%first_ = 1 + (remainder-1)*(items_per_bin+1) + 1 + (bin_number-remainder)*items_per_bin
          bin%last_ = remainder*(items_per_bin+1) + (bin_number-remainder)*items_per_bin
        end if

      end associate

  end procedure

  module procedure first
    first_item_number  = self%first_
  end procedure

  module procedure last
    last_item_number = self%last_
  end procedure

end submodule sourcery_bin_s