From 7abb95982825def5d5b38a877e7186bd64de03fc Mon Sep 17 00:00:00 2001 From: jpekkila Date: Wed, 3 Jul 2019 19:01:16 +0300 Subject: [PATCH] Overhaul to the user-defined parameters done: All logical switches, parameters and vertex buffer handles are now defined in a single header file (the default location is acc/mhd_solver/stencil_defines.h). This header is used when preprocessing the DSL sources and is linked to the include/ directory when calling scripts/compile_acc.sh. astaroth.h is now used for configuring internal stuff only and should not be modified by users --- acc/mhd_solver/stencil_defines.h | 147 +++++++++++++++++++++++++++++- include/.gitignore | 2 + include/astaroth.h | 150 +++---------------------------- scripts/compile_acc.sh | 1 + src/core/astaroth.cu | 7 +- 5 files changed, 163 insertions(+), 144 deletions(-) create mode 100644 include/.gitignore diff --git a/acc/mhd_solver/stencil_defines.h b/acc/mhd_solver/stencil_defines.h index 2c8df97..b86d287 100644 --- a/acc/mhd_solver/stencil_defines.h +++ b/acc/mhd_solver/stencil_defines.h @@ -1,3 +1,8 @@ +/* + * ============================================================================= + * Logical switches + * ============================================================================= + */ #define STENCIL_ORDER (6) #define NGHOST (STENCIL_ORDER / 2) #define LDENSITY (1) @@ -5,5 +10,145 @@ #define LMAGNETIC (1) #define LENTROPY (1) #define LTEMPERATURE (0) -#define LFORCING (1) +#define LFORCING (0) #define LUPWD (0) + +#define AC_THERMAL_CONDUCTIVITY (AcReal(0.001)) // TODO: make an actual config parameter + +/* + * ============================================================================= + * User-defined parameters + * ============================================================================= + */ +// clang-format off +#define AC_FOR_USER_INT_PARAM_TYPES(FUNC)\ + /* Other */\ + FUNC(AC_max_steps), \ + FUNC(AC_save_steps), \ + FUNC(AC_bin_steps), \ + FUNC(AC_bc_type) +#define AC_FOR_REAL_PARAM_TYPES(FUNC)\ + /* cparams */\ + FUNC(AC_dsx), \ + FUNC(AC_dsy), \ + FUNC(AC_dsz), \ + FUNC(AC_dsmin), \ + /* physical grid*/\ + FUNC(AC_xlen), \ + FUNC(AC_ylen), \ + FUNC(AC_zlen), \ + FUNC(AC_xorig), \ + FUNC(AC_yorig), \ + FUNC(AC_zorig), \ + /*Physical units*/\ + FUNC(AC_unit_density),\ + FUNC(AC_unit_velocity),\ + FUNC(AC_unit_length),\ + /* properties of gravitating star*/\ + FUNC(AC_star_pos_x),\ + FUNC(AC_star_pos_y),\ + FUNC(AC_star_pos_z),\ + FUNC(AC_M_star),\ + /* Run params */\ + FUNC(AC_cdt), \ + FUNC(AC_cdtv), \ + FUNC(AC_cdts), \ + FUNC(AC_nu_visc), \ + FUNC(AC_cs_sound), \ + FUNC(AC_eta), \ + FUNC(AC_mu0), \ + FUNC(AC_cp_sound), \ + FUNC(AC_gamma), \ + FUNC(AC_cv_sound), \ + FUNC(AC_lnT0), \ + FUNC(AC_lnrho0), \ + FUNC(AC_zeta), \ + FUNC(AC_trans),\ + /* Other */\ + FUNC(AC_bin_save_t), \ + /* Initial condition params */\ + FUNC(AC_ampl_lnrho), \ + FUNC(AC_ampl_uu), \ + FUNC(AC_angl_uu), \ + FUNC(AC_lnrho_edge),\ + FUNC(AC_lnrho_out),\ + /* Forcing parameters. User configured. */\ + FUNC(AC_forcing_magnitude),\ + FUNC(AC_relhel), \ + FUNC(AC_kmin), \ + FUNC(AC_kmax), \ + /* Forcing parameters. Set by the generator. */\ + FUNC(AC_forcing_phase),\ + FUNC(AC_k_forcex),\ + FUNC(AC_k_forcey),\ + FUNC(AC_k_forcez),\ + FUNC(AC_kaver),\ + FUNC(AC_ff_hel_rex),\ + FUNC(AC_ff_hel_rey),\ + FUNC(AC_ff_hel_rez),\ + FUNC(AC_ff_hel_imx),\ + FUNC(AC_ff_hel_imy),\ + FUNC(AC_ff_hel_imz),\ + /* Additional helper params */\ + /* (deduced from other params do not set these directly!) */\ + FUNC(AC_G_CONST),\ + FUNC(AC_GM_star),\ + FUNC(AC_sq2GM_star),\ + FUNC(AC_cs2_sound), \ + FUNC(AC_inv_dsx), \ + FUNC(AC_inv_dsy), \ + FUNC(AC_inv_dsz) +// clang-format on + +/* + * ============================================================================= + * User-defined vertex buffers + * ============================================================================= + */ +// clang-format off +#if LDENSITY +#define AC_FOR_DENSITY_VTXBUF_HANDLES(FUNC) \ + FUNC(VTXBUF_LNRHO), +#else +#define AC_FOR_DENSITY_VTXBUF_HANDLES(FUNC) +#endif + +#if LHYDRO +#define AC_FOR_HYDRO_VTXBUF_HANDLES(FUNC) \ + FUNC(VTXBUF_UUX), \ + FUNC(VTXBUF_UUY), \ + FUNC(VTXBUF_UUZ), +#else +#define AC_FOR_HYDRO_VTXBUF_HANDLES(FUNC) +#endif + +#if LMAGNETIC +#define AC_FOR_MAGNETIC_VTXBUF_HANDLES(FUNC) \ + FUNC(VTXBUF_AX), \ + FUNC(VTXBUF_AY), \ + FUNC(VTXBUF_AZ), +#else +#define AC_FOR_MAGNETIC_VTXBUF_HANDLES(FUNC) +#endif + +#if LENTROPY +#define AC_FOR_ENTROPY_VTXBUF_HANDLES(FUNC) \ + FUNC(VTXBUF_ENTROPY), +#else +#define AC_FOR_ENTROPY_VTXBUF_HANDLES(FUNC) +#endif + +//MR: Temperature must not have an additional variable slot, but should sit on the +// same as entropy. +#if LTEMPERATURE + #define AC_FOR_TEMPERATURE_VTXBUF_HANDLES(FUNC)\ + FUNC(VTXBUF_TEMPERATURE), +#else + #define AC_FOR_TEMPERATURE_VTXBUF_HANDLES(FUNC) +#endif + +#define AC_FOR_VTXBUF_HANDLES(FUNC) AC_FOR_HYDRO_VTXBUF_HANDLES(FUNC) \ + AC_FOR_DENSITY_VTXBUF_HANDLES(FUNC) \ + AC_FOR_ENTROPY_VTXBUF_HANDLES(FUNC) \ + AC_FOR_MAGNETIC_VTXBUF_HANDLES(FUNC) \ +// clang-format on diff --git a/include/.gitignore b/include/.gitignore new file mode 100644 index 0000000..fa70d48 --- /dev/null +++ b/include/.gitignore @@ -0,0 +1,2 @@ +# Ignore the DSL headers +stencil_defines.h diff --git a/include/astaroth.h b/include/astaroth.h index c354f1e..62fe967 100644 --- a/include/astaroth.h +++ b/include/astaroth.h @@ -69,21 +69,17 @@ extern "C" { // clang-format off #ifndef USER_PROVIDED_DEFINES - #include "acc/mhd_solver/stencil_defines.h" // TODO: this should be in a standard location + #include "stencil_defines.h" #endif // clang-format on -#define AC_THERMAL_CONDUCTIVITY (AcReal(0.001)) // TODO: make an actual config parameter - /* * ============================================================================= - * Identifiers used to construct the parameter lists for AcMeshInfo - * (IntParamType and RealParamType) - * (user definable) + * Built-in parameters * ============================================================================= */ // clang-format off -#define AC_FOR_INT_PARAM_TYPES(FUNC)\ +#define AC_FOR_BUILTIN_INT_PARAM_TYPES(FUNC)\ /* cparams */\ FUNC(AC_nx), \ FUNC(AC_ny), \ @@ -97,141 +93,10 @@ extern "C" { FUNC(AC_nx_max), \ FUNC(AC_ny_max), \ FUNC(AC_nz_max), \ - /* Other */\ - FUNC(AC_max_steps), \ - FUNC(AC_save_steps), \ - FUNC(AC_bin_steps), \ - FUNC(AC_bc_type), \ /* Additional */\ FUNC(AC_mxy),\ FUNC(AC_nxy),\ - FUNC(AC_nxyz) -#define AC_FOR_REAL_PARAM_TYPES(FUNC)\ - /* cparams */\ - FUNC(AC_dsx), \ - FUNC(AC_dsy), \ - FUNC(AC_dsz), \ - FUNC(AC_dsmin), \ - /* physical grid*/\ - FUNC(AC_xlen), \ - FUNC(AC_ylen), \ - FUNC(AC_zlen), \ - FUNC(AC_xorig), \ - FUNC(AC_yorig), \ - FUNC(AC_zorig), \ - /*Physical units*/\ - FUNC(AC_unit_density),\ - FUNC(AC_unit_velocity),\ - FUNC(AC_unit_length),\ - /* properties of gravitating star*/\ - FUNC(AC_star_pos_x),\ - FUNC(AC_star_pos_y),\ - FUNC(AC_star_pos_z),\ - FUNC(AC_M_star),\ - /* Run params */\ - FUNC(AC_cdt), \ - FUNC(AC_cdtv), \ - FUNC(AC_cdts), \ - FUNC(AC_nu_visc), \ - FUNC(AC_cs_sound), \ - FUNC(AC_eta), \ - FUNC(AC_mu0), \ - FUNC(AC_cp_sound), \ - FUNC(AC_gamma), \ - FUNC(AC_cv_sound), \ - FUNC(AC_lnT0), \ - FUNC(AC_lnrho0), \ - FUNC(AC_zeta), \ - FUNC(AC_trans),\ - /* Other */\ - FUNC(AC_bin_save_t), \ - /* Initial condition params */\ - FUNC(AC_ampl_lnrho), \ - FUNC(AC_ampl_uu), \ - FUNC(AC_angl_uu), \ - FUNC(AC_lnrho_edge),\ - FUNC(AC_lnrho_out),\ - /* Forcing parameters. User configured. */\ - FUNC(AC_forcing_magnitude),\ - FUNC(AC_relhel), \ - FUNC(AC_kmin), \ - FUNC(AC_kmax), \ - /* Forcing parameters. Set by the generator. */\ - FUNC(AC_forcing_phase),\ - FUNC(AC_k_forcex),\ - FUNC(AC_k_forcey),\ - FUNC(AC_k_forcez),\ - FUNC(AC_kaver),\ - FUNC(AC_ff_hel_rex),\ - FUNC(AC_ff_hel_rey),\ - FUNC(AC_ff_hel_rez),\ - FUNC(AC_ff_hel_imx),\ - FUNC(AC_ff_hel_imy),\ - FUNC(AC_ff_hel_imz),\ - /* Additional helper params */\ - /* (deduced from other params do not set these directly!) */\ - FUNC(AC_G_CONST),\ - FUNC(AC_GM_star),\ - FUNC(AC_sq2GM_star),\ - FUNC(AC_cs2_sound), \ - FUNC(AC_inv_dsx), \ - FUNC(AC_inv_dsy), \ - FUNC(AC_inv_dsz) -// clang-format on - -/* - * ============================================================================= - * Identifiers for VertexBufferHandle - * (i.e. the arrays used to construct AcMesh) - * (user definable) - * ============================================================================= - */ -// clang-format off -#if LDENSITY -#define AC_FOR_DENSITY_VTXBUF_HANDLES(FUNC) \ - FUNC(VTXBUF_LNRHO), -#else -#define AC_FOR_DENSITY_VTXBUF_HANDLES(FUNC) -#endif - -#if LHYDRO -#define AC_FOR_HYDRO_VTXBUF_HANDLES(FUNC) \ - FUNC(VTXBUF_UUX), \ - FUNC(VTXBUF_UUY), \ - FUNC(VTXBUF_UUZ), -#else -#define AC_FOR_HYDRO_VTXBUF_HANDLES(FUNC) -#endif - -#if LMAGNETIC -#define AC_FOR_MAGNETIC_VTXBUF_HANDLES(FUNC) \ - FUNC(VTXBUF_AX), \ - FUNC(VTXBUF_AY), \ - FUNC(VTXBUF_AZ), -#else -#define AC_FOR_MAGNETIC_VTXBUF_HANDLES(FUNC) -#endif - -#if LENTROPY -#define AC_FOR_ENTROPY_VTXBUF_HANDLES(FUNC) \ - FUNC(VTXBUF_ENTROPY), -#else -#define AC_FOR_ENTROPY_VTXBUF_HANDLES(FUNC) -#endif - -//MR: Temperature must not have an additional variable slot, but should sit on the -// same as entropy. -#if LTEMPERATURE - #define AC_FOR_TEMPERATURE_VTXBUF_HANDLES(FUNC)\ - FUNC(VTXBUF_TEMPERATURE), -#else - #define AC_FOR_TEMPERATURE_VTXBUF_HANDLES(FUNC) -#endif - -#define AC_FOR_VTXBUF_HANDLES(FUNC) AC_FOR_HYDRO_VTXBUF_HANDLES(FUNC) \ - AC_FOR_DENSITY_VTXBUF_HANDLES(FUNC) \ - AC_FOR_ENTROPY_VTXBUF_HANDLES(FUNC) \ - AC_FOR_MAGNETIC_VTXBUF_HANDLES(FUNC) \ + FUNC(AC_nxyz), // clang-format on /* @@ -286,7 +151,12 @@ typedef enum { RTYPE_MAX, RTYPE_MIN, RTYPE_RMS, RTYPE_RMS_EXP, NUM_REDUCTION_TYP * Definitions for the enums and structs for AcMeshInfo (DO NOT TOUCH) * ============================================================================= */ -typedef enum { AC_FOR_INT_PARAM_TYPES(AC_GEN_ID), NUM_INT_PARAM_TYPES } AcIntParam; + +typedef enum { + AC_FOR_BUILTIN_INT_PARAM_TYPES(AC_GEN_ID) // + AC_FOR_USER_INT_PARAM_TYPES(AC_GEN_ID), // + NUM_INT_PARAM_TYPES +} AcIntParam; typedef enum { AC_FOR_REAL_PARAM_TYPES(AC_GEN_ID), NUM_REAL_PARAM_TYPES } AcRealParam; // typedef enum { AC_FOR_VEC_PARAM_TYPES(AC_GEN_ID), NUM_VEC_PARAM_TYPES } AcVecParam; diff --git a/scripts/compile_acc.sh b/scripts/compile_acc.sh index 0debccf..6e00f63 100755 --- a/scripts/compile_acc.sh +++ b/scripts/compile_acc.sh @@ -53,3 +53,4 @@ echo "Process file: ${ACC_DIR}/${ACC_SPS}" cd ${KERNEL_DIR} ${ACC_DIR}/compile.sh ${ACC_DIR}/${ACC_SAS} ${ACC_DIR}/${ACC_HEADER} ${ACC_DIR}/compile.sh ${ACC_DIR}/${ACC_SPS} ${ACC_DIR}/${ACC_HEADER} +ln -sf ${ACC_DIR}/${ACC_HEADER} ${AC_HOME}/include/stencil_defines.h diff --git a/src/core/astaroth.cu b/src/core/astaroth.cu index 0c49477..d9e0b1a 100644 --- a/src/core/astaroth.cu +++ b/src/core/astaroth.cu @@ -31,7 +31,8 @@ #include "math_utils.h" // sum for reductions #include "standalone/config_loader.h" // update_config -const char* intparam_names[] = {AC_FOR_INT_PARAM_TYPES(AC_GEN_STR)}; +const char* intparam_names[] = {AC_FOR_BUILTIN_INT_PARAM_TYPES(AC_GEN_STR) + AC_FOR_USER_INT_PARAM_TYPES(AC_GEN_STR)}; const char* realparam_names[] = {AC_FOR_REAL_PARAM_TYPES(AC_GEN_STR)}; const char* vtxbuf_names[] = {AC_FOR_VTXBUF_HANDLES(AC_GEN_STR)}; @@ -213,7 +214,7 @@ acLoadWithOffset(const AcMesh& host_mesh, const int3& src, const int num_vertice // printf("\n"); copyMeshToDevice(devices[i], STREAM_PRIMARY, host_mesh, da, da_local, copy_cells); } - printf("\n"); + // printf("\n"); } return AC_SUCCESS; } @@ -249,7 +250,7 @@ acStoreWithOffset(const int3& src, const int num_vertices, AcMesh* host_mesh) // printf("\n"); copyMeshToHost(devices[i], STREAM_PRIMARY, da_local, da, copy_cells, host_mesh); } - printf("\n"); + // printf("\n"); } acBoundcondStep(); // TODO note: this is not the most efficient way to do things return AC_SUCCESS;