From 058bd256793846a093952f45927482502d26096e Mon Sep 17 00:00:00 2001 From: Matthew Abruzzo Date: Mon, 29 Sep 2025 10:04:00 -0400 Subject: [PATCH 1/9] convert solve_chemistry.c -> solve_chemistry.cpp --- .clang-format-ignore | 2 +- src/clib/CMakeLists.txt | 2 +- ...{solve_chemistry.c => solve_chemistry.cpp} | 53 +++++++++---------- src/clib/utils.h | 14 +++++ 4 files changed, 41 insertions(+), 30 deletions(-) rename src/clib/{solve_chemistry.c => solve_chemistry.cpp} (64%) diff --git a/.clang-format-ignore b/.clang-format-ignore index 9e30588be..5b2165a2e 100644 --- a/.clang-format-ignore +++ b/.clang-format-ignore @@ -42,7 +42,7 @@ src/clib/interpolate.hpp src/clib/phys_constants.h src/clib/rate_functions.c src/clib/set_default_chemistry_parameters.c -src/clib/solve_chemistry.c +src/clib/solve_chemistry.cpp src/clib/solve_rate_cool_g-cpp.cpp src/clib/status_reporting.c src/clib/status_reporting.h diff --git a/src/clib/CMakeLists.txt b/src/clib/CMakeLists.txt index 4974ee7d9..ae14c29a2 100644 --- a/src/clib/CMakeLists.txt +++ b/src/clib/CMakeLists.txt @@ -94,7 +94,6 @@ add_library(Grackle_Grackle initialize_UVbackground_data.c initialize_UVbackground_data.h rate_functions.c set_default_chemistry_parameters.c - solve_chemistry.c status_reporting.c status_reporting.h update_UVbackground_rates.c utils.c @@ -116,6 +115,7 @@ add_library(Grackle_Grackle internal_types.cpp internal_types.hpp opaque_storage.hpp rate_utils.cpp + solve_chemistry.cpp scale_fields.hpp solve_rate_cool_g-cpp.cpp solve_rate_cool_g-cpp.h step_rate_newton_raphson.hpp diff --git a/src/clib/solve_chemistry.c b/src/clib/solve_chemistry.cpp similarity index 64% rename from src/clib/solve_chemistry.c rename to src/clib/solve_chemistry.cpp index 130293bb8..15491dfdd 100644 --- a/src/clib/solve_chemistry.c +++ b/src/clib/solve_chemistry.cpp @@ -11,33 +11,30 @@ / software. ************************************************************************/ -#include -#include +#include #include "grackle.h" -#include "grackle_macros.h" #include "internal_units.h" -#include "phys_constants.h" #include "solve_rate_cool_g-cpp.h" #include "utils.h" /* function prototypes */ -int update_UVbackground_rates(chemistry_data *my_chemistry, - chemistry_data_storage *my_rates, - photo_rate_storage *my_uvb_rates, - code_units *my_units); +extern "C" int update_UVbackground_rates(chemistry_data *my_chemistry, + chemistry_data_storage *my_rates, + photo_rate_storage *my_uvb_rates, + code_units *my_units); -int local_solve_chemistry(chemistry_data *my_chemistry, - chemistry_data_storage *my_rates, - code_units *my_units, - grackle_field_data *my_fields, - double dt_value) +extern "C" int local_solve_chemistry(chemistry_data *my_chemistry, + chemistry_data_storage *my_rates, + code_units *my_units, + grackle_field_data *my_fields, + double dt_value) { /* Return if this doesn't concern us. */ if (!my_chemistry->use_grackle) - return SUCCESS; + return GR_SUCCESS; /* Update UV background rates. */ photo_rate_storage my_uvb_rates; @@ -51,9 +48,9 @@ int local_solve_chemistry(chemistry_data *my_chemistry, if (my_chemistry->UVbackground == 1) { if (update_UVbackground_rates(my_chemistry, my_rates, - &my_uvb_rates, my_units) == FAIL) { - fprintf(stderr, "Error in update_UVbackground_rates.\n"); - return FAIL; + &my_uvb_rates, my_units) != GR_SUCCESS) { + std::fprintf(stderr, "Error in update_UVbackground_rates.\n"); + return GR_FAIL; } } else { @@ -85,8 +82,8 @@ int local_solve_chemistry(chemistry_data *my_chemistry, /* Error checking for H2 shielding approximation */ if (self_shielding_err_check(my_chemistry, my_fields, - "local_solve_chemistry") == FAIL) { - return FAIL; + "local_solve_chemistry") != GR_SUCCESS) { + return GR_SUCCESS; } /* Call the routine to solve cooling equations. */ @@ -96,22 +93,22 @@ int local_solve_chemistry(chemistry_data *my_chemistry, my_chemistry, my_rates, my_fields, &my_uvb_rates ); - if (ierr == GR_FAIL) { - fprintf(stderr, "Error in solve_rate_cool_g.\n"); + if (ierr != GR_SUCCESS) { + std::fprintf(stderr, "Error in solve_rate_cool_g.\n"); } return ierr; } -int solve_chemistry(code_units *my_units, - grackle_field_data *my_fields, - double dt_value) +extern "C" int solve_chemistry(code_units *my_units, + grackle_field_data *my_fields, + double dt_value) { if (local_solve_chemistry(grackle_data, &grackle_rates, - my_units, my_fields, dt_value) == FAIL) { - fprintf(stderr, "Error in local_solve_chemistry.\n"); - return FAIL; + my_units, my_fields, dt_value) != GR_SUCCESS) { + std::fprintf(stderr, "Error in local_solve_chemistry.\n"); + return GR_FAIL; } - return SUCCESS; + return GR_SUCCESS; } diff --git a/src/clib/utils.h b/src/clib/utils.h index 003794bee..dc74e372e 100644 --- a/src/clib/utils.h +++ b/src/clib/utils.h @@ -11,9 +11,16 @@ / software. ************************************************************************/ +#ifndef UTILS_H +#define UTILS_H + #include "grackle_chemistry_data.h" #include "grackle_types.h" +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + /// Perform an error check related to self-shielding. If the check fails, the /// function returns FAIL and prints an error message to stderr /// @@ -23,3 +30,10 @@ int self_shielding_err_check(const chemistry_data *my_chemistry, const grackle_field_data *fields, const char* func_name); + + +#ifdef __cplusplus +} // extern "C" +#endif // __cplusplus + +#endif // UTILS_H From 2824b04c3005113fceab00c9672c3894f2aaa499 Mon Sep 17 00:00:00 2001 From: Matthew Abruzzo Date: Mon, 29 Sep 2025 10:09:27 -0400 Subject: [PATCH 2/9] convert calulate_temperature.c -> calculate_temperature.cpp --- .clang-format-ignore | 2 +- src/clib/CMakeLists.txt | 2 +- ...emperature.c => calculate_temperature.cpp} | 25 ++++++++----------- 3 files changed, 13 insertions(+), 16 deletions(-) rename src/clib/{calculate_temperature.c => calculate_temperature.cpp} (83%) diff --git a/.clang-format-ignore b/.clang-format-ignore index 5b2165a2e..ac8b7d985 100644 --- a/.clang-format-ignore +++ b/.clang-format-ignore @@ -15,7 +15,7 @@ src/clib/calculate_cooling_time.c src/clib/calculate_dust_temperature.c src/clib/calculate_gamma.c src/clib/calculate_pressure.c -src/clib/calculate_temperature.c +src/clib/calculate_temperature.cpp src/clib/chemistry_solver_funcs.hpp src/clib/cie_thin_cooling_rate_tables.h src/clib/cool1d_multi_g-cpp.C diff --git a/src/clib/CMakeLists.txt b/src/clib/CMakeLists.txt index ae14c29a2..f4b1aee33 100644 --- a/src/clib/CMakeLists.txt +++ b/src/clib/CMakeLists.txt @@ -86,7 +86,6 @@ add_library(Grackle_Grackle calculate_dust_temperature.c calculate_gamma.c calculate_pressure.c - calculate_temperature.c dynamic_api.c grackle_units.c index_helper.c @@ -106,6 +105,7 @@ add_library(Grackle_Grackle # C++ Source (and Private Header Files) calc_tdust_3d.cpp calc_tdust_3d.h calc_temp_cloudy_g.cpp calc_temp_cloudy_g.h + calculate_temperature.cpp cool_multi_time_g.cpp cool_multi_time_g.h dust_props.hpp initialize_chemistry_data.cpp diff --git a/src/clib/calculate_temperature.c b/src/clib/calculate_temperature.cpp similarity index 83% rename from src/clib/calculate_temperature.c rename to src/clib/calculate_temperature.cpp index 4577348e8..b777aab4c 100644 --- a/src/clib/calculate_temperature.c +++ b/src/clib/calculate_temperature.cpp @@ -11,14 +11,11 @@ / software. ************************************************************************/ -#include -#include -#include +#include #include "calc_temp_cloudy_g.h" #include "grackle.h" #include "index_helper.h" #include "internal_units.h" -#include "phys_constants.h" #ifdef _OPENMP #include @@ -33,11 +30,11 @@ #define MINIMUM_TEMPERATURE 1.0 -int local_calculate_temperature(chemistry_data *my_chemistry, - chemistry_data_storage *my_rates, - code_units *my_units, - grackle_field_data *my_fields, - gr_float *temperature) +extern "C" int local_calculate_temperature(chemistry_data *my_chemistry, + chemistry_data_storage *my_rates, + code_units *my_units, + grackle_field_data *my_fields, + gr_float *temperature) { if (!my_chemistry->use_grackle) { return GR_SUCCESS; } @@ -55,7 +52,7 @@ int local_calculate_temperature(chemistry_data *my_chemistry, /* Compute the pressure first. */ if (local_calculate_pressure(my_chemistry, my_rates, my_units, my_fields, temperature) != GR_SUCCESS) { - fprintf(stderr, "Error in calculate_pressure.\n"); + std::fprintf(stderr, "Error in calculate_pressure.\n"); return GR_FAIL; } @@ -118,13 +115,13 @@ int local_calculate_temperature(chemistry_data *my_chemistry, } -int calculate_temperature(code_units *my_units, - grackle_field_data *my_fields, - gr_float *temperature) +extern "C" int calculate_temperature(code_units *my_units, + grackle_field_data *my_fields, + gr_float *temperature) { if (local_calculate_temperature(grackle_data, &grackle_rates, my_units, my_fields, temperature) != GR_SUCCESS) { - fprintf(stderr, "Error in local_calculate_temperature.\n"); + std::fprintf(stderr, "Error in local_calculate_temperature.\n"); return GR_FAIL; } return GR_SUCCESS; From 8486c136590b3f2a1076ab95ec6f5ffcb783eaf1 Mon Sep 17 00:00:00 2001 From: Matthew Abruzzo Date: Mon, 29 Sep 2025 10:18:00 -0400 Subject: [PATCH 3/9] convert calculate_pressure.c -> calculate_pressure.cpp I also removed some references to grackle_macros.h --- .clang-format-ignore | 2 +- src/clib/CMakeLists.txt | 2 +- ...late_pressure.c => calculate_pressure.cpp} | 44 ++++++++----------- 3 files changed, 20 insertions(+), 28 deletions(-) rename src/clib/{calculate_pressure.c => calculate_pressure.cpp} (78%) diff --git a/.clang-format-ignore b/.clang-format-ignore index ac8b7d985..6bdf38830 100644 --- a/.clang-format-ignore +++ b/.clang-format-ignore @@ -14,7 +14,7 @@ src/clib/calc_tdust_3d.cpp src/clib/calculate_cooling_time.c src/clib/calculate_dust_temperature.c src/clib/calculate_gamma.c -src/clib/calculate_pressure.c +src/clib/calculate_pressure.cpp src/clib/calculate_temperature.cpp src/clib/chemistry_solver_funcs.hpp src/clib/cie_thin_cooling_rate_tables.h diff --git a/src/clib/CMakeLists.txt b/src/clib/CMakeLists.txt index f4b1aee33..9637d6213 100644 --- a/src/clib/CMakeLists.txt +++ b/src/clib/CMakeLists.txt @@ -85,7 +85,6 @@ add_library(Grackle_Grackle calculate_cooling_time.c calculate_dust_temperature.c calculate_gamma.c - calculate_pressure.c dynamic_api.c grackle_units.c index_helper.c @@ -105,6 +104,7 @@ add_library(Grackle_Grackle # C++ Source (and Private Header Files) calc_tdust_3d.cpp calc_tdust_3d.h calc_temp_cloudy_g.cpp calc_temp_cloudy_g.h + calculate_pressure.cpp calculate_temperature.cpp cool_multi_time_g.cpp cool_multi_time_g.h dust_props.hpp diff --git a/src/clib/calculate_pressure.c b/src/clib/calculate_pressure.cpp similarity index 78% rename from src/clib/calculate_pressure.c rename to src/clib/calculate_pressure.cpp index 2f2aa719a..8c92bcc0c 100644 --- a/src/clib/calculate_pressure.c +++ b/src/clib/calculate_pressure.cpp @@ -11,32 +11,24 @@ / software. ************************************************************************/ -#include -#include -#include -#include "grackle_macros.h" -#include "grackle_types.h" -#include "grackle_chemistry_data.h" +#include +#include // std::fmax +#include "grackle.h" #include "phys_constants.h" #include "index_helper.h" #ifdef _OPENMP #include #endif -extern chemistry_data *grackle_data; -extern chemistry_data_storage grackle_rates; - -double get_temperature_units(code_units *my_units); - -int local_calculate_pressure(chemistry_data *my_chemistry, - chemistry_data_storage *my_rates, - code_units *my_units, - grackle_field_data *my_fields, - gr_float *pressure) +extern "C" int local_calculate_pressure(chemistry_data *my_chemistry, + chemistry_data_storage *my_rates, + code_units *my_units, + grackle_field_data *my_fields, + gr_float *pressure) { if (!my_chemistry->use_grackle) - return SUCCESS; + return GR_SUCCESS; double tiny_number = 1.e-20; const grackle_index_helper ind_helper = build_index_helper_(my_fields); @@ -100,7 +92,7 @@ int local_calculate_pressure(chemistry_data *my_chemistry, if (number_density == 0) number_density = tiny_number; - temp = max(temperature_units * pressure[index] / (number_density + nH2), + temp = std::fmax(temperature_units * pressure[index] / (number_density + nH2), 1); /* Only do full computation if there is a reasonable amount of H2. @@ -126,17 +118,17 @@ int local_calculate_pressure(chemistry_data *my_chemistry, } // end: if (my_chemistry->primordial_chemistry > 1) - return SUCCESS; + return GR_SUCCESS; } -int calculate_pressure(code_units *my_units, - grackle_field_data *my_fields, - gr_float *pressure) +extern "C" int calculate_pressure(code_units *my_units, + grackle_field_data *my_fields, + gr_float *pressure) { if (local_calculate_pressure(grackle_data, &grackle_rates, my_units, - my_fields, pressure) == FAIL) { - fprintf(stderr, "Error in local_calculate_pressure.\n"); - return FAIL; + my_fields, pressure) != GR_SUCCESS) { + std::fprintf(stderr, "Error in local_calculate_pressure.\n"); + return GR_FAIL; } - return SUCCESS; + return GR_SUCCESS; } From a92485310ca7317f6566139ef3535e4e46317e02 Mon Sep 17 00:00:00 2001 From: Matthew Abruzzo Date: Mon, 29 Sep 2025 10:27:08 -0400 Subject: [PATCH 4/9] convert calculate_gamma.c -> calculate_gamma.cpp --- .clang-format-ignore | 2 +- src/clib/CMakeLists.txt | 2 +- ...{calculate_gamma.c => calculate_gamma.cpp} | 52 +++++++------------ 3 files changed, 22 insertions(+), 34 deletions(-) rename src/clib/{calculate_gamma.c => calculate_gamma.cpp} (70%) diff --git a/.clang-format-ignore b/.clang-format-ignore index 6bdf38830..26179d766 100644 --- a/.clang-format-ignore +++ b/.clang-format-ignore @@ -13,7 +13,7 @@ src/clib/c_wrappers/wrap_interpolators_g.c src/clib/calc_tdust_3d.cpp src/clib/calculate_cooling_time.c src/clib/calculate_dust_temperature.c -src/clib/calculate_gamma.c +src/clib/calculate_gamma.cpp src/clib/calculate_pressure.cpp src/clib/calculate_temperature.cpp src/clib/chemistry_solver_funcs.hpp diff --git a/src/clib/CMakeLists.txt b/src/clib/CMakeLists.txt index 9637d6213..4eae399e3 100644 --- a/src/clib/CMakeLists.txt +++ b/src/clib/CMakeLists.txt @@ -84,7 +84,6 @@ add_library(Grackle_Grackle # C source files calculate_cooling_time.c calculate_dust_temperature.c - calculate_gamma.c dynamic_api.c grackle_units.c index_helper.c @@ -104,6 +103,7 @@ add_library(Grackle_Grackle # C++ Source (and Private Header Files) calc_tdust_3d.cpp calc_tdust_3d.h calc_temp_cloudy_g.cpp calc_temp_cloudy_g.h + calculate_gamma.cpp calculate_pressure.cpp calculate_temperature.cpp cool_multi_time_g.cpp cool_multi_time_g.h diff --git a/src/clib/calculate_gamma.c b/src/clib/calculate_gamma.cpp similarity index 70% rename from src/clib/calculate_gamma.c rename to src/clib/calculate_gamma.cpp index bde450dc5..f80cd0f1d 100644 --- a/src/clib/calculate_gamma.c +++ b/src/clib/calculate_gamma.cpp @@ -11,36 +11,24 @@ / software. ************************************************************************/ -#include -#include -#include -#include "grackle_macros.h" -#include "grackle_types.h" -#include "grackle_chemistry_data.h" +#include +#include +#include "grackle.h" #include "phys_constants.h" #include "index_helper.h" #ifdef _OPENMP #include #endif -extern chemistry_data *grackle_data; -extern chemistry_data_storage grackle_rates; - -int local_calculate_temperature(chemistry_data *my_chemistry, - chemistry_data_storage *my_rates, - code_units *my_units, - grackle_field_data *my_fields, - gr_float *temperature); - -int local_calculate_gamma(chemistry_data *my_chemistry, - chemistry_data_storage *my_rates, - code_units *my_units, - grackle_field_data *my_fields, - gr_float *my_gamma) +extern "C" int local_calculate_gamma(chemistry_data *my_chemistry, + chemistry_data_storage *my_rates, + code_units *my_units, + grackle_field_data *my_fields, + gr_float *my_gamma) { if (!my_chemistry->use_grackle) - return SUCCESS; + return GR_SUCCESS; const grackle_index_helper ind_helper = build_index_helper_(my_fields); int outer_ind, index; @@ -63,9 +51,9 @@ int local_calculate_gamma(chemistry_data *my_chemistry, /* Compute the temperature first. */ if (local_calculate_temperature(my_chemistry, my_rates, my_units, - my_fields, my_gamma) == FAIL) { - fprintf(stderr, "Error in local_calculate_temperature.\n"); - return FAIL; + my_fields, my_gamma) != GR_SUCCESS) { + std::fprintf(stderr, "Error in local_calculate_temperature.\n"); + return GR_FAIL; } /* Compute Gamma with molecular Hydrogen formula from Omukau \& Nishi @@ -107,7 +95,7 @@ int local_calculate_gamma(chemistry_data *my_chemistry, if (nH2 / number_density > 1e-3) { x = 6100.0 / my_gamma[index]; if (x < 10.0) - GammaH2Inverse = 0.5*(5 + 2.0 * x*x * exp(x)/POW(exp(x)-1.0,2)); + GammaH2Inverse = 0.5*(5 + 2.0 * x*x * std::exp(x)/std::pow(std::exp(x)-1.0,2.)); } /* Add in H2. */ @@ -120,17 +108,17 @@ int local_calculate_gamma(chemistry_data *my_chemistry, } // end: if (my_chemistry->primordial_chemistry > 1) - return SUCCESS; + return GR_SUCCESS; } -int calculate_gamma(code_units *my_units, - grackle_field_data *my_fields, - gr_float *my_gamma) +extern "C" int calculate_gamma(code_units *my_units, + grackle_field_data *my_fields, + gr_float *my_gamma) { if (local_calculate_gamma(grackle_data, &grackle_rates, my_units, - my_fields, my_gamma) == FAIL) { + my_fields, my_gamma) != GR_SUCCESS) { fprintf(stderr, "Error in local_calculate_gamma.\n"); - return FAIL; + return GR_FAIL; } - return SUCCESS; + return GR_SUCCESS; } From 8754c44b87a0d09456ce9cd03f7f439c1b00c2d7 Mon Sep 17 00:00:00 2001 From: Matthew Abruzzo Date: Mon, 29 Sep 2025 10:33:56 -0400 Subject: [PATCH 5/9] convert calculate_dust_temperature.c -> calculate_dust_temperature.cpp --- .clang-format-ignore | 2 +- src/clib/CMakeLists.txt | 2 +- ...ature.c => calculate_dust_temperature.cpp} | 39 ++++++++----------- 3 files changed, 19 insertions(+), 24 deletions(-) rename src/clib/{calculate_dust_temperature.c => calculate_dust_temperature.cpp} (61%) diff --git a/.clang-format-ignore b/.clang-format-ignore index 26179d766..a95163ac4 100644 --- a/.clang-format-ignore +++ b/.clang-format-ignore @@ -12,7 +12,7 @@ src/clib/c_wrappers/wrap_interpolators_g.c src/clib/calc_tdust_3d.cpp src/clib/calculate_cooling_time.c -src/clib/calculate_dust_temperature.c +src/clib/calculate_dust_temperature.cpp src/clib/calculate_gamma.cpp src/clib/calculate_pressure.cpp src/clib/calculate_temperature.cpp diff --git a/src/clib/CMakeLists.txt b/src/clib/CMakeLists.txt index 4eae399e3..8c93185c2 100644 --- a/src/clib/CMakeLists.txt +++ b/src/clib/CMakeLists.txt @@ -83,7 +83,6 @@ add_library(Grackle_Grackle # C source files calculate_cooling_time.c - calculate_dust_temperature.c dynamic_api.c grackle_units.c index_helper.c @@ -103,6 +102,7 @@ add_library(Grackle_Grackle # C++ Source (and Private Header Files) calc_tdust_3d.cpp calc_tdust_3d.h calc_temp_cloudy_g.cpp calc_temp_cloudy_g.h + calculate_dust_temperature.cpp calculate_gamma.cpp calculate_pressure.cpp calculate_temperature.cpp diff --git a/src/clib/calculate_dust_temperature.c b/src/clib/calculate_dust_temperature.cpp similarity index 61% rename from src/clib/calculate_dust_temperature.c rename to src/clib/calculate_dust_temperature.cpp index 6e4d64d3e..c73ff854a 100644 --- a/src/clib/calculate_dust_temperature.c +++ b/src/clib/calculate_dust_temperature.cpp @@ -11,27 +11,22 @@ / software. ************************************************************************/ -#include -#include -#include +#include #include "calc_tdust_3d.h" #include "grackle.h" -#include "grackle_macros.h" #include "internal_units.h" -#include "phys_constants.h" -int local_calculate_dust_temperature(chemistry_data *my_chemistry, - chemistry_data_storage *my_rates, - code_units *my_units, - grackle_field_data *my_fields, - gr_float *dust_temperature) +extern "C" int local_calculate_dust_temperature( + chemistry_data *my_chemistry, chemistry_data_storage *my_rates, + code_units *my_units, grackle_field_data *my_fields, + gr_float *dust_temperature) { if (!my_chemistry->use_grackle) - return SUCCESS; + return GR_SUCCESS; if (my_chemistry->dust_chemistry < 1 && my_chemistry->h2_on_dust < 1) - return SUCCESS; + return GR_SUCCESS; InternalGrUnits internalu = new_internalu_(my_units); @@ -47,20 +42,20 @@ int local_calculate_dust_temperature(chemistry_data *my_chemistry, for (dim = 0; dim < my_fields->grid_rank; dim++) size *= my_fields->grid_dimension[dim]; - gr_float *temperature = malloc(size * sizeof(gr_float)); + gr_float *temperature = new gr_float[size]; if (local_calculate_temperature(my_chemistry, my_rates, my_units, - my_fields, temperature) == FAIL) { - fprintf(stderr, "Error in local_calculate_temperature.\n"); - return FAIL; + my_fields, temperature) != GR_SUCCESS) { + std::fprintf(stderr, "Error in local_calculate_temperature.\n"); + return GR_FAIL; } calc_tdust_3d_g( temperature, dust_temperature, metal_field_present, my_chemistry, my_rates, my_fields, internalu ); - free(temperature); + delete[] temperature; - return SUCCESS; + return GR_SUCCESS; } int calculate_dust_temperature(code_units *my_units, @@ -69,9 +64,9 @@ int calculate_dust_temperature(code_units *my_units, { if (local_calculate_dust_temperature( grackle_data, &grackle_rates, my_units, - my_fields, dust_temperature) == FAIL) { - fprintf(stderr, "Error in local_calculate_dust_temperature.\n"); - return FAIL; + my_fields, dust_temperature) != GR_SUCCESS) { + std::fprintf(stderr, "Error in local_calculate_dust_temperature.\n"); + return GR_FAIL; } - return SUCCESS; + return GR_SUCCESS; } From 33161b259d2282d715434c825296e203ebd7efc8 Mon Sep 17 00:00:00 2001 From: Matthew Abruzzo Date: Mon, 29 Sep 2025 10:49:22 -0400 Subject: [PATCH 6/9] convert calculate_cooling_time.c -> calculate_cooling_time.cpp --- .clang-format-ignore | 2 +- src/clib/CMakeLists.txt | 2 +- ...ling_time.c => calculate_cooling_time.cpp} | 61 ++++++++----------- 3 files changed, 27 insertions(+), 38 deletions(-) rename src/clib/{calculate_cooling_time.c => calculate_cooling_time.cpp} (61%) diff --git a/.clang-format-ignore b/.clang-format-ignore index a95163ac4..cb9fda779 100644 --- a/.clang-format-ignore +++ b/.clang-format-ignore @@ -11,7 +11,7 @@ src/clib/c_wrappers/wrap_interpolators_g.c src/clib/calc_tdust_3d.cpp -src/clib/calculate_cooling_time.c +src/clib/calculate_cooling_time.cpp src/clib/calculate_dust_temperature.cpp src/clib/calculate_gamma.cpp src/clib/calculate_pressure.cpp diff --git a/src/clib/CMakeLists.txt b/src/clib/CMakeLists.txt index 8c93185c2..7b6ea6072 100644 --- a/src/clib/CMakeLists.txt +++ b/src/clib/CMakeLists.txt @@ -82,7 +82,6 @@ configure_file(auto_general.c.in auto_general.c @ONLY) add_library(Grackle_Grackle # C source files - calculate_cooling_time.c dynamic_api.c grackle_units.c index_helper.c @@ -102,6 +101,7 @@ add_library(Grackle_Grackle # C++ Source (and Private Header Files) calc_tdust_3d.cpp calc_tdust_3d.h calc_temp_cloudy_g.cpp calc_temp_cloudy_g.h + calculate_cooling_time.cpp calculate_dust_temperature.cpp calculate_gamma.cpp calculate_pressure.cpp diff --git a/src/clib/calculate_cooling_time.c b/src/clib/calculate_cooling_time.cpp similarity index 61% rename from src/clib/calculate_cooling_time.c rename to src/clib/calculate_cooling_time.cpp index 819858bd5..c9a2afb5e 100644 --- a/src/clib/calculate_cooling_time.c +++ b/src/clib/calculate_cooling_time.cpp @@ -11,38 +11,30 @@ / software. ************************************************************************/ -#include -#include -#include +#include #include "grackle.h" -#include "grackle_macros.h" #include "cool_multi_time_g.h" -#include "grackle_types.h" #include "internal_units.h" -#include "phys_constants.h" #include "utils.h" -extern chemistry_data *grackle_data; -extern chemistry_data_storage grackle_rates; - /* function prototypes */ -int update_UVbackground_rates(chemistry_data *my_chemistry, - chemistry_data_storage *my_rates, - photo_rate_storage *my_uvb_rates, - code_units *my_units); +extern "C" int update_UVbackground_rates(chemistry_data *my_chemistry, + chemistry_data_storage *my_rates, + photo_rate_storage *my_uvb_rates, + code_units *my_units); -int local_calculate_cooling_time(chemistry_data *my_chemistry, - chemistry_data_storage *my_rates, - code_units *my_units, - grackle_field_data *my_fields, - gr_float *cooling_time) +extern "C" int local_calculate_cooling_time(chemistry_data *my_chemistry, + chemistry_data_storage *my_rates, + code_units *my_units, + grackle_field_data *my_fields, + gr_float *cooling_time) { /* Return if this doesn't concern us. */ if (!my_chemistry->use_grackle) - return SUCCESS; + return GR_SUCCESS; /* Update UV background rates. */ photo_rate_storage my_uvb_rates; @@ -56,9 +48,9 @@ int local_calculate_cooling_time(chemistry_data *my_chemistry, if (my_chemistry->UVbackground == 1) { if (update_UVbackground_rates(my_chemistry, my_rates, - &my_uvb_rates, my_units) == FAIL) { - fprintf(stderr, "Error in update_UVbackground_rates.\n"); - return FAIL; + &my_uvb_rates, my_units) != GR_SUCCESS) { + std::fprintf(stderr, "Error in update_UVbackground_rates.\n"); + return GR_FAIL; } } else { @@ -81,17 +73,14 @@ int local_calculate_cooling_time(chemistry_data *my_chemistry, } /* Check for a metal field. */ - - int metal_field_present = TRUE; - if (my_fields->metal_density == NULL) - metal_field_present = FALSE; + int metal_field_present = (my_fields->metal_density != NULL) ? TRUE : FALSE; InternalGrUnits internalu = new_internalu_(my_units); /* Error checking for H2 shielding approximation */ if (self_shielding_err_check(my_chemistry, my_fields, - "local_calculate_temperature") == FAIL) { - return FAIL; + "local_calculate_temperature") != GR_SUCCESS) { + return GR_FAIL; } /* Solve cooling equations. */ @@ -100,17 +89,17 @@ int local_calculate_cooling_time(chemistry_data *my_chemistry, my_fields, my_uvb_rates ); - return SUCCESS; + return GR_SUCCESS; } -int calculate_cooling_time(code_units *my_units, - grackle_field_data *my_fields, - gr_float *cooling_time) +extern "C" int calculate_cooling_time(code_units *my_units, + grackle_field_data *my_fields, + gr_float *cooling_time) { if (local_calculate_cooling_time(grackle_data, &grackle_rates, my_units, - my_fields, cooling_time) == FAIL) { - fprintf(stderr, "Error in local_calculate_cooling_time.\n"); - return FAIL; + my_fields, cooling_time) != GR_SUCCESS) { + std::fprintf(stderr, "Error in local_calculate_cooling_time.\n"); + return GR_FAIL; } - return SUCCESS; + return GR_SUCCESS; } From 0ceb0c00509c5af5a44eda2d868cd854a5a21abc Mon Sep 17 00:00:00 2001 From: Matthew Abruzzo Date: Tue, 30 Sep 2025 10:17:15 -0400 Subject: [PATCH 7/9] Address compiler warning about number_density variable The compiler could not tell if the number_density variable was always initialized. While I was fixing that, I lightly reworked some of the code (I didn't touch the logic, only the formatting and locations of declarations) --- src/clib/calculate_temperature.cpp | 34 +++++++++++++----------------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/src/clib/calculate_temperature.cpp b/src/clib/calculate_temperature.cpp index b777aab4c..d881fdae0 100644 --- a/src/clib/calculate_temperature.cpp +++ b/src/clib/calculate_temperature.cpp @@ -56,40 +56,36 @@ extern "C" int local_calculate_temperature(chemistry_data *my_chemistry, return GR_FAIL; } - /* Calculate temperature units. */ + // Calculate temperature units and fetch some constants - double temperature_units = get_temperature_units(my_units); - - double number_density, tiny_number = 1.-20; - double inv_metal_mol = 1.0 / MU_METAL; + const double temperature_units = get_temperature_units(my_units); + const double tiny_number = 1.-20; + const double inv_metal_mol = 1.0 / MU_METAL; /* Compute properties used to index the field. */ const grackle_index_helper ind_helper = build_index_helper_(my_fields); - int outer_ind, index; /* Compute temperature with mu calculated directly. */ /* parallelize the k and j loops with OpenMP * (these loops are flattened them for better parallelism) */ # ifdef _OPENMP -# pragma omp parallel for schedule( runtime ) \ - private( outer_ind, index, number_density ) +# pragma omp parallel for schedule( runtime ) # endif - for (outer_ind = 0; outer_ind < ind_helper.outer_ind_size; outer_ind++){ + for (int outer_ind = 0; outer_ind < ind_helper.outer_ind_size; outer_ind++){ const field_flat_index_range range = inner_flat_range_(outer_ind, &ind_helper); - for (index = range.start; index <= range.end; index++) { - - if (my_chemistry->primordial_chemistry > 0) { - number_density = - 0.25 * (my_fields->HeI_density[index] + - my_fields->HeII_density[index] + - my_fields->HeIII_density[index]) + - my_fields->HI_density[index] + my_fields->HII_density[index] + - my_fields->e_density[index]; - } + for (int index = range.start; index <= range.end; index++) { + + // we will only be in this loop if primordial_chemistry > 0 + double number_density = + 0.25 * (my_fields->HeI_density[index] + + my_fields->HeII_density[index] + + my_fields->HeIII_density[index]) + + my_fields->HI_density[index] + my_fields->HII_density[index] + + my_fields->e_density[index]; /* Add in H2. */ From 796971ee10542fda9de155235e9397c6df9a3498 Mon Sep 17 00:00:00 2001 From: Matthew Abruzzo Date: Tue, 30 Sep 2025 10:22:52 -0400 Subject: [PATCH 8/9] remove unused variable --- src/clib/calculate_dust_temperature.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/clib/calculate_dust_temperature.cpp b/src/clib/calculate_dust_temperature.cpp index c73ff854a..02a6c4b2e 100644 --- a/src/clib/calculate_dust_temperature.cpp +++ b/src/clib/calculate_dust_temperature.cpp @@ -38,9 +38,10 @@ extern "C" int local_calculate_dust_temperature( /* Compute the size of the fields. */ - int i, dim, size = 1; - for (dim = 0; dim < my_fields->grid_rank; dim++) + int size = 1; + for (int dim = 0; dim < my_fields->grid_rank; dim++) { size *= my_fields->grid_dimension[dim]; + } gr_float *temperature = new gr_float[size]; if (local_calculate_temperature(my_chemistry, my_rates, my_units, From af7c9633eed4d47cdc1cad08c4ecf8a429fd16cb Mon Sep 17 00:00:00 2001 From: Matthew Abruzzo Date: Tue, 30 Sep 2025 10:24:30 -0400 Subject: [PATCH 9/9] add a missing `extern "C"` --- src/clib/calculate_dust_temperature.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/clib/calculate_dust_temperature.cpp b/src/clib/calculate_dust_temperature.cpp index 02a6c4b2e..18ca1caea 100644 --- a/src/clib/calculate_dust_temperature.cpp +++ b/src/clib/calculate_dust_temperature.cpp @@ -59,9 +59,9 @@ extern "C" int local_calculate_dust_temperature( return GR_SUCCESS; } -int calculate_dust_temperature(code_units *my_units, - grackle_field_data *my_fields, - gr_float *dust_temperature) +extern "C" int calculate_dust_temperature(code_units *my_units, + grackle_field_data *my_fields, + gr_float *dust_temperature) { if (local_calculate_dust_temperature( grackle_data, &grackle_rates, my_units,