v0.13.2
Loading...
Searching...
No Matches
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 ( )
Examples
add_blockset.cpp, add_cubit_meshsets.cpp, analytical_nonlinear_poisson.cpp, analytical_poisson.cpp, analytical_poisson_field_split.cpp, approx_sphere.cpp, bernstein_bezier_generate_base.cpp, bone_adaptation.cpp, boundary_marker.cpp, build_large_problem.cpp, build_problems.cpp, cell_forces.cpp, child_and_parent.cpp, contact.cpp, continuity_check_on_contact_prism_side_ele.cpp, continuity_check_on_skeleton_3d.cpp, continuity_check_on_skeleton_with_simple_2d_for_h1.cpp, continuity_check_on_skeleton_with_simple_2d_for_hcurl.cpp, continuity_check_on_skeleton_with_simple_2d_for_hdiv.cpp, cubit_bc_test.cpp, delete_ho_nodes.cpp, dm_build_partitioned_mesh.cpp, dm_create_subdm.cpp, dm_partitioned_no_field.cpp, edge_and_bubble_shape_functions_on_quad.cpp, eigen_elastic.cpp, elasticity.cpp, elasticity_mixed_formulation.cpp, ep.cpp, field_blas.cpp, field_evaluator.cpp, field_to_vertices.cpp, forces_and_sources_testing_edge_element.cpp, forces_and_sources_testing_flat_prism_element.cpp, forces_and_sources_testing_users_base.cpp, free_surface.cpp, gauss_points_on_outer_product.cpp, hanging_node_approx.cpp, hcurl_check_approx_in_2d.cpp, hcurl_curl_operator.cpp, hcurl_divergence_operator_2d.cpp, hdiv_divergence_operator.cpp, heat_equation.cpp, heat_method.cpp, hello_world.cpp, helmholtz.cpp, hertz_surface.cpp, higher_derivatives.cpp, level_set.cpp, log.cpp, loop_entities.cpp, lorentz_force.cpp, magnetostatic.cpp, matrix_function.cpp, mesh_cut.cpp, mesh_insert_interface_atom.cpp, mesh_smoothing.cpp, meshset_to_vtk.cpp, minimal_surface_area.cpp, mixed_poisson.cpp, mortar_contact.cpp, mortar_contact_thermal.cpp, navier_stokes.cpp, node_merge.cpp, nonlinear_dynamics.cpp, nonlinear_elastic.cpp, operators_tests.cpp, partition_mesh.cpp, petsc_smart_ptr_objects.cpp, phase.cpp, photon_diffusion.cpp, plastic.cpp, plate.cpp, plot_base.cpp, poisson_2d_dis_galerkin.cpp, poisson_2d_homogeneous.cpp, prism_elements_from_surface.cpp, prism_polynomial_approximation.cpp, quad_polynomial_approximation.cpp, reaction_diffusion.cpp, remove_entities_from_problem.cpp, remove_entities_from_problem_not_partitioned.cpp, scalar_check_approximation.cpp, shallow_wave.cpp, simple_contact.cpp, simple_contact_thermal.cpp, simple_elasticity.cpp, simple_interface.cpp, simple_l2_only.cpp, split_sideset.cpp, test_cache_on_entities.cpp, test_jacobian_of_simple_contact_element.cpp, testing_jacobian_of_hook_element.cpp, testing_jacobian_of_hook_scaled_with_density_element.cpp, thermo_elastic.cpp, unsaturated_transport.cpp, wave_equation.cpp, and wavy_surface.cpp.

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 */
adouble power(adouble x, int n)
Definition: adol-c_atom.cpp:25
FTensor::Index< 'n', SPACE_DIM > n
FTensor::Index< 'i', SPACE_DIM > i

◆ 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 */