Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Partial Refactoring of reconstruction methods done. #17

Merged
merged 5 commits into from
Jul 28, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
121 changes: 84 additions & 37 deletions AsterX/src/unit_tests/minmod.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -19,70 +19,117 @@ void AsterXTests::test_minmod(std::mt19937_64 &engine, int repetitions) {

for (int i = 0; i < repetitions; i++) {

CCTK_VINFO("Testing minmod repetition %i", i);
{
bool success{true};
const auto p1{positive_distrib(engine)};
const auto p2{positive_distrib(engine)};
const auto p3{positive_distrib(engine)};
const auto p4{positive_distrib(engine)};

const auto p1{positive_distrib(engine)};
const auto p2{positive_distrib(engine)};
const auto n1{negative_distrib(engine)};
const auto n2{negative_distrib(engine)};
const auto n3{negative_distrib(engine)};
const auto n4{negative_distrib(engine)};

const auto n1{negative_distrib(engine)};
const auto n2{negative_distrib(engine)};
const auto r1{real_distrib(engine)};
const auto r2{real_distrib(engine)};

const auto r1{real_distrib(engine)};
const auto r2{real_distrib(engine)};
const auto positive_minmod{minmod(p1, p2)};
const auto negative_minmod{minmod(n1, n2)};

const auto positive_minmod{minmod(p1, p2)};
const auto negative_minmod{minmod(n1, n2)};
const auto mixed_minmod_1{minmod(n1, p1)};
const auto mixed_minmod_2{minmod(n2, p2)};

const auto mixed_minmod_1{minmod(n1, p1)};
const auto mixed_minmod_2{minmod(n2, p2)};
const auto real_minmod_1{minmod(r1, r2)};

const auto real_minmod(minmod(r1, r2));
const auto min_p1p2{min(p1, p2)};
const auto max_n1n2{max(n1, n2)};

const auto min_p1p2{min(p1, p2)};
const auto max_n1n2{max(n1, n2)};
const auto max_abs{max(abs(r1), abs(r2))};

const auto max_abs{max(abs(r1), abs(r2))};
CCTK_VINFO("Testing minmod of positive numbers, rep. %i", i);
{

if (!isapprox(positive_minmod, min_p1p2)) {
CCTK_VINFO(" FAILED. Reason: minmod with positive "
"numbers expected %.f16 and got %.f16",
min_p1p2, positive_minmod);
success &= false;
"numbers %.f16 and %.f16 expected to be %.f16 but resulted "
"in %.f16",
p1, p2, min_p1p2, positive_minmod);
} else {
CCTK_VINFO(" PASSED.");
}
}

CCTK_VINFO("Testing minmod of negative numbers, rep. %i", i);
{
if (!isapprox(negative_minmod, max_n1n2)) {
CCTK_VINFO(" FAILED. Reason: minmod with negative "
"numbers expected %.f16 and got %.f16",
min_p1p2, negative_minmod);
success &= false;
"numbers %.f16 and %.f16 expected to be %.f16 but resulted "
"in %.f16",
n1, n2, max_n1n2, negative_minmod);
} else {
CCTK_VINFO(" PASSED.");
}
}

CCTK_VINFO("Testing minmod of mixed sign numbers, rep. %i", i);
{
if (!isapprox(mixed_minmod_1, CCTK_REAL(0))) {
CCTK_VINFO(" FAILED. Reason: minmod with mixed sign "
"numbers numbers expected 0.0 and got %.f16",
mixed_minmod_1);
success &= false;
CCTK_VINFO(
" FAILED. Reason: minmod with mixed sign "
"numbers %.f16 and %.f16 expected tp be 0.0 but resulted in %.f16",
n1, p1, mixed_minmod_1);
} else {
CCTK_VINFO(" PASSED.");
}

if (!isapprox(mixed_minmod_2, CCTK_REAL(0))) {
CCTK_VINFO(" FAILED. Reason: minmod with mixed sign "
"numbers numbers expected 0.0 and got %.f16",
mixed_minmod_2);
success &= false;
if (!isapprox(mixed_minmod_1, CCTK_REAL(0))) {
CCTK_VINFO(
" FAILED. Reason: minmod with mixed sign "
"numbers %.f16 and %.f16 expected tp be 0.0 but resulted in %.f16",
n2, p2, mixed_minmod_2);
} else {
CCTK_VINFO(" PASSED.");
}
}

if (!(real_minmod < max_abs || isapprox(real_minmod, max_abs))) {
CCTK_VINFO("Testing minmod(a, b) <= max(|a|,|b|), rep. %i", i);
{
if (!(real_minmod_1 < max_abs || isapprox(real_minmod_1, max_abs))) {
CCTK_VINFO(" FAILED. Reason: minmod with reals %.f16 and %.f16 "
"returned %.f, which is not bounded by %.f16",
r1, r2, real_minmod, max_abs);
success &= false;
r1, r2, real_minmod_1, max_abs);
} else {
CCTK_VINFO(" PASSED.");
}
}

CCTK_VINFO("Testing minmod(a, b, c, d) = minmod(minmod(a, b), minmod(c, "
"d)) for positive arguments, rep. %i",
i);
{
const auto expected_min{min(p1, min(p2, min(p3, p4)))};
const auto computed_min(minmod(minmod(p1, p2), minmod(p3, p4)));

if (!isapprox(expected_min, computed_min)) {
CCTK_VINFO(" FAILED. Reason: expected %.f16 and got %.f16",
expected_min, computed_min);
} else {
CCTK_VINFO(" PASSED.");
}
}

CCTK_VINFO("Testing minmod(a, b, c, d) = minmod(minmod(a, b), minmod(c, "
"d)) for negative arguments, rep. %i",
i);
{
const auto expected_max{max(n1, max(n2, max(n3, n4)))};
const auto computed_max(minmod(minmod(n1, n2), minmod(n3, n4)));

if (success) {
if (!isapprox(expected_max, computed_max)) {
CCTK_VINFO(" FAILED. Reason: expected %.f16 and got %.f16",
expected_max, computed_max);
} else {
CCTK_VINFO(" PASSED.");
}
}
}
}
}
103 changes: 103 additions & 0 deletions AsterX/test/Balsara1_shocktube_godunov.par
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
ActiveThorns = "
CarpetX
IOUtil
ODESolvers
ADMBase
HydroBase
TmunuBase
AsterSeeds
AsterX
EOSX
"

