Extend hypre complex (#824)
* Enable HYPRE_COMPLEX to accept precision types supported by hypre.
This commit is contained in:
parent
c964884062
commit
ddc548f906
@ -17,6 +17,8 @@
|
||||
#include "_hypre_utilities.h"
|
||||
#include "fortran.h"
|
||||
|
||||
#include <HYPRE_config.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
@ -27,6 +29,29 @@ extern "C" {
|
||||
|
||||
#ifndef HYPRE_USING_HYPRE_BLAS
|
||||
|
||||
#if defined(HYPRE_SINGLE)
|
||||
#define hypre_dasum hypre_F90_NAME_BLAS(sasum ,SASUM )
|
||||
#define hypre_daxpy hypre_F90_NAME_BLAS(saxpy ,SAXPY )
|
||||
#define hypre_dcopy hypre_F90_NAME_BLAS(scopy ,SCOPY )
|
||||
#define hypre_ddot hypre_F90_NAME_BLAS(sdot ,SDOT )
|
||||
#define hypre_dgemm hypre_F90_NAME_BLAS(sgemm ,SGEMM )
|
||||
#define hypre_dgemv hypre_F90_NAME_BLAS(sgemv ,SGEMV )
|
||||
#define hypre_dger hypre_F90_NAME_BLAS(sger ,SGER )
|
||||
#define hypre_dnrm2 hypre_F90_NAME_BLAS(snrm2 ,SNRM2 )
|
||||
#define hypre_drot hypre_F90_NAME_BLAS(srot ,SROT )
|
||||
#define hypre_dscal hypre_F90_NAME_BLAS(sscal ,SSCAL )
|
||||
#define hypre_dswap hypre_F90_NAME_BLAS(sswap ,SSWAP )
|
||||
#define hypre_dsymm hypre_F90_NAME_BLAS(ssymm ,SSYMM )
|
||||
#define hypre_dsymv hypre_F90_NAME_BLAS(ssymv ,SSYMV )
|
||||
#define hypre_dsyr2 hypre_F90_NAME_BLAS(ssyr2 ,SSYR2 )
|
||||
#define hypre_dsyr2k hypre_F90_NAME_BLAS(ssyr2k,SSYR2K)
|
||||
#define hypre_dsyrk hypre_F90_NAME_BLAS(ssyrk ,SSYRK )
|
||||
#define hypre_dtrmm hypre_F90_NAME_BLAS(strmm ,STRMM )
|
||||
#define hypre_dtrmv hypre_F90_NAME_BLAS(strmv ,STRMV )
|
||||
#define hypre_dtrsm hypre_F90_NAME_BLAS(strsm ,STRSM )
|
||||
#define hypre_dtrsv hypre_F90_NAME_BLAS(strsv ,STRSV )
|
||||
#define hypre_idamax hypre_F90_NAME_BLAS(isamax,ISAMAX)
|
||||
#else
|
||||
#define hypre_dasum hypre_F90_NAME_BLAS(dasum ,DASUM )
|
||||
#define hypre_daxpy hypre_F90_NAME_BLAS(daxpy ,DAXPY )
|
||||
#define hypre_dcopy hypre_F90_NAME_BLAS(dcopy ,DCOPY )
|
||||
@ -48,6 +73,7 @@ extern "C" {
|
||||
#define hypre_dtrsm hypre_F90_NAME_BLAS(dtrsm ,DTRSM )
|
||||
#define hypre_dtrsv hypre_F90_NAME_BLAS(dtrsv ,DTRSV )
|
||||
#define hypre_idamax hypre_F90_NAME_BLAS(idamax,IDAMAX)
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@ -83,9 +83,17 @@ typedef double HYPRE_Real;
|
||||
#endif
|
||||
|
||||
#if defined(HYPRE_COMPLEX)
|
||||
/* support for float double and long double complex types */
|
||||
#if defined(HYPRE_SINGLE)
|
||||
typedef float _Complex HYPRE_Complex;
|
||||
#define HYPRE_MPI_COMPLEX MPI_C_FLOAT_COMPLEX
|
||||
#elif defined(HYPRE_LONG_DOUBLE)
|
||||
typedef long double _Complex HYPRE_Complex;
|
||||
#define HYPRE_MPI_COMPLEX MPI_C_LONG_DOUBLE_COMPLEX
|
||||
#else /* default */
|
||||
typedef double _Complex HYPRE_Complex;
|
||||
#define HYPRE_MPI_COMPLEX MPI_C_DOUBLE_COMPLEX /* or MPI_LONG_DOUBLE ? */
|
||||
|
||||
#endif
|
||||
#else /* default */
|
||||
typedef HYPRE_Real HYPRE_Complex;
|
||||
#define HYPRE_MPI_COMPLEX HYPRE_MPI_REAL
|
||||
|
||||
@ -309,6 +309,9 @@ extern "C" {
|
||||
#define MPI_CHAR hypre_MPI_CHAR
|
||||
#define MPI_LONG hypre_MPI_LONG
|
||||
#define MPI_BYTE hypre_MPI_BYTE
|
||||
|
||||
#define MPI_C_FLOAT_COMPLEX hypre_MPI_COMPLEX
|
||||
#define MPI_C_LONG_DOUBLE_COMPLEX hypre_MPI_COMPLEX
|
||||
#define MPI_C_DOUBLE_COMPLEX hypre_MPI_COMPLEX
|
||||
|
||||
#define MPI_SUM hypre_MPI_SUM
|
||||
|
||||
@ -14,31 +14,61 @@
|
||||
HYPRE_Complex
|
||||
hypre_conj( HYPRE_Complex value )
|
||||
{
|
||||
#if defined(HYPRE_SINGLE)
|
||||
return conjf(value);
|
||||
#elif defined(HYPRE_LONG_DOUBLE)
|
||||
return conjl(value);
|
||||
#else
|
||||
return conj(value);
|
||||
#endif
|
||||
}
|
||||
|
||||
HYPRE_Real
|
||||
hypre_cabs( HYPRE_Complex value )
|
||||
{
|
||||
#if defined(HYPRE_SINGLE)
|
||||
return cabsf(value);
|
||||
#elif defined(HYPRE_LONG_DOUBLE)
|
||||
return cabsl(value);
|
||||
#else
|
||||
return cabs(value);
|
||||
#endif
|
||||
}
|
||||
|
||||
HYPRE_Real
|
||||
hypre_creal( HYPRE_Complex value )
|
||||
{
|
||||
#if defined(HYPRE_SINGLE)
|
||||
return crealf(value);
|
||||
#elif defined(HYPRE_LONG_DOUBLE)
|
||||
return creall(value);
|
||||
#else
|
||||
return creal(value);
|
||||
#endif
|
||||
}
|
||||
|
||||
HYPRE_Real
|
||||
hypre_cimag( HYPRE_Complex value )
|
||||
{
|
||||
#if defined(HYPRE_SINGLE)
|
||||
return cimagf(value);
|
||||
#elif defined(HYPRE_LONG_DOUBLE)
|
||||
return cimagl(value);
|
||||
#else
|
||||
return cimag(value);
|
||||
#endif
|
||||
}
|
||||
|
||||
HYPRE_Complex
|
||||
hypre_csqrt( HYPRE_Complex value )
|
||||
{
|
||||
#if defined(HYPRE_SINGLE)
|
||||
return csqrtf(value);
|
||||
#elif defined(HYPRE_LONG_DOUBLE)
|
||||
return csqrtl(value);
|
||||
#else
|
||||
return csqrt(value);
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@ -55,6 +55,9 @@ extern "C" {
|
||||
#define MPI_CHAR hypre_MPI_CHAR
|
||||
#define MPI_LONG hypre_MPI_LONG
|
||||
#define MPI_BYTE hypre_MPI_BYTE
|
||||
|
||||
#define MPI_C_FLOAT_COMPLEX hypre_MPI_COMPLEX
|
||||
#define MPI_C_LONG_DOUBLE_COMPLEX hypre_MPI_COMPLEX
|
||||
#define MPI_C_DOUBLE_COMPLEX hypre_MPI_COMPLEX
|
||||
|
||||
#define MPI_SUM hypre_MPI_SUM
|
||||
|
||||
Loading…
Reference in New Issue
Block a user