I have been using ormqr.hpp and recently got an error message saying:
Parameter 2 to routine ZUNMQR was incorrect
This parameter indicates whether a conjugate transpose is to be taken when applying a matrix Q. The valid options for the complex version are 'N' or 'C' (standing for No transpose or Conjugate transpose respectively) while for the single or double version, [DS]ORMQR the valid options are 'N' or 'T' (for No transpose or Transpose respectively). Now the reason I had a problem was because I passed 'T' to the complex version.
In ormqr.hpp there is an assert statment to ensure only valid options are passed to ormqr generally:
assert ( trans=='N' || trans=='C' || trans=='T' );
This obviously didn't catch my problem. It is easy to move this assertion into the more specific functions of ormqr that just call the LAPACK versions. This way you would have one of the two statements below and could avoid the error I got this morning.
assert ( trans=='N' || trans=='T'); // For single or double precision
assert ( trans=='N' || trans=='C'); // For complex numbers
I can make this change and submit a patch, but I wanted to get others' opinions. It seems like the specific functions "want" to remain clean and only make the call to LAPACK and nothing else. That is why I hesitate to put the assert in them.
What do you think is the best thing to do? I hope my explanation was clear enough.