Actual source code: adintr_min.c

      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)
     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