From 614a0a1198957c4eb85b39319d75af59246da2d8 Mon Sep 17 00:00:00 2001 From: jpekkila Date: Tue, 6 Aug 2019 17:40:02 +0300 Subject: [PATCH] Added an autotesting script which tests for hydro, magnetic and mhd. Currently hydro and magnetic fail but full mhd works. This indicates that the equations in the hydro and magnetic conditionals have been changed but the autotests have not been updated to correspondingly --- .gitignore | 1 + acc/hydro_solver/stencil_defines.h | 163 ++++++++++++++++++++++++++ acc/magnetic_solver/stencil_defines.h | 163 ++++++++++++++++++++++++++ scripts/autotest.sh | 39 ++++++ 4 files changed, 366 insertions(+) create mode 100644 acc/hydro_solver/stencil_defines.h create mode 100644 acc/magnetic_solver/stencil_defines.h create mode 100755 scripts/autotest.sh diff --git a/.gitignore b/.gitignore index cd5ff6e..bfeb25d 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,4 @@ makefile~ build/ src/core/kernels/stencil_assembly.cuh src/core/kernels/stencil_process.cuh +tests/ diff --git a/acc/hydro_solver/stencil_defines.h b/acc/hydro_solver/stencil_defines.h new file mode 100644 index 0000000..666bd10 --- /dev/null +++ b/acc/hydro_solver/stencil_defines.h @@ -0,0 +1,163 @@ +/* + Copyright (C) 2014-2019, Johannes Pekkilae, Miikka Vaeisalae. + + This file is part of Astaroth. + + Astaroth is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Astaroth is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Astaroth. If not, see . +*/ +#pragma once + +/* + * ============================================================================= + * Logical switches + * ============================================================================= + */ +#define STENCIL_ORDER (6) +#define NGHOST (STENCIL_ORDER / 2) +#define LDENSITY (1) +#define LHYDRO (1) +#define LMAGNETIC (0) +#define LENTROPY (0) +#define LTEMPERATURE (0) +#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_USER_INT3_PARAM_TYPES(FUNC) + +#define AC_FOR_USER_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), + +#define AC_FOR_USER_REAL3_PARAM_TYPES(FUNC) +// clang-format on + +/* + * ============================================================================= + * User-defined vertex buffers + * ============================================================================= + */ +// clang-format off +#if LENTROPY +#define AC_FOR_VTXBUF_HANDLES(FUNC) \ + FUNC(VTXBUF_LNRHO), \ + FUNC(VTXBUF_UUX), \ + FUNC(VTXBUF_UUY), \ + FUNC(VTXBUF_UUZ), \ + FUNC(VTXBUF_AX), \ + FUNC(VTXBUF_AY), \ + FUNC(VTXBUF_AZ), \ + FUNC(VTXBUF_ENTROPY), +#elif LMAGNETIC +#define AC_FOR_VTXBUF_HANDLES(FUNC) \ + FUNC(VTXBUF_LNRHO), \ + FUNC(VTXBUF_UUX), \ + FUNC(VTXBUF_UUY), \ + FUNC(VTXBUF_UUZ), \ + FUNC(VTXBUF_AX), \ + FUNC(VTXBUF_AY), \ + FUNC(VTXBUF_AZ), +#elif LHYDRO +#define AC_FOR_VTXBUF_HANDLES(FUNC) \ + FUNC(VTXBUF_LNRHO), \ + FUNC(VTXBUF_UUX), \ + FUNC(VTXBUF_UUY), \ + FUNC(VTXBUF_UUZ), +#else +#define AC_FOR_VTXBUF_HANDLES(FUNC) \ + FUNC(VTXBUF_LNRHO), +#endif +// clang-format on diff --git a/acc/magnetic_solver/stencil_defines.h b/acc/magnetic_solver/stencil_defines.h new file mode 100644 index 0000000..48f4f3d --- /dev/null +++ b/acc/magnetic_solver/stencil_defines.h @@ -0,0 +1,163 @@ +/* + Copyright (C) 2014-2019, Johannes Pekkilae, Miikka Vaeisalae. + + This file is part of Astaroth. + + Astaroth is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Astaroth is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Astaroth. If not, see . +*/ +#pragma once + +/* + * ============================================================================= + * Logical switches + * ============================================================================= + */ +#define STENCIL_ORDER (6) +#define NGHOST (STENCIL_ORDER / 2) +#define LDENSITY (1) +#define LHYDRO (1) +#define LMAGNETIC (1) +#define LENTROPY (0) +#define LTEMPERATURE (0) +#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_USER_INT3_PARAM_TYPES(FUNC) + +#define AC_FOR_USER_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), + +#define AC_FOR_USER_REAL3_PARAM_TYPES(FUNC) +// clang-format on + +/* + * ============================================================================= + * User-defined vertex buffers + * ============================================================================= + */ +// clang-format off +#if LENTROPY +#define AC_FOR_VTXBUF_HANDLES(FUNC) \ + FUNC(VTXBUF_LNRHO), \ + FUNC(VTXBUF_UUX), \ + FUNC(VTXBUF_UUY), \ + FUNC(VTXBUF_UUZ), \ + FUNC(VTXBUF_AX), \ + FUNC(VTXBUF_AY), \ + FUNC(VTXBUF_AZ), \ + FUNC(VTXBUF_ENTROPY), +#elif LMAGNETIC +#define AC_FOR_VTXBUF_HANDLES(FUNC) \ + FUNC(VTXBUF_LNRHO), \ + FUNC(VTXBUF_UUX), \ + FUNC(VTXBUF_UUY), \ + FUNC(VTXBUF_UUZ), \ + FUNC(VTXBUF_AX), \ + FUNC(VTXBUF_AY), \ + FUNC(VTXBUF_AZ), +#elif LHYDRO +#define AC_FOR_VTXBUF_HANDLES(FUNC) \ + FUNC(VTXBUF_LNRHO), \ + FUNC(VTXBUF_UUX), \ + FUNC(VTXBUF_UUY), \ + FUNC(VTXBUF_UUZ), +#else +#define AC_FOR_VTXBUF_HANDLES(FUNC) \ + FUNC(VTXBUF_LNRHO), +#endif +// clang-format on diff --git a/scripts/autotest.sh b/scripts/autotest.sh new file mode 100755 index 0000000..cdaebf5 --- /dev/null +++ b/scripts/autotest.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +results=() + +# Parameters +# $1: String testname +# $2: String stencil_define_file +# $3: String stencil_assembly_file +# $4: String stencil_process_file +test_solver() { + TEST_DIR="tests/"$1 + ac_mkbuilddir.sh -b ${TEST_DIR} + cd ${TEST_DIR} + compile_acc.sh --header $2 --assembly $3 --process $4 + make -j + ${SRUN_COMMAND} ./ac_run -t + results+=(${TEST_DIR}" fail? "$?) +} + +NAME="hydro" +HEADER="hydro_solver/stencil_defines.h" +ASSEMBLY="mhd_solver/stencil_assembly.sas" +PROCESS="mhd_solver/stencil_process.sps" +test_solver ${NAME} ${HEADER} ${ASSEMBLY} ${PROCESS} + +NAME="magnetic" +HEADER="magnetic_solver/stencil_defines.h" +ASSEMBLY="mhd_solver/stencil_assembly.sas" +PROCESS="mhd_solver/stencil_process.sps" +test_solver ${NAME} ${HEADER} ${ASSEMBLY} ${PROCESS} + +NAME="mhd" +HEADER="mhd_solver/stencil_defines.h" +ASSEMBLY="mhd_solver/stencil_assembly.sas" +PROCESS="mhd_solver/stencil_process.sps" +test_solver ${NAME} ${HEADER} ${ASSEMBLY} ${PROCESS} + +# Print results +for i in "${results[@]}"; do echo "$i" ; done