feat(neutrino): Updated neutrino output
GridFire now reports neutrino loss for reaclib reactions. Note this currently is only computed if precomputation is enabled.
This commit is contained in:
10
src/extern/fortran/gridfire_mod.f90
vendored
10
src/extern/fortran/gridfire_mod.f90
vendored
@@ -102,7 +102,7 @@ module gridfire_mod
|
||||
end function
|
||||
|
||||
! int gf_evolve(...)
|
||||
function gf_evolve(ptr, Y_in, num_species, T, rho, dt, Y_out, energy_out, dEps_dT, dEps_dRho, mass_lost) result(ierr) &
|
||||
function gf_evolve(ptr, Y_in, num_species, T, rho, dt, Y_out, energy_out, dEps_dT, dEps_dRho, specific_neutrino_loss, specific_neutrino_flux, mass_lost) result(ierr) &
|
||||
bind(C, name="gf_evolve")
|
||||
import
|
||||
type(c_ptr), value :: ptr
|
||||
@@ -110,7 +110,7 @@ module gridfire_mod
|
||||
integer(c_size_t), value :: num_species
|
||||
real(c_double), value :: T, rho, dt
|
||||
real(c_double), dimension(*), intent(out) :: Y_out
|
||||
real(c_double), intent(out) :: energy_out, dEps_dT, dEps_dRho, mass_lost
|
||||
real(c_double), intent(out) :: energy_out, dEps_dT, dEps_dRho, specific_neutrino_loss, specific_neutrino_flux, mass_lost
|
||||
integer(c_int) :: ierr
|
||||
end function
|
||||
end interface
|
||||
@@ -235,12 +235,12 @@ module gridfire_mod
|
||||
end if
|
||||
end subroutine setup_solver
|
||||
|
||||
subroutine evolve(self, Y_in, T, rho, dt, Y_out, energy, dedt, dedrho, mass_lost, ierr)
|
||||
subroutine evolve(self, Y_in, T, rho, dt, Y_out, energy, dedt, dedrho, nu_e_loss, nu_flux, mass_lost, ierr)
|
||||
class(GridFire), intent(in) :: self
|
||||
real(c_double), dimension(:), intent(in) :: Y_in
|
||||
real(c_double), value :: T, rho, dt
|
||||
real(c_double), dimension(:), intent(out) :: Y_out
|
||||
real(c_double), intent(out) :: energy, dedt, dedrho, mass_lost
|
||||
real(c_double), intent(out) :: energy, dedt, dedrho, nu_e_loss, nu_flux, mass_lost
|
||||
integer, intent(out) :: ierr
|
||||
integer(c_int) :: c_ierr
|
||||
|
||||
@@ -248,7 +248,7 @@ module gridfire_mod
|
||||
Y_in, self%num_species, &
|
||||
T, rho, dt, &
|
||||
Y_out, &
|
||||
energy, dedt, dedrho, mass_lost)
|
||||
energy, dedt, dedrho, nu_e_loss, nu_flux, mass_lost)
|
||||
|
||||
ierr = int(c_ierr)
|
||||
if (ierr /= GF_SUCCESS .AND. ierr /= FDSSE_SUCCESS) then
|
||||
|
||||
@@ -31,7 +31,10 @@ struct GridFireContext {
|
||||
double* Y_out,
|
||||
double& energy_out,
|
||||
double& dEps_dT,
|
||||
double& dEps_dRho, double& mass_lost
|
||||
double& dEps_dRho,
|
||||
double& specific_neutrino_energy_loss,
|
||||
double& specific_neutrino_flux,
|
||||
double& mass_lost
|
||||
);
|
||||
|
||||
std::string last_error;
|
||||
|
||||
@@ -81,7 +81,10 @@ extern "C" {
|
||||
double* Y_out,
|
||||
double* energy_out,
|
||||
double* dEps_dT,
|
||||
double* dEps_dRho, double* mass_lost
|
||||
double* dEps_dRho,
|
||||
double* specific_neutrino_energy_loss,
|
||||
double* specific_neutrino_flux,
|
||||
double* mass_lost
|
||||
);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
7
src/extern/lib/gridfire_context.cpp
vendored
7
src/extern/lib/gridfire_context.cpp
vendored
@@ -121,7 +121,10 @@ int GridFireContext::evolve(
|
||||
double* Y_out,
|
||||
double& energy_out,
|
||||
double& dEps_dT,
|
||||
double& dEps_dRho, double& mass_lost
|
||||
double& dEps_dRho,
|
||||
double& specific_neutrino_energy_loss,
|
||||
double& specific_neutrino_flux,
|
||||
double& mass_lost
|
||||
) {
|
||||
init_composition_from_abundance_vector(Y_in, num_species);
|
||||
|
||||
@@ -137,6 +140,8 @@ int GridFireContext::evolve(
|
||||
energy_out = result.energy;
|
||||
dEps_dT = result.dEps_dT;
|
||||
dEps_dRho = result.dEps_dRho;
|
||||
specific_neutrino_energy_loss = result.specific_neutrino_energy_loss;
|
||||
specific_neutrino_flux = result.specific_neutrino_flux;
|
||||
|
||||
std::set<fourdst::atomic::Species> seen_species;
|
||||
for (size_t i = 0; i < num_species; i++) {
|
||||
|
||||
14
src/extern/lib/gridfire_extern.cpp
vendored
14
src/extern/lib/gridfire_extern.cpp
vendored
@@ -86,7 +86,7 @@ extern "C" {
|
||||
|
||||
int gf_evolve(
|
||||
void* ptr,
|
||||
const double* Y,
|
||||
const double* Y_in,
|
||||
const size_t num_species,
|
||||
const double T,
|
||||
const double rho,
|
||||
@@ -95,12 +95,15 @@ extern "C" {
|
||||
double* Y_out,
|
||||
double* energy_out,
|
||||
double* dEps_dT,
|
||||
double* dEps_dRho, double* mass_lost
|
||||
double* dEps_dRho,
|
||||
double* specific_neutrino_energy_loss,
|
||||
double* specific_neutrino_flux,
|
||||
double* mass_lost
|
||||
) {
|
||||
auto* ctx = static_cast<GridFireContext*>(ptr);
|
||||
try {
|
||||
const int result = ctx->evolve(
|
||||
Y,
|
||||
Y_in,
|
||||
num_species,
|
||||
T,
|
||||
rho,
|
||||
@@ -109,7 +112,10 @@ extern "C" {
|
||||
Y_out,
|
||||
*energy_out,
|
||||
*dEps_dT,
|
||||
*dEps_dRho, *mass_lost
|
||||
*dEps_dRho,
|
||||
*specific_neutrino_energy_loss,
|
||||
*specific_neutrino_flux,
|
||||
*mass_lost
|
||||
);
|
||||
if (result != 0) {
|
||||
return result;
|
||||
|
||||
Reference in New Issue
Block a user