periodic_operator_checksum Function

public pure function periodic_operator_checksum(target_nodes, operator) result(checksum)

Arguments

Type IntentOptional Attributes Name
integer(kind=i32), intent(in) :: target_nodes(:)
real(kind=dp), intent(in) :: operator(:,:,:)

Return Value integer(kind=int64)


Called by

proc~~periodic_operator_checksum~~CalledByGraph proc~periodic_operator_checksum periodic_operator_checksum proc~read_periodic_operator_cache read_periodic_operator_cache proc~read_periodic_operator_cache->proc~periodic_operator_checksum proc~write_periodic_operator_cache write_periodic_operator_cache proc~write_periodic_operator_cache->proc~periodic_operator_checksum proc~precompute_periodic_root_operator precompute_periodic_root_operator proc~precompute_periodic_root_operator->proc~read_periodic_operator_cache proc~precompute_periodic_root_operator->proc~write_periodic_operator_cache proc~core_build_panel_plan_impl core_build_panel_plan_impl proc~core_build_panel_plan_impl->proc~precompute_periodic_root_operator proc~core_build_plan_impl core_build_plan_impl proc~core_build_plan_impl->proc~precompute_periodic_root_operator

Source Code

  pure integer(int64) function periodic_operator_checksum(target_nodes, operator) result(checksum)
    integer(i32), intent(in) :: target_nodes(:)
    real(dp), intent(in) :: operator(:, :, :)
    integer(int8), allocatable :: bytes(:)
    integer :: idx

    checksum = -3750763034362895579_int64
    bytes = transfer(target_nodes, bytes, size(target_nodes)*storage_size(0_i32)/8)
    do idx = 1, size(bytes)
      checksum = ieor(checksum, int(bytes(idx), int64))
      checksum = checksum*int(z'00000100000001B3', int64)
    end do
    bytes = transfer(operator, bytes, size(operator)*storage_size(0.0_dp)/8)
    do idx = 1, size(bytes)
      checksum = ieor(checksum, int(bytes(idx), int64))
      checksum = checksum*int(z'00000100000001B3', int64)
    end do
  end function periodic_operator_checksum