Hello,
In file dictionary.f90 you have:
integer, parameter, private :: multiplier = 31
...
integer function dict_hashkey( key )
character(len=*), intent(in) :: key
integer :: hash
integer :: i
dict_hashkey = 0
do i = 1,len(key)
dict_hashkey = multiplier * dict_hashkey + ichar(key(i:i))
enddo
dict_hashkey = 1 + mod( dict_hashkey-1, hash_size )
end function dict_hashkey
These pieces of code work only for small keys, if key has length more then 4-5 symbols (like "Piano2" in you test_dict.f90) variable dict_hashkey becomes too big for integer (it seems because of big multiplier). In Intel Fortran after overflowing integer size 2,147,483,647dict_hashkey becomes negative and rest of code breaks.
Why multiplier is so big? I've tried with multiplier=3 and it help a little to increase max key size.
31 is one of the numbers that give a good hash key (there is ample literature on the
subject - you can not pick just any number).
However, the integer overflow is a bad one. I will look into it. Thanks for reporting
this issue.