Ignore:
Timestamp:
Sep 19, 2014 8:22:05 AM (6 years ago)
Author:
bradbell
Message:
  1. Zero order forward mode trace is correct, but results not getteing back

to function object; i.e. y and y_cache different.

  1. Change numvar to num_var in reverse mode sweep functions.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/cache/cppad/local/forward0sweep.hpp

    r3341 r3342  
    108108is the zero order Taylor coefficient for the variable with
    109109index i on the tape.
     110\n
     111\n
     112\b Cache:
     113For i = num_var, ... , num_var + play->num_cache_rec() - 1,
     114<code>taylor [i * J + 0]</code>
     115is a temporary (used for cache storage).
    110116
    111117\param cskip_op
     
    147153{       CPPAD_ASSERT_UNKNOWN( J >= 1 );
    148154        CPPAD_ASSERT_UNKNOWN( play->num_var_rec() == num_var );
     155        size_t num_cache = play->num_cache_rec();
     156
     157        // initialize cache indices with invalid variable value
     158        CppAD::vector<addr_t> cache2var( num_cache );
     159        for(size_t i = 0; i < num_cache; i++)
     160                cache2var[i] = addr_t(0);
    149161
    150162        // use p, q, r so other forward sweeps can use code defined here
     
    236248        // (done differently for order zero).
    237249        vector<size_t> user_iy;     
    238 # endif
    239 # ifndef NDEBUG
    240         // 2DO: implement tracing cache
    241         CppAD::vector<addr_t> cache2var;
    242250# endif
    243251
     
    686694                        CPPAD_ASSERT_UNKNOWN(false);
    687695                }
     696                if( num_cache != 0 )
     697                {       size_t i_cache = size_t( play->GetVar2Cache(i_var) );
     698                        CPPAD_ASSERT_UNKNOWN( i_cache >= num_var );
     699                        taylor[ i_cache * J + 0 ]      = taylor[ i_var * J + 0 ];
     700                        // use zero orgin cache indiex for cache2var vector
     701                        cache2var[ i_cache - num_var ] = i_var;
     702                }
    688703# if CPPAD_FORWARD0SWEEP_TRACE
    689704                size_t  d  = 0;
     
    702717                                        UsrrvOp,
    703718                                        CPPAD_NULL,
     719                                        num_var,
    704720                                        cache2var
    705721                                );
     
    730746                                op,
    731747                                arg_tmp,
     748                                num_var,
    732749                                cache2var
    733750                        );
Note: See TracChangeset for help on using the changeset viewer.