$nlevels = 1
$ncells = 100

Cactus::cctk_show_schedule = yes

Cactus::presync_mode = "mixed-error"

Cactus::terminate = "time"
Cactus::cctk_final_time = 0.40

ADMBase::initial_data = "Cartesian Minkowski"
ADMBase::initial_lapse = "one"
ADMBase::initial_shift = "zero"
ADMBase::initial_dtlapse = "none"
ADMBase::initial_dtshift = "none"

CarpetX::verbose = no

CarpetX::xmin = -0.5
CarpetX::ymin = -0.5
CarpetX::zmin = -0.5

CarpetX::xmax = +0.5
CarpetX::ymax = +0.5
CarpetX::zmax = +0.5

CarpetX::boundary_x = "linear extrapolation"
CarpetX::boundary_y = "linear extrapolation"
CarpetX::boundary_z = "linear extrapolation"

CarpetX::boundary_upper_x = "linear extrapolation"
CarpetX::boundary_upper_y = "linear extrapolation"
CarpetX::boundary_upper_z = "linear extrapolation"

CarpetX::ncells_x = $ncells
CarpetX::ncells_y = 2
CarpetX::ncells_z = 2

CarpetX::max_num_levels = $nlevels
CarpetX::regrid_every = 100000
CarpetX::blocking_factor_x = 1
CarpetX::blocking_factor_y = 1
CarpetX::blocking_factor_z = 1
CarpetX::regrid_error_threshold = 0.01

CarpetX::prolongation_type = "ddf"
CarpetX::ghost_size = 3
CarpetX::dtfac = 0.25

AsterSeeds::test_type = "1DTest"
AsterSeeds::test_case = "Balsara1"

