All driver and computational routines have a diagnostic argument INFO that indicates the success or failure of the computation. It is recommended that the user always check the value of INFO on exit from calling a ScaLAPACK routine. The value of INFO is defined as follows:
The value of (INFO<0) is calculated as follows: if the error is detected in the jth entry of a descriptor array, which is the ith argument in the parameter list, the number passed to the error-handling routine PXERBLA() has been arbitrarily chosen to be . This allows the user to distinguish an error on a descriptor entry from an error on a scalar argument.
The standard version of PXERBLA() only issues an error message and does not halt execution of the program. The main reason for this behavior is that some ``errors'' are deemed recoverable and we wanted to allow the user the flexibility to continue program execution if certain values were corrected. If user wish to change this behavior and additionally halt execution of the program, they may add a call to BLACS_ABORT() to their version of PXERBLA().
If an input error (INFO<0) is detected at a high-level routine (ScaLAPACK driver or computational routine), it is possible for the user to recover from such an error and proceed with the computation. An error message is printed by PXERBLA(), a RETURN is issued, and the program execution continues. However, if an error is detected in a low-level ScaLAPACK routine, this error is considered unrecoverable, a message is printed by PXERBLA(), and program execution is terminated by a call to BLACS_ABORT() .
Likewise, if an error is detected at a low-level routine, such as a PBLAS or BLACS routine, this error is deemed fatal. An error message is printed, and the program execution is terminated by the specific error-handling routine.
All ScaLAPACK driver and computational routines perform global and local input error-checking. In general, no input error-checking is performed on the auxiliary routines. The exception to this rule is for the auxiliary routines which are Level 2 versions of computational routines (e.g., PxGETF2, PxGEQR2, PxORMR2, PxORM2R, etc.). For efficiency purposes, these specialized low-level routines perform only a local validity check of their argument list. If an error is detected in at least one process of the current context, the program execution is stopped.