Changeset 1472 for trunk/test_more


Ignore:
Timestamp:
Aug 1, 2009 8:45:41 AM (11 years ago)
Author:
bradbell
Message:

trunk:

svn_status.sh: put back period so that configure agrees with autoconf version.
sparse_vec_ad.cpp: use file name for test, check multiple VecAD objects.
test_more.cpp: change sparse_vec_ad test name to same as file name.
build.sh: put back period so that configure agrees with autoconf version.
whats_new_09.omh: user's view of the changes.
rev_jac_sweep.hpp: fix missing index in VecAD sparsity patterns.
hes_jac_sweep.hpp: Add VecAD sparsity data structure to calculation.

Location:
trunk/test_more
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/test_more/sparse_vec_ad.cpp

    r1470 r1472  
    1414# include <cppad/cppad.hpp>
    1515
    16 bool SparseVecAD(void)
     16bool sparse_vec_ad(void)
    1717{       bool ok = true;
    1818        using namespace CppAD;
     
    3030
    3131        // dependent variable vector
    32         CPPAD_TEST_VECTOR< AD<double> > Y(n);
     32        size_t m = n;
     33        CPPAD_TEST_VECTOR< AD<double> > Y(m);
    3334
    3435        // check results vector
    35         CPPAD_TEST_VECTOR< bool >  Check(n * n);
     36        CPPAD_TEST_VECTOR< bool >  Check(m * n);
     37
     38        // Create a VecAD so that there are two in the tape and the sparsity
     39        // pattern depends on the second one (checks addressing VecAD objects)
     40        VecAD<double> W(n);
    3641
    3742        // VecAD equal to X
     
    4045        for(j = 0; j < n; j++)
    4146        {       J    = AD<double>(j);
     47                W[J] = X[0];
    4248                Z[J] = X[j];
    4349
    4450                // y[i] depends on x[j] for j <= i
    45                 Y[j] = Z[J];
     51                // (and is non-linear for j <= 1).
     52                if( j <= 1 )
     53                        Y[j] = Z[J] * Z[J];
     54                else    Y[j] = Z[J];
    4655        }
    4756
     
    5059        J = AD<double>(0);
    5160        for(j = 0; j < n; j++)
    52         {       for(i = 0; i < n; i++)
    53                         Check[ i * n + j ] = (j <= i);
     61        {       for(i = 0; i < m; i++)
     62                        Check[ i * m + j ] = (j <= i);
    5463        }
    5564       
     
    6473                Identity[ i * n + i ] = true;
    6574        }
     75        // evaluate the dependency matrix for Identity(F(x))
     76        CPPAD_TEST_VECTOR< bool > Px(m * n);
     77        Px = F.RevSparseJac(n, Identity);
     78
     79        // check values
     80        for(i = 0; i < m; i++)
     81        {       for(j = 0; j < n; j++)
     82                        ok &= (Px[i * m + j] == Check[i * m + j]);
     83        }       
    6684
    6785        // evaluate the dependency matrix for F(Identity(x))
    68         CPPAD_TEST_VECTOR< bool > Py(n * n);
     86        CPPAD_TEST_VECTOR< bool > Py(m * n);
    6987        Py = F.ForSparseJac(n, Identity);
    7088
    7189        // check values
     90        for(i = 0; i < m; i++)
     91        {       for(j = 0; j < n; j++)
     92                        ok &= (Py[i * m + j] == Check[i * m + j]);
     93        }       
     94
     95        // compute sparsity pattern for Hessian of F_m ( Identity(x) )
     96        CPPAD_TEST_VECTOR<bool> Hy(m);
     97        for(i = 0; i < m; i++)
     98                Hy[i] = false;
     99        Hy[m-1] = true;
     100        CPPAD_TEST_VECTOR<bool> Pxx(n * n);
     101        Pxx = F.RevSparseHes(n, Hy);
     102
     103# if 0
     104        // This test case demonstrates a bug in the current version of
     105        // of the reverse Hessian sparsity pattern calculations. It will be
     106        // fixed in the next commit.
    72107        for(i = 0; i < n; i++)
    73108        {       for(j = 0; j < n; j++)
    74                         ok &= (Py[i * n + j] == Check[i * n + j]);
    75         }       
    76 
    77         // evaluate the dependency matrix for Identity(F(x))
    78         CPPAD_TEST_VECTOR< bool > Px(n * n);
    79         Px = F.RevSparseJac(n, Identity);
    80 
    81         // check values
    82         for(i = 0; i < n; i++)
    83         {       for(j = 0; j < n; j++)
    84                         ok &= (Px[i * n + j] == Check[i * n + j]);
    85         }       
     109                        ok &= (Pxx[i * n + j] == ( (i <= 1) & (j <= 1) ) );
     110        }
     111# endif
    86112
    87113        return ok;
  • trunk/test_more/test_more.cpp

    r1470 r1472  
    7070extern bool SinCos(void);
    7171extern bool Sinh(void);
    72 extern bool SparseVecAD(void);
     72extern bool sparse_vec_ad(void);
    7373extern bool Sqrt(void);
    7474extern bool std_math(void);
     
    163163        ok &= Run( SinCos,          "SinCos"         );
    164164        ok &= Run( Sinh,            "Sinh"           );
    165         ok &= Run( SparseVecAD,     "SparseVecAD"    );
     165        ok &= Run( sparse_vec_ad,   "sparse_vec_ad"  );
    166166        ok &= Run( Sqrt,            "Sqrt"           );
    167167        ok &= Run( std_math,        "std_math"       );
Note: See TracChangeset for help on using the changeset viewer.