1 # ifndef CPPAD_LOCAL_REV_JAC_SWEEP_HPP
2 # define CPPAD_LOCAL_REV_JAC_SWEEP_HPP
15 namespace CppAD {
namespace local {
27 # define CPPAD_REV_JAC_SWEEP_TRACE 0
84 template <
class Base,
class Vector_set>
90 Vector_set& var_sparsity
97 const addr_t* arg = CPPAD_NULL;
110 size_t limit = var_sparsity.end();
117 Vector_set vecad_sparsity;
119 if( num_vecad_vec > 0 )
121 vecad_sparsity.
resize(num_vecad_vec, limit);
122 vecad_ind.
extend(num_vecad_ind);
124 for(i = 0; i < num_vecad_vec; i++)
129 for(k = 1; k <= length; k++)
130 vecad_ind[j+k] = num_vecad_vec;
147 size_t user_old=0, user_m=0, user_n=0, user_i=0, user_j=0;
154 const Base* parameter = CPPAD_NULL;
156 parameter = play->
GetPar();
162 # if CPPAD_REV_JAC_SWEEP_TRACE
163 std::cout << std::endl;
166 bool more_operators =
true;
167 while(more_operators)
179 i_var, arg[0], var_sparsity
187 i_var, arg, var_sparsity
195 i_var, arg[1], var_sparsity
204 i_var, arg[0], var_sparsity
209 # if CPPAD_USE_CPLUSPLUS_2011
214 i_var, arg[0], var_sparsity
224 i_var, arg[0], var_sparsity
229 # if CPPAD_USE_CPLUSPLUS_2011
234 i_var, arg[0], var_sparsity
244 i_var, arg[0], var_sparsity
249 # if CPPAD_USE_CPLUSPLUS_2011
254 i_var, arg[0], var_sparsity
262 more_operators =
false;
272 i_var, arg, var_sparsity
279 dependency, i_var, arg, num_par, var_sparsity
288 i_var, arg[0], var_sparsity
297 i_var, arg[0], var_sparsity
306 i_var, arg[1], var_sparsity
314 i_var, arg, var_sparsity
322 i_var, arg[1], var_sparsity
330 i_var, arg[0], var_sparsity
340 i_var, arg[0], var_sparsity
348 i_var, arg[0], var_sparsity
353 # if CPPAD_USE_CPLUSPLUS_2011
357 i_var, arg[0], var_sparsity
413 i_var, arg[0], var_sparsity
418 # if CPPAD_USE_CPLUSPLUS_2011
422 i_var, arg[0], var_sparsity
431 i_var, arg[1], var_sparsity
439 i_var, arg, var_sparsity
452 i_var, arg[0], var_sparsity
460 i_var, arg[1], var_sparsity
468 i_var, arg, var_sparsity
482 i_var, arg[0], var_sparsity
491 i_var, arg[0], var_sparsity
500 i_var, arg[0], var_sparsity
508 i_var, arg[0], var_sparsity
563 i_var, arg, var_sparsity
571 i_var, arg[1], var_sparsity
579 i_var, arg[0], var_sparsity
588 i_var, arg[0], var_sparsity
597 i_var, arg[0], var_sparsity
608 user_atom = play->
get_user_info(op, arg, user_old, user_m, user_n);
623 user_x, user_ix, user_iy, var_sparsity
638 user_x[user_j] = parameter[arg[0]];
657 user_ix[user_j] = arg[0];
686 user_iy[user_i] = i_var;
696 i_var, arg[1], var_sparsity
704 i_var, arg[0], var_sparsity
712 i_var, arg, var_sparsity
720 # if CPPAD_REV_JAC_SWEEP_TRACE
721 for(j = 0; j < limit; j++)
723 typename Vector_set::const_iterator itr(var_sparsity, i_var);
746 std::cout << std::endl;
748 std::cout << std::endl;
761 # undef CPPAD_REV_JAC_SWEEP_TRACE
762 # undef CPPAD_ATOMIC_CALL
virtual bool rev_sparse_jac(size_t q, const vector< std::set< size_t > > &rt, vector< std::set< size_t > > &st, const vector< Base > &x)
Link, after case split, from rev_jac_sweep to atomic_base.
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.
void resize(size_t n)
resize the vector (existing elements preserved when n <= capacity_).
size_t num_par_rec(void) const
Fetch number of parameters in the recording.
size_t extend(size_t n)
Increase the number of elements the end of this vector (existing elements are always preserved)...
void printOpResult(std::ostream &os, size_t nfz, const Value *fz, size_t nrz, const Value *rz)
Prints the result values correspnding to an operator.
size_t num_vec_ind_rec(void) const
Fetch number of VecAD indices in the recording.
CPPAD_TAPE_ADDR_TYPE addr_t
static Float quiet_NaN(void)
not a number
next UsrrpOp (UsrrvOp) is a parameter (variable) result
size_t NumArg(OpCode op)
Number of arguments for a specified operator.
Class used to store and play back an operation sequence recording.
size_t GetVecInd(size_t i) const
Fetch a VecAD index from the recording.
void resize(size_t n)
change the number of elements in this vector.
size_t NumRes(OpCode op)
Number of variables resulting from the specified operation.
next UserOp marks end of a user atomic call
atomic_base< Base > * get_user_info(const OpCode op, const addr_t *op_arg, size_t &user_old, size_t &user_m, size_t &user_n) const
unpack extra information corresponding to a UserOp
virtual void set_old(size_t id)
Set value of id (used by deprecated old_atomic class)
OpCode
Type used to distinguish different AD< Base > atomic operations.
next UserOp marks beginning of a user atomic call
void get_op_info(size_t op_index, OpCode &op, const addr_t *&op_arg, size_t &var_index) const
fetch the information corresponding to an operator
void reverse_sparse_jacobian_store_op(bool dependency, OpCode op, const addr_t *arg, size_t num_combined, const size_t *combined, Vector_set &var_sparsity, Vector_set &vecad_sparsity)
Reverse mode sparsity operations for StpvOp, StvpOp, and StvvOp.
size_t num_vecad_vec_rec(void) const
Fetch number of VecAD vectors in the recording.
Type * data(void)
current data pointer is no longer valid after any of the following: extend, erase, operator=, and ~pod_vector. Take extreem care when using this function.
next UsrapOp (UsravOp) is a parameter (variable) argument
void reverse_sparse_jacobian_load_op(bool dependency, OpCode op, size_t i_z, const addr_t *arg, size_t num_combined, const size_t *combined, Vector_set &var_sparsity, Vector_set &vecad_sparsity)
Reverse mode Jacobian sparsity operations for LdpOp and LdvOp.
#define CPPAD_ASSERT_UNKNOWN(exp)
Check that exp is true, if not terminate execution.
void reverse_sparse_jacobian_csum_op(size_t i_z, const addr_t *arg, Vector_set &sparsity)
Reverse mode Jacobian sparsity pattern for CSumOp operator.
size_t num_op_rec(void) const
Fetch number of operators in the recording.
void printOp(std::ostream &os, const local::player< Base > *play, size_t i_op, size_t i_var, OpCode op, const addr_t *ind)
Prints a single operator and its operands.
#define CPPAD_ASSERT_NARG_NRES(op, n_arg, n_res)
Check that operator op has the specified number of of arguments and results.
void reverse_sparse_jacobian_binary_op(size_t i_z, const addr_t *arg, Vector_set &sparsity)
Reverse mode Jacobian sparsity pattern for all binary operators.
Base GetPar(size_t i) const
Fetch a parameter from the recording.
void rev_jac_sweep(const local::player< Base > *play, bool dependency, size_t n, size_t numvar, Vector_set &var_sparsity)
Given the sparsity pattern for the dependent variables, RevJacSweep computes the sparsity pattern for...
void reverse_sparse_jacobian_unary_op(size_t i_z, size_t i_x, Vector_set &sparsity)
Reverse mode Jacobian sparsity pattern for all unary operators.
size_t num_var_rec(void) const
Fetch number of variables in the recording.