1 # ifndef CPPAD_LOCAL_FOR_JAC_SWEEP_HPP
2 # define CPPAD_LOCAL_FOR_JAC_SWEEP_HPP
17 namespace CppAD {
namespace local {
29 # define CPPAD_FOR_JAC_SWEEP_TRACE 0
81 template <
class Base,
class Vector_set>
87 Vector_set& var_sparsity )
93 const addr_t* arg = CPPAD_NULL;
105 size_t limit = var_sparsity.end();
113 Vector_set vecad_sparsity;
115 if( num_vecad_vec > 0 )
117 vecad_sparsity.
resize(num_vecad_vec, limit);
118 vecad_ind.
extend(num_vecad_ind);
120 for(i = 0; i < num_vecad_vec; i++)
125 for(k = 1; k <= length; k++)
126 vecad_ind[j+k] = num_vecad_vec;
143 size_t user_old=0, user_m=0, user_n=0, user_i=0, user_j=0;
150 const Base* parameter = CPPAD_NULL;
152 parameter = play->
GetPar();
154 # if CPPAD_FOR_JAC_SWEEP_TRACE
156 std::cout << std::endl;
164 bool more_operators =
true;
165 while(more_operators)
177 i_var, arg[0], var_sparsity
185 i_var, arg, var_sparsity
193 i_var, arg[1], var_sparsity
202 i_var, arg[0], var_sparsity
207 # if CPPAD_USE_CPLUSPLUS_2011
212 i_var, arg[0], var_sparsity
222 i_var, arg[0], var_sparsity
227 # if CPPAD_USE_CPLUSPLUS_2011
232 i_var, arg[0], var_sparsity
242 i_var, arg[0], var_sparsity
247 # if CPPAD_USE_CPLUSPLUS_2011
252 i_var, arg[0], var_sparsity
264 i_var, arg, var_sparsity
271 dependency, i_var, arg, num_par, var_sparsity
280 i_var, arg[0], var_sparsity
289 i_var, arg[0], var_sparsity
298 i_var, arg[1], var_sparsity
301 var_sparsity.clear(i_var);
308 i_var, arg, var_sparsity
316 i_var, arg[1], var_sparsity
324 i_var, arg[0], var_sparsity
331 more_operators =
false;
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
414 i_var, arg[0], var_sparsity
419 # if CPPAD_USE_CPLUSPLUS_2011
423 i_var, arg[0], var_sparsity
432 i_var, arg[1], var_sparsity
440 i_var, arg, var_sparsity
447 var_sparsity.clear(i_var);
454 i_var, arg[0], var_sparsity
462 i_var, arg[1], var_sparsity
470 i_var, arg, var_sparsity
484 i_var, arg[0], var_sparsity
487 var_sparsity.clear(i_var);
495 i_var, arg[0], var_sparsity
504 i_var, arg[0], var_sparsity
512 i_var, arg[0], var_sparsity
567 i_var, arg, var_sparsity
575 i_var, arg[1], var_sparsity
583 i_var, arg[0], var_sparsity
592 i_var, arg[0], var_sparsity
601 i_var, arg[0], var_sparsity
612 user_atom = play->
get_user_info(op, arg, user_old, user_m, user_n);
621 # if CPPAD_FOR_JAC_SWEEP_TRACE
622 user_usrrp.
resize( user_m );
630 user_x, user_ix, user_iy, var_sparsity
643 user_x[user_j] = parameter[arg[0]];
647 if( user_j == user_n )
660 user_ix[user_j] = arg[0];
663 if( user_j == user_n )
676 # if CPPAD_FOR_JAC_SWEEP_TRACE
678 user_usrrp[user_i] = arg[0];
681 if( user_i == user_m )
692 user_iy[user_i] = i_var;
695 if( user_i == user_m )
703 i_var, arg[1], var_sparsity
711 i_var, arg[0], var_sparsity
719 i_var, arg, var_sparsity
727 # if CPPAD_FOR_JAC_SWEEP_TRACE
735 for(i = 0; i < user_m; i++)
736 {
size_t j_var = user_iy[i];
738 for(j = 0; j < limit; j++)
740 typename Vector_set::const_iterator itr(var_sparsity, j_var);
749 arg_tmp[0] = user_usrrp[i];
767 std::cout << std::endl;
771 for(j = 0; j < limit; j++)
773 typename Vector_set::const_iterator itr(var_sparsity, i_var);
780 bool delay_print = op ==
UsrrpOp;
798 std::cout << std::endl;
801 std::cout << std::endl;
812 # undef CPPAD_FOR_JAC_SWEEP_TRACE
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 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
void forward_sparse_jacobian_csum_op(size_t i_z, const addr_t *arg, Vector_set &sparsity)
Forward mode Jacobian sparsity pattern for CSumOp operator.
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 forward_sparse_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)
Forward mode sparsity operations for LdpOp and LdvOp.
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.
File used to define pod_vector class.
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)
size_t size(void) const
number of elements currently in this vector.
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
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
#define CPPAD_ASSERT_UNKNOWN(exp)
Check that exp is true, if not terminate execution.
void forward_sparse_jacobian_unary_op(size_t i_z, size_t i_x, Vector_set &sparsity)
Forward mode Jacobian sparsity pattern for all unary operators.
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 forward_sparse_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)
Forward mode sparsity operations for StpvOp and StvvOp.
void forward_sparse_jacobian_binary_op(size_t i_z, const addr_t *arg, Vector_set &sparsity)
Forward mode Jacobian sparsity pattern for all binary operators.
virtual bool for_sparse_jac(size_t q, const vector< std::set< size_t > > &r, vector< std::set< size_t > > &s, const vector< Base > &x)
Link, after case split, from for_jac_sweep to atomic_base.
Base GetPar(size_t i) const
Fetch a parameter from the recording.
void for_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 independent variables, ForJacSweep computes the sparsity pattern f...
size_t num_var_rec(void) const
Fetch number of variables in the recording.