Recording a cummulative cummulative summation starting at its highest parrent.
- Parameters:
-
| tape | is a vector that maps a variable index, in the old operation sequence, to an optimize_old_variable information record. Note that the index for this vector must be greater than or equal zero and less than tape.size(). |
tape[i].op is the operator in the old operation sequence corresponding to the old variable index i. Assertion: NumRes(tape[i].op) > 0.
tape[i].arg for j < NumArg( tape[i].op ), tape[i].arg[j] is the j-th the argument, in the old operation sequence, corresponding to the old variable index i. Assertion: tape[i].arg[j] < i.
tape[i].new_var Suppose i <= current, j < NumArg( tape[i].op ), and k = tape[i].arg[j], and j corresponds to a varialbe for operator tape[i].op. It follows that tape[k].new_var has alread been set to the variable in the new operation sequence corresponding to the old variable index k. This means that the new_var value has been set for all the possible arguments that come before current.
- Parameters:
-
| current | is the index in the old operation sequence for the variable corresponding to the result for the current operator. Assertions: current < tape.size(), NumRes( tape[current].op ) > 0. |
| npar | is the number of paraemters corresponding to this operation sequence. |
| par | is a vector of length npar containing the parameters for this operation sequence; i.e., given a parameter index i, the corresponding parameter value is par[i]. |
- Parameters:
-
| rec | is the object that will record the operations. |
| work | Is used for computaiton. On input and output, work.op_stack.empty(), work.add_stack.empty(), and work.sub_stack.empty(), are all true true. These stacks are passed in so that elements can be allocated once and then the elements can be reused with calls to optimize_record_csum. |
- Exception
tape[i].new_var is not yet defined for any node i that is csum_connected to the current node. For example; suppose that index j corresponds to a variable in the current operator, i = tape[current].arg[j], and tape[arg[j]].connect == csum_connected. It then follows that tape[i].new_var == tape.size().
- Restriction:
tape[current].op must be one of AddpvOp, AddvvOp, SubpvOp, SubvpOp, SubvvOp.
tape[current].connect must be yes_connected.
Definition at line 656 of file optimize.hpp.
Referenced by optimize().