to prevent accuracy loss when REAL or DOUBLE PRECISION types
correspond to an extended precision real kind. These constants
should be sufficient to work with 128-bit extended-IEEE data
type.
Rebuilding the modified source using the default gfortran make.inc
(with gfortran 7.5.0) does not add any new test failures. The
only test failure, which is also present in the master baranch, is:
ZDRGEV3: ZGGEV31 returned INFO= 7.
N= 12, JTYPE= 16, ISEED=( 2855, 3551, 2406, 2393)
Additionally, included a sample build file for quadruple-precision
compilation using gfortran (version 4.7 or later). With this
config file, both REAL and DOUBLE PRECISION are mapped onto
a 128-bit REAL(16) type, with the corresponding change to the
COMPLEX and COMPLEX*16.
There are numerical failure 6 failures for each type, all in
*GBSVX type 6 matrix, with S/D routines losing 4 significant
digits, and C/Z routines 5 digits relative to the expected
result. I am not really qualified to debug this failure ...
This is really old school, but a lot of times we have users sending us
copy pasting of codes, and that is the only way to know the version of
the code.
This is mostly a long term maintenance improvement.
Many coding styles require elimination of trailing whitespace, and
many editors and source code management configurations automatically
gobble up whitespace. When these tools gobble up whitespace, it
complicates reviewing the meaningful code changes.
By removing whitespace on one patch, it makes future
code reviews much easier.
=SCRIPT====================================================================
if which tempfile &>/dev/null; then
TEMPMAKER=tempfile
elif which mktemp &>/dev/null; then
TEMPMAKER=mktemp
else
echo "Cannot find tempfile program." 2>&1
exit 1
fi
MYTEMP=$($TEMPMAKER)
trap 'rm -f $MYTEMP' SIGINT SIGTERM
stripit() {
echo "stripping $1"
sed 's/[ \t]*$//' "$1" > $MYTEMP
cp $MYTEMP "$1"
}
if [ $# -gt 0 ]; then
while [ "$1" != "" ]; do
stripit $1
shift
done
else
while read -t 2; do
stripit $REPLY
done
fi
rm $MYTEMP
=================================================
Email below:
============
I have been incorporating some routines into the NAG Library,
which means some automatic code translation and writing some
example and test programs.
The routines I have been adding are:
?geqrt, ?gemqrt, ?tpqrt, ?tpmqrt, ?orcsd, ?uncsd
At the end of this message I will give you my current svn status
and svn diff for consideration and approval before I commit.
In each case, when testing immediate exits, my tests failed because
constraints were mutually exclusive for the immediate return case.
I have already committed changes to the constraints for some of
the above to allow immediate exit.
I have completed this for the remainder of this set.
Less importantly, there are things in the code that trip up a checking
compiler:
a) an
IF ( clause1(i) .AND. clause2(array(i)) ) THEN
where array(i) is either not initialized or is out of bounds if
clause1(i) is .FALSE.
This is wrong since a Fortran compiler is at liberty to test clause2 first.
In my changes this has been split into two as best suits the case.
b) an
CALL SUB (i, array(N-i+2))
with i = 1 and array(N+1) either not initialized or out of bounds, but
internally array(N+1) is not referenced.
In this case I don't think the Fortran standard is clear, but it trips up the
nagfor compiler with checking on. So in the NAG incorporated versions
of Lapack routines such calls are protected and/or
a special i=1 call is made.
The changes I want to commit also do this.
c) workspace queries passing zero instead of array references
e.g.
lwork = -1
call barf(n,m,0,0,0,0,0,-1,info)
a checking compiler won't like this.
I have changed cases like this to pass available arrays of sufficient size
and the right shape in place of the zeros.
Use \par instead of \details for section.
add a Contributors Section and a Reference Section.
Remove (some) verbatim section when not needed.
Those changes have been done by hand so I am not sure I manage to catch them all.