1 # ifndef CPPAD_LOCAL_POW_OP_HPP
2 # define CPPAD_LOCAL_POW_OP_HPP
15 namespace CppAD {
namespace local {
38 const Base* parameter ,
65 Base* x = taylor + arg[0] * cap_order;
66 Base* y = taylor + arg[1] * cap_order;
67 Base* z_2 = taylor + (i_z+2) * cap_order;
69 z_2[0] =
pow(x[0], y[0]);
94 const Base* parameter ,
134 template <
class Base>
138 const Base* parameter ,
150 Base* x = taylor + arg[0] * cap_order;
151 Base* y = taylor + arg[1] * cap_order;
152 Base* z_0 = taylor + i_z * cap_order;
153 Base* z_1 = z_0 + cap_order;
154 Base* z_2 = z_1 + cap_order;
156 z_0[0] =
log( x[0] );
157 z_1[0] = z_0[0] * y[0];
158 z_2[0] =
pow(x[0], y[0]);
176 template <
class Base>
181 const Base* parameter ,
199 d, i_z+2, i_z+1, cap_order, taylor, nc_partial, partial
207 d, i_z+1, adr, parameter, cap_order, taylor, nc_partial, partial
212 d, i_z, arg[0], cap_order, taylor, nc_partial, partial
230 template <
class Base>
236 const Base* parameter ,
250 Base* z_0 = taylor + i_z * cap_order;
253 Base x = parameter[ arg[0] ];
255 for(d = p; d <= q; d++)
258 else z_0[d] = Base(0.0);
263 std::numeric_limits<addr_t>::max() >= i_z * cap_order,
264 "cppad_tape_addr_type maximum value has been exceeded\n"
265 "This is due to a kludge in the pow operation and should be fixed."
271 adr[0] =
addr_t( i_z * cap_order );
281 { Base* y = taylor + arg[1] * cap_order;
282 Base* z_2 = taylor + (i_z+2) * cap_order;
283 z_2[0] =
pow(x, y[0]);
302 template <
class Base>
308 const Base* parameter ,
322 size_t num_taylor_per_var = (cap_order-1) * r + 1;
323 Base* z_0 = taylor + i_z * num_taylor_per_var;
326 size_t m = (q-1) * r + 1;
327 for(
size_t ell = 0; ell < r; ell++)
328 z_0[m+ell] = Base(0.0);
332 std::numeric_limits<addr_t>::max() >= i_z * num_taylor_per_var,
333 "cppad_tape_addr_type maximum value has been exceeded\n"
334 "This is due to a kludge in the pow operation and should be fixed."
340 adr[0] =
addr_t( i_z * num_taylor_per_var );
363 template <
class Base>
367 const Base* parameter ,
379 Base x = parameter[ arg[0] ];
382 Base* y = taylor + arg[1] * cap_order;
383 Base* z_0 = taylor + i_z * cap_order;
384 Base* z_1 = z_0 + cap_order;
385 Base* z_2 = z_1 + cap_order;
391 z_1[0] = z_0[0] * y[0];
395 z_2[0] =
pow(x, y[0]);
411 template <
class Base>
416 const Base* parameter ,
433 d, i_z+2, i_z+1, cap_order, taylor, nc_partial, partial
438 std::numeric_limits<addr_t>::max() >= i_z * cap_order,
439 "cppad_tape_addr_type maximum value has been exceeded\n"
440 "This is due to a kludge in the pow operation and should be fixed."
445 adr[0] =
addr_t( i_z * cap_order );
449 d, i_z+1, adr, taylor, cap_order, taylor, nc_partial, partial
470 template <
class Base>
476 const Base* parameter ,
502 { Base* z_2 = taylor + (i_z+2) * cap_order;
503 Base* x = taylor + arg[0] * cap_order;
504 Base y = parameter[ arg[1] ];
505 z_2[0] =
pow(x[0], y);
524 template <
class Base>
530 const Base* parameter ,
570 template <
class Base>
574 const Base* parameter ,
586 Base y = parameter[ arg[1] ];
589 Base* x = taylor + arg[0] * cap_order;
590 Base* z_0 = taylor + i_z * cap_order;
591 Base* z_1 = z_0 + cap_order;
592 Base* z_2 = z_1 + cap_order;
602 z_2[0] =
pow(x[0], y);
618 template <
class Base>
623 const Base* parameter ,
641 d, i_z+2, i_z+1, cap_order, taylor, nc_partial, partial
649 d, i_z+1, adr, parameter, cap_order, taylor, nc_partial, partial
654 d, i_z, arg[0], cap_order, taylor, nc_partial, partial
#define CPPAD_ASSERT_KNOWN(exp, msg)
Check that exp is true, if not print msg and terminate execution.
void reverse_mulvv_op(size_t d, size_t i_z, const addr_t *arg, const Base *parameter, size_t cap_order, const Base *taylor, size_t nc_partial, Base *partial)
Compute reverse mode partial derivatives for result of op = MulvvOp.
void forward_powvp_op_dir(size_t q, size_t r, size_t i_z, const addr_t *arg, const Base *parameter, size_t cap_order, Base *taylor)
Multiple directions forward mode Taylor coefficients for op = PowvpOp.
CPPAD_TAPE_ADDR_TYPE addr_t
AD< Base > log(const AD< Base > &x)
void forward_powpv_op_0(size_t i_z, const addr_t *arg, const Base *parameter, size_t cap_order, Base *taylor)
Compute zero order forward mode Taylor coefficient for result of op = PowpvOp.
size_t NumArg(OpCode op)
Number of arguments for a specified operator.
void reverse_powvv_op(size_t d, size_t i_z, const addr_t *arg, const Base *parameter, size_t cap_order, const Base *taylor, size_t nc_partial, Base *partial)
Compute reverse mode partial derivatives for result of op = PowvvOp.
void forward_powvp_op(size_t p, size_t q, size_t i_z, const addr_t *arg, const Base *parameter, size_t cap_order, Base *taylor)
Compute forward mode Taylor coefficients for result of op = PowvpOp.
void reverse_mulpv_op(size_t d, size_t i_z, const addr_t *arg, const Base *parameter, size_t cap_order, const Base *taylor, size_t nc_partial, Base *partial)
Compute reverse mode partial derivative for result of op = MulpvOp.
void reverse_exp_op(size_t d, size_t i_z, size_t i_x, size_t cap_order, const Base *taylor, size_t nc_partial, Base *partial)
Reverse mode partial derivatives for result of op = ExpOp.
size_t NumRes(OpCode op)
Number of variables resulting from the specified operation.
void reverse_powpv_op(size_t d, size_t i_z, const addr_t *arg, const Base *parameter, size_t cap_order, const Base *taylor, size_t nc_partial, Base *partial)
Compute reverse mode partial derivative for result of op = PowpvOp.
void forward_log_op(size_t p, size_t q, size_t i_z, size_t i_x, size_t cap_order, Base *taylor)
Compute forward mode Taylor coefficient for result of op = LogOp.
void forward_powvv_op_dir(size_t q, size_t r, size_t i_z, const addr_t *arg, const Base *parameter, size_t cap_order, Base *taylor)
Multiple directions forward mode Taylor coefficients for op = PowvvOp.
void forward_exp_op_dir(size_t q, size_t r, size_t i_z, size_t i_x, size_t cap_order, Base *taylor)
Multiple direction forward mode Taylor coefficient for op = ExpOp.
Type pow(const Type &x, const int &n)
void forward_mulvv_op_dir(size_t q, size_t r, size_t i_z, const addr_t *arg, const Base *parameter, size_t cap_order, Base *taylor)
Multiple directions forward mode Taylor coefficients for op = MulvvOp.
void reverse_powvp_op(size_t d, size_t i_z, const addr_t *arg, const Base *parameter, size_t cap_order, const Base *taylor, size_t nc_partial, Base *partial)
Compute reverse mode partial derivative for result of op = PowvpOp.
void forward_mulvv_op(size_t p, size_t q, size_t i_z, const addr_t *arg, const Base *parameter, size_t cap_order, Base *taylor)
Compute forward mode Taylor coefficients for result of op = MulvvOp.
void forward_mulpv_op(size_t p, size_t q, size_t i_z, const addr_t *arg, const Base *parameter, size_t cap_order, Base *taylor)
Compute forward mode Taylor coefficients for result of op = MulpvOp.
void forward_powvp_op_0(size_t i_z, const addr_t *arg, const Base *parameter, size_t cap_order, Base *taylor)
Compute zero order forward mode Taylor coefficients for result of op = PowvpOp.
#define CPPAD_ASSERT_UNKNOWN(exp)
Check that exp is true, if not terminate execution.
void forward_log_op_dir(size_t q, size_t r, size_t i_z, size_t i_x, size_t cap_order, Base *taylor)
Muiltiple directions Taylor coefficient for op = LogOp.
void forward_mulpv_op_dir(size_t q, size_t r, size_t i_z, const addr_t *arg, const Base *parameter, size_t cap_order, Base *taylor)
Multiple directions forward mode Taylor coefficients for op = MulpvOp.
void forward_powpv_op_dir(size_t q, size_t r, size_t i_z, const addr_t *arg, const Base *parameter, size_t cap_order, Base *taylor)
Multiple directions forward mode Taylor coefficients for op = PowpvOp.
void forward_powvv_op_0(size_t i_z, const addr_t *arg, const Base *parameter, size_t cap_order, Base *taylor)
Compute zero order forward mode Taylor coefficients for result of op = PowvvOp.
void forward_powvv_op(size_t p, size_t q, size_t i_z, const addr_t *arg, const Base *parameter, size_t cap_order, Base *taylor)
Compute forward mode Taylor coefficients for result of op = PowvvOp.
void reverse_log_op(size_t d, size_t i_z, size_t i_x, size_t cap_order, const Base *taylor, size_t nc_partial, Base *partial)
Compute reverse mode partial derivatives for result of op = LogOp.
void forward_exp_op(size_t p, size_t q, size_t i_z, size_t i_x, size_t cap_order, Base *taylor)
Forward mode Taylor coefficient for result of op = ExpOp.
void forward_powpv_op(size_t p, size_t q, size_t i_z, const addr_t *arg, const Base *parameter, size_t cap_order, Base *taylor)
Compute forward mode Taylor coefficients for result of op = PowpvOp.