PACK intrinsic bug?
Dominique Dhumieres
dominiq@lps.ens.fr
Tue Aug 12 18:14:00 GMT 2008
As far as i can tell the problem is not with PACK, but with
exprs(:)(1:1)== some expr, as shown by the following reduced code:
module xparams
integer,parameter :: exprbeg=100,exprend=154
character(*),dimension(exprbeg:exprend),parameter :: &
exprs=(/'nint() ','log10() ','sqrt() ','acos() ','asin() ', &
'atan() ','cosh() ','sinh() ','tanh() ','int() ', &
'cos() ','sin() ','tan() ','exp() ','log() ','abs() ',&
'delta() ','step() ','rect() ','max(,) ','min(,) ','bj0() ',&
'bj1() ','bjn(,) ','by0() ','by1() ','byn(,) ','logb(,) ',&
'erf() ','erfc() ','lgamma()','gamma() ','csch() ','sech() ',&
'coth() ','lif(,,) ','gaus() ','sinc() ','atan2(,)','mod(,) ',&
'nthrt(,)','ramp() ','fbi() ','fbiq() ','uran(,) ','aif(,,,)',&
'sgn() ','cbrt() ','fact() ','somb() ','bk0() ','bk1() ',&
'bkn(,) ','bbi(,,) ','bbiq(,,)'/)
logical :: tmp(55,26)
character(26) :: al = 'abcdefghijklmnopqrstuvwxyz'
end
program pack_bug
use xparams
do i = 1, 1
tmp(:,i) = (exprs(:)(1:1)==al(i:i))
print '(55L)', exprs(:)(1:1)=='a'
print '(55L)', tmp(:,i)
end do
end
giving
FFFTTTFFFFFFFFFTFFFFFFFFFFFFFFFFFFFFFFTFFFFFFTFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
The first line is correct, but not the second one.
Unless someone has a better example, I'll submit a PR
ASAP.
Dominique
More information about the Fortran
mailing list