diff --git a/nufi_poisson.cc b/nufi_poisson.cc index 98e272f..b7fbc6a 100644 --- a/nufi_poisson.cc +++ b/nufi_poisson.cc @@ -5,6 +5,7 @@ #include #include #include +#include #include #include @@ -16,6 +17,7 @@ #include #include +#include #include #include @@ -127,6 +129,7 @@ public: void set_Nv(unsigned int new_Nv); private: + void create_mesh(); void setup_system(); void assemble_system(); void solve(); @@ -147,6 +150,7 @@ private: unsigned int Nv; }; + template void PoissonProblem::set_Nv(unsigned int new_Nv) { @@ -161,6 +165,30 @@ PoissonProblem::PoissonProblem(unsigned int degree, unsigned int Nv) {} +// =-=-=-=-= Make Grid =-=-=-=-= + +template +void PoissonProblem::create_mesh() +{ + GridGenerator::hyper_cube(triangulation, + X_DOMAIN_LEFT, + X_DOMAIN_RIGHT); + + // Make x-dim boundaries periodic + std::vector::cell_iterator>> periodicity_vector; + + GridTools::collect_periodic_faces(triangulation, + 0, + 1, + 0, + periodicity_vector); + + triangulation.add_periodicity(periodicity_vector); + + triangulation.refine_global(GLOBAL_REFINEMENT); +} + template void PoissonProblem::setup_system() { @@ -341,11 +369,7 @@ void PoissonProblem::output_results() const template void PoissonProblem::run() { - GridGenerator::hyper_cube(triangulation, - X_DOMAIN_LEFT, - X_DOMAIN_RIGHT); - - triangulation.refine_global(GLOBAL_REFINEMENT); + create_mesh(); setup_system(); assemble_system();