1 # ifndef CPPAD_LOCAL_ZMUL_OP_HPP
2 # define CPPAD_LOCAL_ZMUL_OP_HPP
15 namespace CppAD {
namespace local {
42 const Base* parameter ,
53 Base* x = taylor + arg[0] * cap_order;
54 Base* y = taylor + arg[1] * cap_order;
55 Base* z = taylor + i_z * cap_order;
58 for(
size_t d = p; d <= q; d++)
60 for(k = 0; k <= d; k++)
61 z[d] +=
azmul(x[d-k], y[k]);
84 const Base* parameter ,
95 size_t num_taylor_per_var = (cap_order-1) * r + 1;
96 Base* x = taylor + arg[0] * num_taylor_per_var;
97 Base* y = taylor + arg[1] * num_taylor_per_var;
98 Base* z = taylor + i_z * num_taylor_per_var;
101 for(ell = 0; ell < r; ell++)
102 { m = (q-1)*r + ell + 1;
104 for(k = 1; k < q; k++)
105 z[m] +=
azmul(x[(q-k-1)*r + ell + 1], y[(k-1)*r + ell + 1]);
123 template <
class Base>
127 const Base* parameter ,
136 Base* x = taylor + arg[0] * cap_order;
137 Base* y = taylor + arg[1] * cap_order;
138 Base* z = taylor + i_z * cap_order;
140 z[0] =
azmul(x[0], y[0]);
157 template <
class Base>
162 const Base* parameter ,
175 const Base* x = taylor + arg[0] * cap_order;
176 const Base* y = taylor + arg[1] * cap_order;
179 Base* px = partial + arg[0] * nc_partial;
180 Base* py = partial + arg[1] * nc_partial;
181 Base* pz = partial + i_z * nc_partial;
188 for(k = 0; k <= j; k++)
190 px[j-k] +=
azmul(pz[j], y[k]);
191 py[k] +=
azmul(pz[j], x[j-k]);
209 template <
class Base>
215 const Base* parameter ,
226 Base* y = taylor + arg[1] * cap_order;
227 Base* z = taylor + i_z * cap_order;
230 Base x = parameter[ arg[0] ];
232 for(
size_t d = p; d <= q; d++)
233 z[d] =
azmul(x, y[d]);
248 template <
class Base>
254 const Base* parameter ,
265 size_t num_taylor_per_var = (cap_order-1) * r + 1;
266 size_t m = (q-1) * r + 1;
267 Base* y = taylor + arg[1] * num_taylor_per_var + m;
268 Base* z = taylor + i_z * num_taylor_per_var + m;
271 Base x = parameter[ arg[0] ];
273 for(
size_t ell = 0; ell < r; ell++)
274 z[ell] =
azmul(x, y[ell]);
289 template <
class Base>
293 const Base* parameter ,
302 Base x = parameter[ arg[0] ];
305 Base* y = taylor + arg[1] * cap_order;
306 Base* z = taylor + i_z * cap_order;
308 z[0] =
azmul(x, y[0]);
324 template <
class Base>
329 const Base* parameter ,
342 Base x = parameter[ arg[0] ];
345 Base* py = partial + arg[1] * nc_partial;
346 Base* pz = partial + i_z * nc_partial;
352 py[j] +=
azmul(pz[j], x);
369 template <
class Base>
375 const Base* parameter ,
386 Base* x = taylor + arg[0] * cap_order;
387 Base* z = taylor + i_z * cap_order;
390 Base y = parameter[ arg[1] ];
392 for(
size_t d = p; d <= q; d++)
393 z[d] =
azmul(x[d], y);
408 template <
class Base>
414 const Base* parameter ,
425 size_t num_taylor_per_var = (cap_order-1) * r + 1;
426 size_t m = (q-1) * r + 1;
427 Base* x = taylor + arg[0] * num_taylor_per_var + m;
428 Base* z = taylor + i_z * num_taylor_per_var + m;
431 Base y = parameter[ arg[1] ];
433 for(
size_t ell = 0; ell < r; ell++)
434 z[ell] =
azmul(x[ell], y);
449 template <
class Base>
453 const Base* parameter ,
462 Base y = parameter[ arg[1] ];
465 Base* x = taylor + arg[0] * cap_order;
466 Base* z = taylor + i_z * cap_order;
468 z[0] =
azmul(x[0], y);
484 template <
class Base>
489 const Base* parameter ,
502 Base y = parameter[ arg[1] ];
505 Base* px = partial + arg[0] * nc_partial;
506 Base* pz = partial + i_z * nc_partial;
512 px[j] +=
azmul(pz[j], y);
void forward_zmulpv_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 = ZmulpvOp.
AD< Base > azmul(const AD< Base > &x, const AD< Base > &y)
CPPAD_TAPE_ADDR_TYPE addr_t
void forward_zmulvp_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 = ZmulvpOp.
size_t NumArg(OpCode op)
Number of arguments for a specified operator.
void forward_zmulvv_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 = ZmulvvOp.
size_t NumRes(OpCode op)
Number of variables resulting from the specified operation.
void forward_zmulpv_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 = ZmulpvOp.
void forward_zmulpv_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 = ZmulpvOp.
void forward_zmulvp_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 = ZmulvpOp.
void reverse_zmulpv_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 = ZmulpvOp.
void forward_zmulvv_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 = ZmulvvOp.
void reverse_zmulvv_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 = ZmulvvOp.
void forward_zmulvv_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 = ZmulvvOp.
#define CPPAD_ASSERT_UNKNOWN(exp)
Check that exp is true, if not terminate execution.
void forward_zmulvp_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 = ZmulvpOp.
void reverse_zmulvp_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 = ZmulvpOp.