GSkyDir.cpp
1 |
/* __ Includes ___________________________________________________________ */
|
---|---|
2 |
#include <iostream> |
3 |
#include <cmath> |
4 |
#include "GSkyDir.hpp" |
5 |
|
6 |
|
7 |
/***********************************************************************//** |
8 |
* @brief GSkyDir::dist
|
9 |
***************************************************************************/
|
10 |
double GSkyDir::dist(const GSkyDir& dir) const |
11 |
{ |
12 |
double cosdis = std::sin(m_dec)*std::sin(dir.m_dec) +
|
13 |
std::cos(m_dec)*std::cos(dir.m_dec) * |
14 |
std::cos(dir.m_ra - m_ra); |
15 |
double dist = std::acos(cosdis);
|
16 |
return dist;
|
17 |
} |
18 |
|
19 |
|
20 |
/***********************************************************************//** |
21 |
* @brief GSkyDir2::dist
|
22 |
***************************************************************************/
|
23 |
double GSkyDir2::dist(const GSkyDir2& dir) const |
24 |
{ |
25 |
double cosdis = sin_dec() * dir.sin_dec() +
|
26 |
cos_dec() * dir.cos_dec() * |
27 |
std::cos(dir.m_ra - m_ra); |
28 |
double dist = std::acos(cosdis);
|
29 |
return dist;
|
30 |
} |
31 |
|
32 |
|
33 |
/***********************************************************************//** |
34 |
* @brief GSkyDir3::dist
|
35 |
***************************************************************************/
|
36 |
double GSkyDir3::dist(const GSkyDir3& dir) const |
37 |
{ |
38 |
if (!m_has_cache) {
|
39 |
m_has_cache = true;
|
40 |
m_sin_dec = std::sin(m_dec); |
41 |
m_cos_dec = std::cos(m_dec); |
42 |
} |
43 |
if (!dir.m_has_cache) {
|
44 |
dir.m_has_cache = true;
|
45 |
dir.m_sin_dec = std::sin(dir.m_dec); |
46 |
dir.m_cos_dec = std::cos(dir.m_dec); |
47 |
} |
48 |
double cosdis = m_sin_dec * dir.m_sin_dec +
|
49 |
m_cos_dec * dir.m_cos_dec * |
50 |
std::cos(dir.m_ra - m_ra); |
51 |
double dist = std::acos(cosdis);
|
52 |
return dist;
|
53 |
} |
54 |
|
55 |
|
56 |
/***********************************************************************//** |
57 |
* @brief GSkyDir4::dist
|
58 |
***************************************************************************/
|
59 |
double GSkyDir4::dist(const GSkyDir4& dir) const |
60 |
{ |
61 |
if (m_cache == NULL) { |
62 |
m_cache = new cache;
|
63 |
m_cache->sin_dec = std::sin(m_dec); |
64 |
m_cache->cos_dec = std::cos(m_dec); |
65 |
} |
66 |
if (dir.m_cache == NULL) { |
67 |
dir.m_cache = new cache;
|
68 |
dir.m_cache->sin_dec = std::sin(dir.m_dec); |
69 |
dir.m_cache->cos_dec = std::cos(dir.m_dec); |
70 |
} |
71 |
double cosdis = m_cache->sin_dec * dir.m_cache->sin_dec +
|
72 |
m_cache->cos_dec * dir.m_cache->cos_dec * |
73 |
std::cos(dir.m_ra - m_ra); |
74 |
double dist = std::acos(cosdis);
|
75 |
return dist;
|
76 |
} |
77 |
|
78 |
|
79 |
/***********************************************************************//** |
80 |
* @brief test_GSkyDir
|
81 |
***************************************************************************/
|
82 |
void test_GSkyDir(int nouter, int ninner) |
83 |
{ |
84 |
// Start timer
|
85 |
clock_t t_start = clock(); |
86 |
|
87 |
// Loop
|
88 |
double sum = 0.0; |
89 |
for (int outer = 0; outer < nouter; ++outer) { |
90 |
GSkyDir crab( 83.6331, 22.0145); |
91 |
GSkyDir vela(128.8361, -45.1764); |
92 |
for (int inner = 0; inner < ninner; ++inner) { |
93 |
double dist = crab.dist(vela);
|
94 |
sum += dist; |
95 |
} |
96 |
} |
97 |
|
98 |
// Stop timer
|
99 |
double t_elapse = (double)(clock() - t_start) / (double)CLOCKS_PER_SEC; |
100 |
std::cout << " test_GSkyDir1: CPU usage = " << t_elapse << " sec"; |
101 |
std::cout << " sum=" << sum << std::endl;
|
102 |
|
103 |
// Return
|
104 |
return;
|
105 |
} |
106 |
|
107 |
|
108 |
/***********************************************************************//** |
109 |
* @brief test_GSkyDir2
|
110 |
***************************************************************************/
|
111 |
void test_GSkyDir2(int nouter, int ninner) |
112 |
{ |
113 |
// Start timer
|
114 |
clock_t t_start = clock(); |
115 |
|
116 |
// Loop
|
117 |
double sum = 0.0; |
118 |
for (int outer = 0; outer < nouter; ++outer) { |
119 |
GSkyDir2 crab( 83.6331, 22.0145); |
120 |
GSkyDir2 vela(128.8361, -45.1764); |
121 |
for (int inner = 0; inner < ninner; ++inner) { |
122 |
double dist = crab.dist(vela);
|
123 |
sum += dist; |
124 |
} |
125 |
} |
126 |
|
127 |
// Stop timer
|
128 |
double t_elapse = (double)(clock() - t_start) / (double)CLOCKS_PER_SEC; |
129 |
std::cout << " test_GSkyDir2: CPU usage = " << t_elapse << " sec"; |
130 |
std::cout << " sum=" << sum << std::endl;
|
131 |
|
132 |
// Return
|
133 |
return;
|
134 |
} |
135 |
|
136 |
|
137 |
/***********************************************************************//** |
138 |
* @brief test_GSkyDir3
|
139 |
***************************************************************************/
|
140 |
void test_GSkyDir3(int nouter, int ninner) |
141 |
{ |
142 |
// Start timer
|
143 |
clock_t t_start = clock(); |
144 |
|
145 |
// Loop
|
146 |
double sum = 0.0; |
147 |
for (int outer = 0; outer < nouter; ++outer) { |
148 |
GSkyDir3 crab( 83.6331, 22.0145); |
149 |
GSkyDir3 vela(128.8361, -45.1764); |
150 |
for (int inner = 0; inner < ninner; ++inner) { |
151 |
double dist = crab.dist(vela);
|
152 |
sum += dist; |
153 |
} |
154 |
} |
155 |
|
156 |
// Stop timer
|
157 |
double t_elapse = (double)(clock() - t_start) / (double)CLOCKS_PER_SEC; |
158 |
std::cout << " test_GSkyDir3: CPU usage = " << t_elapse << " sec"; |
159 |
std::cout << " sum=" << sum << std::endl;
|
160 |
|
161 |
// Return
|
162 |
return;
|
163 |
} |
164 |
|
165 |
|
166 |
/***********************************************************************//** |
167 |
* @brief test_GSkyDir4
|
168 |
***************************************************************************/
|
169 |
void test_GSkyDir4(int nouter, int ninner) |
170 |
{ |
171 |
// Start timer
|
172 |
clock_t t_start = clock(); |
173 |
|
174 |
// Loop
|
175 |
double sum = 0.0; |
176 |
for (int outer = 0; outer < nouter; ++outer) { |
177 |
GSkyDir4 crab( 83.6331, 22.0145); |
178 |
GSkyDir4 vela(128.8361, -45.1764); |
179 |
for (int inner = 0; inner < ninner; ++inner) { |
180 |
double dist = crab.dist(vela);
|
181 |
sum += dist; |
182 |
} |
183 |
} |
184 |
|
185 |
// Stop timer
|
186 |
double t_elapse = (double)(clock() - t_start) / (double)CLOCKS_PER_SEC; |
187 |
std::cout << " test_GSkyDir4: CPU usage = " << t_elapse << " sec"; |
188 |
std::cout << " sum=" << sum << std::endl;
|
189 |
|
190 |
// Return
|
191 |
return;
|
192 |
} |
193 |
|
194 |
|
195 |
/***********************************************************************//** |
196 |
* @brief Main
|
197 |
***************************************************************************/
|
198 |
int main(void) |
199 |
{ |
200 |
// Test 10000000 outer, 1 inner
|
201 |
std::cout << "Test 10000000 outer, 1 inner" << std::endl;
|
202 |
test_GSkyDir(10000000, 1); |
203 |
test_GSkyDir2(10000000, 1); |
204 |
test_GSkyDir3(10000000, 1); |
205 |
test_GSkyDir4(10000000, 1); |
206 |
|
207 |
// Test 5000000 outer, 2 inner
|
208 |
std::cout << "Test 5000000 outer, 2 inner" << std::endl;
|
209 |
test_GSkyDir(5000000, 2); |
210 |
test_GSkyDir2(5000000, 2); |
211 |
test_GSkyDir3(5000000, 2); |
212 |
test_GSkyDir4(5000000, 2); |
213 |
|
214 |
// Test 3333333 outer, 3 inner
|
215 |
std::cout << "Test 3333333 outer, 3 inner" << std::endl;
|
216 |
test_GSkyDir(3333333, 3); |
217 |
test_GSkyDir2(3333333, 3); |
218 |
test_GSkyDir3(3333333, 3); |
219 |
test_GSkyDir4(3333333, 3); |
220 |
|
221 |
// Test 1000000 outer, 10 inner
|
222 |
std::cout << "Test 1000000 outer, 10 inner" << std::endl;
|
223 |
test_GSkyDir(1000000, 10); |
224 |
test_GSkyDir2(1000000, 10); |
225 |
test_GSkyDir3(1000000, 10); |
226 |
test_GSkyDir4(1000000, 10); |
227 |
|
228 |
// Test 100000 outer, 100 inner
|
229 |
std::cout << "Test 100000 outer, 100 inner" << std::endl;
|
230 |
test_GSkyDir(100000, 100); |
231 |
test_GSkyDir2(100000, 100); |
232 |
test_GSkyDir3(100000, 100); |
233 |
test_GSkyDir4(100000, 100); |
234 |
|
235 |
// Test 10000 outer, 1000 inner
|
236 |
std::cout << "Test 10000 outer, 1000 inner" << std::endl;
|
237 |
test_GSkyDir(10000, 1000); |
238 |
test_GSkyDir2(10000, 1000); |
239 |
test_GSkyDir3(10000, 1000); |
240 |
test_GSkyDir4(10000, 1000); |
241 |
|
242 |
// Exit
|
243 |
return 0; |
244 |
} |
245 |
|