lines 8-95 of file: include/cppad/core/atomic/four/call.hpp

{xrst_begin atomic_four_call}

Calling an Atomic Function
##########################

Syntax
******

| *afun* ( *ax* , *ay* )
| *ay* = *afun* ( *call_id* , *ax* , *ay* )

Prototype
*********
{xrst_literal
   // BEGIN_PROTOTYPE
   // END_PROTOTYPE
}

Purpose
*******
Given *ax* , this call computes the corresponding value of *ay* .
If ``AD`` < *Base* > operations are being recorded,
it enters the computation as an atomic operation in the recording;
see :ref:`Independent@Start Recording` .

Base
****
This is the :ref:`atomic_four_ctor@atomic_four@Base`
in the *afun* constructor.
It is also the *Base* type of the elements of
*ax* and *ay* in the atomic function call.
To be specific, the elements of *ax* and *ay* have type
``AD`` < ``Base`` > .

ADVector
********
The type *ADVector* must be a
:ref:`simple vector class<SimpleVector-name>` with elements of type
``AD`` < *Base* > .

afun
****
is a :ref:`atomic_four_ctor@atomic_user` object
and this *afun* function call is implemented by the
:ref:`atomic_four_ctor@atomic_four` class.

ax
**
The size of this vector determines *n* .
It specifies vector :math:`x \in \B{R}^n`
at which an ``AD`` < *Base* > version of
:math:`y = g(x)` is to be evaluated.

ay
**
The size of this vector determines *m* .
The input values of its elements
are not specified (must not matter).
Upon return, it is an ``AD`` < *Base* > version of
:math:`y = g(x)`.

call_id
*******
This optional argument has default value zero.
It can be used to specify additional information about this call to
*afun* . For example, it could specify the index in vector of structures
in the *afun* object where the actual information is placed.

for_type
********
The :ref:`for_type<atomic_four_for_type-name>` routine will be called once,
for each call to an atomic function,
before any other callbacks corresponding to the atomic function call.
This enables you to store, during the ``for_type`` routine,
the values in
:ref:`atomic_four_for_type@type_x` and or
:ref:`atomic_four_for_type@type_y` corresponding
to this atomic function call.

Restriction
===========
The value of *call_id* must be less than or equal

   ``std::numeric_limits<`` *cppad_tape_id_type* >:: ``max`` ()

see :ref:`cmake@cppad_tape_id_type` .

{xrst_end atomic_four_call}
