\(\newcommand{\W}[1]{ \; #1 \; }\) \(\newcommand{\R}[1]{ {\rm #1} }\) \(\newcommand{\B}[1]{ {\bf #1} }\) \(\newcommand{\D}[2]{ \frac{\partial #1}{\partial #2} }\) \(\newcommand{\DD}[3]{ \frac{\partial^2 #1}{\partial #2 \partial #3} }\) \(\newcommand{\Dpow}[2]{ \frac{\partial^{#1}}{\partial {#2}^{#1}} }\) \(\newcommand{\dpow}[2]{ \frac{ {\rm d}^{#1}}{{\rm d}\, {#2}^{#1}} }\)
atomic_four_call¶
View page sourceCalling an Atomic Function¶
Syntax¶
Prototype¶
template <class Base> template <class ADVector>
void atomic_four<Base>::operator()(
size_t call_id ,
const ADVector& ax ,
ADVector& ay )
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 Start Recording .
Base¶
This is the 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
simple vector class with elements of type
AD
< Base > .
afun¶
is a atomic_user object and this afun function call is implemented by the atomic_four class.
ax¶
This vector is const
and passed by reference and
its size determines n .
It specifies vector \(x \in \B{R}^n\)
at which an AD
< Base > version of
\(y = g(x)\) is to be evaluated.
ay¶
This vector is passed by reference and its size determines m .
The input values of its elements
are not specified (must not matter).
Upon return, it is an AD
< Base > version of
\(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 for_type 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
type_x and or
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 cppad_tape_id_type .