Changeset 2968


Ignore:
Timestamp:
Oct 18, 2013 3:41:48 PM (6 years ago)
Author:
bradbell
Message:

First version that actually calls forward_cskip_0, not yet actually skipping
operations.

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

Legend:

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

    r2910 r2968  
    108108        /// results of the forward mode calculations
    109109        pod_vector<Base> taylor_;
     110
     111        /// which variables do not affect the results
     112        CppAD::vector<bool> cskip_var_;
    110113
    111114        /// Packed results of the forward mode Jacobian sparsity calculations.
  • branches/opt_cond_exp/cppad/local/cskip_op.hpp

    r2964 r2968  
    103103is the zeroth order Taylor coefficient corresponding to right.
    104104
    105 \param \skip_op_list [in,out]
     105\param \cskip_var [in,out]
    106106is vector specifying which operations are at this point are know to be
    107107unecessary and can be skipped.
     
    110110template <class Base>
    111111inline void forward_cskip_op_0(
    112         size_t         i_z                    ,
    113         const addr_t*  arg                    ,
    114         size_t         num_par                ,
    115         const Base*    parameter              ,
    116         size_t         nc_taylor              ,
    117         Base*          taylor                 ,
    118         CppAD::pod_vector<bool>& skip_op_list )
     112        size_t               i_z            ,
     113        const addr_t*        arg            ,
     114        size_t               num_par        ,
     115        const Base*          parameter      ,
     116        size_t               nc_taylor      ,
     117        Base*                taylor         ,
     118        CppAD::vector<bool>& cskip_var      )
    119119{
    120120        CPPAD_ASSERT_UNKNOWN( size_t(arg[0]) < size_t(CompareNe) );
     
    143143        }
    144144
    145         bool true_case;
     145        // initialize to avoid compiler warning
     146        bool true_case = false;
     147        Base diff      = left - right;
    146148        switch( CompareOp( arg[0] ) )
    147149        {
    148150                case CompareLt:
    149                 true_case = left < right;
     151                true_case = LessThanZero(diff);
    150152                break;
    151153
    152154                case CompareLe:
    153                 true_case = left <= right;
     155                true_case = LessThanOrZero(diff);
    154156                break;
    155157
    156158                case CompareEq:
    157                 true_case = left == right;
     159                true_case = IdenticalZero(diff);
    158160                break;
    159161
    160162                case CompareGe:
    161                 true_case = left >= right;
     163                true_case = GreaterThanOrZero(diff);
    162164                break;
    163165
    164166                case CompareGt:
    165                 true_case = left > right;
     167                true_case = GreaterThanZero(diff);
    166168                break;
    167169
    168170                case CompareNe:
    169                 true_case = left != right;
     171                true_case = ! IdenticalZero(diff);
    170172                break;
    171173
     
    175177        if( true_case )
    176178        {       for(size_t i = 0; i < size_t(arg[4]); i++)
    177                         skip_op_list[ arg[5+i] ] = true;
     179                        cskip_var[ arg[5+i] ] = true;
    178180        }
    179181        else
    180182        {       for(size_t i = 0; i < size_t(arg[5]); i++)
    181                         skip_op_list[ arg[5+arg[4]+i] ] = true;
     183                        cskip_var[ arg[5+arg[4]+i] ] = true;
    182184        }
    183185        return;
  • branches/opt_cond_exp/cppad/local/dependent.hpp

    r2506 r2968  
    44
    55/* --------------------------------------------------------------------------
    6 CppAD: C++ Algorithmic Differentiation: Copyright (C) 2003-12 Bradley M. Bell
     6CppAD: C++ Algorithmic Differentiation: Copyright (C) 2003-13 Bradley M. Bell
    77
    88CppAD is distributed under multiple licenses. This distribution is under
     
    270270        total_num_var_ = tape->Rec_.num_rec_var();
    271271
     272        // conditional skip vector
     273        cskip_var_.clear();
     274        cskip_var_.resize(total_num_var_);
     275
    272276        // now that each dependent variable has a place in the tape,
    273277        // and there is a EndOp at the end of the tape, we can transfer the
  • branches/opt_cond_exp/cppad/local/forward.hpp

    r2910 r2968  
    122122# if CPPAD_USE_FORWARD0SWEEP
    123123                compare_change_ = forward0sweep(s, true,
    124                         n, total_num_var_, &play_, taylor_col_dim_, taylor_.data()
     124                        n, total_num_var_, &play_, taylor_col_dim_, taylor_.data(),
     125                        cskip_var_
    125126                );
    126127# else
  • branches/opt_cond_exp/cppad/local/forward0sweep.hpp

    r2967 r2968  
    117117(Note that if NDEBUG is true, there are no ComOp operations
    118118in Rec and hence this return value is always zero.)
     119
     120\param cskip_var
     121Is a vector with size \c numvar,
     122the input value of the elements does not matter.
     123Upon return, if cskip_var[i] is true, the value of variable with index i
     124does not affect any of the dependent variable (given the value
     125of the independent variables).
    119126*/
    120127
     
    127134        player<Base>         *Rec,
    128135        size_t                J,
    129         Base                 *Taylor
     136        Base                 *Taylor,
     137        CppAD::vector<bool>&  cskip_var
    130138)
    131139{       CPPAD_ASSERT_UNKNOWN( J >= 1 );
     
    263271                        // we must inform next_forward of this special case.
    264272                        Rec->forward_cskip(op, arg, i_op, i_var);
    265                         // forward_cskip_op_0(
    266                         //      0, 0, i_var, arg, num_par, parameter, J, Taylor
    267                         // );
     273                        forward_cskip_op_0(
     274                                i_var, arg, num_par, parameter, J, Taylor, cskip_var
     275                        );
    268276                        break;
    269277                        // -------------------------------------------------
  • branches/opt_cond_exp/cppad/local/fun_construct.hpp

    r2910 r2968  
    325325                }
    326326        }
     327
     328        // allocate and copy the conditional skip information
     329        cskip_var_.clear();
     330        cskip_var_ = f.cskip_var_;
    327331
    328332        // allocate and copy the forward sparsity information
     
    452456# if CPPAD_USE_FORWARD0SWEEP
    453457        compare_change_ = forward0sweep(std::cout, false,
    454                 n, total_num_var_, &play_, taylor_col_dim_, taylor_.data()
     458                n, total_num_var_, &play_, taylor_col_dim_, taylor_.data(),
     459                cskip_var_
    455460        );
    456461# else
Note: See TracChangeset for help on using the changeset viewer.