1e489efc1SBarry Smith /* 2314da920SBarry Smith 3314da920SBarry Smith PETSc mathematics include file. Defines certain basic mathematical 4314da920SBarry Smith constants and functions for working with single and double precision 5314da920SBarry Smith floating point numbers as well as complex and integers. 6314da920SBarry Smith 7d382aafbSBarry Smith This file is included by petscsys.h and should not be used directly. 8e7029fe1SSatish Balay 9e489efc1SBarry Smith */ 10e489efc1SBarry Smith 11488ecbafSBarry Smith #if !defined(__PETSCMATH_H) 12488ecbafSBarry Smith #define __PETSCMATH_H 130a5f7794SBarry Smith #include <math.h> 14e9fa29b7SSatish Balay PETSC_EXTERN_CXX_BEGIN 150a5f7794SBarry Smith 167087cfbeSBarry Smith extern MPI_Datatype MPIU_2SCALAR; 177087cfbeSBarry Smith extern MPI_Datatype MPIU_2INT; 18c90a1750SBarry Smith 19314da920SBarry Smith /* 20f4ccad53SBarry Smith 21f4ccad53SBarry Smith Defines operations that are different for complex and real numbers; 22f4ccad53SBarry Smith note that one cannot really mix the use of complex and real in the same 23f4ccad53SBarry Smith PETSc program. All PETSc objects in one program are built around the object 2498725619SBarry Smith PetscScalar which is either always a real or a complex. 25f4ccad53SBarry Smith 26e489efc1SBarry Smith */ 27b36a9721SBarry Smith 2859cb5930SBarry Smith #define PetscExpPassiveScalar(a) PetscExpScalar() 29c1d390e3SJed Brown #if defined(PETSC_USE_REAL_SINGLE) 30c1d390e3SJed Brown #define MPIU_REAL MPI_FLOAT 31c1d390e3SJed Brown typedef float PetscReal; 328f1a2a5eSBarry Smith #define PetscSqrtReal(a) sqrt(a) 33c1d390e3SJed Brown #elif defined(PETSC_USE_REAL_DOUBLE) 34c1d390e3SJed Brown #define MPIU_REAL MPI_DOUBLE 35c1d390e3SJed Brown typedef double PetscReal; 368f1a2a5eSBarry Smith #define PetscSqrtReal(a) sqrt(a) 37c1d390e3SJed Brown #elif defined(PETSC_USE_REAL_LONG_DOUBLE) 38c1d390e3SJed Brown #define MPIU_REAL MPI_LONG_DOUBLE 39c1d390e3SJed Brown typedef long double PetscReal; 40c1d390e3SJed Brown #elif defined(PETSC_USE_REAL___FLOAT128) 41c1d390e3SJed Brown #define MPIU_REAL MPIU___FLOAT128 42c1d390e3SJed Brown typedef __float128 PetscReal; 438f1a2a5eSBarry Smith #define PetscSqrtReal(a) sqrtq(a) 44c1d390e3SJed Brown #endif /* PETSC_USE_REAL_* */ 4559cb5930SBarry Smith 461093a601SBarry Smith /* 471093a601SBarry Smith Complex number definitions 481093a601SBarry Smith */ 49aa482453SBarry Smith #if defined(PETSC_USE_COMPLEX) 50b7940d39SSatish Balay #if defined(PETSC_CLANGUAGE_CXX) 511093a601SBarry Smith /* C++ support of complex number */ 52df9b3741SSatish Balay #include <complex> 53adc17e78SSatish Balay 54329f5518SBarry Smith #define PetscRealPart(a) (a).real() 55329f5518SBarry Smith #define PetscImaginaryPart(a) (a).imag() 563f6de6efSSatish Balay #define PetscAbsScalar(a) std::abs(a) 573f6de6efSSatish Balay #define PetscConj(a) std::conj(a) 5818a7d68fSSatish Balay #define PetscSqrtScalar(a) std::sqrt(a) 59184914b5SBarry Smith #define PetscPowScalar(a,b) std::pow(a,b) 60184914b5SBarry Smith #define PetscExpScalar(a) std::exp(a) 6106c1185fSBarry Smith #define PetscLogScalar(a) std::log(a) 62184914b5SBarry Smith #define PetscSinScalar(a) std::sin(a) 63184914b5SBarry Smith #define PetscCosScalar(a) std::cos(a) 640bfd3fbfSBarry Smith 65ce63c4c1SBarry Smith #if defined(PETSC_USE_REAL_SINGLE) 664a60b672SMatthew Knepley typedef std::complex<float> PetscScalar; 67ce63c4c1SBarry Smith #elif defined(PETSC_USE_REAL_DOUBLE) 681093a601SBarry Smith typedef std::complex<double> PetscScalar; 69ce63c4c1SBarry Smith #elif defined(PETSC_USE_REAL_LONG_DOUBLE) 704a60b672SMatthew Knepley typedef std::complex<long double> PetscScalar; 71ce63c4c1SBarry Smith #endif /* PETSC_USE_REAL_* */ 72b7940d39SSatish Balay 731b65fc54SMatthew G Knepley #else /* PETSC_CLANGUAGE_CXX */ 741093a601SBarry Smith /* C support of complex numbers: Requires C99 compliant compiler*/ 751093a601SBarry Smith #include <complex.h> 76b7940d39SSatish Balay 77ce63c4c1SBarry Smith #if defined(PETSC_USE_REAL_SINGLE) 7885b47369SMatthew Knepley typedef float complex PetscScalar; 7985b47369SMatthew Knepley 8085b47369SMatthew Knepley #define PetscRealPart(a) crealf(a) 8185b47369SMatthew Knepley #define PetscImaginaryPart(a) cimagf(a) 8285b47369SMatthew Knepley #define PetscAbsScalar(a) cabsf(a) 8385b47369SMatthew Knepley #define PetscConj(a) conjf(a) 8485b47369SMatthew Knepley #define PetscSqrtScalar(a) csqrtf(a) 8585b47369SMatthew Knepley #define PetscPowScalar(a,b) cpowf(a,b) 8685b47369SMatthew Knepley #define PetscExpScalar(a) cexpf(a) 8706c1185fSBarry Smith #define PetscLogScalar(a) clogf(a) 8885b47369SMatthew Knepley #define PetscSinScalar(a) csinf(a) 8985b47369SMatthew Knepley #define PetscCosScalar(a) ccosf(a) 901093a601SBarry Smith 91ce63c4c1SBarry Smith #elif defined(PETSC_USE_REAL_DOUBLE) 921093a601SBarry Smith typedef double complex PetscScalar; 931093a601SBarry Smith 941093a601SBarry Smith #define PetscRealPart(a) creal(a) 951093a601SBarry Smith #define PetscImaginaryPart(a) cimag(a) 961093a601SBarry Smith #define PetscAbsScalar(a) cabs(a) 971093a601SBarry Smith #define PetscConj(a) conj(a) 981093a601SBarry Smith #define PetscSqrtScalar(a) csqrt(a) 991093a601SBarry Smith #define PetscPowScalar(a,b) cpow(a,b) 1001093a601SBarry Smith #define PetscExpScalar(a) cexp(a) 1011093a601SBarry Smith #define PetscLogScalar(a) clog(a) 1021093a601SBarry Smith #define PetscSinScalar(a) csin(a) 1031093a601SBarry Smith #define PetscCosScalar(a) ccos(a) 1041093a601SBarry Smith 105ce63c4c1SBarry Smith #elif defined(PETSC_USE_REAL_LONG_DOUBLE) 10685b47369SMatthew Knepley typedef long double complex PetscScalar; 10785b47369SMatthew Knepley 10885b47369SMatthew Knepley #define PetscRealPart(a) creall(a) 10985b47369SMatthew Knepley #define PetscImaginaryPart(a) cimagl(a) 11085b47369SMatthew Knepley #define PetscAbsScalar(a) cabsl(a) 11185b47369SMatthew Knepley #define PetscConj(a) conjl(a) 11285b47369SMatthew Knepley #define PetscSqrtScalar(a) csqrtl(a) 11385b47369SMatthew Knepley #define PetscPowScalar(a,b) cpowl(a,b) 11485b47369SMatthew Knepley #define PetscExpScalar(a) cexpl(a) 11506c1185fSBarry Smith #define PetscLogScalar(a) clogl(a) 11685b47369SMatthew Knepley #define PetscSinScalar(a) csinl(a) 11785b47369SMatthew Knepley #define PetscCosScalar(a) ccosl(a) 11885b47369SMatthew Knepley 119ce63c4c1SBarry Smith #endif /* PETSC_USE_REAL_* */ 1201b65fc54SMatthew G Knepley #endif /* PETSC_CLANGUAGE_CXX */ 121e489efc1SBarry Smith 1222c876bd9SBarry Smith #if !defined(PETSC_HAVE_MPI_C_DOUBLE_COMPLEX) 123*500d8756SSatish Balay extern MPI_Datatype MPIU_C_DOUBLE_COMPLEX; 124*500d8756SSatish Balay extern MPI_Datatype MPIU_C_COMPLEX; 125*500d8756SSatish Balay #else 126*500d8756SSatish Balay #define MPIU_C_DOUBLE_COMPLEX MPI_C_DOUBLE_COMPLEX 127*500d8756SSatish Balay #define MPIU_C_COMPLEX MPI_C_COMPLEX 1281b65fc54SMatthew G Knepley #endif /* PETSC_HAVE_MPI_C_DOUBLE_COMPLEX */ 1292c876bd9SBarry Smith 130ce63c4c1SBarry Smith #if defined(PETSC_USE_REAL_SINGLE) 131*500d8756SSatish Balay #define MPIU_SCALAR MPIU_C_COMPLEX 132ce63c4c1SBarry Smith #elif defined(PETSC_USE_REAL_DOUBLE) 133*500d8756SSatish Balay #define MPIU_SCALAR MPIU_C_DOUBLE_COMPLEX 134ce63c4c1SBarry Smith #elif defined(PETSC_USE_REAL_LONG_DOUBLE) 1351093a601SBarry Smith #define MPIU_SCALAR error 136ce63c4c1SBarry Smith #endif /* PETSC_USE_REAL_* */ 13775567043SBarry Smith 1381093a601SBarry Smith /* 1391093a601SBarry Smith real number definitions 1401093a601SBarry Smith */ 1411b65fc54SMatthew G Knepley #else /* PETSC_USE_COMPLEX */ 142ce63c4c1SBarry Smith #if defined(PETSC_USE_REAL_SINGLE) 14387828ca2SBarry Smith #define MPIU_SCALAR MPI_FLOAT 1441093a601SBarry Smith typedef float PetscScalar; 145ce63c4c1SBarry Smith #elif defined(PETSC_USE_REAL_DOUBLE) 1461093a601SBarry Smith #define MPIU_SCALAR MPI_DOUBLE 1471093a601SBarry Smith typedef double PetscScalar; 148ce63c4c1SBarry Smith #elif defined(PETSC_USE_REAL_LONG_DOUBLE) 149f68b968cSBarry Smith #define MPIU_SCALAR MPI_LONG_DOUBLE 1501093a601SBarry Smith typedef long double PetscScalar; 151ce63c4c1SBarry Smith #elif defined(PETSC_USE_REAL___FLOAT128) 152c90a1750SBarry Smith extern MPI_Datatype MPIU___FLOAT128; 153c90a1750SBarry Smith #define MPIU_SCALAR MPIU___FLOAT128 1540d0cc1b5SBarry Smith typedef __float128 PetscScalar; 155ce63c4c1SBarry Smith #endif /* PETSC_USE_REAL_* */ 156329f5518SBarry Smith #define PetscRealPart(a) (a) 157c1d390e3SJed Brown #define PetscImaginaryPart(a) ((PetscReal)0.) 158c1d390e3SJed Brown PETSC_STATIC_INLINE PetscReal PetscAbsScalar(PetscScalar a) {return a < 0.0 ? -a : a;} 159e489efc1SBarry Smith #define PetscConj(a) (a) 160ce63c4c1SBarry Smith #if !defined(PETSC_USE_REAL___FLOAT128) 16118a7d68fSSatish Balay #define PetscSqrtScalar(a) sqrt(a) 162184914b5SBarry Smith #define PetscPowScalar(a,b) pow(a,b) 163184914b5SBarry Smith #define PetscExpScalar(a) exp(a) 16406c1185fSBarry Smith #define PetscLogScalar(a) log(a) 165184914b5SBarry Smith #define PetscSinScalar(a) sin(a) 166184914b5SBarry Smith #define PetscCosScalar(a) cos(a) 167ce63c4c1SBarry Smith #else /* PETSC_USE_REAL___FLOAT128 */ 1680d0cc1b5SBarry Smith #include <quadmath.h> 1690d0cc1b5SBarry Smith #define PetscSqrtScalar(a) sqrtq(a) 1700d0cc1b5SBarry Smith #define PetscPowScalar(a,b) powq(a,b) 1710d0cc1b5SBarry Smith #define PetscExpScalar(a) expq(a) 1720d0cc1b5SBarry Smith #define PetscLogScalar(a) logq(a) 1730d0cc1b5SBarry Smith #define PetscSinScalar(a) sinq(a) 1740d0cc1b5SBarry Smith #define PetscCosScalar(a) cosq(a) 175ce63c4c1SBarry Smith #endif /* PETSC_USE_REAL___FLOAT128 */ 176b0a32e0cSBarry Smith 1771b65fc54SMatthew G Knepley #endif /* PETSC_USE_COMPLEX */ 178e489efc1SBarry Smith 179da9b6338SBarry Smith #define PetscSign(a) (((a) >= 0) ? ((a) == 0 ? 0 : 1) : -1) 18026aa1773SMatthew Knepley #define PetscAbs(a) (((a) >= 0) ? (a) : -(a)) 1813f1db9ecSBarry Smith 182314da920SBarry Smith /* --------------------------------------------------------------------------*/ 183314da920SBarry Smith 184e489efc1SBarry Smith /* 185f22f69f0SBarry Smith Certain objects may be created using either single or double precision. 186f22f69f0SBarry Smith This is currently not used. 187e489efc1SBarry Smith */ 188557d4da8SBarry Smith typedef enum { PETSC_SCALAR_DOUBLE,PETSC_SCALAR_SINGLE, PETSC_SCALAR_LONG_DOUBLE } PetscScalarPrecision; 189e489efc1SBarry Smith 190e489efc1SBarry Smith /* PETSC_i is the imaginary number, i */ 1917087cfbeSBarry Smith extern PetscScalar PETSC_i; 192e489efc1SBarry Smith 193b6a5bde7SBarry Smith /*MC 194b6a5bde7SBarry Smith PetscMin - Returns minimum of two numbers 195b6a5bde7SBarry Smith 196eca87e8dSBarry Smith Synopsis: 197eca87e8dSBarry Smith type PetscMin(type v1,type v2) 198eca87e8dSBarry Smith 199eca87e8dSBarry Smith Not Collective 200eca87e8dSBarry Smith 201b6a5bde7SBarry Smith Input Parameter: 202b6a5bde7SBarry Smith + v1 - first value to find minimum of 203b6a5bde7SBarry Smith - v2 - second value to find minimum of 204b6a5bde7SBarry Smith 205b6a5bde7SBarry Smith 206b6a5bde7SBarry Smith Notes: type can be integer or floating point value 207b6a5bde7SBarry Smith 208b6a5bde7SBarry Smith Level: beginner 209b6a5bde7SBarry Smith 210b6a5bde7SBarry Smith 211b6a5bde7SBarry Smith .seealso: PetscMin(), PetscAbsInt(), PetscAbsReal(), PetscSqr() 212b6a5bde7SBarry Smith 213b6a5bde7SBarry Smith M*/ 214e489efc1SBarry Smith #define PetscMin(a,b) (((a)<(b)) ? (a) : (b)) 215b6a5bde7SBarry Smith 216b6a5bde7SBarry Smith /*MC 217b6a5bde7SBarry Smith PetscMax - Returns maxium of two numbers 218b6a5bde7SBarry Smith 219eca87e8dSBarry Smith Synopsis: 220eca87e8dSBarry Smith type max PetscMax(type v1,type v2) 221eca87e8dSBarry Smith 222eca87e8dSBarry Smith Not Collective 223eca87e8dSBarry Smith 224b6a5bde7SBarry Smith Input Parameter: 225b6a5bde7SBarry Smith + v1 - first value to find maximum of 226b6a5bde7SBarry Smith - v2 - second value to find maximum of 227b6a5bde7SBarry Smith 228b6a5bde7SBarry Smith Notes: type can be integer or floating point value 229b6a5bde7SBarry Smith 230b6a5bde7SBarry Smith Level: beginner 231b6a5bde7SBarry Smith 232b6a5bde7SBarry Smith .seealso: PetscMin(), PetscAbsInt(), PetscAbsReal(), PetscSqr() 233b6a5bde7SBarry Smith 234b6a5bde7SBarry Smith M*/ 235e489efc1SBarry Smith #define PetscMax(a,b) (((a)<(b)) ? (b) : (a)) 236b6a5bde7SBarry Smith 237b6a5bde7SBarry Smith /*MC 238b6a5bde7SBarry Smith PetscAbsInt - Returns the absolute value of an integer 239b6a5bde7SBarry Smith 240b6a5bde7SBarry Smith Synopsis: 241b6a5bde7SBarry Smith int abs PetscAbsInt(int v1) 242b6a5bde7SBarry Smith 243eca87e8dSBarry Smith Not Collective 244eca87e8dSBarry Smith 245eca87e8dSBarry Smith Input Parameter: 246eca87e8dSBarry Smith . v1 - the integer 247b6a5bde7SBarry Smith 248b6a5bde7SBarry Smith Level: beginner 249b6a5bde7SBarry Smith 250b6a5bde7SBarry Smith .seealso: PetscMax(), PetscMin(), PetscAbsReal(), PetscSqr() 251b6a5bde7SBarry Smith 252b6a5bde7SBarry Smith M*/ 253e489efc1SBarry Smith #define PetscAbsInt(a) (((a)<0) ? -(a) : (a)) 254b6a5bde7SBarry Smith 255b6a5bde7SBarry Smith /*MC 256b6a5bde7SBarry Smith PetscAbsReal - Returns the absolute value of an real number 257b6a5bde7SBarry Smith 258eca87e8dSBarry Smith Synopsis: 259eca87e8dSBarry Smith Real abs PetscAbsReal(PetscReal v1) 260eca87e8dSBarry Smith 261eca87e8dSBarry Smith Not Collective 262eca87e8dSBarry Smith 263b6a5bde7SBarry Smith Input Parameter: 264b6a5bde7SBarry Smith . v1 - the double 265b6a5bde7SBarry Smith 266b6a5bde7SBarry Smith 267b6a5bde7SBarry Smith Level: beginner 268b6a5bde7SBarry Smith 269b6a5bde7SBarry Smith .seealso: PetscMax(), PetscMin(), PetscAbsInt(), PetscSqr() 270b6a5bde7SBarry Smith 271b6a5bde7SBarry Smith M*/ 272f6275e2eSBarry Smith #define PetscAbsReal(a) (((a)<0) ? -(a) : (a)) 273b6a5bde7SBarry Smith 274b6a5bde7SBarry Smith /*MC 275b6a5bde7SBarry Smith PetscSqr - Returns the square of a number 276b6a5bde7SBarry Smith 277b6a5bde7SBarry Smith Synopsis: 278b6a5bde7SBarry Smith type sqr PetscSqr(type v1) 279b6a5bde7SBarry Smith 280eca87e8dSBarry Smith Not Collective 281eca87e8dSBarry Smith 282eca87e8dSBarry Smith Input Parameter: 283eca87e8dSBarry Smith . v1 - the value 284eca87e8dSBarry Smith 285b6a5bde7SBarry Smith Notes: type can be integer or floating point value 286b6a5bde7SBarry Smith 287b6a5bde7SBarry Smith Level: beginner 288b6a5bde7SBarry Smith 289b6a5bde7SBarry Smith .seealso: PetscMax(), PetscMin(), PetscAbsInt(), PetscAbsReal() 290b6a5bde7SBarry Smith 291b6a5bde7SBarry Smith M*/ 2924ebda54eSMatthew Knepley #define PetscSqr(a) ((a)*(a)) 293e489efc1SBarry Smith 294314da920SBarry Smith /* ----------------------------------------------------------------------------*/ 295314da920SBarry Smith /* 296d34fcf5fSBarry Smith Basic constants 297314da920SBarry Smith */ 298ce63c4c1SBarry Smith #if defined(PETSC_USE_REAL___FLOAT128) 299d34fcf5fSBarry Smith #define PETSC_PI M_PIq 300d34fcf5fSBarry Smith #elif defined(M_PI) 301d34fcf5fSBarry Smith #define PETSC_PI M_PI 302d34fcf5fSBarry Smith #else 303314da920SBarry Smith #define PETSC_PI 3.14159265358979323846264 304d34fcf5fSBarry Smith #endif 305d34fcf5fSBarry Smith 306d34fcf5fSBarry Smith 30771fd2e92SBarry Smith #define PETSC_MAX_INT 2147483647 30871fd2e92SBarry Smith #define PETSC_MIN_INT -2147483647 309e489efc1SBarry Smith 310ce63c4c1SBarry Smith #if defined(PETSC_USE_REAL_SINGLE) 311d34fcf5fSBarry Smith #if defined(MAXFLOAT) 312ea345e14SBarry Smith # define PETSC_MAX_REAL MAXFLOAT 313d34fcf5fSBarry Smith #else 314ea345e14SBarry Smith # define PETSC_MAX_REAL 1.e30 315d34fcf5fSBarry Smith #endif 316ea345e14SBarry Smith # define PETSC_MIN_REAL -PETSC_MAX_REAL 317f10639e6SSatish Balay # define PETSC_MACHINE_EPSILON 1.e-7 318f10639e6SSatish Balay # define PETSC_SQRT_MACHINE_EPSILON 3.e-4 319cf6e855fSSatish Balay # define PETSC_SMALL 1.e-5 320ce63c4c1SBarry Smith #elif defined(PETSC_USE_REAL_DOUBLE) 321ea345e14SBarry Smith # define PETSC_MAX_REAL 1.e300 322ea345e14SBarry Smith # define PETSC_MIN_REAL -PETSC_MAX_REAL 323f10639e6SSatish Balay # define PETSC_MACHINE_EPSILON 1.e-14 324f10639e6SSatish Balay # define PETSC_SQRT_MACHINE_EPSILON 1.e-7 325cf6e855fSSatish Balay # define PETSC_SMALL 1.e-10 326513dbe71SLisandro Dalcin #elif defined(PETSC_USE_REAL_LONG_DOUBLE) 327513dbe71SLisandro Dalcin # define PETSC_MAX_REAL 1.e4900L 328513dbe71SLisandro Dalcin # define PETSC_MIN_REAL -PETSC_MAX_REAL 329513dbe71SLisandro Dalcin # define PETSC_MACHINE_EPSILON 1.e-18 330513dbe71SLisandro Dalcin # define PETSC_SQRT_MACHINE_EPSILON 1.e-9 331513dbe71SLisandro Dalcin # define PETSC_SMALL 1.e-13 332ce63c4c1SBarry Smith #elif defined(PETSC_USE_REAL___FLOAT128) 333ea345e14SBarry Smith # define PETSC_MAX_REAL FLT128_MAX 334ce63c4c1SBarry Smith # define PETSC_MIN_REAL -FLT128_MAX 335d34fcf5fSBarry Smith # define PETSC_MACHINE_EPSILON FLT128_EPSILON 336d34fcf5fSBarry Smith # define PETSC_SQRT_MACHINE_EPSILON 1.38777878078e-17 337d34fcf5fSBarry Smith # define PETSC_SMALL 1.e-20 33882adfdadSBarry Smith #endif 33982adfdadSBarry Smith 3409cf09972SJed Brown #if defined PETSC_HAVE_ADIC 3419cf09972SJed Brown /* Use MPI_Allreduce when ADIC is not available. */ 3427087cfbeSBarry Smith extern PetscErrorCode PetscGlobalMax(MPI_Comm, const PetscReal*,PetscReal*); 3437087cfbeSBarry Smith extern PetscErrorCode PetscGlobalMin(MPI_Comm, const PetscReal*,PetscReal*); 3447087cfbeSBarry Smith extern PetscErrorCode PetscGlobalSum(MPI_Comm, const PetscScalar*,PetscScalar*); 3459cf09972SJed Brown #endif 3463e523bebSBarry Smith 347a3630638SSatish Balay extern PetscErrorCode PetscIsInfOrNanScalar(PetscScalar); 348a3630638SSatish Balay extern PetscErrorCode PetscIsInfOrNanReal(PetscReal); 3499a25a3ccSBarry Smith 350314da920SBarry Smith /* ----------------------------------------------------------------------------*/ 351e489efc1SBarry Smith /* 352b0a32e0cSBarry Smith PetscLogDouble variables are used to contain double precision numbers 353e489efc1SBarry Smith that are not used in the numerical computations, but rather in logging, 354e489efc1SBarry Smith timing etc. 355e489efc1SBarry Smith */ 356b0a32e0cSBarry Smith typedef double PetscLogDouble; 357b9617806SBarry Smith #define MPIU_PETSCLOGDOUBLE MPI_DOUBLE 358e489efc1SBarry Smith 35987828ca2SBarry Smith #define PassiveReal PetscReal 360ea709b57SSatish Balay #define PassiveScalar PetscScalar 361d3ecb3a7SBarry Smith 36298725619SBarry Smith /* 36398725619SBarry Smith These macros are currently hardwired to match the regular data types, so there is no support for a different 36498725619SBarry Smith MatScalar from PetscScalar. We left the MatScalar in the source just in case we use it again. 36598725619SBarry Smith */ 36698725619SBarry Smith #define MPIU_MATSCALAR MPIU_SCALAR 36798725619SBarry Smith typedef PetscScalar MatScalar; 36898725619SBarry Smith typedef PetscReal MatReal; 36998725619SBarry Smith 370e9fa29b7SSatish Balay 371e9fa29b7SSatish Balay PETSC_EXTERN_CXX_END 372e489efc1SBarry Smith #endif 373