Base<F> LogBarrier ( UpperOrLower uplo, AbstractDistMatrix<F>& A, bool canOverwrite ) { DEBUG_ONLY(CSE cse("LogBarrier")) SafeProduct<Base<F>> safeDet = SafeHPDDeterminant( uplo, A, canOverwrite ); return -safeDet.kappa*safeDet.n; }
inline typename Base<F>::type HPDDeterminant( UpperOrLower uplo, DistMatrix<F>& A, bool canOverwrite ) { #ifndef RELEASE PushCallStack("HPDDeterminant"); #endif SafeProduct<F> safeDet = SafeHPDDeterminant( uplo, A, canOverwrite ); typename Base<F>::type det = Exp(safeDet.kappa*safeDet.n); #ifndef RELEASE PopCallStack(); #endif return det; }
inline typename Base<F>::type LogBarrier( UpperOrLower uplo, DistMatrix<F>& A, bool canOverwrite ) { #ifndef RELEASE PushCallStack("LogBarrier"); #endif SafeProduct<F> safeDet = SafeHPDDeterminant( uplo, A, canOverwrite ); typename Base<F>::type barrier = -safeDet.kappa*safeDet.n; #ifndef RELEASE PopCallStack(); #endif return barrier; }
LogBarrier( UpperOrLower uplo, DistMatrix<F>& A, bool canOverwrite=false ) { DEBUG_ONLY(CallStackEntry cse("LogBarrier")) SafeProduct<F> safeDet = SafeHPDDeterminant( uplo, A, canOverwrite ); return -safeDet.kappa*safeDet.n; }
LogBarrier( UpperOrLower uplo, const DistMatrix<F>& A ) { DEBUG_ONLY(CallStackEntry cse("LogBarrier")) SafeProduct<F> safeDet = SafeHPDDeterminant( uplo, A ); return -safeDet.kappa*safeDet.n; }
Base<F> LogBarrier( UpperOrLower uplo, const AbstractDistMatrix<F>& A ) { DEBUG_ONLY(CSE cse("LogBarrier")) SafeProduct<Base<F>> safeDet = SafeHPDDeterminant( uplo, A ); return -safeDet.kappa*safeDet.n; }