1 /*
2 * Copyright (c) 2021, The OSKAR Developers.
3 * See the LICENSE file at the top-level directory of this distribution.
4 */
5
6 #include "telescope/oskar_telescope.h"
7 #include "math/oskar_cmath.h"
8
create_telescope_model(const char * filename,int * status)9 void create_telescope_model(const char* filename, int* status)
10 {
11 const int precision = OSKAR_DOUBLE;
12 const double longitude_rad = 0.0;
13 const double latitude_rad = -50.0 * M_PI / 180.0;
14 const double coords_enu[][3] = {
15 {0,0,0},
16 {-605.1565,146.9829,0},
17 {-64.79,-577.8771,0},
18 {-878.9322,-123.8241,0},
19 {-237.3169,-340.6209,0},
20 {407.1441,198.459,0},
21 {139.1693,-888.4022,0},
22 {345.5998,890.5183,0},
23 {-203.9332,11.27668,0},
24 {-404.5717,373.44,0},
25 {136.5508,745.0029,0},
26 {-375.0552,-139.6862,0},
27 {254.7167,-507.6426,0},
28 {100.512,-355.1444,0},
29 {-360.9658,161.2952,0},
30 {698.7782,-471.8213,0},
31 {210.4574,-100.3645,0},
32 {-969.0271,190.9689,0},
33 {893.7347,117.048,0},
34 {-844.7219,-321.3391,0},
35 {558.4537,469.6326,0},
36 {-40.34307,530.6472,0},
37 {-148.6963,281.2029,0},
38 {-543.7159,731.1521,0},
39 {256.6313,445.902,0},
40 {125.0,125.0,0},
41 {100.0,100.0,0},
42 {50.0,50.0,0},
43 {25.0,25.0,0},
44 {10.0,10.0,0}
45 };
46 const int num_stations = sizeof(coords_enu) / sizeof(double[3]);
47 oskar_Telescope* tel = oskar_telescope_create(
48 precision, OSKAR_CPU, num_stations, status);
49 oskar_Mem *x = 0, *y = 0, *z = 0, *error = 0;
50 x = oskar_mem_create(precision, OSKAR_CPU, num_stations, status);
51 y = oskar_mem_create(precision, OSKAR_CPU, num_stations, status);
52 z = oskar_mem_create(precision, OSKAR_CPU, num_stations, status);
53 error = oskar_mem_create(precision, OSKAR_CPU, num_stations, status);
54 for (int i = 0; i < num_stations; ++i)
55 {
56 oskar_mem_set_element_real(x, i, coords_enu[i][0], status);
57 oskar_mem_set_element_real(y, i, coords_enu[i][1], status);
58 oskar_mem_set_element_real(z, i, coords_enu[i][2], status);
59 oskar_mem_set_element_real(error, i, 0.0, status);
60 }
61 oskar_telescope_set_station_coords_enu(tel,
62 longitude_rad, latitude_rad, 0.0,
63 num_stations, x, y, z, error, error, error, status);
64 oskar_telescope_resize_station_array(tel, 1, status);
65 oskar_Station* station = oskar_telescope_station(tel, 0);
66 oskar_station_resize(station, 1, status);
67 oskar_telescope_save(tel, filename, status);
68 oskar_telescope_free(tel, status);
69 oskar_mem_free(x, status);
70 oskar_mem_free(y, status);
71 oskar_mem_free(z, status);
72 oskar_mem_free(error, status);
73 }
74