Select Git revision
partition.cpp
-
Christophe Geuzaine authored
initializing the api now sets General.Terminal=1 (to print messages by default) and General.AbortOnError=2 (to throw an exception as soon as an error happens) - cf. #1043
Christophe Geuzaine authoredinitializing the api now sets General.Terminal=1 (to print messages by default) and General.AbortOnError=2 (to throw an exception as soon as an error happens) - cf. #1043
EigenSolve.cpp 1.78 KiB
// GetDP - Copyright (C) 1997-2018 P. Dular and C. Geuzaine, University of Liege
//
// See the LICENSE.txt file for license information. Please report all
// bugs and problems to the public mailing list <getdp@onelab.info>.
#include "GetDPConfig.h"
#include "Message.h"
#include "EigenSolve.h"
#if ((PETSC_VERSION_RELEASE == 0) || ((PETSC_VERSION_MAJOR == 3) && (PETSC_VERSION_MINOR >= 7)))
#define PetscTruth PetscBool
#define PetscOptionsGetTruth(A, B, C, D) PetscOptionsGetBool(A, NULL, B, C, D)
#elif ((PETSC_VERSION_MAJOR == 3) && (PETSC_VERSION_MINOR >= 2))
#define PetscTruth PetscBool
#define PetscOptionsGetTruth PetscOptionsGetBool
#endif
void EigenSolve(struct DofData * DofData_P, int NumEigenvalues,
double shift_r, double shift_i, int FilterExpressionIndex,
List_T *RationalCoefsNum, List_T *RationalCoefsDen)
{
#if defined(HAVE_ARPACK) && defined(HAVE_SLEPC)
// if both Arpack and SLEPC are available, use Arpack by default
// (set "-slepc" on the command line to force SLEPC)
PetscTruth slepc = PETSC_FALSE, set;
PetscOptionsGetTruth(PETSC_NULL, "-slepc", &slepc, &set);
if(slepc)
EigenSolve_SLEPC(DofData_P, NumEigenvalues, shift_r, shift_i,
FilterExpressionIndex,
RationalCoefsNum, RationalCoefsDen);
else
EigenSolve_ARPACK(DofData_P, NumEigenvalues, shift_r, shift_i,
FilterExpressionIndex);
#elif defined(HAVE_ARPACK)
EigenSolve_ARPACK(DofData_P, NumEigenvalues, shift_r, shift_i,
FilterExpressionIndex);
#elif defined(HAVE_SLEPC)
EigenSolve_SLEPC(DofData_P, NumEigenvalues, shift_r, shift_i,
FilterExpressionIndex,
RationalCoefsNum, RationalCoefsDen);
#else
Message::Error("EigenSolve not available without SLEPC or ARPACK");
#endif
}