Patch provided by Lawrence Mulholland from Nag on Nov 1st 2013
authorjulie <julielangou@users.noreply.github.com>
Sun, 17 Nov 2013 00:01:25 +0000 (00:01 +0000)
committerjulie <julielangou@users.noreply.github.com>
Sun, 17 Nov 2013 00:01:25 +0000 (00:01 +0000)
commit1b0d1a35823660f0c4340a985a01bbb705b2be24
treeae90121c2b7d18ff5754054f2bf09e47b83a05f7
parent6159678a506a95f2d5442c3876c32c7e12b710b3
Patch provided by Lawrence Mulholland from Nag on Nov 1st 2013

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.
25 files changed:
SRC/cbbcsd.f
SRC/cgemqrt.f
SRC/clahef_rook.f
SRC/ctpmqrt.f
SRC/ctpqrt.f
SRC/cunbdb.f
SRC/cuncsd.f
SRC/dbbcsd.f
SRC/dgemqrt.f
SRC/dorbdb.f
SRC/dorcsd.f
SRC/dtpmqrt.f
SRC/dtpqrt.f
SRC/sbbcsd.f
SRC/sgemqrt.f
SRC/sorbdb.f
SRC/sorcsd.f
SRC/stpmqrt.f
SRC/stpqrt.f
SRC/zbbcsd.f
SRC/zgemqrt.f
SRC/ztpmqrt.f
SRC/ztpqrt.f
SRC/zunbdb.f
SRC/zuncsd.f