void oskar_simulator_check_init(oskar_Simulator* h, int* status) { if (*status) return; /* Check that the telescope model has been set. */ if (!h->tel) { oskar_log_error(h->log, "Telescope model not set."); *status = OSKAR_ERR_SETTINGS_TELESCOPE; return; } /* Create the visibility header if required. */ if (!h->header) set_up_vis_header(h, status); /* Calculate source parameters if required. */ if (!h->init_sky) { int i, num_failed = 0; double ra0, dec0; /* Compute source direction cosines relative to phase centre. */ ra0 = oskar_telescope_phase_centre_ra_rad(h->tel); dec0 = oskar_telescope_phase_centre_dec_rad(h->tel); for (i = 0; i < h->num_sky_chunks; ++i) { oskar_sky_evaluate_relative_directions(h->sky_chunks[i], ra0, dec0, status); /* Evaluate extended source parameters. */ oskar_sky_evaluate_gaussian_source_parameters(h->sky_chunks[i], h->zero_failed_gaussians, ra0, dec0, &num_failed, status); } if (num_failed > 0) { if (h->zero_failed_gaussians) oskar_log_warning(h->log, "Gaussian ellipse solution failed " "for %i sources. These will have their fluxes " "set to zero.", num_failed); else oskar_log_warning(h->log, "Gaussian ellipse solution failed " "for %i sources. These will be simulated " "as point sources.", num_failed); } h->init_sky = 1; } /* Check that each compute device has been set up. */ set_up_device_data(h, status); }
void oskar_beam_pattern_check_init(oskar_BeamPattern* h, int* status) { if (*status) return; /* Check that the telescope model has been set. */ if (!h->tel) { oskar_log_error(h->log, "Telescope model not set."); *status = OSKAR_ERR_SETTINGS_TELESCOPE; return; } /* Check that each compute device has been set up. */ set_up_host_data(h, status); set_up_device_data(h, status); }