ReconX::reconstruction_method = "godunov"
AsterX::flux_type = "HLLE"
AsterX::c2p_tol = 1e-8
AsterX::max_iter = 100
AsterX::debug_mode = "yes"

Con2PrimFactory::unit_test = "yes"

EOSX::evol_eos_name = "IdealGas"
EOSX::gl_gamma = 2.0
EOSX::poly_gamma = 2.0
EOSX::rho_max = 10000
EOSX::eps_max = 10000

ODESolvers::method = "RK4"

IO::out_dir = $parfile
IO::out_every = 10
IO::parfile_write = no

CarpetX::out_metadata = no
CarpetX::out_norm_vars = " "
CarpetX::out_norm_omit_unstable = yes

CarpetX::out_silo_vars = "
HydroBase::rho
HydroBase::vel
HydroBase::eps
HydroBase::press
HydroBase::Bvec
"

CarpetX::out_tsv_vars = "
HydroBase::rho
HydroBase::vel
HydroBase::eps
HydroBase::press
HydroBase::Bvec
"
103 changes: 103 additions & 0 deletions AsterX/test/Balsara1_shocktube_minmod.par
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
ActiveThorns = "
CarpetX
IOUtil
ODESolvers
ADMBase
HydroBase
TmunuBase
AsterSeeds
AsterX
EOSX
"

$nlevels = 1
$ncells = 50

Cactus::cctk_show_schedule = yes

Cactus::presync_mode = "mixed-error"

Cactus::terminate = "time"
Cactus::cctk_final_time = 0.40

ADMBase::initial_data = "Cartesian Minkowski"
ADMBase::initial_lapse = "one"
ADMBase::initial_shift = "zero"
ADMBase::initial_dtlapse = "none"
ADMBase::initial_dtshift = "none"

CarpetX::verbose = no

CarpetX::xmin = -0.5
CarpetX::ymin = -0.5
CarpetX::zmin = -0.5

CarpetX::xmax = +0.5
CarpetX::ymax = +0.5
CarpetX::zmax = +0.5

CarpetX::boundary_x = "linear extrapolation"
CarpetX::boundary_y = "linear extrapolation"
CarpetX::boundary_z = "linear extrapolation"

CarpetX::boundary_upper_x = "linear extrapolation"
CarpetX::boundary_upper_y = "linear extrapolation"
CarpetX::boundary_upper_z = "linear extrapolation"

CarpetX::ncells_x = $ncells
CarpetX::ncells_y = 2
CarpetX::ncells_z = 2

CarpetX::max_num_levels = $nlevels
CarpetX::regrid_every = 100000
CarpetX::blocking_factor_x = 1
CarpetX::blocking_factor_y = 1
CarpetX::blocking_factor_z = 1
CarpetX::regrid_error_threshold = 0.01

CarpetX::prolongation_type = "ddf"
CarpetX::ghost_size = 3
CarpetX::dtfac = 0.25

AsterSeeds::test_type = "1DTest"
AsterSeeds::test_case = "Balsara1"

ReconX::reconstruction_method = "minmod"
AsterX::flux_type = "HLLE"
AsterX::c2p_tol = 1e-8
AsterX::max_iter = 100
AsterX::debug_mode = "yes"

Con2PrimFactory::unit_test = "yes"

EOSX::evol_eos_name = "IdealGas"
EOSX::gl_gamma = 2.0
EOSX::poly_gamma = 2.0
EOSX::rho_max = 10000
EOSX::eps_max = 10000

ODESolvers::method = "RK4"

IO::out_dir = $parfile
IO::out_every = 10
IO::parfile_write = no

CarpetX::out_metadata = no
CarpetX::out_norm_vars = " "
CarpetX::out_norm_omit_unstable = yes

CarpetX::out_silo_vars = "
HydroBase::rho
HydroBase::vel
HydroBase::eps
HydroBase::press
HydroBase::Bvec
"

CarpetX::out_tsv_vars = "
HydroBase::rho
HydroBase::vel
HydroBase::eps
HydroBase::press
HydroBase::Bvec
"
Loading