ADOL-C: Automatic Differentiation in C/C++ 2.7.3
Loading...
Searching...
No Matches
adolc_openmp.h
Go to the documentation of this file.
1/*----------------------------------------------------------------------------
2 ADOL-C -- Automatic Differentiation by Overloading in C++
3 File: adolc_openmp.h
4 Revision: $Id$
5 Contents: header file for openmp parallel differentiation
6
7 Copyright (c) Andreas Kowarz
8
9 This file is part of ADOL-C. This software is provided as open source.
10 Any use, reproduction, or distribution of the software constitutes
11 recipient's acceptance of the terms of the accompanying license file.
12
13---------------------------------------------------------------------------*/
14#if !defined(ADOLC_ADOLC_OPENMP_H)
15#define ADOLC_ADOLC_OPENMP_H 1
16
17#if !defined(__cplusplus)
18#warning ADOLC_OPENMP IS ONLY USEFUL WHEN COMPILED WITH C++ !!!
19#else
20
21#if !defined(_OPENMP)
22#error OPENMP NOT ENABLED AT COMPILE TIME !!!
23#else
24
26
27extern void beginParallel();
28extern void endParallel();
29
30extern int ADOLC_parallel_doCopy;
31
32typedef struct ADOLC_OpenMP {
33 inline ADOLC_OpenMP() {}
34 inline ADOLC_OpenMP(const ADOLC_OpenMP &arg) {
35 ADOLC_parallel_doCopy = 1;
36 beginParallel();
37 }
38 inline ~ADOLC_OpenMP() { endParallel(); }
39} ADOLC_OpenMP;
40
41typedef struct ADOLC_OpenMP_NC {
42 inline ADOLC_OpenMP_NC() {}
43 inline ADOLC_OpenMP_NC(const ADOLC_OpenMP_NC &arg) {
44 ADOLC_parallel_doCopy = 0;
45 beginParallel();
46 }
47 inline ~ADOLC_OpenMP_NC() { endParallel(); }
48} ADOLC_OpenMP_NC;
49
50extern ADOLC_OpenMP ADOLC_OpenMP_Handler;
51extern ADOLC_OpenMP_NC ADOLC_OpenMP_Handler_NC;
52
53#define ADOLC_OPENMP firstprivate(ADOLC_OpenMP_Handler)
54#define ADOLC_OPENMP_NC firstprivate(ADOLC_OpenMP_Handler_NC)
55
56#endif /* _OPENMP */
57#endif /* __cplusplus */
58#endif /* ADOLC_ADOLC_OPENMP_H */