// Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced // at the Lawrence Livermore National Laboratory. All Rights reserved. See files // LICENSE and NOTICE for details. LLNL-CODE-806117. // // This file is part of the MFEM library. For more information and source code // availability visit https://mfem.org. // // MFEM is free software; you can redistribute it and/or modify it under the // terms of the BSD-3 license. We welcome feedback and contributions, see file // CONTRIBUTING.md for details. #include "mfem.hpp" #include "unit_tests.hpp" #include "make_permuted_mesh.hpp" using namespace mfem; real_t x_fn(const Vector &xvec) { return xvec[0]; } real_t y_fn(const Vector &xvec) { return xvec[1]; } real_t z_fn(const Vector &xvec) { return xvec[2]; } real_t TestFaceRestriction(Mesh &mesh, int order) { int dim = mesh.Dimension(); DG_FECollection fec(order, dim, BasisType::GaussLobatto); FiniteElementSpace fes(&mesh, &fec); GridFunction gf(&fes); L2FaceRestriction restr(fes, ElementDofOrdering::LEXICOGRAPHIC, FaceType::Interior, L2FaceValues::DoubleValued); const int ndof_face = static_cast(pow(order+1, dim-1)); Vector face_values(ndof_face*2); real_t max_err = 0.0; for (int d=0; d