From 255e5d2dca9d3c95a43cfb55ee8de34ccde9ba42 Mon Sep 17 00:00:00 2001 From: ChristopherBignamini Date: Tue, 18 Nov 2025 17:27:18 +0100 Subject: [PATCH 01/21] cool1d_cloudy_g grackle::impl::fortran_wrapper wrapper creation --- src/clib/cool1d_multi_g.cpp | 69 ++++++++++++++++++------------ src/clib/fortran_func_wrappers.hpp | 19 ++++++++ 2 files changed, 60 insertions(+), 28 deletions(-) diff --git a/src/clib/cool1d_multi_g.cpp b/src/clib/cool1d_multi_g.cpp index 02793cc90..c7f367a1f 100644 --- a/src/clib/cool1d_multi_g.cpp +++ b/src/clib/cool1d_multi_g.cpp @@ -1485,20 +1485,27 @@ void grackle::impl::cool1d_multi_g( if (my_chemistry->primordial_chemistry == 0) { iZscale = 0; mycmbTfloor = 0; - FORTRAN_NAME(cool1d_cloudy_g)( - d.data(), rhoH, metallicity, &my_fields->grid_dimension[0], - &my_fields->grid_dimension[1], &my_fields->grid_dimension[2], - &idx_range.i_start, &idx_range.i_end, &idx_range.jp1, &idx_range.kp1, - logTlininterp_buf.logtem, edot, &comp2, &dom, &zr, &mycmbTfloor, - &my_chemistry->UVbackground, &iZscale, - &my_rates->cloudy_primordial.grid_rank, - my_rates->cloudy_primordial.grid_dimension, - my_rates->cloudy_primordial.grid_parameters[0], - my_rates->cloudy_primordial.grid_parameters[1], - my_rates->cloudy_primordial.grid_parameters[2], - &my_rates->cloudy_primordial.data_size, - my_rates->cloudy_primordial.cooling_data, - my_rates->cloudy_primordial.heating_data, itmask); + // FORTRAN_NAME(cool1d_cloudy_g)( + // d.data(), rhoH, metallicity, &my_fields->grid_dimension[0], + // &my_fields->grid_dimension[1], &my_fields->grid_dimension[2], + // &idx_range.i_start, &idx_range.i_end, &idx_range.jp1, &idx_range.kp1, + // logTlininterp_buf.logtem, edot, &comp2, &dom, &zr, &mycmbTfloor, + // &my_chemistry->UVbackground, &iZscale, + // &my_rates->cloudy_primordial.grid_rank, + // my_rates->cloudy_primordial.grid_dimension, + // my_rates->cloudy_primordial.grid_parameters[0], + // my_rates->cloudy_primordial.grid_parameters[1], + // my_rates->cloudy_primordial.grid_parameters[2], + // &my_rates->cloudy_primordial.data_size, + // my_rates->cloudy_primordial.cooling_data, + // my_rates->cloudy_primordial.heating_data, itmask); + + grackle::impl::fortran_wrapper::cool1d_cloudy_g( + rhoH, metallicity, idx_range, + logTlininterp_buf.logtem, edot, comp2, dom, zr, + mycmbTfloor, my_chemistry->UVbackground, iZscale, + my_rates->cloudy_primordial, my_fields, itmask); + // Calculate electron density from mean molecular weight @@ -1658,20 +1665,26 @@ void grackle::impl::cool1d_multi_g( if (my_rates->cloudy_data_new == 1) { iZscale = 1; - FORTRAN_NAME(cool1d_cloudy_g)( - d.data(), rhoH, metallicity, &my_fields->grid_dimension[0], - &my_fields->grid_dimension[1], &my_fields->grid_dimension[2], - &idx_range.i_start, &idx_range.i_end, &idx_range.jp1, &idx_range.kp1, - logTlininterp_buf.logtem, edot, &comp2, &dom, &zr, - &my_chemistry->cmb_temperature_floor, &my_chemistry->UVbackground, - &iZscale, &my_rates->cloudy_metal.grid_rank, - my_rates->cloudy_metal.grid_dimension, - my_rates->cloudy_metal.grid_parameters[0], - my_rates->cloudy_metal.grid_parameters[1], - my_rates->cloudy_metal.grid_parameters[2], - &my_rates->cloudy_metal.data_size, - my_rates->cloudy_metal.cooling_data, - my_rates->cloudy_metal.heating_data, itmask_tab.data()); + // FORTRAN_NAME(cool1d_cloudy_g)( + // d.data(), rhoH, metallicity, &my_fields->grid_dimension[0], + // &my_fields->grid_dimension[1], &my_fields->grid_dimension[2], + // &idx_range.i_start, &idx_range.i_end, &idx_range.jp1, &idx_range.kp1, + // logTlininterp_buf.logtem, edot, &comp2, &dom, &zr, + // &my_chemistry->cmb_temperature_floor, &my_chemistry->UVbackground, + // &iZscale, &my_rates->cloudy_metal.grid_rank, + // my_rates->cloudy_metal.grid_dimension, + // my_rates->cloudy_metal.grid_parameters[0], + // my_rates->cloudy_metal.grid_parameters[1], + // my_rates->cloudy_metal.grid_parameters[2], + // &my_rates->cloudy_metal.data_size, + // my_rates->cloudy_metal.cooling_data, + // my_rates->cloudy_metal.heating_data, itmask_tab.data()); + + grackle::impl::fortran_wrapper::cool1d_cloudy_g( + rhoH, metallicity, idx_range, + logTlininterp_buf.logtem, edot, comp2, dom, zr, + mycmbTfloor, my_chemistry->UVbackground, iZscale, + my_rates->cloudy_primordial, my_fields, itmask_tab.data()); } else { FORTRAN_NAME(cool1d_cloudy_old_tables_g)( diff --git a/src/clib/fortran_func_wrappers.hpp b/src/clib/fortran_func_wrappers.hpp index e311723a3..06066af35 100644 --- a/src/clib/fortran_func_wrappers.hpp +++ b/src/clib/fortran_func_wrappers.hpp @@ -149,6 +149,25 @@ inline void calc_temp1d_cloudy_g( } +inline void cool1d_cloudy_g( + double* rhoH, double* metallicity, IndexRange idx_range, + double* logtem, double* edot, double comp2, double dom, double zr, + int cmb_temperature_floor, int UVbackground, int iZscale, + cloudy_data my_cloudy_data, grackle_field_data* my_fields, + gr_mask_type* itmask +) { + FORTRAN_NAME(cool1d_cloudy_g)( + my_fields->density, rhoH, metallicity, + &my_fields->grid_dimension[0], &my_fields->grid_dimension[1], &my_fields->grid_dimension[2], + &my_fields->grid_start[0], &my_fields->grid_end[0], &idx_range.jp1, &idx_range.kp1, + logtem, edot, &comp2, &dom, &zr, &cmb_temperature_floor, &UVbackground, &iZscale, + &my_cloudy_data.grid_rank, my_cloudy_data.grid_dimension, + my_cloudy_data.grid_parameters[0], my_cloudy_data.grid_parameters[1], my_cloudy_data.grid_parameters[2], + &my_cloudy_data.data_size, my_cloudy_data.cooling_data, my_cloudy_data.heating_data, + itmask + ); +} + /// Performs Gauss-Jordan elimination to solve the specified system of linear /// equations and inverts the coefficient matrix. /// From 838ca7de45a1d2bf9d6f57078b4d42b94f81ccb6 Mon Sep 17 00:00:00 2001 From: ChristopherBignamini Date: Tue, 18 Nov 2025 18:49:29 +0100 Subject: [PATCH 02/21] Wrong call fixed and code cleanup --- src/clib/cool1d_multi_g.cpp | 34 ++-------------------------------- 1 file changed, 2 insertions(+), 32 deletions(-) diff --git a/src/clib/cool1d_multi_g.cpp b/src/clib/cool1d_multi_g.cpp index c7f367a1f..3d1c0779d 100644 --- a/src/clib/cool1d_multi_g.cpp +++ b/src/clib/cool1d_multi_g.cpp @@ -1485,21 +1485,6 @@ void grackle::impl::cool1d_multi_g( if (my_chemistry->primordial_chemistry == 0) { iZscale = 0; mycmbTfloor = 0; - // FORTRAN_NAME(cool1d_cloudy_g)( - // d.data(), rhoH, metallicity, &my_fields->grid_dimension[0], - // &my_fields->grid_dimension[1], &my_fields->grid_dimension[2], - // &idx_range.i_start, &idx_range.i_end, &idx_range.jp1, &idx_range.kp1, - // logTlininterp_buf.logtem, edot, &comp2, &dom, &zr, &mycmbTfloor, - // &my_chemistry->UVbackground, &iZscale, - // &my_rates->cloudy_primordial.grid_rank, - // my_rates->cloudy_primordial.grid_dimension, - // my_rates->cloudy_primordial.grid_parameters[0], - // my_rates->cloudy_primordial.grid_parameters[1], - // my_rates->cloudy_primordial.grid_parameters[2], - // &my_rates->cloudy_primordial.data_size, - // my_rates->cloudy_primordial.cooling_data, - // my_rates->cloudy_primordial.heating_data, itmask); - grackle::impl::fortran_wrapper::cool1d_cloudy_g( rhoH, metallicity, idx_range, logTlininterp_buf.logtem, edot, comp2, dom, zr, @@ -1665,26 +1650,11 @@ void grackle::impl::cool1d_multi_g( if (my_rates->cloudy_data_new == 1) { iZscale = 1; - // FORTRAN_NAME(cool1d_cloudy_g)( - // d.data(), rhoH, metallicity, &my_fields->grid_dimension[0], - // &my_fields->grid_dimension[1], &my_fields->grid_dimension[2], - // &idx_range.i_start, &idx_range.i_end, &idx_range.jp1, &idx_range.kp1, - // logTlininterp_buf.logtem, edot, &comp2, &dom, &zr, - // &my_chemistry->cmb_temperature_floor, &my_chemistry->UVbackground, - // &iZscale, &my_rates->cloudy_metal.grid_rank, - // my_rates->cloudy_metal.grid_dimension, - // my_rates->cloudy_metal.grid_parameters[0], - // my_rates->cloudy_metal.grid_parameters[1], - // my_rates->cloudy_metal.grid_parameters[2], - // &my_rates->cloudy_metal.data_size, - // my_rates->cloudy_metal.cooling_data, - // my_rates->cloudy_metal.heating_data, itmask_tab.data()); - grackle::impl::fortran_wrapper::cool1d_cloudy_g( rhoH, metallicity, idx_range, logTlininterp_buf.logtem, edot, comp2, dom, zr, - mycmbTfloor, my_chemistry->UVbackground, iZscale, - my_rates->cloudy_primordial, my_fields, itmask_tab.data()); + my_chemistry->cmb_temperature_floor, my_chemistry->UVbackground, iZscale, + my_rates->cloudy_metal, my_fields, itmask_tab.data()); } else { FORTRAN_NAME(cool1d_cloudy_old_tables_g)( From 9809b646a5f33592356919af50f7a98215557d9a Mon Sep 17 00:00:00 2001 From: ChristopherBignamini Date: Tue, 18 Nov 2025 18:50:09 +0100 Subject: [PATCH 03/21] Wrong parameters in function call fixed --- src/clib/fortran_func_wrappers.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/clib/fortran_func_wrappers.hpp b/src/clib/fortran_func_wrappers.hpp index 06066af35..9c6eaa27a 100644 --- a/src/clib/fortran_func_wrappers.hpp +++ b/src/clib/fortran_func_wrappers.hpp @@ -159,7 +159,7 @@ inline void cool1d_cloudy_g( FORTRAN_NAME(cool1d_cloudy_g)( my_fields->density, rhoH, metallicity, &my_fields->grid_dimension[0], &my_fields->grid_dimension[1], &my_fields->grid_dimension[2], - &my_fields->grid_start[0], &my_fields->grid_end[0], &idx_range.jp1, &idx_range.kp1, + &idx_range.i_start, &idx_range.i_end, &idx_range.jp1, &idx_range.kp1, logtem, edot, &comp2, &dom, &zr, &cmb_temperature_floor, &UVbackground, &iZscale, &my_cloudy_data.grid_rank, my_cloudy_data.grid_dimension, my_cloudy_data.grid_parameters[0], my_cloudy_data.grid_parameters[1], my_cloudy_data.grid_parameters[2], From efba16c537afece79e002216cb8167afc3a3ed27 Mon Sep 17 00:00:00 2001 From: ChristopherBignamini Date: Thu, 20 Nov 2025 00:36:24 +0100 Subject: [PATCH 04/21] cool1d_cloudy_g cpp sources added and fortran version removed --- src/clib/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/clib/CMakeLists.txt b/src/clib/CMakeLists.txt index 6e3b757c8..1d5f0c1d7 100644 --- a/src/clib/CMakeLists.txt +++ b/src/clib/CMakeLists.txt @@ -109,6 +109,7 @@ add_library(Grackle_Grackle calc_temp_cloudy_g.cpp calc_temp_cloudy_g.h ceiling_species.hpp collisional_rate_props.cpp collisional_rate_props.hpp + cool1d_cloudy_g.cpp cool1d_cloudy_g.hpp cool1d_multi_g.cpp cool1d_multi_g.hpp cool_multi_time_g.cpp cool_multi_time_g.h dust_props.hpp @@ -137,7 +138,6 @@ add_library(Grackle_Grackle calc_all_tdust_gasgr_1d_g.F calc_tdust_1d_g.F calc_temp1d_cloudy_g.F - cool1d_cloudy_g.F cool1d_cloudy_old_tables_g.F interpolators_g.F solve_rate_cool_g.F From e3583c8c23f531ea542e36a0ba008d4a4de3e18a Mon Sep 17 00:00:00 2001 From: ChristopherBignamini Date: Thu, 20 Nov 2025 00:39:08 +0100 Subject: [PATCH 05/21] call to cool1d_cloudy_g updated to cpp version --- src/clib/cool1d_multi_g.cpp | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/clib/cool1d_multi_g.cpp b/src/clib/cool1d_multi_g.cpp index 3d1c0779d..38ad93acc 100644 --- a/src/clib/cool1d_multi_g.cpp +++ b/src/clib/cool1d_multi_g.cpp @@ -17,6 +17,7 @@ #include #include +#include "cool1d_cloudy_g.hpp" #include "cool1d_multi_g.hpp" #include "grackle.h" #include "fortran_func_decls.h" @@ -1485,11 +1486,13 @@ void grackle::impl::cool1d_multi_g( if (my_chemistry->primordial_chemistry == 0) { iZscale = 0; mycmbTfloor = 0; - grackle::impl::fortran_wrapper::cool1d_cloudy_g( - rhoH, metallicity, idx_range, - logTlininterp_buf.logtem, edot, comp2, dom, zr, - mycmbTfloor, my_chemistry->UVbackground, iZscale, - my_rates->cloudy_primordial, my_fields, itmask); + grackle::impl::cool1d_cloudy_g( + rhoH, metallicity, logTlininterp_buf.logtem, edot, + comp2, &dom, &zr, &mycmbTfloor, &my_chemistry->UVbackground, &iZscale, + &my_rates->cloudy_primordial.grid_rank, my_rates->cloudy_primordial.grid_dimension, my_rates->cloudy_primordial.grid_parameters[0], + my_rates->cloudy_primordial.grid_parameters[1], my_rates->cloudy_primordial.grid_parameters[2], &my_rates->cloudy_primordial.data_size, + my_rates->cloudy_primordial.cooling_data, my_rates->cloudy_primordial.heating_data, itmask, my_fields, + idx_range); // Calculate electron density from mean molecular weight @@ -1650,11 +1653,13 @@ void grackle::impl::cool1d_multi_g( if (my_rates->cloudy_data_new == 1) { iZscale = 1; - grackle::impl::fortran_wrapper::cool1d_cloudy_g( - rhoH, metallicity, idx_range, - logTlininterp_buf.logtem, edot, comp2, dom, zr, - my_chemistry->cmb_temperature_floor, my_chemistry->UVbackground, iZscale, - my_rates->cloudy_metal, my_fields, itmask_tab.data()); + grackle::impl::cool1d_cloudy_g( + rhoH, metallicity, logTlininterp_buf.logtem, edot, + comp2, &dom, &zr, &my_chemistry->cmb_temperature_floor, &my_chemistry->UVbackground, &iZscale, + &my_rates->cloudy_metal.grid_rank, my_rates->cloudy_metal.grid_dimension, my_rates->cloudy_metal.grid_parameters[0], + my_rates->cloudy_metal.grid_parameters[1], my_rates->cloudy_metal.grid_parameters[2], &my_rates->cloudy_metal.data_size, + my_rates->cloudy_metal.cooling_data, my_rates->cloudy_metal.heating_data, itmask_tab.data(), my_fields, + idx_range); } else { FORTRAN_NAME(cool1d_cloudy_old_tables_g)( From 287b32f86c3b6b1a5efc0a43750b3a2ff47541ea Mon Sep 17 00:00:00 2001 From: ChristopherBignamini Date: Thu, 20 Nov 2025 00:39:36 +0100 Subject: [PATCH 06/21] cool1d_cloudy_g removed --- src/clib/fortran_func_decls.h | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/clib/fortran_func_decls.h b/src/clib/fortran_func_decls.h index ff6fd5755..cf5e3f6fb 100644 --- a/src/clib/fortran_func_decls.h +++ b/src/clib/fortran_func_decls.h @@ -130,15 +130,6 @@ void FORTRAN_NAME(calc_temp1d_cloudy_g)( double* clPar3, long long* clDataSize, double* clMMW, gr_mask_type* itmask ); -void FORTRAN_NAME(cool1d_cloudy_g)( - gr_float* d_data_ptr, double* rhoH, double* metallicity, int* in, int* jn, - int* kn, int* is, int* ie, int* j, int* k, double* logtem, double* edot, - double* comp2, double* dom, double* zr, int* icmbTfloor, int* iClHeat, - int* iZscale, long long* clGridRank, long long* clGridDim, double* clPar1, - double* clPar2, double* clPar3, long long* clDataSize, double* clCooling, - double* clHeating, gr_mask_type* itmask -); - void FORTRAN_NAME(cool1d_cloudy_old_tables_g)( gr_float* d_data_ptr, gr_float* de_data_ptr, double* rhoH, double* metallicity, int* in, int* jn, int* kn, int* is, int* ie, int* j, From 8a3cb1df6f0c2a74732a25172c7af6ed1ebd5658 Mon Sep 17 00:00:00 2001 From: ChristopherBignamini Date: Thu, 20 Nov 2025 00:40:09 +0100 Subject: [PATCH 07/21] cool1d_cloudy_g removed --- src/clib/fortran_func_wrappers.hpp | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/src/clib/fortran_func_wrappers.hpp b/src/clib/fortran_func_wrappers.hpp index 9c6eaa27a..e311723a3 100644 --- a/src/clib/fortran_func_wrappers.hpp +++ b/src/clib/fortran_func_wrappers.hpp @@ -149,25 +149,6 @@ inline void calc_temp1d_cloudy_g( } -inline void cool1d_cloudy_g( - double* rhoH, double* metallicity, IndexRange idx_range, - double* logtem, double* edot, double comp2, double dom, double zr, - int cmb_temperature_floor, int UVbackground, int iZscale, - cloudy_data my_cloudy_data, grackle_field_data* my_fields, - gr_mask_type* itmask -) { - FORTRAN_NAME(cool1d_cloudy_g)( - my_fields->density, rhoH, metallicity, - &my_fields->grid_dimension[0], &my_fields->grid_dimension[1], &my_fields->grid_dimension[2], - &idx_range.i_start, &idx_range.i_end, &idx_range.jp1, &idx_range.kp1, - logtem, edot, &comp2, &dom, &zr, &cmb_temperature_floor, &UVbackground, &iZscale, - &my_cloudy_data.grid_rank, my_cloudy_data.grid_dimension, - my_cloudy_data.grid_parameters[0], my_cloudy_data.grid_parameters[1], my_cloudy_data.grid_parameters[2], - &my_cloudy_data.data_size, my_cloudy_data.cooling_data, my_cloudy_data.heating_data, - itmask - ); -} - /// Performs Gauss-Jordan elimination to solve the specified system of linear /// equations and inverts the coefficient matrix. /// From cd00674b26c6d7694bcb94f4830ee04d73df9e7f Mon Sep 17 00:00:00 2001 From: ChristopherBignamini Date: Thu, 20 Nov 2025 00:48:31 +0100 Subject: [PATCH 08/21] cool1d_cloudy_g fortran implementation removed --- src/clib/cool1d_cloudy_g.F | 261 ------------------------------------- 1 file changed, 261 deletions(-) delete mode 100644 src/clib/cool1d_cloudy_g.F diff --git a/src/clib/cool1d_cloudy_g.F b/src/clib/cool1d_cloudy_g.F deleted file mode 100644 index 35f1623a9..000000000 --- a/src/clib/cool1d_cloudy_g.F +++ /dev/null @@ -1,261 +0,0 @@ -!======================================================================= -!//////////////////// SUBROUTINE COOL1D_CLOUDY_G \\\\\\\\\\\\\\\\\\\\\ - - subroutine cool1d_cloudy_g(d, rhoH, metallicity, - & in, jn, kn, is, ie, j, k, - & logtem, edot, comp2, dom, zr, - & icmbTfloor, iClHeat, iZscale, - & clGridRank, clGridDim, - & clPar1, clPar2, clPar3, - & clDataSize, clCooling, clHeating, - & itmask) - -! -! SOLVE CLOUDY METAL COOLING -! -! written by: Britton Smith -! date: September, 2009 -! -! PURPOSE: -! Solve cloudy cooling by interpolating from the data. -! -! INPUTS: -! in,jn,kn - dimensions of 3D fields -! -! d - total density field -! -! rhoH - total H mass density -! metallicity - metallicity -! -! is,ie - start and end indices of active region (zero based) -! logtem - natural log of temperature values -! -! dom - unit conversion to proper number density in code units -! zr - current redshift -! -! icmbTfloor - flag to include temperature floor from cmb -! iClHeat - flag to include cloudy heating -! iZscale - flag to scale cooling by metallicity -! clGridRank - rank of cloudy cooling data grid -! clGridDim - array containing dimensions of cloudy data -! clPar1, clPar2, clPar3 - arrays containing cloudy grid parameter values -! clDataSize - total size of flattened 1D cooling data array -! clCooling - cloudy cooling data -! clHeating - cloudy heating data -! -! itmask - iteration mask -! -! OUTPUTS: -! update edot with heating/cooling contributions from metals -! -! PARAMETERS: -! -!----------------------------------------------------------------------- - - implicit NONE -#include "grackle_fortran_types.def" - -! General Arguments - - integer in, jn, kn, is, ie, j, k - - real*8 comp2, dom, zr - R_PREC d(in,jn,kn) - real*8 rhoH(in), metallicity(in), logtem(in), - & edot(in) - -! Cloudy parameters and data - - integer icmbTfloor, iClHeat, iZscale - integer*8 clGridRank, clDataSize, - & clGridDim(clGridRank) - real*8 clPar1(clGridDim(1)), clPar2(clGridDim(2)), - & clPar3(clGridDim(3)), - & clCooling(clDataSize), clHeating(clDataSize) - -! Iteration mask - - MASK_TYPE itmask(in) - -! Parameters - -! Locals - - integer i, get_heat - integer*8 zindex, zmidpt, zhighpt - real*8 dclPar(clGridRank), inv_log10, log10_tCMB - integer*8 end_int - -! Slice locals - - real*8 log_n_h(in), - & log_cool(in), log_cool_cmb(in), log_heat(in), - & edot_met(in), log10tem(in) - -!\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\///////////////////////////////// -!======================================================================= - - end_int = 0 - get_heat = iClHeat - - inv_log10 = 1._DKIND / log(10._DKIND) - log10_tCMB = log10(comp2) - -! Calculate parameter value slopes - - dclPar(1) = (clPar1(clGridDim(1)) - clPar1(1)) / - & real(clGridDim(1) - 1, DKIND) - if (clGridRank .gt. 1) then - dclPar(2) = (clPar2(clGridDim(2)) - clPar2(1)) / - & real(clGridDim(2) - 1, DKIND) - endif - if (clGridRank .gt. 2) then - dclPar(3) = (clPar3(clGridDim(3)) - clPar3(1)) / - & real(clGridDim(3) - 1, DKIND) - endif - - do i=is+1, ie+1 - if (itmask(i) .ne. MASK_FALSE) then - - log10tem(i) = logtem(i) * inv_log10 - -! Calculate proper log(n_H) - - log_n_h(i) = log10(rhoH(i) * dom) - -! Calculate index for redshift dimension - - if (clGridRank .gt. 2) then - -! Get index for redshift dimension via bisection - - if (zr .le. clPar2(1)) then - zindex = 1 - else if (zr .ge. clPar2(clGridDim(2)-1)) then - zindex = clGridDim(2) - end_int = 1 - get_heat = 0 - else if (zr .ge. clPar2(clGridDim(2)-2)) then - zindex = clGridDim(2) - 2 - else - zindex = 1 - zhighpt = clGridDim(2) - 2 - do while ((zhighpt - zindex) .gt. 1) - zmidpt = int((zhighpt + zindex) / 2) - if (zr .ge. clPar2(zmidpt)) then - zindex = zmidpt - else - zhighpt = zmidpt - endif - enddo - endif - - endif - -! Call interpolation functions to get heating/cooling - -! Interpolate over temperature. - if (clGridRank .eq. 1) then - call interpolate_1D_g(log10tem(i), clGridDim, clPar1, - & dclPar(1), clDataSize, clCooling, log_cool(i)) - edot_met(i) = -10._DKIND**log_cool(i) - -! Ignore CMB term if T >> T_CMB - if ((icmbTfloor .eq. 1) .and. - & ((log10tem(i) - log10_tCMB) .lt. 2._DKIND)) then - call interpolate_1D_g(log10_tCMB, clGridDim, clPar1, - & dclPar(1), clDataSize, clCooling, - & log_cool_cmb(i)) - edot_met(i) = edot_met(i) + 10._DKIND**log_cool_cmb(i) - endif - - if (get_heat .eq. 1) then - call interpolate_1D_g(log10tem(i), clGridDim, clPar1, - & dclPar(1), clDataSize, clHeating, - & log_heat(i)) - edot_met(i) = edot_met(i) + 10._DKIND**log_heat(i) - endif - -! Interpolate over density and temperature. - else if (clGridRank .eq. 2) then - call interpolate_2D_g(log_n_h(i), log10tem(i), clGridDim, - & clPar1, dclPar(1), clPar2, dclPar(2), - & clDataSize, clCooling, log_cool(i)) - edot_met(i) = -10._DKIND**log_cool(i) - -! Ignore CMB term if T >> T_CMB - if ((icmbTfloor .eq. 1) .and. - & ((log10tem(i) - log10_tCMB) .lt. 2._DKIND)) then - call interpolate_2D_g(log_n_h(i), log10_tCMB, - & clGridDim, clPar1, dclPar(1), clPar2, dclPar(2), - & clDataSize, clCooling, log_cool_cmb(i)) - edot_met(i) = edot_met(i) + 10._DKIND**log_cool_cmb(i) - endif - - if (get_heat .eq. 1) then - call interpolate_2D_g(log_n_h(i), log10tem(i), clGridDim, - & clPar1, dclPar(1), clPar2, dclPar(2), - & clDataSize, clHeating, log_heat(i)) - edot_met(i) = edot_met(i) + 10._DKIND**log_heat(i) - endif - -! Interpolate over density, redshift, and temperature. - else if (clGridRank .eq. 3) then - call interpolate_3Dz_g(log_n_h(i), zr, log10tem(i), - & clGridDim, - & clPar1, dclPar(1), - & clPar2, zindex, - & clPar3, dclPar(3), - & clDataSize, clCooling, - & end_int, log_cool(i)) - edot_met(i) = -10._DKIND**log_cool(i) - -! Ignore CMB term if T >> T_CMB - if ((icmbTfloor .eq. 1) .and. - & ((log10tem(i) - log10_tCMB) .lt. 2._DKIND)) then - call interpolate_3Dz_g(log_n_h(i), zr, log10_tCMB, - & clGridDim, - & clPar1, dclPar(1), - & clPar2, zindex, - & clPar3, dclPar(3), - & clDataSize, clCooling, - & end_int, log_cool_cmb(i)) - edot_met(i) = edot_met(i) + 10._DKIND**log_cool_cmb(i) - endif - - if (get_heat .eq. 1) then - call interpolate_3Dz_g(log_n_h(i), zr, log10tem(i), - & clGridDim, - & clPar1, dclPar(1), - & clPar2, zindex, - & clPar3, dclPar(3), - & clDataSize, clHeating, - & end_int, log_heat(i)) - edot_met(i) = edot_met(i) + 10._DKIND**log_heat(i) - endif - - else -#ifdef _OPENMP -!$omp critical -#endif - write(*,*) "Maximum cooling data grid rank is 3!" -#ifdef _OPENMP -!$omp end critical -#endif - return - endif - -! Scale cooling by metallicity. - - if (iZscale .eq. 1) then - edot_met(i) = edot_met(i) * metallicity(i) - endif - - edot(i) = edot(i) + - & (edot_met(i) * rhoH(i) * rhoH(i)) - - end if - enddo - - return - end From f02e44ac71dbc36165907a1da7938feab5221c5b Mon Sep 17 00:00:00 2001 From: ChristopherBignamini Date: Thu, 20 Nov 2025 01:00:19 +0100 Subject: [PATCH 09/21] C++ transcribe of Fortran version --- src/clib/cool1d_cloudy_g.cpp | 215 +++++++++++++++++++++++++++++++++++ src/clib/cool1d_cloudy_g.hpp | 66 +++++++++++ 2 files changed, 281 insertions(+) create mode 100644 src/clib/cool1d_cloudy_g.cpp create mode 100644 src/clib/cool1d_cloudy_g.hpp diff --git a/src/clib/cool1d_cloudy_g.cpp b/src/clib/cool1d_cloudy_g.cpp new file mode 100644 index 000000000..1613c91f0 --- /dev/null +++ b/src/clib/cool1d_cloudy_g.cpp @@ -0,0 +1,215 @@ +//===----------------------------------------------------------------------===// +// +// See the LICENSE file for license and copyright information +// SPDX-License-Identifier: NCSA AND BSD-3-Clause +// +//===----------------------------------------------------------------------===// +/// +/// @file +/// Implements the cool1d_cloudy_g function +/// +//===----------------------------------------------------------------------===// + +// This file was initially generated automatically during conversion of the +// cool1d_cloudy_g function from FORTRAN to C++ + +#include +#include +#include + +#include "grackle.h" +#include "fortran_func_decls.h" +#include "utils-cpp.hpp" + +#include "cool1d_cloudy_g.hpp" + +void grackle::impl::cool1d_cloudy_g( + double* rhoH, double* metallicity, double* logtem, double* edot, + double comp2, double* dom, double* zr, int* icmbTfloor, int* iClHeat, + int* iZscale, long long* clGridRank, long long* clGridDim, double* clPar1, + double* clPar2, double* clPar3, long long* clDataSize, double* clCooling, + double* clHeating, gr_mask_type* itmask, grackle_field_data* my_fields, + IndexRange idx_range +) +{ + // Locals + + int i, get_heat; + long long zindex, zmidpt, zhighpt; + double inv_log10, log10_tCMB; + std::vector dclPar((*clGridRank)); + long long end_int; + + // Slice locals + + std::vector log_n_h(my_fields->grid_dimension[0]); + std::vector log_cool(my_fields->grid_dimension[0]); + std::vector log_cool_cmb(my_fields->grid_dimension[0]); + std::vector log_heat(my_fields->grid_dimension[0]); + std::vector edot_met(my_fields->grid_dimension[0]); + std::vector log10tem(my_fields->grid_dimension[0]); + + // \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\///////////////////////////////// + // ======================================================================= + + end_int = 0; + get_heat = (*iClHeat); + + inv_log10 = 1. / std::log(10.); + log10_tCMB = std::log10(comp2); + + // Calculate parameter value slopes + + dclPar[1-1] = (clPar1[clGridDim[1-1]-1] - clPar1[1-1]) / + (double)(clGridDim[1-1] - 1 ); + if ((*clGridRank) > 1) { + dclPar[2-1] = (clPar2[clGridDim[2-1]-1] - clPar2[1-1]) / + (double)(clGridDim[2-1] - 1 ); + } + if ((*clGridRank) > 2) { + dclPar[3-1] = (clPar3[clGridDim[3-1]-1] - clPar3[1-1]) / + (double)(clGridDim[3-1] - 1 ); + } + + for (i = idx_range.i_start + 1; i<=(idx_range.i_end + 1); i++) { + if (itmask[i-1] != MASK_FALSE) { + + log10tem[i-1] = logtem[i-1] * inv_log10; + + // Calculate proper log(n_H) + + log_n_h[i-1] = std::log10(rhoH[i-1] * (*dom)); + + // Calculate index for redshift dimension + + if ((*clGridRank) > 2) { + + // Get index for redshift dimension via bisection + + if ((*zr) <= clPar2[1-1]) { + zindex = 1; + } else if ((*zr) >= clPar2[clGridDim[2-1]-1-1]) { + zindex = clGridDim[2-1]; + end_int = 1; + get_heat = 0; + } else if ((*zr) >= clPar2[clGridDim[2-1]-2-1]) { + zindex = clGridDim[2-1] - 2; + } else { + zindex = 1; + zhighpt = clGridDim[2-1] - 2; + while ((zhighpt - zindex) > 1) { + zmidpt = int((zhighpt + zindex) / 2); + if ((*zr) >= clPar2[zmidpt-1]) { + zindex = zmidpt; + } else { + zhighpt = zmidpt; + } + } + } + + } + + // Call interpolation functions to get heating/cooling + + // Interpolate over temperature. + if ((*clGridRank) == 1) { + FORTRAN_NAME(interpolate_1d_g)(&log10tem[i-1], clGridDim, clPar1, + &dclPar[1-1], clDataSize, clCooling, &log_cool[i-1]); + edot_met[i-1] = -std::pow(10.,log_cool[i-1]); + + // Ignore CMB term if T >> T_CMB + if (((*icmbTfloor) == 1) && + ((log10tem[i-1] - log10_tCMB) < 2.)) { + FORTRAN_NAME(interpolate_1d_g)(&log10_tCMB, clGridDim, clPar1, + &dclPar[1-1], clDataSize, clCooling, + &log_cool_cmb[i-1]); + edot_met[i-1] = edot_met[i-1] + std::pow(10.,log_cool_cmb[i-1]); + } + + if (get_heat == 1) { + FORTRAN_NAME(interpolate_1d_g)(&log10tem[i-1], clGridDim, clPar1, + &dclPar[1-1], clDataSize, clHeating, + &log_heat[i-1]); + edot_met[i-1] = edot_met[i-1] + std::pow(10.,log_heat[i-1]); + } + + // Interpolate over density and temperature. + } else if ((*clGridRank) == 2) { + FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i-1], &log10tem[i-1], clGridDim, + clPar1, &dclPar[1-1], clPar2, &dclPar[2-1], + clDataSize, clCooling, &log_cool[i-1]); + edot_met[i-1] = -std::pow(10.,log_cool[i-1]); + + // Ignore CMB term if T >> T_CMB + if (((*icmbTfloor) == 1) && + ((log10tem[i-1] - log10_tCMB) < 2.)) { + FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i-1], &log10_tCMB, + clGridDim, clPar1, &dclPar[1-1], clPar2, &dclPar[2-1], + clDataSize, clCooling, &log_cool_cmb[i-1]); + edot_met[i-1] = edot_met[i-1] + std::pow(10.,log_cool_cmb[i-1]); + } + + if (get_heat == 1) { + FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i-1], &log10tem[i-1], clGridDim, + clPar1, &dclPar[1-1], clPar2, &dclPar[2-1], + clDataSize, clHeating, &log_heat[i-1]); + edot_met[i-1] = edot_met[i-1] + std::pow(10.,log_heat[i-1]); + } + + // Interpolate over density, redshift, and temperature. + } else if ((*clGridRank) == 3) { + FORTRAN_NAME(interpolate_3dz_g)(&log_n_h[i-1], zr, &log10tem[i-1], + clGridDim, + clPar1, &dclPar[1-1], + clPar2, &zindex, + clPar3, &dclPar[3-1], + clDataSize, clCooling, + &end_int, &log_cool[i-1]); + edot_met[i-1] = -std::pow(10.,log_cool[i-1]); + + // Ignore CMB term if T >> T_CMB + if (((*icmbTfloor) == 1) && + ((log10tem[i-1] - log10_tCMB) < 2.)) { + FORTRAN_NAME(interpolate_3dz_g)(&log_n_h[i-1], zr, &log10_tCMB, + clGridDim, + clPar1, &dclPar[1-1], + clPar2, &zindex, + clPar3, &dclPar[3-1], + clDataSize, clCooling, + &end_int, &log_cool_cmb[i-1]); + edot_met[i-1] = edot_met[i-1] + std::pow(10.,log_cool_cmb[i-1]); + } + + if (get_heat == 1) { + FORTRAN_NAME(interpolate_3dz_g)(&log_n_h[i-1], zr, &log10tem[i-1], + clGridDim, + clPar1, &dclPar[1-1], + clPar2, &zindex, + clPar3, &dclPar[3-1], + clDataSize, clHeating, + &end_int, &log_heat[i-1]); + edot_met[i-1] = edot_met[i-1] + std::pow(10.,log_heat[i-1]); + } + + } else { + OMP_PRAGMA_CRITICAL + { + printf("Maximum cooling data grid rank is 3!\n"); + } + return; + } + + // Scale cooling by metallicity. + + if ((*iZscale) == 1) { + edot_met[i-1] = edot_met[i-1] * metallicity[i-1]; + } + + edot[i-1] = edot[i-1] + + (edot_met[i-1] * rhoH[i-1] * rhoH[i-1]); + + } + } + + return; +} diff --git a/src/clib/cool1d_cloudy_g.hpp b/src/clib/cool1d_cloudy_g.hpp new file mode 100644 index 000000000..5d4c56860 --- /dev/null +++ b/src/clib/cool1d_cloudy_g.hpp @@ -0,0 +1,66 @@ +//===----------------------------------------------------------------------===// +// +// See the LICENSE file for license and copyright information +// SPDX-License-Identifier: NCSA AND BSD-3-Clause +// +//===----------------------------------------------------------------------===// +/// +/// @file +/// Declares the cool1d_cloudy_g function +/// +//===----------------------------------------------------------------------===// + +// This file was initially generated automatically during conversion of the +// cool1d_cloudy_g function from FORTRAN to C++ + +#ifndef COOL1D_CLOUDY_G_HPP +#define COOL1D_CLOUDY_G_HPP + +#include "grackle.h" // gr_float +#include "fortran_func_decls.h" // gr_mask_int +#include "index_helper.h" // IndexRange + +namespace grackle::impl { + +/// Solve cloudy metal cooling/heating +/// +/// Solve cloudy cooling by interpolating from the data. +/// +/// @param[in] rhoH 1D array to hold the computed Hydrogen mass density for the @p idx_range +/// @param[in] metallicity 1D array to hold the computed metallicity for the @p idx_range +/// @param[in] logtem Natural log of temperature values +/// @param[out] edot 1D array to hold the computed the time derivative of the +/// internal energy in the @p idx_range +/// @param[in] comp2 Constant factor to convert cooling rates to code units +/// @param[in] dom Unit conversion to proper number density in code units +/// @param[in] zr Current redshift +/// @param[in] icmbTfloor Flag to include temperature floor from cmb +/// @param[in] iClHeat Flag to include cloudy heating +/// @param[in] iZscale Flag to scale cooling by metallicity +/// @param[in] clGridRank Rank of cloudy cooling data grid +/// @param[in] clGridDim Array containing dimensions of cloudy data +/// @param[in] clPar1, clPar2, clPar3 Arrays containing cloudy +/// grid parameter values +/// @param[in] clDataSize Total size of flattened 1D cooling data array +/// @param[in] clCooling Cloudy cooling data +/// @param[in] clHeating Cloudy heating data +/// @param[in] itmask Iteration mask +/// @param[in] my_fields Grackle field data +/// @param[in] idx_range Index range specifying the portion of the grid to +/// operate on +/// +/// @par History +/// written by: Britton Smith, 2009 +/// modified1: November, 2025 by Christopher Bignamini & Matthew Abruzzo; C++ port +void cool1d_cloudy_g( + double* rhoH, double* metallicity, double* logtem, double* edot, + double comp2, double* dom, double* zr, int* icmbTfloor, int* iClHeat, + int* iZscale, long long* clGridRank, long long* clGridDim, double* clPar1, + double* clPar2, double* clPar3, long long* clDataSize, double* clCooling, + double* clHeating, gr_mask_type* itmask, grackle_field_data* my_fields, + IndexRange idx_range +); + +} // namespace grackle::impl + +#endif /* COOL1D_CLOUDY_G_HPP */ From ff94f5d22166e1d4029cdb6cc01c9dbde2155f44 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 20 Nov 2025 00:02:20 +0000 Subject: [PATCH 10/21] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- src/clib/cool1d_cloudy_g.cpp | 183 ++++++++++++++++------------------- src/clib/cool1d_cloudy_g.hpp | 27 +++--- src/clib/cool1d_multi_g.cpp | 32 +++--- 3 files changed, 120 insertions(+), 122 deletions(-) diff --git a/src/clib/cool1d_cloudy_g.cpp b/src/clib/cool1d_cloudy_g.cpp index 1613c91f0..04f18ca8d 100644 --- a/src/clib/cool1d_cloudy_g.cpp +++ b/src/clib/cool1d_cloudy_g.cpp @@ -24,16 +24,14 @@ #include "cool1d_cloudy_g.hpp" void grackle::impl::cool1d_cloudy_g( - double* rhoH, double* metallicity, double* logtem, double* edot, - double comp2, double* dom, double* zr, int* icmbTfloor, int* iClHeat, - int* iZscale, long long* clGridRank, long long* clGridDim, double* clPar1, - double* clPar2, double* clPar3, long long* clDataSize, double* clCooling, - double* clHeating, gr_mask_type* itmask, grackle_field_data* my_fields, - IndexRange idx_range -) -{ + double* rhoH, double* metallicity, double* logtem, double* edot, + double comp2, double* dom, double* zr, int* icmbTfloor, int* iClHeat, + int* iZscale, long long* clGridRank, long long* clGridDim, double* clPar1, + double* clPar2, double* clPar3, long long* clDataSize, double* clCooling, + double* clHeating, gr_mask_type* itmask, grackle_field_data* my_fields, + IndexRange idx_range) { // Locals - + int i, get_heat; long long zindex, zmidpt, zhighpt; double inv_log10, log10_tCMB; @@ -60,140 +58,131 @@ void grackle::impl::cool1d_cloudy_g( // Calculate parameter value slopes - dclPar[1-1] = (clPar1[clGridDim[1-1]-1] - clPar1[1-1]) / - (double)(clGridDim[1-1] - 1 ); - if ((*clGridRank) > 1) { - dclPar[2-1] = (clPar2[clGridDim[2-1]-1] - clPar2[1-1]) / - (double)(clGridDim[2-1] - 1 ); + dclPar[1 - 1] = (clPar1[clGridDim[1 - 1] - 1] - clPar1[1 - 1]) / + (double)(clGridDim[1 - 1] - 1); + if ((*clGridRank) > 1) { + dclPar[2 - 1] = (clPar2[clGridDim[2 - 1] - 1] - clPar2[1 - 1]) / + (double)(clGridDim[2 - 1] - 1); } - if ((*clGridRank) > 2) { - dclPar[3-1] = (clPar3[clGridDim[3-1]-1] - clPar3[1-1]) / - (double)(clGridDim[3-1] - 1 ); + if ((*clGridRank) > 2) { + dclPar[3 - 1] = (clPar3[clGridDim[3 - 1] - 1] - clPar3[1 - 1]) / + (double)(clGridDim[3 - 1] - 1); } - for (i = idx_range.i_start + 1; i<=(idx_range.i_end + 1); i++) { - if (itmask[i-1] != MASK_FALSE) { - - log10tem[i-1] = logtem[i-1] * inv_log10; + for (i = idx_range.i_start + 1; i <= (idx_range.i_end + 1); i++) { + if (itmask[i - 1] != MASK_FALSE) { + log10tem[i - 1] = logtem[i - 1] * inv_log10; // Calculate proper log(n_H) - log_n_h[i-1] = std::log10(rhoH[i-1] * (*dom)); + log_n_h[i - 1] = std::log10(rhoH[i - 1] * (*dom)); // Calculate index for redshift dimension - if ((*clGridRank) > 2) { - + if ((*clGridRank) > 2) { // Get index for redshift dimension via bisection - if ((*zr) <= clPar2[1-1]) { + if ((*zr) <= clPar2[1 - 1]) { zindex = 1; - } else if ((*zr) >= clPar2[clGridDim[2-1]-1-1]) { - zindex = clGridDim[2-1]; + } else if ((*zr) >= clPar2[clGridDim[2 - 1] - 1 - 1]) { + zindex = clGridDim[2 - 1]; end_int = 1; get_heat = 0; - } else if ((*zr) >= clPar2[clGridDim[2-1]-2-1]) { - zindex = clGridDim[2-1] - 2; + } else if ((*zr) >= clPar2[clGridDim[2 - 1] - 2 - 1]) { + zindex = clGridDim[2 - 1] - 2; } else { zindex = 1; - zhighpt = clGridDim[2-1] - 2; + zhighpt = clGridDim[2 - 1] - 2; while ((zhighpt - zindex) > 1) { zmidpt = int((zhighpt + zindex) / 2); - if ((*zr) >= clPar2[zmidpt-1]) { + if ((*zr) >= clPar2[zmidpt - 1]) { zindex = zmidpt; } else { zhighpt = zmidpt; } } } - } // Call interpolation functions to get heating/cooling // Interpolate over temperature. - if ((*clGridRank) == 1) { - FORTRAN_NAME(interpolate_1d_g)(&log10tem[i-1], clGridDim, clPar1, - &dclPar[1-1], clDataSize, clCooling, &log_cool[i-1]); - edot_met[i-1] = -std::pow(10.,log_cool[i-1]); + if ((*clGridRank) == 1) { + FORTRAN_NAME(interpolate_1d_g)(&log10tem[i - 1], clGridDim, clPar1, + &dclPar[1 - 1], clDataSize, clCooling, + &log_cool[i - 1]); + edot_met[i - 1] = -std::pow(10., log_cool[i - 1]); // Ignore CMB term if T >> T_CMB - if (((*icmbTfloor) == 1) && - ((log10tem[i-1] - log10_tCMB) < 2.)) { - FORTRAN_NAME(interpolate_1d_g)(&log10_tCMB, clGridDim, clPar1, - &dclPar[1-1], clDataSize, clCooling, - &log_cool_cmb[i-1]); - edot_met[i-1] = edot_met[i-1] + std::pow(10.,log_cool_cmb[i-1]); + if (((*icmbTfloor) == 1) && ((log10tem[i - 1] - log10_tCMB) < 2.)) { + FORTRAN_NAME(interpolate_1d_g)(&log10_tCMB, clGridDim, clPar1, + &dclPar[1 - 1], clDataSize, clCooling, + &log_cool_cmb[i - 1]); + edot_met[i - 1] = + edot_met[i - 1] + std::pow(10., log_cool_cmb[i - 1]); } - if (get_heat == 1) { - FORTRAN_NAME(interpolate_1d_g)(&log10tem[i-1], clGridDim, clPar1, - &dclPar[1-1], clDataSize, clHeating, - &log_heat[i-1]); - edot_met[i-1] = edot_met[i-1] + std::pow(10.,log_heat[i-1]); + if (get_heat == 1) { + FORTRAN_NAME(interpolate_1d_g)(&log10tem[i - 1], clGridDim, clPar1, + &dclPar[1 - 1], clDataSize, clHeating, + &log_heat[i - 1]); + edot_met[i - 1] = edot_met[i - 1] + std::pow(10., log_heat[i - 1]); } // Interpolate over density and temperature. - } else if ((*clGridRank) == 2) { - FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i-1], &log10tem[i-1], clGridDim, - clPar1, &dclPar[1-1], clPar2, &dclPar[2-1], - clDataSize, clCooling, &log_cool[i-1]); - edot_met[i-1] = -std::pow(10.,log_cool[i-1]); + } else if ((*clGridRank) == 2) { + FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i - 1], &log10tem[i - 1], + clGridDim, clPar1, &dclPar[1 - 1], + clPar2, &dclPar[2 - 1], clDataSize, + clCooling, &log_cool[i - 1]); + edot_met[i - 1] = -std::pow(10., log_cool[i - 1]); // Ignore CMB term if T >> T_CMB - if (((*icmbTfloor) == 1) && - ((log10tem[i-1] - log10_tCMB) < 2.)) { - FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i-1], &log10_tCMB, - clGridDim, clPar1, &dclPar[1-1], clPar2, &dclPar[2-1], - clDataSize, clCooling, &log_cool_cmb[i-1]); - edot_met[i-1] = edot_met[i-1] + std::pow(10.,log_cool_cmb[i-1]); + if (((*icmbTfloor) == 1) && ((log10tem[i - 1] - log10_tCMB) < 2.)) { + FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i - 1], &log10_tCMB, + clGridDim, clPar1, &dclPar[1 - 1], + clPar2, &dclPar[2 - 1], clDataSize, + clCooling, &log_cool_cmb[i - 1]); + edot_met[i - 1] = + edot_met[i - 1] + std::pow(10., log_cool_cmb[i - 1]); } - if (get_heat == 1) { - FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i-1], &log10tem[i-1], clGridDim, - clPar1, &dclPar[1-1], clPar2, &dclPar[2-1], - clDataSize, clHeating, &log_heat[i-1]); - edot_met[i-1] = edot_met[i-1] + std::pow(10.,log_heat[i-1]); + if (get_heat == 1) { + FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i - 1], &log10tem[i - 1], + clGridDim, clPar1, &dclPar[1 - 1], + clPar2, &dclPar[2 - 1], clDataSize, + clHeating, &log_heat[i - 1]); + edot_met[i - 1] = edot_met[i - 1] + std::pow(10., log_heat[i - 1]); } // Interpolate over density, redshift, and temperature. - } else if ((*clGridRank) == 3) { - FORTRAN_NAME(interpolate_3dz_g)(&log_n_h[i-1], zr, &log10tem[i-1], - clGridDim, - clPar1, &dclPar[1-1], - clPar2, &zindex, - clPar3, &dclPar[3-1], - clDataSize, clCooling, - &end_int, &log_cool[i-1]); - edot_met[i-1] = -std::pow(10.,log_cool[i-1]); + } else if ((*clGridRank) == 3) { + FORTRAN_NAME(interpolate_3dz_g)( + &log_n_h[i - 1], zr, &log10tem[i - 1], clGridDim, clPar1, + &dclPar[1 - 1], clPar2, &zindex, clPar3, &dclPar[3 - 1], clDataSize, + clCooling, &end_int, &log_cool[i - 1]); + edot_met[i - 1] = -std::pow(10., log_cool[i - 1]); // Ignore CMB term if T >> T_CMB - if (((*icmbTfloor) == 1) && - ((log10tem[i-1] - log10_tCMB) < 2.)) { - FORTRAN_NAME(interpolate_3dz_g)(&log_n_h[i-1], zr, &log10_tCMB, - clGridDim, - clPar1, &dclPar[1-1], - clPar2, &zindex, - clPar3, &dclPar[3-1], - clDataSize, clCooling, - &end_int, &log_cool_cmb[i-1]); - edot_met[i-1] = edot_met[i-1] + std::pow(10.,log_cool_cmb[i-1]); + if (((*icmbTfloor) == 1) && ((log10tem[i - 1] - log10_tCMB) < 2.)) { + FORTRAN_NAME(interpolate_3dz_g)( + &log_n_h[i - 1], zr, &log10_tCMB, clGridDim, clPar1, + &dclPar[1 - 1], clPar2, &zindex, clPar3, &dclPar[3 - 1], + clDataSize, clCooling, &end_int, &log_cool_cmb[i - 1]); + edot_met[i - 1] = + edot_met[i - 1] + std::pow(10., log_cool_cmb[i - 1]); } - if (get_heat == 1) { - FORTRAN_NAME(interpolate_3dz_g)(&log_n_h[i-1], zr, &log10tem[i-1], - clGridDim, - clPar1, &dclPar[1-1], - clPar2, &zindex, - clPar3, &dclPar[3-1], - clDataSize, clHeating, - &end_int, &log_heat[i-1]); - edot_met[i-1] = edot_met[i-1] + std::pow(10.,log_heat[i-1]); + if (get_heat == 1) { + FORTRAN_NAME(interpolate_3dz_g)( + &log_n_h[i - 1], zr, &log10tem[i - 1], clGridDim, clPar1, + &dclPar[1 - 1], clPar2, &zindex, clPar3, &dclPar[3 - 1], + clDataSize, clHeating, &end_int, &log_heat[i - 1]); + edot_met[i - 1] = edot_met[i - 1] + std::pow(10., log_heat[i - 1]); } } else { - OMP_PRAGMA_CRITICAL - { + OMP_PRAGMA_CRITICAL { printf("Maximum cooling data grid rank is 3!\n"); } return; @@ -201,13 +190,11 @@ void grackle::impl::cool1d_cloudy_g( // Scale cooling by metallicity. - if ((*iZscale) == 1) { - edot_met[i-1] = edot_met[i-1] * metallicity[i-1]; + if ((*iZscale) == 1) { + edot_met[i - 1] = edot_met[i - 1] * metallicity[i - 1]; } - edot[i-1] = edot[i-1] + - (edot_met[i-1] * rhoH[i-1] * rhoH[i-1]); - + edot[i - 1] = edot[i - 1] + (edot_met[i - 1] * rhoH[i - 1] * rhoH[i - 1]); } } diff --git a/src/clib/cool1d_cloudy_g.hpp b/src/clib/cool1d_cloudy_g.hpp index 5d4c56860..93cebe27b 100644 --- a/src/clib/cool1d_cloudy_g.hpp +++ b/src/clib/cool1d_cloudy_g.hpp @@ -26,8 +26,10 @@ namespace grackle::impl { /// /// Solve cloudy cooling by interpolating from the data. /// -/// @param[in] rhoH 1D array to hold the computed Hydrogen mass density for the @p idx_range -/// @param[in] metallicity 1D array to hold the computed metallicity for the @p idx_range +/// @param[in] rhoH 1D array to hold the computed Hydrogen mass density for the +/// @p idx_range +/// @param[in] metallicity 1D array to hold the computed metallicity for the @p +/// idx_range /// @param[in] logtem Natural log of temperature values /// @param[out] edot 1D array to hold the computed the time derivative of the /// internal energy in the @p idx_range @@ -51,16 +53,17 @@ namespace grackle::impl { /// /// @par History /// written by: Britton Smith, 2009 -/// modified1: November, 2025 by Christopher Bignamini & Matthew Abruzzo; C++ port -void cool1d_cloudy_g( - double* rhoH, double* metallicity, double* logtem, double* edot, - double comp2, double* dom, double* zr, int* icmbTfloor, int* iClHeat, - int* iZscale, long long* clGridRank, long long* clGridDim, double* clPar1, - double* clPar2, double* clPar3, long long* clDataSize, double* clCooling, - double* clHeating, gr_mask_type* itmask, grackle_field_data* my_fields, - IndexRange idx_range -); +/// modified1: November, 2025 by Christopher Bignamini & Matthew Abruzzo; C++ +/// port +void cool1d_cloudy_g(double* rhoH, double* metallicity, double* logtem, + double* edot, double comp2, double* dom, double* zr, + int* icmbTfloor, int* iClHeat, int* iZscale, + long long* clGridRank, long long* clGridDim, + double* clPar1, double* clPar2, double* clPar3, + long long* clDataSize, double* clCooling, + double* clHeating, gr_mask_type* itmask, + grackle_field_data* my_fields, IndexRange idx_range); -} // namespace grackle::impl +} // namespace grackle::impl #endif /* COOL1D_CLOUDY_G_HPP */ diff --git a/src/clib/cool1d_multi_g.cpp b/src/clib/cool1d_multi_g.cpp index 38ad93acc..945061e9c 100644 --- a/src/clib/cool1d_multi_g.cpp +++ b/src/clib/cool1d_multi_g.cpp @@ -1487,13 +1487,16 @@ void grackle::impl::cool1d_multi_g( iZscale = 0; mycmbTfloor = 0; grackle::impl::cool1d_cloudy_g( - rhoH, metallicity, logTlininterp_buf.logtem, edot, - comp2, &dom, &zr, &mycmbTfloor, &my_chemistry->UVbackground, &iZscale, - &my_rates->cloudy_primordial.grid_rank, my_rates->cloudy_primordial.grid_dimension, my_rates->cloudy_primordial.grid_parameters[0], - my_rates->cloudy_primordial.grid_parameters[1], my_rates->cloudy_primordial.grid_parameters[2], &my_rates->cloudy_primordial.data_size, - my_rates->cloudy_primordial.cooling_data, my_rates->cloudy_primordial.heating_data, itmask, my_fields, - idx_range); - + rhoH, metallicity, logTlininterp_buf.logtem, edot, comp2, &dom, &zr, + &mycmbTfloor, &my_chemistry->UVbackground, &iZscale, + &my_rates->cloudy_primordial.grid_rank, + my_rates->cloudy_primordial.grid_dimension, + my_rates->cloudy_primordial.grid_parameters[0], + my_rates->cloudy_primordial.grid_parameters[1], + my_rates->cloudy_primordial.grid_parameters[2], + &my_rates->cloudy_primordial.data_size, + my_rates->cloudy_primordial.cooling_data, + my_rates->cloudy_primordial.heating_data, itmask, my_fields, idx_range); // Calculate electron density from mean molecular weight @@ -1654,11 +1657,16 @@ void grackle::impl::cool1d_multi_g( if (my_rates->cloudy_data_new == 1) { iZscale = 1; grackle::impl::cool1d_cloudy_g( - rhoH, metallicity, logTlininterp_buf.logtem, edot, - comp2, &dom, &zr, &my_chemistry->cmb_temperature_floor, &my_chemistry->UVbackground, &iZscale, - &my_rates->cloudy_metal.grid_rank, my_rates->cloudy_metal.grid_dimension, my_rates->cloudy_metal.grid_parameters[0], - my_rates->cloudy_metal.grid_parameters[1], my_rates->cloudy_metal.grid_parameters[2], &my_rates->cloudy_metal.data_size, - my_rates->cloudy_metal.cooling_data, my_rates->cloudy_metal.heating_data, itmask_tab.data(), my_fields, + rhoH, metallicity, logTlininterp_buf.logtem, edot, comp2, &dom, &zr, + &my_chemistry->cmb_temperature_floor, &my_chemistry->UVbackground, + &iZscale, &my_rates->cloudy_metal.grid_rank, + my_rates->cloudy_metal.grid_dimension, + my_rates->cloudy_metal.grid_parameters[0], + my_rates->cloudy_metal.grid_parameters[1], + my_rates->cloudy_metal.grid_parameters[2], + &my_rates->cloudy_metal.data_size, + my_rates->cloudy_metal.cooling_data, + my_rates->cloudy_metal.heating_data, itmask_tab.data(), my_fields, idx_range); } else { From 43665902fb03e8c0177783d3e2f4046c6515a126 Mon Sep 17 00:00:00 2001 From: ChristopherBignamini Date: Thu, 20 Nov 2025 01:35:38 +0100 Subject: [PATCH 11/21] Scalar variables passed as pointers updated --- src/clib/cool1d_cloudy_g.cpp | 68 ++++++++++++++++++------------------ src/clib/cool1d_cloudy_g.hpp | 10 +++--- 2 files changed, 39 insertions(+), 39 deletions(-) diff --git a/src/clib/cool1d_cloudy_g.cpp b/src/clib/cool1d_cloudy_g.cpp index 1613c91f0..b49e74621 100644 --- a/src/clib/cool1d_cloudy_g.cpp +++ b/src/clib/cool1d_cloudy_g.cpp @@ -24,11 +24,11 @@ #include "cool1d_cloudy_g.hpp" void grackle::impl::cool1d_cloudy_g( - double* rhoH, double* metallicity, double* logtem, double* edot, - double comp2, double* dom, double* zr, int* icmbTfloor, int* iClHeat, - int* iZscale, long long* clGridRank, long long* clGridDim, double* clPar1, - double* clPar2, double* clPar3, long long* clDataSize, double* clCooling, - double* clHeating, gr_mask_type* itmask, grackle_field_data* my_fields, + const double* rhoH, const double* metallicity, const double* logtem, double* edot, + double comp2, double dom, double zr, int icmbTfloor, int iClHeat, + int iZscale, long long clGridRank, long long* clGridDim, double* clPar1, + double* clPar2, double* clPar3, long long clDataSize, double clCooling, + double clHeating, const gr_mask_type* itmask, grackle_field_data* my_fields, IndexRange idx_range ) { @@ -37,7 +37,7 @@ void grackle::impl::cool1d_cloudy_g( int i, get_heat; long long zindex, zmidpt, zhighpt; double inv_log10, log10_tCMB; - std::vector dclPar((*clGridRank)); + std::vector dclPar(clGridRank); long long end_int; // Slice locals @@ -53,7 +53,7 @@ void grackle::impl::cool1d_cloudy_g( // ======================================================================= end_int = 0; - get_heat = (*iClHeat); + get_heat = iClHeat; inv_log10 = 1. / std::log(10.); log10_tCMB = std::log10(comp2); @@ -62,11 +62,11 @@ void grackle::impl::cool1d_cloudy_g( dclPar[1-1] = (clPar1[clGridDim[1-1]-1] - clPar1[1-1]) / (double)(clGridDim[1-1] - 1 ); - if ((*clGridRank) > 1) { + if (clGridRank > 1) { dclPar[2-1] = (clPar2[clGridDim[2-1]-1] - clPar2[1-1]) / (double)(clGridDim[2-1] - 1 ); } - if ((*clGridRank) > 2) { + if (clGridRank > 2) { dclPar[3-1] = (clPar3[clGridDim[3-1]-1] - clPar3[1-1]) / (double)(clGridDim[3-1] - 1 ); } @@ -78,28 +78,28 @@ void grackle::impl::cool1d_cloudy_g( // Calculate proper log(n_H) - log_n_h[i-1] = std::log10(rhoH[i-1] * (*dom)); + log_n_h[i-1] = std::log10(rhoH[i-1] * dom); // Calculate index for redshift dimension - if ((*clGridRank) > 2) { + if (clGridRank > 2) { // Get index for redshift dimension via bisection - if ((*zr) <= clPar2[1-1]) { + if (zr <= clPar2[1-1]) { zindex = 1; - } else if ((*zr) >= clPar2[clGridDim[2-1]-1-1]) { + } else if (zr >= clPar2[clGridDim[2-1]-1-1]) { zindex = clGridDim[2-1]; end_int = 1; get_heat = 0; - } else if ((*zr) >= clPar2[clGridDim[2-1]-2-1]) { + } else if (zr >= clPar2[clGridDim[2-1]-2-1]) { zindex = clGridDim[2-1] - 2; } else { zindex = 1; zhighpt = clGridDim[2-1] - 2; while ((zhighpt - zindex) > 1) { zmidpt = int((zhighpt + zindex) / 2); - if ((*zr) >= clPar2[zmidpt-1]) { + if (zr >= clPar2[zmidpt-1]) { zindex = zmidpt; } else { zhighpt = zmidpt; @@ -112,81 +112,81 @@ void grackle::impl::cool1d_cloudy_g( // Call interpolation functions to get heating/cooling // Interpolate over temperature. - if ((*clGridRank) == 1) { + if (clGridRank == 1) { FORTRAN_NAME(interpolate_1d_g)(&log10tem[i-1], clGridDim, clPar1, - &dclPar[1-1], clDataSize, clCooling, &log_cool[i-1]); + &dclPar[1-1], &clDataSize, &clCooling, &log_cool[i-1]); edot_met[i-1] = -std::pow(10.,log_cool[i-1]); // Ignore CMB term if T >> T_CMB - if (((*icmbTfloor) == 1) && + if ((icmbTfloor == 1) && ((log10tem[i-1] - log10_tCMB) < 2.)) { FORTRAN_NAME(interpolate_1d_g)(&log10_tCMB, clGridDim, clPar1, - &dclPar[1-1], clDataSize, clCooling, + &dclPar[1-1], &clDataSize, &clCooling, &log_cool_cmb[i-1]); edot_met[i-1] = edot_met[i-1] + std::pow(10.,log_cool_cmb[i-1]); } if (get_heat == 1) { FORTRAN_NAME(interpolate_1d_g)(&log10tem[i-1], clGridDim, clPar1, - &dclPar[1-1], clDataSize, clHeating, + &dclPar[1-1], &clDataSize, &clHeating, &log_heat[i-1]); edot_met[i-1] = edot_met[i-1] + std::pow(10.,log_heat[i-1]); } // Interpolate over density and temperature. - } else if ((*clGridRank) == 2) { + } else if (clGridRank == 2) { FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i-1], &log10tem[i-1], clGridDim, clPar1, &dclPar[1-1], clPar2, &dclPar[2-1], - clDataSize, clCooling, &log_cool[i-1]); + &clDataSize, &clCooling, &log_cool[i-1]); edot_met[i-1] = -std::pow(10.,log_cool[i-1]); // Ignore CMB term if T >> T_CMB - if (((*icmbTfloor) == 1) && + if ((icmbTfloor == 1) && ((log10tem[i-1] - log10_tCMB) < 2.)) { FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i-1], &log10_tCMB, clGridDim, clPar1, &dclPar[1-1], clPar2, &dclPar[2-1], - clDataSize, clCooling, &log_cool_cmb[i-1]); + &clDataSize, &clCooling, &log_cool_cmb[i-1]); edot_met[i-1] = edot_met[i-1] + std::pow(10.,log_cool_cmb[i-1]); } if (get_heat == 1) { FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i-1], &log10tem[i-1], clGridDim, clPar1, &dclPar[1-1], clPar2, &dclPar[2-1], - clDataSize, clHeating, &log_heat[i-1]); + &clDataSize, &clHeating, &log_heat[i-1]); edot_met[i-1] = edot_met[i-1] + std::pow(10.,log_heat[i-1]); } // Interpolate over density, redshift, and temperature. - } else if ((*clGridRank) == 3) { - FORTRAN_NAME(interpolate_3dz_g)(&log_n_h[i-1], zr, &log10tem[i-1], + } else if (clGridRank == 3) { + FORTRAN_NAME(interpolate_3dz_g)(&log_n_h[i-1], &zr, &log10tem[i-1], clGridDim, clPar1, &dclPar[1-1], clPar2, &zindex, clPar3, &dclPar[3-1], - clDataSize, clCooling, + &clDataSize, &clCooling, &end_int, &log_cool[i-1]); edot_met[i-1] = -std::pow(10.,log_cool[i-1]); // Ignore CMB term if T >> T_CMB - if (((*icmbTfloor) == 1) && + if ((icmbTfloor == 1) && ((log10tem[i-1] - log10_tCMB) < 2.)) { - FORTRAN_NAME(interpolate_3dz_g)(&log_n_h[i-1], zr, &log10_tCMB, + FORTRAN_NAME(interpolate_3dz_g)(&log_n_h[i-1], &zr, &log10_tCMB, clGridDim, clPar1, &dclPar[1-1], clPar2, &zindex, clPar3, &dclPar[3-1], - clDataSize, clCooling, + &clDataSize, &clCooling, &end_int, &log_cool_cmb[i-1]); edot_met[i-1] = edot_met[i-1] + std::pow(10.,log_cool_cmb[i-1]); } if (get_heat == 1) { - FORTRAN_NAME(interpolate_3dz_g)(&log_n_h[i-1], zr, &log10tem[i-1], + FORTRAN_NAME(interpolate_3dz_g)(&log_n_h[i-1], &zr, &log10tem[i-1], clGridDim, clPar1, &dclPar[1-1], clPar2, &zindex, clPar3, &dclPar[3-1], - clDataSize, clHeating, + &clDataSize, &clHeating, &end_int, &log_heat[i-1]); edot_met[i-1] = edot_met[i-1] + std::pow(10.,log_heat[i-1]); } @@ -201,7 +201,7 @@ void grackle::impl::cool1d_cloudy_g( // Scale cooling by metallicity. - if ((*iZscale) == 1) { + if (iZscale == 1) { edot_met[i-1] = edot_met[i-1] * metallicity[i-1]; } diff --git a/src/clib/cool1d_cloudy_g.hpp b/src/clib/cool1d_cloudy_g.hpp index 5d4c56860..fdf9399d5 100644 --- a/src/clib/cool1d_cloudy_g.hpp +++ b/src/clib/cool1d_cloudy_g.hpp @@ -53,11 +53,11 @@ namespace grackle::impl { /// written by: Britton Smith, 2009 /// modified1: November, 2025 by Christopher Bignamini & Matthew Abruzzo; C++ port void cool1d_cloudy_g( - double* rhoH, double* metallicity, double* logtem, double* edot, - double comp2, double* dom, double* zr, int* icmbTfloor, int* iClHeat, - int* iZscale, long long* clGridRank, long long* clGridDim, double* clPar1, - double* clPar2, double* clPar3, long long* clDataSize, double* clCooling, - double* clHeating, gr_mask_type* itmask, grackle_field_data* my_fields, + const double* rhoH, const double* metallicity, const double* logtem, double* edot, + double comp2, double dom, double zr, int icmbTfloor, int iClHeat, + int iZscale, long long clGridRank, long long* clGridDim, double* clPar1, + double* clPar2, double* clPar3, long long clDataSize, double clCooling, + double clHeating, const gr_mask_type* itmask, grackle_field_data* my_fields, IndexRange idx_range ); From dc17544bb3e03b5c582b8920e82bc09dd6c087b1 Mon Sep 17 00:00:00 2001 From: ChristopherBignamini Date: Thu, 20 Nov 2025 01:36:23 +0100 Subject: [PATCH 12/21] Calls to cool1d_cloudy_g updated to new signature --- src/clib/cool1d_multi_g.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/clib/cool1d_multi_g.cpp b/src/clib/cool1d_multi_g.cpp index 38ad93acc..7a851cf43 100644 --- a/src/clib/cool1d_multi_g.cpp +++ b/src/clib/cool1d_multi_g.cpp @@ -1488,10 +1488,10 @@ void grackle::impl::cool1d_multi_g( mycmbTfloor = 0; grackle::impl::cool1d_cloudy_g( rhoH, metallicity, logTlininterp_buf.logtem, edot, - comp2, &dom, &zr, &mycmbTfloor, &my_chemistry->UVbackground, &iZscale, - &my_rates->cloudy_primordial.grid_rank, my_rates->cloudy_primordial.grid_dimension, my_rates->cloudy_primordial.grid_parameters[0], - my_rates->cloudy_primordial.grid_parameters[1], my_rates->cloudy_primordial.grid_parameters[2], &my_rates->cloudy_primordial.data_size, - my_rates->cloudy_primordial.cooling_data, my_rates->cloudy_primordial.heating_data, itmask, my_fields, + comp2, dom, zr, mycmbTfloor, my_chemistry->UVbackground, iZscale, + my_rates->cloudy_primordial.grid_rank, my_rates->cloudy_primordial.grid_dimension, my_rates->cloudy_primordial.grid_parameters[0], + my_rates->cloudy_primordial.grid_parameters[1], my_rates->cloudy_primordial.grid_parameters[2], my_rates->cloudy_primordial.data_size, + *my_rates->cloudy_primordial.cooling_data, *my_rates->cloudy_primordial.heating_data, itmask, my_fields, idx_range); @@ -1655,10 +1655,10 @@ void grackle::impl::cool1d_multi_g( iZscale = 1; grackle::impl::cool1d_cloudy_g( rhoH, metallicity, logTlininterp_buf.logtem, edot, - comp2, &dom, &zr, &my_chemistry->cmb_temperature_floor, &my_chemistry->UVbackground, &iZscale, - &my_rates->cloudy_metal.grid_rank, my_rates->cloudy_metal.grid_dimension, my_rates->cloudy_metal.grid_parameters[0], - my_rates->cloudy_metal.grid_parameters[1], my_rates->cloudy_metal.grid_parameters[2], &my_rates->cloudy_metal.data_size, - my_rates->cloudy_metal.cooling_data, my_rates->cloudy_metal.heating_data, itmask_tab.data(), my_fields, + comp2, dom, zr, my_chemistry->cmb_temperature_floor, my_chemistry->UVbackground, iZscale, + my_rates->cloudy_metal.grid_rank, my_rates->cloudy_metal.grid_dimension, my_rates->cloudy_metal.grid_parameters[0], + my_rates->cloudy_metal.grid_parameters[1], my_rates->cloudy_metal.grid_parameters[2], my_rates->cloudy_metal.data_size, + *my_rates->cloudy_metal.cooling_data, *my_rates->cloudy_metal.heating_data, itmask_tab.data(), my_fields, idx_range); } else { From c3101c2c5bd7428962ec0aa880721419a0bb649a Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 20 Nov 2025 00:39:39 +0000 Subject: [PATCH 13/21] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- src/clib/cool1d_cloudy_g.cpp | 164 +++++++++++++++++------------------ src/clib/cool1d_cloudy_g.hpp | 19 ++-- src/clib/cool1d_multi_g.cpp | 31 ++++--- 3 files changed, 108 insertions(+), 106 deletions(-) diff --git a/src/clib/cool1d_cloudy_g.cpp b/src/clib/cool1d_cloudy_g.cpp index 2c753101e..267a71da3 100644 --- a/src/clib/cool1d_cloudy_g.cpp +++ b/src/clib/cool1d_cloudy_g.cpp @@ -24,14 +24,12 @@ #include "cool1d_cloudy_g.hpp" void grackle::impl::cool1d_cloudy_g( - const double* rhoH, const double* metallicity, const double* logtem, double* edot, - double comp2, double dom, double zr, int icmbTfloor, int iClHeat, - int iZscale, long long clGridRank, long long* clGridDim, double* clPar1, - double* clPar2, double* clPar3, long long clDataSize, double clCooling, - double clHeating, const gr_mask_type* itmask, grackle_field_data* my_fields, - IndexRange idx_range -) -{ + const double* rhoH, const double* metallicity, const double* logtem, + double* edot, double comp2, double dom, double zr, int icmbTfloor, + int iClHeat, int iZscale, long long clGridRank, long long* clGridDim, + double* clPar1, double* clPar2, double* clPar3, long long clDataSize, + double clCooling, double clHeating, const gr_mask_type* itmask, + grackle_field_data* my_fields, IndexRange idx_range) { // Locals int i, get_heat; @@ -60,15 +58,15 @@ void grackle::impl::cool1d_cloudy_g( // Calculate parameter value slopes - dclPar[1-1] = (clPar1[clGridDim[1-1]-1] - clPar1[1-1]) / - (double)(clGridDim[1-1] - 1 ); - if (clGridRank > 1) { - dclPar[2-1] = (clPar2[clGridDim[2-1]-1] - clPar2[1-1]) / - (double)(clGridDim[2-1] - 1 ); + dclPar[1 - 1] = (clPar1[clGridDim[1 - 1] - 1] - clPar1[1 - 1]) / + (double)(clGridDim[1 - 1] - 1); + if (clGridRank > 1) { + dclPar[2 - 1] = (clPar2[clGridDim[2 - 1] - 1] - clPar2[1 - 1]) / + (double)(clGridDim[2 - 1] - 1); } - if (clGridRank > 2) { - dclPar[3-1] = (clPar3[clGridDim[3-1]-1] - clPar3[1-1]) / - (double)(clGridDim[3-1] - 1 ); + if (clGridRank > 2) { + dclPar[3 - 1] = (clPar3[clGridDim[3 - 1] - 1] - clPar3[1 - 1]) / + (double)(clGridDim[3 - 1] - 1); } for (i = idx_range.i_start + 1; i <= (idx_range.i_end + 1); i++) { @@ -77,28 +75,27 @@ void grackle::impl::cool1d_cloudy_g( // Calculate proper log(n_H) - log_n_h[i-1] = std::log10(rhoH[i-1] * dom); + log_n_h[i - 1] = std::log10(rhoH[i - 1] * dom); // Calculate index for redshift dimension - if (clGridRank > 2) { - + if (clGridRank > 2) { // Get index for redshift dimension via bisection - if (zr <= clPar2[1-1]) { + if (zr <= clPar2[1 - 1]) { zindex = 1; - } else if (zr >= clPar2[clGridDim[2-1]-1-1]) { - zindex = clGridDim[2-1]; + } else if (zr >= clPar2[clGridDim[2 - 1] - 1 - 1]) { + zindex = clGridDim[2 - 1]; end_int = 1; get_heat = 0; - } else if (zr >= clPar2[clGridDim[2-1]-2-1]) { - zindex = clGridDim[2-1] - 2; + } else if (zr >= clPar2[clGridDim[2 - 1] - 2 - 1]) { + zindex = clGridDim[2 - 1] - 2; } else { zindex = 1; zhighpt = clGridDim[2 - 1] - 2; while ((zhighpt - zindex) > 1) { zmidpt = int((zhighpt + zindex) / 2); - if (zr >= clPar2[zmidpt-1]) { + if (zr >= clPar2[zmidpt - 1]) { zindex = zmidpt; } else { zhighpt = zmidpt; @@ -110,83 +107,78 @@ void grackle::impl::cool1d_cloudy_g( // Call interpolation functions to get heating/cooling // Interpolate over temperature. - if (clGridRank == 1) { - FORTRAN_NAME(interpolate_1d_g)(&log10tem[i-1], clGridDim, clPar1, - &dclPar[1-1], &clDataSize, &clCooling, &log_cool[i-1]); - edot_met[i-1] = -std::pow(10.,log_cool[i-1]); + if (clGridRank == 1) { + FORTRAN_NAME(interpolate_1d_g)(&log10tem[i - 1], clGridDim, clPar1, + &dclPar[1 - 1], &clDataSize, &clCooling, + &log_cool[i - 1]); + edot_met[i - 1] = -std::pow(10., log_cool[i - 1]); // Ignore CMB term if T >> T_CMB - if ((icmbTfloor == 1) && - ((log10tem[i-1] - log10_tCMB) < 2.)) { - FORTRAN_NAME(interpolate_1d_g)(&log10_tCMB, clGridDim, clPar1, - &dclPar[1-1], &clDataSize, &clCooling, - &log_cool_cmb[i-1]); - edot_met[i-1] = edot_met[i-1] + std::pow(10.,log_cool_cmb[i-1]); + if ((icmbTfloor == 1) && ((log10tem[i - 1] - log10_tCMB) < 2.)) { + FORTRAN_NAME(interpolate_1d_g)(&log10_tCMB, clGridDim, clPar1, + &dclPar[1 - 1], &clDataSize, + &clCooling, &log_cool_cmb[i - 1]); + edot_met[i - 1] = + edot_met[i - 1] + std::pow(10., log_cool_cmb[i - 1]); } - if (get_heat == 1) { - FORTRAN_NAME(interpolate_1d_g)(&log10tem[i-1], clGridDim, clPar1, - &dclPar[1-1], &clDataSize, &clHeating, - &log_heat[i-1]); - edot_met[i-1] = edot_met[i-1] + std::pow(10.,log_heat[i-1]); + if (get_heat == 1) { + FORTRAN_NAME(interpolate_1d_g)(&log10tem[i - 1], clGridDim, clPar1, + &dclPar[1 - 1], &clDataSize, + &clHeating, &log_heat[i - 1]); + edot_met[i - 1] = edot_met[i - 1] + std::pow(10., log_heat[i - 1]); } // Interpolate over density and temperature. - } else if (clGridRank == 2) { - FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i-1], &log10tem[i-1], clGridDim, - clPar1, &dclPar[1-1], clPar2, &dclPar[2-1], - &clDataSize, &clCooling, &log_cool[i-1]); - edot_met[i-1] = -std::pow(10.,log_cool[i-1]); + } else if (clGridRank == 2) { + FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i - 1], &log10tem[i - 1], + clGridDim, clPar1, &dclPar[1 - 1], + clPar2, &dclPar[2 - 1], &clDataSize, + &clCooling, &log_cool[i - 1]); + edot_met[i - 1] = -std::pow(10., log_cool[i - 1]); // Ignore CMB term if T >> T_CMB - if ((icmbTfloor == 1) && - ((log10tem[i-1] - log10_tCMB) < 2.)) { - FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i-1], &log10_tCMB, - clGridDim, clPar1, &dclPar[1-1], clPar2, &dclPar[2-1], - &clDataSize, &clCooling, &log_cool_cmb[i-1]); - edot_met[i-1] = edot_met[i-1] + std::pow(10.,log_cool_cmb[i-1]); + if ((icmbTfloor == 1) && ((log10tem[i - 1] - log10_tCMB) < 2.)) { + FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i - 1], &log10_tCMB, + clGridDim, clPar1, &dclPar[1 - 1], + clPar2, &dclPar[2 - 1], &clDataSize, + &clCooling, &log_cool_cmb[i - 1]); + edot_met[i - 1] = + edot_met[i - 1] + std::pow(10., log_cool_cmb[i - 1]); } - if (get_heat == 1) { - FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i-1], &log10tem[i-1], clGridDim, - clPar1, &dclPar[1-1], clPar2, &dclPar[2-1], - &clDataSize, &clHeating, &log_heat[i-1]); - edot_met[i-1] = edot_met[i-1] + std::pow(10.,log_heat[i-1]); + if (get_heat == 1) { + FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i - 1], &log10tem[i - 1], + clGridDim, clPar1, &dclPar[1 - 1], + clPar2, &dclPar[2 - 1], &clDataSize, + &clHeating, &log_heat[i - 1]); + edot_met[i - 1] = edot_met[i - 1] + std::pow(10., log_heat[i - 1]); } // Interpolate over density, redshift, and temperature. - } else if (clGridRank == 3) { - FORTRAN_NAME(interpolate_3dz_g)(&log_n_h[i-1], &zr, &log10tem[i-1], - clGridDim, - clPar1, &dclPar[1-1], - clPar2, &zindex, - clPar3, &dclPar[3-1], - &clDataSize, &clCooling, - &end_int, &log_cool[i-1]); - edot_met[i-1] = -std::pow(10.,log_cool[i-1]); + } else if (clGridRank == 3) { + FORTRAN_NAME(interpolate_3dz_g)( + &log_n_h[i - 1], &zr, &log10tem[i - 1], clGridDim, clPar1, + &dclPar[1 - 1], clPar2, &zindex, clPar3, &dclPar[3 - 1], + &clDataSize, &clCooling, &end_int, &log_cool[i - 1]); + edot_met[i - 1] = -std::pow(10., log_cool[i - 1]); // Ignore CMB term if T >> T_CMB - if ((icmbTfloor == 1) && - ((log10tem[i-1] - log10_tCMB) < 2.)) { - FORTRAN_NAME(interpolate_3dz_g)(&log_n_h[i-1], &zr, &log10_tCMB, - clGridDim, - clPar1, &dclPar[1-1], - clPar2, &zindex, - clPar3, &dclPar[3-1], - &clDataSize, &clCooling, - &end_int, &log_cool_cmb[i-1]); - edot_met[i-1] = edot_met[i-1] + std::pow(10.,log_cool_cmb[i-1]); + if ((icmbTfloor == 1) && ((log10tem[i - 1] - log10_tCMB) < 2.)) { + FORTRAN_NAME(interpolate_3dz_g)( + &log_n_h[i - 1], &zr, &log10_tCMB, clGridDim, clPar1, + &dclPar[1 - 1], clPar2, &zindex, clPar3, &dclPar[3 - 1], + &clDataSize, &clCooling, &end_int, &log_cool_cmb[i - 1]); + edot_met[i - 1] = + edot_met[i - 1] + std::pow(10., log_cool_cmb[i - 1]); } - if (get_heat == 1) { - FORTRAN_NAME(interpolate_3dz_g)(&log_n_h[i-1], &zr, &log10tem[i-1], - clGridDim, - clPar1, &dclPar[1-1], - clPar2, &zindex, - clPar3, &dclPar[3-1], - &clDataSize, &clHeating, - &end_int, &log_heat[i-1]); - edot_met[i-1] = edot_met[i-1] + std::pow(10.,log_heat[i-1]); + if (get_heat == 1) { + FORTRAN_NAME(interpolate_3dz_g)( + &log_n_h[i - 1], &zr, &log10tem[i - 1], clGridDim, clPar1, + &dclPar[1 - 1], clPar2, &zindex, clPar3, &dclPar[3 - 1], + &clDataSize, &clHeating, &end_int, &log_heat[i - 1]); + edot_met[i - 1] = edot_met[i - 1] + std::pow(10., log_heat[i - 1]); } } else { @@ -198,8 +190,8 @@ void grackle::impl::cool1d_cloudy_g( // Scale cooling by metallicity. - if (iZscale == 1) { - edot_met[i-1] = edot_met[i-1] * metallicity[i-1]; + if (iZscale == 1) { + edot_met[i - 1] = edot_met[i - 1] * metallicity[i - 1]; } edot[i - 1] = edot[i - 1] + (edot_met[i - 1] * rhoH[i - 1] * rhoH[i - 1]); diff --git a/src/clib/cool1d_cloudy_g.hpp b/src/clib/cool1d_cloudy_g.hpp index c763d8f70..30a679066 100644 --- a/src/clib/cool1d_cloudy_g.hpp +++ b/src/clib/cool1d_cloudy_g.hpp @@ -53,15 +53,16 @@ namespace grackle::impl { /// /// @par History /// written by: Britton Smith, 2009 -/// modified1: November, 2025 by Christopher Bignamini & Matthew Abruzzo; C++ port -void cool1d_cloudy_g( - const double* rhoH, const double* metallicity, const double* logtem, double* edot, - double comp2, double dom, double zr, int icmbTfloor, int iClHeat, - int iZscale, long long clGridRank, long long* clGridDim, double* clPar1, - double* clPar2, double* clPar3, long long clDataSize, double clCooling, - double clHeating, const gr_mask_type* itmask, grackle_field_data* my_fields, - IndexRange idx_range -); +/// modified1: November, 2025 by Christopher Bignamini & Matthew Abruzzo; C++ +/// port +void cool1d_cloudy_g(const double* rhoH, const double* metallicity, + const double* logtem, double* edot, double comp2, + double dom, double zr, int icmbTfloor, int iClHeat, + int iZscale, long long clGridRank, long long* clGridDim, + double* clPar1, double* clPar2, double* clPar3, + long long clDataSize, double clCooling, double clHeating, + const gr_mask_type* itmask, grackle_field_data* my_fields, + IndexRange idx_range); } // namespace grackle::impl diff --git a/src/clib/cool1d_multi_g.cpp b/src/clib/cool1d_multi_g.cpp index 7a851cf43..a68b11899 100644 --- a/src/clib/cool1d_multi_g.cpp +++ b/src/clib/cool1d_multi_g.cpp @@ -1487,14 +1487,18 @@ void grackle::impl::cool1d_multi_g( iZscale = 0; mycmbTfloor = 0; grackle::impl::cool1d_cloudy_g( - rhoH, metallicity, logTlininterp_buf.logtem, edot, - comp2, dom, zr, mycmbTfloor, my_chemistry->UVbackground, iZscale, - my_rates->cloudy_primordial.grid_rank, my_rates->cloudy_primordial.grid_dimension, my_rates->cloudy_primordial.grid_parameters[0], - my_rates->cloudy_primordial.grid_parameters[1], my_rates->cloudy_primordial.grid_parameters[2], my_rates->cloudy_primordial.data_size, - *my_rates->cloudy_primordial.cooling_data, *my_rates->cloudy_primordial.heating_data, itmask, my_fields, + rhoH, metallicity, logTlininterp_buf.logtem, edot, comp2, dom, zr, + mycmbTfloor, my_chemistry->UVbackground, iZscale, + my_rates->cloudy_primordial.grid_rank, + my_rates->cloudy_primordial.grid_dimension, + my_rates->cloudy_primordial.grid_parameters[0], + my_rates->cloudy_primordial.grid_parameters[1], + my_rates->cloudy_primordial.grid_parameters[2], + my_rates->cloudy_primordial.data_size, + *my_rates->cloudy_primordial.cooling_data, + *my_rates->cloudy_primordial.heating_data, itmask, my_fields, idx_range); - // Calculate electron density from mean molecular weight for (i = idx_range.i_start; i <= idx_range.i_end; i++) { @@ -1654,11 +1658,16 @@ void grackle::impl::cool1d_multi_g( if (my_rates->cloudy_data_new == 1) { iZscale = 1; grackle::impl::cool1d_cloudy_g( - rhoH, metallicity, logTlininterp_buf.logtem, edot, - comp2, dom, zr, my_chemistry->cmb_temperature_floor, my_chemistry->UVbackground, iZscale, - my_rates->cloudy_metal.grid_rank, my_rates->cloudy_metal.grid_dimension, my_rates->cloudy_metal.grid_parameters[0], - my_rates->cloudy_metal.grid_parameters[1], my_rates->cloudy_metal.grid_parameters[2], my_rates->cloudy_metal.data_size, - *my_rates->cloudy_metal.cooling_data, *my_rates->cloudy_metal.heating_data, itmask_tab.data(), my_fields, + rhoH, metallicity, logTlininterp_buf.logtem, edot, comp2, dom, zr, + my_chemistry->cmb_temperature_floor, my_chemistry->UVbackground, + iZscale, my_rates->cloudy_metal.grid_rank, + my_rates->cloudy_metal.grid_dimension, + my_rates->cloudy_metal.grid_parameters[0], + my_rates->cloudy_metal.grid_parameters[1], + my_rates->cloudy_metal.grid_parameters[2], + my_rates->cloudy_metal.data_size, + *my_rates->cloudy_metal.cooling_data, + *my_rates->cloudy_metal.heating_data, itmask_tab.data(), my_fields, idx_range); } else { From f5f619331f4e48d37a4bd48db08aa0ac7fec0ea6 Mon Sep 17 00:00:00 2001 From: ChristopherBignamini Date: Thu, 20 Nov 2025 11:21:23 +0100 Subject: [PATCH 14/21] Revert "[pre-commit.ci] auto fixes from pre-commit.com hooks" This reverts commit ff94f5d22166e1d4029cdb6cc01c9dbde2155f44. --- src/clib/cool1d_cloudy_g.cpp | 187 +++++++++++++++++++---------------- src/clib/cool1d_cloudy_g.hpp | 27 +++-- src/clib/cool1d_multi_g.cpp | 31 +++--- 3 files changed, 123 insertions(+), 122 deletions(-) diff --git a/src/clib/cool1d_cloudy_g.cpp b/src/clib/cool1d_cloudy_g.cpp index 267a71da3..1613c91f0 100644 --- a/src/clib/cool1d_cloudy_g.cpp +++ b/src/clib/cool1d_cloudy_g.cpp @@ -24,18 +24,20 @@ #include "cool1d_cloudy_g.hpp" void grackle::impl::cool1d_cloudy_g( - const double* rhoH, const double* metallicity, const double* logtem, - double* edot, double comp2, double dom, double zr, int icmbTfloor, - int iClHeat, int iZscale, long long clGridRank, long long* clGridDim, - double* clPar1, double* clPar2, double* clPar3, long long clDataSize, - double clCooling, double clHeating, const gr_mask_type* itmask, - grackle_field_data* my_fields, IndexRange idx_range) { + double* rhoH, double* metallicity, double* logtem, double* edot, + double comp2, double* dom, double* zr, int* icmbTfloor, int* iClHeat, + int* iZscale, long long* clGridRank, long long* clGridDim, double* clPar1, + double* clPar2, double* clPar3, long long* clDataSize, double* clCooling, + double* clHeating, gr_mask_type* itmask, grackle_field_data* my_fields, + IndexRange idx_range +) +{ // Locals - + int i, get_heat; long long zindex, zmidpt, zhighpt; double inv_log10, log10_tCMB; - std::vector dclPar(clGridRank); + std::vector dclPar((*clGridRank)); long long end_int; // Slice locals @@ -51,138 +53,147 @@ void grackle::impl::cool1d_cloudy_g( // ======================================================================= end_int = 0; - get_heat = iClHeat; + get_heat = (*iClHeat); inv_log10 = 1. / std::log(10.); log10_tCMB = std::log10(comp2); // Calculate parameter value slopes - dclPar[1 - 1] = (clPar1[clGridDim[1 - 1] - 1] - clPar1[1 - 1]) / - (double)(clGridDim[1 - 1] - 1); - if (clGridRank > 1) { - dclPar[2 - 1] = (clPar2[clGridDim[2 - 1] - 1] - clPar2[1 - 1]) / - (double)(clGridDim[2 - 1] - 1); + dclPar[1-1] = (clPar1[clGridDim[1-1]-1] - clPar1[1-1]) / + (double)(clGridDim[1-1] - 1 ); + if ((*clGridRank) > 1) { + dclPar[2-1] = (clPar2[clGridDim[2-1]-1] - clPar2[1-1]) / + (double)(clGridDim[2-1] - 1 ); } - if (clGridRank > 2) { - dclPar[3 - 1] = (clPar3[clGridDim[3 - 1] - 1] - clPar3[1 - 1]) / - (double)(clGridDim[3 - 1] - 1); + if ((*clGridRank) > 2) { + dclPar[3-1] = (clPar3[clGridDim[3-1]-1] - clPar3[1-1]) / + (double)(clGridDim[3-1] - 1 ); } - for (i = idx_range.i_start + 1; i <= (idx_range.i_end + 1); i++) { - if (itmask[i - 1] != MASK_FALSE) { - log10tem[i - 1] = logtem[i - 1] * inv_log10; + for (i = idx_range.i_start + 1; i<=(idx_range.i_end + 1); i++) { + if (itmask[i-1] != MASK_FALSE) { + + log10tem[i-1] = logtem[i-1] * inv_log10; // Calculate proper log(n_H) - log_n_h[i - 1] = std::log10(rhoH[i - 1] * dom); + log_n_h[i-1] = std::log10(rhoH[i-1] * (*dom)); // Calculate index for redshift dimension - if (clGridRank > 2) { + if ((*clGridRank) > 2) { + // Get index for redshift dimension via bisection - if (zr <= clPar2[1 - 1]) { + if ((*zr) <= clPar2[1-1]) { zindex = 1; - } else if (zr >= clPar2[clGridDim[2 - 1] - 1 - 1]) { - zindex = clGridDim[2 - 1]; + } else if ((*zr) >= clPar2[clGridDim[2-1]-1-1]) { + zindex = clGridDim[2-1]; end_int = 1; get_heat = 0; - } else if (zr >= clPar2[clGridDim[2 - 1] - 2 - 1]) { - zindex = clGridDim[2 - 1] - 2; + } else if ((*zr) >= clPar2[clGridDim[2-1]-2-1]) { + zindex = clGridDim[2-1] - 2; } else { zindex = 1; - zhighpt = clGridDim[2 - 1] - 2; + zhighpt = clGridDim[2-1] - 2; while ((zhighpt - zindex) > 1) { zmidpt = int((zhighpt + zindex) / 2); - if (zr >= clPar2[zmidpt - 1]) { + if ((*zr) >= clPar2[zmidpt-1]) { zindex = zmidpt; } else { zhighpt = zmidpt; } } } + } // Call interpolation functions to get heating/cooling // Interpolate over temperature. - if (clGridRank == 1) { - FORTRAN_NAME(interpolate_1d_g)(&log10tem[i - 1], clGridDim, clPar1, - &dclPar[1 - 1], &clDataSize, &clCooling, - &log_cool[i - 1]); - edot_met[i - 1] = -std::pow(10., log_cool[i - 1]); + if ((*clGridRank) == 1) { + FORTRAN_NAME(interpolate_1d_g)(&log10tem[i-1], clGridDim, clPar1, + &dclPar[1-1], clDataSize, clCooling, &log_cool[i-1]); + edot_met[i-1] = -std::pow(10.,log_cool[i-1]); // Ignore CMB term if T >> T_CMB - if ((icmbTfloor == 1) && ((log10tem[i - 1] - log10_tCMB) < 2.)) { - FORTRAN_NAME(interpolate_1d_g)(&log10_tCMB, clGridDim, clPar1, - &dclPar[1 - 1], &clDataSize, - &clCooling, &log_cool_cmb[i - 1]); - edot_met[i - 1] = - edot_met[i - 1] + std::pow(10., log_cool_cmb[i - 1]); + if (((*icmbTfloor) == 1) && + ((log10tem[i-1] - log10_tCMB) < 2.)) { + FORTRAN_NAME(interpolate_1d_g)(&log10_tCMB, clGridDim, clPar1, + &dclPar[1-1], clDataSize, clCooling, + &log_cool_cmb[i-1]); + edot_met[i-1] = edot_met[i-1] + std::pow(10.,log_cool_cmb[i-1]); } - if (get_heat == 1) { - FORTRAN_NAME(interpolate_1d_g)(&log10tem[i - 1], clGridDim, clPar1, - &dclPar[1 - 1], &clDataSize, - &clHeating, &log_heat[i - 1]); - edot_met[i - 1] = edot_met[i - 1] + std::pow(10., log_heat[i - 1]); + if (get_heat == 1) { + FORTRAN_NAME(interpolate_1d_g)(&log10tem[i-1], clGridDim, clPar1, + &dclPar[1-1], clDataSize, clHeating, + &log_heat[i-1]); + edot_met[i-1] = edot_met[i-1] + std::pow(10.,log_heat[i-1]); } // Interpolate over density and temperature. - } else if (clGridRank == 2) { - FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i - 1], &log10tem[i - 1], - clGridDim, clPar1, &dclPar[1 - 1], - clPar2, &dclPar[2 - 1], &clDataSize, - &clCooling, &log_cool[i - 1]); - edot_met[i - 1] = -std::pow(10., log_cool[i - 1]); + } else if ((*clGridRank) == 2) { + FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i-1], &log10tem[i-1], clGridDim, + clPar1, &dclPar[1-1], clPar2, &dclPar[2-1], + clDataSize, clCooling, &log_cool[i-1]); + edot_met[i-1] = -std::pow(10.,log_cool[i-1]); // Ignore CMB term if T >> T_CMB - if ((icmbTfloor == 1) && ((log10tem[i - 1] - log10_tCMB) < 2.)) { - FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i - 1], &log10_tCMB, - clGridDim, clPar1, &dclPar[1 - 1], - clPar2, &dclPar[2 - 1], &clDataSize, - &clCooling, &log_cool_cmb[i - 1]); - edot_met[i - 1] = - edot_met[i - 1] + std::pow(10., log_cool_cmb[i - 1]); + if (((*icmbTfloor) == 1) && + ((log10tem[i-1] - log10_tCMB) < 2.)) { + FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i-1], &log10_tCMB, + clGridDim, clPar1, &dclPar[1-1], clPar2, &dclPar[2-1], + clDataSize, clCooling, &log_cool_cmb[i-1]); + edot_met[i-1] = edot_met[i-1] + std::pow(10.,log_cool_cmb[i-1]); } - if (get_heat == 1) { - FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i - 1], &log10tem[i - 1], - clGridDim, clPar1, &dclPar[1 - 1], - clPar2, &dclPar[2 - 1], &clDataSize, - &clHeating, &log_heat[i - 1]); - edot_met[i - 1] = edot_met[i - 1] + std::pow(10., log_heat[i - 1]); + if (get_heat == 1) { + FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i-1], &log10tem[i-1], clGridDim, + clPar1, &dclPar[1-1], clPar2, &dclPar[2-1], + clDataSize, clHeating, &log_heat[i-1]); + edot_met[i-1] = edot_met[i-1] + std::pow(10.,log_heat[i-1]); } // Interpolate over density, redshift, and temperature. - } else if (clGridRank == 3) { - FORTRAN_NAME(interpolate_3dz_g)( - &log_n_h[i - 1], &zr, &log10tem[i - 1], clGridDim, clPar1, - &dclPar[1 - 1], clPar2, &zindex, clPar3, &dclPar[3 - 1], - &clDataSize, &clCooling, &end_int, &log_cool[i - 1]); - edot_met[i - 1] = -std::pow(10., log_cool[i - 1]); + } else if ((*clGridRank) == 3) { + FORTRAN_NAME(interpolate_3dz_g)(&log_n_h[i-1], zr, &log10tem[i-1], + clGridDim, + clPar1, &dclPar[1-1], + clPar2, &zindex, + clPar3, &dclPar[3-1], + clDataSize, clCooling, + &end_int, &log_cool[i-1]); + edot_met[i-1] = -std::pow(10.,log_cool[i-1]); // Ignore CMB term if T >> T_CMB - if ((icmbTfloor == 1) && ((log10tem[i - 1] - log10_tCMB) < 2.)) { - FORTRAN_NAME(interpolate_3dz_g)( - &log_n_h[i - 1], &zr, &log10_tCMB, clGridDim, clPar1, - &dclPar[1 - 1], clPar2, &zindex, clPar3, &dclPar[3 - 1], - &clDataSize, &clCooling, &end_int, &log_cool_cmb[i - 1]); - edot_met[i - 1] = - edot_met[i - 1] + std::pow(10., log_cool_cmb[i - 1]); + if (((*icmbTfloor) == 1) && + ((log10tem[i-1] - log10_tCMB) < 2.)) { + FORTRAN_NAME(interpolate_3dz_g)(&log_n_h[i-1], zr, &log10_tCMB, + clGridDim, + clPar1, &dclPar[1-1], + clPar2, &zindex, + clPar3, &dclPar[3-1], + clDataSize, clCooling, + &end_int, &log_cool_cmb[i-1]); + edot_met[i-1] = edot_met[i-1] + std::pow(10.,log_cool_cmb[i-1]); } - if (get_heat == 1) { - FORTRAN_NAME(interpolate_3dz_g)( - &log_n_h[i - 1], &zr, &log10tem[i - 1], clGridDim, clPar1, - &dclPar[1 - 1], clPar2, &zindex, clPar3, &dclPar[3 - 1], - &clDataSize, &clHeating, &end_int, &log_heat[i - 1]); - edot_met[i - 1] = edot_met[i - 1] + std::pow(10., log_heat[i - 1]); + if (get_heat == 1) { + FORTRAN_NAME(interpolate_3dz_g)(&log_n_h[i-1], zr, &log10tem[i-1], + clGridDim, + clPar1, &dclPar[1-1], + clPar2, &zindex, + clPar3, &dclPar[3-1], + clDataSize, clHeating, + &end_int, &log_heat[i-1]); + edot_met[i-1] = edot_met[i-1] + std::pow(10.,log_heat[i-1]); } } else { - OMP_PRAGMA_CRITICAL { + OMP_PRAGMA_CRITICAL + { printf("Maximum cooling data grid rank is 3!\n"); } return; @@ -190,11 +201,13 @@ void grackle::impl::cool1d_cloudy_g( // Scale cooling by metallicity. - if (iZscale == 1) { - edot_met[i - 1] = edot_met[i - 1] * metallicity[i - 1]; + if ((*iZscale) == 1) { + edot_met[i-1] = edot_met[i-1] * metallicity[i-1]; } - edot[i - 1] = edot[i - 1] + (edot_met[i - 1] * rhoH[i - 1] * rhoH[i - 1]); + edot[i-1] = edot[i-1] + + (edot_met[i-1] * rhoH[i-1] * rhoH[i-1]); + } } diff --git a/src/clib/cool1d_cloudy_g.hpp b/src/clib/cool1d_cloudy_g.hpp index 30a679066..5d4c56860 100644 --- a/src/clib/cool1d_cloudy_g.hpp +++ b/src/clib/cool1d_cloudy_g.hpp @@ -26,10 +26,8 @@ namespace grackle::impl { /// /// Solve cloudy cooling by interpolating from the data. /// -/// @param[in] rhoH 1D array to hold the computed Hydrogen mass density for the -/// @p idx_range -/// @param[in] metallicity 1D array to hold the computed metallicity for the @p -/// idx_range +/// @param[in] rhoH 1D array to hold the computed Hydrogen mass density for the @p idx_range +/// @param[in] metallicity 1D array to hold the computed metallicity for the @p idx_range /// @param[in] logtem Natural log of temperature values /// @param[out] edot 1D array to hold the computed the time derivative of the /// internal energy in the @p idx_range @@ -53,17 +51,16 @@ namespace grackle::impl { /// /// @par History /// written by: Britton Smith, 2009 -/// modified1: November, 2025 by Christopher Bignamini & Matthew Abruzzo; C++ -/// port -void cool1d_cloudy_g(const double* rhoH, const double* metallicity, - const double* logtem, double* edot, double comp2, - double dom, double zr, int icmbTfloor, int iClHeat, - int iZscale, long long clGridRank, long long* clGridDim, - double* clPar1, double* clPar2, double* clPar3, - long long clDataSize, double clCooling, double clHeating, - const gr_mask_type* itmask, grackle_field_data* my_fields, - IndexRange idx_range); +/// modified1: November, 2025 by Christopher Bignamini & Matthew Abruzzo; C++ port +void cool1d_cloudy_g( + double* rhoH, double* metallicity, double* logtem, double* edot, + double comp2, double* dom, double* zr, int* icmbTfloor, int* iClHeat, + int* iZscale, long long* clGridRank, long long* clGridDim, double* clPar1, + double* clPar2, double* clPar3, long long* clDataSize, double* clCooling, + double* clHeating, gr_mask_type* itmask, grackle_field_data* my_fields, + IndexRange idx_range +); -} // namespace grackle::impl +} // namespace grackle::impl #endif /* COOL1D_CLOUDY_G_HPP */ diff --git a/src/clib/cool1d_multi_g.cpp b/src/clib/cool1d_multi_g.cpp index a68b11899..38ad93acc 100644 --- a/src/clib/cool1d_multi_g.cpp +++ b/src/clib/cool1d_multi_g.cpp @@ -1487,18 +1487,14 @@ void grackle::impl::cool1d_multi_g( iZscale = 0; mycmbTfloor = 0; grackle::impl::cool1d_cloudy_g( - rhoH, metallicity, logTlininterp_buf.logtem, edot, comp2, dom, zr, - mycmbTfloor, my_chemistry->UVbackground, iZscale, - my_rates->cloudy_primordial.grid_rank, - my_rates->cloudy_primordial.grid_dimension, - my_rates->cloudy_primordial.grid_parameters[0], - my_rates->cloudy_primordial.grid_parameters[1], - my_rates->cloudy_primordial.grid_parameters[2], - my_rates->cloudy_primordial.data_size, - *my_rates->cloudy_primordial.cooling_data, - *my_rates->cloudy_primordial.heating_data, itmask, my_fields, + rhoH, metallicity, logTlininterp_buf.logtem, edot, + comp2, &dom, &zr, &mycmbTfloor, &my_chemistry->UVbackground, &iZscale, + &my_rates->cloudy_primordial.grid_rank, my_rates->cloudy_primordial.grid_dimension, my_rates->cloudy_primordial.grid_parameters[0], + my_rates->cloudy_primordial.grid_parameters[1], my_rates->cloudy_primordial.grid_parameters[2], &my_rates->cloudy_primordial.data_size, + my_rates->cloudy_primordial.cooling_data, my_rates->cloudy_primordial.heating_data, itmask, my_fields, idx_range); + // Calculate electron density from mean molecular weight for (i = idx_range.i_start; i <= idx_range.i_end; i++) { @@ -1658,16 +1654,11 @@ void grackle::impl::cool1d_multi_g( if (my_rates->cloudy_data_new == 1) { iZscale = 1; grackle::impl::cool1d_cloudy_g( - rhoH, metallicity, logTlininterp_buf.logtem, edot, comp2, dom, zr, - my_chemistry->cmb_temperature_floor, my_chemistry->UVbackground, - iZscale, my_rates->cloudy_metal.grid_rank, - my_rates->cloudy_metal.grid_dimension, - my_rates->cloudy_metal.grid_parameters[0], - my_rates->cloudy_metal.grid_parameters[1], - my_rates->cloudy_metal.grid_parameters[2], - my_rates->cloudy_metal.data_size, - *my_rates->cloudy_metal.cooling_data, - *my_rates->cloudy_metal.heating_data, itmask_tab.data(), my_fields, + rhoH, metallicity, logTlininterp_buf.logtem, edot, + comp2, &dom, &zr, &my_chemistry->cmb_temperature_floor, &my_chemistry->UVbackground, &iZscale, + &my_rates->cloudy_metal.grid_rank, my_rates->cloudy_metal.grid_dimension, my_rates->cloudy_metal.grid_parameters[0], + my_rates->cloudy_metal.grid_parameters[1], my_rates->cloudy_metal.grid_parameters[2], &my_rates->cloudy_metal.data_size, + my_rates->cloudy_metal.cooling_data, my_rates->cloudy_metal.heating_data, itmask_tab.data(), my_fields, idx_range); } else { From 436d9e1c84237bdbcabdd661da816b48d1f0bb40 Mon Sep 17 00:00:00 2001 From: ChristopherBignamini Date: Thu, 20 Nov 2025 12:16:43 +0100 Subject: [PATCH 15/21] Interface cleanup (useless pointers removed) and indexing fixes --- src/clib/cool1d_cloudy_g.cpp | 148 +++++++++++++++++------------------ src/clib/cool1d_cloudy_g.hpp | 4 +- src/clib/cool1d_multi_g.cpp | 8 +- 3 files changed, 80 insertions(+), 80 deletions(-) diff --git a/src/clib/cool1d_cloudy_g.cpp b/src/clib/cool1d_cloudy_g.cpp index 1613c91f0..b4efd6e59 100644 --- a/src/clib/cool1d_cloudy_g.cpp +++ b/src/clib/cool1d_cloudy_g.cpp @@ -25,8 +25,8 @@ void grackle::impl::cool1d_cloudy_g( double* rhoH, double* metallicity, double* logtem, double* edot, - double comp2, double* dom, double* zr, int* icmbTfloor, int* iClHeat, - int* iZscale, long long* clGridRank, long long* clGridDim, double* clPar1, + double comp2, double dom, double zr, int icmbTfloor, int iClHeat, + int iZscale, long long clGridRank, long long* clGridDim, double* clPar1, double* clPar2, double* clPar3, long long* clDataSize, double* clCooling, double* clHeating, gr_mask_type* itmask, grackle_field_data* my_fields, IndexRange idx_range @@ -37,7 +37,7 @@ void grackle::impl::cool1d_cloudy_g( int i, get_heat; long long zindex, zmidpt, zhighpt; double inv_log10, log10_tCMB; - std::vector dclPar((*clGridRank)); + std::vector dclPar(clGridRank); long long end_int; // Slice locals @@ -53,53 +53,53 @@ void grackle::impl::cool1d_cloudy_g( // ======================================================================= end_int = 0; - get_heat = (*iClHeat); + get_heat = iClHeat; inv_log10 = 1. / std::log(10.); log10_tCMB = std::log10(comp2); // Calculate parameter value slopes - dclPar[1-1] = (clPar1[clGridDim[1-1]-1] - clPar1[1-1]) / - (double)(clGridDim[1-1] - 1 ); - if ((*clGridRank) > 1) { - dclPar[2-1] = (clPar2[clGridDim[2-1]-1] - clPar2[1-1]) / - (double)(clGridDim[2-1] - 1 ); + dclPar[0] = (clPar1[clGridDim[0]-1] - clPar1[0]) / + (double)(clGridDim[0] - 1 ); + if (clGridRank > 1) { + dclPar[1] = (clPar2[clGridDim[1]-1] - clPar2[0]) / + (double)(clGridDim[1] - 1 ); } - if ((*clGridRank) > 2) { - dclPar[3-1] = (clPar3[clGridDim[3-1]-1] - clPar3[1-1]) / - (double)(clGridDim[3-1] - 1 ); + if (clGridRank > 2) { + dclPar[2] = (clPar3[clGridDim[2]-1] - clPar3[0]) / + (double)(clGridDim[2] - 1 ); } - for (i = idx_range.i_start + 1; i<=(idx_range.i_end + 1); i++) { - if (itmask[i-1] != MASK_FALSE) { + for (i = idx_range.i_start; i<=idx_range.i_end; i++) { + if (itmask[i] != MASK_FALSE) { - log10tem[i-1] = logtem[i-1] * inv_log10; + log10tem[i] = logtem[i] * inv_log10; // Calculate proper log(n_H) - log_n_h[i-1] = std::log10(rhoH[i-1] * (*dom)); + log_n_h[i] = std::log10(rhoH[i] * dom); // Calculate index for redshift dimension - if ((*clGridRank) > 2) { + if (clGridRank > 2) { // Get index for redshift dimension via bisection - if ((*zr) <= clPar2[1-1]) { + if (zr <= clPar2[0]) { zindex = 1; - } else if ((*zr) >= clPar2[clGridDim[2-1]-1-1]) { - zindex = clGridDim[2-1]; + } else if (zr >= clPar2[clGridDim[1]-1-1]) { + zindex = clGridDim[1]; end_int = 1; get_heat = 0; - } else if ((*zr) >= clPar2[clGridDim[2-1]-2-1]) { - zindex = clGridDim[2-1] - 2; + } else if (zr >= clPar2[clGridDim[1]-2-1]) { + zindex = clGridDim[1] - 2; } else { zindex = 1; - zhighpt = clGridDim[2-1] - 2; + zhighpt = clGridDim[1] - 2; while ((zhighpt - zindex) > 1) { zmidpt = int((zhighpt + zindex) / 2); - if ((*zr) >= clPar2[zmidpt-1]) { + if (zr >= clPar2[zmidpt-1]) { zindex = zmidpt; } else { zhighpt = zmidpt; @@ -112,83 +112,83 @@ void grackle::impl::cool1d_cloudy_g( // Call interpolation functions to get heating/cooling // Interpolate over temperature. - if ((*clGridRank) == 1) { - FORTRAN_NAME(interpolate_1d_g)(&log10tem[i-1], clGridDim, clPar1, - &dclPar[1-1], clDataSize, clCooling, &log_cool[i-1]); - edot_met[i-1] = -std::pow(10.,log_cool[i-1]); + if (clGridRank == 1) { + FORTRAN_NAME(interpolate_1d_g)(&log10tem[i], clGridDim, clPar1, + &dclPar[0], clDataSize, clCooling, &log_cool[i]); + edot_met[i] = -std::pow(10.,log_cool[i]); // Ignore CMB term if T >> T_CMB - if (((*icmbTfloor) == 1) && - ((log10tem[i-1] - log10_tCMB) < 2.)) { + if ((icmbTfloor == 1) && + ((log10tem[i] - log10_tCMB) < 2.)) { FORTRAN_NAME(interpolate_1d_g)(&log10_tCMB, clGridDim, clPar1, - &dclPar[1-1], clDataSize, clCooling, - &log_cool_cmb[i-1]); - edot_met[i-1] = edot_met[i-1] + std::pow(10.,log_cool_cmb[i-1]); + &dclPar[0], clDataSize, clCooling, + &log_cool_cmb[i]); + edot_met[i] = edot_met[i] + std::pow(10.,log_cool_cmb[i]); } if (get_heat == 1) { - FORTRAN_NAME(interpolate_1d_g)(&log10tem[i-1], clGridDim, clPar1, - &dclPar[1-1], clDataSize, clHeating, - &log_heat[i-1]); - edot_met[i-1] = edot_met[i-1] + std::pow(10.,log_heat[i-1]); + FORTRAN_NAME(interpolate_1d_g)(&log10tem[i], clGridDim, clPar1, + &dclPar[0], clDataSize, clHeating, + &log_heat[i]); + edot_met[i] = edot_met[i] + std::pow(10.,log_heat[i]); } // Interpolate over density and temperature. - } else if ((*clGridRank) == 2) { - FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i-1], &log10tem[i-1], clGridDim, - clPar1, &dclPar[1-1], clPar2, &dclPar[2-1], - clDataSize, clCooling, &log_cool[i-1]); - edot_met[i-1] = -std::pow(10.,log_cool[i-1]); + } else if (clGridRank == 2) { + FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i], &log10tem[i], clGridDim, + clPar1, &dclPar[0], clPar2, &dclPar[1], + clDataSize, clCooling, &log_cool[i]); + edot_met[i] = -std::pow(10.,log_cool[i]); // Ignore CMB term if T >> T_CMB - if (((*icmbTfloor) == 1) && - ((log10tem[i-1] - log10_tCMB) < 2.)) { - FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i-1], &log10_tCMB, - clGridDim, clPar1, &dclPar[1-1], clPar2, &dclPar[2-1], - clDataSize, clCooling, &log_cool_cmb[i-1]); - edot_met[i-1] = edot_met[i-1] + std::pow(10.,log_cool_cmb[i-1]); + if ((icmbTfloor == 1) && + ((log10tem[i] - log10_tCMB) < 2.)) { + FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i], &log10_tCMB, + clGridDim, clPar1, &dclPar[0], clPar2, &dclPar[1], + clDataSize, clCooling, &log_cool_cmb[i]); + edot_met[i] = edot_met[i] + std::pow(10.,log_cool_cmb[i]); } if (get_heat == 1) { - FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i-1], &log10tem[i-1], clGridDim, - clPar1, &dclPar[1-1], clPar2, &dclPar[2-1], - clDataSize, clHeating, &log_heat[i-1]); - edot_met[i-1] = edot_met[i-1] + std::pow(10.,log_heat[i-1]); + FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i], &log10tem[i], clGridDim, + clPar1, &dclPar[0], clPar2, &dclPar[1], + clDataSize, clHeating, &log_heat[i]); + edot_met[i] = edot_met[i] + std::pow(10.,log_heat[i]); } // Interpolate over density, redshift, and temperature. - } else if ((*clGridRank) == 3) { - FORTRAN_NAME(interpolate_3dz_g)(&log_n_h[i-1], zr, &log10tem[i-1], + } else if (clGridRank == 3) { + FORTRAN_NAME(interpolate_3dz_g)(&log_n_h[i], &zr, &log10tem[i], clGridDim, - clPar1, &dclPar[1-1], + clPar1, &dclPar[0], clPar2, &zindex, - clPar3, &dclPar[3-1], + clPar3, &dclPar[2], clDataSize, clCooling, - &end_int, &log_cool[i-1]); - edot_met[i-1] = -std::pow(10.,log_cool[i-1]); + &end_int, &log_cool[i]); + edot_met[i] = -std::pow(10.,log_cool[i]); // Ignore CMB term if T >> T_CMB - if (((*icmbTfloor) == 1) && - ((log10tem[i-1] - log10_tCMB) < 2.)) { - FORTRAN_NAME(interpolate_3dz_g)(&log_n_h[i-1], zr, &log10_tCMB, + if ((icmbTfloor == 1) && + ((log10tem[i] - log10_tCMB) < 2.)) { + FORTRAN_NAME(interpolate_3dz_g)(&log_n_h[i], &zr, &log10_tCMB, clGridDim, - clPar1, &dclPar[1-1], + clPar1, &dclPar[0], clPar2, &zindex, - clPar3, &dclPar[3-1], + clPar3, &dclPar[2], clDataSize, clCooling, - &end_int, &log_cool_cmb[i-1]); - edot_met[i-1] = edot_met[i-1] + std::pow(10.,log_cool_cmb[i-1]); + &end_int, &log_cool_cmb[i]); + edot_met[i] = edot_met[i] + std::pow(10.,log_cool_cmb[i]); } if (get_heat == 1) { - FORTRAN_NAME(interpolate_3dz_g)(&log_n_h[i-1], zr, &log10tem[i-1], + FORTRAN_NAME(interpolate_3dz_g)(&log_n_h[i], &zr, &log10tem[i], clGridDim, - clPar1, &dclPar[1-1], + clPar1, &dclPar[0], clPar2, &zindex, - clPar3, &dclPar[3-1], + clPar3, &dclPar[2], clDataSize, clHeating, - &end_int, &log_heat[i-1]); - edot_met[i-1] = edot_met[i-1] + std::pow(10.,log_heat[i-1]); + &end_int, &log_heat[i]); + edot_met[i] = edot_met[i] + std::pow(10.,log_heat[i]); } } else { @@ -201,12 +201,12 @@ void grackle::impl::cool1d_cloudy_g( // Scale cooling by metallicity. - if ((*iZscale) == 1) { - edot_met[i-1] = edot_met[i-1] * metallicity[i-1]; + if (iZscale == 1) { + edot_met[i] = edot_met[i] * metallicity[i]; } - edot[i-1] = edot[i-1] + - (edot_met[i-1] * rhoH[i-1] * rhoH[i-1]); + edot[i] = edot[i] + + (edot_met[i] * rhoH[i] * rhoH[i]); } } diff --git a/src/clib/cool1d_cloudy_g.hpp b/src/clib/cool1d_cloudy_g.hpp index 5d4c56860..9d5ad653c 100644 --- a/src/clib/cool1d_cloudy_g.hpp +++ b/src/clib/cool1d_cloudy_g.hpp @@ -54,8 +54,8 @@ namespace grackle::impl { /// modified1: November, 2025 by Christopher Bignamini & Matthew Abruzzo; C++ port void cool1d_cloudy_g( double* rhoH, double* metallicity, double* logtem, double* edot, - double comp2, double* dom, double* zr, int* icmbTfloor, int* iClHeat, - int* iZscale, long long* clGridRank, long long* clGridDim, double* clPar1, + double comp2, double dom, double zr, int icmbTfloor, int iClHeat, + int iZscale, long long clGridRank, long long* clGridDim, double* clPar1, double* clPar2, double* clPar3, long long* clDataSize, double* clCooling, double* clHeating, gr_mask_type* itmask, grackle_field_data* my_fields, IndexRange idx_range diff --git a/src/clib/cool1d_multi_g.cpp b/src/clib/cool1d_multi_g.cpp index 38ad93acc..e552aac1b 100644 --- a/src/clib/cool1d_multi_g.cpp +++ b/src/clib/cool1d_multi_g.cpp @@ -1488,8 +1488,8 @@ void grackle::impl::cool1d_multi_g( mycmbTfloor = 0; grackle::impl::cool1d_cloudy_g( rhoH, metallicity, logTlininterp_buf.logtem, edot, - comp2, &dom, &zr, &mycmbTfloor, &my_chemistry->UVbackground, &iZscale, - &my_rates->cloudy_primordial.grid_rank, my_rates->cloudy_primordial.grid_dimension, my_rates->cloudy_primordial.grid_parameters[0], + comp2, dom, zr, mycmbTfloor, my_chemistry->UVbackground, iZscale, + my_rates->cloudy_primordial.grid_rank, my_rates->cloudy_primordial.grid_dimension, my_rates->cloudy_primordial.grid_parameters[0], my_rates->cloudy_primordial.grid_parameters[1], my_rates->cloudy_primordial.grid_parameters[2], &my_rates->cloudy_primordial.data_size, my_rates->cloudy_primordial.cooling_data, my_rates->cloudy_primordial.heating_data, itmask, my_fields, idx_range); @@ -1655,8 +1655,8 @@ void grackle::impl::cool1d_multi_g( iZscale = 1; grackle::impl::cool1d_cloudy_g( rhoH, metallicity, logTlininterp_buf.logtem, edot, - comp2, &dom, &zr, &my_chemistry->cmb_temperature_floor, &my_chemistry->UVbackground, &iZscale, - &my_rates->cloudy_metal.grid_rank, my_rates->cloudy_metal.grid_dimension, my_rates->cloudy_metal.grid_parameters[0], + comp2, dom, zr, my_chemistry->cmb_temperature_floor, my_chemistry->UVbackground, iZscale, + my_rates->cloudy_metal.grid_rank, my_rates->cloudy_metal.grid_dimension, my_rates->cloudy_metal.grid_parameters[0], my_rates->cloudy_metal.grid_parameters[1], my_rates->cloudy_metal.grid_parameters[2], &my_rates->cloudy_metal.data_size, my_rates->cloudy_metal.cooling_data, my_rates->cloudy_metal.heating_data, itmask_tab.data(), my_fields, idx_range); From aad6dd71ca922ec87c3af07257e376ecac6c3cf4 Mon Sep 17 00:00:00 2001 From: ChristopherBignamini Date: Thu, 20 Nov 2025 12:46:14 +0100 Subject: [PATCH 16/21] const added to read only input pars and access to dclPar updated --- src/clib/cool1d_cloudy_g.cpp | 22 +++++++++++----------- src/clib/cool1d_cloudy_g.hpp | 4 ++-- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/clib/cool1d_cloudy_g.cpp b/src/clib/cool1d_cloudy_g.cpp index b4efd6e59..b2ba703bb 100644 --- a/src/clib/cool1d_cloudy_g.cpp +++ b/src/clib/cool1d_cloudy_g.cpp @@ -24,11 +24,11 @@ #include "cool1d_cloudy_g.hpp" void grackle::impl::cool1d_cloudy_g( - double* rhoH, double* metallicity, double* logtem, double* edot, + const double* rhoH, const double* metallicity, const double* logtem, double* edot, double comp2, double dom, double zr, int icmbTfloor, int iClHeat, int iZscale, long long clGridRank, long long* clGridDim, double* clPar1, double* clPar2, double* clPar3, long long* clDataSize, double* clCooling, - double* clHeating, gr_mask_type* itmask, grackle_field_data* my_fields, + double* clHeating, const gr_mask_type* itmask, grackle_field_data* my_fields, IndexRange idx_range ) { @@ -114,21 +114,21 @@ void grackle::impl::cool1d_cloudy_g( // Interpolate over temperature. if (clGridRank == 1) { FORTRAN_NAME(interpolate_1d_g)(&log10tem[i], clGridDim, clPar1, - &dclPar[0], clDataSize, clCooling, &log_cool[i]); + dclPar.data(), clDataSize, clCooling, &log_cool[i]); edot_met[i] = -std::pow(10.,log_cool[i]); // Ignore CMB term if T >> T_CMB if ((icmbTfloor == 1) && ((log10tem[i] - log10_tCMB) < 2.)) { FORTRAN_NAME(interpolate_1d_g)(&log10_tCMB, clGridDim, clPar1, - &dclPar[0], clDataSize, clCooling, + dclPar.data(), clDataSize, clCooling, &log_cool_cmb[i]); edot_met[i] = edot_met[i] + std::pow(10.,log_cool_cmb[i]); } if (get_heat == 1) { FORTRAN_NAME(interpolate_1d_g)(&log10tem[i], clGridDim, clPar1, - &dclPar[0], clDataSize, clHeating, + dclPar.data(), clDataSize, clHeating, &log_heat[i]); edot_met[i] = edot_met[i] + std::pow(10.,log_heat[i]); } @@ -136,7 +136,7 @@ void grackle::impl::cool1d_cloudy_g( // Interpolate over density and temperature. } else if (clGridRank == 2) { FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i], &log10tem[i], clGridDim, - clPar1, &dclPar[0], clPar2, &dclPar[1], + clPar1, dclPar.data(), clPar2, &dclPar[1], clDataSize, clCooling, &log_cool[i]); edot_met[i] = -std::pow(10.,log_cool[i]); @@ -144,14 +144,14 @@ void grackle::impl::cool1d_cloudy_g( if ((icmbTfloor == 1) && ((log10tem[i] - log10_tCMB) < 2.)) { FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i], &log10_tCMB, - clGridDim, clPar1, &dclPar[0], clPar2, &dclPar[1], + clGridDim, clPar1, dclPar.data(), clPar2, &dclPar[1], clDataSize, clCooling, &log_cool_cmb[i]); edot_met[i] = edot_met[i] + std::pow(10.,log_cool_cmb[i]); } if (get_heat == 1) { FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i], &log10tem[i], clGridDim, - clPar1, &dclPar[0], clPar2, &dclPar[1], + clPar1, dclPar.data(), clPar2, &dclPar[1], clDataSize, clHeating, &log_heat[i]); edot_met[i] = edot_met[i] + std::pow(10.,log_heat[i]); } @@ -160,7 +160,7 @@ void grackle::impl::cool1d_cloudy_g( } else if (clGridRank == 3) { FORTRAN_NAME(interpolate_3dz_g)(&log_n_h[i], &zr, &log10tem[i], clGridDim, - clPar1, &dclPar[0], + clPar1, dclPar.data(), clPar2, &zindex, clPar3, &dclPar[2], clDataSize, clCooling, @@ -172,7 +172,7 @@ void grackle::impl::cool1d_cloudy_g( ((log10tem[i] - log10_tCMB) < 2.)) { FORTRAN_NAME(interpolate_3dz_g)(&log_n_h[i], &zr, &log10_tCMB, clGridDim, - clPar1, &dclPar[0], + clPar1, dclPar.data(), clPar2, &zindex, clPar3, &dclPar[2], clDataSize, clCooling, @@ -183,7 +183,7 @@ void grackle::impl::cool1d_cloudy_g( if (get_heat == 1) { FORTRAN_NAME(interpolate_3dz_g)(&log_n_h[i], &zr, &log10tem[i], clGridDim, - clPar1, &dclPar[0], + clPar1, dclPar.data(), clPar2, &zindex, clPar3, &dclPar[2], clDataSize, clHeating, diff --git a/src/clib/cool1d_cloudy_g.hpp b/src/clib/cool1d_cloudy_g.hpp index 9d5ad653c..d2abd0b44 100644 --- a/src/clib/cool1d_cloudy_g.hpp +++ b/src/clib/cool1d_cloudy_g.hpp @@ -53,11 +53,11 @@ namespace grackle::impl { /// written by: Britton Smith, 2009 /// modified1: November, 2025 by Christopher Bignamini & Matthew Abruzzo; C++ port void cool1d_cloudy_g( - double* rhoH, double* metallicity, double* logtem, double* edot, + const double* rhoH, const double* metallicity, const double* logtem, double* edot, double comp2, double dom, double zr, int icmbTfloor, int iClHeat, int iZscale, long long clGridRank, long long* clGridDim, double* clPar1, double* clPar2, double* clPar3, long long* clDataSize, double* clCooling, - double* clHeating, gr_mask_type* itmask, grackle_field_data* my_fields, + double* clHeating, const gr_mask_type* itmask, grackle_field_data* my_fields, IndexRange idx_range ); From 8154bddd1578405fa04a3f5438def834f3d87618 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 20 Nov 2025 11:49:42 +0000 Subject: [PATCH 17/21] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- src/clib/cool1d_cloudy_g.cpp | 165 ++++++++++++++++------------------- src/clib/cool1d_cloudy_g.hpp | 27 +++--- src/clib/cool1d_multi_g.cpp | 32 ++++--- 3 files changed, 108 insertions(+), 116 deletions(-) diff --git a/src/clib/cool1d_cloudy_g.cpp b/src/clib/cool1d_cloudy_g.cpp index b2ba703bb..5d4d22d67 100644 --- a/src/clib/cool1d_cloudy_g.cpp +++ b/src/clib/cool1d_cloudy_g.cpp @@ -24,16 +24,14 @@ #include "cool1d_cloudy_g.hpp" void grackle::impl::cool1d_cloudy_g( - const double* rhoH, const double* metallicity, const double* logtem, double* edot, - double comp2, double dom, double zr, int icmbTfloor, int iClHeat, - int iZscale, long long clGridRank, long long* clGridDim, double* clPar1, - double* clPar2, double* clPar3, long long* clDataSize, double* clCooling, - double* clHeating, const gr_mask_type* itmask, grackle_field_data* my_fields, - IndexRange idx_range -) -{ + const double* rhoH, const double* metallicity, const double* logtem, + double* edot, double comp2, double dom, double zr, int icmbTfloor, + int iClHeat, int iZscale, long long clGridRank, long long* clGridDim, + double* clPar1, double* clPar2, double* clPar3, long long* clDataSize, + double* clCooling, double* clHeating, const gr_mask_type* itmask, + grackle_field_data* my_fields, IndexRange idx_range) { // Locals - + int i, get_heat; long long zindex, zmidpt, zhighpt; double inv_log10, log10_tCMB; @@ -60,20 +58,19 @@ void grackle::impl::cool1d_cloudy_g( // Calculate parameter value slopes - dclPar[0] = (clPar1[clGridDim[0]-1] - clPar1[0]) / - (double)(clGridDim[0] - 1 ); - if (clGridRank > 1) { - dclPar[1] = (clPar2[clGridDim[1]-1] - clPar2[0]) / - (double)(clGridDim[1] - 1 ); + dclPar[0] = + (clPar1[clGridDim[0] - 1] - clPar1[0]) / (double)(clGridDim[0] - 1); + if (clGridRank > 1) { + dclPar[1] = + (clPar2[clGridDim[1] - 1] - clPar2[0]) / (double)(clGridDim[1] - 1); } - if (clGridRank > 2) { - dclPar[2] = (clPar3[clGridDim[2]-1] - clPar3[0]) / - (double)(clGridDim[2] - 1 ); + if (clGridRank > 2) { + dclPar[2] = + (clPar3[clGridDim[2] - 1] - clPar3[0]) / (double)(clGridDim[2] - 1); } - for (i = idx_range.i_start; i<=idx_range.i_end; i++) { - if (itmask[i] != MASK_FALSE) { - + for (i = idx_range.i_start; i <= idx_range.i_end; i++) { + if (itmask[i] != MASK_FALSE) { log10tem[i] = logtem[i] * inv_log10; // Calculate proper log(n_H) @@ -82,118 +79,104 @@ void grackle::impl::cool1d_cloudy_g( // Calculate index for redshift dimension - if (clGridRank > 2) { - + if (clGridRank > 2) { // Get index for redshift dimension via bisection - if (zr <= clPar2[0]) { + if (zr <= clPar2[0]) { zindex = 1; - } else if (zr >= clPar2[clGridDim[1]-1-1]) { + } else if (zr >= clPar2[clGridDim[1] - 1 - 1]) { zindex = clGridDim[1]; end_int = 1; get_heat = 0; - } else if (zr >= clPar2[clGridDim[1]-2-1]) { + } else if (zr >= clPar2[clGridDim[1] - 2 - 1]) { zindex = clGridDim[1] - 2; } else { zindex = 1; zhighpt = clGridDim[1] - 2; while ((zhighpt - zindex) > 1) { zmidpt = int((zhighpt + zindex) / 2); - if (zr >= clPar2[zmidpt-1]) { + if (zr >= clPar2[zmidpt - 1]) { zindex = zmidpt; } else { zhighpt = zmidpt; } } } - } // Call interpolation functions to get heating/cooling // Interpolate over temperature. - if (clGridRank == 1) { - FORTRAN_NAME(interpolate_1d_g)(&log10tem[i], clGridDim, clPar1, - dclPar.data(), clDataSize, clCooling, &log_cool[i]); - edot_met[i] = -std::pow(10.,log_cool[i]); + if (clGridRank == 1) { + FORTRAN_NAME(interpolate_1d_g)(&log10tem[i], clGridDim, clPar1, + dclPar.data(), clDataSize, clCooling, + &log_cool[i]); + edot_met[i] = -std::pow(10., log_cool[i]); // Ignore CMB term if T >> T_CMB - if ((icmbTfloor == 1) && - ((log10tem[i] - log10_tCMB) < 2.)) { - FORTRAN_NAME(interpolate_1d_g)(&log10_tCMB, clGridDim, clPar1, - dclPar.data(), clDataSize, clCooling, - &log_cool_cmb[i]); - edot_met[i] = edot_met[i] + std::pow(10.,log_cool_cmb[i]); + if ((icmbTfloor == 1) && ((log10tem[i] - log10_tCMB) < 2.)) { + FORTRAN_NAME(interpolate_1d_g)(&log10_tCMB, clGridDim, clPar1, + dclPar.data(), clDataSize, clCooling, + &log_cool_cmb[i]); + edot_met[i] = edot_met[i] + std::pow(10., log_cool_cmb[i]); } - if (get_heat == 1) { - FORTRAN_NAME(interpolate_1d_g)(&log10tem[i], clGridDim, clPar1, - dclPar.data(), clDataSize, clHeating, - &log_heat[i]); - edot_met[i] = edot_met[i] + std::pow(10.,log_heat[i]); + if (get_heat == 1) { + FORTRAN_NAME(interpolate_1d_g)(&log10tem[i], clGridDim, clPar1, + dclPar.data(), clDataSize, clHeating, + &log_heat[i]); + edot_met[i] = edot_met[i] + std::pow(10., log_heat[i]); } // Interpolate over density and temperature. - } else if (clGridRank == 2) { - FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i], &log10tem[i], clGridDim, - clPar1, dclPar.data(), clPar2, &dclPar[1], - clDataSize, clCooling, &log_cool[i]); - edot_met[i] = -std::pow(10.,log_cool[i]); + } else if (clGridRank == 2) { + FORTRAN_NAME(interpolate_2d_g)( + &log_n_h[i], &log10tem[i], clGridDim, clPar1, dclPar.data(), clPar2, + &dclPar[1], clDataSize, clCooling, &log_cool[i]); + edot_met[i] = -std::pow(10., log_cool[i]); // Ignore CMB term if T >> T_CMB - if ((icmbTfloor == 1) && - ((log10tem[i] - log10_tCMB) < 2.)) { - FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i], &log10_tCMB, - clGridDim, clPar1, dclPar.data(), clPar2, &dclPar[1], - clDataSize, clCooling, &log_cool_cmb[i]); - edot_met[i] = edot_met[i] + std::pow(10.,log_cool_cmb[i]); + if ((icmbTfloor == 1) && ((log10tem[i] - log10_tCMB) < 2.)) { + FORTRAN_NAME(interpolate_2d_g)( + &log_n_h[i], &log10_tCMB, clGridDim, clPar1, dclPar.data(), + clPar2, &dclPar[1], clDataSize, clCooling, &log_cool_cmb[i]); + edot_met[i] = edot_met[i] + std::pow(10., log_cool_cmb[i]); } - if (get_heat == 1) { - FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i], &log10tem[i], clGridDim, - clPar1, dclPar.data(), clPar2, &dclPar[1], - clDataSize, clHeating, &log_heat[i]); - edot_met[i] = edot_met[i] + std::pow(10.,log_heat[i]); + if (get_heat == 1) { + FORTRAN_NAME(interpolate_2d_g)( + &log_n_h[i], &log10tem[i], clGridDim, clPar1, dclPar.data(), + clPar2, &dclPar[1], clDataSize, clHeating, &log_heat[i]); + edot_met[i] = edot_met[i] + std::pow(10., log_heat[i]); } // Interpolate over density, redshift, and temperature. - } else if (clGridRank == 3) { - FORTRAN_NAME(interpolate_3dz_g)(&log_n_h[i], &zr, &log10tem[i], - clGridDim, - clPar1, dclPar.data(), - clPar2, &zindex, - clPar3, &dclPar[2], - clDataSize, clCooling, - &end_int, &log_cool[i]); - edot_met[i] = -std::pow(10.,log_cool[i]); + } else if (clGridRank == 3) { + FORTRAN_NAME(interpolate_3dz_g)( + &log_n_h[i], &zr, &log10tem[i], clGridDim, clPar1, dclPar.data(), + clPar2, &zindex, clPar3, &dclPar[2], clDataSize, clCooling, + &end_int, &log_cool[i]); + edot_met[i] = -std::pow(10., log_cool[i]); // Ignore CMB term if T >> T_CMB - if ((icmbTfloor == 1) && - ((log10tem[i] - log10_tCMB) < 2.)) { - FORTRAN_NAME(interpolate_3dz_g)(&log_n_h[i], &zr, &log10_tCMB, - clGridDim, - clPar1, dclPar.data(), - clPar2, &zindex, - clPar3, &dclPar[2], - clDataSize, clCooling, - &end_int, &log_cool_cmb[i]); - edot_met[i] = edot_met[i] + std::pow(10.,log_cool_cmb[i]); + if ((icmbTfloor == 1) && ((log10tem[i] - log10_tCMB) < 2.)) { + FORTRAN_NAME(interpolate_3dz_g)( + &log_n_h[i], &zr, &log10_tCMB, clGridDim, clPar1, dclPar.data(), + clPar2, &zindex, clPar3, &dclPar[2], clDataSize, clCooling, + &end_int, &log_cool_cmb[i]); + edot_met[i] = edot_met[i] + std::pow(10., log_cool_cmb[i]); } - if (get_heat == 1) { - FORTRAN_NAME(interpolate_3dz_g)(&log_n_h[i], &zr, &log10tem[i], - clGridDim, - clPar1, dclPar.data(), - clPar2, &zindex, - clPar3, &dclPar[2], - clDataSize, clHeating, - &end_int, &log_heat[i]); - edot_met[i] = edot_met[i] + std::pow(10.,log_heat[i]); + if (get_heat == 1) { + FORTRAN_NAME(interpolate_3dz_g)( + &log_n_h[i], &zr, &log10tem[i], clGridDim, clPar1, dclPar.data(), + clPar2, &zindex, clPar3, &dclPar[2], clDataSize, clHeating, + &end_int, &log_heat[i]); + edot_met[i] = edot_met[i] + std::pow(10., log_heat[i]); } } else { - OMP_PRAGMA_CRITICAL - { + OMP_PRAGMA_CRITICAL { printf("Maximum cooling data grid rank is 3!\n"); } return; @@ -201,13 +184,11 @@ void grackle::impl::cool1d_cloudy_g( // Scale cooling by metallicity. - if (iZscale == 1) { + if (iZscale == 1) { edot_met[i] = edot_met[i] * metallicity[i]; } - edot[i] = edot[i] + - (edot_met[i] * rhoH[i] * rhoH[i]); - + edot[i] = edot[i] + (edot_met[i] * rhoH[i] * rhoH[i]); } } diff --git a/src/clib/cool1d_cloudy_g.hpp b/src/clib/cool1d_cloudy_g.hpp index d2abd0b44..01334973a 100644 --- a/src/clib/cool1d_cloudy_g.hpp +++ b/src/clib/cool1d_cloudy_g.hpp @@ -26,8 +26,10 @@ namespace grackle::impl { /// /// Solve cloudy cooling by interpolating from the data. /// -/// @param[in] rhoH 1D array to hold the computed Hydrogen mass density for the @p idx_range -/// @param[in] metallicity 1D array to hold the computed metallicity for the @p idx_range +/// @param[in] rhoH 1D array to hold the computed Hydrogen mass density for the +/// @p idx_range +/// @param[in] metallicity 1D array to hold the computed metallicity for the @p +/// idx_range /// @param[in] logtem Natural log of temperature values /// @param[out] edot 1D array to hold the computed the time derivative of the /// internal energy in the @p idx_range @@ -51,16 +53,17 @@ namespace grackle::impl { /// /// @par History /// written by: Britton Smith, 2009 -/// modified1: November, 2025 by Christopher Bignamini & Matthew Abruzzo; C++ port -void cool1d_cloudy_g( - const double* rhoH, const double* metallicity, const double* logtem, double* edot, - double comp2, double dom, double zr, int icmbTfloor, int iClHeat, - int iZscale, long long clGridRank, long long* clGridDim, double* clPar1, - double* clPar2, double* clPar3, long long* clDataSize, double* clCooling, - double* clHeating, const gr_mask_type* itmask, grackle_field_data* my_fields, - IndexRange idx_range -); +/// modified1: November, 2025 by Christopher Bignamini & Matthew Abruzzo; C++ +/// port +void cool1d_cloudy_g(const double* rhoH, const double* metallicity, + const double* logtem, double* edot, double comp2, + double dom, double zr, int icmbTfloor, int iClHeat, + int iZscale, long long clGridRank, long long* clGridDim, + double* clPar1, double* clPar2, double* clPar3, + long long* clDataSize, double* clCooling, + double* clHeating, const gr_mask_type* itmask, + grackle_field_data* my_fields, IndexRange idx_range); -} // namespace grackle::impl +} // namespace grackle::impl #endif /* COOL1D_CLOUDY_G_HPP */ diff --git a/src/clib/cool1d_multi_g.cpp b/src/clib/cool1d_multi_g.cpp index e552aac1b..fa98b0066 100644 --- a/src/clib/cool1d_multi_g.cpp +++ b/src/clib/cool1d_multi_g.cpp @@ -1487,13 +1487,16 @@ void grackle::impl::cool1d_multi_g( iZscale = 0; mycmbTfloor = 0; grackle::impl::cool1d_cloudy_g( - rhoH, metallicity, logTlininterp_buf.logtem, edot, - comp2, dom, zr, mycmbTfloor, my_chemistry->UVbackground, iZscale, - my_rates->cloudy_primordial.grid_rank, my_rates->cloudy_primordial.grid_dimension, my_rates->cloudy_primordial.grid_parameters[0], - my_rates->cloudy_primordial.grid_parameters[1], my_rates->cloudy_primordial.grid_parameters[2], &my_rates->cloudy_primordial.data_size, - my_rates->cloudy_primordial.cooling_data, my_rates->cloudy_primordial.heating_data, itmask, my_fields, - idx_range); - + rhoH, metallicity, logTlininterp_buf.logtem, edot, comp2, dom, zr, + mycmbTfloor, my_chemistry->UVbackground, iZscale, + my_rates->cloudy_primordial.grid_rank, + my_rates->cloudy_primordial.grid_dimension, + my_rates->cloudy_primordial.grid_parameters[0], + my_rates->cloudy_primordial.grid_parameters[1], + my_rates->cloudy_primordial.grid_parameters[2], + &my_rates->cloudy_primordial.data_size, + my_rates->cloudy_primordial.cooling_data, + my_rates->cloudy_primordial.heating_data, itmask, my_fields, idx_range); // Calculate electron density from mean molecular weight @@ -1654,11 +1657,16 @@ void grackle::impl::cool1d_multi_g( if (my_rates->cloudy_data_new == 1) { iZscale = 1; grackle::impl::cool1d_cloudy_g( - rhoH, metallicity, logTlininterp_buf.logtem, edot, - comp2, dom, zr, my_chemistry->cmb_temperature_floor, my_chemistry->UVbackground, iZscale, - my_rates->cloudy_metal.grid_rank, my_rates->cloudy_metal.grid_dimension, my_rates->cloudy_metal.grid_parameters[0], - my_rates->cloudy_metal.grid_parameters[1], my_rates->cloudy_metal.grid_parameters[2], &my_rates->cloudy_metal.data_size, - my_rates->cloudy_metal.cooling_data, my_rates->cloudy_metal.heating_data, itmask_tab.data(), my_fields, + rhoH, metallicity, logTlininterp_buf.logtem, edot, comp2, dom, zr, + my_chemistry->cmb_temperature_floor, my_chemistry->UVbackground, + iZscale, my_rates->cloudy_metal.grid_rank, + my_rates->cloudy_metal.grid_dimension, + my_rates->cloudy_metal.grid_parameters[0], + my_rates->cloudy_metal.grid_parameters[1], + my_rates->cloudy_metal.grid_parameters[2], + &my_rates->cloudy_metal.data_size, + my_rates->cloudy_metal.cooling_data, + my_rates->cloudy_metal.heating_data, itmask_tab.data(), my_fields, idx_range); } else { From bb59dd46906ceebeab3b85d8121ba11a248e68ff Mon Sep 17 00:00:00 2001 From: ChristopherBignamini Date: Wed, 26 Nov 2025 11:36:58 +0100 Subject: [PATCH 18/21] Update of cool1d_cloudy_g function to use cloudy_data instead of its data members --- src/clib/cool1d_cloudy_g.cpp | 105 +++++++++++++++++------------------ src/clib/cool1d_cloudy_g.hpp | 22 +++----- src/clib/cool1d_multi_g.cpp | 17 ++---- 3 files changed, 65 insertions(+), 79 deletions(-) diff --git a/src/clib/cool1d_cloudy_g.cpp b/src/clib/cool1d_cloudy_g.cpp index b2ba703bb..a29ec9764 100644 --- a/src/clib/cool1d_cloudy_g.cpp +++ b/src/clib/cool1d_cloudy_g.cpp @@ -19,6 +19,7 @@ #include "grackle.h" #include "fortran_func_decls.h" +#include "fortran_func_wrappers.hpp" #include "utils-cpp.hpp" #include "cool1d_cloudy_g.hpp" @@ -26,10 +27,8 @@ void grackle::impl::cool1d_cloudy_g( const double* rhoH, const double* metallicity, const double* logtem, double* edot, double comp2, double dom, double zr, int icmbTfloor, int iClHeat, - int iZscale, long long clGridRank, long long* clGridDim, double* clPar1, - double* clPar2, double* clPar3, long long* clDataSize, double* clCooling, - double* clHeating, const gr_mask_type* itmask, grackle_field_data* my_fields, - IndexRange idx_range + int iZscale, const gr_mask_type* itmask, cloudy_data cloudy_table, + grackle_field_data* my_fields, IndexRange idx_range ) { // Locals @@ -37,7 +36,7 @@ void grackle::impl::cool1d_cloudy_g( int i, get_heat; long long zindex, zmidpt, zhighpt; double inv_log10, log10_tCMB; - std::vector dclPar(clGridRank); + std::vector dclPar(cloudy_table.grid_rank); long long end_int; // Slice locals @@ -60,15 +59,15 @@ void grackle::impl::cool1d_cloudy_g( // Calculate parameter value slopes - dclPar[0] = (clPar1[clGridDim[0]-1] - clPar1[0]) / - (double)(clGridDim[0] - 1 ); - if (clGridRank > 1) { - dclPar[1] = (clPar2[clGridDim[1]-1] - clPar2[0]) / - (double)(clGridDim[1] - 1 ); + dclPar[0] = (cloudy_table.grid_parameters[0][cloudy_table.grid_dimension[0]-1] - cloudy_table.grid_parameters[0][0]) / + (double)(cloudy_table.grid_dimension[0] - 1 ); + if (cloudy_table.grid_rank > 1) { + dclPar[1] = (cloudy_table.grid_parameters[1][cloudy_table.grid_dimension[1]-1] - cloudy_table.grid_parameters[1][0]) / + (double)(cloudy_table.grid_dimension[1] - 1 ); } - if (clGridRank > 2) { - dclPar[2] = (clPar3[clGridDim[2]-1] - clPar3[0]) / - (double)(clGridDim[2] - 1 ); + if (cloudy_table.grid_rank > 2) { + dclPar[2] = (cloudy_table.grid_parameters[2][cloudy_table.grid_dimension[2]-1] - cloudy_table.grid_parameters[2][0]) / + (double)(cloudy_table.grid_dimension[2] - 1 ); } for (i = idx_range.i_start; i<=idx_range.i_end; i++) { @@ -82,24 +81,24 @@ void grackle::impl::cool1d_cloudy_g( // Calculate index for redshift dimension - if (clGridRank > 2) { + if (cloudy_table.grid_rank > 2) { // Get index for redshift dimension via bisection - if (zr <= clPar2[0]) { + if (zr <= cloudy_table.grid_parameters[1][0]) { zindex = 1; - } else if (zr >= clPar2[clGridDim[1]-1-1]) { - zindex = clGridDim[1]; + } else if (zr >= cloudy_table.grid_parameters[1][cloudy_table.grid_dimension[1]-1-1]) { + zindex = cloudy_table.grid_dimension[1]; end_int = 1; get_heat = 0; - } else if (zr >= clPar2[clGridDim[1]-2-1]) { - zindex = clGridDim[1] - 2; + } else if (zr >= cloudy_table.grid_parameters[1][cloudy_table.grid_dimension[1]-2-1]) { + zindex = cloudy_table.grid_dimension[1] - 2; } else { zindex = 1; - zhighpt = clGridDim[1] - 2; + zhighpt = cloudy_table.grid_dimension[1] - 2; while ((zhighpt - zindex) > 1) { zmidpt = int((zhighpt + zindex) / 2); - if (zr >= clPar2[zmidpt-1]) { + if (zr >= cloudy_table.grid_parameters[1][zmidpt-1]) { zindex = zmidpt; } else { zhighpt = zmidpt; @@ -112,58 +111,58 @@ void grackle::impl::cool1d_cloudy_g( // Call interpolation functions to get heating/cooling // Interpolate over temperature. - if (clGridRank == 1) { - FORTRAN_NAME(interpolate_1d_g)(&log10tem[i], clGridDim, clPar1, - dclPar.data(), clDataSize, clCooling, &log_cool[i]); + if (cloudy_table.grid_rank == 1) { + FORTRAN_NAME(interpolate_1d_g)(&log10tem[i], cloudy_table.grid_dimension, cloudy_table.grid_parameters[0], + dclPar.data(), &cloudy_table.data_size, cloudy_table.cooling_data, &log_cool[i]); edot_met[i] = -std::pow(10.,log_cool[i]); // Ignore CMB term if T >> T_CMB if ((icmbTfloor == 1) && ((log10tem[i] - log10_tCMB) < 2.)) { - FORTRAN_NAME(interpolate_1d_g)(&log10_tCMB, clGridDim, clPar1, - dclPar.data(), clDataSize, clCooling, + FORTRAN_NAME(interpolate_1d_g)(&log10_tCMB, cloudy_table.grid_dimension, cloudy_table.grid_parameters[0], + dclPar.data(), &cloudy_table.data_size, cloudy_table.cooling_data, &log_cool_cmb[i]); edot_met[i] = edot_met[i] + std::pow(10.,log_cool_cmb[i]); } if (get_heat == 1) { - FORTRAN_NAME(interpolate_1d_g)(&log10tem[i], clGridDim, clPar1, - dclPar.data(), clDataSize, clHeating, + FORTRAN_NAME(interpolate_1d_g)(&log10tem[i], cloudy_table.grid_dimension, cloudy_table.grid_parameters[0], + dclPar.data(), &cloudy_table.data_size, cloudy_table.heating_data, &log_heat[i]); edot_met[i] = edot_met[i] + std::pow(10.,log_heat[i]); } // Interpolate over density and temperature. - } else if (clGridRank == 2) { - FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i], &log10tem[i], clGridDim, - clPar1, dclPar.data(), clPar2, &dclPar[1], - clDataSize, clCooling, &log_cool[i]); + } else if (cloudy_table.grid_rank == 2) { + FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i], &log10tem[i], cloudy_table.grid_dimension, + cloudy_table.grid_parameters[0], dclPar.data(), cloudy_table.grid_parameters[1], &dclPar[1], + &cloudy_table.data_size, cloudy_table.cooling_data, &log_cool[i]); edot_met[i] = -std::pow(10.,log_cool[i]); // Ignore CMB term if T >> T_CMB if ((icmbTfloor == 1) && ((log10tem[i] - log10_tCMB) < 2.)) { FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i], &log10_tCMB, - clGridDim, clPar1, dclPar.data(), clPar2, &dclPar[1], - clDataSize, clCooling, &log_cool_cmb[i]); + cloudy_table.grid_dimension, cloudy_table.grid_parameters[0], dclPar.data(), cloudy_table.grid_parameters[1], &dclPar[1], + &cloudy_table.data_size, cloudy_table.cooling_data, &log_cool_cmb[i]); edot_met[i] = edot_met[i] + std::pow(10.,log_cool_cmb[i]); } if (get_heat == 1) { - FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i], &log10tem[i], clGridDim, - clPar1, dclPar.data(), clPar2, &dclPar[1], - clDataSize, clHeating, &log_heat[i]); + FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i], &log10tem[i], cloudy_table.grid_dimension, + cloudy_table.grid_parameters[0], dclPar.data(), cloudy_table.grid_parameters[1], &dclPar[1], + &cloudy_table.data_size, cloudy_table.heating_data, &log_heat[i]); edot_met[i] = edot_met[i] + std::pow(10.,log_heat[i]); } // Interpolate over density, redshift, and temperature. - } else if (clGridRank == 3) { + } else if (cloudy_table.grid_rank == 3) { FORTRAN_NAME(interpolate_3dz_g)(&log_n_h[i], &zr, &log10tem[i], - clGridDim, - clPar1, dclPar.data(), - clPar2, &zindex, - clPar3, &dclPar[2], - clDataSize, clCooling, + cloudy_table.grid_dimension, + cloudy_table.grid_parameters[0], dclPar.data(), + cloudy_table.grid_parameters[1], &zindex, + cloudy_table.grid_parameters[2], &dclPar[2], + &cloudy_table.data_size, cloudy_table.cooling_data, &end_int, &log_cool[i]); edot_met[i] = -std::pow(10.,log_cool[i]); @@ -171,22 +170,22 @@ void grackle::impl::cool1d_cloudy_g( if ((icmbTfloor == 1) && ((log10tem[i] - log10_tCMB) < 2.)) { FORTRAN_NAME(interpolate_3dz_g)(&log_n_h[i], &zr, &log10_tCMB, - clGridDim, - clPar1, dclPar.data(), - clPar2, &zindex, - clPar3, &dclPar[2], - clDataSize, clCooling, + cloudy_table.grid_dimension, + cloudy_table.grid_parameters[0], dclPar.data(), + cloudy_table.grid_parameters[1], &zindex, + cloudy_table.grid_parameters[2], &dclPar[2], + &cloudy_table.data_size, cloudy_table.cooling_data, &end_int, &log_cool_cmb[i]); edot_met[i] = edot_met[i] + std::pow(10.,log_cool_cmb[i]); } if (get_heat == 1) { FORTRAN_NAME(interpolate_3dz_g)(&log_n_h[i], &zr, &log10tem[i], - clGridDim, - clPar1, dclPar.data(), - clPar2, &zindex, - clPar3, &dclPar[2], - clDataSize, clHeating, + cloudy_table.grid_dimension, + cloudy_table.grid_parameters[0], dclPar.data(), + cloudy_table.grid_parameters[1], &zindex, + cloudy_table.grid_parameters[2], &dclPar[2], + &cloudy_table.data_size, cloudy_table.heating_data, &end_int, &log_heat[i]); edot_met[i] = edot_met[i] + std::pow(10.,log_heat[i]); } diff --git a/src/clib/cool1d_cloudy_g.hpp b/src/clib/cool1d_cloudy_g.hpp index d2abd0b44..bf0c5b132 100644 --- a/src/clib/cool1d_cloudy_g.hpp +++ b/src/clib/cool1d_cloudy_g.hpp @@ -37,14 +37,8 @@ namespace grackle::impl { /// @param[in] icmbTfloor Flag to include temperature floor from cmb /// @param[in] iClHeat Flag to include cloudy heating /// @param[in] iZscale Flag to scale cooling by metallicity -/// @param[in] clGridRank Rank of cloudy cooling data grid -/// @param[in] clGridDim Array containing dimensions of cloudy data -/// @param[in] clPar1, clPar2, clPar3 Arrays containing cloudy -/// grid parameter values -/// @param[in] clDataSize Total size of flattened 1D cooling data array -/// @param[in] clCooling Cloudy cooling data -/// @param[in] clHeating Cloudy heating data /// @param[in] itmask Iteration mask +/// @param[in] cloudy_table Cloudy cooling table data /// @param[in] my_fields Grackle field data /// @param[in] idx_range Index range specifying the portion of the grid to /// operate on @@ -52,14 +46,12 @@ namespace grackle::impl { /// @par History /// written by: Britton Smith, 2009 /// modified1: November, 2025 by Christopher Bignamini & Matthew Abruzzo; C++ port -void cool1d_cloudy_g( - const double* rhoH, const double* metallicity, const double* logtem, double* edot, - double comp2, double dom, double zr, int icmbTfloor, int iClHeat, - int iZscale, long long clGridRank, long long* clGridDim, double* clPar1, - double* clPar2, double* clPar3, long long* clDataSize, double* clCooling, - double* clHeating, const gr_mask_type* itmask, grackle_field_data* my_fields, - IndexRange idx_range -); + void cool1d_cloudy_g( + const double* rhoH, const double* metallicity, const double* logtem, double* edot, + double comp2, double dom, double zr, int icmbTfloor, int iClHeat, + int iZscale, const gr_mask_type* itmask, cloudy_data cloudy_table, + grackle_field_data* my_fields, IndexRange idx_range + ); } // namespace grackle::impl diff --git a/src/clib/cool1d_multi_g.cpp b/src/clib/cool1d_multi_g.cpp index e552aac1b..4e6a3304e 100644 --- a/src/clib/cool1d_multi_g.cpp +++ b/src/clib/cool1d_multi_g.cpp @@ -1488,11 +1488,8 @@ void grackle::impl::cool1d_multi_g( mycmbTfloor = 0; grackle::impl::cool1d_cloudy_g( rhoH, metallicity, logTlininterp_buf.logtem, edot, - comp2, dom, zr, mycmbTfloor, my_chemistry->UVbackground, iZscale, - my_rates->cloudy_primordial.grid_rank, my_rates->cloudy_primordial.grid_dimension, my_rates->cloudy_primordial.grid_parameters[0], - my_rates->cloudy_primordial.grid_parameters[1], my_rates->cloudy_primordial.grid_parameters[2], &my_rates->cloudy_primordial.data_size, - my_rates->cloudy_primordial.cooling_data, my_rates->cloudy_primordial.heating_data, itmask, my_fields, - idx_range); + comp2, dom, zr, mycmbTfloor, my_chemistry->UVbackground, iZscale, itmask, + my_rates->cloudy_primordial, my_fields, idx_range); // Calculate electron density from mean molecular weight @@ -1654,12 +1651,10 @@ void grackle::impl::cool1d_multi_g( if (my_rates->cloudy_data_new == 1) { iZscale = 1; grackle::impl::cool1d_cloudy_g( - rhoH, metallicity, logTlininterp_buf.logtem, edot, - comp2, dom, zr, my_chemistry->cmb_temperature_floor, my_chemistry->UVbackground, iZscale, - my_rates->cloudy_metal.grid_rank, my_rates->cloudy_metal.grid_dimension, my_rates->cloudy_metal.grid_parameters[0], - my_rates->cloudy_metal.grid_parameters[1], my_rates->cloudy_metal.grid_parameters[2], &my_rates->cloudy_metal.data_size, - my_rates->cloudy_metal.cooling_data, my_rates->cloudy_metal.heating_data, itmask_tab.data(), my_fields, - idx_range); + rhoH, metallicity, logTlininterp_buf.logtem, edot, + comp2, dom, zr, my_chemistry->cmb_temperature_floor, my_chemistry->UVbackground, iZscale, itmask_tab.data(), + my_rates->cloudy_metal, my_fields, + idx_range); } else { FORTRAN_NAME(cool1d_cloudy_old_tables_g)( From 59c2efbf75b27ad6124bdcd54a6bec6c851945be Mon Sep 17 00:00:00 2001 From: ChristopherBignamini Date: Wed, 26 Nov 2025 11:47:22 +0100 Subject: [PATCH 19/21] grackle_field_data* my_fields removed from cool1d_cloudy_g interface, we only use grackle_fields->grid_dimension[0] which can be obtained from IdxRange --- src/clib/cool1d_cloudy_g.cpp | 14 +++++++------- src/clib/cool1d_cloudy_g.hpp | 2 +- src/clib/cool1d_multi_g.cpp | 5 ++--- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/clib/cool1d_cloudy_g.cpp b/src/clib/cool1d_cloudy_g.cpp index a29ec9764..0b1b77164 100644 --- a/src/clib/cool1d_cloudy_g.cpp +++ b/src/clib/cool1d_cloudy_g.cpp @@ -28,7 +28,7 @@ void grackle::impl::cool1d_cloudy_g( const double* rhoH, const double* metallicity, const double* logtem, double* edot, double comp2, double dom, double zr, int icmbTfloor, int iClHeat, int iZscale, const gr_mask_type* itmask, cloudy_data cloudy_table, - grackle_field_data* my_fields, IndexRange idx_range + IndexRange idx_range ) { // Locals @@ -41,12 +41,12 @@ void grackle::impl::cool1d_cloudy_g( // Slice locals - std::vector log_n_h(my_fields->grid_dimension[0]); - std::vector log_cool(my_fields->grid_dimension[0]); - std::vector log_cool_cmb(my_fields->grid_dimension[0]); - std::vector log_heat(my_fields->grid_dimension[0]); - std::vector edot_met(my_fields->grid_dimension[0]); - std::vector log10tem(my_fields->grid_dimension[0]); + std::vector log_n_h(idx_range.i_stop); + std::vector log_cool(idx_range.i_stop); + std::vector log_cool_cmb(idx_range.i_stop); + std::vector log_heat(idx_range.i_stop); + std::vector edot_met(idx_range.i_stop); + std::vector log10tem(idx_range.i_stop); // \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\///////////////////////////////// // ======================================================================= diff --git a/src/clib/cool1d_cloudy_g.hpp b/src/clib/cool1d_cloudy_g.hpp index bf0c5b132..b869a7745 100644 --- a/src/clib/cool1d_cloudy_g.hpp +++ b/src/clib/cool1d_cloudy_g.hpp @@ -50,7 +50,7 @@ namespace grackle::impl { const double* rhoH, const double* metallicity, const double* logtem, double* edot, double comp2, double dom, double zr, int icmbTfloor, int iClHeat, int iZscale, const gr_mask_type* itmask, cloudy_data cloudy_table, - grackle_field_data* my_fields, IndexRange idx_range + IndexRange idx_range ); } // namespace grackle::impl diff --git a/src/clib/cool1d_multi_g.cpp b/src/clib/cool1d_multi_g.cpp index 4e6a3304e..0d48688c2 100644 --- a/src/clib/cool1d_multi_g.cpp +++ b/src/clib/cool1d_multi_g.cpp @@ -1489,7 +1489,7 @@ void grackle::impl::cool1d_multi_g( grackle::impl::cool1d_cloudy_g( rhoH, metallicity, logTlininterp_buf.logtem, edot, comp2, dom, zr, mycmbTfloor, my_chemistry->UVbackground, iZscale, itmask, - my_rates->cloudy_primordial, my_fields, idx_range); + my_rates->cloudy_primordial, idx_range); // Calculate electron density from mean molecular weight @@ -1653,8 +1653,7 @@ void grackle::impl::cool1d_multi_g( grackle::impl::cool1d_cloudy_g( rhoH, metallicity, logTlininterp_buf.logtem, edot, comp2, dom, zr, my_chemistry->cmb_temperature_floor, my_chemistry->UVbackground, iZscale, itmask_tab.data(), - my_rates->cloudy_metal, my_fields, - idx_range); + my_rates->cloudy_metal, idx_range); } else { FORTRAN_NAME(cool1d_cloudy_old_tables_g)( From bf85585dfbadb27a5ebf33f2803e4f0a4aa96fef Mon Sep 17 00:00:00 2001 From: ChristopherBignamini Date: Wed, 26 Nov 2025 12:34:49 +0100 Subject: [PATCH 20/21] Calls to interpolation functions updated to new versions --- src/clib/cool1d_cloudy_g.cpp | 93 +++++++++++++++++++++--------------- 1 file changed, 54 insertions(+), 39 deletions(-) diff --git a/src/clib/cool1d_cloudy_g.cpp b/src/clib/cool1d_cloudy_g.cpp index 0b1b77164..387965138 100644 --- a/src/clib/cool1d_cloudy_g.cpp +++ b/src/clib/cool1d_cloudy_g.cpp @@ -18,7 +18,6 @@ #include #include "grackle.h" -#include "fortran_func_decls.h" #include "fortran_func_wrappers.hpp" #include "utils-cpp.hpp" @@ -112,81 +111,97 @@ void grackle::impl::cool1d_cloudy_g( // Interpolate over temperature. if (cloudy_table.grid_rank == 1) { - FORTRAN_NAME(interpolate_1d_g)(&log10tem[i], cloudy_table.grid_dimension, cloudy_table.grid_parameters[0], - dclPar.data(), &cloudy_table.data_size, cloudy_table.cooling_data, &log_cool[i]); + log_cool[i] = grackle::impl::fortran_wrapper::interpolate_1d_g( + log10tem[i], cloudy_table.grid_dimension, + cloudy_table.grid_parameters[0], dclPar[0], cloudy_table.data_size, + cloudy_table.cooling_data); edot_met[i] = -std::pow(10.,log_cool[i]); // Ignore CMB term if T >> T_CMB if ((icmbTfloor == 1) && ((log10tem[i] - log10_tCMB) < 2.)) { - FORTRAN_NAME(interpolate_1d_g)(&log10_tCMB, cloudy_table.grid_dimension, cloudy_table.grid_parameters[0], - dclPar.data(), &cloudy_table.data_size, cloudy_table.cooling_data, - &log_cool_cmb[i]); + log_cool_cmb[i] = grackle::impl::fortran_wrapper::interpolate_1d_g( + log10_tCMB, cloudy_table.grid_dimension, + cloudy_table.grid_parameters[0], dclPar[0], cloudy_table.data_size, + cloudy_table.cooling_data); edot_met[i] = edot_met[i] + std::pow(10.,log_cool_cmb[i]); } if (get_heat == 1) { - FORTRAN_NAME(interpolate_1d_g)(&log10tem[i], cloudy_table.grid_dimension, cloudy_table.grid_parameters[0], - dclPar.data(), &cloudy_table.data_size, cloudy_table.heating_data, - &log_heat[i]); + log_cool[i] = grackle::impl::fortran_wrapper::interpolate_1d_g( + log10tem[i], cloudy_table.grid_dimension, + cloudy_table.grid_parameters[0], dclPar[0], cloudy_table.data_size, + cloudy_table.heating_data); edot_met[i] = edot_met[i] + std::pow(10.,log_heat[i]); } // Interpolate over density and temperature. } else if (cloudy_table.grid_rank == 2) { - FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i], &log10tem[i], cloudy_table.grid_dimension, - cloudy_table.grid_parameters[0], dclPar.data(), cloudy_table.grid_parameters[1], &dclPar[1], - &cloudy_table.data_size, cloudy_table.cooling_data, &log_cool[i]); + log_cool[i] = grackle::impl::fortran_wrapper::interpolate_2d_g( + log_n_h[i], log10tem[i], cloudy_table.grid_dimension, + cloudy_table.grid_parameters[0], dclPar[0], + cloudy_table.grid_parameters[1], dclPar[1], + cloudy_table.data_size, + cloudy_table.cooling_data); edot_met[i] = -std::pow(10.,log_cool[i]); // Ignore CMB term if T >> T_CMB if ((icmbTfloor == 1) && ((log10tem[i] - log10_tCMB) < 2.)) { - FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i], &log10_tCMB, - cloudy_table.grid_dimension, cloudy_table.grid_parameters[0], dclPar.data(), cloudy_table.grid_parameters[1], &dclPar[1], - &cloudy_table.data_size, cloudy_table.cooling_data, &log_cool_cmb[i]); + log_cool_cmb[i] = grackle::impl::fortran_wrapper::interpolate_2d_g( + log_n_h[i], log10_tCMB, cloudy_table.grid_dimension, + cloudy_table.grid_parameters[0], dclPar[0], + cloudy_table.grid_parameters[1], dclPar[1], + cloudy_table.data_size, + cloudy_table.cooling_data); edot_met[i] = edot_met[i] + std::pow(10.,log_cool_cmb[i]); } if (get_heat == 1) { - FORTRAN_NAME(interpolate_2d_g)(&log_n_h[i], &log10tem[i], cloudy_table.grid_dimension, - cloudy_table.grid_parameters[0], dclPar.data(), cloudy_table.grid_parameters[1], &dclPar[1], - &cloudy_table.data_size, cloudy_table.heating_data, &log_heat[i]); + log_heat[i] = grackle::impl::fortran_wrapper::interpolate_2d_g( + log_n_h[i], log10tem[i], cloudy_table.grid_dimension, + cloudy_table.grid_parameters[0], dclPar[0], + cloudy_table.grid_parameters[1], dclPar[1], + cloudy_table.data_size, + cloudy_table.heating_data); edot_met[i] = edot_met[i] + std::pow(10.,log_heat[i]); } // Interpolate over density, redshift, and temperature. } else if (cloudy_table.grid_rank == 3) { - FORTRAN_NAME(interpolate_3dz_g)(&log_n_h[i], &zr, &log10tem[i], - cloudy_table.grid_dimension, - cloudy_table.grid_parameters[0], dclPar.data(), - cloudy_table.grid_parameters[1], &zindex, - cloudy_table.grid_parameters[2], &dclPar[2], - &cloudy_table.data_size, cloudy_table.cooling_data, - &end_int, &log_cool[i]); + log_cool[i] = grackle::impl::fortran_wrapper::interpolate_3dz_g( + log_n_h[i], zr, log10tem[i], + cloudy_table.grid_dimension, + cloudy_table.grid_parameters[0], dclPar[0], + cloudy_table.grid_parameters[1], zindex, + cloudy_table.grid_parameters[2], dclPar[2], + cloudy_table.data_size, cloudy_table.cooling_data, + end_int); edot_met[i] = -std::pow(10.,log_cool[i]); // Ignore CMB term if T >> T_CMB if ((icmbTfloor == 1) && ((log10tem[i] - log10_tCMB) < 2.)) { - FORTRAN_NAME(interpolate_3dz_g)(&log_n_h[i], &zr, &log10_tCMB, - cloudy_table.grid_dimension, - cloudy_table.grid_parameters[0], dclPar.data(), - cloudy_table.grid_parameters[1], &zindex, - cloudy_table.grid_parameters[2], &dclPar[2], - &cloudy_table.data_size, cloudy_table.cooling_data, - &end_int, &log_cool_cmb[i]); + log_cool_cmb[i] = grackle::impl::fortran_wrapper::interpolate_3dz_g( + log_n_h[i], zr, log10_tCMB, + cloudy_table.grid_dimension, + cloudy_table.grid_parameters[0], dclPar[0], + cloudy_table.grid_parameters[1], zindex, + cloudy_table.grid_parameters[2], dclPar[2], + cloudy_table.data_size, cloudy_table.cooling_data, + end_int); edot_met[i] = edot_met[i] + std::pow(10.,log_cool_cmb[i]); } if (get_heat == 1) { - FORTRAN_NAME(interpolate_3dz_g)(&log_n_h[i], &zr, &log10tem[i], - cloudy_table.grid_dimension, - cloudy_table.grid_parameters[0], dclPar.data(), - cloudy_table.grid_parameters[1], &zindex, - cloudy_table.grid_parameters[2], &dclPar[2], - &cloudy_table.data_size, cloudy_table.heating_data, - &end_int, &log_heat[i]); + log_heat[i] = grackle::impl::fortran_wrapper::interpolate_3dz_g( + log_n_h[i], zr, log10tem[i], + cloudy_table.grid_dimension, + cloudy_table.grid_parameters[0], dclPar[0], + cloudy_table.grid_parameters[1], zindex, + cloudy_table.grid_parameters[2], dclPar[2], + cloudy_table.data_size, cloudy_table.heating_data, + end_int); edot_met[i] = edot_met[i] + std::pow(10.,log_heat[i]); } From 0223ee04312c79c1ded8658235f6a8f22821f0e3 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 26 Nov 2025 11:42:18 +0000 Subject: [PATCH 21/21] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- src/clib/cool1d_cloudy_g.cpp | 129 +++++++++++++++++------------------ src/clib/cool1d_cloudy_g.hpp | 14 ++-- src/clib/cool1d_multi_g.cpp | 15 ++-- 3 files changed, 77 insertions(+), 81 deletions(-) diff --git a/src/clib/cool1d_cloudy_g.cpp b/src/clib/cool1d_cloudy_g.cpp index 6506e93e9..1d5b8375b 100644 --- a/src/clib/cool1d_cloudy_g.cpp +++ b/src/clib/cool1d_cloudy_g.cpp @@ -24,12 +24,10 @@ #include "cool1d_cloudy_g.hpp" void grackle::impl::cool1d_cloudy_g( - const double* rhoH, const double* metallicity, const double* logtem, double* edot, - double comp2, double dom, double zr, int icmbTfloor, int iClHeat, - int iZscale, const gr_mask_type* itmask, cloudy_data cloudy_table, - IndexRange idx_range -) -{ + const double* rhoH, const double* metallicity, const double* logtem, + double* edot, double comp2, double dom, double zr, int icmbTfloor, + int iClHeat, int iZscale, const gr_mask_type* itmask, + cloudy_data cloudy_table, IndexRange idx_range) { // Locals int i, get_heat; @@ -58,15 +56,21 @@ void grackle::impl::cool1d_cloudy_g( // Calculate parameter value slopes - dclPar[0] = (cloudy_table.grid_parameters[0][cloudy_table.grid_dimension[0]-1] - cloudy_table.grid_parameters[0][0]) / - (double)(cloudy_table.grid_dimension[0] - 1 ); - if (cloudy_table.grid_rank > 1) { - dclPar[1] = (cloudy_table.grid_parameters[1][cloudy_table.grid_dimension[1]-1] - cloudy_table.grid_parameters[1][0]) / - (double)(cloudy_table.grid_dimension[1] - 1 ); + dclPar[0] = + (cloudy_table.grid_parameters[0][cloudy_table.grid_dimension[0] - 1] - + cloudy_table.grid_parameters[0][0]) / + (double)(cloudy_table.grid_dimension[0] - 1); + if (cloudy_table.grid_rank > 1) { + dclPar[1] = + (cloudy_table.grid_parameters[1][cloudy_table.grid_dimension[1] - 1] - + cloudy_table.grid_parameters[1][0]) / + (double)(cloudy_table.grid_dimension[1] - 1); } - if (cloudy_table.grid_rank > 2) { - dclPar[2] = (cloudy_table.grid_parameters[2][cloudy_table.grid_dimension[2]-1] - cloudy_table.grid_parameters[2][0]) / - (double)(cloudy_table.grid_dimension[2] - 1 ); + if (cloudy_table.grid_rank > 2) { + dclPar[2] = + (cloudy_table.grid_parameters[2][cloudy_table.grid_dimension[2] - 1] - + cloudy_table.grid_parameters[2][0]) / + (double)(cloudy_table.grid_dimension[2] - 1); } for (i = idx_range.i_start; i <= idx_range.i_end; i++) { @@ -79,24 +83,29 @@ void grackle::impl::cool1d_cloudy_g( // Calculate index for redshift dimension - if (cloudy_table.grid_rank > 2) { - + if (cloudy_table.grid_rank > 2) { // Get index for redshift dimension via bisection - if (zr <= cloudy_table.grid_parameters[1][0]) { + if (zr <= cloudy_table.grid_parameters[1][0]) { zindex = 1; - } else if (zr >= cloudy_table.grid_parameters[1][cloudy_table.grid_dimension[1]-1-1]) { + } else if (zr >= + cloudy_table + .grid_parameters[1][cloudy_table.grid_dimension[1] - 1 - + 1]) { zindex = cloudy_table.grid_dimension[1]; end_int = 1; get_heat = 0; - } else if (zr >= cloudy_table.grid_parameters[1][cloudy_table.grid_dimension[1]-2-1]) { + } else if (zr >= + cloudy_table + .grid_parameters[1][cloudy_table.grid_dimension[1] - 2 - + 1]) { zindex = cloudy_table.grid_dimension[1] - 2; } else { zindex = 1; zhighpt = cloudy_table.grid_dimension[1] - 2; while ((zhighpt - zindex) > 1) { zmidpt = int((zhighpt + zindex) / 2); - if (zr >= cloudy_table.grid_parameters[1][zmidpt-1]) { + if (zr >= cloudy_table.grid_parameters[1][zmidpt - 1]) { zindex = zmidpt; } else { zhighpt = zmidpt; @@ -108,99 +117,87 @@ void grackle::impl::cool1d_cloudy_g( // Call interpolation functions to get heating/cooling // Interpolate over temperature. - if (cloudy_table.grid_rank == 1) { + if (cloudy_table.grid_rank == 1) { log_cool[i] = grackle::impl::fortran_wrapper::interpolate_1d_g( log10tem[i], cloudy_table.grid_dimension, cloudy_table.grid_parameters[0], dclPar[0], cloudy_table.data_size, cloudy_table.cooling_data); - edot_met[i] = -std::pow(10.,log_cool[i]); + edot_met[i] = -std::pow(10., log_cool[i]); // Ignore CMB term if T >> T_CMB - if ((icmbTfloor == 1) && - ((log10tem[i] - log10_tCMB) < 2.)) { + if ((icmbTfloor == 1) && ((log10tem[i] - log10_tCMB) < 2.)) { log_cool_cmb[i] = grackle::impl::fortran_wrapper::interpolate_1d_g( log10_tCMB, cloudy_table.grid_dimension, - cloudy_table.grid_parameters[0], dclPar[0], cloudy_table.data_size, - cloudy_table.cooling_data); - edot_met[i] = edot_met[i] + std::pow(10.,log_cool_cmb[i]); + cloudy_table.grid_parameters[0], dclPar[0], + cloudy_table.data_size, cloudy_table.cooling_data); + edot_met[i] = edot_met[i] + std::pow(10., log_cool_cmb[i]); } - if (get_heat == 1) { + if (get_heat == 1) { log_cool[i] = grackle::impl::fortran_wrapper::interpolate_1d_g( log10tem[i], cloudy_table.grid_dimension, - cloudy_table.grid_parameters[0], dclPar[0], cloudy_table.data_size, - cloudy_table.heating_data); - edot_met[i] = edot_met[i] + std::pow(10.,log_heat[i]); + cloudy_table.grid_parameters[0], dclPar[0], + cloudy_table.data_size, cloudy_table.heating_data); + edot_met[i] = edot_met[i] + std::pow(10., log_heat[i]); } // Interpolate over density and temperature. - } else if (cloudy_table.grid_rank == 2) { + } else if (cloudy_table.grid_rank == 2) { log_cool[i] = grackle::impl::fortran_wrapper::interpolate_2d_g( log_n_h[i], log10tem[i], cloudy_table.grid_dimension, cloudy_table.grid_parameters[0], dclPar[0], - cloudy_table.grid_parameters[1], dclPar[1], - cloudy_table.data_size, + cloudy_table.grid_parameters[1], dclPar[1], cloudy_table.data_size, cloudy_table.cooling_data); - edot_met[i] = -std::pow(10.,log_cool[i]); + edot_met[i] = -std::pow(10., log_cool[i]); // Ignore CMB term if T >> T_CMB - if ((icmbTfloor == 1) && - ((log10tem[i] - log10_tCMB) < 2.)) { + if ((icmbTfloor == 1) && ((log10tem[i] - log10_tCMB) < 2.)) { log_cool_cmb[i] = grackle::impl::fortran_wrapper::interpolate_2d_g( log_n_h[i], log10_tCMB, cloudy_table.grid_dimension, cloudy_table.grid_parameters[0], dclPar[0], cloudy_table.grid_parameters[1], dclPar[1], - cloudy_table.data_size, - cloudy_table.cooling_data); - edot_met[i] = edot_met[i] + std::pow(10.,log_cool_cmb[i]); + cloudy_table.data_size, cloudy_table.cooling_data); + edot_met[i] = edot_met[i] + std::pow(10., log_cool_cmb[i]); } - if (get_heat == 1) { + if (get_heat == 1) { log_heat[i] = grackle::impl::fortran_wrapper::interpolate_2d_g( log_n_h[i], log10tem[i], cloudy_table.grid_dimension, cloudy_table.grid_parameters[0], dclPar[0], cloudy_table.grid_parameters[1], dclPar[1], - cloudy_table.data_size, - cloudy_table.heating_data); - edot_met[i] = edot_met[i] + std::pow(10.,log_heat[i]); + cloudy_table.data_size, cloudy_table.heating_data); + edot_met[i] = edot_met[i] + std::pow(10., log_heat[i]); } // Interpolate over density, redshift, and temperature. - } else if (cloudy_table.grid_rank == 3) { + } else if (cloudy_table.grid_rank == 3) { log_cool[i] = grackle::impl::fortran_wrapper::interpolate_3dz_g( - log_n_h[i], zr, log10tem[i], - cloudy_table.grid_dimension, - cloudy_table.grid_parameters[0], dclPar[0], - cloudy_table.grid_parameters[1], zindex, - cloudy_table.grid_parameters[2], dclPar[2], - cloudy_table.data_size, cloudy_table.cooling_data, - end_int); - edot_met[i] = -std::pow(10.,log_cool[i]); + log_n_h[i], zr, log10tem[i], cloudy_table.grid_dimension, + cloudy_table.grid_parameters[0], dclPar[0], + cloudy_table.grid_parameters[1], zindex, + cloudy_table.grid_parameters[2], dclPar[2], cloudy_table.data_size, + cloudy_table.cooling_data, end_int); + edot_met[i] = -std::pow(10., log_cool[i]); // Ignore CMB term if T >> T_CMB - if ((icmbTfloor == 1) && - ((log10tem[i] - log10_tCMB) < 2.)) { + if ((icmbTfloor == 1) && ((log10tem[i] - log10_tCMB) < 2.)) { log_cool_cmb[i] = grackle::impl::fortran_wrapper::interpolate_3dz_g( - log_n_h[i], zr, log10_tCMB, - cloudy_table.grid_dimension, + log_n_h[i], zr, log10_tCMB, cloudy_table.grid_dimension, cloudy_table.grid_parameters[0], dclPar[0], cloudy_table.grid_parameters[1], zindex, cloudy_table.grid_parameters[2], dclPar[2], - cloudy_table.data_size, cloudy_table.cooling_data, - end_int); - edot_met[i] = edot_met[i] + std::pow(10.,log_cool_cmb[i]); + cloudy_table.data_size, cloudy_table.cooling_data, end_int); + edot_met[i] = edot_met[i] + std::pow(10., log_cool_cmb[i]); } - if (get_heat == 1) { + if (get_heat == 1) { log_heat[i] = grackle::impl::fortran_wrapper::interpolate_3dz_g( - log_n_h[i], zr, log10tem[i], - cloudy_table.grid_dimension, + log_n_h[i], zr, log10tem[i], cloudy_table.grid_dimension, cloudy_table.grid_parameters[0], dclPar[0], cloudy_table.grid_parameters[1], zindex, cloudy_table.grid_parameters[2], dclPar[2], - cloudy_table.data_size, cloudy_table.heating_data, - end_int); - edot_met[i] = edot_met[i] + std::pow(10.,log_heat[i]); + cloudy_table.data_size, cloudy_table.heating_data, end_int); + edot_met[i] = edot_met[i] + std::pow(10., log_heat[i]); } } else { diff --git a/src/clib/cool1d_cloudy_g.hpp b/src/clib/cool1d_cloudy_g.hpp index 8c0c11b19..9e4b8771a 100644 --- a/src/clib/cool1d_cloudy_g.hpp +++ b/src/clib/cool1d_cloudy_g.hpp @@ -47,13 +47,13 @@ namespace grackle::impl { /// /// @par History /// written by: Britton Smith, 2009 -/// modified1: November, 2025 by Christopher Bignamini & Matthew Abruzzo; C++ port - void cool1d_cloudy_g( - const double* rhoH, const double* metallicity, const double* logtem, double* edot, - double comp2, double dom, double zr, int icmbTfloor, int iClHeat, - int iZscale, const gr_mask_type* itmask, cloudy_data cloudy_table, - IndexRange idx_range - ); +/// modified1: November, 2025 by Christopher Bignamini & Matthew Abruzzo; C++ +/// port +void cool1d_cloudy_g(const double* rhoH, const double* metallicity, + const double* logtem, double* edot, double comp2, + double dom, double zr, int icmbTfloor, int iClHeat, + int iZscale, const gr_mask_type* itmask, + cloudy_data cloudy_table, IndexRange idx_range); } // namespace grackle::impl diff --git a/src/clib/cool1d_multi_g.cpp b/src/clib/cool1d_multi_g.cpp index 0d48688c2..58cba3ff6 100644 --- a/src/clib/cool1d_multi_g.cpp +++ b/src/clib/cool1d_multi_g.cpp @@ -1486,11 +1486,10 @@ void grackle::impl::cool1d_multi_g( if (my_chemistry->primordial_chemistry == 0) { iZscale = 0; mycmbTfloor = 0; - grackle::impl::cool1d_cloudy_g( - rhoH, metallicity, logTlininterp_buf.logtem, edot, - comp2, dom, zr, mycmbTfloor, my_chemistry->UVbackground, iZscale, itmask, - my_rates->cloudy_primordial, idx_range); - + grackle::impl::cool1d_cloudy_g(rhoH, metallicity, logTlininterp_buf.logtem, + edot, comp2, dom, zr, mycmbTfloor, + my_chemistry->UVbackground, iZscale, itmask, + my_rates->cloudy_primordial, idx_range); // Calculate electron density from mean molecular weight @@ -1651,9 +1650,9 @@ void grackle::impl::cool1d_multi_g( if (my_rates->cloudy_data_new == 1) { iZscale = 1; grackle::impl::cool1d_cloudy_g( - rhoH, metallicity, logTlininterp_buf.logtem, edot, - comp2, dom, zr, my_chemistry->cmb_temperature_floor, my_chemistry->UVbackground, iZscale, itmask_tab.data(), - my_rates->cloudy_metal, idx_range); + rhoH, metallicity, logTlininterp_buf.logtem, edot, comp2, dom, zr, + my_chemistry->cmb_temperature_floor, my_chemistry->UVbackground, + iZscale, itmask_tab.data(), my_rates->cloudy_metal, idx_range); } else { FORTRAN_NAME(cool1d_cloudy_old_tables_g)(