The dsgesv and zcgesv are mixed precision iterative refinement subroutines for exploiting fast single precision hardware. They first attempt to factorize the matrix in single precision (dsgesv) or single complex precision (zcgesv) and use this factorization within an iterative refinement procedure to produce a solution with double precision (dsgesv) / double complex precision (zcgesv) normwise backward error quality (see below). If the approach fails, the method switches to a double precision or double complex precision factorization respectively and computes the solution.
The iterative refinement is not going to be a winning strategy if the ratio single precision performance over double precision performance is too small. A reasonable strategy should take the number of right-hand sides and the size of the matrix into account. This might be done with a call to ilaenv in the future. At present, iterative refinement is implemented.
My question is whether I can force the double precision solution. My fear is that the system will deem the solution via "mixed precision" with "iterative refinement" to have succeeded when, in fact, in this challenging problem, it is bringing in non-trivial round-off. The "saving" in this instance, from using any "fast single precision hardware" may be counter-productive. Any ideas?
call gesv( a, b [,ipiv] [,info] )
If the required arguments are double precision, the call will be directed to the routine dgesv.
If the exhumed code contains specific assumptions regarding the floating point word size, precision, etc., those need to be changed from values applicable to the fossil system to values appropriate to the present platform.