From 6bc9ff5eccf002d8ee74f16700520432b8fc5685 Mon Sep 17 00:00:00 2001 From: Erik Schnetter Date: Sat, 8 Jun 2024 12:26:05 -0400 Subject: [PATCH] TestODESolvers2: Apply boundary conditions properly --- TestODESolvers2/schedule.ccl | 24 +++++++++++++----------- TestODESolvers2/src/odes.cxx | 18 +++++++++--------- TestODESolvers2/test/test-dp87.par | 7 +++++++ TestODESolvers2/test/test-euler.par | 7 +++++++ TestODESolvers2/test/test-rk2.par | 7 +++++++ TestODESolvers2/test/test-rk3.par | 7 +++++++ TestODESolvers2/test/test-rk4.par | 7 +++++++ TestODESolvers2/test/test-rkf78.par | 7 +++++++ TestODESolvers2/test/test-ssprk3.par | 7 +++++++ 9 files changed, 71 insertions(+), 20 deletions(-) diff --git a/TestODESolvers2/schedule.ccl b/TestODESolvers2/schedule.ccl index 57b959069..5ecd633a0 100644 --- a/TestODESolvers2/schedule.ccl +++ b/TestODESolvers2/schedule.ccl @@ -7,26 +7,28 @@ STORAGE: state rhs error order SCHEDULE TestODESolvers2_Initial AT initial { LANG: C - WRITES: state(everywhere) + WRITES: state(interior) + SYNC: state } "Initialize state vector" SCHEDULE TestODESolvers2_RHS IN ODESolvers_RHS { LANG: C - READS: state(everywhere) - WRITES: rhs(everywhere) + READS: state(interior) + WRITES: rhs(interior) } "RHS function" -# SCHEDULE TestODESolvers2_Boundary AT poststep -# { -# LANG: C -# OPTIONS: global -# SYNC: state -# } "Apply boundary conditions to state vector" +SCHEDULE TestODESolvers2_Boundary IN ODESolvers_PostStep +{ + LANG: C + OPTIONS: global + SYNC: state +} "Apply boundary conditions to state vector" SCHEDULE TestODESolvers2_Error AT analysis { LANG: C - READS: state(everywhere) - WRITES: error(everywhere) order(everywhere) + READS: state(interior) + WRITES: error(interior) order(interior) + SYNC: error order } "Calculate error in state vector" diff --git a/TestODESolvers2/src/odes.cxx b/TestODESolvers2/src/odes.cxx index 582931e93..ecd0d8b7b 100644 --- a/TestODESolvers2/src/odes.cxx +++ b/TestODESolvers2/src/odes.cxx @@ -38,7 +38,7 @@ extern "C" void TestODESolvers2_Initial(CCTK_ARGUMENTS) { const Loop::GF3D exp1_(cctkGH, exp1); const Loop::GF3D exp2_(cctkGH, exp2); - Loop::loop_all<1, 1, 1>(cctkGH, [&](const Loop::PointDesc &p) { + Loop::loop_int<1, 1, 1>(cctkGH, [&](const Loop::PointDesc &p) { time_(p.I) = cctk_time; poly_(p.I) = pow(1 + cctk_time, porder); exp1_(p.I) = exp(cctk_time); @@ -46,12 +46,12 @@ extern "C" void TestODESolvers2_Initial(CCTK_ARGUMENTS) { }); } -// extern "C" void TestODESolvers2_Boundary(CCTK_ARGUMENTS) { -// DECLARE_CCTK_ARGUMENTS_TestODESolvers2_Boundary; -// DECLARE_CCTK_PARAMETERS; -// -// // do nothing -// } +extern "C" void TestODESolvers2_Boundary(CCTK_ARGUMENTS) { + DECLARE_CCTK_ARGUMENTS_TestODESolvers2_Boundary; + DECLARE_CCTK_PARAMETERS; + + // do nothing +} extern "C" void TestODESolvers2_RHS(CCTK_ARGUMENTS) { DECLARE_CCTK_ARGUMENTS_TestODESolvers2_RHS; @@ -66,7 +66,7 @@ extern "C" void TestODESolvers2_RHS(CCTK_ARGUMENTS) { const Loop::GF3D exp1_rhs_(cctkGH, exp1_rhs); const Loop::GF3D exp2_rhs_(cctkGH, exp2_rhs); - Loop::loop_all<1, 1, 1>(cctkGH, [&](const Loop::PointDesc &p) { + Loop::loop_int<1, 1, 1>(cctkGH, [&](const Loop::PointDesc &p) { if (porder > 0) if (abs(time_(p.I) - cctk_time) > 10 * numeric_limits::epsilon()) @@ -92,7 +92,7 @@ extern "C" void TestODESolvers2_Error(CCTK_ARGUMENTS) { const Loop::GF3D poly_err_(cctkGH, poly_err); const Loop::GF3D exp_order_(cctkGH, exp_order); - Loop::loop_all<1, 1, 1>(cctkGH, [&](const Loop::PointDesc &p) { + Loop::loop_int<1, 1, 1>(cctkGH, [&](const Loop::PointDesc &p) { time_err_(p.I) = time_(p.I) - cctk_time; poly_err_(p.I) = poly_(p.I) - pow(1 + cctk_time, porder); if (cctk_iteration == 0) { diff --git a/TestODESolvers2/test/test-dp87.par b/TestODESolvers2/test/test-dp87.par index d88902918..2eec0a1cd 100644 --- a/TestODESolvers2/test/test-dp87.par +++ b/TestODESolvers2/test/test-dp87.par @@ -24,6 +24,13 @@ CarpetX::blocking_factor_z = 1 CarpetX::ghost_size = 0 +CarpetX::boundary_x = "dirichlet" +CarpetX::boundary_y = "dirichlet" +CarpetX::boundary_z = "dirichlet" +CarpetX::boundary_upper_x = "dirichlet" +CarpetX::boundary_upper_y = "dirichlet" +CarpetX::boundary_upper_z = "dirichlet" + CarpetX::dtfac = 1.0 Cactus::cctk_itlast = 1 diff --git a/TestODESolvers2/test/test-euler.par b/TestODESolvers2/test/test-euler.par index 74e830571..123b1e984 100644 --- a/TestODESolvers2/test/test-euler.par +++ b/TestODESolvers2/test/test-euler.par @@ -24,6 +24,13 @@ CarpetX::blocking_factor_z = 1 CarpetX::ghost_size = 0 +CarpetX::boundary_x = "dirichlet" +CarpetX::boundary_y = "dirichlet" +CarpetX::boundary_z = "dirichlet" +CarpetX::boundary_upper_x = "dirichlet" +CarpetX::boundary_upper_y = "dirichlet" +CarpetX::boundary_upper_z = "dirichlet" + CarpetX::dtfac = 1.0 Cactus::cctk_itlast = 1 diff --git a/TestODESolvers2/test/test-rk2.par b/TestODESolvers2/test/test-rk2.par index 6ae19995e..bc7cdbbc4 100644 --- a/TestODESolvers2/test/test-rk2.par +++ b/TestODESolvers2/test/test-rk2.par @@ -24,6 +24,13 @@ CarpetX::blocking_factor_z = 1 CarpetX::ghost_size = 0 +CarpetX::boundary_x = "dirichlet" +CarpetX::boundary_y = "dirichlet" +CarpetX::boundary_z = "dirichlet" +CarpetX::boundary_upper_x = "dirichlet" +CarpetX::boundary_upper_y = "dirichlet" +CarpetX::boundary_upper_z = "dirichlet" + CarpetX::dtfac = 1.0 Cactus::cctk_itlast = 1 diff --git a/TestODESolvers2/test/test-rk3.par b/TestODESolvers2/test/test-rk3.par index f321b5513..6ad46a0bb 100644 --- a/TestODESolvers2/test/test-rk3.par +++ b/TestODESolvers2/test/test-rk3.par @@ -24,6 +24,13 @@ CarpetX::blocking_factor_z = 1 CarpetX::ghost_size = 0 +CarpetX::boundary_x = "dirichlet" +CarpetX::boundary_y = "dirichlet" +CarpetX::boundary_z = "dirichlet" +CarpetX::boundary_upper_x = "dirichlet" +CarpetX::boundary_upper_y = "dirichlet" +CarpetX::boundary_upper_z = "dirichlet" + CarpetX::dtfac = 1.0 Cactus::cctk_itlast = 1 diff --git a/TestODESolvers2/test/test-rk4.par b/TestODESolvers2/test/test-rk4.par index 40f6333fd..4ada66742 100644 --- a/TestODESolvers2/test/test-rk4.par +++ b/TestODESolvers2/test/test-rk4.par @@ -24,6 +24,13 @@ CarpetX::blocking_factor_z = 1 CarpetX::ghost_size = 0 +CarpetX::boundary_x = "dirichlet" +CarpetX::boundary_y = "dirichlet" +CarpetX::boundary_z = "dirichlet" +CarpetX::boundary_upper_x = "dirichlet" +CarpetX::boundary_upper_y = "dirichlet" +CarpetX::boundary_upper_z = "dirichlet" + CarpetX::dtfac = 1.0 Cactus::cctk_itlast = 1 diff --git a/TestODESolvers2/test/test-rkf78.par b/TestODESolvers2/test/test-rkf78.par index 3a21a07f9..1de07472b 100644 --- a/TestODESolvers2/test/test-rkf78.par +++ b/TestODESolvers2/test/test-rkf78.par @@ -24,6 +24,13 @@ CarpetX::blocking_factor_z = 1 CarpetX::ghost_size = 0 +CarpetX::boundary_x = "dirichlet" +CarpetX::boundary_y = "dirichlet" +CarpetX::boundary_z = "dirichlet" +CarpetX::boundary_upper_x = "dirichlet" +CarpetX::boundary_upper_y = "dirichlet" +CarpetX::boundary_upper_z = "dirichlet" + CarpetX::dtfac = 1.0 Cactus::cctk_itlast = 1 diff --git a/TestODESolvers2/test/test-ssprk3.par b/TestODESolvers2/test/test-ssprk3.par index 6138ddd1a..620bc7f4c 100644 --- a/TestODESolvers2/test/test-ssprk3.par +++ b/TestODESolvers2/test/test-ssprk3.par @@ -24,6 +24,13 @@ CarpetX::blocking_factor_z = 1 CarpetX::ghost_size = 0 +CarpetX::boundary_x = "dirichlet" +CarpetX::boundary_y = "dirichlet" +CarpetX::boundary_z = "dirichlet" +CarpetX::boundary_upper_x = "dirichlet" +CarpetX::boundary_upper_y = "dirichlet" +CarpetX::boundary_upper_z = "dirichlet" + CarpetX::dtfac = 1.0 Cactus::cctk_itlast = 1