diff --git a/tardis/montecarlo/src/cmontecarlo.c b/tardis/montecarlo/src/cmontecarlo.c index bc2229a50e1..899bda891c4 100644 --- a/tardis/montecarlo/src/cmontecarlo.c +++ b/tardis/montecarlo/src/cmontecarlo.c @@ -663,286 +663,4 @@ montecarlo_one_packet_loop (storage_model_t * storage, rpacket_t * packet, } return rpacket_get_status (packet) == TARDIS_PACKET_STATUS_REABSORBED ? 1 : 0; -} - -tardis_error_t -rpacket_init (rpacket_t * packet, storage_model_t * storage, int packet_index, - int virtual_packet_flag) -{ - double nu_line; - double current_r; - double current_mu; - double current_nu; - double comov_current_nu; - double current_energy; - int64_t current_line_id; - int current_shell_id; - bool last_line; - bool close_line; - int recently_crossed_boundary; - tardis_error_t ret_val = TARDIS_ERROR_OK; - current_nu = storage->packet_nus[packet_index]; - current_energy = storage->packet_energies[packet_index]; - current_mu = storage->packet_mus[packet_index]; - comov_current_nu = current_nu; - current_shell_id = 0; - current_r = storage->r_inner[0]; - current_nu = - current_nu / (1 - - (current_mu * current_r * storage->inverse_time_explosion * - INVERSE_C)); - current_energy = - current_energy / (1 - - (current_mu * current_r * - storage->inverse_time_explosion * INVERSE_C)); - if ((ret_val = - line_search (storage->line_list_nu, comov_current_nu, - storage->no_of_lines, - ¤t_line_id)) != TARDIS_ERROR_OK) - { - return ret_val; - } - last_line = (current_line_id == storage->no_of_lines); - recently_crossed_boundary = true; - rpacket_set_nu (packet, current_nu); - rpacket_set_mu (packet, current_mu); - rpacket_set_energy (packet, current_energy); - rpacket_set_r (packet, current_r); - rpacket_set_current_shell_id (packet, current_shell_id); - rpacket_set_next_line_id (packet, current_line_id); - rpacket_set_last_line (packet, last_line); - rpacket_set_close_line (packet, false); - rpacket_set_recently_crossed_boundary (packet, recently_crossed_boundary); - rpacket_set_virtual_packet_flag (packet, virtual_packet_flag); - return ret_val; -} - -/* - Getter and setter methods. -*/ - -INLINE double -rpacket_get_nu (rpacket_t * packet) -{ - return packet->nu; -} - -INLINE void -rpacket_set_nu (rpacket_t * packet, double nu) -{ - packet->nu = nu; -} - -INLINE double -rpacket_get_mu (rpacket_t * packet) -{ - return packet->mu; -} - -INLINE void -rpacket_set_mu (rpacket_t * packet, double mu) -{ - packet->mu = mu; -} - -INLINE double -rpacket_get_energy (rpacket_t * packet) -{ - return packet->energy; -} - -INLINE void -rpacket_set_energy (rpacket_t * packet, double energy) -{ - packet->energy = energy; -} - -INLINE double -rpacket_get_r (rpacket_t * packet) -{ - return packet->r; -} - -INLINE void -rpacket_set_r (rpacket_t * packet, double r) -{ - packet->r = r; -} - -INLINE double -rpacket_get_tau_event (rpacket_t * packet) -{ - return packet->tau_event; -} - -INLINE void -rpacket_set_tau_event (rpacket_t * packet, double tau_event) -{ - packet->tau_event = tau_event; -} - -INLINE double -rpacket_get_nu_line (rpacket_t * packet) -{ - return packet->nu_line; -} - -INLINE void -rpacket_set_nu_line (rpacket_t * packet, double nu_line) -{ - packet->nu_line = nu_line; -} - -INLINE unsigned int -rpacket_get_current_shell_id (rpacket_t * packet) -{ - return packet->current_shell_id; -} - -INLINE void -rpacket_set_current_shell_id (rpacket_t * packet, - unsigned int current_shell_id) -{ - packet->current_shell_id = current_shell_id; -} - -INLINE unsigned int -rpacket_get_next_line_id (rpacket_t * packet) -{ - return packet->next_line_id; -} - -INLINE void -rpacket_set_next_line_id (rpacket_t * packet, unsigned int next_line_id) -{ - packet->next_line_id = next_line_id; -} - -INLINE bool -rpacket_get_last_line (rpacket_t * packet) -{ - return packet->last_line; -} - -INLINE void -rpacket_set_last_line (rpacket_t * packet, bool last_line) -{ - packet->last_line = last_line; -} - -INLINE bool -rpacket_get_close_line (rpacket_t * packet) -{ - return packet->close_line; -} - -INLINE void -rpacket_set_close_line (rpacket_t * packet, bool close_line) -{ - packet->close_line = close_line; -} - -INLINE int -rpacket_get_recently_crossed_boundary (rpacket_t * packet) -{ - return packet->recently_crossed_boundary; -} - -INLINE void -rpacket_set_recently_crossed_boundary (rpacket_t * packet, - int recently_crossed_boundary) -{ - packet->recently_crossed_boundary = recently_crossed_boundary; -} - -INLINE int -rpacket_get_virtual_packet_flag (rpacket_t * packet) -{ - return packet->virtual_packet_flag; -} - -INLINE void -rpacket_set_virtual_packet_flag (rpacket_t * packet, int virtual_packet_flag) -{ - packet->virtual_packet_flag = virtual_packet_flag; -} - -INLINE int -rpacket_get_virtual_packet (rpacket_t * packet) -{ - return packet->virtual_packet; -} - -INLINE void -rpacket_set_virtual_packet (rpacket_t * packet, int virtual_packet) -{ - packet->virtual_packet = virtual_packet; -} - -INLINE double -rpacket_get_d_boundary (rpacket_t * packet) -{ - return packet->d_boundary; -} - -INLINE void -rpacket_set_d_boundary (rpacket_t * packet, double d_boundary) -{ - packet->d_boundary = d_boundary; -} - -INLINE double -rpacket_get_d_electron (rpacket_t * packet) -{ - return packet->d_electron; -} - -INLINE void -rpacket_set_d_electron (rpacket_t * packet, double d_electron) -{ - packet->d_electron = d_electron; -} - -INLINE double -rpacket_get_d_line (rpacket_t * packet) -{ - return packet->d_line; -} - -INLINE void -rpacket_set_d_line (rpacket_t * packet, double d_line) -{ - packet->d_line = d_line; -} - -INLINE int -rpacket_get_next_shell_id (rpacket_t * packet) -{ - return packet->next_shell_id; -} - -INLINE void -rpacket_set_next_shell_id (rpacket_t * packet, int next_shell_id) -{ - packet->next_shell_id = next_shell_id; -} - -INLINE rpacket_status_t -rpacket_get_status (rpacket_t * packet) -{ - return packet->status; -} - -INLINE void -rpacket_set_status (rpacket_t * packet, rpacket_status_t status) -{ - packet->status = status; -} - -/* Other accessor methods. */ - -INLINE void -rpacket_reset_tau_event (rpacket_t * packet) -{ - rpacket_set_tau_event (packet, -log (rk_double (&mt_state))); -} +} \ No newline at end of file diff --git a/tardis/montecarlo/src/cmontecarlo.h b/tardis/montecarlo/src/cmontecarlo.h index bbcf2707d9a..16507be1f80 100644 --- a/tardis/montecarlo/src/cmontecarlo.h +++ b/tardis/montecarlo/src/cmontecarlo.h @@ -8,6 +8,8 @@ #include #include #include "randomkit/randomkit.h" +#include "rpacket.h" +#include "status.h" #ifdef __clang__ #define INLINE extern inline @@ -15,115 +17,6 @@ #define INLINE inline #endif -#define MISS_DISTANCE 1e99 -#define C 29979245800.0 -#define INVERSE_C 3.33564095198152e-11 - -typedef enum -{ - TARDIS_ERROR_OK = 0, - TARDIS_ERROR_BOUNDS_ERROR = 1, - TARDIS_ERROR_COMOV_NU_LESS_THAN_NU_LINE = 2 -} tardis_error_t; - -typedef enum -{ - TARDIS_PACKET_STATUS_IN_PROCESS = 0, - TARDIS_PACKET_STATUS_EMITTED = 1, - TARDIS_PACKET_STATUS_REABSORBED = 2 -} rpacket_status_t; - -/** - * @brief A photon packet. - */ -typedef struct RPacket -{ - double nu; /**< Frequency of the packet in Hz. */ - double mu; /**< Cosine of the angle of the packet. */ - double energy; /**< Energy of the packet in erg. */ - double r; /**< Distance from center in cm. */ - double tau_event; - double nu_line; - int64_t current_shell_id; /**< ID of the current shell. */ - int64_t next_line_id; /**< The index of the next line that the packet will encounter. */ - /** - * @brief The packet has a nu red-ward of the last line. - * It will not encounter any lines anymore. - */ - int64_t last_line; - /** - * @brief The packet just encountered a line that is very close to the next line. - * The next iteration will automatically make an interaction with the next line - * (avoiding numerical problems). - */ - int64_t close_line; - /** - * @brief The packet has recently crossed the boundary and is now sitting on the boundary. - * To avoid numerical errors, make sure that d_inner is not calculated. The value is -1 - * if the packed moved inwards, 1 if the packet moved outwards and 0 otherwise. - */ - int64_t recently_crossed_boundary; - /** - * @brief packet is a virtual packet and will ignore any d_line or d_electron checks. - * It now whenever a d_line is calculated only adds the tau_line to an - * internal float. - */ - int64_t virtual_packet_flag; - int64_t virtual_packet; - double d_line; /**< Distance to electron event. */ - double d_electron; /**< Distance to line event. */ - double d_boundary; /**< Distance to shell boundary. */ - int64_t next_shell_id; /**< ID of the next shell packet visits. */ - rpacket_status_t status; /**< Packet status (in process, emitted or reabsorbed). */ -} rpacket_t; - -typedef struct StorageModel -{ - double *packet_nus; - double *packet_mus; - double *packet_energies; - double *output_nus; - double *output_energies; - int64_t *last_line_interaction_in_id; - int64_t *last_line_interaction_out_id; - int64_t *last_line_interaction_shell_id; - int64_t *last_interaction_type; - int64_t no_of_packets; - int64_t no_of_shells; - double *r_inner; - double *r_outer; - double *v_inner; - double time_explosion; - double inverse_time_explosion; - double *electron_densities; - double *inverse_electron_densities; - double *line_list_nu; - double *line_lists_tau_sobolevs; - int64_t line_lists_tau_sobolevs_nd; - double *line_lists_j_blues; - int64_t line_lists_j_blues_nd; - int64_t no_of_lines; - int64_t line_interaction_id; - double *transition_probabilities; - int64_t transition_probabilities_nd; - int64_t *line2macro_level_upper; - int64_t *macro_block_references; - int64_t *transition_type; - int64_t *destination_level_id; - int64_t *transition_line_id; - double *js; - double *nubars; - double spectrum_start_nu; - double spectrum_delta_nu; - double spectrum_end_nu; - double *spectrum_virt_nu; - double sigma_thomson; - double inverse_sigma_thomson; - double inner_boundary_albedo; - int64_t reflective_inner_boundary; - int64_t current_packet_id; -} storage_model_t; - typedef void (*montecarlo_event_handler_t) (rpacket_t * packet, storage_model_t * storage, double distance); @@ -211,89 +104,4 @@ int64_t montecarlo_one_packet_loop (storage_model_t * storage, rpacket_t * packet, int64_t virtual_packet); -inline double rpacket_get_nu (rpacket_t * packet); - -inline void rpacket_set_nu (rpacket_t * packet, double nu); - -inline double rpacket_get_mu (rpacket_t * packet); - -inline void rpacket_set_mu (rpacket_t * packet, double mu); - -inline double rpacket_get_energy (rpacket_t * packet); - -inline void rpacket_set_energy (rpacket_t * packet, double energy); - -inline double rpacket_get_r (rpacket_t * packet); - -inline void rpacket_set_r (rpacket_t * packet, double r); - -inline double rpacket_get_tau_event (rpacket_t * packet); - -inline void rpacket_set_tau_event (rpacket_t * packet, double tau_event); - -inline double rpacket_get_nu_line (rpacket_t * packet); - -inline void rpacket_set_nu_line (rpacket_t * packet, double nu_line); - -inline unsigned int rpacket_get_current_shell_id (rpacket_t * packet); - -inline void rpacket_set_current_shell_id (rpacket_t * packet, - unsigned int current_shell_id); - -inline unsigned int rpacket_get_next_line_id (rpacket_t * packet); - -inline void rpacket_set_next_line_id (rpacket_t * packet, - unsigned int next_line_id); - -inline bool rpacket_get_last_line (rpacket_t * packet); - -inline void rpacket_set_last_line (rpacket_t * packet, bool last_line); - -inline bool rpacket_get_close_line (rpacket_t * packet); - -inline void rpacket_set_close_line (rpacket_t * packet, bool close_line); - -inline int rpacket_get_recently_crossed_boundary (rpacket_t * packet); - -inline void rpacket_set_recently_crossed_boundary (rpacket_t * packet, - int - recently_crossed_boundary); - -inline int rpacket_get_virtual_packet_flag (rpacket_t * packet); - -inline void rpacket_set_virtual_packet_flag (rpacket_t * packet, - int virtual_packet_flag); - -inline int rpacket_get_virtual_packet (rpacket_t * packet); - -inline void rpacket_set_virtual_packet (rpacket_t * packet, - int virtual_packet); - -inline double rpacket_get_d_boundary (rpacket_t * packet); - -inline void rpacket_set_d_boundary (rpacket_t * packet, double d_boundary); - -inline double rpacket_get_d_electron (rpacket_t * packet); - -inline void rpacket_set_d_electron (rpacket_t * packet, double d_electron); - -inline double rpacket_get_d_line (rpacket_t * packet); - -inline void rpacket_set_d_line (rpacket_t * packet, double d_line); - -inline int rpacket_get_next_shell_id (rpacket_t * packet); - -inline void rpacket_set_next_shell_id (rpacket_t * packet, int next_shell_id); - -inline rpacket_status_t rpacket_get_status (rpacket_t * packet); - -inline void rpacket_set_status (rpacket_t * packet, rpacket_status_t status); - -inline void rpacket_reset_tau_event (rpacket_t * packet); - -tardis_error_t rpacket_init (rpacket_t * packet, storage_model_t * storage, - int packet_index, int virtual_packet_flag); - -void initialize_random_kit (unsigned long seed); - #endif // TARDIS_CMONTECARLO_H diff --git a/tardis/montecarlo/src/rpacket.c b/tardis/montecarlo/src/rpacket.c new file mode 100644 index 00000000000..d2046231c83 --- /dev/null +++ b/tardis/montecarlo/src/rpacket.c @@ -0,0 +1,286 @@ +#include "rpacket.h" +#include "storage.h" + +rk_state mt_state; + +tardis_error_t +rpacket_init (rpacket_t * packet, storage_model_t * storage, int packet_index, + int virtual_packet_flag) +{ + double nu_line; + double current_r; + double current_mu; + double current_nu; + double comov_current_nu; + double current_energy; + int64_t current_line_id; + int current_shell_id; + bool last_line; + bool close_line; + int recently_crossed_boundary; + tardis_error_t ret_val = TARDIS_ERROR_OK; + current_nu = storage->packet_nus[packet_index]; + current_energy = storage->packet_energies[packet_index]; + current_mu = storage->packet_mus[packet_index]; + comov_current_nu = current_nu; + current_shell_id = 0; + current_r = storage->r_inner[0]; + current_nu = + current_nu / (1 - + (current_mu * current_r * storage->inverse_time_explosion * + INVERSE_C)); + current_energy = + current_energy / (1 - + (current_mu * current_r * + storage->inverse_time_explosion * INVERSE_C)); + if ((ret_val = + line_search (storage->line_list_nu, comov_current_nu, + storage->no_of_lines, + ¤t_line_id)) != TARDIS_ERROR_OK) + { + return ret_val; + } + last_line = (current_line_id == storage->no_of_lines); + recently_crossed_boundary = true; + rpacket_set_nu (packet, current_nu); + rpacket_set_mu (packet, current_mu); + rpacket_set_energy (packet, current_energy); + rpacket_set_r (packet, current_r); + rpacket_set_current_shell_id (packet, current_shell_id); + rpacket_set_next_line_id (packet, current_line_id); + rpacket_set_last_line (packet, last_line); + rpacket_set_close_line (packet, false); + rpacket_set_recently_crossed_boundary (packet, recently_crossed_boundary); + rpacket_set_virtual_packet_flag (packet, virtual_packet_flag); + return ret_val; +} + +/* + Getter and setter methods. +*/ + +INLINE double +rpacket_get_nu (rpacket_t * packet) +{ + return packet->nu; +} + +INLINE void +rpacket_set_nu (rpacket_t * packet, double nu) +{ + packet->nu = nu; +} + +INLINE double +rpacket_get_mu (rpacket_t * packet) +{ + return packet->mu; +} + +INLINE void +rpacket_set_mu (rpacket_t * packet, double mu) +{ + packet->mu = mu; +} + +INLINE double +rpacket_get_energy (rpacket_t * packet) +{ + return packet->energy; +} + +INLINE void +rpacket_set_energy (rpacket_t * packet, double energy) +{ + packet->energy = energy; +} + +INLINE double +rpacket_get_r (rpacket_t * packet) +{ + return packet->r; +} + +INLINE void +rpacket_set_r (rpacket_t * packet, double r) +{ + packet->r = r; +} + +INLINE double +rpacket_get_tau_event (rpacket_t * packet) +{ + return packet->tau_event; +} + +INLINE void +rpacket_set_tau_event (rpacket_t * packet, double tau_event) +{ + packet->tau_event = tau_event; +} + +INLINE double +rpacket_get_nu_line (rpacket_t * packet) +{ + return packet->nu_line; +} + +INLINE void +rpacket_set_nu_line (rpacket_t * packet, double nu_line) +{ + packet->nu_line = nu_line; +} + +INLINE unsigned int +rpacket_get_current_shell_id (rpacket_t * packet) +{ + return packet->current_shell_id; +} + +INLINE void +rpacket_set_current_shell_id (rpacket_t * packet, + unsigned int current_shell_id) +{ + packet->current_shell_id = current_shell_id; +} + +INLINE unsigned int +rpacket_get_next_line_id (rpacket_t * packet) +{ + return packet->next_line_id; +} + +INLINE void +rpacket_set_next_line_id (rpacket_t * packet, unsigned int next_line_id) +{ + packet->next_line_id = next_line_id; +} + +INLINE bool +rpacket_get_last_line (rpacket_t * packet) +{ + return packet->last_line; +} + +INLINE void +rpacket_set_last_line (rpacket_t * packet, bool last_line) +{ + packet->last_line = last_line; +} + +INLINE bool +rpacket_get_close_line (rpacket_t * packet) +{ + return packet->close_line; +} + +INLINE void +rpacket_set_close_line (rpacket_t * packet, bool close_line) +{ + packet->close_line = close_line; +} + +INLINE int +rpacket_get_recently_crossed_boundary (rpacket_t * packet) +{ + return packet->recently_crossed_boundary; +} + +INLINE void +rpacket_set_recently_crossed_boundary (rpacket_t * packet, + int recently_crossed_boundary) +{ + packet->recently_crossed_boundary = recently_crossed_boundary; +} + +INLINE int +rpacket_get_virtual_packet_flag (rpacket_t * packet) +{ + return packet->virtual_packet_flag; +} + +INLINE void +rpacket_set_virtual_packet_flag (rpacket_t * packet, int virtual_packet_flag) +{ + packet->virtual_packet_flag = virtual_packet_flag; +} + +INLINE int +rpacket_get_virtual_packet (rpacket_t * packet) +{ + return packet->virtual_packet; +} + +INLINE void +rpacket_set_virtual_packet (rpacket_t * packet, int virtual_packet) +{ + packet->virtual_packet = virtual_packet; +} + +INLINE double +rpacket_get_d_boundary (rpacket_t * packet) +{ + return packet->d_boundary; +} + +INLINE void +rpacket_set_d_boundary (rpacket_t * packet, double d_boundary) +{ + packet->d_boundary = d_boundary; +} + +INLINE double +rpacket_get_d_electron (rpacket_t * packet) +{ + return packet->d_electron; +} + +INLINE void +rpacket_set_d_electron (rpacket_t * packet, double d_electron) +{ + packet->d_electron = d_electron; +} + +INLINE double +rpacket_get_d_line (rpacket_t * packet) +{ + return packet->d_line; +} + +INLINE void +rpacket_set_d_line (rpacket_t * packet, double d_line) +{ + packet->d_line = d_line; +} + +INLINE int +rpacket_get_next_shell_id (rpacket_t * packet) +{ + return packet->next_shell_id; +} + +INLINE void +rpacket_set_next_shell_id (rpacket_t * packet, int next_shell_id) +{ + packet->next_shell_id = next_shell_id; +} + +INLINE rpacket_status_t +rpacket_get_status (rpacket_t * packet) +{ + return packet->status; +} + +INLINE void +rpacket_set_status (rpacket_t * packet, rpacket_status_t status) +{ + packet->status = status; +} + +/* Other accessor methods. */ + +INLINE void +rpacket_reset_tau_event (rpacket_t * packet) +{ + rpacket_set_tau_event (packet, -log (rk_double (&mt_state))); +} \ No newline at end of file diff --git a/tardis/montecarlo/src/rpacket.h b/tardis/montecarlo/src/rpacket.h new file mode 100644 index 00000000000..34c0fdbee1b --- /dev/null +++ b/tardis/montecarlo/src/rpacket.h @@ -0,0 +1,153 @@ +#ifndef TARDIS_RPACKET_H +#define TARDIS_RPACKET_H + +#include +#include +#include +#include +#include +#include +#include "randomkit/randomkit.h" +#include "status.h" +#include "storage.h" + +#ifdef __clang__ +#define INLINE extern inline +#else +#define INLINE inline +#endif + +#define MISS_DISTANCE 1e99 +#define C 29979245800.0 +#define INVERSE_C 3.33564095198152e-11 + +/** + * @brief A photon packet. + */ +typedef struct RPacket +{ + double nu; /**< Frequency of the packet in Hz. */ + double mu; /**< Cosine of the angle of the packet. */ + double energy; /**< Energy of the packet in erg. */ + double r; /**< Distance from center in cm. */ + double tau_event; + double nu_line; + int64_t current_shell_id; /**< ID of the current shell. */ + int64_t next_line_id; /**< The index of the next line that the packet will encounter. */ + /** + * @brief The packet has a nu red-ward of the last line. + * It will not encounter any lines anymore. + */ + int64_t last_line; + /** + * @brief The packet just encountered a line that is very close to the next line. + * The next iteration will automatically make an interaction with the next line + * (avoiding numerical problems). + */ + int64_t close_line; + /** + * @brief The packet has recently crossed the boundary and is now sitting on the boundary. + * To avoid numerical errors, make sure that d_inner is not calculated. The value is -1 + * if the packed moved inwards, 1 if the packet moved outwards and 0 otherwise. + */ + int64_t recently_crossed_boundary; + /** + * @brief packet is a virtual packet and will ignore any d_line or d_electron checks. + * It now whenever a d_line is calculated only adds the tau_line to an + * internal float. + */ + int64_t virtual_packet_flag; + int64_t virtual_packet; + double d_line; /**< Distance to electron event. */ + double d_electron; /**< Distance to line event. */ + double d_boundary; /**< Distance to shell boundary. */ + int64_t next_shell_id; /**< ID of the next shell packet visits. */ + rpacket_status_t status; /**< Packet status (in process, emitted or reabsorbed). */ +} rpacket_t; + +inline double rpacket_get_nu (rpacket_t * packet); + +inline void rpacket_set_nu (rpacket_t * packet, double nu); + +inline double rpacket_get_mu (rpacket_t * packet); + +inline void rpacket_set_mu (rpacket_t * packet, double mu); + +inline double rpacket_get_energy (rpacket_t * packet); + +inline void rpacket_set_energy (rpacket_t * packet, double energy); + +inline double rpacket_get_r (rpacket_t * packet); + +inline void rpacket_set_r (rpacket_t * packet, double r); + +inline double rpacket_get_tau_event (rpacket_t * packet); + +inline void rpacket_set_tau_event (rpacket_t * packet, double tau_event); + +inline double rpacket_get_nu_line (rpacket_t * packet); + +inline void rpacket_set_nu_line (rpacket_t * packet, double nu_line); + +inline unsigned int rpacket_get_current_shell_id (rpacket_t * packet); + +inline void rpacket_set_current_shell_id (rpacket_t * packet, + unsigned int current_shell_id); + +inline unsigned int rpacket_get_next_line_id (rpacket_t * packet); + +inline void rpacket_set_next_line_id (rpacket_t * packet, + unsigned int next_line_id); + +inline bool rpacket_get_last_line (rpacket_t * packet); + +inline void rpacket_set_last_line (rpacket_t * packet, bool last_line); + +inline bool rpacket_get_close_line (rpacket_t * packet); + +inline void rpacket_set_close_line (rpacket_t * packet, bool close_line); + +inline int rpacket_get_recently_crossed_boundary (rpacket_t * packet); + +inline void rpacket_set_recently_crossed_boundary (rpacket_t * packet, + int + recently_crossed_boundary); + +inline int rpacket_get_virtual_packet_flag (rpacket_t * packet); + +inline void rpacket_set_virtual_packet_flag (rpacket_t * packet, + int virtual_packet_flag); + +inline int rpacket_get_virtual_packet (rpacket_t * packet); + +inline void rpacket_set_virtual_packet (rpacket_t * packet, + int virtual_packet); + +inline double rpacket_get_d_boundary (rpacket_t * packet); + +inline void rpacket_set_d_boundary (rpacket_t * packet, double d_boundary); + +inline double rpacket_get_d_electron (rpacket_t * packet); + +inline void rpacket_set_d_electron (rpacket_t * packet, double d_electron); + +inline double rpacket_get_d_line (rpacket_t * packet); + +inline void rpacket_set_d_line (rpacket_t * packet, double d_line); + +inline int rpacket_get_next_shell_id (rpacket_t * packet); + +inline void rpacket_set_next_shell_id (rpacket_t * packet, int next_shell_id); + +inline rpacket_status_t rpacket_get_status (rpacket_t * packet); + +inline void rpacket_set_status (rpacket_t * packet, rpacket_status_t status); + +inline void rpacket_reset_tau_event (rpacket_t * packet); + +tardis_error_t rpacket_init (rpacket_t * packet, storage_model_t * storage, + int packet_index, int virtual_packet_flag); + +void initialize_random_kit (unsigned long seed); + +#endif // TARDIS_RPACKET_H \ No newline at end of file diff --git a/tardis/montecarlo/src/status.h b/tardis/montecarlo/src/status.h new file mode 100644 index 00000000000..adccc71ad48 --- /dev/null +++ b/tardis/montecarlo/src/status.h @@ -0,0 +1,24 @@ +#ifndef TARDIS_STATUS_H +#define TARDIS_STATUS_H + +#ifdef __clang__ +#define INLINE extern inline +#else +#define INLINE inline +#endif + +typedef enum +{ + TARDIS_ERROR_OK = 0, + TARDIS_ERROR_BOUNDS_ERROR = 1, + TARDIS_ERROR_COMOV_NU_LESS_THAN_NU_LINE = 2 +} tardis_error_t; + +typedef enum +{ + TARDIS_PACKET_STATUS_IN_PROCESS = 0, + TARDIS_PACKET_STATUS_EMITTED = 1, + TARDIS_PACKET_STATUS_REABSORBED = 2 +} rpacket_status_t; + +#endif // TARDIS_STATUS_H \ No newline at end of file diff --git a/tardis/montecarlo/src/storage.h b/tardis/montecarlo/src/storage.h new file mode 100644 index 00000000000..b104d0f0113 --- /dev/null +++ b/tardis/montecarlo/src/storage.h @@ -0,0 +1,64 @@ +#ifndef TARDIS_STORAGE_H +#define TARDIS_STORAGE_H + +#include +#include +#include +#include +#include +#include + +#ifdef __clang__ +#define INLINE extern inline +#else +#define INLINE inline +#endif + +typedef struct StorageModel +{ + double *packet_nus; + double *packet_mus; + double *packet_energies; + double *output_nus; + double *output_energies; + int64_t *last_line_interaction_in_id; + int64_t *last_line_interaction_out_id; + int64_t *last_line_interaction_shell_id; + int64_t *last_interaction_type; + int64_t no_of_packets; + int64_t no_of_shells; + double *r_inner; + double *r_outer; + double *v_inner; + double time_explosion; + double inverse_time_explosion; + double *electron_densities; + double *inverse_electron_densities; + double *line_list_nu; + double *line_lists_tau_sobolevs; + int64_t line_lists_tau_sobolevs_nd; + double *line_lists_j_blues; + int64_t line_lists_j_blues_nd; + int64_t no_of_lines; + int64_t line_interaction_id; + double *transition_probabilities; + int64_t transition_probabilities_nd; + int64_t *line2macro_level_upper; + int64_t *macro_block_references; + int64_t *transition_type; + int64_t *destination_level_id; + int64_t *transition_line_id; + double *js; + double *nubars; + double spectrum_start_nu; + double spectrum_delta_nu; + double spectrum_end_nu; + double *spectrum_virt_nu; + double sigma_thomson; + double inverse_sigma_thomson; + double inner_boundary_albedo; + int64_t reflective_inner_boundary; + int64_t current_packet_id; +} storage_model_t; + +#endif // TARDIS_STORAGE_H \ No newline at end of file