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