*> \brief \b SROUNDUP_LWORK * * =========== DOCUMENTATION =========== * * Online html documentation available at * http://www.netlib.org/lapack/explore-html/ * * Definition: * =========== * * REAL FUNCTION SROUNDUP_LWORK( LWORK ) * * .. Scalar Arguments .. * INTEGER LWORK * .. * * *> \par Purpose: * ============= *> *> \verbatim *> *> SROUNDUP_LWORK deals with a subtle bug with returning LWORK as a Float. *> This routine guarantees it is rounded up instead of down by *> multiplying LWORK by 1+eps when it is necessary, where eps is the relative machine precision. *> E.g., *> *> float( 16777217 ) == 16777216 *> float( 16777217 ) * (1.+eps) == 16777218 *> *> \return SROUNDUP_LWORK *> \verbatim *> SROUNDUP_LWORK >= LWORK. *> SROUNDUP_LWORK is guaranteed to have zero decimal part. *> \endverbatim * * Arguments: * ========== * *> \param[in] LWORK Workspace size. * * Authors: * ======== * *> \author Weslley Pereira, University of Colorado Denver, USA * *> \ingroup auxOTHERauxiliary * *> \par Further Details: * ===================== *> *> \verbatim *> This routine was inspired in the method `magma_zmake_lwork` from MAGMA. *> \see https://bitbucket.org/icl/magma/src/master/control/magma_zauxiliary.cpp *> \endverbatim * * ===================================================================== REAL FUNCTION SROUNDUP_LWORK( LWORK ) * * -- LAPACK auxiliary routine -- * -- LAPACK is a software package provided by Univ. of Tennessee, -- * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- * * .. Scalar Arguments .. INTEGER LWORK * .. * * ===================================================================== * .. * .. Intrinsic Functions .. INTRINSIC EPSILON, REAL, INT * .. * .. Executable Statements .. * .. SROUNDUP_LWORK = REAL( LWORK ) * IF( INT( SROUNDUP_LWORK ) .LT. LWORK ) THEN * Force round up of LWORK SROUNDUP_LWORK = SROUNDUP_LWORK * ( 1.0E+0 + EPSILON(0.0E+0) ) ENDIF * RETURN * * End of SROUNDUP_LWORK * END