Changeset 2969


Ignore:
Timestamp:
Oct 18, 2013 6:21:31 PM (6 years ago)
Author:
bradbell
Message:

First versiont that actually skips operations (forward0sweep only).

Location:
branches/opt_cond_exp/cppad/local
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/opt_cond_exp/cppad/local/cskip_op.hpp

    r2968 r2969  
    123123        Base left, right;
    124124        if( arg[1] & 1 )
    125         {       CPPAD_ASSERT_UNKNOWN( size_t(arg[2]) < i_z );
     125        {       CPPAD_ASSERT_UNKNOWN( size_t(arg[2]) <= i_z );
    126126                left = taylor[ arg[2] * nc_taylor + 0 ];
    127127                CPPAD_ASSERT_UNKNOWN( IdenticalPar(left) );
     
    133133        }
    134134        if( arg[1] & 2 )
    135         {       CPPAD_ASSERT_UNKNOWN( size_t(arg[3]) < i_z );
     135        {       CPPAD_ASSERT_UNKNOWN( size_t(arg[3]) <= i_z );
    136136                right = taylor[ arg[3] * nc_taylor + 0 ];
    137137                CPPAD_ASSERT_UNKNOWN( IdenticalPar(right) );
     
    142142                CPPAD_ASSERT_UNKNOWN( IdenticalPar(right) );
    143143        }
     144
    144145
    145146        // initialize to avoid compiler warning
     
    177178        if( true_case )
    178179        {       for(size_t i = 0; i < size_t(arg[4]); i++)
    179                         cskip_var[ arg[5+i] ] = true;
     180                        cskip_var[ arg[6+i] ] = true;
    180181        }
    181182        else
    182183        {       for(size_t i = 0; i < size_t(arg[5]); i++)
    183                         cskip_var[ arg[5+arg[4]+i] ] = true;
     184                        cskip_var[ arg[6+arg[4]+i] ] = true;
    184185        }
    185186        return;
  • branches/opt_cond_exp/cppad/local/forward0sweep.hpp

    r2968 r2969  
    168168        }
    169169
     170        // zero order, so initialize conditional skip flags
     171        for(i = 0; i < numvar; i++)
     172                cskip_var[i] = false;
     173
    170174        // work space used by UserOp.
    171175        const size_t user_q = 0;     // lowest order
     
    219223                // this op
    220224                Rec->next_forward(op, arg, i_op, i_var);
     225
     226                // check if we are skipping this operation
     227                CPPAD_ASSERT_UNKNOWN( NumRes(CSkipOp) == 0 );
     228                CPPAD_ASSERT_UNKNOWN( NumRes(EndOp)  == 0 );
     229                while( cskip_var[i_var] && NumRes(op) > 0 )
     230                {       Rec->next_forward(op, arg, i_op, i_var);
     231                        if( op == CSumOp )
     232                        {       // CSumOp has a variable number of arguments and
     233                                Rec->forward_csum(op, arg, i_op, i_var);
     234                        }
     235                }
     236
    221237# ifndef NDEBUG
    222238                if( i_op <= n )
Note: See TracChangeset for help on using the changeset viewer.