namespace {
// Number of threads, set by multi_atomic_two_time// (zero means one thread with no multi-threading setup)
size_t num_threads_ = 0;
// Number of Newton iterations, set by multi_atomic_two_time
size_t num_itr_;
// We can use one atomic_atomic function for all threads because// there is no member data that gets changed during worker call.// This needs to stay in scope for as long as a recording will use it.// We cannot be in parallel mode when this object is created or deleted.// We use a pointer so that there is no left over memory in thread zero.
atomic_user* a_square_root_ = 0;
// structure with information for one threadtypedefstruct {
// used by worker to compute the square root, set by multi_atomic_two_setup
CppAD::ADFun<double>* fun;
//// value we are computing square root of, set by multi_atomic_two_setup
vector<double>* y_squared;
//// square root, set by worker
vector<double>* square_root;
//// false if an error occurs, true otherwise, set by worker
bool ok;
} work_one_t;
//// Vector with information for all threads// (uses pointers instead of values to avoid false sharing)// allocated by multi_atomic_two_setup, freed by multi_atomic_two_takedown
work_one_t* work_all_[CPPAD_MAX_NUM_THREADS];
}