2 # ifndef CPPAD_LOCAL_STORE_OP_HPP
3 # define CPPAD_LOCAL_STORE_OP_HPP
16 namespace CppAD {
namespace local {
128 template <
class Base>
136 size_t* index_by_ind )
199 template <
class Vector_set>
203 size_t num_combined ,
204 const size_t* combined ,
205 Vector_set& var_sparsity ,
206 Vector_set& vecad_sparsity )
218 template <
class Base>
226 size_t* index_by_ind )
227 {
size_t i_vec = arg[1];
238 isvar_by_ind[ arg[0] + i_vec ] =
false;
239 index_by_ind[ arg[0] + i_vec ] = arg[2];
247 template <
class Base>
255 size_t* index_by_ind )
256 {
size_t i_vec = arg[1];
266 isvar_by_ind[ arg[0] + i_vec ] =
true;
267 index_by_ind[ arg[0] + i_vec ] = arg[2];
275 template <
class Base>
283 size_t* index_by_ind )
285 size_t i_vec =
Integer( taylor[ arg[1] * cap_order + 0 ] );
287 i_vec < index_by_ind[ arg[0] - 1 ] ,
288 "VecAD: index during zero order forward sweep is out of range"
296 isvar_by_ind[ arg[0] + i_vec ] =
false;
297 index_by_ind[ arg[0] + i_vec ] = arg[2];
305 template <
class Base>
313 size_t* index_by_ind )
315 size_t i_vec =
Integer( taylor[ arg[1] * cap_order + 0 ] );
317 i_vec < index_by_ind[ arg[0] - 1 ] ,
318 "VecAD: index during zero order forward sweep is out of range"
325 isvar_by_ind[ arg[0] + i_vec ] =
true;
326 index_by_ind[ arg[0] + i_vec ] = arg[2];
351 template <
class Vector_set>
356 size_t num_combined ,
357 const size_t* combined ,
358 Vector_set& var_sparsity ,
359 Vector_set& vecad_sparsity )
365 size_t i_v = combined[ arg[0] - 1 ];
370 vecad_sparsity.binary_union(i_v, i_v, arg[1], var_sparsity);
373 vecad_sparsity.binary_union(i_v, i_v, arg[2], var_sparsity);
407 template <
class Vector_set>
412 size_t num_combined ,
413 const size_t* combined ,
414 Vector_set& var_sparsity ,
415 Vector_set& vecad_sparsity )
421 size_t i_v = combined[ arg[0] - 1 ];
426 var_sparsity.binary_union(arg[1], arg[1], i_v, vecad_sparsity);
428 var_sparsity.binary_union(arg[2], arg[2], i_v, vecad_sparsity);
471 template <
class Vector_set>
475 size_t num_combined ,
476 const size_t* combined ,
477 Vector_set& var_sparsity ,
478 Vector_set& vecad_sparsity ,
480 bool* vecad_jacobian )
486 size_t i_v = combined[ arg[0] - 1 ];
490 var_sparsity.binary_union(arg[2], arg[2], i_v, vecad_sparsity);
492 var_jacobian[ arg[2] ] |= vecad_jacobian[i_v];
#define CPPAD_ASSERT_KNOWN(exp, msg)
Check that exp is true, if not print msg and terminate execution.
CPPAD_TAPE_ADDR_TYPE addr_t
void forward_store_op_0(size_t i_z, const addr_t *arg, size_t num_par, size_t cap_order, Base *taylor, bool *isvar_by_ind, size_t *index_by_ind)
Shared documentation for zero order forward implementation of op = StppOp, StpvOp, StvpOp, or StvvOp (not called).
size_t NumArg(OpCode op)
Number of arguments for a specified operator.
size_t NumRes(OpCode op)
Number of variables resulting from the specified operation.
void forward_store_pp_op_0(size_t i_z, const addr_t *arg, size_t num_par, size_t cap_order, Base *taylor, bool *isvar_by_ind, size_t *index_by_ind)
Zero order forward mode implementation of op = StppOp.
OpCode
Type used to distinguish different AD< Base > atomic operations.
void forward_store_vv_op_0(size_t i_z, const addr_t *arg, size_t num_par, size_t cap_order, Base *taylor, bool *isvar_by_ind, size_t *index_by_ind)
Zero order forward mode implementation of op = StvvOp.
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.
void forward_store_vp_op_0(size_t i_z, const addr_t *arg, size_t num_par, size_t cap_order, Base *taylor, bool *isvar_by_ind, size_t *index_by_ind)
Zero order forward mode implementation of op = StvpOp.
#define CPPAD_ASSERT_UNKNOWN(exp)
Check that exp is true, if not terminate execution.
void forward_store_pv_op_0(size_t i_z, const addr_t *arg, size_t num_par, size_t cap_order, Base *taylor, bool *isvar_by_ind, size_t *index_by_ind)
Zero order forward mode implementation of op = StpvOp.
int Integer(const std::complex< double > &x)
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 sparse_store_op(OpCode op, const addr_t *arg, size_t num_combined, const size_t *combined, Vector_set &var_sparsity, Vector_set &vecad_sparsity)
Shared documnetation for sparsity operations corresponding to op = StpvOp or StvvOp (not called)...
void reverse_sparse_hessian_store_op(OpCode op, const addr_t *arg, size_t num_combined, const size_t *combined, Vector_set &var_sparsity, Vector_set &vecad_sparsity, bool *var_jacobian, bool *vecad_jacobian)
Reverse mode sparsity operations for StpvOp and StvvOp.