Here's a fun problem that I have encountered. It might be a bug, or it might not (I've run out of patience with google-ing it now I have my program working).
I have a two dimensional matrix. I sum it down one dimension and then find the position of the maximum entry.
subroutine ionfinder(subframe,x_dim,y_dim, irow, icol)
! define imputs, and function type itself
integer, intent(in) :: x_dim, y_dim
integer, intent(in) :: subframe(x_dim,y_dim)
integer, intent(out) :: irow, icol(4) !ion positions
! the code follows...*********************
irow = maxloc(sum(subframe,1))
write(*,*) 'ions in row (y): ', irow
end subroutine ionfinder
...but this causes my compiler (gfortran) to shriek:
irow = maxloc(sum(subframe,1))
1
Error: Incompatible ranks 0 and 1 in assignment at (1)
Huuuurrrmmm. Seems a bit silly, but the following kludge fixes things:
subroutine ionfinder(subframe,x_dim,y_dim, irow, icol)
! define imputs, and function type itself
integer, intent(in) :: x_dim, y_dim
integer, intent(in) :: subframe(x_dim,y_dim)
integer, intent(out) :: irow, icol(4) !ion positions
! define other datum within function
integer tmp(1)
! the code follows...*********************
tmp = maxloc(sum(subframe,1))
irow = tmp(1)
write(*,*) 'ions in row (y): ', irow
end subroutine ionfinder
Well well well. I should probably investigate the cause further but I'm not going to because I have physics to do, not Fortran to fix.
Subscribe to:
Post Comments (Atom)
1 comment:
I ran into the same issue when assigning a series of 1D arrays to a 2D array. I guess gfortran really wants to see explicit array shape (i.e. it can't automatically determine that a scalar is the same as an array of length 1 or a 1x1 matrix.)
The RESHAPE() command may also help if refactoring the whole code isn't an option.
Post a Comment