Actual source code: adintrinsics.h
petsc-3.3-p7 2013-05-11
1: #ifndef ADINTRINSICS_H
2: #define ADINTRINSICS_H 1
4: /* stdio.h: For adintr_ehsout(FILE*) prototype below. */
5: #include <stdio.h>
7: #undef ADINTR_EXTERN
8: #ifdef ADINTRINSICS_C
9: #define ADINTR_EXTERN
10: #else
11: #define ADINTR_EXTERN extern
12: #endif
14: #if defined(__cplusplus)
15: #undef ADINTR_EXTERN
16: #define ADINTR_EXTERN extern "C"
17: #endif
19: enum ADIntr_Modes
20: {
21: ADINTR_IGNORE = -1,
22: ADINTR_PERFORMANCE = 1,
23: ADINTR_REPORTONCE = 2
24: };
26: enum ADIntr_Partials
27: {
28: ADINTR_FX = 0,
29: ADINTR_FY,
30: ADINTR_FXX,
31: ADINTR_FXY,
32: ADINTR_FYY,
33: ADINTR_MAX_PARTIALS
34: };
36: /*** This information now in an automatically generated include file ***/
37: /*
38: enum ADIntr_Funcs
39: {
40: ADINTR_FABS = x,
41: ADINTR_MAX_FUNC
42: };
43: */
44: #include "initenum.h"
47: /* Global Variables */
48: #ifndef ADINTRINSICS_C /* initialized in adintrinsics.c */
49: ADINTR_EXTERN double ADIntr_Partials[ADINTR_MAX_FUNC][ADINTR_MAX_PARTIALS];
50: ADINTR_EXTERN enum ADIntr_Modes ADIntr_Mode;
51: #endif
53: /* Prototypes */
54: #include "knr-compat.h"
56: /* All ADIntrinsics function prototypes */
57: #include "adintr_proto.h"
59: #ifdef ADINTRINSICS_WITH_ADIC
60: #include "g_proto.h"
61: #endif
63: /* Prototypes for mode switching functions */
65: ADINTR_EXTERN enum ADIntr_Modes adintr_current_mode Proto((void));
66: ADINTR_EXTERN void adintr_mode_push Proto((enum ADIntr_Modes new_mode));
67: ADINTR_EXTERN void adintr_mode_pop Proto((void));
69: /* Prototypes for ADIntrinsics interface functions */
71: ADINTR_EXTERN void adintr_ehsup Proto((enum ADIntr_Funcs func,
72: enum ADIntr_Partials partial,
73: double value));
75: ADINTR_EXTERN double adintr_ehgup Proto((enum ADIntr_Funcs func,
76: enum ADIntr_Partials partial));
78: ADINTR_EXTERN void adintr_ehsout Proto((FILE *the_file));
79: ADINTR_EXTERN void adintr_ehrpt Proto((void));
80: ADINTR_EXTERN void adintr_ehrst Proto((void));
82: ADINTR_EXTERN void adintr_ehsfid Proto((int *g_ehfid, char *routine, char *filename));
84: #if 0
85: #ifdef ADINTRINSICS_INLINE
86: /* Support is easy, but who needs it? */
87: /* #include "inline defininitions for mode switching functions" */
88: #endif /* ADINTRINSICS_INLINE */
89: #endif
92: #endif /* ndef ADINTRINSICS_H */
94: #if ad_GRAD_MAX == 1
95: PETSC_EXTERN MPI_Op PetscADMax_Op;
96: PETSC_EXTERN MPI_Op PetscADMin_Op;
97: # define admf_PetscGlobalMax(c,a,b) MPI_Allreduce((void*)a,b,2,MPIU_SCALAR,PetscADMax_Op,c)
98: # define admf_PetscGlobalMin(c,a,b) MPI_Allreduce((void*)a,b,2,MPIU_SCALAR,PetscADMin_Op,c)
99: # define admf_PetscGlobalSum(c,a,b) MPI_Allreduce((void*)a,b,2,MPIU_SCALAR,MPIU_SUM,c)
100: #else
101: # define ad_PetscGlobalMax(a,b,c) 1 /* 1 generates error to indicate not implemented */
102: # define ad_PetscGlobalMin(a,b,c) 1
103: # define ad_PetscGlobalSum(a,b,c) 1
104: #endif