v0.14.0
Functions
adol-c_atom.cpp File Reference
#include <adolc/adolc.h>
#include <iostream>

Go to the source code of this file.

Functions

adouble power (adouble x, int n)
 
int main ()
 

Function Documentation

◆ main()

int main ( )

Definition at line 46 of file adol-c_atom.cpp.

46  {
47  int i,tag = 1;
48  int n = 6;
49 
50  //cout << "COMPUTATION OF N-TH POWER (ADOL-C Documented Example)\n\n";
51  //cout << "monomial degree=? \n"; /* input the desired degree */
52  //cin >> n;
53  /* allocations and initializations */
54  double** X;
55  double** Y;
56  X = myalloc2(1,n+4);
57  Y = myalloc2(1,n+4);
58  X[0][0] = 0.5; /* function value = 0. coefficient */
59  X[0][1] = 1.0; /* first derivative = 1. coefficient */
60  for(i=0; i<n+2; i++)
61  X[0][i+2] = 0; /* further coefficients */
62  double** Z; /* used for checking consistency */
63  Z = myalloc2(1,n+2); /* between forward and reverse */
64 
65  adouble y,x; /* declare active variables */
66  /* beginning of active section */
67  trace_on(tag); /* tag = 1 and keep = 0 */
68  x <<= X[0][0]; /* only one independent var */
69  y = power(x,n); /* actual function call */
70  y >>= Y[0][0]; /* only one dependent adouble */
71  trace_off(); /* no global adouble has died */
72  /* end of active section */
73  double u[1]; /* weighting vector */
74  u[0]=1; /* for reverse call */
75  for(i=0; i<n+2; i++) /* note that keep = i+1 in call */
76  { forward(tag,1,1,i,i+1,X,Y); /* evaluate the i-the derivative */
77  if (i==0)
78  cout << Y[0][i] << " - " << y.value() << " = " << Y[0][i]-y.value()
79  << " (should be 0)\n";
80  else {
81  Z[0][i] = Z[0][i-1]/i; /* scale derivative to Taylorcoeff. */
82  cout << Y[0][i] << " - " << Z[0][i] << " = " << Y[0][i]-Z[0][i]
83  << " (should be 0)\n";
84  }
85  reverse(tag,1,1,i,u,Z); /* evaluate the (i+1)-st deriv. */
86  } /* end for */
87 
88  return 0;
89 } /* end main */

◆ power()

adouble power ( adouble  x,
int  n 
)

Definition at line 25 of file adol-c_atom.cpp.

25  {
26  adouble z = 1;
27 
28  if (n>0) /* Recursion and branches */
29  { int nh = n/2; /* that do not depend on */
30  z = power(x,nh); /* adoubles are fine !!!! */
31  z *= z;
32  if (2*nh != n)
33  z *= x;
34  return z;
35  } /* end if */
36  else {
37  if (n==0) /* The local adouble z dies */
38  return z; /* as it goes out of scope. */
39  else
40  return 1/power(x,-n);
41  } /* end else */
42 } /* end power */
i
FTensor::Index< 'i', SPACE_DIM > i
Definition: hcurl_divergence_operator_2d.cpp:27
power
adouble power(adouble x, int n)
Definition: adol-c_atom.cpp:25
convert.n
n
Definition: convert.py:82
adouble