2 # ifndef CPPAD_LOCAL_COND_OP_HPP
3 # define CPPAD_LOCAL_COND_OP_HPP
15 namespace CppAD {
namespace local {
104 const Base* parameter ,
180 template <
class Vector_set>
289 template <
class Base>
296 const Base* parameter ,
299 { Base y_0, y_1, y_2, y_3;
301 Base* z = taylor + i_z * cap_order;
310 y_0 = taylor[ arg[2] * cap_order + 0 ];
314 y_0 = parameter[ arg[2] ];
318 y_1 = taylor[ arg[3] * cap_order + 0 ];
322 y_1 = parameter[ arg[3] ];
327 y_2 = taylor[ arg[4] * cap_order + 0 ];
331 y_2 = parameter[ arg[4] ];
335 y_3 = taylor[ arg[5] * cap_order + 0 ];
339 y_3 = parameter[ arg[5] ];
350 for(
size_t d = p; d <= q; d++)
353 y_2 = taylor[ arg[4] * cap_order + d];
358 y_3 = taylor[ arg[5] * cap_order + d];
481 template <
class Base>
488 const Base* parameter ,
491 { Base y_0, y_1, y_2, y_3;
493 size_t num_taylor_per_var = (cap_order-1) * r + 1;
494 Base* z = taylor + i_z * num_taylor_per_var;
505 y_0 = taylor[ arg[2] * num_taylor_per_var + 0 ];
509 y_0 = parameter[ arg[2] ];
513 y_1 = taylor[ arg[3] * num_taylor_per_var + 0 ];
517 y_1 = parameter[ arg[3] ];
519 size_t m = (q-1) * r + 1;
520 for(
size_t ell = 0; ell < r; ell++)
523 y_2 = taylor[ arg[4] * num_taylor_per_var + m + ell];
528 y_3 = taylor[ arg[5] * num_taylor_per_var + m + ell];
630 template <
class Base>
635 const Base* parameter ,
638 { Base y_0, y_1, y_2, y_3;
648 y_0 = taylor[ arg[2] * cap_order + 0 ];
652 y_0 = parameter[ arg[2] ];
656 y_1 = taylor[ arg[3] * cap_order + 0 ];
660 y_1 = parameter[ arg[3] ];
664 y_2 = taylor[ arg[4] * cap_order + 0 ];
668 y_2 = parameter[ arg[4] ];
672 y_3 = taylor[ arg[5] * cap_order + 0 ];
676 y_3 = parameter[ arg[5] ];
678 z = taylor + i_z * cap_order;
813 template <
class Base>
819 const Base* parameter ,
835 pz = partial + i_z * nc_partial + 0;
838 y_0 = taylor[ arg[2] * cap_order + 0 ];
842 y_0 = parameter[ arg[2] ];
846 y_1 = taylor[ arg[3] * cap_order + 0 ];
850 y_1 = parameter[ arg[3] ];
854 py_2 = partial + arg[4] * nc_partial;
868 py_3 = partial + arg[5] * nc_partial;
980 template <
class Vector_set>
986 Vector_set& sparsity )
994 for(
size_t j = 0; j < 4; j++)
995 {
if( ! ( arg[1] & k ) )
1000 sparsity.clear(i_z);
1003 sparsity.binary_union(i_z, i_z, arg[2], sparsity);
1005 sparsity.binary_union(i_z, i_z, arg[3], sparsity);
1008 sparsity.binary_union(i_z, i_z, arg[4], sparsity);
1010 sparsity.binary_union(i_z, i_z, arg[5], sparsity);
1121 template <
class Vector_set>
1127 Vector_set& sparsity )
1135 for(
size_t j = 0; j < 4; j++)
1136 {
if( ! ( arg[1] & k ) )
1143 sparsity.binary_union(arg[2], arg[2], i_z, sparsity);
1145 sparsity.binary_union(arg[3], arg[3], i_z, sparsity);
1149 sparsity.binary_union(arg[4], arg[4], i_z, sparsity);
1151 sparsity.binary_union(arg[5], arg[5], i_z, sparsity);
1278 template <
class Vector_set>
1284 Vector_set& hes_sparsity )
1293 for(
size_t j = 0; j < 4; j++)
1294 {
if( ! ( arg[1] & k ) )
1301 hes_sparsity.binary_union(arg[4], arg[4], i_z, hes_sparsity);
1302 jac_reverse[ arg[4] ] |= jac_reverse[i_z];
1306 hes_sparsity.binary_union(arg[5], arg[5], i_z, hes_sparsity);
1307 jac_reverse[ arg[5] ] |= jac_reverse[i_z];
void forward_sparse_jacobian_cond_op(bool dependency, size_t i_z, const addr_t *arg, size_t num_par, Vector_set &sparsity)
Compute forward Jacobian sparsity patterns for op = CExpOp.
void reverse_sparse_jacobian_cond_op(bool dependency, size_t i_z, const addr_t *arg, size_t num_par, Vector_set &sparsity)
Compute reverse Jacobian sparsity patterns for op = CExpOp.
CPPAD_TAPE_ADDR_TYPE addr_t
size_t NumArg(OpCode op)
Number of arguments for a specified operator.
void sparse_conditional_exp_op(size_t i_z, const addr_t *arg, size_t num_par)
Shared documentation for conditional expression sparse operations (not called).
size_t NumRes(OpCode op)
Number of variables resulting from the specified operation.
void forward_cond_op(size_t p, size_t q, size_t i_z, const addr_t *arg, size_t num_par, const Base *parameter, size_t cap_order, Base *taylor)
Compute forward mode Taylor coefficients for op = CExpOp.
void reverse_sparse_hessian_cond_op(size_t i_z, const addr_t *arg, size_t num_par, bool *jac_reverse, Vector_set &hes_sparsity)
Compute reverse Hessian sparsity patterns for op = CExpOp.
void forward_cond_op_0(size_t i_z, const addr_t *arg, size_t num_par, const Base *parameter, size_t cap_order, Base *taylor)
Compute zero order forward mode Taylor coefficients for op = CExpOp.
void conditional_exp_op(size_t i_z, const addr_t *arg, size_t num_par, const Base *parameter, size_t cap_order)
Shared documentation for conditional expressions (not called).
#define CPPAD_ASSERT_UNKNOWN(exp)
Check that exp is true, if not terminate execution.
void forward_cond_op_dir(size_t q, size_t r, size_t i_z, const addr_t *arg, size_t num_par, const Base *parameter, size_t cap_order, Base *taylor)
Multiple directions forward mode Taylor coefficients for op = CExpOp.
std::complex< double > CondExpOp(enum CppAD::CompareOp cop, const std::complex< double > &left, const std::complex< double > &right, const std::complex< double > &trueCase, const std::complex< double > &falseCase)
void reverse_cond_op(size_t d, size_t i_z, const addr_t *arg, size_t num_par, const Base *parameter, size_t cap_order, const Base *taylor, size_t nc_partial, Base *partial)
Compute reverse mode Taylor coefficients for op = CExpOp.