double test_calculate_chi_bf(void){ rpacket_t rp; storage_model_t sm; init_rpacket(&rp); init_storage_model(&sm); rk_state mt_state; irandom(&mt_state); int64_t j_blue_idx = 0; double D_BOUNDARY = compute_distance2boundary(&rp, &sm); rpacket_set_d_boundary(&rp, D_BOUNDARY); double D_LINE; // FIXME MR: return status of compute_distance2line() is ignored compute_distance2line(&rp, &sm, &D_LINE); rpacket_set_d_line(&rp, D_LINE); move_packet(&rp, &sm, 1e13); double d_line = rpacket_get_d_line(&rp); increment_j_blue_estimator(&rp, &sm, d_line, j_blue_idx); double DISTANCE = 1e13; montecarlo_line_scatter(&rp, &sm, DISTANCE, &mt_state); DISTANCE = 0.95e13; // MR: wrong: move_packet_across_shell_boundary() returns void move_packet_across_shell_boundary(&rp, &sm, DISTANCE, &mt_state); montecarlo_one_packet(&sm, &rp, 1, &mt_state); montecarlo_one_packet_loop(&sm, &rp, 1, &mt_state); DISTANCE = 1e13; montecarlo_thomson_scatter(&rp, &sm, DISTANCE, &mt_state); calculate_chi_bf(&rp, &sm); double res = rpacket_doppler_factor (&rp, &sm); dealloc_storage_model(&sm); return res; }
void compute_distance2continuum(rpacket_t * packet, storage_model_t * storage) { double chi_freefree, chi_electron, chi_continuum, d_continuum; if (storage->cont_status == CONTINUUM_ON) { calculate_chi_bf(packet, storage); double chi_boundfree = rpacket_get_chi_boundfree(packet); rpacket_set_chi_freefree(packet, 0.0); chi_freefree = rpacket_get_chi_freefree(packet); // MR ?? this is always zero chi_electron = storage->electron_densities[rpacket_get_current_shell_id(packet)] * storage->sigma_thomson * rpacket_doppler_factor (packet, storage); chi_continuum = chi_boundfree + chi_freefree + chi_electron; d_continuum = rpacket_get_tau_event(packet) / chi_continuum; } else { // FIXME MR: an assignment to chi_freefree seems to be missing here chi_electron = storage->electron_densities[rpacket_get_current_shell_id(packet)] * storage->sigma_thomson; chi_continuum = chi_electron; d_continuum = storage->inverse_electron_densities[rpacket_get_current_shell_id (packet)] * storage->inverse_sigma_thomson * rpacket_get_tau_event (packet); } if (rpacket_get_virtual_packet(packet) > 0) { //Set all continuum distances to MISS_DISTANCE in case of an virtual_packet rpacket_set_d_continuum(packet, MISS_DISTANCE); rpacket_set_chi_boundfree(packet, 0.0); rpacket_set_chi_electron(packet, chi_electron); rpacket_set_chi_freefree(packet, 0.0); rpacket_set_chi_continuum(packet, chi_continuum); } else { // fprintf(stderr, "--------\n"); // fprintf(stderr, "nu = %e \n", rpacket_get_nu(packet)); // fprintf(stderr, "chi_electron = %e\n", chi_electron); // fprintf(stderr, "chi_boundfree = %e\n", calculate_chi_bf(packet, storage)); // fprintf(stderr, "chi_line = %e \n", rpacket_get_tau_event(packet) / rpacket_get_d_line(packet)); // fprintf(stderr, "--------\n"); rpacket_set_chi_freefree(packet, chi_freefree); rpacket_set_chi_electron(packet, chi_electron); rpacket_set_chi_continuum(packet, chi_continuum); rpacket_set_d_continuum(packet, d_continuum); } }