Actual source code: adintrinsics.c
petsc-3.3-p7 2013-05-11
1: #include <stdio.h>
2: #include <stdlib.h>
3: #include <knr-compat.h>
4: #include "report-once.h"
6: #define ADINTRINSICS_C
7: #include <adintrinsics.h>
9: /* Global Variable */
10: /* Variable initialized in automatically generated file */
11: /* double ADIntr_Partials[ADINTR_FUNC_MAX][ADINTR_PARTIALS_MAX]; */
12: #include <initcommon.h>
14: #if defined(__cplusplus)
15: extern "C" {
16: #endif
18: typedef enum ADIntr_Modes Mode;
20: Mode ADIntr_Mode = ADINTR_REPORTONCE;
22: /* This provides the first 10 spots in the mode stack.
23: Most normal programs will probably not grow beyond this. */
25: static Mode *ADIntr_mode_stack = 0;
26: static int ADIntr_mode_depth = 0;
27: static int ADIntr_mode_max_depth = 10;
29: #define ADINTR_STACK_GROWTH_INCREMENT 10
31: Mode
32: adintr_current_mode ARG0(void)
33: {
34: return ADIntr_Mode;
35: }
38: static void
39: ADIntr_die_malloc_failure ARG0(void)
40: {
41: fprintf(stderr,"ADIntrinsics: out of virtual memory\n");
42: fflush(stderr);
43: abort();
44: }
47: void
48: adintr_mode_push ARG1(Mode, new_mode)
49: {
50: if (!ADIntr_mode_stack)
51: {
52: ADIntr_mode_stack = (Mode *) malloc(ADIntr_mode_max_depth *
53: sizeof(Mode));
54: if (!ADIntr_mode_stack)
55: {
56: ADIntr_die_malloc_failure();
57: }
58: }
60: if (ADIntr_mode_depth >= ADIntr_mode_max_depth)
61: {
62: ADIntr_mode_max_depth += ADINTR_STACK_GROWTH_INCREMENT;
64: ADIntr_mode_stack =
65: (Mode *) realloc (ADIntr_mode_stack,
66: ADIntr_mode_max_depth * sizeof(Mode));
68: if (!ADIntr_mode_stack)
69: {
70: ADIntr_die_malloc_failure();
71: }
72: }
73:
74: ADIntr_mode_stack[ADIntr_mode_depth] = ADIntr_Mode;
75: ADIntr_mode_depth++;
77: ADIntr_Mode = new_mode;
78: }
81: void
82: adintr_mode_pop ARG0(void)
83: {
84: if (!ADIntr_mode_stack || !ADIntr_mode_depth)
85: {
86: fprintf (stderr,"ADIntrinsics warning: more mode POP's than PUSH's (arising from AD_EXCEPTION_BEGIN_IGNORE\n");
87: fprintf (stderr,"ADIntrinsics: Ignoring POP request\n");
88: fflush(stderr);
89: }
90: else
91: {
92: ADIntr_mode_depth --;
93: ADIntr_Mode = ADIntr_mode_stack[ADIntr_mode_depth];
94: }
95: }
97: /************************************************************************/
99: void
100: adintr_ehsup ARG3(enum ADIntr_Funcs, func,
101: enum ADIntr_Partials, partial,
102: double, value)
103: {
104: ADIntr_Partials[func][partial] = value;
105: }
107: double
108: adintr_ehgup ARG2(enum ADIntr_Funcs, func,
109: enum ADIntr_Partials, partial)
110: {
111: return ADIntr_Partials[func][partial];
112: }
114: void
115: adintr_ehsout ARG1(FILE *,the_file)
116: {
117: reportonce_set_raw_output(the_file);
118: }
120: void
121: adintr_ehrpt ARG0(void)
122: {
123: reportonce_summary();
124: }
126: void
127: adintr_ehrst ARG0(void)
128: {
129: reportonce_reset();
130: }
132: void
133: adintr_ehsfid ARG3(int*,g_ehfid, char *,routine, char *,filename)
134: {
135: reportonce_ehsfid(g_ehfid, routine, filename);
136: }
138: #if defined(__cplusplus)
139: }
140: #endif