lines 9-128 of file: include/cppad/core/print_for.hpp

{xrst_begin PrintFor}
{xrst_spell
   cout
   notpos
}

Printing AD Values During Forward Mode
######################################

Syntax
******

| *f* . ``Forward`` (0, *x* )
| *f* . ``Forward`` (0, *x* , *s* )
| ``PrintFor`` ( *before* , *value* )
| ``PrintFor`` ( *notpos* , *before* , *value* , *after* )

See Also
********
:ref:`ad_output-name`

Purpose
*******
The :ref:`zero order forward<forward_zero-name>` mode command

   *f* . ``Forward`` (0, *x* )

sets the
:ref:`glossary@Tape@Independent Variable` vector
equal to *x* .
It then computes a value for all of the dependent variables in the
:ref:`operation sequence<glossary@Operation@Sequence>` corresponding
to *f* .
Putting a ``PrintFor`` in the operation sequence,
prints *value* , corresponding to *x* ,
to be printed during zero order forward operations.

f.Forward(0, x)
***************
The objects *f* , *x* , and the purpose
for this operation, are documented in :ref:`Forward-name` .

notpos
******
If present, the argument *notpos* has one of the following prototypes

| |tab| ``const AD`` < *Base* >& *notpos*
| |tab| ``const VecAD`` < *Base* >:: ``reference&`` *notpos*

In this case
the text and *value* will be printed if and only if
*notpos* is not positive (greater than zero) and a finite number.

before
******
The argument *before* has prototype

   ``const char`` * *before*

This text is written to ``std::cout`` before *value* .

value
*****
The argument *value* has one of the following prototypes

| |tab| ``const AD`` < *Base* >& *value*
| |tab| ``const VecAD`` < *Base* >:: ``reference&`` *value*

The *value* , that corresponds to *x* ,
is written to ``std::cout`` during the execution of

   *f* . ``Forward`` (0, *x* )

Note that *value* may be a
:ref:`glossary@Variable` or
:ref:`glossary@Parameter` .
If a parameter is
:ref:`glossary@Parameter@Dynamic` its value
will depend on the previous call to :ref:`new_dynamic-name` .

after
*****
The argument *after* has prototype

   ``const char`` * *after*

This text is written to ``std::cout`` after *value* .

s
*
You can redirect this output to any standard output stream using the syntax

   *f* . ``Forward`` (0, *x* , *s* )

see :ref:`forward_zero@s` in the zero order forward mode documentation.

Discussion
**********
This is helpful for understanding why tape evaluations have trouble.
For example, if one of the operations in *f* is
``log`` ( *value* ) and *value*  < 0 ,
the corresponding result will :ref:`nan-name` .

Example
*******
{xrst_toc_hidden
   example/print_for/print_for.cpp
   example/general/print_for.cpp
}
The program
:ref:`print_for_cout.cpp-name`
is an example and test that prints to standard output.
The output of this program
states the conditions for passing and failing the test.
The function
:ref:`print_for_string.cpp-name`
is an example and test that prints to an standard string stream.
This function automatically check for correct output.

{xrst_end PrintFor}
