Actual source code: adintr_min.c
petsc-3.3-p7 2013-05-11
1: /*
2: macro expansion:
3: function_driver -> adintr_min
4: exception number -> ADINTR_MIN
5: exceptional code ->
6: *fx = ADIntr_Partials[ADINTR_MIN][ADINTR_FX];
7: *fy = ADIntr_Partials[ADINTR_MIN][ADINTR_FY];
9: */
11: #include <stdarg.h>
12: #include <adintrinsics.h>
13: #include <knr-compat.h>
14: #if defined(__cplusplus)
15: extern "C" {
16: #endif
18: /* #include "report-once.h" */
19: void reportonce_accumulate Proto((int,int,int));
22: /* The fy must be on a line by itself to be removed for funcs like sin(x). */
23: void
24: adintr_min (int deriv_order, int file_number, int line_number,
25: double*fx, double*fy,...)
26: {
27: /* Hack to make assignments to (*fxx) et alia OK, regardless */
28: double scratch;
29: double *fxx = &scratch;
30: double *fxy = &scratch;
31: double *fyy = &scratch;
33: const int exception = ADINTR_MIN;
35: va_list argptr;
36: va_start(argptr,fy);
38: if (deriv_order == 2)
39: {
40: fxx = va_arg(argptr, double *);
41: fxy = va_arg(argptr, double *);
42: fyy = va_arg(argptr, double *);
43: }
45: /* Here is where exceptional partials should be set. */
46: *fx = ADIntr_Partials[ADINTR_MIN][ADINTR_FX];
47: *fy = ADIntr_Partials[ADINTR_MIN][ADINTR_FY];
48: *fxx = ADIntr_Partials[ADINTR_MIN][ADINTR_FXX];
49: *fxy = ADIntr_Partials[ADINTR_MIN][ADINTR_FXY];
50: *fyy = ADIntr_Partials[ADINTR_MIN][ADINTR_FYY];
53: /* Here is where we perform the action appropriate to the current mode. */
54: if (ADIntr_Mode == ADINTR_REPORTONCE)
55: {
56: reportonce_accumulate(file_number, line_number, exception);
57: }
58:
59: va_end(argptr);
60: }
61: #if defined(__cplusplus)
62: }
63: #endif